Repository navigation
Conversation
The part of a reported State Pension above the type's full rate (additional pension for the basic State Pension, protected payments for the new) was uprated by the full rate's own triple-lock rise. Each Up-rating Order raises it by September CPI instead (SSAA 1992 ss.150(1)(c), 151 and 151A; SI 2026/148 arts 4(3) and 6(3)(b): 3.8% against 4.8% for the full rates; SI 2025/295: 1.7% against 4.1%). Uprate it by gov.economic_assumptions.indices.september_cpi_uprating from the data year, read from the simulation's own parameters, so a reform to the full rates or the triple lock no longer moves it and a price scenario does. Fixes #1941. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SSCBA 1992 s.79(1) and (3) and Sch 4 Part III para 8 give a person over 80 who is entitled to a retirement pension under that Act 25p a week, which each Up-rating Order leaves out (SI 2026/148 art 3(2)(a)). A new State Pension does not count (s.79(1) as amended by the Pensions Act 2014 Sch 12 para 85). Add gov.dwp.state_pension.age_addition (amount, age) and state_pension_age_addition, and count it in state_pension. The survey's State Pension amount is taken to include the addition, so state_pension_reported_excluding_age_addition takes the data year's legislated addition off before basic_state_pension, new_state_pension and additional_state_pension split it: it is neither counted twice nor uprated as additional pension. It never reduces a carer benefit (SI 1979/597 reg 4(3), Sch 1 row 4), so overlapping_state_pension leaves it out. Fixes #2139. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rms as a reform CI found two test faults (run 38161065391): the differential against main's formula compared the model's float32 arrays with a float64 reference at rtol 1e-12, which fails for any reported amount float32 cannot hold exactly (e.g. £169.00 a week, aged 98); and a Scenario cannot take the reform dictionary's "2026-01-01.2100-12-31" period, so that case passes it as a reform. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…er overlap tests A simulation given basic or additional State Pension directly, with no reported amount, now gets the age addition at 80 too. The carer overlap tests' 80-year-olds report amounts that include the 25p: it moves from additional pension to the age addition, and in case 8 it no longer reduces Carer's Allowance (SI 1979/597 reg 4(3); Sch 1 row 4). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…in the docs At 5% September CPI the triple lock also rose 5%, so the scenario test passed on main. At 1%, below the triple lock's 2.5% floor, the add-on rises 1% and the full rates at least 2.5%. The docs record the change in the model's State Pension against DWP's forecast, from full runs on the certified dataset. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pect none on a new State Pension CI run 38170838155 failed three of the age addition tests. None was a model defect: - The two components-add-up properties drew a weekly amount of 8.3e-246 (and 2.2e-313). state_pension_reported is a float variable, stored in float32, so the simulation holds it as nil and rightly pays no age addition; the reference read the float64 draw and expected 25p. The reference now reads each report as the simulation holds it, and the two CI examples (and a tiny amount float32 does hold) are pinned as examples. - The age addition reform test expected £10 a week for both records in 2030-31. Held at 77, the second record is on the new State Pension by then, and the age addition belongs only to a retirement pension under the 1992 Act (s.79(1)), reformed or not. The test now asserts each year's type and expects the addition only on the basic State Pension. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…branch Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keep the September CPI uprating in additional_state_pension: main's np.divide guard (00c07d6) was on the full-rate ratio this branch replaces. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ITEPA 2003 s.577(2) lists the SSCBA 1992 retirement pension sections but not s.79, so the docs now say the model taxes the age addition as part of the pension it increases (s.79(1)), and that s.677 does not exempt it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: GPT-6 <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… into the age addition branch Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SSI 2023/302 reg 16(3)(a) and (6) overlap Carer Support Payment with a Retirement Pension "payable under Part II and Part III of the 1992 Act, excluding any additional pension or graduated retirement benefit". The age addition (SSCBA 1992 s.79, Part III) is not excluded, unlike for Carer's Allowance (SI 1979/597 reg 4(3)). Split the overlap into overlapping_state_pension (Carer's Allowance, unchanged) and carer_support_payment_overlapping_state_pension, sharing one helper. Correct CSP Case 6 to £2,013 and add the under-80 case. Document the two edges the review named: a report below 25p a week, and the contributed state_pension_increase reform scaling the addition. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oor and two simplifications From the independent review of 4e495b7: the 17.0% per-recipient growth came from runs before this fix; from April 2027 SSAA 1992 ss.150(2) and 151A(3) set a floor ("not less than" the rise in prices) that the model pays exactly; contracted-out records and additional pension inside a partial basic pension are simplified. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…branch 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: 109 (thresholds in Notes
Moves flagged for review
69 more flags are in the report artifact. Receipts by tax head
Spending by benefit and service
Caseloads
Government balance, each component counted once
Model totals
Household income totals
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
Household net income by decileMean change in household net income per household, and as a share of the decile's base income; households stay in the base run's deciles.
No change in any year: components the model counts twice; population. 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
|
…perty test From the independent delta review of 9ace2ca: the test rebuilt one overlapping amount for both carer benefits and left the 25p age addition out of it, so its explicit example of a Scottish carer aged 80 with basic and additional State Pension failed by £13 once Carer Support Payment counted the addition (SSI 2023/302 reg 16(6)). The reference now adds the age addition to the Carer Support Payment overlap only, as the regulations do, and keeps it out of Carer's Allowance (SI 1979/597 reg 4(3)). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
juaristi22
left a comment
There was a problem hiding this comment.
Reviewed at bc81c88913d9430365e9c9ca03a122d4c4410dd2, using the PR’s own diff over #2336 at fa27e494826858baf2732cdb00efefad4941f2ea. No actionable findings from independent policy/source and code reviews.
Official GB and NI sources support the fixed 25p addition from attained age 80, old/new State Pension separation, pension-income treatment and distinct Carer’s Allowance/Scottish Carer Support Payment overlap rules.
Validation: 37 focused Python tests and all 48 serially collected YAML cases passed. Doubling the addition increases pension by £13, Income Tax by £2.60 and household net income by £10.40, with other components unchanged. Formatting and import provenance checks passed. The stacked-parent merge order remains.
Fixes #2139
Stacked on #2336 (fixes #1941). Both change how the reported State Pension is split, so this branch is built on #2336's head and its diff includes #2336 until that merges. Review this PR's own changes with
git diff <#2336 head>...<this head>. The base ismainso CI runs. Merge #2336 first.What and why
The 25p a week age addition at 80 was not modelled. The survey's reported State Pension includes it for basic State Pension recipients over 80, and the model booked that 25p as additional pension, uprated it each year, and never paid it to anyone who turned 80 in a later year. This PR models it as the law sets it: a fixed 25p a week, never uprated, for a person over 80 on a retirement pension under the 1992 Act.
Law
Change
gov.dwp.state_pension.age_addition.amount(£0.25 a week from 1992, no uprating) and.age(80).state_pension_age_addition(Person, year): the weekly amount ×WEEKS_IN_YEARfor a person aged 80 or over (age read on 6 October, as for State Pension age) with aBASICState Pension type and either a reported State Pension in the data year or a basic or additional State Pension in the year. Otherwise 0.state_pension_reported_excluding_age_addition: the reported amount less the data year's legislated addition, floored at 0.basic_state_pension,new_state_pensionandadditional_state_pensionnow split this amount, so the addition is neither counted twice nor uprated as additional pension.state_pensionaddsstate_pension_age_addition. Pension Credit, UC, HB, CTR andgov_spendingall readstate_pension, so they count it once.overlapping_state_pension(Carer's Allowance) leaves the addition out, as before. Newcarer_support_payment_overlapping_state_pensionkeeps it in, and Carer Support Payment's overlapping-benefit list now uses it. The two share one helper.Edges, documented:
gov.contrib.cec.state_pension_increasereform scalesstate_pensionas a whole, age addition included, although no Up-rating Order raises it.Out of scope: the Category D retirement pension (s.78(3)), tracked in #2339.
Tests
policyengine_uk/tests/policy/baseline/gov/dwp/state_pension_age_addition.yaml: £13 at 80; none at 79; none on a new State Pension at 85; none below State Pension age; the same £13 in 2025, 2026 and 2030; a reported full basic rate plus 25p gives the full basic rate, no additional pension, and the addition.carer_support_payment_overlapping_benefits.yamlCase 6: at 80 with £2,000 basic and £5,000 additional State Pension, the Carer Support Payment overlap is £2,013 and the payment £86.45 × 52 − £2,013, while the Carer's Allowance overlap stays £2,000. Case 6a: at 79, £2,000.test_state_pension_components.py: dataset-built cases and Hypothesis properties (below).test_carer_overlapping_benefits_properties.py: the Carer Support Payment reference overlap now includes the age addition (and Carer's Allowance's still leaves it out). Its explicit example of a Scottish carer aged 80 fails by £13 with the old shared reference and passes with the split one.Fail on the base (#2336's head
fa27e4948), pass on this head: with only this PR's test files copied into a detached #2336 tree, the three YAML files give 17 failed and 31 passed, andtest_state_pension_components.pygives 12 failed and 21 passed (5 min 57 s,-n 4). The failures are the age addition cases and the dataset-built cases where an over-80 basic recipient's 25p is still split as additional pension. Three of them error because the new variable or parameters do not exist on the base. Logs:~/reviews/w7-uk-defects-2026-10-11/impact/r2/fob-2340-{yaml,py}.log. On this head all 48 YAML cases and the four carer overlap properties pass, and CI runs the full suite.Invariants (property tests)
basic + additional + new + age additionequals the reported amount for every record over State Pension age with a type and a reported amount of at least 25p a week. This is a differential against the model without the addition.NEWandNONEtypes and under 80.Impact on the certified pair
Real
Microsimulationruns onenhanced_frs_2024_25.h5from policyengine-uk-data 1.58.1 (sha256056e80fd8e91…, the dataset in policyengine.py's certified UK bundle). Base: #2336 atfa27e4948(so the table is this PR's own effect). Head: this PR at9ace2cafd. Both trees clean.additional_state_pensionbasic_state_pensionnew_state_pensionstate_pension_age_additionstate_pensionpension_credithousing_benefituniversal_creditcouncil_tax_reductionincome_taxhousehold_net_incomegov_taxgov_spendinggov_balanceadditional_state_pensionbasic_state_pensionnew_state_pensionstate_pension_age_additionstate_pensionpension_credithousing_benefituniversal_creditcouncil_tax_reductionincome_taxhousehold_net_incomegov_taxgov_spendinggov_balancestate_pension_age_addition 2030-31: head total £47.15m; weighted recipients 3,626,819
state_pension_age_addition 2024-25: head total £45.87m; weighted recipients 3,528,325
state_pensiondoes not change. The 25p each recipient reported moves from additional pension (and, for partial pensions below the full basic rate, from basic State Pension) to the addition.state_pensionfalls £1.1m in 2025-26 and £7.8m in 2030-31, because that 25p was previously uprated each year, as additional pension (£33.7m of it, by September CPI) or, for partial pensions below the full basic rate, as basic State Pension (£12.2m, by the triple lock), and is now fixed. Pension Credit rises slightly and income tax falls slightly.gov_spending,gov_balance,household_net_income, andgov_tax). In 2024-25gov_balancechanges for one record by rounding. Poverty rates do not move (0.000pp where shown).Overlaps
docs/book/programs/gov/dwp/state-pension.mdtoo, so expect a text conflict. Keep both sets of changes.state_pension, which is right (the addition is part of the retirement pension).additional_state_pensionand is adding support forstate_pension_age_additionandstate_pension_reported_excluding_age_addition. These names stay as they are.Review
972564b0a: REQUEST_CHANGES. It found the Carer Support Payment overlap error (SSI 2023/302 reg 16(6)), fixed inf7e8df354, and the placeholder body, now replaced.9ace2cafd: REQUEST_CHANGES. The carer overlap property test still used one reference for both benefits and failed in CI. Fixed inbc81c8891(test only). It also had wording notes, applied here. A delta review ofbc81c8891follows.axiom: TheAxiomFoundation/rulespec-uk#458 queued
Reproducer:
policyengine_uk/tests/policy/baseline/gov/dwp/state_pension_age_addition.yaml,policyengine_uk/tests/policy/baseline/gov/social_security_scotland/carer_support_payment_overlapping_benefits.yaml::Case 6, the additional pension in an old State Pension does not overlap; at 80 its age addition does (SSI 2023/302 reg 16(6)).,policyengine_uk/tests/test_state_pension_components.py::test_full_basic_rate_plus_age_addition_is_never_additional_pension🤖 Generated with Claude Code