# Better open data: the Forexebug register workbench

> A reusable administrative crosswalk and a modelled financial register, with the status of every value made visible.

- **Canonical edition:** [mariuscomper.uk/forexebug-deschis/en/](https://mariuscomper.uk/forexebug-deschis/en/)
- **Crosswalk identities:** 3,187 Romanian UATs and sectors with SIRUTA, official name, CUI, QID, territorial codes, and contact fields
- **Entities with 2021 Census population:** 3,187
- **Modelled financial series:** 31,870 rows for 2016–2025; official Forexebug rows imported in this release: 0
- **Documented uses:** 50

## What is useful now

The project uses the identity layer from [Puntea administrativă](https://mariuscomper.uk/puntea-administrativa/) as a shared join surface. Search by name, county, CUI, SIRUTA, QID, or postal code; open a canonical profile; or resolve a list in batch. Missing CUI values remain null, and all six Bucharest sectors have verified 2021 Census populations.

## Financial status

Monetary values, county aggregates, quadrants, and rankings are a deterministic modelled demonstrator. The build uses seed 42 and the formulas published in `scripts/build_dataset.py`, so the analysis workflow can be tested while official Forexebug observations are prepared for ingestion and verification.

The model is suitable for testing queries, visualisations, and joins. It is not suitable for claims about a real municipality's executed budget.

## Open artefacts

- [Administrative crosswalk JSON](https://mariuscomper.uk/forexebug-deschis/data/administrative-crosswalk.json)
- [Administrative crosswalk CSV](https://mariuscomper.uk/forexebug-deschis/data/administrative-crosswalk.csv)
- [Modelled Parquet register](https://mariuscomper.uk/forexebug-deschis/data/registru-bugete-locale-2016-2025.parquet)
- [UAT index](https://mariuscomper.uk/forexebug-deschis/data/uats-index.json)
- [Schema and data dictionary](https://mariuscomper.uk/forexebug-deschis/data/schema.json)
- [Quality report](https://mariuscomper.uk/forexebug-deschis/data/data-quality.json)
- [Manifest with SHA-256 hashes](https://mariuscomper.uk/forexebug-deschis/data/manifest.json)
- [Catalogue of the 50 uses](https://mariuscomper.uk/forexebug-deschis/data/use-cases.json)
- [OpenAPI 3.1 API contract](https://mariuscomper.uk/forexebug-deschis/api/openapi.json)

## Quick DuckDB reproduction

```sql
SELECT an,
       count(*) AS rows,
       round(sum(venituri_totale) / 1e9, 2) AS revenue_bn,
       round(avg(autonomie_fiscala), 1) AS average_autonomy
FROM 'registru-bugete-locale-2016-2025.parquet'
GROUP BY an
ORDER BY an;
```

For a join that preserves identity, use `siruta` between the Parquet file and `administrative-crosswalk.json`. The web page and quality report explain the sources, limits, and formulas.
