Skip to content

Pay the legacy carer premium per qualifying claimant or partner; IS carer route through them only - #2001

Open
MaxGhenis wants to merge 6 commits into
mainfrom
legacy-carer-premium-claimant-only
Open

MaxGhenis wants to merge 6 commits into
mainfrom
legacy-carer-premium-claimant-only

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Stacked on #1896 (remove-is-child-flags), which adds is_claimant_or_partner. Retarget to main once #1896 merges.

Summary

The legacy carer premium and the Income Support carer route counted every member of the benefit unit, so a caring child or qualifying young person qualified the family. The law names only the claimant and partner. Separately, two caring partners got one premium, because gov.dwp.carer_premium.couple has always held the single rate.

Carer premium. IS Regs 1987 Sch 2 para 14ZA(1):

the condition is that the claimant or his partner is, or both of them are, entitled to a carer's allowance under section 70 of the Contributions and Benefits Act or carer support payment.

Para 15(7):

Carer Premium. £48.15 in respect of each person who satisfied the condition specified in paragraph 14ZA.

The same condition and the same "in respect of each person" amount appear in:

  • JSA Regs 1996 Sch 1 para 17 and Part IV (8);
  • ESA Regs 2008 Sch 4 paras 8 and 11(3);
  • HB Regs 2006 Sch 3 para 17 and Part 4 (8);
  • HB (SPC) Regs 2006 Sch 3 paras 9 and 12(4);
  • CTR England (SI 2012/2885) Sch 2 para 9 and Part 4 (4);
  • CTR Wales (WSI 2013/3029) Sch 2 para 9 and Sch 7 para 14;
  • CTR Scotland: SSI 2012/319 Sch 1 para 10. SSI 2021/249 Sch 1 para 5(3) pays "in respect of each partner if they both qualify for it, but only if they are not caring for the same severely disabled person".

Income Support carer route. SSCBA 1992 s.124(1)(e) makes a person entitled if "he falls within a prescribed category of person". IS Regs reg 4ZA(1) prescribes the people in Schedule 1B, and Sch 1B para 4 covers "A person (the carer)". A couple's claim "shall be made by whichever partner they agree should so claim" (Claims and Payments Regs 1987 reg 4(3)), so either partner's caring opens the route. A dependant's caring does not.

All text was fetched from legislation.gov.uk data.xml on 2026-10-01 (current revised versions, plus point-in-time copies of IS Sch 2 for 2015-2026).

