Skip to content

Set DWP benefit rates to the announced amounts, not CPI projections - #1925

Merged
MaxGhenis merged 7 commits into
mainfrom
dwp-2025-26-announced-rates
Oct 11, 2026
Merged

MaxGhenis merged 7 commits into
mainfrom
dwp-2025-26-announced-rates

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Closes #2110.

An agent reported on 2026-09-29 that PolicyEngine UK's 2025-26 DWP parameters look CPI-projected rather than announced. I audited every parameter under parameters/gov/dwp/ (254 series) against DWP's Benefit and pension rates publications, and fixed the values and their references.

Each fiscal year from 2018-19 to 2025-26 appears in two editions: that year's, and the next year's previous-year column. I checked both. 2026-27 has only its own edition so far, which I checked against SI 2026/148. For 2025-26 and 2026-27 I also checked the Social Security Benefits Up-rating Orders (SI 2025/295, SI 2026/148). Tax credits were checked against HMRC's rates page and the Tax Credits Up-rating Regulations. An independent verifier re-derived every published amount. As a differential check, the fixture was also compared with a separate extraction from DWP's rate PDFs (2014-15 to 2026-27) and the 2010-2013 Up-rating Orders. That extraction was made by another session for its own uprating work, and all 367 overlapping values agree.

The report was right, and the problem was wider than 2025-26.

Problem Parameters Example
2025-26 written as 2024-25 × 1.017, without DWP's 5p rounding or the right uprating basis PC standard minimum guarantee (raised by earnings, 4.1%, as SSAA 1992 s.150A requires) and savings credit threshold (raised 4.5% / 4.4%, so the maximum savings credit rose by CPI, 1.7%); pension-age HB allowances (the guarantee plus the maximum savings credit, rounded up to 5p: 227.10 + 17.30 = 244.40); working-age HB allowances; carer premium and addition; AA, DLA, PIP, CA, SDA PC minimum guarantee £221.85 / £338.61 → £227.10 / £346.60. HB pension-age £239.20 / £357.98 → £244.40 / £366.00
Uprated from a fixed start_instant: years without a key were projected from the start value, and from 2027-28 projections restarted from it rather than from the latest published rate. The premiums and CAA held only a 2015 key, set at the 2020-21 rate, so 2027-28 jumped by up to 12% Legacy disability, enhanced and severe premiums; Constant Attendance Allowance; PC child and severe disability additions Disability premium (single) 2025-26 £47.48 → £43.20; 2027-28 no longer jumps from £44.85 to £50.22
One 2015 key holding the 2020-21 rate, CPI-uprated from there Income Support personal allowances (and the ESA couple rate, which held a single under-25 rate for 2015-19) Single 25+ 2025-26 £101.00 → £92.05 (8-10% too high in 2019-26, 2-6% in 2015-18); 2015-18 now £73.10
Missing years HB non-dependant deductions: 2019-20, 2020-21 and 2025-26 bands and amounts; 2022 bands were keyed at 2021, which the 2021 Order left unchanged (SI 2021/162 art 24(3)). The scale is uprated after 2026-27 rather than frozen 2025-26 £19.30…£124.55 on the 2024 bands → £19.65…£126.65 on £183/£266/£348/£463/£577
Fixed in law but projected WTC childcare limits, which HB also uses as its £175/£300 childcare limit (HB Regs reg 27(3); "remains unchanged" in SI 2025/295 and 2026/148 art 23(2)); CTC family element £545 HB childcare limit 2025-26 £312.06 → £175
Other UC 2020-21 standard allowances and child element; UC non-dependant deduction 2019-21; IIDB 2015-24; WTC 30-hour and CTC severely disabled child elements 2022-24; the unread ESA/JSA amount parameters

References.

  • Every changed file cites its sources: the publications (first year changed, 2025-26 and 2026-27) and the Up-rating Orders (or HMRC and the Tax Credits Up-rating Regulations for tax credits).
  • Most changed files also have a comment stating the range of years written.
  • The pension-age HB allowances (allowances/{single,couple,lone_parent}/aged.yaml) cited SI 2006/213 Sch 3, the working-age regulations. They now cite SI 2006/214 Sch 3 para 1(1)(b)/(2)(b), plus NI SR 2006/406 Sch 4 para 1, and their descriptions say they are the rates for people who reached State Pension age before 1 April 2021.
  • The lower rates for later cohorts are Split pension-age Housing Benefit allowances by when State Pension age was attained #1913, which builds on Set State Pension age from date of birth, including the rise to 67 #1899 (merged) and should merge after this PR.

