Repository navigation
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>
…codes model behaviour The docstring no longer quotes the pre-#1909 cliff figure and names both passports (HB and CTR). Invariant 3 is described as encoding the model's current tax deduction rather than the law (SPC Regs reg 17(10); HB (SPC) Regs 2006 reg 33(12)), to be tightened when #1954 is fixed. The changelog fragment says the meaning change dates from 2.106.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Since #1909, a pension-age family on Guarantee Credit has its whole income disregarded for Council Tax Reduction, and one on savings credit only is assessed on Pension Credit income plus the Pension Credit paid (SSI 2012/319 regs 24 and 25). The general-income identities now apply only where neither route applies, and a new property checks both routes. A Scottish pensioner carer with no State Pension is pinned as an example: it crosses into savings credit only on the private pension grid and failed the old assertions. Addresses the review of e6f29a7 (finding 1). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The 2-year-old entitlement listed the raw guarantee_credit amount as a qualifying benefit. PolicyEngine computes that amount for every benefit unit, so low-income working-age families and pensioners who do not claim Pension Credit qualified through it. SI 2014/2147 reg 1(2) requires the parent to be entitled to the guaranteed element of state pension credit, and entitlement needs the qualifying age (SPCA 2002 s.1(2)(b)) and a claim (SSAA 1992 s.1(1), (4)(ab)). The entry is now in_receipt_of_guarantee_credit (Pension Credit eligible, claims it, guarantee credit positive), the variable #1927 and #1909 add; the file is byte-identical to theirs. Its YAML test is #1927's, also byte-identical. Fixes #1956 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tests with main Main (#1896) now pays Guarantee Credit only within Pension Credit, so the working-age half of #1956 is already fixed there. The targeted childcare route still needs a claim: this branch keys it on in_receipt_of_guarantee_credit, which #1909 put on main. - in_receipt_of_guarantee_credit also requires pension_credit > 0, so a reform that stops Pension Credit being paid ends receipt (review finding: neutralising pension_credit left receipt true). No change in the unreformed model, where a positive guarantee credit for an eligible claimant is always paid. - YAML: below-age cases now assert the minimum guarantee and a zero guarantee credit; add the 17/18-year-old dependant pair. - Properties: compare the route as filed, main's route and the fix; add dependent young people and childcare take-up to the generator, a payment test and a mutation check that the earlier routes break the invariants. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… tax attribution docs - Add council_tax_reduction_tariff_income to the national schemes' general route: pensioners £1 a week per £500 over £10,000 (SI 2012/2885 Sch 1 para 37; WSI 2013/3029 Sch 1 para 31; SSI 2012/319 reg 27(2)); Wales and Scotland under pension age £1 per £250 over £6,000 (WSI 2013/3029 Sch 6 para 33; SSI 2012/303 reg 51; SSI 2021/249 reg 63(1)(b)); with UC the £4.35 monthly assumed yield. Nil on the Pension Credit routes and for IS/income-based JSA/income-related ESA recipients. - Value land and property in CTR capital less 10% sale expenses (capital.sale_expenses), moving capital_sources to capital.sources. - Take UC recipients' CTR capital from the UC assessment (default scheme para 37(6); WSI 2013/3029 Sch 6 para 9(6); SSI 2012/303 reg 26), except Scotland from April 2022; apply Oxford's Appendix 6 disregard. - Select the Scottish working-age scheme as ~council_tax_reduction_pensioner, so a UC award held only by people over pension age does not select it. - Correct the tax helper's documentation: foreign tax credit and finance-cost relief are source-specific (TIOPA 2010 ss.18, 36; ITTOIA 2005 ss.274A-274AA); other_tax_credits has no source, so pro rata stays a stated convention. - New YAML cases for each; update #1909's capital and tariff expectations; tariff property test; #1909's property reference includes tariff income. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
test_council_tax_reduction_pension_credit_properties.py (#1909) checked general-rules CTR income against main's old definition, which had no earnings disregard, so it failed for pension-age earners (a couple's £520). The oracle now subtracts an independently computed disregard from the statutory sums (£25/£10/£5 plus £17.10, capped at net earnings, with the "equal or exceed" test) for the schemes' pensioners. 8 passed. Also narrow the docstring: the amounts and work conditions are the HB pension-age schedule's and employees' net earnings use the same deductions, but the self-employed notional tax can differ (SSI 2012/319 reg 37(1) deducts only the personal allowance). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Resolve conflicts with #1909 (capital routing), #1944 (council_tax_reduction_pensioner; keep main's file with the Welsh/Scottish sentence updated) and programs.yaml. After #1952 carer_support_payment is the CSP component only, so drop the supplement subtraction. Route every working-age person mask through one helper (working_age_applicant_or_partner) so #2078 can swap the applicant identity in one place. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- #1909's Welsh working-age earner now gets the Welsh allowance and the £5 earnings disregard (1,111.24, not the HB-based 993.72). - #1944's capped mixed-age UC couple in Wales gets the maximum reduction under WSI 2013/3029 Sch 6 paras 3 and 9; give it a UC maximum amount consistent with its award. - The Scottish self-employed £17.10 case now pays Class 4 NI on its profits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The motivating figures now use current main, where council tax reduction already counts the savings credit (#1909): a single 80-year-old with no State Pension loses 34 on a 250 private pension rise, and gains 18 here, pinned by a new deterministic test. The £20-disregard note no longer gives fixed error amounts, the YAML header names the Pension Credit claimants and partners, and the changelog limits the claim to pensioners without earnings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@MaxGhenis my 1 Oct review got no reply before merge, and two items still stand:
|
* Key the Housing Benefit Guarantee Credit passport on receipt housing_benefit_assessable_capital, housing_benefit_applicable_income and housing_benefit_tariff_income disregarded all income and capital whenever guarantee_credit was positive for a family with someone over State Pension age. guarantee_credit is computed whether or not the family claims Pension Credit (would_claim_pc) or can get it (is_pension_credit_eligible, false for mixed-age couples). So pensioners who do not take up Pension Credit, and mixed-age couples with a continuing Housing Benefit award, had their capital ignored and kept Housing Benefit above the £16,000 capital limit. SI 2006/214 reg 26 (NI SR 2006/406 reg 24) disregards the whole of the capital and income of "a claimant who is in receipt, or whose partner is in receipt, of a guarantee credit". The new in_receipt_of_guarantee_credit is true when the Pension Credit paid to the benefit unit includes a guarantee credit (pension_credit > 0 and guarantee_credit > 0). Under the Pension Credit freeze it keeps the baseline receipt, because the frozen award is the baseline award. The three Housing Benefit formulas now use it. The existing passport case in housing_benefit_capital.yaml set guarantee_credit 1 for a pensioner whose Pension Credit income exceeds the minimum guarantee, so no Pension Credit was paid; it now also sets is_pension_credit_eligible. Also documents the passport on the Housing Benefit docs page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Move the passport note to the Housing Benefit eligibility section The Local Housing Allowance fix rewrites the means-test line of the docs page, so a note appended there would conflict. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Use the Guarantee Credit receipt variable shared with the CTR fix #1909 (pensioner Council Tax Reduction) adds the same in_receipt_of_guarantee_credit file. Both branches now carry it byte-identical, so either can merge first without a conflict. Its formula, is_pension_credit_eligible & would_claim_pc & (guarantee_credit > 0), equals the previous (pension_credit > 0) & (guarantee_credit > 0) whenever pension_credit is computed: pension_credit is (guarantee_credit + savings_credit) x is_pension_credit_eligible x would_claim_pc, and savings_credit is never negative. The Enhanced FRS stores neither pension_credit nor guarantee_credit, and a re-run gives arrays identical to the previous run. The Housing Benefit formulas keep their SI 2006/214 reg 26 comments. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Test the Housing Benefit capital limit at and just over £16,000 A pensioner not claiming Pension Credit with capital of exactly £16,000 keeps Housing Benefit, since SI 2006/214 reg 43 and SSCBA 1992 s.134(1) bar entitlement only where capital "exceeds" the prescribed amount; at £16,000.01 there is no entitlement. Both fail on main, where the computed guarantee credit passports the capital. The rulespec-uk companion tests use the same two cases. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Say the mixed-age passport loss follows the model, not the law 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> --------- 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. Every guarantee credit record that gains is in 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.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