Skip to content

Model the 25p State Pension age addition at 80 - #2340

Draft
MaxGhenis wants to merge 12 commits into
mainfrom
sp-age-addition-2139
Draft

MaxGhenis wants to merge 12 commits into
mainfrom
sp-age-addition-2139

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 11, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2139

Stacked on #2336. This branch starts from #2336's head (both change the State Pension split), so until #2336 merges this diff includes it; review only the second commit ("Model the 25p State Pension age addition at 80"). The base is main so CI runs.

WIP: draft. Tests, fail-on-main evidence and the impact on the certified pair are running; this body will be replaced with the full write-up.

Plan

  • gov.dwp.state_pension.age_addition.amount (£0.25 a week, SSCBA 1992 s.79(3) and Sch 4 Part III para 8, no uprating) and .age (80, s.79(1), s.173).
  • state_pension_age_addition: £13 a year for a basic State Pension recipient aged 80 or over (age on 6 October); none on the new State Pension (s.79(1) "under this Act", inserted by the Pensions Act 2014 Sch 12 para 85).
  • state_pension_reported_excluding_age_addition: the reported amount less the data year's legislated addition, which basic, new and additional State Pension now split.
  • Counted once in state_pension; excluded from overlapping_state_pension (SI 1979/597 reg 4(3), Sch 1 row 4).
  • Category D retirement pension is out of scope: Category D retirement pension (over 80, SSCBA 1992 s.78(3)) is not modelled #2339.

🤖 Generated with Claude Code

Reproducer: policyengine_uk/tests/policy/baseline/gov/dwp/carers_allowance_overlapping_benefits.yaml::Case 5, the additional pension in an old State Pension does not overlap., policyengine_uk/tests/policy/baseline/gov/dwp/carers_allowance_overlapping_benefits.yaml::Case 7, the model splits a reported old State Pension at the full basic rate and only the basic part overlaps., policyengine_uk/tests/policy/baseline/gov/dwp/carers_allowance_overlapping_benefits.yaml::Case 8, a reported old State Pension below the allowance., policyengine_uk/tests/policy/baseline/gov/dwp/state_pension_age_addition.yaml, policyengine_uk/tests/test_state_pension_components.py::test_protected_payment_above_new_state_pension_follows_period_type, policyengine_uk/tests/test_state_pension_components.py::test_unchanged_type_splits_at_its_own_flat_rate

MaxGhenis and others added 2 commits October 11, 2026 13:41
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>
MaxGhenis and others added 10 commits October 11, 2026 16:00
…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>
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>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

State Pension age addition (25p a week at 80, SSCBA 1992 s.79) is not modelled

1 participant