Skip to content

Give the legacy severe disability premium its statutory conditions (stacked on #1896) - #1946

Draft
MaxGhenis wants to merge 11 commits into
mainfrom
working-age-severe-disability-premium
Draft

MaxGhenis wants to merge 11 commits into
mainfrom
working-age-severe-disability-premium

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Based on main 84da2863 (after #1896, #1950 and #1881); the diff contains this PR's own changes only. It uses is_claimant_or_partner, not the retired generic child/adult flags.

Summary

The legacy severe disability premium previously used the tax-credit severe-disability flag and paid the double rate to a couple when only one partner qualified. This change gives the premium its own qualifying-benefit and residence conditions:

  • Attendance Allowance at either rate, DLA care at the middle or highest rate, PIP daily living at either rate, and Armed Forces Independence Payment qualify. Other AFCS payments do not.
  • Both partners must qualify for the ordinary couple branch. A nonqualifying blind partner is treated as absent for the single-rate branch, under the claimant-selection assumption described below.
  • A non-dependant aged 18 or over blocks the premium unless they receive a qualifying benefit or are blind. The claimant's family is excluded using the programme's child and qualifying-young-person definition.
  • Carer benefits paid within the benefit unit reduce the premium under the attribution assumption below. The computed premium flows into HB, CTR and IS. ESA/JSA use reported awards with capital screening and do not recalculate this premium.

The retained is_severely_disabled_for_benefits flag adds higher-rate AA for WTC and AFIP in place of general AFCS payments. It approximates the tax-credit conditions; it does not match every statutory condition exactly. AA uses aa_category when supplied. The dataset fills that category by inferring it from reported amounts, rather than observing award status directly. Only when the category is NONE does the formula compare an entered amount with the annual higher rate less £520 (£10 a week). WTC reg 17(2) contains no tolerance. DLA/PIP amount tests also retain a tolerance. The Enhanced FRS stores this flag, so dataset runs use the stored value; policyengine-uk-data#494 aligns that definition separately. CTC does not list AA, while UC has different AFIP/blindness conditions, so this shared flag has known consumer-specific limitations.

Statutory sources and model assumptions

The core sources are HB Sch 3 para 14, IS Sch 2 para 13, ESA Sch 4 para 6, and JSA Sch 1 para 15. The review follow-up re-read the relevant legislation XML and amendment text on 2 October 2026. Variable documentation contains the citations and limitations.

  • Carer attribution: the model does not observe who is cared for. Carer awards within the benefit unit are treated as covering up to one qualifying claimant/partner other than the recipient, choosing the coverage that includes the most qualifying members. It interprets awards covering both partners as removing the premium. Carers elsewhere are not counted. These are modelling assumptions, not statutory rules. Use one carer attribution for the legacy severe disability premium and the Pension Credit severe disability addition #1972/Use one carer attribution for the legacy severe disability premium and the Pension Credit addition (stacked on #1946 and #1951) #1977 track shared attribution.
  • Blind partner: the model applies the rule symmetrically, assuming the qualifying member can be the claimant. The law describes the claimant's partner. is_blind has no Enhanced FRS source, so these exceptions are unavailable in dataset calculations. Armed forces independence payment has no Enhanced FRS source either, so in dataset runs nobody qualifies through it.
  • Family and occupancy: claimant/partner inference and the Child Benefit qualifying-young-person inputs approximate the claimant's family. Household membership approximates shared accommodation. A DLA amount without dla_sc_category does not qualify for this premium.
  • NI commencement: the shared list now selects Northern Ireland separately using country. AFIP is included from 24 December 2013, and PIP daily living from 20 June 2016, rather than GB's 8 April 2013. These dates were verified in NI HB Sch 4 para 14, SI 2013/3021, and SR 2016/228, including their NI IS/JSA/ESA amendments. Like the GB list, the model reads the NI list as at 30 April of each year from 2015 and at 1 January before that, so AFIP first qualifies in model year 2014 and PIP daily living in 2017; a change during a year is not prorated.

Not modelled

  • Earlier NI history: the initial 2006-03-06 parameter value preserves the shared model baseline. It is not the commencement of NI HB S.R. 2006/405, which is 20 November 2006 under reg 1(1). NI coverage before that commencement has not been independently verified.
  • Fraud-related loss of carer payments: carer's allowance or a UC carer element that would be paid but for a restriction under Social Security Fraud Act 2001 s 6B or 7 still counts. There is no model input for this restricted award: ESA Sch 4 para 6(8), HB Sch 3 para 14(7), IS Sch 2 para 13(5), JSA Sch 1 para 15(9). This can cause an excess premium where the other conditions hold. This restriction is distinct from unpaid underlying entitlement due to overlapping benefits.
  • Care-leaver family exception: HB reg 19(2)(c) and IS reg 14(2)(c) exclude people subject to Children (Leaving Care) Act 2000 s 6. The bursary/current-care inputs do not identify that historical status. The specified groups are under 18, including the Scottish group under SI 2004/747 reg 2(2)(a), so this omission does not affect this premium's age-18 non-dependant test.
  • 1991 JSA savings: JSA Sch 1 para 15(8) preserves protection under the Income Support (General) Amendment (No. 6) Regulations 1991. There is no protected-status input. JSA payments do not read this premium, so the omission does not change reported JSA payments.
  • UC carer elements; carers outside the benefit unit; carer award backdating; hospital deeming; the 28-week blindness run-on; concessionary payments; polygamous marriages; the 12-week moving-in-to-care exclusions; joint occupiers, commercial lodgers/landlords and charity-engaged carers.
  • Separate Scottish disability-benefit inputs, including ADP, CDP, Scottish adult DLA and pension age disability payment. Statutory lists differ between instruments. English working-age CTR remains scheme-specific.

Impact

Real microsimulation runs on the published Enhanced FRS 2024-25 (policyengine-uk-data 1.57.4, SHA-256 03fe15e4…68d4), comparing main 84da2863 with fbe78ab4. Later commits change documentation, tests and how the Northern Ireland list is read before 2015, none of which moves 2025-2028. Changes in £m a year:

Year Paid HB Paid CTR Household net income Households gaining Households losing
2025 +13.0¹ −25.3 −12.3 6.5k 29.0k
2026 +10.5 −24.8 −14.3 7.6k 28.7k
2027 −10.2 −26.4 −36.5 7.6k 62.5k
2028 −10.6 −27.9 −38.5 7.7k 62.8k

¹ Includes a small change in paid Income Support, which moves fewer than 10 sample records and so is not shown on its own. Paid Income Support does not change from 2026. Universal Credit and Pension Credit do not change in any year.

  • Gains. In dataset runs, main reads the severe disability flag stored in the Enhanced FRS, which counts Attendance Allowance at any rate, DLA care at the highest rate, PIP daily living at the enhanced rate and any Armed Forces Compensation Scheme payment. The premium's own list adds DLA care at the middle rate and PIP daily living at the standard rate; those are where the gains come from.
  • Losses. Main pays the couple rate when either partner qualifies and has no non-dependant or carer test. This head requires both partners to qualify, no non-dependant aged 18 or over and no carer award covering the person. It also counts armed forces independence payment but not other AFCS payments, and the Enhanced FRS has no AFIP column, so people who qualified on main only through an AFCS payment lose. The runs do not split the losses between these causes.
  • The HB total changes sign from 2027. HB rises for between 4.6k (2025) and 5.9k (2028) benefit units. Fewer than 10 sample records lose HB, but they carry enough weight that from 2027 their loss outweighs the gains. A diagnostic run of their applicable amounts found that their HB falls only from 2027, when their applicable amount without the premium drops below their income. The sign of the HB total from 2027 rests on these few records and is not a robust estimate.

The computed premium total, summed over every family whether or not it claims a legacy benefit, falls by £10.8bn (2025), £10.2bn (2026), £11.5bn (2027) and £11.8bn (2028). That total is not benefit spending: the paid changes are the table above.

Earlier figures in this PR's history (measured on f9814593 → 29d5a922, before #1896, the capital changes and the HB taper-order change landed) are superseded by this table.

Coordination and validation

#1896 is merged. #2003 is stacked on this branch. #1938 addresses pension-age HB/CTR routing; #1977 addresses carer attribution. policyengine-uk-data#494 must release with a model lock that includes this PR, since pairing its new flag with the older model changes the legacy premium. Historical data-flag and stacked-PR runs are not validation of this merged head.

The YAML cases cover qualifying benefits, couples, blind partners, carers, family membership and non-dependants. AA cases cover category precedence and the amount fallback at and just below the threshold in 2024 and 2026. NI cases cover the model years either side of both commencement dates and a contemporary GB/NI comparison, and a test checks those year values in the processed parameter tree.

The property oracle is an independently written implementation that shares the carer-attribution and symmetric blind-partner assumptions. Agreement tests those assumptions' implementation, not their statutory validity. The Pension Credit differential likewise shares assumptions and is not an independent statutory oracle.

Local runs on this branch: the 460 YAML cases under tests/policy/baseline/finance/benefit/family and the 165 under tests/policy/baseline/gov/dwp pass on the merged head; test_severe_disability_premium_properties.py, the code-health tests and the parameter metadata and description tests (1,760 tests) pass on the tree before the final merge of main, which touched none of this PR's files. Lint and format are clean. CI runs the full suite.

🤖 Generated with Claude Code

MaxGhenis added a commit to PolicyEngine/policyengine-uk-data that referenced this pull request Sep 30, 2026
… model

The stored flag and the benefit categories used two different floating-point
comparisons, which disagreed at exactly the GBP 1/week tolerance edge (for
example survey year 2022 at rate minus GBP 1.00). The flag now uses the
category derivation itself, so the two agree by construction. The grid test
covers survey years 2019-2026 and offsets either side of the tolerance edge,
and fails on the old comparison. A differential test checks the stored flag
against policyengine-uk's formula for the same categories; it skips on
policyengine-uk releases that predate PolicyEngine/policyengine-uk#1946.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis force-pushed the working-age-severe-disability-premium branch from dd4db61 to 65a642c Compare September 30, 2026 20:32
@MaxGhenis
MaxGhenis marked this pull request as draft September 30, 2026 20:32
@MaxGhenis MaxGhenis changed the title Give the legacy severe disability premium its statutory conditions Give the legacy severe disability premium its statutory conditions (stacked on #1896) Sep 30, 2026
MaxGhenis added a commit to PolicyEngine/policyengine-uk-data that referenced this pull request Sep 30, 2026
The differential test between the stored flag and policyengine-uk's formula
no longer skips on older policyengine-uk releases: it fails until the lock
includes PolicyEngine/policyengine-uk#1946, which keeps the new flag from
shipping with a model that still reads it for the severe disability premium.
The code comment and changelog now describe the flag as the tax credit
condition and note that UC's higher disabled child addition, which is also
keyed on it, differs (UC Regs reg 24(2)(b)).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 4 commits September 30, 2026 18:44
The working-age severe disability premium in the Income Support, Housing
Benefit and Council Tax Reduction applicable amounts counted any adult
flagged by is_severely_disabled_for_benefits, the tax credit condition (DLA
care highest rate, PIP daily living enhanced rate, or any AFCS payment), and
paid a couple the double rate when either adult was flagged.

HB Regs 2006 Sch 3 paras 14 and 20(6), IS Regs 1987 Sch 2 paras 13 and
15(5), ESA Regs 2008 Sch 4 paras 6 and 11(2) and JSA Regs 1996 Sch 1 paras
15 and 20(6) qualify a claimant on Attendance Allowance (either rate), the
DLA care component at the middle or highest rate, the PIP daily living
component at either rate, or Armed Forces Independence Payment. A couple
needs both partners to qualify, unless the other partner is blind, who is
then treated as absent and the single rate applies. No non-dependant aged
18 or over may reside with them (ignoring non-dependants who receive a
qualifying benefit or are blind), and no carer benefit may be paid for
caring for them: a couple who both qualify get the double rate with no
carer paid for either, and the single rate with one paid for only one.

is_severely_disabled_for_benefits stays for the CTC disability element and
the WTC severe disability element (CTC Regs 2002 reg 8; WTC Regs 2002 reg
17). It now counts higher-rate Attendance Allowance (WTC reg 17(2)) and
Armed Forces Independence Payment instead of any AFCS payment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds YAML cases where an 18 or 19 year old qualifying young person is in the
family: they are neither a partner nor a non-dependant, so they cannot make
a couple qualify, be the blind partner treated as absent, or stop a lone
parent qualifying. The legacy-premium fixtures from #1896 now use PIP daily
living at the enhanced rate, which qualifies for the premium and is also
severe for tax credits. The oracle property draws carers less often and has
explicit double-rate and blind-partner examples, with events that show which
branches ran; the Pension Credit differential says it compares two encodings
of one rule, on the cases every version of that addition agrees on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A benefit-unit member aged 18 or over who is neither the claimant, the
partner, nor a child or qualifying young person (HB Regs reg 19; SSCBA
s.142) is a non-dependant under reg 3 and bars the premium; the test
previously exempted every benefit-unit member. Adds a YAML case for an
18-year-old not in education, and gives #1896's 19-year-old fixtures the
entry-condition input that makes them qualifying young persons.

Documentation now states the carer condition as the Regulations do (caring
for a single claimant; the couple rates), notes that only the claimant's
blind partner is treated as absent and that the model assumes the
qualifying partner claims (HB Regs reg 82(1)), lists child disability
payment among the unmodelled Scottish benefits, notes that the tax credit
flag also gates UC's higher disabled child addition, and fixes the JSA
pinpoint. The property tests compute each before/after pair in one
simulation, and the Pension Credit differential now covers carers and
couples with one qualifying partner, since #1896's addition applies the
same rules.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The property tests now generate a 16-19 year old in the benefit unit, in or
out of education and with an entry age either side of 19, and the oracle
treats one who is not a qualifying young person as a non-dependant (HB Regs
regs 3, 19). Explicit examples cover an 18-year-old not in education (no
premium) and a 19-year-old qualifying young person (single rate); restoring
the old all-benefit-unit exemption fails them.

The non-dependant docstring now says that a 19-year-old is a young person
only with a known entry age under 19, and that the young person's own-claim
exclusion (HB reg 19(2), IS reg 14(2)) is approximated by
receives_benefits_in_own_right. The qualifying-benefit docstring places child
disability payment in Housing Benefit and the Scottish CTR scheme.

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

Stacked on #1946, which reads armed_forces_independence_payment (not afcs)
for CTC Regs 2002 reg 8(5) / WTC reg 17(4). This adds what #1946 lacks:

- afcs_reported documented as FRS benefit code 8 (AFCS including guaranteed
  income payments, and war disablement pensions);
  armed_forces_independence_payment documented with AFCS Order 2011 art 24A.
- YAML cases: AFCS with DLA care middle / PIP daily living standard; CTC
  severely disabled child element, WTC severe disability element (AFCS 0,
  AFIP 1,705 in 2024-25) and the UC higher disabled child addition (AFCS 0,
  PIP enhanced 5,950.44 in 2025-26).
- Hypothesis properties: differential against the tax credit condition
  (CTC reg 8(3)-(5) + WTC reg 17(2) higher-rate AA); AFCS invariance of the
  flag and of every amount that reads it; AFIP monotone.

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

Copy link
Copy Markdown
Collaborator Author

Composition note from #2078 (stacked on #2009), which makes the CTR means test assess the applicant and partner rather than the benefit unit's claimant and partner.

#2078 adds council_tax_reduction_premiums, which the CTR applicable amount now reads in place of benefits_premiums. For ordinary families it is benefits_premiums, so this PR's premium changes flow through unchanged. Where the household head applies alone (council_tax_reduction_head_applies_alone: the head is liable but is not the benefit unit's claimant or partner), it computes the head's own premiums at the single rates, mirroring the single-claimant rules on #2009's base.

A property test in #2078 (test_head_applying_alone_matches_her_own_benefit_unit) checks that a head who applies alone gets the same applicable amount as the same head entered as her own benefit unit. Whichever of the two PRs lands second should therefore carry this PR's rules into the head-alone path of council_tax_reduction_premiums. For example: pension-age schedules with no adult disability premium; severe disability premium conditions; the carer premium per qualifying claimant. That test fails until it does.

Close the round-4 review findings on #1946:

- is_severely_disabled_for_benefits reads higher-rate Attendance Allowance
  from aa_category, which the Enhanced FRS holds, and compares an amount
  with the higher rate less GBP 10 a week only when no category is given.
  The documentation says what the dataset holds and that the fallback is an
  approximation (WTC Regs 2002 reg 17(2) has no tolerance). YAML cases pin
  the category's precedence and both sides of the amount threshold in 2024
  and 2026.
- Document provisions the model does not apply, with citations: carer
  benefits withheld under Social Security Fraud Act 2001 s. 6B or 7 (HB
  Sch 3 para 14(7), IS Sch 2 para 13(5), ESA Sch 4 para 6(8), JSA Sch 1
  para 15(9)); the care-leaver exception to "young person" (HB reg
  19(2)(c), IS reg 14(2)(c)); and the JSA 1991 savings (JSA Sch 1 para
  15(8)).
- Document that the qualifying-benefit list uses Great Britain's 8 April
  2013 date, while Northern Ireland added AFIP on 24 December 2013 and PIP
  on 20 June 2016 (S.R. 2006/405 Sch 4 para 14).
- Describe the property-test oracle as a separately written implementation
  that shares the model's carer-attribution and blind-partner assumptions,
  not a statement of the statutory rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
…ion-age-severe-disability-premium

Conflicts in severe_disability_minimum_guarantee_addition.py and
test_carer_support_payment.py resolve to #1951's versions, which replace
this PR's earlier change to the shared Pension Credit addition.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 2, 2026 17:36
…premium list

Northern Ireland added armed forces independence payment on 24 December
2013 (S.I. 2013/3021) and the PIP daily living component on 20 June 2016
(S.R. 2016/228), later than Great Britain's 8 April 2013. A separate
parameter holds the Northern Ireland list and the variable selects by
household country. Documentation notes what the model omits.

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

Copy link
Copy Markdown
Collaborator Author

Response to the independent review of 41a7e2c1a (REQUEST_CHANGES, four findings). Fixes are in e1806628f and c81331a60; fbe78ab48 merges main 84da2863.

  1. Impact on the merged head (P1). Re-measured with real runs on the published Enhanced FRS 2024-25 (1.57.4), main 84da2863 against fbe78ab4: paid CTR −£25m to −£28m a year, paid HB +£10m in 2025 and 2026 and −£10m in 2027 and 2028, household net income −£12m to −£39m. The description has the table, says why the HB total changes sign from 2027 (very few records, so the sign is not robust) and drops the older figures, which were measured before Replace generic child and adult flags with each programme's legal definitions #1896 and the HB taper-order change.
  2. Attendance Allowance (P2). The tax credit flag reads aa_category when it is given and compares an amount with the higher rate only when no category is given. The documentation and the description say that the category in the data is inferred from reported amounts, that the amount fallback keeps a £10-a-week tolerance and that WTC reg 17(2) has none. YAML cases cover category precedence and the amount just below and at the threshold, in 2024 and 2026. The description no longer says the flag matches the statutory condition.
  3. Omissions (P2). Variable documentation and the description's "Not modelled" section now list carer awards restricted for fraud (ESA Sch 4 para 6(8), HB Sch 3 para 14(7), IS Sch 2 para 13(5), JSA Sch 1 para 15(9)), the care-leaver family exception (HB reg 19(2)(c), IS reg 14(2)(c)) and the 1991 JSA savings (JSA Sch 1 para 15(8)). The model has no input for any of the three. The care-leaver groups are under 18, including the Scottish group (SI 2004/747 reg 2(2)(a)), so that exception cannot change the premium's non-dependant test, which starts at 18.
  4. Northern Ireland commencement (P2). A separate parameter, severe_qualifying_benefits_northern_ireland, adds armed forces independence payment from 24 December 2013 (S.I. 2013/3021) and PIP daily living from 20 June 2016 (S.R. 2016/228); the variable picks the list by household country. Ten YAML cases cover the years around both dates and a Great Britain comparison, and a test checks that the dates survive parameter processing.
  5. Small cells. The description gives £m totals and household counts in thousands only; the Income Support line gives no figure because fewer than 10 sample records move.
  6. Property oracle. Its docstring now says it is an independent implementation that shares the carer-attribution and blind-partner assumptions, so agreement tests the implementation and not those assumptions.

Local runs: 460 YAML cases under tests/policy/baseline/finance/benefit/family and 165 under tests/policy/baseline/gov/dwp pass on fbe78ab48; the property, code-health and parameter metadata tests (1,760) pass on the tree before the final merge of main, which touched none of this PR's files.

…-pinned case

Drop preserve_calendar_dates from the Northern Ireland qualifying list so
it is read as at 30 April from 2015, as the GB list is; a bare-year
reform now lands in the same model year for both. The regression test
checks year values. Fix a 404 link to HB Sch 3 Part 4, and stop pinning
a disability premium of nil for a PIP recipient, which only followed
from an unset input.

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

Copy link
Copy Markdown
Collaborator Author

Response to the independent re-review of fbe78ab48 (REQUEST_CHANGES, six findings). Code fixes are in 8d0b53bec; the description is updated.

  1. Suppressed cells (P2). The description no longer gives the HB-loss amount or the HB-gain amount. The 2025 HB column now includes the Income Support change, with a footnote, so the Income Support figure can't be recovered by subtraction. The harness gap the review found (it suppresses the gain and loss cells but not the totals they make up) is being fixed in the merge train's comparison script.
  2. Gains and losses (P2). Rewritten against what the dataset run reads: main uses the Enhanced FRS's stored flag (Attendance Allowance at any rate, DLA care highest, PIP daily living enhanced, any AFCS payment), so the gains are DLA care middle rate and PIP daily living standard rate. AFCS-only recipients are added as a cause of the losses, and the data limitations now say AFIP has no Enhanced FRS source. I checked the stored column in the 1.57.4 file and disability_benefits.py at uk-data tag 1.57.4.
  3. Figures (P2). HB rises for 4.6k benefit units in 2025 and 5.9k by 2028 (corrected). The 2027 explanation now rests on a saved diagnostic run of those records' applicable amounts and income on both heads; it is stated qualitatively, with no record values.
  4. preserve_calendar_dates (P3). Dropped. The Northern Ireland list is now read like the GB list (30 April from 2015, 1 January before), so a bare-year reform lands in the same model year for both. The regression test checks year values (AFIP absent in 2013 and present in 2014; PIP absent in 2016 and present in 2017; GB both from 2014), and the ten commencement cases are renamed by model year. No 2015-2040 value changes.
  5. Broken link (P3). Now HB Sch 3 Part 4 (returns 200).
  6. Mis-pinned case (P3). The flow-through case no longer asserts a nil disability premium. It sets is_disabled_for_benefits: false with a comment citing HB Sch 3 para 13(1)(a)(i), so it isolates the severe premium.

Local runs on 8d0b53bec: the 43 YAML cases in the two SDP files, the commencement test and the parameter metadata tests pass; lint and format are clean. CI is running on this head.

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.

1 participant