Repository navigation
Pay pre-2026 UC health element claimants the legislated protected amount - #2248
Merged
Merged
Conversation
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>
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
marked this pull request as ready for review
October 10, 2026 22:48
Collaborator
Author
|
Merging on the gates.
#2251 is stacked on this branch and moves to 🤖 Generated with Claude Code |
This was referenced Oct 10, 2026
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #2247
What was wrong
Pre-2026 Universal Credit health-element claimants got a computed protected LCWRA amount rather than the legislated one:
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
Changes
rebalancing/protected_health_element.yaml(new) holds £429.80 for 2026-27. It is markedpreserve_calendar_dates, so each dated value stays the legislated amount for the tax year it falls in.scenarios/uc_reform.pyprotected_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.gov.economic_assumptions.statutory_uprating_inputs.cpi_september.uc-rebalancing.mddescribes the legislated amount and the s. 4 floor.Which claimants keep the protected rate (the seeded 11% new-claimant share) is unchanged.
Invariants (tested)
Tests
test_uc_rebalancing.py:protected_lcwra_floorrun from the 2025-26 reg. 36 amounts at the 3.8% CPI rate gives £429.80, SI 2026/113's figure.protected_lcwra_floor. A simulation test checks 2027-28 to 2029-30 against s. 4(2).Local runs:
test_uc_rebalancing.py,code_health/test_cached_arrays_not_written_in_place.pyandtest_income_support_esa_entered_directly.py: 69 passed.tests/policy/baseline/finance/benefit/family/universal_credit): 414 passed.Impact
The estimate uses the local enhanced FRS 2023-24, main
e89b8abcagainst this branch, and is not a published figure: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
Scenarioapplied after the data load does not reach the rebalancing modifier, which runs when the simulation is built. Onlyapplied_before_data_load=Truechanges take effect, and this PR's tests use that mode. On main, a reform ofnew_claimant_health_elementkeyed"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.activefalse, everyone getselements.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.yamllcwra_protected_claimant_amount= 429.80; companion test36.test.yaml"terminally ill" case giveslcwra_element_amount429.8)🤖 Generated with Claude Code