Count State Pension as Universal Credit unearned income - #1943
Conversation
UC Regs 2013 reg 66(1)(a) counts retirement pension income as unearned income, and reg 67(1) gives it the State Pension Credit Act 2002 s.16 meaning, which includes the new State Pension (s.16(1)(za)) and the Category A/B retirement pension (s.16(1)(a)). UC unearned income counted state_pension from the first calculated UC (0e2d8be, 2020) until 055dce8 (2021-10-27) dropped it in a UC restructure; since then the list has had private pension income but not State Pension, so mixed-age couples on UC had their State Pension ignored. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Hypothesis properties: UC is non-increasing in State Pension; with no earnings it falls pound for pound (reg 22(1)(a)); State Pension counts exactly like private pension income, and like property income when the family has no earnings. A strict xfail pins #1942, where the benefit unit's tax on State Pension is deducted from a partner's earnings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cf9bff9 to
162fe23
Compare
|
Coordination with #1944 (mixed-age couples on UC: benefit cap and CTR pensioner status). Under SI 2012/2885 reg 3(1), a person with an award of Universal Credit (or whose partner has one) is not a CTR "pensioner". A mixed-age couple on UC therefore claims under the council's working-age scheme, not the national pensioner scheme. #1944 applies that rule. Once both PRs merge, this PR's case "Mixed-age couple renting from the council, State Pension reduces UC pound for pound" changes:
Whichever PR merges second updates that case. If this one lands first, I'll do it in #1944's rebase. 🤖 Generated with Claude Code |
|
Reviewed: approve with nits. This is right. Reg 66(1)(a) and reg 67 bring in SPCA s.16(1)(za) and (a), so State Pension counts in full as unearned income from 2013, the same as private pension.
Verified: I read UC Regs regs 66 and 67 and SPCA s.16. Nothing else in UC adds State Pension, so nothing is double counted. The YAML passes (8/8) and the property suite gives 4 passed and 1 strict xfail (#1942). CI is green, including the docs build. |
|
This PR now conflicts with main. #1958 (merged as 9fb46c7) restructured #1958 also moved the Enhanced FRS base (it reports −£1.944bn UC in 2026), so the impact table here may need a re-run on current main. #1949, #1973 and #1963 stack on this branch. Once main is merged in here, #1949 will merge the new head with added commits only. |
#1958 split the UC unearned income list into two dated blocks (2013-04-29 and 2023-11-19, when carer support payment starts to count). State Pension goes in both: retirement pension income has counted since 29 April 2013 (reg 66(1)(a) as made). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex review — ready to mergeReviewed commit No actionable introduced code/test defect found. The change adds The strict expected failure for tax on a pensioner's State Pension reducing a partner's earned income is real, but arises from the unchanged whole-benefit-unit income-tax deduction in No confirmed policy defect in adding State Pension to UC unearned income. UC reg66(1)(a) includes retirement pension income; reg67 adopts SPCA2002 s16, whose(za)/(a) limbs include new/basic State Pension. The NI UC regs66/67 use the corresponding retirement-pension definition. The current head adds Sources: UC66, UC67, SPCA16, NI66, NI67. Known tax-allocation and Carer's Allowance overlap defects predate this list change and are owned by#1949/#1994. They do not invalidate this incremental repair. Coordinate the same parameter with#1950 and the mixed-age route with#1940, preserving State Pension in both dated lists. Prior approve-with-nits stands on the source review; impact estimates remain author-reported and are not needed to establish this rule. Validation: 12 passed, 1 xfailed, 1 warning. Changed implementation and relevant final-award/dependency tests were checked at this exact commit. 5 official source originals were inspected and their cached bytes verified. No material review gaps remain within this scope; private population-impact claims were not independently rerun. Focused tests used an existing cached Python 3.13 environment (Core 3.32.9, NumPy 2.1.3, pandas 2.3.1, microdf-python 1.2.1, Hypothesis 6.168.2, pytest 8.4.2) with this PR’s isolated source snapshot. No dependencies were installed; this was not a freshly synced lock environment or a full-suite/population run. This is a review comment, not a formal GitHub review vote. Live check before posting (2026-10-02T10:43:01.602952+00:00): same commit, CLEAN; all reported CI checks pass. |
…-capital-derived-income Resolve the four means-test income formulas: keep #1896's claimant/partner member filter and this branch's income-from-capital rules (no property income, legacy_means_test_income_tax in the tax line, home-letting income). Keep #1952's Pension Credit references and this branch's Sch IV para 18 reference, and #1926's HB docs with this branch's sentence. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… and CTR pensioner tests Vahid Ahmadi's review of #1944 (should-fix 1): the "UC award with a working-age claimant or partner" guard in housing_benefit_pension_age_regulations_apply and council_tax_reduction_pensioner now reads #1896's is_claimant_or_partner. It presumes an 18- or 19-year-old living with a pensioner to be their child, so a pensioner aged 70 with an 18-year-old in education and no is_parent is not capped and keeps pensioner CTR. The YAML case that pinned the old result now expects no cap, the reviewer's household is a new CTR case, and the property test draws is_parent on and off. Nit 2: the HB variable reuses council_tax_reduction_relevant_income_based_benefit (same three benefits). Nit 3: the changelog says household calculations for a mixed-age couple on UC in England outside the five simulated councils now show CTR of 0 unless a reported amount is entered (checked on this head). #1943's mixed-age case in uc_state_pension.yaml now expects the working-age route (reported CTR, 0) under SI 2012/2885 reg 3. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Summary
Universal Credit unearned income leaves out State Pension. The list is
gov.dwp.universal_credit.means_test.income_definitions.unearned: private pension income is on it,state_pensionis not. So a mixed-age couple on UC had the older partner's State Pension ignored, although UC counts it pound for pound.In a worked case on main, the same couple gets £14,243.64 UC with £9,000 of State Pension but £5,243.64 with £9,000 of private pension. Both are retirement pension income under the same statutory definition.
This PR adds
state_pensionto the list from 2013-04-29. On the Enhanced FRS it cuts 2026 UC by £0.332bn. That comes from 32.1k benefit units with State Pension, carried by 74 survey records. 89% of the cut (30.4k units, 70 records) is mixed-age couples. The other 11% (4 records) is couples who are both over State Pension age with an 18- or 19-year-old dependant: the model wrongly makes them UC-eligible (see below).Law (legislation.gov.uk, read 2026-09-30 from
/data.xml)state_pension=basic_state_pension+additional_state_pension+new_state_pension, which covers (a) and (za). So one list entry from 2013-04-29 is right for both the old and the new State Pension.new_state_pensionis zero before 2016.How it went missing, and why it lasted
benunit_state_pensionto unearned income, and it was still there at dddbd87 (2021-09-04).state_pensionline while addingsavings_interest_incomeanddividend_income.uc_unearned_income.yaml"All sources summed" came the next day (e04802c, 2021-10-28). It sums the post-restructure list (10,000 + 1,000 + 100 + 10 + 1 = 11,111), so it could not catch a missing source. No UC test has ever had a State Pension input.pension_incometoprivate_pension_income, which was always private pensions only.policyengine-uk-data#942 (2024-09-16) the microsimulation paid UC only to benefit units that reported UC in the FRS. The switch to a take-up draw exposed every mixed-age couple.targets/sources/dwp.py,obr.py). No target is split by age.src/variables/benefits.rs) has the same omission.Change
unearned.yaml: addstate_pensionto both dated blocks (2013-04-29 and 2023-11-19, the split Count contributory ESA, Maternity Allowance, industrial injuries benefit and capped Carer Support Payment as UC unearned income #1958 introduced for carer support payment), and cite reg 67 and SPCA s.16.universal-credit.ipynb: say what unearned income counts.Household results (real runs, main 7b9fc37 → this branch ce85220)
Couple aged 70 and 60, renting from the council (rent £6,240), council tax £1,500, 2026:
CTR rises because of the fix. The pension-age CTR income adds State Pension to UC. With UC overstated on main, that income was £23,243.64 against an applicable amount of £19,934.20 (£383.35 × 52), so CTR was £1,500 − 20% × £3,309.44 = £838.11. On this branch the income is £14,243.64, so CTR is paid in full.
Enhanced FRS impact (real runs)
Setup:
enhanced_frs_2024_25.h5(sha256 e433e532…).Microsimulationper package, run one at a time: main 7b9fc37 (after Count contributory ESA, Maternity Allowance, industrial injuries benefit and capped Carer Support Payment as UC unearned income #1958, Disregard guarantee credit recipients' income and capital in pensioner council tax reduction #1909, Fix marginal-rate precision at large values and add a BADR realisation elasticity #1980 and Count Lifetime ISAs as means-tested capital of the holder's benefit unit #1983) and this branch at ce85220, which merges that main. Both are clean trees.dataset_impact.pyandcompare_impact.py, kept outside the repo.Checks across every year:
is_uc_eligiblechecks anyis_WA_adult) and bars it from Pension Credit (everyis_adultmust be over State Pension age).would_claim_council_tax_reductionisclaims_all_entitled_benefitsor reported CTR, and most losing units claim neither, so only a few see CTR rise. In the worked household, where CTR is claimed, CTR rises £661.89.With #1940 (mixed-age Pension Credit saving), measured on the old base 44240bd only: real runs of #1940's head 0aa0de3 against a scratch merge of #1940 and this branch gave −£0.314bn in 2026 (29.9k units, 66 records), against −£0.345bn without #1940 on that base. An independent reviewer got the same 2026 figure on #1940's later head 24f59a4. I have not re-run the combination on the current base. #1940 moves couples with an SI 2019/37 saving onto Pension Credit, which takes them out of this PR's reach. The two PRs share no files.
The −£0.276bn research estimate that prompted this is superseded by these runs.
Invariants (tests)
policyengine_uk/tests/test_uc_state_pension_properties.pyis a Hypothesis test (derandomized, 10 examples each) over populations of mixed-age, single-pensioner and pensioner-couple families. It varies tenure, rent, savings, children, the younger partner's earnings and State Pension, in 2020 and 2026:universal_creditanduniversal_credit_pre_benefit_capare non-increasing in State Pension;uc_unearned_incomerises by exactly the added pension;uc_maximum_amountis unchanged; families with no working-age adult get no UC.uc_earned_income;On main these tests fail. Monotonicity breaks: generated families get more UC with more State Pension, because the tax on it is deducted from earnings (#1942) while the pension itself is ignored.
YAML (
uc_state_pension.yaml, 8 cases, hand-computed from the 2026-27 rates: couple standard allowance £666.97 a month per DWP Benefit and pension rates 2026 to 2027, taper 55%):Seven of the eight fail on main; the private-pension control passes on both. Seven of the eight still fail on the current main 7b9fc37. The full YAML policy suite passes on this branch merged with main (1,378 tests), and the property tests give 4 passed and 1 xfailed.
Found alongside
uc_earned_incomedeductsbenunit_tax, the whole unit's income tax and NI on all income. So tax on State Pension, private pension, property or savings income comes off earnings, including a partner's. This is older than the State Pension gap: calculated UC has netted off the unit's total income tax and NI since 0e2d8be (2020).axiom: TheAxiomFoundation/rulespec-uk#385 queued (reg 67 and SPCA s.16 are not in the pinned corpus, so no signed encode is possible yet; the axiom-oracles EFRS bridge reads
uc_unearned_incomeand picks this fix up)Merge
This moves published UC numbers (−£0.332bn in 2026). Max ruled the merge on 30 September: merge once CI is green and an independent review approves.
🤖 Generated with Claude Code