Not in this PR:

  • How the HB and CTR formulas read the non-dependant scale. They use right=True, so a lower edge falls in the band below and zero income pays nothing, and they don't apply the reg 74(6)-(7) exemptions (e.g. full-time students). Fixing the banding without the exemptions charges exempt people, so both go in a separate PR.
  • The projection basis. The PC standard minimum guarantee, which s.150A requires to rise at least with earnings, and the amounts set alongside it (the savings credit threshold, and the pension-age HB allowances, which equal the guarantee plus the maximum savings credit) are still projected by gov.benefit_uprating_cpi from 2027-28. The September-CPI uprating work and its follow-up (PC SMG earnings) cover the basis.
  • HB earnings disregards (housing_benefit/means_test/income_disregard/*): Take Housing Benefit earnings disregards from net earnings only #1908, now merged.
  • housing_benefit/takeup.yaml: owned by Abolish working-age Housing Benefit from 1 July 2026 (NI 1 October 2026) #1910.
  • The unread LHA.means_test.* parameters.
  • Pre-2019 values of series that didn't use start_instant (e.g. aged holds £181 for 2015-18, the 2019-20 rate).
  • Formula bugs the audit surfaced, now separate chips:
    • Pension Credit severe disability addition for couples;
    • child amounts missing from the HB applicable amount;
    • IS earnings disregards applied to all income;
    • the 2016-20 LHA freeze.

Tests

  • test_dwp_published_rates.py + fixtures/dwp_benefit_and_pension_rates.yaml: 130 parameters, each with its published rate per fiscal year and a source URL per year, plus the non-dependant deduction table. The derived row (SDA with the age addition) is labelled. Invariants:
    1. Differential. The value PE uses in each fiscal year (after uprating, at 30 April) equals the published rate.
    2. No fixed-start uprating remains on any audited parameter, so no year is projected from a stale start value.
    3. Continuity. For series published through 2026-27, the 2027-28 projection equals the 2026-27 rate × the uprating index change, so projections start without a jump. The UC standard allowances and LCWRA element are left out: the Universal Credit Act 2025 sets a minimum for the standard allowance above CPI uprating (s.1) and freezes the LCWRA element (s.3) for 2026-27 to 2029-30, which the model doesn't yet follow (reported to the UK hub).
    4. Non-dependant deductions. Each year's bands and amounts are the published ones, and the scale never falls as income rises.
  • benefit_rates_2025_26.yaml: YAML tests of 2025-26 amounts through the variables that use them: PC minimum guarantee, HB allowances (working-age and pension-age), IS allowances, disability and carer premiums, AA/DLA/PIP, CA.
  • Updated tests that had pinned the old projected values, each checked against the law:
    • IS 2021 and 2025;
    • CA and the PC carer addition 2025;
    • UC non-dependant deduction 2020;
    • the tax credits 2024 case (30-hour element £1,015);
    • EntitledTo Add tests #3, a pinned PE regression: PC £346.60 × 52 − £14,000 = £4,023.20;
    • HB non-dependant deductions: the cases move to the 2025-26 band edges.
  • Tests from main that pinned projected rates (picked up when merging main at 325d585), now on the published ones:
    • HB and IS personal allowances 2025-26 (legacy_claimant_relationships, legacy_family_definitions): £92.05, £72.90, £144.65 and £110.15 a week, not HB's £92.04, £72.92, £144.67 and £110.14 or IS's £101.00, £80.01 and £158.67;
    • HB childcare limit for one child: £175 a week, not £312.06;
    • WTC childcare limit for one child in 2020-21: £175, not £248.64;
    • UC couple standard allowance 2020-21: £594.04 a month, not £596.58;
    • PC carer addition 2025-26: £46.40, not £46.37.
  • Carer premium for two carers: Pay the legacy carer premium per qualifying claimant or partner; IS carer route through them only #2001 (merged) pays the premium for each qualifying claimant or partner and deleted carer_premium/couple.yaml, so this PR no longer sets it.
  • PC carer addition 2018-19: £36.00 is added, so 2019-20's £36.85 is no longer backdated to earlier years.
  • At e1bf98b (main 3173baa merged, policyengine-core 3.33.2): test_dwp_published_rates.py 1,291 passed and 66 skipped (61 series that end before 2026-27 or are not uprated, and the 5 UC Act 2025 exceptions); the full YAML suite passes (2,972). CI runs the full pytest suite.

Impact (Enhanced FRS 2024-25)

These are two real runs over the same dataset: main (3173baa) and this PR (e1bf98b), fiscal years 2025-26 to 2030-31, both on policyengine-core 3.33.2. Nothing is scaled.

Change 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31
Pension Credit (£m) +395.1 0 -1.6 -1.6 -1.6 -1.7
Housing Benefit (£m) +285.3 0 -1.1 -1.4 -1.5 -1.7
Income Support (£m) -58.5 0 0 0 0 0
Council Tax Reduction (£m) +4.5 0 -2.2 -2.2 -2.2 -1.1
Household net income (£m) +631.5 0 -4.9 -5.1 -5.4 -4.5
Pension Credit caseload (k) +14.2 0 0 0 0 0
Housing Benefit caseload (k) +39.6 0 0.0 -0.1 -0.1 0.0
Pensioners in poverty AHC (k) -27.0 0 0 0 0 0
Pensioners in poverty BHC (k) -0.8 0 0 0 0 0
People in poverty BHC (k) +33.9 0 0 0 0 0
People in poverty AHC (k) -5.5 0 0 0 0 0
  • 2025-26: most of the change.
    • Pension Credit: the standard minimum guarantee rose with earnings (4.1%, as s.150A requires) and the savings credit threshold by 4.5% / 4.4%, so the maximum savings credit rose by CPI. Guarantee Credit entitlement rises £505m and Savings Credit entitlement falls £32m (both before take-up; Pension Credit paid, +£395m, applies would_claim_pc); 14.2k more benefit units get Pension Credit.
    • Housing Benefit rises £285m, from the higher pension-age allowances and 39.6k newly entitled pension-age benefit units. Those units go from Savings Credit only to Guarantee Credit, and HB treats a Guarantee Credit recipient's income and capital as nil, so the capital limit no longer excludes them (their HB capital was £24,000-£43,000). Pensioner AHC poverty falls by 27.0k.
    • Correcting the Income Support overpayment cuts IS by £58m for 90.1k benefit units, an average of about £650 a year (median £466). 34.7k people move below the BHC line, all in households whose income falls, and 0.8k leave it; the BHC threshold is unchanged.
    • These 2025-26 effects rest on very few survey records: one benefit unit accounts for most of the HB rise, the 39.6k newly entitled units are 8 records, and the 34.7k newly poor are almost all one household. Read them as indicative.
  • 2026-27: no programme total moves by more than £5,000. The 2026-27 values that change are the WTC childcare limits that HB also uses (£322.67 / £553.14 → £175 / £300) and the unread JSA amounts (rounding: £95.51 / £75.72 → £95.55 / £75.65). The Income Support and tax credit amounts also change, but Income Support pays nothing in 2026-27 in either run.
  • 2027-28 on: net income falls £4.5m-£5.4m a year. About 840k households lose each year, 97% of them under £5. In 2027-28 the median loss is £1.67, the mean about £6, and about 13k households lose over £100 (2028-31: medians £1.70-£1.77, 7.9k-15.9k over £100). Projections now continue from the published 2026-27 rates. On main, the disability, enhanced and severe disability premiums are uprated from a 2015 start value and jump in 2027-28 (single disability premium £44.85 → £50.22; single severe disability premium £86.05 → £96.20); here they go to £45.88 and £88.03. In 2027-28, rerunning this PR with main's premium files puts −£0.83m of the −£1.09m HB change and −£2.14m of the −£2.16m CTR change on the premiums. The −£1.6m of Pension Credit, which changes for 816k benefit units, does not come from the premiums.

Axiom

axiom: 2025-26 rates (SI 2025/295) queued TheAxiomFoundation/rulespec-uk#382 | 2026-27 rates encoded-correct where encoded (uk/regulations/uksi/2026/148/*, HB/PC/ESA pipelines) | IS and income-based JSA personal allowances queued TheAxiomFoundation/rulespec-uk#382 | HB childcare limits (SI 2006/213 reg 27(3), SI 2006/214 reg 30(3)) queued TheAxiomFoundation/rulespec-uk#382 (step 5)

  • rulespec-uk encodes DWP rates only from April 2026 (uk/regulations/uksi/2026/148/article/{4,6,14}.yaml, schedule/1.yaml and the program pipelines). No module has a 2025-26 amount: git grep … origin/main -- uk on 1bdb9837 finds none of 227.10, 346.60, 244.40, 366.00, 92.05, 144.65, 72.90, 43.20, 61.65, 83.30, 46.40, 198.27 or 314.34.
  • SI 2025/295 is not in the served corpus (404), so ingest comes first.
  • uksi/2002/1792/6.yaml (PC minimum guarantee and additions) applies the 2026-27 amounts to every earlier period through effective_from: '0001-01-01' versions, so for 2025-26 it is wrong, not just missing. govuk/carers-allowance.yaml has a 0001-01-01 version too, but the rate it imports (SI 2026/148 Sch 1) starts on 2026-04-06, so for 2025-26 it has no value.
  • rulespec-uk#382 is dispatch-ready. It has the article-by-article law, a pasteable review_finding and companion tests whose expectations are this PR's fixture values.
  • The Income Support (SI 1987/1967 Sch 2) and income-based JSA (SI 1996/207 Sch 1) personal allowances are not encoded for any year.
  • Where Axiom does encode 2026-27 amounts (contribution-based JSA £75.65/£95.55, HB working-age allowances, PC carer addition £48.15), they match PE.

🤖 Generated with Claude Code

Audited every parameter under gov/dwp against DWP's "Benefit and pension
rates" publications (each fiscal year 2019-20 to 2026-27 appears in two
editions) and, for 2025-26 and 2026-27, the Social Security Benefits
Up-rating Orders (SI 2025/295, SI 2026/148). Tax credit rates were checked
against HMRC's rates page and the Tax Credits Up-rating Regulations.

- 2025-26 values written as 2024-25 x 1.017 without DWP's rounding, or on the
  wrong basis, now match the Order: Pension Credit standard minimum guarantee
  227.10/346.60 (earnings-linked, not CPI), savings credit threshold, the
  pension-age Housing Benefit allowances 244.40/366.00, working-age HB
  allowances, carer premium and addition, AA, DLA, PIP, Carer's Allowance, SDA.
- Parameters uprated from a fixed start_instant (legacy disability premiums,
  Constant Attendance Allowance, Pension Credit child and severe disability
  additions) had every later published rate overwritten by projections and
  jumped when projections began. Their full published history is written
  out and start_instant removed.
- Income Support personal allowances held the 2020-21 rate from 2015 and were
  CPI-uprated from there: 8-10% too high every year.
- The carer premium for two carers is paid for each carer, so twice the rate.
- Housing Benefit non-dependant deductions: 2019-20, 2020-21 and 2025-26
  bands and amounts added, and the 2022 bands moved off 2021-22 (the 2021
  Order left them unchanged).
- WTC childcare limits (175/300, also Housing Benefit's childcare limit) and
  the CTC family element (545) are fixed in law and no longer projected.
- UC 2020-21 standard allowances and child element, UC non-dependant
  deduction, IIDB, and the unread ESA/JSA amount parameters also corrected.
- The pension-age HB allowances cite SI 2006/214 Sch 3 para 1 (and NI SR
  2006/406) instead of the working-age SI 2006/213.

Tests: test_dwp_published_rates.py checks every audited parameter against a
fixture of the published rates for each year, that no fixed-start uprating
remains, and that projections continue from the last published rate; YAML
tests check the 2025-26 amounts through the variables that use them.
Existing tests that pinned the old projected values are updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ctions

- Income Support personal allowances and the ESA couple rate: set the 2015 keys
  to the 2015-16 rates (frozen to 2019-20), so 2015-18 no longer use the
  2020-21 rate; IIDB 2015-18 set to the published rates. The fixture covers
  these years.
- Housing Benefit non-dependant deductions: bands include their lower edge
  ("not less than", HB Regs 2006 reg 74(2)), and a non-dependant with no
  income pays the lowest deduction (reg 74(1)(b)). The HB and CTR formulas no
  longer call the scale with right=True, which put £183.00 in the band below
  and gave £0 income no deduction. The scale is now uprated after 2026-27
  instead of frozen.
- The income-related ESA personal allowances cite the Universal Credit Act
  2025 s.5 for 2026-27, not SI 2026/148.
- Tests: the two-carer premium is twice the one-carer premium in every year;
  the non-dependant table, edges and monotonicity for 2019-20 to 2026-27;
  derived fixture rows are labelled.
- Removed the carer premium's 2010 key (the one-carer rate) and titled a bare
  GOV.UK reference.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Response to the independent review (Opus, subfleet job 20260930-092129-review-1925), addressed in 45290f3:

  1. 2015-18 still on the 2020-21 rate (should-fix). Fixed.
    • The Income Support personal allowances are set to the 2015-16 rates, which were frozen to 2019-20: £73.10 / £57.90 / £114.85. The source is DWP's proposed-rates PDFs for 2015-16 to 2018-19, cross-checked against a second session's extraction.
    • ESA couple 2015-18 is £114.85 (it held £57.90).
    • IIDB 2015-18 is £168.00 / £168.00 / £169.70 / £174.80.
    • The fixture now covers 2015-18 for these parameters.
  2. Non-dependant bands strict in PE, inclusive in law (should-fix). Fixed.
    • household_benefits_individual_non_dep_deduction and council_tax_reduction_individual_non_dep_deduction no longer pass right=True, and they floor income at zero. So £183.00 is in the £183-265.99 band, and a non-dependant with no income pays the lowest deduction (reg 74(1)(b)).
    • The tests are renamed, with cases at exactly £183 and £577 a week, just below £183, and at zero.
    • A new invariant test checks every year's table 2019-2026, the inclusive edges and monotonicity.
    • This fix alone moves HB by −£7-8m and CTR by −£2-2.5m a year, measured as the difference between runs at 544e83b and 45290f3. It's a separate row in the impact table.
  3. The 2026-27 claim (should-fix). Rewritten.
    • 2026-27 moves by −£9m, almost all from the non-dependant fix.
    • The earlier run (before that fix) puts the rest at about +£0.2m, from the two-carer premium and the childcare limits returning to £175/£300. I don't split those two.
  4. "Earnings-linked, not CPI" (should-fix). Reworded to say the 2025-26 values were raised by earnings in law.
    • Projections from 2027-28 still use gov.benefit_uprating_cpi for these parameters. That's now listed under "Not in this PR", because the September-CPI uprating work and its follow-up chip own the projection basis.
    • Invariant 3 checks continuity only, and the PR body now says so.
  5. Frozen projections (should-fix). The non-dependant scale is now uprated by gov.benefit_uprating_cpi after 2026-27 (the 2027-28 bands and amounts are the 2026-27 ones × 1.023). The income-related ESA amount parameters aren't read by any formula, and I left them as they were.
  6. Fixture nits.
    • carer_premium.couple and sda.maximum are labelled derived, with the rule stated.
    • A test asserts two carers = 2 × one carer in every year 2015-2040.
    • The fixture header now says the 2026-27 income-related ESA personal allowances come from the Universal Credit Act 2025 s.5, not the Order, and the three ESA files cite UC Act 2025 s.5 in place of SI 2026/148.
  7. Leftovers.
    • Removed the carer premium's 2010 key.
    • Titled the bare "GOV.UK" reference.
    • The pre-2019 HB pension-age values and the under-65 tier, CTR's reuse of HB non-dependant amounts, and Income Support's mixed-age couples are pre-existing and noted.

Re-run after the changes:

  • the YAML suite (1,292) and the targeted pytest files (1,385, including 1,335 in test_dwp_published_rates.py);
  • the Enhanced FRS impact against main (the PR body table is from the new run).

The review didn't run tests or the impact itself, so those are this session's runs.

@vahid-ahmadi

Copy link
Copy Markdown
Collaborator

Reviewed: approve with nits. Every value I checked is right.

I checked every 2024-2026 test value against DWP's 2025-26 and 2026-27 "Benefit and pension rates" pages. 113 of 131 appear there, and the other 18 are explained (doubled or combined rows, HMRC tax credits, a percentage).

Checked by hand:

  • minimum guarantee £227.10 / £346.60;
  • pension-age HB £244.40 / £366.00;
  • savings credit thresholds £198.27 / £314.34;
  • premiums, AA/DLA/PIP/Carer's Allowance, ESA and IS allowances, Constant Attendance Allowance, UC amounts;
  • non-dependant bands £183 / £266 / £348 / £463 / £577.

The two-carer doubling is correct (carers >= 2). Locally, test_dwp_published_rates.py gives 1,335 passed and 61 skipped, and benefit_rates_2025_26.yaml 13 passed.

  1. Should fix: non-dependant deduction exemptions. Non-dependants with no income now pay the lowest deduction, £19.65 a week (household_benefits_individual_non_dep_deduction.py:14-18). But housing_benefit_individual_non_dep_deduction_eligible only tests age ≥ 18 and not rent-liable. None of HB Regs 2006 reg 74(6)/(7)'s exemptions are modelled:

    • claimant or partner blind, or on AA / DLA care / PIP daily living;
    • non-dependant on Pension Credit;
    • certain under-25s;
    • students.

    Pension-age households now over-deduct. At least exempt non-dependants on Pension Credit and claimants getting AA/DLA/PIP.

  2. Should fix (existing, relabelled here): council_tax_reduction_individual_non_dep_deduction.py:15 applies HB amounts and cites reg 74, but the CTR schemes have their own, much lower amounts. Drop the citation and open an issue.

  3. Should fix (follow-up): the Pension Credit minimum guarantee (minimum_guarantee.yaml:17,33), the savings credit threshold and the pension-age HB allowances (aged.yaml:18) are still uprated by CPI from 2027-28. The law requires the guarantee to rise at least with earnings, so later years are understated.

  4. Nit: the body says the savings credit threshold was "raised by earnings", but it rose 4.46% (£189.80 to £198.27). Say it was set by SI 2025/295.

CI Test and two smoke-import jobs were still pending when I looked.

The follow-up review (GPT-6.1 Sol) found that making zero income pay the
lowest non-dependant deduction charges non-dependants whom HB Regs 2006 reg
74(7) exempts (e.g. a full-time student with no income): the eligibility
variable checks only age and rent liability, and the old strict banding had
been giving zero income no deduction. The correct fix applies the reg
74(6)-(7) exemptions together with the inclusive bands, in HB and CTR, so it
moves to its own PR. This PR keeps the published non-dependant bands and
amounts and their uprating, and restores the formulas and their tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Follow-up review (GPT-6.1 Sol, subfleet job 20260930-114706-rereview2-1925-1913, which ran the tests and reproduction scripts) on 45290f3:

  • Findings 1, 2 and 4-6: resolved. It confirmed 36 source checks for 2015-18, the inclusive bands, the uprated non-dependant scale, the derived rows, the ESA legal basis, and the impact arithmetic.
  • Finding 7: partly resolved, as the response said. The older modelling limitations are acknowledged rather than fixed. It also refuted the claimed date discrepancy between the aged files.
  • New P2 (now resolved). Giving zero-income non-dependants the lowest deduction charged an exempt full-time student £1,021.80 a year (HB £6,000 → £4,978.20). The eligibility variable doesn't apply the HB Regs reg 74(6)-(7) exemptions, and the old right=True banding had been masking that. Fixing the banding properly means implementing those exemptions in HB and CTR, so 1233fe4 moves both out of this rates PR:
    • the HB and CTR formulas and their tests are back exactly as reviewed at 544e83b;
    • the published non-dependant bands, amounts and uprating stay;
    • the work goes to a separate PR, with the reviewer's counterexample (chip task_22c8e551).
  • P3 (now resolved). The 2026-27 wording now names the JSA rounding changes.

Impact re-run at 1233fe4; the body table is from that run. 2025-26 is unchanged (net income +£606m). 2026-27 is +£0.2m. 2027-28 on is about −£10m a year.

The tests pass: 1,335 in test_dwp_published_rates.py and the full YAML suite of 1,289. An Opus confirmation review of 1233fe4 is running (20261001-095304-confirm-1925).

@juaristi22

Copy link
Copy Markdown
Collaborator

Codex review — historical-source verification remains

Reviewed commit 1233fe4a4839a28a2a5257043c8b8824ea2db8b9. PARTIAL; 0 confirmed blocking finding(s). Independent code/test and policy/source reviews were consolidated for the changed behavior and affected dependencies.

No actionable code defect or mismatch was found in the independently checked rate samples. The earlier non-dependant banding formula change is absent from this head, so that old regression should not block this PR. The new regression fixture exercises loaded model parameters and future uprating; it is authored in this PR and therefore is not independent proof of every historical value.

Source checks corroborated the named current rates in DWP 2025/26 and 2026/27, plus ESA/IIDB/carer samples using the official 2019/20, 2021/22 and 2023/24 tables. No mismatch was found in those samples. Complete historical reconciliation is still needed before I can give a fresh source-based merge recommendation; existing human approval is separate evidence.

Outstanding evidence/decision:

  • Record a complete reconciliation of the remaining changed historical rate cells to official DWP tables, particularly 2015–2017, including effective-date conventions. This is an evidence-coverage request, not a confirmed wrong rate.

Validation: 1,404 focused tests passed, with 61 expected skips for inapplicable uprating/ended series. Tests include the loaded parameter fixture and final Pension Credit/household-income integration. Five official HTML originals were inspected and their cached bytes verified. The full 2015–2026 historical table was not independently reconciled cell by cell.

Focused tests used an existing cached Python 3.13 environment (Core 3.32.9, NumPy 2.1.3, pandas 2.3.1, microdf-python 1.2.1, Hypothesis 6.168.2, pytest 8.4.2) with this PR’s isolated source snapshot. No dependencies were installed; this was not a freshly synced lock environment or a full-suite/population run. This is a review comment, not a formal GitHub review vote.

Live check before posting (2026-10-02T10:41:02.821043+00:00): same commit, CLEAN; all reported CI checks pass.

@vahid-ahmadi

Copy link
Copy Markdown
Collaborator

Review pass (Claude Code, on Vahid's behalf) at 1233fe4a — round 2

Short version: still approve, with one small should-fix on the historical years. The open question on this PR is whether the 2015–2018 cells are reconciled. They are, for the 21 parameters the fixture covers from 2015. Two series it doesn't cover still carry a later rate back into 2015–2018, and the 2018-19 DWP rates PDF shows the right values.

Round-1 items

# Item Status
1 Non-dependant deduction exemptions (reg 74(6)–(7)) Moved out, as the 1 Oct comment says: the HB and CTR formulas are back as at 544e83b, and the published bands, amounts and uprating stay. Please link the follow-up as a GitHub issue or PR; "chip task_22c8e551" isn't visible to other reviewers.
2 CTR applies the HB non-dependant amounts Unchanged and pre-existing. The reverted formula no longer cites reg 74, which addresses the citation half. The amounts half still needs an issue.
3 PC minimum guarantee, savings credit threshold and pension-age HB uprated by CPI from 2027-28 Deferred under "Not in this PR". Same request as item 1: a GitHub link for the follow-up.
4 "Raised by earnings" for the savings credit threshold Open. The body's table (line 11) still says the PC standard minimum guarantee and savings credit threshold were raised by earnings in April 2025. The threshold rose 4.46% (£189.80 to £198.27) and is set by SI 2025/295.

Historical-source verification (the outstanding request)

I evaluated the parameters at 30 April of each year from 2015 to 2027 on this branch and compared them with the fixture and with DWP's own tables.

  • The fixture and the parameters agree everywhere: 1,100 cells, 0 mismatches. But only 21 of the 131 fixture parameters start in 2015. 106 start in 2019, 3 in 2018 and 1 in 2026, so for most series the 2015–2018 values aren't covered by any source check in this PR.

  • Spot checks against the 2018-19 proposed-rates PDF (it lists 2017-18 and 2018-19 side by side) all match:

    • PC standard minimum guarantee £159.35 / £163.00 (single) and £243.25 / £248.80 (couple);
    • PC severe disability addition £62.45 / £64.30;
    • savings credit thresholds £137.35 / £140.67 and £218.42 / £223.82;
    • disability, enhanced and severe premiums;
    • IS, JSA and ESA personal allowances (frozen at £73.10 / £57.90 / £114.85).

    From memory of the earlier tables, AA, DLA, PIP, CA and IIDB for 2015–2018 also look right, but I didn't open those PDFs.

Should-fix

  1. Two series still carry a later rate back into 2015–2018. Both are wrong against the 2018-19 PDF.

    • PC carer addition (pension_credit/guarantee_credit/carer/addition.yaml) starts at 2019-04-01: 36.85, so 2015–2018 read £36.85. The PDF gives £34.95 for 2017-18 and £36.00 for 2018-19. It is the same amount as the carer premium, which this PR does carry from 2015 (£34.60, £34.60, £34.95, £36.00).
    • Pension-age HB personal allowances (housing_benefit/allowances/*/aged.yaml) start at 2015-04-01: 181 (single), the 2019-20 rate. The PDF gives £172.55 / £176.40 for a single person aged 65+ and £159.35 / £163.00 for under-65 in 2017-18 and 2018-19. The PR body lists this as pre-existing, which it is.

    The first is a four-line fix: copy the carer premium's 2015–2018 values. The second needs the under-65 tier or a dated note. If either is left, a line in the body would close María's evidence request: "2015–2018 reconciled for these 21 series; these two still back-extend".

