Skip to content

UK pensions: calibrate State Pension, Pension Credit and pension contributions to the resident administrative facts (PolicyEngine/chronicle#305), pin the State Pension age boundary, fix the pension spine stages, and the engine pieces a State Pension uprating analysis needs #1069

Description

@juaristi22

Why

Measured on the #1045 head (arm ch3, c306cc07d, the latest candidate; every spine and terminal gate passes) with policyengine-uk 2.102.3 at FY2025-26, against the pension facts on the feed and in PolicyEngine/chronicle#305. The #979 national build, the v21c measurement and the eFRS 1.57.3 file were measured alongside.

  1. State Pension is about 9% short of what UK residents receive, and the calibration cannot see it.
    • Engine: £131.1bn paid to 11.33m people.
    • UK residents: about £144bn and 12.45m. That is GB residents from DWP's Spring 2026 table less the "paid outside UK" line (£146.07bn − £5.63bn and 13.20m − 1.09m), plus Northern Ireland (NISRA: 0.34m, about £3.8bn).
    • The only bound level is obr.state_pension, at −9.7%. It has drifted down across builds (−8.0%, −9.0%, −9.5%, −9.7%) and is a single row among 1,090.
  2. The missing State Pension sits with non-taxpayers.
  3. The State Pension age boundary is free.
    • Only five-year bands (65–69) are bound. Single ages 64–68 are 0.73 / 0.98 / 0.64 / 0.73 / 0.59m, against ONS 0.80 / 0.77 / 0.75 / 0.71 / 0.68m: age 65 is 27% high and age 66, the first year of State Pension age, 15% low.
    • 0.25m people under State Pension age (mostly exactly 65) carry state_pension_reported, which the engine drops.
    • The State Pension age population swings by build: 12.19m on ch3 against 12.51m on UK CGT: interpolate the sub-exempt remainder, anchor the clone incidence, and fence projected entrants (#970) #979.
    • New State Pension recipients are 4.23m against DWP's 5.05m (−16%).
  4. Pension Credit pays too many small awards.
    • Spending fits (−0.1%), but the caseload is 1.665m against 1.382m (+20%).
    • Savings Credit only is 0.298m against 0.176m (+69%), and Savings Credit spending £0.52bn against £0.36bn.
    • Take-up is one flat draw at 0.70 (DWP FY2019-20).
  5. Pension contributions are untargeted.
    • Employer contributions are three times employee contributions: £127.8bn against £35.2bn. DWP's savings trends put eligible savers' 2025 contributions at 61% employer, 27% employee and 12% tax relief of £166.1bn, i.e. about £101bn employer and £45bn employee.
    • Salary-sacrifice amounts are free: £22.5bn now, against £30–32bn on earlier builds. Only user counts are bound.
  6. The engine cannot run the analysis as it stands (policyengine-uk 2.102.3):
    • Dict reforms of the triple-lock switches do nothing.
    • State Pension age stays at 66, with no rise to 67 over 2026–28.
    • Basic→new reclassification double-counts additional State Pension: +£5.8bn by FY2030-31.
    • The Pension Credit guarantee for FY2025-26 is £221.85 against the published £227.10.
    • The April 2027 triple-lock rate is 3.4%, against the OBR's 3.7%.
    • Additional State Pension is uprated by the triple lock rather than CPI.
  7. The distribution of a State Pension reform is not yet stable. In an illustrative CPI-only-from-April-2027 probe:

Work packages

Delivery is one microcosm PR, stacked on #1045 while it is open, plus PolicyEngine/policyengine-uk#1899 and one follow-up engine PR.

WP0: re-pin the Chronicle feed to the post-PolicyEngine/chronicle#305 artifact

WP1: State Pension level and shape for UK residents

  • Consumer operations first.
  • Rows (new family dwp_state_pension):
    • GB-resident recipients and amount from the Stat-Xplore cubes over the FY2025-26 points; Northern Ireland from the DfC cube.
    • Recipients by single year of age (66–89, 90+) × gender × type. Fan-out pins one dimension, so there is one target per gender × type.
    • Region × type (the nine English regions, Wales and Scotland).
    • Weekly amount bands × type.
  • Diagnostics. obr.state_pension and DWP's "paid outside UK" and GB-plus-overseas lines become diagnostics (the obr.capital_gains_tax precedent). The SPI Table 3.6 £50–70k deferral (D6) is re-measured, then retired or re-ruled.
  • Acceptance:
    • Resident level and caseload within 2%.
    • Type × gender within 5%.
    • Single-age counts within 5% for ages 66–75.
    • SPI 3.6 bands no worse.
    • The non-taxpaying remainder within 10% of the implied figure.

WP2: the State Pension age boundary and the pension-age SPI channel (spine)

  • Root cause.
    • SPI donors get ages drawn uniformly within their SPI age band (65–74), so a copy aged 65 receives SPI State Pension at the 65–74 receipt rate. The stage-2 bridge then turns that into state_pension_reported.
    • Band carriers pool by income band × region with no age term, which is where the recipients aged 16–54 come from.
    • spi_income and spi_band_donors disagree on the band edges: (65,74)/(74,90) against (65,75)/(75,…).
  • Fix.
    • Draw donor ages by ONS single-year shares, with SPI State Pension recipients drawn only at State Pension age or over.
    • The bridge requires age ≥ State Pension age; a postprocess rule zeroes State Pension, Pension Credit and Winter Fuel Payment reports below State Pension age, with a receipt.
    • Band carriers pool by income band × age band.
    • Unify the edges.
  • The channel's composition (measured before committing). The SPI support channel is 10,000 FRS households drawn unweighted and given 50% of each region's prior mass, and every adult in it carries taxpayer-only SPI incomes. Stratifying its prior share by region × State Pension-age status keeps non-taxpaying pensioners represented. This is the likely root of both the non-taxpaying State Pension shortfall and pensioners sitting too high (the pattern appeared with UK income anchors at the calibration year and reserved top-tail income rows (income-anchor lane, PolicyEngine/chronicle#280) #1006 and UK spine: make SPI support households internally consistent (SPI-first order, housing shell) #1012).
  • Calibration. Bind ONS single ages 64–68 × sex (on the feed; mid-2024).
  • Acceptance:
    • Zero recipients below State Pension age.
    • Single ages 64–68 within 3%.
    • The State Pension-age population within 1% of ONS.
    • Spine gates pass.

WP3: Pension Credit

  • Rows. Benefit units by type (Guarantee only / Savings only / both) × partner × age band (GB), the Northern Ireland total, and the Guarantee/Savings spending split.
  • Take-up (stage). would_claim_pc is today one 0.70 draw over all benefit units, made before the SPI chain and never refreshed. Restrict it to benefit units with an adult over State Pension age, band it by entitlement type (the uc_reporter_redraw precedent), set the rates against the admin caseloads, and refresh after the SPI chain.
  • Prerequisite. Correct the engine's FY2025-26 guarantee and Savings Credit threshold (WP6) before measuring.
  • Acceptance: caseload within 3%, each type within 5%, spending within 1%.

WP4: pension contributions

WP5: the other pension-age benefits a State Pension change interacts with

WP6: the engine (policyengine-uk)

  • State Pension age.
  • Follow-up PR after Set State Pension age from date of birth, including the rise to 67 policyengine-uk#1899:
    1. Reforms of triple-lock inputs propagate.
      • Dict reforms edit the tree after processing and do nothing.
      • Scenario(parameter_changes=...) re-processes, but a "2027" key lands a year late.
      • The fix is one reform path that re-runs the derivation when its inputs are touched.
    2. The basic→new reclassification double count, measured at +£5.8bn by FY30-31.
    3. Additional State Pension uprated by CPI, not the triple lock.
    4. Pension Credit FY2025-26 rates (guarantee £227.10 / £346.60, Savings Credit threshold £198.27 / £314.34, carer and severe disability additions), a CPI-uprated Savings Credit maximum with a derived threshold, and the guarantee's uprating rule.
    5. The April 2027 rate: the OBR's 3.7% assumption until the announced rate (May–July earnings 3.9%).
    6. A switch for the promised income-tax easement for pensioners on State Pension alone from FY27-28.
    7. A guard against datasets that carry a state_pension column.
  • Until the follow-up merges, reforms must pass the basic and new State Pension amounts for every year as dict keys "2027".."2030".

WP7: validation

  • HBAI: pensioner quintile shares and pensioner relative poverty against HBAI FYE 2025, as validation only (HBAI is FRS-derived).
  • DWP path: the baseline State Pension and Pension Credit path against DWP's forecast to FY2030-31, after WP6. Ages stay static across years, so it is read with that caveat.
  • Reform stability: a State Pension uprating reform's budget and decile effects, with bootstrap standard errors, on the final build and a second calibration seed. Acceptance: budget within 3%, decile loss shares within 1 point.

Stacking and order

  1. The engine: Set State Pension age from date of birth, including the rise to 67 policyengine-uk#1899, then the follow-up PR, released. Then the microcosm engine bump with the State Pension age migration. The FY2025-26 Pension Credit fix moves the 2025 calibration, so it precedes WP3's measurement.
  2. WP0 → WP1 (consumer operations, then rows) → WP2 → WP3 → WP4 → WP5, one commit series.
    • Every stage change regenerates the coverage manifest, the H2 parity fixture and the digests at its own commit.
    • Each step is measured on a licensed arm against the ch3 control, one job at a time.
    • WP1's single-age rows and WP2's stage fix both move mass around ages 65–66. Measure them separately so the effects are not confounded.
  3. The branch stacks on UK CGT: BADR-qualifying gains, the Table 3 income joint and wealth-conditioned gain carriers (#1014) #1045 while it is open (no CI on stacked PRs, so run the local funnel plus the targeted shards) and rebases onto main when it merges.

Related, not in scope

Decisions needed

  1. The resident State Pension window. FY2025-26 points (May, Aug and Nov 2025, and Mar 2026) or calendar-2025 points. The engine pays FY2025-26 rates in period 2025.
  2. The fitted resident source. The Stat-Xplore cubes plus Northern Ireland (with DWP's forecast lines as diagnostics), or the reverse.
  3. Single ages. Split the 65–69 band into singles, or bind singles beside it.
  4. obr.state_pension. Demote it to a diagnostic. And keep obr.pension_credit bound, or rely on the DWP type rows.
  5. Employer contributions. A savings-trends ratio or ASHE rate bands; and whether the DWP totals are bound or diagnostic.
  6. Salary sacrifice. The 2025 amount anchor, and whether the relief rows come in through a counterfactual route or stay on Calibrate the UK national build from Ledger-backed targets #623 and Swap the microcosm-built UK spine into the national build and retire the incumbent feed #757.
  7. State Pension found below State Pension age. Zero it with a receipt, or reroute it to other social security income.
  8. Pension Credit take-up rates by type. Solved against the admin caseloads, or DWP's FRS-based take-up estimates.
  9. The Pension Credit guarantee after 2026. Earnings (the statutory floor), or following the triple lock (recent practice).
  10. The income-tax easement for State-Pension-only pensioners. Model it behind a switch now, or wait for the mechanism.
  11. Completing State Pension receipt for 66+ non-reporters. Optional, evidence first.

🤖 Generated with Claude Code

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions