Skip to content

Pay pre-2026 UC health element claimants the legislated protected amount - #2248

Merged
MaxGhenis merged 4 commits into
mainfrom
fix-uc-protected-lcwra-2026
Oct 10, 2026
Merged

MaxGhenis merged 4 commits into
mainfrom
fix-uc-protected-lcwra-2026

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 10, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2247

What was wrong

Pre-2026 Universal Credit health-element claimants got a computed protected LCWRA amount rather than the legislated one:

  • £426.51 a month for a single claimant aged 25 or over;
  • £426.84 for a single claimant under 25.

SI 2026/113 reg. 3(3)(b) sets £429.80 for 2026-27. That is one amount for every pre-2026, severe conditions criteria or terminally ill claimant (UC Regs 2013 reg. 36), with no age or couple variant.

The model raised (2025-26 standard allowance + £423.27) by gov.benefit_uprating_cpi, which rises 3.4% from 2025 to 2026, and did so separately for single claimants under and over 25. The 2026-27 up-rating used the September 2025 CPI rate, 3.8%.

The law

  • SI 2026/113 reg. 3(3)(b) substitutes £429.80 for £423.27 in the reg. 36 row for pre-2026, severe conditions criteria and terminally ill claimants. It applies from 6 April 2026.
  • Universal Credit Act 2025 s. 4 covers 2026-27 to 2029-30. For each standard allowance amount, the protected amount plus that allowance must be at least the previous tax year's sum, increased by the relevant CPI percentage (September on September, never below 0%).
  • Section 3 switches off the element's ordinary uprating, so without an increase the amount stays where it was.

Changes

  • rebalancing/protected_health_element.yaml (new) holds £429.80 for 2026-27. It is marked preserve_calendar_dates, so each dated value stays the legislated amount for the tax year it falls in.
  • scenarios/uc_reform.py
    • Pays that amount to every claimant who keeps the protected rate, under 25 or not.
    • For a tax year with no legislated amount, uses the lowest amount s. 4 allows:
      • protected_lcwra_floor: the maximum over all four standard allowance pairings of (previous amount + previous allowance) × max(CPI factor, 1) − current allowance, and never below the previous amount.
      • The CPI factor is 1 + the CPI 12-month rate in the September before the tax year (s. 4(4)(a)), read from gov.economic_assumptions.statutory_uprating_inputs.cpi_september.
    • The amount for a tax year is the parameter at that year's 30 April sampling date: any non-null amount (legislated, or set by a reform) is used as given, and only a null year takes the floor. A null from 2027-04-01 ends the legislated amounts.
    • Drops the separate under-25 computation.
  • Docs. uc-rebalancing.md describes the legislated amount and the s. 4 floor.

Which claimants keep the protected rate (the seeded 11% new-claimant share) is unchanged.

Invariants (tested)

  • Pairing floor. For every year and every standard allowance pairing: protected amount + allowance ≥ (previous protected amount + previous allowance) × max(CPI factor, 1).
  • No fall. The amount never falls.
  • Minimal. The amount equals the previous year's, or some pairing holds with equality.
  • CPI fall. A fall in CPI is treated as 0%.
  • Monotone. The floor is non-decreasing in the previous year's amount.

Tests

test_uc_rebalancing.py:

  • Example. A claimant aged 20 and one aged 30 both get £429.80 × 12 in 2026-27.
  • Differential against the published figure. protected_lcwra_floor run from the 2025-26 reg. 36 amounts at the 3.8% CPI rate gives £429.80, SI 2026/113's figure.
  • Properties. Hypothesis checks the pairing floor, no fall, minimality, the CPI floor and monotonicity of protected_lcwra_floor. A simulation test checks 2027-28 to 2029-30 against s. 4(2).
  • Inputs. Each of these tests fails without its fix (checked by removing each fix in turn):
    • an overridden September 2026 CPI (9%) moves the 2027-28 amount to exactly the floor;
    • a one-year £500 override for 2027-28 is projected from in 2028-29;
    • a scalar £500 override applies in every year.
  • Two-year override. It is used as given, then projected from.

Local runs:

  • test_uc_rebalancing.py, code_health/test_cached_arrays_not_written_in_place.py and test_income_support_esa_entered_directly.py: 69 passed.
  • UC YAML policy tests (tests/policy/baseline/finance/benefit/family/universal_credit): 414 passed.

Impact

The estimate uses the local enhanced FRS 2023-24, main e89b8abc against this branch, and is not a published figure:

Main This branch Change
2026-27 LCWRA element £23.155bn £23.321bn +£0.166bn
2026-27 Universal Credit £62.094bn £62.157bn +£0.063bn
2027-28 LCWRA element £23.303bn £23.398bn +£0.094bn
2027-28 Universal Credit £63.247bn £63.282bn +£0.035bn

For a single claimant aged 25 or over, the monthly protected amount is £429.80 in 2026-27, then £438.27, £447.85 and £457.15. Those later years follow the s. 4 floor at the September CPI forecast. #2242's standard allowance uplifts will lower that floor.

