PolicyEngine / PolicyEngine/chronicle
Belgium target expansion: households, income distribution, work regime, pensions, commune grain (all open data)
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 0
- Forks
- 1
- Avg merge
- 11h 48m
- Merged PRs (30d)
- 45
Description
Follow-up to #72 and the populace#259 pilot: the calibration currently binds four Belgian target families (NUTS1 age×sex demography, one national fiscal-income total, one ONSS total, one ONEM total). Everything below is open data — no SILC or licensed microdata anywhere — and each family closes a named gap in the pilot. Same publisher-package pattern as #72.
Already in Ledger but unused by the calibration (no new package needed):
statbel/fiscal_income_commune_2023_nis_2025carries per-commune fiscal income (581 communes, NIS 2025 crosswalk alongside). The pilot summed it to one national total; binding it at commune or arrondissement grain adds hundreds of geographic income targets and gives the population a real commune assignment (which the regional benefit routing and communal surcharge rates need).
New packages, in priority order:
- Statbel households by size and region (household/family statistics from the national register, published annually by commune). Binds the household count — the pilot's weight sum floats at 4.38M vs ~5.0M actual households — and the size distribution that drives equivalization, child benefit ranks, and the couple/single split.
- Statbel fiscal income distribution by bracket (the fiscal statistics publication includes counts and amounts by income class, not just totals/means). Turns the single income total into a distribution constraint — directly fixes the "US wage shape" artifact (e.g. the work-bonus mass at low wages).
- ONSS employment by regime (open-data quarterly stats: employees by full-time/part-time, blue/white-collar, region). Gives part-time/full-time targets so workers stop being labeled uniformly full-time-full-year — the largest driver of low-wage divergence between the engines' FTE-based work-bonus machinery.
- SFPD / PensionStat.be pension statistics (beneficiary counts and pension mass by scheme and region). Required to extend the PIT base beyond wages — pensions are the largest missing income category (fiscal income EUR 274.7B vs EUR 159.7B wages).
- ONEM/RVA unemployment by region and category (the existing package is national; the publisher tables carry region/age/household-status splits). Feeds the now-encoded unemployment pipeline's household-status rates.
- SPF Finances PIT assessed by bracket (statistics of assessment by income class). An out-of-sample check on the tax distribution, not just the total.
- Statbel births by region (for the birth-allowance aggregate) and kids by single year of age × region (child-benefit age supplements reconciliation; the NUTS1 package's bands are too coarse for the 4/11/17 age steps).
- Eurostat/Statbel published SILC indicators for BE (median equivalized income, AROP by region, quintile shares — the published tables are open even though microdata is licensed). These become validation targets for the distributional outputs rather than calibration constraints.
Each package: publisher CSV(s) under db/data/<publisher>/<package>/, value_id rows with period, geography_id, unit, and source_url per the facts-only store conventions. populace's be/target_references.json then binds them in a calibration v2.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading issue #72 and the populace#259 pilot, then inspect the existing publisher-package data under db/data/ and the calibration bindings in be/target_references.json. Follow the facts-only store conventions for publisher CSVs and value_id rows, and consider the listed target families in priority order. Done means the required open-data packages are recorded and bound in calibration v2.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- data
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100