Nit

  1. Effective dates mix -04-01 and -04-06 (for example 2022-04-06 in aged.yaml). The legal start is the first uprating week in April, which differs by benefit (HB from the first Monday). With fiscal-year sampling at 30 April this changes no value, so it's cosmetic.

Checked and correct

  • test_dwp_published_rates.py: 1,335 passed and 61 skipped. benefit_rates_2025_26.yaml: 13 passed. CI is 6/6 green and the branch is mergeable.
  • The UC standard allowance across the £20 uplift is right: £409.89 in 2020-21, £411.51 at April 2021, £334.91 in 2022-23.
  • Nothing silently stops uprating after 2026-27 except:
    • the ESA and JSA amount parameters that no formula reads. The IR-ESA files are read only for capital, tariff income and eligibility, not the personal allowances.
    • the frozen CTC family element and WTC childcare limits, which is correct.

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Coordination note from #2051, which fixes the Child Tax Credit family element (#2050).

This PR's hunk in policyengine_uk/parameters/gov/dwp/tax_credits/child_tax_credit/elements/family_element.yaml removes uprating and adds a comment. #2051 does the same, and also:

  • dates the value from 2003-04-06, citing CTC Regs 2002 reg 7(3) as made and as substituted by SI 2011/1035 reg 2(2);
  • adds a baby addition to 5 April 2011 and the 6 April 2017 birth-date condition (reg 7(2)(a)).

