Repository navigation
Add SPF Finances municipal PIT surcharge rates, income year 2025 - #387
Merged
Merged
Conversation
Preserve all 565 commune rates printed in FPS Finance's assessment-year 2026 PDF, with exact page, column-block and text-line locators and a bijective mapping to Statbel's NIS 2025 communes (558 exact, 7 orthographic). Key the facts as tax_year 2025, the income year these rates tax, with income_year == 2025 and assessment_year == 2026 constraints evidenced by source-row columns and the legal vintage income_year_2025_assessment_year_2026, as in statbel/fiscal_income_distribution_2023. The printed assessment-year label is kept verbatim. The CSV and PDF are in R2 ledger-raw, verified by SHA-256 readback. Co-Authored-By: GPT-6.1 Sol <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Address the review of 875dea6: - Each fact's geography name is now the commune name SPF prints, as the harness requires of every publisher (chronicle#266). Nine differ from Statbel's (Bruxelles/Brussels, Waimes/Weismes and seven spelling or punctuation variants); the mapping audit keeps Statbel's name beside each, and the bundle reports them as cross-package name warnings. - Drop the per-row publisher_commune filter and constraint and its dimension label. The NIS code identifies the commune, so a spelling no longer changes aggregate or semantic fact keys. The printed label stays in the CSV, the source-row id and a guard cell. The regenerated CSV is in R2 ledger-raw under its new hash, verified by SHA-256 readback. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
For all 565 facts, respell the commune wherever the fact carries it (geography name, filter and constraint values) as Statbel's name and casefolded, uppercased and accent- and punctuation-stripped forms; both aggregate and semantic keys must not change. Moving a fact to another NIS code must change both. The respelling fails on the 875dea6 shape, where the printed name was a filter and constraint. Hypothesis is not a Chronicle dependency, and adding one is a shared dependency change, so the property is checked exhaustively over the package's facts and a fixed set of respellings instead. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The package adds 565 government facts at tax_year:2025, one per existing commune key, so geography_count is unchanged and commune:11002 goes from 9 to 10. It adds one source, one source table and one built package. SPF spells nine communes unlike Statbel, and the package keeps SPF's wording, so nine commune geography-name warnings are added (123 -> 132). The deltas were measured with Chronicle's own bundle functions. A replay of the full bundle test against #385's CI bundle, with #386's seven skipped county packages and this package added, passes, and main's unchanged test fails against it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
force-pushed
the
be/b2b-commune-surcharge
branch
from
October 24, 2026 08:17
650620b to
9323e9e
Compare
MaxGhenis
added a commit
that referenced
this pull request
Oct 24, 2026
…ages The two packages add 34,881 person facts at country:BE: 34,629 quarterly daily-wage-class cells from 2023 Q1 to 2026 Q1, and 252 annual key figures for 2020-2025. They add two sources, two source tables and two built packages. They add no new geography, period or entity key and no warning. This stacks on #387's pins. The deltas were measured with Chronicle's own bundle functions and confirmed against #388's CI bundle on the old base. A replay of the full bundle test against #385's CI bundle, with #386's skipped packages, #387's package and these two packages added, passes, and #387's test fails against it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
added a commit
that referenced
this pull request
Oct 24, 2026
The package adds 35 calendar-2025 facts: 19 person, 2 benefit_unit premium payments and 14 government expenditure. It adds one statistical_scope geography, the German-speaking Community, plus one source, one source table and one built package. It adds no warning. This stacks on #388's pins. The deltas were measured with Chronicle's own bundle functions and confirmed against #389's CI bundle on the old base. A replay of the full bundle test against #385's CI bundle, with #386's skipped packages and #387's, #388's and this package added, passes, and #388's test fails against it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
marked this pull request as ready for review
October 24, 2026 08:25
Contributor
Author
|
Delta review at 9323e9e (GPT-6.1 Sol, Subfleet run 20261024-041803-chronicle387-review-r3): APPROVE, no findings. ledger-source-fidelity: PASS. ledger-boundary: PASS.
This merges as a merge commit once CI passes at 9323e9e. #388 and #389 are stacked on it and merge after it, each at its own tested head. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Belgian transport port (ruling d048), source package B2b: municipal personal-income-tax surcharge rates by commune.
What it adds
packages/spf_finances/municipal_tax_rate_ay2026(aliasspf-finances-municipal-tax-rate-ay2026): FPS Finance's five-page PDF "Municipal tax rates (%) for tax assessment year 2026".7,5→7.5), no rounding. Zero is kept (Knokke-Heist0,0).unit: percent,aggregation: rate,entity: government,provenance_class: administrative.statbel/population_structure_commune_2025.commune_mapping_audit.csv.statbel-fiscal-income-2023-nis-2025), so the package adds no new geography keys.conflicting_geography_name_across_packageswarnings (chronicle/bundle.py). The audit keeps Statbel's name beside each.Period
The PDF's assessment year 2026 taxes income of 2025. The facts follow the existing Belgian tax packages (
statbel/fiscal_income_distribution_2023,spf_finances/pit_2023,statbel/fiscal_income_2023_nis_2025):tax_year: 2025(income year);income_year == 2025("Publisher income year") andassessment_year == 2026("Publisher assessment year"), evidenced by matching CSV columns;income_year_2025_assessment_year_2026;source_period_labelkeeps "for tax assessment year 2026" verbatim.No 2027 assessment-year rates are inferred for 2026 income.
Invariants
build_package.pyregenerates the CSV, audit, manifest andsource_package.yamlbyte for byte.build-suitelineage coverage is 1.0 with 0 acceptance errors.Checks
chronicle validate-package … --year 2025chronicle build-suite … --year 2025ruff check/ruff format --checkon new filesledger-raw: CSV84fd7521…, PDF051211d8…tests/test_chronicle_spf_finances_municipal_tax_rate.py)tests/test_chronicle_bundle.py(9323e9e)Rebase
Rebased from 200bf6d onto main ba2509a, after #385 and #386.
git range-diffshows all three commits unchanged, and the package, data, changelog and package test are byte-identical to 650620b. The bundle pins are the only new commit.Shared code
Only the
SOURCE_PACKAGE_ALIASESregistration line inchronicle/source_package.py.🤖 Generated with Claude Code