Not in this PR

  • Scenario reforms. A Scenario applied after the data load does not reach the rebalancing modifier, which runs when the simulation is built. Only applied_before_data_load=True changes take effect, and this PR's tests use that mode. On main, a reform of new_claimant_health_element keyed "2026" leaves 40 test households at £217.26 unless applied before the data load. Filed separately.

  • After 2029-30, the modifier stops and every claimant falls to elements.disabled.amount. This PR does not change that.

  • With rebalancing.active false, everyone gets elements.disabled.amount, which holds the Act's £217.26 rate. Those two belong to separate issues.

axiom: uksi/2013/376/36 encoded-correct (rulespec-uk uk/regulations/uksi/2013/376/36.yaml lcwra_protected_claimant_amount = 429.80; companion test 36.test.yaml "terminally ill" case gives lcwra_element_amount 429.8)

🤖 Generated with Claude Code

SI 2026/113 reg. 3(3)(b) sets the protected LCWRA amount at £429.80 a
month for 2026-27, one amount for every pre-2026, severe conditions
criteria or terminally ill claimant (UC Regs 2013 reg. 36). The model
computed £426.51 (single, 25+) and £426.84 (single, under 25) from a CPI
index that rose 3.4% where the 2026-27 up-rating used 3.8%.

Store the legislated amount, keep its statutory dates, and project later
tax years at the lowest amount the Universal Credit Act 2025 s. 4 duty
allows across every standard allowance pairing.

Fixes #2247

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

Address the review of #2248:
- The relevant CPI percentage (UC Act 2025 s. 4(4)(a)) is the September
  rate, so read gov.economic_assumptions.statutory_uprating_inputs.cpi_september
  rather than the lagged benefit uprating index; cite s. 4(4)(a).
- End the legislated amounts with a null from 2027-04-01, so a reform that
  sets one tax year restores null and the next year projects from it, not
  from the carried £429.80.
- Tests: an overridden September 2026 CPI moves the 2027-28 floor; a
  one-year £500 override is projected from; tolerances use rel=0. Both new
  tests fail without their fix.
- Docs: describe the September CPI input; drop the stale parameter count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 10, 2026 08:25
Address round 2 of the #2248 review: read the parameter at each tax
year's 30 April sampling date and use any non-null amount, legislated or
set by a reform, projecting only from a null year. A scalar override
(which starts in 2000) or a range override across several years no longer
mis-detects the legislated years; a scalar override broke simulation
construction before. Tests: a scalar £500 override applies in every year
(fails on the previous code); a two-year override is used, then projected
from.

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

Copy link
Copy Markdown
Collaborator Author

Merging on the gates.

  • Head: 819401ee, which merges main (d98af495, with Raise the Test job timeout to 120 minutes #2258's 120-minute limit) into the reviewed 2e8bed52. The PR's diff against main is byte-identical to the reviewed diff, apart from index lines.
  • Checks: all green on this head, including Test.
  • Mergeable: MERGEABLE, no change request. Marked ready from draft.
  • Independent review: GPT-6.1 Sol, three rounds.
    • Round 1 requested changes: restoration entries and scalar overrides.
    • Round 2 requested changes: honour scalar and multi-year overrides.
    • Round 3 approved 2e8bed52.
  • Local check on the merged head: test_uc_rebalancing.py 14 passed.

#2251 is stacked on this branch and moves to main next.

🤖 Generated with Claude Code

@MaxGhenis
MaxGhenis merged commit 9cddf05 into main Oct 10, 2026
7 checks passed
@MaxGhenis
MaxGhenis deleted the fix-uc-protected-lcwra-2026 branch October 10, 2026 22:48
MaxGhenis added a commit that referenced this pull request Oct 11, 2026
Brings in #2258 (120-minute Test job), #2180 (NICs thresholds indexed by
September CPI after 2030-31), #2063 (salary sacrifice needs pay), #2038
(winter payments to the member a benefit is paid to), #2259, #2248,
#2251, #2262, #2266, #2270, #2285, #2288, #2294 and #2021.

Conflict: test_legacy_award_readers_properties.py imports. Kept both
hypothesis.event (this branch's screened-out events) and
hypothesis.example (#2294's found families). The rest of the file merged
cleanly: #2294's without/silent/with-other comparison, the severe
disability premium bound and the held benefit cap sit alongside this
branch's work generators, screened reference and outside-member tests.
Two comments now say the ESA and JSA readers also read the members' work.

_legacy_award_payee.py merged cleanly: #2038's can_claim (Pension Credit)
and this branch's own_report_is_paid are independent. The shared NI
parameters already match main (#2058); #2180 changes only 2031-32 onward.

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

Brings in #2259 (Pension Credit income losses), #2285 (a claimant is not
their own child or qualifying young person), #2248 and #2021. No conflicts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 11, 2026
…2259, #2262, #2285) into benefit-cap-75f-claimant-partner

The payee helper takes both main's can_claim (Pension Credit) and this
branch's couple (the benefit cap's couple).

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.

Pre-2026 UC health element claimants get £426.51, not the legislated £429.80, in 2026-27

1 participant