Repository navigation
Uprate reported Council Tax Reduction with household bills - #2680
Conversation
Aggregate impact on certified data: passBase Checks: 0 broken by this change, 1 failing on both sides, 0 fixed. Moves flagged for review: 46 (thresholds in Notes
Moves flagged for review
6 more flags are in the report artifact. Receipts by tax head
Spending by benefit and service
Caseloads
Government balance, each component counted once
Model totals
Household income totals
Poverty rates
People in poverty
Inequality
Mean household net income in each side's own deciles
Standard reform costings (change in gov_balance)
Standard reforms: change in each reform's target
Household net income by decileMean change in household net income per household, and as a share of the decile's base income; households stay in the base run's deciles.
No change in any year: population. Checks failing on both base and head (1)
Counted-once checkEach of 91 components was raised by £1 per unit in 2026-27, and every head of its totals was read household by household: its own head must rise by exactly £1, no other tax head may move, no other benefit may rise, and the model's own total must move by what its heads moved. A head that breaks a rule is measured again twice: with every other head held at its baseline value, and with every other head held at its value after the first £1 while the component rises again. It fails where either still shows the response. 0 failed; 0 were skipped.
Provenance
Dataset: Receipts by tax head: head levels
Spending by benefit and service: head levels
Caseloads: head levels
Government balance, each component counted once: head levels
Model totals: head levels
Household income totals: head levels
Population: head levels
Poverty rates: head levels
People in poverty: head levels
Inequality: head levels
Mean household net income in each side's own deciles: head levels
Standard reform costings (change in gov_balance): head levels
Standard reforms: change in each reform's target: head levels
|
|
Round 1 at Verdict: this fixes #2674 as described, and the index choice is sound. I have no must or should findings, only three nits. It is still a draft, so this is a comment, not an approval. Against #2674 and our triage there:
Index choice: using the bill factor (each region's OBR council tax receipts growth, net of household weight growth) keeps each reported reduction at the same share of its bill. That fits how CTR schemes work: the maximum award is a share of the liability (for example SI 2012/2885 Sch 1 para 7, the default English scheme for pensioners). It also fits the OBR series, which is receipts net of CTR. CPI would have left the reports falling behind bills that grow 5 to 6% a year. The constant share does ignore income growth against the scheme's applicable amounts. That is an approximation, and the docs at Aggregate-impact report (run on this head,
Findings:
What I ran, at
What I did not do: no population run of my own (I used the CI aggregate report), and no check of NI FRS records. 🤖 Generated with Claude Code |
|
Addressed all three nits from the review.
Verification: Pushed The PR remains ready for review with the existing Vahid review request pending. |
|
Round 2 at Status of the round 1 nits (round 1):
New findings in What I ran, at
What I did not do: I did not re-read the unchanged model code beyond round 1, did no population run of my own, and did not check NI FRS records (that is #2681). Verdict: no must or should findings, CI green, mergeable and not a draft. I am approving at 🤖 Generated with Claude Code |
vahid-ahmadi
left a comment
There was a problem hiding this comment.
Approving at 96a3be7; see the comment above.
Fixes #2674
Reported Council Tax Reduction stayed at its data-year cash value while projected council tax bills grew. This reduced the share of the bill covered for working-age claimants whose local scheme uses the reported fallback.
Project each existing person-level report with its household's council tax factor, including the existing country receipts and household-weight adjustment. Reset the report alongside the bill when economic assumptions are disabled. Preserve missing report columns and Northern Ireland's flat factor. Document the constant-share projection assumption and its limits.
Reproducer: policyengine_uk/tests/test_council_tax_uprating.py::test_reported_reduction_keeps_each_persons_share_of_their_household_bill; policyengine_uk/tests/test_council_tax_uprating.py::test_unsupported_working_age_claim_keeps_half_the_projected_council_tax_bill
Eight new regression cases cover one- and multi-year projections, multiple people per household, shuffled household IDs, country factors, zero awards, sparse columns, reset/reprojection and the actual unsupported English working-age fallback. The unchanged base fails three causal cases: the 2025 and 2030 share-of-bill cases, and the unsupported working-age fallback case listed above. The reset test remains separate regression protection:
policyengine_uk/tests/test_council_tax_uprating.py::test_reset_restores_reported_reduction_and_reprojection_is_deterministicpasses on the unchanged base and guards reset behavior once reported awards grow. Atea9ee921b, the combined local suite passed all 104 tests in 137.02 seconds, anduv run --frozen --no-sync make formatpassed formatting and lint.The change applies to materialized dataset projection. It does not change statutory eligibility or award formulas. Beyond the stored horizon, both bill and report retain their existing cash-value carry-forward behavior. No private population run or Northern Ireland benefit classification audit was performed. Northern Ireland follow-up will check whether nonzero reported amounts represent domestic rate relief and determine the appropriate classification and projection after that audit.
axiom: n/a: microsimulation dataset projection of reported inputs; no statutory formula or parameter changes.
Local test command:
uv run --frozen --no-sync pytest policyengine_uk/tests/test_council_tax_uprating.py policyengine_uk/tests/test_no_economic_assumptions.py policyengine_uk/tests/test_uprating_inputs_reach_data.py policyengine_uk/tests/test_water_uprating.py policyengine_uk/tests/test_domestic_rates_uprating.py policyengine_uk/tests/test_rent_uprating.py policyengine_uk/tests/test_projection_horizon.py policyengine_uk/tests/code_health/test_uprating_declarations.py -qThe changelog cites the historical
enhanced_frs_2024_25CI comparison atea9ee921bagainstfba0c0a53, as summarized in Vahid’s review. This round adds no new population measurement.