Conversation
SI 2002/2006 reg 3(1) puts pension income (reg 5(1)) in step one, where only the excess over £300 counts. Reg 5(1)(a) covers "any pension to which section 577 ... of ITEPA applies", which is the State Pension (ITEPA 2003 s.577(1)), and reg 7(2) takes it out of social security income. The model counted it in step two through social_security_income, so a pensioner whose other step-one income was under £300 had tax credit income overstated by up to £300. tax_credits_current_year_income now lists step-one income and reg 7 social security income explicitly. YAML cases are computed by hand from the law; Hypothesis properties check the income against the law, against the previous formula (applied as a reform), and the award bounds that follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Half the drawn adults now have no private pension, interest, dividends or property income, where the State Pension disregard changes the income. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 2, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #2052
Summary
Tax credit income counted the State Pension in step two, through
social_security_income. In law it is step-one pension income, where only the excess over £300 counts. This PR moves it to step one.A pensioner whose other step-one income is under £300 had tax credit income overstated by up to £300, which is up to £123 of tax credits at the 41% rate.
Stacked on #2034 (
tax-credits-pension-credit-passport, head29891b0b5), which split outtax_credits_current_year_income. #2034 is stacked on #2027, #2013, #2001 and #1896.Law (fetched verbatim from legislation.gov.uk
/data.xml, 2026-10-02)What reg 7 social security income includes
The other five components of
social_security_incomeare reg 7 social security income, so they stay in step two with no disregard:incapacity_benefitjsa_contrib_reportedesa_contrib_reportedcarers_allowancecarer_support_paymentThe model's other benefits are either disregarded by reg 7(3) Table 3 (for example Attendance Allowance, Child Benefit, DLA, PIP, Housing Benefit, Income Support, income-based JSA, Maternity Allowance, Severe Disablement Allowance, industrial injuries benefit, Bereavement Support Payment) or not paid under an Act that reg 7(1) lists (Pension Credit, Universal Credit).
Two partial disregards are not modelled, because the data cannot separate them: short-term lower-rate Incapacity Benefit and Incapacity Benefit after Invalidity Benefit (Table 3 item 14), and contribution-based JSA above the ITEPA s.674 taxable maximum (item 16).
The other step-one sources
private_pension_incomedividend_incomeproperty_incomesavings_interest_income#2056 also covers two things this check found outside step one:
other_investment_incomeis left out, and reg 3(7)(b)-(c) deducts Gift Aid and registered pension contributions, which the model does not. None is changed here.Changes
tax_credits_current_year_income:state_pensionjoins the step-one sources. Step two lists the reg 7 social security income components instead of readingsocial_security_income. Both lists are module constants (STEP_ONE_INCOME,SOCIAL_SECURITY_INCOME) with the legal reading in comments.social_security_incomeis unchanged. Income tax and Income Support still read it.Invariants (property-tested, Hypothesis)
For any family of one or two adults aged 25-90 and up to two children, with any mix of State Pension, private pension, savings interest, dividends, property income, earnings, trading income, Carer's Allowance, Carer Support Payment, contribution-based JSA and ESA, Incapacity Benefit, miscellaneous income, and tax credit and Pension Credit claims:
tax_credits_current_year_incomeequals max(step one - £300, 0) + step two, computed in the test directly from the inputs.social_security_incomeis counted exactly once: the State Pension in step one, the rest in step two. A new component fails this test until it is classified.Differential check outside the suite: the test's previous-formula reform equals the real previous commit (
f2eb82445) on 8 outputs for 400 seeded random families (maximum difference 0.0000).Tests
YAML: 9 cases in
tests/policy/baseline/gov/dwp/tax_credits_state_pension_step_one.yaml, each computed by hand from the law at 2024-25 rates, with the arithmetic in comments:On the base
f2eb82445, 7 of the 9 fail on value, each at exactly the State-Pension-in-step-two figure given in its comment. The two no-change cases (3 and 9) pass on both.Two inputs the model gets wrong for unrelated reasons are entered at their statutory amounts, as in #2034: the CTC family element (£545, #2051) and no Schedule IIA child amount for a tax credit recipient.
Hypothesis:
test_tax_credits_state_pension_step_one_properties.py, 25 derandomized examples of up to 6 families each, plus 5 YAML households as explicit@examples. Coverage and mutation results: PENDING.Suites:
f2eb82445too and which its29891b0b5fixes.29891b0b5: the tax credit and childcare YAML files, 69 passed.main.Enhanced FRS impact
Real
Microsimulationruns on a private copy of the Enhanced FRS 2024-25 (one run per package state), basef2eb82445against this branch, for 2024 and 2025. The rebase onto29891b0b5changed only two YAML test files.No award changes in either year: £0. WTC, CTC, Pension Credit, the childcare criteria and household net income are identical on every record.
Why, for 2024:
In 2025 the income figure falls in the same way and there are no awards.
So the fix corrects household calculations and the rule itself; the Enhanced FRS has almost no pensioners on tax credits to show it.
Axiom
axiom: PENDING
Related and follow-ups
🤖 Generated with Claude Code