It keeps this PR's two reference entries verbatim. Whichever PR merges second should take #2051's version of that file. Nothing else in the two PRs overlaps. #1759 (WTC 30-hour element) is fixed by this PR's worker.yaml values, not by #2051.

MaxGhenis and others added 2 commits October 3, 2026 17:04
Main's new tests pinned the CPI-projected 2025-26 rates; they now use the
published ones (DWP, Benefit and pension rates 2025 to 2026; SI 2025/295):
- HB and IS personal allowances (legacy_claimant_relationships,
  legacy_family_definitions): 92.05, 72.90, 144.65 and 110.15 a week, not
  92.04, 72.92, 144.67, 110.14 (HB) or 101.00, 80.01, 158.67 (IS).
- HB childcare limit for one child: 175 a week, not 312.06.
- WTC childcare limit for one child in 2020-21: 175 a week, not 248.64.
- UC couple standard allowance in 2020-21: 594.04 a month, not 596.58.
- PC carer addition 2025-26: 46.40 a week (main's test had 46.37).

This PR's own 2025-26 tests now set the inputs main's formulas read
(claimant and partner ages, Carer's Allowance entitlement, disabled
claimants or partners).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 5, 2026
MaxGhenis and others added 2 commits October 10, 2026 17:50
#2001 deleted carer_premium/couple.yaml and pays the premium per qualifying
person, so couple.yaml stays deleted and care.yaml takes main's version.
single.yaml keeps main's 2025 legal reference and both sets of metadata
references.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Describe fixed-start uprating as core implements it: years without a key,
  and every year after the last key, are projected from the start value
  (changelog, test docstring).
- Invariant 3 leaves out the UC standard allowances and LCWRA element, which
  the Universal Credit Act 2025 ss.1 and 3 do not uprate by CPI.
- Drop the two-carer invariant and fixture row: #2001 deleted
  carer_premium/couple.yaml and pays the premium per qualifying person.
- PC carer addition: add the 2018-19 rate, £36.00, so 2019-20's is not
  backdated.
- Main's tests that pinned projected 2025-26 rates now use the published
  ones: PC minimum guarantee £227.10, HB/CTR allowance £92.05, Carer's
  Allowance £83.30.
- Fix stale test names and comments, the dead SI 2025/234 link, the tax
  credit up-rating regulation titles, the fixture header (UC 2021-22) and six
  truncated fixture labels.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Coordination note from #2284 (fixes #2280), which implements the Universal Credit Act 2025 s. 3 freeze this PR's continuity test (invariant 3) skips.

What the Act says. s. 3(1) disapplies SSAA 1992 s. 150(1) and (2) for the LCWRA and LCW elements "in the tax years ending with 5 April 2026, 5 April 2027, 5 April 2028 and 5 April 2029". Those are the years in which the review is made. An order takes effect from the first Monday of the following tax year (s. 150(10)(a)(i)), so the frozen rates are those for 2026-27 to 2029-30, as this PR's docstring already says and as the section's heading says. The review report read it as ending with 2028-29; 2029-30 is frozen too. Uprating resumes in 2030-31.

What #2284 does. gov.dwp.universal_credit.elements.disabled.amount is now uprated by its own index, gov.dwp.universal_credit.elements.disabled.uprating (the benefit index, held flat for the frozen years), so the 2027-28 projection continues from the 2026-27 rate by that index: £217.26.

The one-line change. With #2284 in, this parameter no longer needs the skip:

 UC_ACT_2025_EXCEPTIONS = {
     "gov.dwp.universal_credit.standard_allowance.amount.SINGLE_YOUNG",
     "gov.dwp.universal_credit.standard_allowance.amount.SINGLE_OLD",
     "gov.dwp.universal_credit.standard_allowance.amount.COUPLE_YOUNG",
     "gov.dwp.universal_credit.standard_allowance.amount.COUPLE_OLD",
-    "gov.dwp.universal_credit.elements.disabled.amount",
 }

Checked on a local merge of #2284 (b30bc54) and this branch (e1bf98b) with that line removed: pytest policyengine_uk/tests/test_dwp_published_rates.py -k "elements.disabled.amount or standard_allowance" gives 46 passed, 4 skipped (the four standard allowance amounts, for s. 1 / #2242). The two branches merge without conflicts.

Whichever of the two PRs merges second should make the change (and update the invariant 3 docstring and the comment above the set). If this PR merges first, I will do it in #2284.

@MaxGhenis
MaxGhenis merged commit 4dfc979 into main Oct 11, 2026
6 checks passed
@MaxGhenis
MaxGhenis deleted the dwp-2025-26-announced-rates branch October 11, 2026 19:02
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Merged at the reviewed head e1bf98b (merge commit 4dfc979). Gates: gh pr checks all pass; MERGEABLE/CLEAN; independent GPT-6.1 Sol re-review APPROVE at e1bf98b (no P1/P2; it re-derived the impact table from the run files). An earlier Opus review's P2s (uprating mechanism wording, s.150A scope, per-household figures) were addressed in e1bf98b. The re-review's P3s are done in the body, in rulespec-uk#382 (step 5, HB childcare limits), and as comment fixes in #1913 (fixture header and test docstring on the 2026-27 edition, one CTR test comment). The UC Act 2025 s.3 LCWRA freeze is with the UK hub (task_1c3510c6).

MaxGhenis added a commit that referenced this pull request Oct 11, 2026
…cohorts

council_tax_reduction_applicable_amount takes main's
is_council_tax_reduction_lone_parent and single definitions, with this
PR's cohort amounts after them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 11, 2026
… fixes

- test_housing_benefit_pension_age_cohorts: STATUTE_HIGHER_RATES holds SI
  2006/214 Sch 3 para 1(1)(b)/(2)(b) for 2021-22 to 2026-27, now that #1925
  set them to the published amounts, so both rates are hard-coded from law.
- From #1925's review: the rates fixture header and test docstring say 2026-27
  has only its own edition so far (and name UC's 2021-22 exception), and a CTR
  test comment shows 7,199.40 and 1,173.56.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

2025-26 legacy carer premium and HB personal allowance are extrapolated, not statutory

3 participants