Lift the benefit cap only for the support component and the people HB reg 75F and UC reg 83 name, and cap only the family's benefits - #2076
Conversation
HB Regs 2006 reg 75F(1)(a) and UC Regs 2013 reg 83(1)(a) lift the cap where "the claimant or the claimant's partner is receiving an employment and support allowance ... which includes a support component". The model lifted it for any income-related ESA of the claimant or partner and for any member's contributory ESA, in both is_benefit_cap_exempt_health_disability and is_benefit_cap_exempt_other. Add has_own_esa_award (Person): the person claims ESA themselves (a reported contributory or income-related award, or a directly entered income-related award attributed to the claimant who heads the benefit unit). Add esa_includes_support_component (Person): whether that ESA includes the support component (WRA 2007 ss.2(2), 4(4)). Datasets or users can supply it; otherwise it is assumed for anyone with an ESA award of their own, as for about nine in ten ESA recipients in the Family Resources Survey 2024-25. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
HB Regs 2006 reg 75F(1) and UC Regs 2013 reg 83(1) name, for each benefit, whose receipt lifts the cap. is_benefit_cap_exempt_health_disability summed every benefit-unit member's attendance allowance, DLA, PIP, industrial injuries benefit, Carer's Allowance and Carer Support Payment, and is_benefit_cap_exempt_other exempted any member's armed forces compensation. Any member with the LCWRA flag or caring responsibilities also lifted it. Now: - the claimant or partner only: attendance allowance, industrial injuries benefit and armed forces compensation (75F(1)(b)-(d); 83(1)(b)-(e)); - also a child or young person they are responsible for: DLA (75F(1)(e); 83(1)(f)); - also a young person: PIP, Carer's Allowance and Carer Support Payment (75F(1)(ea), (h), (ha); 83(1)(g), (i), (ia)); armed forces independence payment for a Housing Benefit young person (75F(1)(ea); UC reg 2 counts it as attendance allowance); - the UC LCWRA and carer elements: a claimant with limited capability or caring responsibilities (83(1)(a), (j); regs 27(1), 29(1)), or an element entered directly. The cap serves both schemes, so a child or young person under either scheme's definition counts. A 16-year-old who receives benefits in their own right or is looked after counts for neither (UC regs 4(6), 5(5); HB reg 19(2)). Datasets flag every ESA recipient as disabled, so the LCWRA exception lifted the cap for every ESA recipient whatever their ESA group. Universal Credit takes the ESA assessment (UC Regs 2013 reg 40(1)(a)(ii)), so for a person with an ESA award of their own uc_limited_capability_for_WRA is now inferred from the support component. The work allowance and the reduced minimum age need only limited capability for work (regs 8(1)(a), 22, 39), which an ESA award carries, so they read the new uc_limited_capability_for_work. is_benefit_cap_exempt_earnings and is_benefit_cap_exempt_other lose their unused benefit sums and keep their results. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Inferring limited capability for work-related activity from the ESA support component in both directions gave a non-dependant's own ESA an LCWRA element in the family's Universal Credit, because uc_LCWRA_element and the work allowance still read every member of the benefit unit (#2027's legacy-award invariance test caught it). Now a person whose own ESA lacks the support component is taken not to have LCWRA (UC Regs 2013 reg 40(1)(a)(ii)), and otherwise uc_limited_capability_for_WRA keeps its is_disabled_for_benefits default. uc_limited_capability_for_work is LCWRA or the disability flag, so the work allowance and reduced minimum age are as before for every input that does not set the new variables. The cap property's family-rate reference now counts any 16-year-old, as the family-rate helper does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ut record The Universal Credit reform hook calculates uc_LCWRA_element while the simulation is being built, and uc_limited_capability_for_WRA now reads has_own_esa_award. That went through claimant_or_partner_esa_income and so entered_directly, which read Simulation._user_input_keys before any input had created it (test_child_and_adult_definitions_properties builds its situations without inputs). has_own_esa_award now takes an income-related award with no member's report behind it as entered for the family, and entered_directly treats a simulation with no recorded inputs as having none. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…efit-cap-75f-claimant-partner #2027 now leaves the benefit cap to this branch and deletes utils/inputs.py (entered_directly), deciding a directly entered award by value. Conflicts: - is_benefit_cap_exempt_health_disability.py: keep this branch's version; an entered UC LCWRA or carer element is now recognised by value (positive although no member's circumstances give it) instead of entered_directly. - passports.yaml: keep this branch's support-component cap cases. - utils/inputs.py: deleted, as on #2027. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
UC Regs 2013 reg 80(1) caps "the amount to which the single person or couple is entitled", and HB Regs 2006 reg 75A the welfare benefits to which the claimant or couple is entitled. benefit_cap_reduction summed every benefit-unit member's contributory ESA and JSA, incapacity benefit and SDA, and the whole unit's income-related ESA and income-based JSA, so another member's own award reduced the family's Universal Credit or Housing Benefit: with UC of 20,000 before the cap, a non-dependent adult's 5,000 of ESA cut the family's UC from 14,753 to 9,753 (#2027 review r2). The capped total now takes the claimant's and partner's person-level awards, claimant_or_partner_esa_income, claimant_or_partner_jsa_income, and the family's Child Benefit, CTC, Income Support, UC and Housing Benefit. Household income keeps the full awards. YAML tests check UC and Housing Benefit amounts; the non-dependant invariance property now also covers benefit_cap_reduction and universal_credit, with JSA, incapacity benefit and SDA among the circumstances. #2027's legacy-award invariance reads the benefit cap exemption again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The non-dependent adult's support component cannot lift the family's cap, so the two cases do not need the input and now also run on the base package, where they fail on value. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…efit-cap-75f-claimant-partner #2027 makes "on" a legacy award payee-only: of the claimant and partner, only the one the award is payable to (who reports it, or the claimant who heads the family when it is entered directly) is on it (HB Regs 2006 reg 2(1), (3), (3A)). The cap's ESA head reads is_on_income_related_esa for receipt, so a partner who does not hold the couple's award no longer receives it. Two YAML cases now expect the payee only, and the property reference counts an income-related award as received by its reporter. The direct-entry attribution in has_own_esa_award already picks the same person. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…efit-cap-75f-claimant-partner #2027 now puts a member outside the couple on an income-related award only when the award on their own report alone is positive. The cap's ESA head reads is_on_income_related_esa only for the claimant and partner, so the exemption is unchanged; the cap YAML and the single-head table pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Coordination with #2084 (UC claim by a member of a couple as a single person, UC Regs 2013 reg 3(3)). This PR counts That PR edits main's versions of Whichever PR lands second should make the claimant set in the rewritten file A separate point from that PR's review, not caused by either PR: |
|
Coordination with #2088, which models the UC childcare work condition's partner exceptions (UC Regs 2013 reg 32(1)(b)). Limb (i) is "has limited capability for work". On main the only LCW proxy is What changes once both merge. Under this PR, an ESA award without the support component removes LCWRA but not LCW. So whichever of the two merges second should switch limb (i) in If this PR merges first, I'll make the switch in #2088. If #2088 merges first, please switch it here when you merge main. Tests to add with the switch. A working claimant whose partner has
🤖 Generated with Claude Code |
|
Coordination with #2089 (each scheme its own benefit cap and LHA shared-accommodation rules), which is stacked on #2084. #2089 deletes the shared exception files this PR rewrites,
Porting this PR onto the split (whichever of the two merges second):
I will push a pre-resolved composition of the two branches, |
Summary
The benefit cap lifted in two cases the law does not, and counted benefits it should not:
is_benefit_cap_exempt_other), lifted the cap. HB Regs 2006 reg 75F(1)(a) and UC Regs 2013 reg 83(1)(a) need ESA "which includes a support component".is_benefit_cap_exempt_other), LCWRA flag or caring.benefit_cap_reductionsummed every member's contributory ESA and JSA, incapacity benefit and SDA, and the whole unit's income-related ESA and income-based JSA. UC Regs 2013 reg 80(1) and HB Regs 2006 reg 75A count the benefits "to which the single person or couple is entitled". With UC of £20,000 before the cap, a non-dependent adult's £5,000 of ESA cut the family's UC from £14,753 to £9,753. Count only the claimant's and partner's legacy awards in means tests and passports #2027's review found this, and Count only the claimant's and partner's legacy awards in means tests and passports #2027 now leaves the whole cap to this PR.A third defect hid the first. Datasets set
is_disabled_for_benefits, the default foruc_limited_capability_for_WRA, from receipt of any of ten benefits, ESA included (policyengine-uk-datadisability_benefits.py). So the UC LCWRA exception lifted the cap for every ESA recipient, whatever their ESA group. Universal Credit takes the ESA work capability assessment (UC Regs 2013 reg 40(1)(a)(ii)). So a person whose own ESA lacks the support component is now taken not to have LCWRA, whatever the flag. The work allowance and the reduced minimum age need only limited capability for work, so they get a separateuc_limited_capability_for_work, which such a person keeps.Stacked on #2027 (
legacy-award-readers-claimant-partner, headf551e542b, last merged in at19a13f2c5), which is stacked on #2013, #2001 and #1896.Law
Fetched verbatim from legislation.gov.uk (
/data.xml, current revised text) on 2026-10-02.HB Regs 2006 regs 75A, 75E(2), 75F; UC Regs 2013 regs 2, 40(1), 79(1), 80(1), 83(1); UC (TP) Regs 2014 reg 19(4); WRA 2007 ss.2(2), 4(4); WRA 2012 s.96(10); HB Regs 2006 regs 2(1), 19, 20(1); UC Regs 2013 regs 4(6), 5(5)
HB Regs 2006 (SI 2006/213) reg 75F:
Reg 75E(2):
UC Regs 2013 (SI 2013/376) reg 83(1):
UC Regs 2013 reg 2: "attendance allowance" includes "armed forces independence payment under the Armed Forces and Reserve Forces (Compensation Scheme) Order 2011". WRA 2012 s.40: "claimant" means a single claimant or each of joint claimants.
UC Regs 2013 reg 40(1):
UC (Transitional Provisions) Regs 2014 reg 19(4): where it had been determined that a claimant moving from old style ESA "had limited capability for work-related activity ... (b) the claimant is to be treated as having limited capability for work and work-related activity for the purposes of regulation 27(1)(b) of those Regulations".
Welfare Reform Act 2007 s.2(2) (contributory allowance), and s.4(4) in the same words (income-related allowance):
UC Regs 2013 reg 79(1) and reg 80(1), the capped total:
HB Regs 2006 reg 75A:
Welfare Reform Act 2012 s.96(10): "welfare benefit" means bereavement allowance, child benefit, child tax credit, employment and support allowance (including income-related), housing benefit, incapacity benefit, income support, jobseeker's allowance (including income-based), maternity allowance, severe disablement allowance, universal credit, widow's pension, widowed mother's allowance or widowed parent's allowance.
HB Regs 2006 reg 2(1): "child" means a person under the age of 16. Reg 19(1): a "young person" is a person who falls within the definition of qualifying young person in section 142 of the Act; reg 19(2) excludes a person on income support, income-based JSA or income-related ESA, or entitled to universal credit. Reg 20(1): a person is responsible for a child or young person who is normally living with them. UC Regs 2013 reg 5(5): "A person who is receiving universal credit, an employment and support allowance or a jobseeker's allowance is not a qualifying young person." Reg 4(6): a child or qualifying young person looked after by a local authority is treated as not being anyone's responsibility.
Changes
ESA with the support component
has_own_esa_award(Person): the person claims ESA themselves. That means reported contributory ESA or a reported income-related award. When the family's income-related award is entered directly, the award goes to the claimant or partner who heads the benefit unit (else the eldest), so a couple's award has one recipient.esa_includes_support_component(Person): whether the person's ESA includes the support component (WRA 2007 ss.2(2), 4(4)).is_on_income_related_esa, from Count only the claimant's and partner's legacy awards in means tests and passports #2027).esa_contrib > 0term leavesis_benefit_cap_exempt_other.On the default: policyengine-uk-data also builds
esa_support_group_proxy, from labour-market status (working age, reported status long-term sick or disabled, no hours of work, and its ESA health-condition proxy). It agrees with the survey's own answer for 524 of those 629 records (83%). Assuming the support component agrees for 584 (93%). So the model uses the constant default and does not read the proxy. The survey's own answer is the better source; see the follow-ups.Who counts
is_responsible_for_child_or_young_person_for_uc_or_housing_benefit).is_child_or_young_person_for_legacy_benefits(HB regs 2, 19) oris_child_or_qualifying_young_person_for_universal_credit(UC regs 4-5) counts.uc_limited_capability_for_WRAstill defaults tois_disabled_for_benefits. A person whose own ESA award lacks the support component is now taken not to have LCWRA, whatever the flag. A determination of limited capability for work-related activity is what gives ESA its support component, and Universal Credit takes it (UC Regs 2013 reg 40(1)(a)(ii); UC (TP) Regs 2014 reg 19(4)).uc_LCWRA_element, the cap and thedisability_basic_incomecontrib reform.uc_LCWRA_elementand the work allowance still read every member of the benefit unit: a non-dependant's own ESA would add an LCWRA element to the family's Universal Credit. Count only the claimant's and partner's legacy awards in means tests and passports #2027's legacy-award invariance test caught exactly that. It can follow Give the UC LCWRA and carer elements, the work allowance and the benefit cap exceptions on the claimants' circumstances only #1989's claimant-only element.uc_limited_capability_for_work=uc_limited_capability_for_WRAoris_disabled_for_benefits.esa_income: the element is positive although no member's circumstances give it.is_benefit_cap_exempt_earningsandis_benefit_cap_exempt_otherlose the benefit sums they computed and never used. The earnings test and the State Pension age test return what they returned before. The labels that named the wrong test are corrected.The capped total
benefit_cap_reductionnow counts:claimant_or_partner_esa_incomeandclaimant_or_partner_jsa_income, from Count only the claimant's and partner's legacy awards in means tests and passports #2027);Another member's own award no longer reduces the family's Universal Credit or Housing Benefit.
esa,jsa,household_benefitsand household income keep the full awards. Maternity allowance and the bereavement benefits are welfare benefits too (s.96(10)); they were not in the model's total and are not added here.Review of the other exceptions
is_benefit_cap_exempt_earnings, UC reg 82): unchanged here. Its defects (total income tax, the hard-coded £846 threshold, any member's earnings) are fixed by Use each rule's own Universal Credit earned income in the benefit cap, targeted childcare and local CTR #1999 (on Deduct only each person's own tax and NI on earnings from UC earned income #1949) and Fix benefit cap exemption defects (#1818) #1820.is_benefit_cap_exempt_other): unchanged. It still exempts a family with any member over State Pension age, including a non-dependant. Apply the benefit cap to mixed-age couples on Universal Credit, and keep them off pensioner Council Tax Reduction #1944 replaces it withhousing_benefit_pension_age_regulations_apply(UC regs 79-83 have no age exception; HB (SPC) Regs have no cap), and Use the State Pension Credit qualifying age, and start-of-year status for Class 4 NI #1907 uses the Pension Credit qualifying age.is_entitled_to_carer_benefit.Invariants (property-tested)
test_benefit_cap_specified_benefits_properties.pydraws up to six families per simulation.hypothesis.eventrecords every role and circumstance drawn.is_benefit_cap_exempt_health_disability,is_benefit_cap_exempt_other,is_benefit_cap_exempt,benefit_cap,benefit_cap_reductionoruniversal_credit(with £30,000 of UC before the cap), whatever disability or carer benefits, ESA, JSA, incapacity benefit, SDA, disability flag or caring they have.Properties 1-3 run 40 random examples each. Property 4 is a deterministic table. #2027's legacy-award invariance test reads the cap exemption again (#2027 had dropped it when it handed the cap over). All pass: 16 tests across the two files.
Known violations, out of scope. A non-dependant's age and earnings still lift the cap, through
is_benefit_cap_exempt_other(#1944, #1907) andis_benefit_cap_exempt_earnings(#1999, #1820). The draws keep the non-dependant under State Pension age and without earnings.On the base (
3803dda0d), in the single-head table with the support component left to the default, 60 of the 128 families disagree with the reference. For example:On #2027's earlier head
200a1cdc4, Hypothesis's minimal counterexample for properties 1 and 2 was a 25-year-old claimant whose benefit unit adds a 17-year-old non-dependant receiving attendance allowance: the family became exempt.Tests
YAML:
gov/dwp/benefit_cap/benefit_cap_specified_benefits.yamlhas 56 cases, each hand-computed from the regulation and the 2025-26 caps (UC reg 80A(2), HB reg 75CA). Every head has a case where a non-dependent adult holds the benefit.YAML, the capped total:
gov/dwp/benefit_cap/benefit_cap_capped_total.yamlhas 5 cases on UC and Housing Benefit amounts.Other YAML:
benefit_cap.yaml: a 16-year-old out of education gives the family rate (£22,020). This is unchanged; it pins the reg 5(1)(a) approximation. The family-rate helper does not yet apply reg 5(5), because the LHA non-dependant test shares the rule and must change with it (follow-up).legacy_award_readers/passports.yaml(from Count only the claimant's and partner's legacy awards in means tests and passports #2027): the two benefit cap cases now state the support component.On the base (
3803dda0d):benefit_cap_specified_benefits.yamlfails 36 of 56 cases.benefit_cap_capped_total.yamlfails 3 of 5 cases, all on value. A non-dependant's ESA exempts the whole family there, and a non-dependant's income-based JSA takes £247 off the family's Housing Benefit.Runs:
19a13f2c5:gov/dwpandfinance/benefitYAML, 669 passed; the cap and legacy-award properties, 16 passed.830306211(before the merge off551e542b): YAML 1,635 passed; pytest 2,086 passed, 45 skipped. Full suites on19a13f2c5: running.ruff formatandruff checkare clean.Enhanced FRS impact
Real
Microsimulationruns on a private copy of the Enhanced FRS 2024-25 (sha256e433e532…), one per package state:3803dda0d(Count only the claimant's and partner's legacy awards in means tests and passports #2027's head when this branch merged it);521373814, the exemption changes;830306211, which adds the capped total.Then again on #2027's newer head
f551e542b(payee-only "on") against this branch's19a13f2c5. The results are identical in every aggregate and every benefit array.Aggregates only.
The dataset as it stands: £0 in every year 2025-2030. Every benefit, household total (including
gov_spendingandhbai_household_net_income) and poverty rate is unchanged, and no benefit unit loses the overall exemption.3803dda0d→521373814, andf551e542b→19a13f2c5). Only the component flags move.is_benefit_cap_exempt_otherloses its armed forces and contributory ESA terms. That flips it for 912 records, about 780,000 benefit units weighted. All stay exempt: 845 throughis_benefit_cap_exempt_health_disability, now limited to the claimant and partner, and the other 67 through earnings.is_benefit_cap_exempt_health_disabilityturns false for 69 benefit units, about 27,000 weighted, in every year. All 69 stay exempt through earnings.521373814→830306211). No benefit unit's reduction changes by more than a penny; the largest difference is £0.002, from the order of summation. The dataset has 74 non-dependant records, about 18,000 people weighted, and none reports ESA.Sensitivity: the survey's own ESA group. The same copy, with
esa_includes_support_componenttaken from FRS 2024-25ESAGroupfor the 629 ESA recipients in FRS-sourced records who answered it. Of those, 584 are in the support group. The stacked SPI-synthetic and capital-gains copies do not link back to FRS records and keep the default.Base run on the same copy against the branch (
f551e542b→19a13f2c5;3803dda0d→830306211gives the same table):Axiom
axiom: TheAxiomFoundation/rulespec-uk#425 queued
None of these provisions is in the corpus: HB Regs 2006 regs 75A, 75E and 75F; UC Regs 2013 regs 79, 80 and 83; WRA 2007 ss.2 and 4; WRA 2012 s.96. rulespec-uk encodes UC regs 80A, 81 and 82, and its reg 81 takes the capped total as an input. The issue holds the verbatim law, the required outputs, a pasteable
review_findingand companion tests taken from this PR's YAML. It extends #389 (regs 79/83, the age question) and #416 (reg 75F(1)(a), from #2027).Coordination
is_benefit_cap_exempt_health_disabilityand left the cap to this PR.3803dda0dkeeps this branch's version of that file and of the cap cases inpassports.yaml, and takes Count only the claimant's and partner's legacy awards in means tests and passports #2027's deletion ofutils/inputs.py.f551e542btakes its payee-only "on". The cap's ESA head readsis_on_income_related_esafor receipt, and two YAML cases now expect only the payee to be on the award.benefit_cap_reduction.pytoo. Keep this PR's claimant-or-partner lists when resolving.The same lines are edited by several other open PRs; whichever lands second resolves by hand:
is_uc_assessed_claimantand UC's QYP test, and readsuc_LCWRA_element > 0. It still lets anyesa_incomeor claimantesa_contriblift the cap.is_claimant_or_partneruntil Count only claimants' income in Universal Credit #1978 lands, thenis_claimant_or_partner | is_uc_assessed_claimant.afcsand ESA terms fromis_benefit_cap_exempt_other. Those terms now live, scoped, inis_benefit_cap_exempt_health_disability.is_entitled_to_carer_benefitinYOUNG_PERSON_BENEFITS, and drop its hunks in the deadQUAL_PERSONAL_BENEFITSlists that this PR deletes.Follow-ups
ESAGroup, benefits table VAR3 for BENEFIT 16: 1 work-related activity group, 2 support group, 3 assessment phase). policyengine-uk-data can supply a completeesa_includes_support_componentcolumn from it. Until then, no dataset result depends on the support component.is_responsible_for_child_or_young_person_for_uc_or_housing_benefitandlha_renter_has_non_dependantshould stop counting a 16-year-old who receives benefits in their own right or is looked after. Both have to change together.🤖 Generated with Claude Code