Disregard guarantee credit recipients' income and capital in pensioner council tax reduction - #1909
Conversation
…r CTR The England pensioner, Wales and Scotland council tax reduction schemes disregard the whole income and capital of an applicant who, or whose partner, is in receipt of Pension Credit guarantee credit (SI 2012/2885 Sch 1 para 13; WSI 2013/3029 Sch 1 para 7; SSI 2012/319 reg 24). PE-UK tapered them on income after tax and applied the 16,000 capital limit to household savings, so a guarantee credit recipient's CTR rose when their State Pension fell and they lost all CTR with savings over 16,000. In savings-credit-only cases the schemes use the Secretary of State's Pension Credit assessment of income, adjusted for the savings credit payable, and of capital (para 14; para 8; reg 25). - in_receipt_of_guarantee_credit (shared with the HB passport fix) and in_receipt_of_savings_credit_only test receipt: Pension Credit eligibility, take-up and a positive component. guarantee_credit alone is positive for working-age and non-claiming units. - council_tax_reduction_applicable_income is 0 on guarantee credit and pension_credit_income + savings_credit on savings credit only. - New council_tax_reduction_assessable_capital feeds the capital limit: 0 on guarantee credit, pension_credit_assessable_capital on savings credit only, household savings otherwise. - Point the national CTR parameters at the provisions in force. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… harness - Savings-credit-only CTR income adds the Pension Credit actually paid (the savings credit payable), so under the Pension Credit freeze it counts the frozen amount, consistent with the receipt flags. Test added. - The property differential recomputes main's CTR income definition from its components instead of reading the variable under test. - Apply the raised minimum guarantee as a population-wide reform: a minimum_guarantee input on some benefit units set it to zero on every other one, which hollowed out guarantee credit coverage. - Metamorphic tests always include guarantee credit recipients and assert they are present; the take-up test also checks non-claimants against the differential. - Pin that a non-claimant with the same assets is tested on household savings only (a proxy gap, documented); note the non-dependant test pins the deduction's presence, not its Housing Benefit-rate size. - Legal local names; changelog says savings-credit-only CTR falls. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Round 2 review follow-ups (all tests, no model change): - YAML cases at exactly 16,000 and 16,000.01 of capital for a pensioner without Pension Credit and for a savings-credit-only recipient; the limit excludes capital that exceeds 16,000. - Freeze tests where the reform alone would change which credit is received (savings credit only to guarantee credit, and guarantee credit to none); receipt follows the frozen award. - The generator adds children, UC take-up, self-employment, property income and Carer's Allowance, so the differential against main's income definition covers Child Benefit, UC and the other components. - The changelog says savings-credit-only CTR can fall. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…4 saving) Doc-only; the formula is unchanged. Keeps the file byte-identical with #1927. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SI 2019/37 art 4 disapplies SPCA 2002 s.4(1A) for a mixed-age couple entitled to Pension Credit or Housing Benefit as that couple on 14 May 2019, and PolicyEngine gives Housing Benefit to a mixed-age couple only on a continuing award, which housing_benefit_eligible treats as standing in for that saving. is_pension_credit_eligible omits the saving, so it pays those couples no Pension Credit and the passport now drops for them, although in law they may be entitled to a guarantee credit. The mixed-age test cases, docs paragraph and changelog now say so instead of calling the change a legal correction. The two mixed-age cases no longer assert the computed guarantee credit, which #1896 makes 0 for a family not eligible for Pension Credit; their passport and Housing Benefit assertions stay. in_receipt_of_guarantee_credit takes the shared v2 text also carried by #1909: documentation and references only (SSAA 1992 s.1, SI 2019/37 art 4). The three Housing Benefit call sites now cite reg 26, NI reg 24 and reg 2(5), under which "in receipt" includes a person who would be but for SPC Regs 2002 reg 13, which PolicyEngine does not model. The tariff-income passport, redundant with the zero assessable capital, is kept for parallelism with reg 26's "capital and income" and says so. The capital test's comment calls 11,536.20 PolicyEngine's 2025 parameter, not the minimum guarantee. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Reviewed: approve with nits (remove the record-level details from the description before merge). The implementation follows the law. A guarantee credit recipient gets nil income and nil capital (England SI 2012/2885 Sch 1 para 13, Wales WSI 2013/3029 Sch 1 para 7, Scotland SSI 2012/319 reg 24). Savings-credit-only cases use the Pension Credit assessment plus the savings credit payable (para 14(1)-(2)(a), reg 25). Receipt is keyed on take-up, not on bare entitlement.
Verified: I read the current text on legislation.gov.uk of SI 2012/2885 Sch 1 paras 13-14, WSI 2013/3029 Sch 1 para 7 and SSI 2012/319 regs 24-25. |
#1909 added in_receipt_of_guarantee_credit.py with the same contents, so the file drops out of this PR's diff. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Resolve council_tax_reduction_applicable_income: keep #1909's guarantee credit and savings-credit-only rules and this branch's income-from-capital rules, documentation and references. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cherry-picks #2007 (59c7082: HB reg 74 / SPC reg 55 bands, remunerative-work test, couple rule and exemptions; national CTR own scales and exemptions) onto the in-unit non-dependant change (#2014) and the #2006 rent shares, as agreed with #2007's author: - HB and national CTR aggregation: one deduction for a non-dependant couple (the claimant and partner of a non-dependant family, the higher amount; both for a Welsh working-age couple on UC), any other adult in that family counted separately, in-unit non-dependants pooled and apportioned by rent share (HB) or joint-liability share (CTR), and the claimant's exemption. - Joint income for the bands is the couple's only (reg 74(4), para 8(4)); another adult is banded on their own income. - The IS, income-based JSA, income-related ESA, Pension Credit and UC exemptions apply only to the award's claimant and partner. - The HB claimant exemption reads is_claimant_or_partner, not is_adult. Drops council_tax_reduction_pension_credit.yaml and the in_receipt_of_guarantee_credit output, which depend on #1909 (main only). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cherry-picks #2007 (59c7082: HB reg 74 / SPC reg 55 bands, remunerative-work test, couple rule and exemptions; national CTR own scales and exemptions) onto the in-unit non-dependant change (#2014) and the #2006 rent shares, as agreed with #2007's author: - HB and national CTR aggregation: one deduction for a non-dependant couple (the claimant and partner of a non-dependant family, the higher amount; both for a Welsh working-age couple on UC), any other adult in that family counted separately, in-unit non-dependants pooled and apportioned by rent share (HB) or joint-liability share (CTR), and the claimant's exemption. - Joint income for the bands is the couple's only (reg 74(4), para 8(4)); another adult is banded on their own income. - The IS, income-based JSA, income-related ESA, Pension Credit and UC exemptions apply only to the award's claimant and partner. - The HB claimant exemption reads is_claimant_or_partner, not is_adult. Drops council_tax_reduction_pension_credit.yaml and the in_receipt_of_guarantee_credit output, which depend on #1909 (main only). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Applies #2007 at 6257277 (59c7082 plus the r1 review commit) onto #2017 (in-unit non-dependants, #2006 rent shares): - One definition of claimant or partner: #1896's is_claimant_or_partner variable. #2007's proxy helper (benefit-unit head or any member who is not a Child Benefit child or QYP) is removed and its call sites read the variable. - HB and national CTR aggregation: another family's non-dependants per deduction_per_family (the couple's higher amount, both for a Welsh working-age UC couple, and each other member's own), counted once per family and apportioned by rent share (HB) or joint-liability share (CTR); a family's own in-unit non-dependants in full (LHA Guidance Manual 2.093; HBGM A5 5.622); the claimant exemptions. charged_to_other_families ("household minus own family") is no longer used and is removed. - #2007's property oracle reads is_claimant_or_partner; the in-unit property oracle counts a couple once and applies the claimant exemptions. - Drops council_tax_reduction_pension_credit.yaml and the in_receipt_of_guarantee_credit output (#1909, main only). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Conflicts resolved: ESA/IS/JSA/HB/UC assessable capital keep the claimant-and-partner household share and add main's person-level capital (Lifetime ISA, #1983) for the claimant or partner; CTR applicable income keeps member-based deductions and adds main's guarantee-credit and savings-credit-only rules (#1909); progression.py keeps both imports. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it in the CTR tests The CTR tests from #1909 asserted a calculated guarantee credit for a working-age non-dependant, a mixed-age couple and a Welsh working-age earner. This branch defines guarantee_credit only for Pension Credit-eligible benefit units, so those are 0; the CTR outcomes the tests pin are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nd partners The property tests merged from #1958 and #1909 build couples such as 42 and 18 or 67 and 18 without relationship inputs, which this branch's presumption reads as a parent and child. Set is_claimant_or_partner from each generated role (adults True, children False, a separate non-dependant True for their own benefit unit), as the FRS supplies it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lify the 20% invariant After merging main, a pension-age couple on Guarantee Credit has its whole income disregarded for Council Tax Reduction (SSI 2012/319 reg 24, modelled since #1909), so the case now expects applicable income of 0 and checks the Carer Support Payment itself. The property docstring says the 20% fall holds where claiming leaves the applicable amount unchanged, as the review of 1f361a3 asked. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Count land and property other than the home in council tax reduction capital (national schemes and the modelled local schemes), so a let property worth more than 16,000 ends CTR now that its rent is not income (SI 2012/2885 Sch 1 para 31(1); WSI 2013/3029 reg 30). Shares stay out pending the pension-wealth split (#1936). - Deduct only the Step 4 tax on counted income (ITA 2007 s.23), less its pro-rata share of Step 6 reductions; Step 7 charges (HICBC, annual allowance charge; s.30) are not tax on counted income. - Select the Scottish working-age scheme under SSI 2021/249 reg 3 (under pensionable age, or over it with UC or a qualifying income-related benefit) and date its exclusion of sub-tenant rent from 1 April 2022; before then SSI 2012/303 Sch 4 para 25 counted it less 20. - Count only the claimant's and partner's sublet rent; give the pension-age disregard its pre-October-2003 value (4) so early years compute. - Update #1909's CTR property test to the new income and capital rules, hold Marriage Allowance fixed in the invariance property, qualify the isolated HB fixture, and add YAML cases for each fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Problem
The national council tax reduction (CTR) formula covers England's pensioner scheme and all of Scotland and Wales. It tapers every claimant at 20% on income after tax, and zeroes the award when household savings exceed £16,000. Nothing in it treats Pension Credit recipients differently:
council_tax_reduction_applicable_incomedoes not count Pension Credit, and the passport variable (council_tax_reduction_relevant_income_based_benefit) is read only by the legacy local schemes. That produces two errors.Guarantee credit recipients whose CTR income exceeds the applicable amount are tapered. This is the uk-triple-lock symptom (PolicyEngine/uk-triple-lock#6, step 4). The case is a single 70-year-old owner, council tax £2,000, receiving guarantee credit because an earnings-linked minimum guarantee (£18,500) sits above the £13,312 CTR applicable amount:
The deltas match the repo's central 2039-40 example to the cent (run on main). Wales gives the same result and Scotland gives +£11.63 as well. On baseline parameters the applicable amount (£256/week) is above the standard minimum guarantee (£238/week), so the taper bites only when something else pushes a guarantee credit recipient's CTR income above it: an earnings-linked guarantee path, a guarantee reform, or income that CTR counts and Pension Credit does not.
Guarantee credit recipients with savings over £16,000 get no CTR at all. Pension Credit has no capital limit. A single 70-year-old on State Pension £9,000 with £20,000 savings gets guarantee credit of £2,336 (after £1,040 deemed income from capital) and CTR of £0. The law gives £2,000. This happens today in England, Wales and Scotland on baseline parameters.
Law
All texts were read in their current revised versions on legislation.gov.uk on 2026-09-30. Each was re-fetched by an independent verifier, and none has an unapplied amendment affecting these provisions.
"In receipt" is receipt, not entitlement.
guarantee_creditis positive for anyone whose income is below the minimum guarantee, including working-age people and non-claimants. For example, a Welsh 35-year-old earning £10,000 hasguarantee_credit£2,376 andpension_credit£0. Keying on it would give that person maximum CTR under the all-ages Welsh and Scottish formula.Change
in_receipt_of_guarantee_credit(new, BenUnit):is_pension_credit_eligible & would_claim_pc & (guarantee_credit > 0). Under thefreeze_pension_creditreform it keeps the baseline's receipt.de434752…0a2a, the documentation v2 from Key the Housing Benefit Guarantee Credit passport on receipt #1927's review: it notes that the model's Pension Credit eligibility omits the SI 2019/37 art 4 saving for some mixed-age couples), so the two share one definition. Whichever PR merges second drops its copy.in_receipt_of_savings_credit_only(new, BenUnit): the same pattern, withguarantee_credit <= 0andsavings_credit > 0.council_tax_reduction_applicable_income:pension_credit_incomeplus the Pension Credit actually paid, which is the savings credit payable. Under thefreeze_pension_creditreform that is the frozen baseline amount;council_tax_reduction_assessable_capital(new, BenUnit), which now feeds the capital limit insimulated_council_tax_reduction_benunit:pension_credit_assessable_capitalin savings-credit-only cases;savingsotherwise (the previous proxy). That proxy under-counts the capital the schemes count (Part 6 Chapter 3 includes second homes and investments), so a pensioner who does not claim Pension Credit can pass the limit on assets that a savings-credit-only claimant is tested on. A YAML case pins this; see the review response below.programs.yamlnote and a changelog fragment.Invariants (property-tested in
test_council_tax_reduction_pension_credit_properties.py)L is liability, ND is non-dependant deductions, A is the applicable amount.
freeze_pension_credit, a savings-credit-only award counts the frozen savings credit actually paid. A plain test checks that a savings credit rate rise gives 869.89 in the reform but 558.62 paid and counted.Generators.
minimum_guaranteeinput. That was the first design, and review exposed it: an input on some benefit units sets the variable to 0 on every other one.Settings and coverage.
derandomize=True, 10 examples each. The six property tests and two freeze tests take about 2 minutes.Mutation checks. Eight deliberate bugs were applied one at a time to 8e32d3f, and the round-2 reviewer's four survivors to be53176. Every one is now caught. The table shows YAML failures (out of 17, or 21 for the last four rows) and which property tests fail (run with shrinking off):
guarantee_credit > 0<=→<(round 2 survivor)Tests
council_tax_reduction_pension_credit.yaml: 21 cases with hand-checked values. 11 of the original 16 fail on main (run with the new variables removed from the outputs).Existing tests (all pass):
policyengine-core teston everything underlocal_authorities,consumption,dwp/pension_creditand the entitledto scenarios: 108 passed.Cycle check. A traced simulation of every Pension Credit variable CTR now reads, across four household situations, reaches no council tax, CTR, Housing Benefit or Universal Credit variable. Every test above computes CTR on this branch without a cycle error.
Dataset impact (Enhanced FRS 2024-25, current weights, real runs of main vs this branch)
In 2029 the net change is −£0.19m: guarantee credit +£1.91m and savings credit only −£2.11m.
The income disregard has no 2026 survey effect. All 4 guarantee credit records that gain are the savings-over-£16,000 group (1.9k units). The triple-lock case is a future or reform scenario, driven by an earnings-linked guarantee above the CTR applicable amount.
Why the survey effect is small. Survey take-up of CTR is reported-only:
claims_all_entitled_benefitsis False for every Enhanced FRS benefit unit. So the fix changes amounts for existing claimants and brings in no new claimants. Of the 708k guarantee credit recipients who claim CTR, 1.9k hold savings over £16,000. The income-side taper bites in household calculations and on earnings-linked guarantee paths such as uk-triple-lock's, not at 2026 survey incomes.Savings-credit-only losses have two sources:
corporate_wealth, apart from £215 in one case.Independent review
Round 1 was an Opus 5.5 review on a Subfleet lane. It returned REQUEST_CHANGES with one blocking finding and seven non-blocking ones. It confirmed the law fidelity, the scope (no leak to working-age, local schemes, non-head units or Northern Ireland) and every hand-checked YAML value. The responses are in commit 8e32d3f:
corporate_wealth, which is mostly pension wealth.minimum_guaranteeinput bug in the test harness, now fixed.Round 2 was run on 8e32d3f, with execution access, and returned APPROVE. Checked in that round:
corporate_wealth.It raised six non-blocking points, addressed in be53176:
Its three surviving mutations are now caught (see the mutation table).
Delta check was an in-session Opus review of be53176 (tests and changelog only). It returned APPROVE:
Its non-blocking notes are addressed in 2936fec:
Its suggestion to turn off Hypothesis shrinking was not taken: minimal counterexamples are worth a slower failure.
Not in this PR (follow-up issues)
corporate_wealth.axiom: SI 2012/2885 Sch 1 paras 13-14 (+ WSI 2013/3029 Sch 1 paras 7-8, SSI 2012/319 regs 24-25) — TheAxiomFoundation/rulespec-uk#374 queued
Also filed: TheAxiomFoundation/axiom-oracles#577 (the CTR oracle grid feeds PolicyEngine's untransformed applicable income and savings, and its capital-over-limit case is a guarantee credit recipient).
🤖 Generated with Claude Code