Repository navigation
Read only the claimant's and partner's ESA in the Pension Credit earnings disregard - #2558
Conversation
…ings disregard The higher Pension Credit earnings disregard (SPC Regs 2002 Sch VI para 4(1)(a)(vii)) applies when "the claimant or, if he has a partner, his partner" is in receipt of employment and support allowance. Its benefit-unit list read esa_income, the benefit unit's income-related ESA, which also holds an award that another member (neither claimant, partner nor a dependant) claims in their own right. The list now names claimant_or_partner_esa_income (#2027), so that member's award no longer raises the claimant's disregard from £5 or £10 to £20 a week. Adds excluded-adult YAML cases and controls in legacy_award_readers/pension_credit_earnings_disregard.yaml (two of the four fail on the old list), adds pension_credit_earnings_disregard to FAMILY_READERS in the legacy award reader properties, and renames the list entry in the Pension Credit earnings disregard property test. Follow-up to #2026 and #2027; the reader came from #2019. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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
Household net income by decileNo household's net income changes in any year. No change in any year: receipts by tax head; government balance, each component counted once; model totals; components the model counts twice; household income totals; population; 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. 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
|
The Pension Credit earnings disregard has no age gate in the model: it is worked out for every benefit unit with earnings, and the working-age 'never change' property already fails on the old list. So it does not belong among the readers that "only bite for a claimant over state pension age"; restore main's wording of that comment. Put claimant_or_partner_esa_income in backticks in the parameter description, like disability_benefits. Review r1 findings (2026-10-22). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Status at 2026-10-22 09:40Z, from the scheduled job that owns this PR (com.maxghenis.pe-uk-reader-switches-after-2027):
🤖 Generated with Claude Code |
Main's #2558 added a Pension Credit earnings-disregard case whose couple's benefit unit doesn't set would_claim_uc, so under this PR the default UC claim ends the partner's income-related ESA (claimant_or_partner_esa_income 0, not 5,000). Set would_claim_uc: false on that benefit unit, as this PR already does in 84 other legacy cases (independent review B1). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Follow-up to #2026 and #2027. The reader came from #2019.
What and why
The higher Pension Credit earnings disregard is £20 a week "if the claimant or, if he has a partner, his partner ... is in receipt of ... (vii) employment and support allowance" (SPC Regs 2002 Sch VI para 4(1)(a)(vii)). Otherwise it is £5 a week for a single claimant and £10 for a couple (para 5), capped at the net earnings.
pension_credit_earnings_disregard(#2019) tests income-related ESA through the parameter listgov.dwp.pension_credit.earnings_disregard.higher.disability_benefit_unit_benefits, withadd(benunit, period, list) > 0.esa_income, the benefit unit's income-related ESA. That total also holds an award that anyone else in the benefit unit claims in their own right: an adult who is neither the claimant nor the partner, or a young person with an award of their own. Such a member's ESA could therefore raise the claimant's disregard to £20 a week.claimant_or_partner_esa_income(Count only the claimant's and partner's legacy awards in means tests and passports #2027): income-related ESA on the claimant's and partner's own reports. An award anyone else in the benefit unit claims in their own right no longer counts. Contributory ESA was already read only for the claimant and partner, through the person-level listdisability_benefits.The formula is unchanged, and the parameter descriptions now say whose award counts. The list entry is renamed in
test_pension_credit_earnings_disregard_properties.py::test_benefit_lists_follow_amending_instruments.An
esa_incomeentered directly with no reports behind it is still read as the claimant's or partner's: that is howclaimant_or_partner_esa_incometreats an entered total. So #2019's own case "Income-related ESA, a benefit-unit award, qualifies for the higher disregard." still gives £20 a week.Invariants
pension_credit_earnings_disregard. The legacy award reader properties check this.pension_credit_earnings_disregardis now inFAMILY_READERS, so all four "never change" properties cover it: working-age families, pension-age claimants (many in mixed-age couples), young single applicants and working parents.0 <= claimant_or_partner_esa_income <= esa_income, with equality when no other member reports an award. The existing propertytest_claimant_or_partner_awards_bounded_by_benefit_unit_awardschecks this.Tests
New file
policyengine_uk/tests/policy/baseline/finance/benefit/family/legacy_award_readers/pension_credit_earnings_disregard.yaml. Expectations are hand-derived from Sch VI paras 4(1)(a)(vii) and 5. In each case the claimant is aged 70 and earns £3,000, below the personal allowance, and pays no National Insurance over state pension age. So the net earnings are £3,000. Every case asserts the £3,000 of earnings, and the first also asserts nil National Insurance and income tax.check_switch.shagainst the branch point 582b863, with the parameter file restored to its pre-switch version: 4 of 4 pass with the switch, and 2 of 4 (the two excluded-adult income-related ESA cases) fail without it.Vacuity: with the old list, the extended property
test_other_members_awards_never_change_the_readers_at_pension_agefails onpension_credit_earnings_disregard(generate phase only, at most 15 examples), as it should. Both review r1 reviewers found that the working-age propertytest_other_members_awards_never_change_the_readersalso fails on the old list. The model works the disregard out for every benefit unit with earnings, whatever their age.Local runs on 57bef11: legacy_award_readers YAML: 89 passed; #2019's six YAML files: 82 passed; #2019's eight pytest files: 43 passed; the legacy award reader properties: 18 passed;
ruff format --check policyengine_uk: clean. The head, 5f91743, changes only a comment in the property file (back to main's wording) and a parameter description. On it,ruff format --checkis clean and the parameter list loads as before.Impact
Enhanced FRS 2024-25 (a private copy, sha256
e433e532…): one realMicrosimulationper package state, calculated for each year from 2025 to 2030. Base: 582b863, this branch's merge base with main. Branch: 57bef11; the later head 5f91743 changes no formula or parameter value. All 133 saved benefit-unit, person and household arrays are identical in every year, so the change is £0. They includepension_credit_earnings_disregard,pension_credit_income,guarantee_credit,pension_credit,household_net_incomeand the poverty flags. The same runs show why:claimant_or_partner_esa_incomeequalsesa_income(exact array equality) for every benefit unit in every year, and no member outside the claimant's couple and their dependants reports income-related ESA, income-based JSA or Income Support in the data.Review
check_switch.sh, the vacuity checks and the Pension Credit earnings disregard property tests, repeated the exact comparison of the saved Enhanced FRS arrays, and checked the local logs. 5f91743 restores main's wording of the further-shapes comment and putsclaimant_or_partner_esa_incomein backticks in the parameter description; this text takes up their wording findings. One optional suggestion is not taken: an assertion thatesa_incomeis absent from the list, since YAML cases 1 and 2 already fail if it is put back beside the scoped award. One of them also noted thatesa_income_eligibledoes not apply WRA 2007 Sch 1 para 6(1)(c)-(d), so a reported income-related ESA award passes the screen when the other member of the couple is entitled to State Pension Credit; r3 found that the model applies no pensionable-age bar to income-related ESA either (s.1(3)(c)). That is separate from this switch and is now Income-related ESA is paid alongside State Pension Credit (WRA 2007 s.1(3)(c), Sch 1 para 6(1)(c)-(d)) #2565.test_claimant_or_partner_awards_match_referencedraws qualifying young persons who report awards, and the reviewers' probes showed such an award no longer counts (£1,040 on the old list, £520 now, for a couple aged 70 and 68).Reproducer
Reproducer: policyengine_uk/tests/policy/baseline/finance/benefit/family/legacy_award_readers/pension_credit_earnings_disregard.yaml::Another member's income-related ESA leaves a single pensioner with the £5 earnings disregard
axiom: TheAxiomFoundation/rulespec-uk#416 queued (addendum TheAxiomFoundation/rulespec-uk#416 (comment), companion tests 15 and 18); rulespec-uk#414 (SPC Regs 2002 Sch VI earnings disregards)
🤖 Generated with Claude Code