Changes

  • carer_premium: the number of members who are both is_claimant_or_partner and is_carer_for_benefits, times gov.dwp.carer_premium.single, times 52. That gives 0, one amount, or two. It used num_carers, which counts every member.
  • gov.dwp.carer_premium.couple is removed. It has never been twice the single rate. Both files were created in 2021 at £37.50, and from 2023 each uprating copied the single value into couple. Two qualifying partners therefore got £48.15 a week instead of £96.30. single is relabelled as the per-person amount. Reforms should change single; a reform that sets couple will now fail loudly instead of silently doing nothing.
  • gov.dwp.carer_premium.single 2025-26: £46.38 → £46.40. That is IS Sch 2 para 15(7) as in force from 7 April 2025. Every other year, 2015-2026, matches the point-in-time legislation.
  • New benefit-unit variable partners_care_for_same_severely_disabled_person. SSCBA s.70(7ZA) says that where two people "would have a relevant entitlement for the same day in respect of the same severely disabled person, one of them only shall have that entitlement", and SSI 2023/302 reg 5(3) does the same for Carer Support Payment. So partners caring for the same person satisfy the premium condition once, in every scheme; SSI 2021/249 Sch 1 para 5(3)-(4) says so expressly for Scottish working-age CTR. When the variable is true, the premium is capped at one amount for the benefit unit.
    • Default: true, unless at least two of the claimant and partner report a Carer's Allowance award (carers_allowance_reported). It can be supplied.
    • Why: in law, two awards mean two different cared-for people. The model's carers_allowance and carer_support_payment, however, are paid on caring hours as well as on a reported award. So a modelled "receipt" does not show who is cared for, and a couple who both qualify on hours alone get one premium unless the variable is set to false. That is the same result as before this PR for that case.
    • The two allowances themselves still pay both partners (Carer's Allowance and Carer Support Payment pay two people caring for the same person (SSCBA s.70(7ZA), SSI 2023/302 reg 5(3)) #2028).
  • income_support_eligible: the carer route now needs a claimant or partner who is a carer, not any member.
  • num_carers and benunit_has_carer are unchanged. Their remaining reader on this branch is uc_carer_element (defined_for), which the UC claimant-elements branch stacked on Count only claimants' income in Universal Credit #1978 rewrites.
  • In this model the premium reaches the Income Support, Housing Benefit and council tax reduction applicable amounts (benefits_premiums). Income-based JSA and income-related ESA come from reported awards.

Impact (Enhanced FRS 2024-25, real microsimulation runs)

There were four runs on a private copy of the Enhanced FRS 2024-25 file (sha256 e433e532…): this branch's base (#1896 head 143cc3c), then each step added in turn. Each step is a full run. Runs at 63b633c (same-person input defaulting to false) and at the head aa360aa (same-person default derived from reported awards) both match the step 3 run exactly in every year. The reason: all 6 dataset records with two caring partners have two reported awards, and no caring claimant or partner lacks one.

£m 2025 2026 2027 2028 2029 2030
Carer premium as computed for every benefit unit +23.06 +22.73 +23.34 +23.90 +24.49 +25.09
  1. claimant and partner only (para 14ZA(1)) +0.00 +0.00 +0.00 +0.00 +0.00 +0.00
  2. one amount per qualifying person; £46.40 in 2025-26 (para 15(7)) +23.06 +22.73 +23.34 +23.90 +24.49 +25.09
  3. IS carer route through claimant or partner only (Sch 1B para 4) +0.00 +0.00 +0.00 +0.00 +0.00 +0.00
Income Support +0.09 +0.00 +0.00 +0.00 +0.00 +0.00
Housing Benefit +0.19 +0.20 +0.20 +0.21 +0.21 +0.22
Council tax reduction +0.00 +0.00 +0.00 +0.00 +0.00 +0.00
Household net income +0.29 +0.20 +0.20 +0.21 +0.21 +0.22
  • Steps 1 and 3 are zero by data, not by accident. The Enhanced FRS has no care_hours (Take-up inputs for Carer's Allowance and the UC childcare element, and caring hours in is_carer_for_benefits #1856 explains why it is left unfilled); its only caring signal is reported Carer's Allowance. Every one of the 1,197 recipients is a claimant or partner. The 14 aged 16-19 are the claimant or partner of their own benefit units, and no child or qualifying young person reports CA, which is what the law predicts: CA excludes people in full-time education. The fix still matters for household calculations that enter caring hours or CA for a dependant.
  • Step 2 raises the premium for the 9.1k benefit units (6 survey records) where both partners receive CA. Only 0.12k of those units are on IS, HB or CTR, so the benefit change is +£0.2m a year. Most of the +£23m premium total sits in units that receive none of those benefits. In 2025 the 2p a week rate correction also reaches 94.5k households on IS, HB or CTR.
  • No household is worse off in any year, and Income Support eligibility changes for nobody. The model pays no Income Support from 2026.

Scripts and full comparisons are kept locally: dataset_impact.py, compare_impact.py, and the step JSONs. The comparisons are aggregates only, with no record-level values.

Tests

  • tests/policy/baseline/finance/benefit/carer_premium.yaml (17 cases, hand-computed from the law). PE-UK reads gov parameters at 30 April of the simulation year, so 2025 uses the April 2025 rate. The cases:
    • single carer; partner only;
    • both partners with Carer's Allowance awards, at the 2026 rate (2 × £48.15 × 52) and the 2025 rate (2 × £46.40 × 52);
    • a caring QYP gives nothing; a caring child under 16 gives nothing;
    • a lone-parent carer with a caring QYP gets one premium;
    • two caring partners plus a caring QYP get two. This replaces the Specify carer_premium logic for >2 carers #420 three-carer regression test;
    • a working-age couple who both care: benefits_premiums and the CTR applicable amount, (HB Sch 3 para 1(3)(b) £150.15 + 2 × £48.15) × 52;
    • a pension-age couple who both receive CA: the HB applicable amount, (HB (SPC) Sch 3 para 1(2)(b) £383.35 + 2 × £48.15) × 52;
    • both partners supplied as caring for the same person (one premium) or for different people (two);
    • both partners caring by hours alone are treated as caring for the same person (one premium);
    • three members supplied as claimant or partner (a polygamous marriage), all with awards: three premiums, or one if they care for the same person;
    • a reported award its holder would not claim (would_claim_carers_allowance: false) does not count towards two awards;
    • an 18-year-old 15 years younger than the other adult is a partner; 16 years younger is presumed a child (the property generator's boundary);
    • a 17-year-old partner supplied through is_claimant_or_partner counts. The inferred roles treat a 17-year-old as an HBAI child; that limit comes from Replace generic child and adult flags with each programme's legal definitions #1896.
  • tests/policy/baseline/finance/benefit/family/income_support/income_support_carer_route.yaml (4 cases): single carer and partner carer are eligible. A lone parent whose only carer is a QYP, and a couple whose only carer is a 12-year-old, are not.
  • care.yaml: three tests that fed num_carers straight into carer_premium are removed. Their cases are now in carer_premium.yaml, built from people.
  • Against the base branch, 8 of the first 13 YAML cases (premium and IS) fail, each for the intended reason. The other 5 are cases this PR leaves unchanged.

Invariants (Hypothesis, tests/test_legacy_carer_premium_properties.py)

The properties are drawn over families of a claimant aged 18-85, an optional partner, and up to three children or QYPs, each with a random reported Carer's Allowance award and random caring hours. The generator never draws an adult under 20 who is 16 or more years younger than the other adult, because the model would presume them to be the other's child. That boundary (18 with 33) is pinned with @example, and 20,000 generator draws find no violation.

  1. A dependant's caring never changes carer_premium or income_support_eligible.
  2. carer_premium = (caring claimants and partners, capped at one when treated as caring for the same person) × per-person amount × 52, so it is bounded by 0 and twice the amount. The default same-person rule (fewer than two reported awards) is checked in the same test.
  3. Caring by the claimant or partner never removes Income Support eligibility and never lowers the premium. Below pension age it always opens the IS route.
  4. Supplying "same person" never raises the premium and caps it at one amount.

The first test (1 and 2) fails on the base branch. Hypothesis's minimal counterexamples were a couple who both receive CA, paid one premium, and a lone parent whose 16-year-old QYP receives CA, which gave the family a premium. Invariant 3 is a positive invariant that also held before this PR. Invariant 4 tests the new input.

Locally, because PE-UK CI runs only on PRs into main:

  • at 812878e: full YAML suite 1,487 passed; pytest policyengine_uk/tests/ 2,016 passed, 45 skipped;
  • at 63b633c: the benefit and gov YAML suites, 1,284 passed; the property tests; the parameter, metadata and variable pytest subset, 1,703 passed;
  • at 9c7cde8: the benefit, gov and local-authority YAML suites (441 + 885 passed); the property tests (3 passed);
  • at aa360aa: carer_premium.yaml and care.yaml (21 passed); the property tests (3 passed); ruff check clean;
  • ruff format --check . clean.

Review

An independent review on a Subfleet lane (GPT-6.1 Sol) returned REQUEST CHANGES:

  1. Two premiums overpay Scottish working-age CTR when both partners care for the same person. Fixed, and more generally: s.70(7ZA) applies the one-entitlement rule to every scheme (the new input above).
  2. Other IS gates still read every member: any member over pension age, any member's ESA, any member's reported IS. This predates the PR and is outside it. Fixed in Apply the Income Support conditions to the claimant and partner only #2013, which is stacked on this PR.
  3. Missing boundary cases (young partner, pension age, applicable amounts asserted directly). Added; the extra-adult case is now stated in the variable documentation.
  4. Documentation equated is_carer_for_benefits with legal entitlement and over-generalised the CTR schedules. Reworded.
  5. An earlier commit message said both property tests fail on base; only the first does. Corrected above.
  6. Changelog fragments lacked the bullet prefix. Fixed.

Round 2 (same reviewer) confirmed the s.70(7ZA) argument, the hand-computed expectations and fixes 2, 4, 5 and 6. It returned REQUEST CHANGES on two new problems, both fixed in 9c7cde8:

  • N1. The widened generator could draw an 18-19-year-old with a partner 16 or more years older, whom the model presumes to be a child; the role check would then fail on some seeds. The partner's age is now bounded in both directions.
  • N2. The default's stated reason was "two partners who both receive CA cannot be caring for the same person". That is true in law but false in the model, where receipt follows entered hours. The default is now derived from reported awards, and the wording above is corrected.

Nits fixed in the same commit:

  • the same-person cap applies to the whole benefit unit;
  • the CSP same-person rule is cited (SSI 2023/302 reg 5(3));
  • Welsh working-age CTR is named in the formula comment.

Round 3 (read-only): APPROVE WITH NITS. N1 and N2 resolved: the reviewer traced every branch of the role inference against the generator, and checked all 15 YAML cases by hand. Three low nits were fixed in aa360aa:

  • the same-person default counts reported awards only among carers;
  • the wording says "Carer's Allowance or Carer Support Payment award", because carers_allowance_reported carries both;
  • both sides of the generator's age boundary are pinned in YAML.

The reviewer also noted that the model's 2026 IS personal allowances (£104.43 single 25+, £164.06 couple) differ from IS Sch 2 para 1 (£95.55, £150.15). That is why no case asserts the IS applicable amount. Those parameters are rewritten in #1925.

Downstream

PolicyEngine/impact-iran-war-living-standards lists gov.dwp.carer_premium.couple in CPI_UPRATED_BENEFIT_PARAMETERS. It pins policyengine[uk]==5.3.0, so it is unaffected until its next bundle bump, which should drop that entry.

axiom: TheAxiomFoundation/rulespec-uk#403 queued (no module encodes the carer premium condition or IS Sch 1B para 4; HB Sch 3, HB (SPC) Sch 3 and ESA Sch 4 are in the pinned corpus, IS Sch 2/1B and JSA Sch 1 need ingesting)

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits October 1, 2026 11:19
IS Regs 1987 Sch 2 para 14ZA(1) and the JSA, ESA, HB and CTR equivalents
give the premium where "the claimant or his partner is, or both of them
are" entitled to Carer's Allowance or Carer Support Payment, and para 15(7)
pays it "in respect of each person who satisfied the condition". The model
counted every benefit-unit member, so a caring child or young person gave
the family the premium, and paid two qualifying partners one amount because
the couple parameter held the single rate. Count only the claimant and
partner, pay the per-person amount for each, remove the couple parameter,
and correct the 2025-26 rate to £46.40.

The Income Support carer route (Sch 1B para 4 with reg 4ZA and SSCBA
s.124(1)(e)) likewise opens only through the claimant or partner.

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

Hypothesis properties over families of a claimant, an optional partner and up
to three children or qualifying young persons: a dependant's caring never
changes carer_premium or income_support_eligible; the premium is the
per-person amount times the caring claimants and partners; and caring by the
claimant or partner never removes Income Support eligibility. Both fail on
the base branch. Add changelog fragments and note that the premium reaches
the IS, HB and CTR applicable amounts only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SSCBA 1992 s.70(7ZA): where two people would be entitled to Carer's
Allowance for the same severely disabled person, only one of them is, so only
one satisfies the premium condition; SSI 2021/249 Sch 1 para 5(3)-(4) says the
same for Scottish working-age council tax reduction. Add the benefit-unit
input partners_care_for_same_severely_disabled_person (default false, since
two partners who both receive Carer's Allowance must be caring for different
people) and cap the premium at one amount when it is set.

From the independent review of this PR: describe is_carer_for_benefits as the
model's proxy for entitlement, qualify the Scottish working-age rule, add
cases for a pension-age couple, a supplied 17-year-old partner and the same
cared-for person, assert the HB and CTR applicable amounts directly, widen the
property generators to ages 18-85, add a same-person property, and write the
changelog fragments as bullets. The second property (caring by the claimant
or partner never removes IS eligibility) is a positive invariant that also
held before this PR; only the first fails on the base branch.

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

Review r1 of this PR found three ways a member outside the claimant and
partner, or the wrong partner, still decided eligibility:

- An excluded member's reported ESA switched off the fallback for an
  esa_income entered directly. The gate now asks the simulation whether
  esa_income is an input (simulation.input_variables, as
  marginal_tax_rate_on_capital_gains does). If it is, it reads it as the
  claimant's or partner's award. Otherwise it applies the esa_income
  calculation, now the shared income_related_esa_award helper, to the
  claimant's and partner's reported amounts.
- The award and the conditions could sit on different partners. No new
  claim can be made (UC (TP) Regs 2014 reg 6A(1)), and a partner who
  takes over an award makes a claim (Claims and Payments Regs 1987
  reg 4(4)). So the claimant is the partner who reports the existing
  award, and that person must satisfy (aa), (e) and the first limb of
  (h).
- youngest_child_age_for_legacy_benefits counted a child placed by a
  local authority, who is not a member of the claimant's household
  (IS Regs 1987 reg 16(4)). It now uses
  is_child_or_young_person_for_legacy_benefits.

#2001's "partner is the carer" case now puts the award on the caring
partner. YAML: 21 cases, 5 of which fail on this PR's previous head and
10 on #2001's. The Hypothesis generators add placed children, esa_income
entered directly and household savings, and the differential test
follows the award holder.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Round-2 review of this PR: the model pays Carer's Allowance and Carer Support
Payment on caring hours as well as on a reported award, so "both receive a
carer benefit" does not show that two partners care for different people, and
the earlier default (false) still paid two premiums to a couple who entered
hours for the same person. In law two awards do mean two different people
(SSCBA s.70(7ZA); SSI 2023/302 reg 5(3) for Carer Support Payment), so
partners_care_for_same_severely_disabled_person now defaults to true unless at
least two of the claimant and partner report a Carer's Allowance award, and it
can still be supplied. It moves beside carer_premium, since it has a formula.

Also: bound the property generator's partner age in both directions so no
adult under 20 is presumed the other's child (pinned with @example; 20,000
draws find no violation), check the default rule and the cap inside the
per-person invariant, cite SSI 2023/302 reg 5(3) for Carer Support Payment,
add Welsh working-age CTR to the formula comment, say that the same-person cap
applies to the whole benefit unit, test partners supplied beyond two, and give
the two-premium YAML cases reported awards. The model's own Carer's Allowance
and Carer Support Payment still pay both partners (issue #2028).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Round-3 review (APPROVE WITH NITS): count reported awards only among carers,
so a reported award its holder would not claim does not make two; say
"Carer's Allowance or Carer Support Payment award", since
carers_allowance_reported is the model's reported-receipt input for both; and
pin both sides of the property generator's age boundary in YAML (an
18-year-old 15 years younger than the other adult is a partner, 16 years
younger is presumed a child).

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.

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