Repository navigation
Conversation
Every scheme council_tax_reduction_applicable_income serves counts them: SI 2012/2885 Sch 1 para 16(1)(j), SI 2012/2886 Sch paras 39(1)(j) and 54(1), WSI 2013/3029 Sch 1 para 10(1)(j) and Sch 6 para 17(1), SSI 2012/319 reg 27(1)(j) and SSI 2021/249 reg 57(1)(b)(ix)-(xi). War pensions and AFCS payments stay uncounted: Scotland disregards or omits them, and English and Welsh councils may disregard beyond the prescribed £10 a week (WSI 2013/3029 reg 34(5); LGFA 1992 Sch 1A para 2(11), s.13A(1)(c)). Part of #2510. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Kingston upon Thames (Sch 8 para 20, capped at £20 a week by para 40) and Newham (Sch 8 para 19) disregard only £10 a week of each war disablement pension, war widow's pension and AFCS guaranteed income payment for working-age applicants. Westminster, Oxford and Merton disregard them in full, and the national schemes keep the full disregard. The per-payment reading follows Pension Credit's identically worded Sch IV para 1. Part of #2510. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
YAML cases per scheme at the 2026-27 statutory rates (SI 2026/148), and Hypothesis properties: Council Tax Reduction and Pension Credit assess the same pension-age income; each benefit counts pound for pound in every scheme; war pensions count only under the Kingston upon Thames and Newham working-age schemes, less £10 a week each. Part of #2510. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each council's pensioner schedule (Sch 6 para 1) disregards only £10 a week of each war pension, with no family limit; Kingston's £20 a week limit (Sch 8 para 40) is a working-age rule. Elsewhere the national pensioner scheme keeps the full disregard. Part of #2510. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
df1496e to
f027311
Compare
…r's benefits Review of f027311 found that Newham's s.13A(1)(c) policy (para 2.1) adds, automatically, the reduction a full disregard of war compensation payments would give, and Kingston upon Thames's para 36(6) speaks of a full disregard while its schedules keep the £10. So the £10 branch for those councils overstated their council tax; war pensions stay uncounted everywhere, with each council's text noted. IIDB, SDA and IB now count for the applicant and partner only (SI 2012/2885 Sch 1 para 11; SSI 2021/249 reg 36(1)), not for dependants that the wider member mask still reaches. The award cases asserting the 256.00 pensioner allowance use claimants who reached pensionable age before April 2021. New properties: war pensions never count, and dependants' benefits never count. Part of #2510. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… property With IB, SDA and IIDB now counted, Council Tax Reduction can end the guarantee credit passport on more income than Pension Credit counted where an overlapping benefit cuts a Scottish carer's Carer Support Payment: Scottish pension-age CTR counts the payment before the CSP Regs reg 16(2) reduction (SSI 2012/319 reg 27(3) and (5)), Pension Credit after it (SPC Regs reg 15(4)(g)). Those families are left out of the boundary invariant until that reading is decided. Part of #2510. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rtner The benefit unit's claimant-or-partner flag picks the wrong people where a household head applies alone: it counted another couple's IIDB against the head's claim and left out her own. Use is_council_tax_reduction_applicant_or_partner, which is the head alone in that case and the claimant and partner otherwise. Two YAML cases cover it. Part of #2510. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…operties CI found a draw where a dependant of 17 was under 16 years younger than a claimant of 32, so the model's presumption read them as a partner and their IIDB counted. The generated situations now set is_claimant_or_partner for every member, and that draw is pinned as an explicit example. Part of #2510. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Aggregate impact on certified data: passBase Checks: 0 broken by this change, 1 failing on both sides, 0 fixed. Moves flagged for review: 0 (thresholds in Notes
Moves flagged for reviewNone. Spending by benefit and service
Caseloads
Government balance, each component counted once
Model totals
Household income totals
Inequality
Mean household net income in each side's own deciles
Standard reform costings (change in gov_balance)
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: receipts by tax head; components the model counts twice; population; poverty rates; people in poverty; standard reforms: change in each reform's target. Checks failing on both base and head (1)
Counted-once checkEach of 84 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
Components the model counts twice: 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
|
Fixes #2510
Stacked on #2507 (base
pension-credit-prescribed-benefits, head 4401f73). GitHub retargets this PR tomainwhen #2507 merges.What and why
council_tax_reduction_applicable_incomeleft out industrial injuries disablement benefit (iidb), severe disablement allowance (sda) and incapacity benefit (incapacity_benefit). Every Council Tax Reduction (CTR) scheme the variable serves counts all three:Pension Credit counts them too (#2507), so once the guarantee credit passport ended, CTR was assessed on less income than Pension Credit and Housing Benefit.
Two details:
is_council_tax_reduction_applicant_or_partnerinstead. That is the claimant and partner, or the household head alone where the head applies alone. So a dependant's IIDB, SDA or IB is not counted, and nor is another couple's in a head's benefit unit.iidbis the whole reported payment and cannot separate them, as in Count IIDB, SDA, incapacity benefit and maternity allowance in Pension Credit income #2507.War pensions and AFCS payments: unchanged
afcsandwar_widows_pensionstay uncounted, as #2508 leaves them for Housing Benefit.Scotland counts none of them. SSI 2012/319 reg 31(10) and Sch 3 para 1 disregard "each of the following payments" in full, and SSI 2021/249 reg 57(1) does not name them.
England and Wales prescribe £10 a week (SI 2012/2885 Sch 5 para 1; WSI 2013/3029 Sch 4 para 1 and Sch 9 para 20), and councils may go further:
The councils whose schemes the model reads (2026-27 texts, retrieved 2026-10-19 and 2026-10-20) mostly relieve war pensions in full:
The full disregard approximates each of these. It over-disregards guaranteed income payments in Wales, which reg 34(5) does not cover, and anywhere a council keeps the prescribed £10 without further relief.
afcscannot separate guaranteed income payments from war disablement pensions, or either from the constant attendance additions that every scheme disregards in full.An earlier head of this PR (f027311) counted war pensions less £10 a week per payment in Kingston and Newham. Independent review found Newham's automatic top-up and Kingston's conflicting para 36(6), so that branch and its three parameters are gone.
Not changed
test_pension_credit_prescribed_benefits_properties.py::test_net_income_does_not_fall_where_guarantee_credit_ends) fails once CTR counts IB.carer_support_payment_pre_overlapexceedscarer_support_payment. The owner of Count IIDB, SDA, incapacity benefit and maternity allowance in Pension Credit income #2507 has been told.Invariants
Tested with Hypothesis in
policyengine_uk/tests/test_council_tax_reduction_prescribed_benefits_properties.py. Draws are singles and couples in 2026 not claiming Universal Credit, in Maidstone, Cardiff, Glasgow, Westminster, Merton, Kingston upon Thames, Newham and Oxford.Differential, CTR vs Pension Credit. Draws are pension-age families with State Pension, private pension, IIDB, IB and SDA, no earnings, no pension contributions and savings of at most £10,000. CTR income is:
In 10 draws over a private-pension grid this covers 384 general-rules cells, 6 savings-credit-only cells and 30 guarantee-credit cells.
Pound for pound, every scheme. Under the general rules, wherever the zero floor does not bind, raising IIDB or IB, or awarding SDA, raises CTR income plus the family's income tax and NI by exactly the added amount. The award never rises where the route is unchanged. In the national schemes, where both awards are partial, it falls by 20% of the rise in income.
War pensions never count. Adding war pensions and AFCS payments leaves CTR income unchanged under the general rules. Every draw includes a Kingston upon Thames couple.
Dependants' benefits never count. Under the general rules, a dependant aged 16 to 19 with IIDB, IB within the personal allowance, or SDA leaves CTR income unchanged.
Tests
Expected values are hand-computed from the 2026-27 rates in SI 2026/148 Sch 1:
New and changed files:
council_tax_reduction_prescribed_benefits.yaml(new, 18 cases). It covers:Run on this branch:
gov/local_authorities,gov/dwp/pension_creditandfinance/benefit/family/housing_benefit: 708 passed.pytest -n 4overtest_council_tax_reduction_*,test_pension_credit_*,test_housing_benefit_*andtest_benefit_cap_and_ctr_pension_age_properties.py: 107 passed at e135b13. At e38883e, thetest_council_tax_reduction_*files plus the two prescribed-benefits property files: 42 passed. The full suite, dispatched on this branch because CI does not run on a PR whose base is notmain:ruff format --checkandruff check(0.17.0) on the changed files: clean.Against #2507's head (a
git archiveexport of 4401f73, with the new tests copied in):Against this PR's earlier heads:
Reproducer:
policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_prescribed_benefits.yaml::IIDB counts as pension-age Council Tax Reduction income in England,policyengine_uk/tests/test_council_tax_reduction_prescribed_benefits_properties.py::test_council_tax_reduction_and_pension_credit_assess_the_same_incomeReview
Independent reviews ran on Codex lanes.
Impact
On PE-UK's certified data (UK hub, 2026-10-20). Run 39410932080 compares main
8ac9d9739(with #2507 merged) with main merged with this headf12016368, on policyengine-uk-data 1.58.1, fiscal years 2025-26 to 2031-32.The 1.58.0 measurement below agrees.
Two real 2026 Microsimulations ran on the certified Enhanced FRS (uk-data 1.58.0,
enhanced_frs_2024_25.h5, sha256 5ba399ea5ab9). They compare #2507's head 4401f73 (base) with this branch's model at e38883e (later commits change tests only). Each ran from a cleangit archiveexport, through the machine-wide heavy lock.council_tax_reduction_applicable_income)council_tax_benefit)Poverty (BHC and AHC, all people and State Pension age) is unchanged.
Who it reaches. CTR income rises for 358 records, 137,668 weighted benefit units, every one with IIDB, SDA or IB; no family without them changes. Of those 358:
The 8 whose award falls are pension-age families in England and Wales. They lose £304 a year on average, £0.43m in all. The large income change and small award change come mainly from take-up: the model has most of these families not claiming CTR.
axiom: TheAxiomFoundation/rulespec-uk#474 queued
🤖 Generated with Claude Code