Skip to content

Count contributory ESA, Maternity Allowance, industrial injuries benefit and capped Carer Support Payment as UC unearned income - #1958

Merged
MaxGhenis merged 5 commits into
mainfrom
uc-unearned-reg66-benefits
Oct 1, 2026
Merged

MaxGhenis merged 5 commits into
mainfrom
uc-unearned-reg66-benefits

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

What

Universal Credit unearned income now counts four benefits that UC Regs 2013 reg. 66(1)(b) lists and PolicyEngine left out:

Reg. 66(1)(b) Benefit PolicyEngine variable In the list from
(ii) employment and support allowance: contributory only, per the reg. 2 definition ("as amended by … Schedule 14 to the Welfare Reform Act 2012 (removing references to an income-related allowance)") esa_contrib 2013-04-29
(iiia) carer support payment "but only up to a maximum of the amount a claimant would receive if they had an entitlement to carer's allowance" new uc_unearned_carer_support_payment 2023-11-19
(viii) maternity allowance maternity_allowance 2013-04-29
(ix) industrial injuries benefit (SSCBA 1992 Part 5, reg. 2), excluding the s. 104/105 increases iidb 2013-04-29

Reg. 22(1)(a) deducts all unearned income from the maximum amount, so each counts pound for pound.

Law (verified verbatim on legislation.gov.uk, 2026-09-30)

  • Reg. 66(1)(b) counts: "any of the following benefits to which the person is entitled, subject to any adjustment to the amount payable in accordance with regulations under section 73 of the Social Security Administration Act 1992 (overlapping benefits)".
    • The list is jobseeker's allowance, employment and support allowance, carer's allowance, carer support payment (with the cap), widowed mother's allowance, widowed parent's allowance, widow's pension, maternity allowance, and industrial injuries benefit excluding s. 104/105 increases.
    • (ii), (viii) and (ix) are in the 2013-04-29 version.
    • (iiia) was inserted from 19.11.2023 by S.I. 2023/1218 art. 23(5).
  • Reg. 2:
    • "employment and support allowance" and "jobseeker's allowance" mean the contributory/contribution-based allowances only.
    • "industrial injuries benefit" means a benefit under Part 5 of SSCBA 1992.
    • "carer support payment" was inserted 19.11.2023 as "carer's assistance given in accordance with the Carer's Assistance (Carer Support Payment) (Scotland) Regulations 2023". From 15.3.2026 it means "the carer support payment component of carer support" (S.I. 2026/246 art. 25). From that date Carer Support has three components (SSI 2023/302 reg. 3(1)), so the Scottish Carer Supplement is not UC unearned income.

Carer Support Payment

  • uc_unearned_carer_support_payment = min(carer_support_payment, Carer's Allowance rate × 52).
  • carer_support_payment today is (CSP rate + Scottish Carer Supplement) × 52. The CSP component is paid at the Carer's Allowance rate (£86.45 a week in 2026-27 for both), so for a full year the cap is the component and the supplement drops out.
  • The formula stays right after carer_support_payment becomes the component only. The pension-credit-carers-income branch moves the supplement to scottish_carer_supplement; a rescaling formula would have removed it twice.
  • A user-entered partial-year CSP below the cap counts in full, because until that split the supplement share of an entered amount can't be identified.
  • No double count with Carer's Allowance: in Scotland from 2025 carers_allowance is 0 and CSP replaces it, and elsewhere CSP is 0. The tests check a Scottish carer and the same carer in England get the same UC.

Enhanced FRS impact

Real runs on a private copy of the Enhanced FRS 2024-25 (enhanced_frs_2024_25.h5, sha256 e433e532…68712):

  • Main: one Microsimulation of the main package (44240bd).
  • Branch: one Microsimulation of the branch package (554c00f).
  • Per-benefit rows: the branch package with main's list plus one benefit, swapped in memory before any calculation.
  • Differential check (one-off script, not in CI): the branch package with main's list reproduces every model output of the main run exactly (all 28 saved arrays; the branch-only uc_unearned_carer_support_payment diagnostic excluded), in every year 2025-2030.
  • No figure is scaled or interpolated.
Year UC change Benefit units losing UC Losing all UC Council Tax Reduction Household net income AHC poverty rate: all / children
2025-26 −£1.889bn 303.3k 28.6k +£2.3m −£1.888bn +0.11pp / +0.15pp
2026-27 −£1.944bn 304.5k 27.9k +£1.8m −£1.943bn +0.13pp / +0.26pp
2027-28 −£1.976bn 304.4k 29.8k +£1.2m −£1.976bn +0.14pp / +0.30pp
2028-29 −£2.002bn 305.0k 29.3k +£1.2m −£2.002bn +0.14pp / +0.30pp
2029-30 −£2.032bn 298.9k 22.0k +£0.3m −£2.033bn +0.15pp / +0.32pp
2030-31 −£2.023bn 306.0k 49.0k +£0.4m −£2.024bn +0.15pp / +0.39pp
2026-27, added alone to main's list UC change Benefit units losing UC FRS records losing Largest record's share of the loss
Contributory ESA, (b)(ii) −£1.624bn 242.9k 141 19%
Carer Support Payment, capped, (b)(iiia) −£0.296bn 67.4k 52 9%
Industrial injuries benefit, (b)(ix) −£0.060bn 20.9k 20 29%
Maternity Allowance, (b)(viii) £0 0 0 –
All four together −£1.944bn 304.5k 199 16%

The one-at-a-time rows interact and don't sum to the combined row (−£1.980bn against −£1.944bn), because some benefit units hold more than one of the benefits and UC can't fall below zero.

  • No gainers. Every benefit unit whose unearned income rose holds one of the four benefits, and the rise never exceeds what it receives of them. No UC loss exceeds the rise in unearned income; the checks are record by record, to float32 rounding.
  • Scotland (2026-27): −£0.484bn and 81.7k losing units (Carer Support Payment is Scotland-only from 2025).
  • Pre-cap award falls £9.5m more than the award (2026-27). Modelled uc_deductions are capped at the award less the 1p-a-month minimum payable (uc_deductions.py; SI 2013/380 Sch 6), so they fall as awards fall. Of the 17.1k units affected (22 records), 15.8k see the pre-cap award fall to zero and 1.2k are left with the £0.12-a-year minimum. The benefit cap reduction doesn't change for any unit (impact/precap_gap.py, output precap_gap_2026.txt).
  • Sample sizes. Losses rest on 199 FRS records. Industrial injuries benefit rests on 20 records, so its year-to-year path (−£0.058bn in 2025-26 to −£0.035bn in 2030-31) is noisy.
  • Maternity Allowance is £0 because policyengine-uk-data never populates maternity_allowance_reported: FRS code 21 was dropped from BENEFIT_CODES in 2024. It matters for household calculations now and for the microsim once the data is fixed.
  • Carer benefit overlap. In the data no UC-eligible person holds a carer benefit alongside contributory ESA, JSA, MA or State Pension (4 records hold ESA with one, none UC-eligible; impact/overlap_prevalence.py, output overlap_prevalence_2026.txt), so the missing overlapping-benefits reduction of CA/CSP doesn't affect these figures. See the known limits below.
  • Provenance. Runs at 554c00f; the later commits change only tests and comments.
  • Stacking. These runs don't include Count State Pension as Universal Credit unearned income #1943 or Stop counting interest, dividends and rent as Universal Credit unearned income #1950. Scripts and outputs are in ~/reviews/uc-unearned-reg66-benefits-2026-09-30/impact/ (dataset_impact.py, compare_impact.py).

Invariants

These hold for every input and are tested with Hypothesis in test_uc_unearned_benefits_properties.py:

  1. Monotone. The UC award before the benefit cap is non-increasing in each of the four benefits, and the maximum amount doesn't change. Unearned income rises by exactly the amount that counts: all of it for ESA, MA and IIB, and the increase in min(CSP, a year of CA) for CSP.
    • After the cap, the award is non-increasing for families that already receive the benefit.
    • Starting contributory ESA, IIB or CSP can lift the cap, because receipt exempts the family (is_benefit_cap_exempt_*). An explicit capped lone-parent example exercises this every run.
  2. Pound for pound. With no earnings, raising a benefit by d lowers the pre-cap award by exactly min(counted increase, award).
  3. Equivalence. With no earnings, the pre-cap award with x of the benefit equals the award with the counted amount of private pension instead. For CSP both families keep the carer's hours, so both get the carer element.

Invariants 2 and 3, and invariant 1 for CSP, are restricted to families without earnings. The reason is #1942: uc_earned_income deducts the whole benefit unit's income tax (the fix is in #1949).

  • CSP is taxable, so above the cap more CSP adds nothing to unearned income, but the carer's extra tax lowers the partner's earned income and raises UC.
  • Hypothesis found exactly that case.
  • A strict xfail (test_carer_support_payment_above_the_cap_does_not_change_uc, hand-computed at £1,060.32) pins it and will flip when Deduct only each person's own tax and NI on earnings from UC earned income #1949 merges.

Differential check (one-off, not in CI). The branch package with main's list, swapped in memory, reproduces every model output of the main package's Enhanced FRS run exactly (28 arrays), in every year 2025-2030.

Tests

  • uc_unearned_benefits.yaml: 17 cases, expected values hand-computed from 2026-27 and 2024-25 rates. The 2020-21 case asserts only the unearned income and the reduction, because PolicyEngine's 2020-21 standard allowance holds the 2021-22 figures (596.58 for a couple aged 25 or over, where S.I. 2020/371 gives £594.04; follow-up tracked). A 2023-24 case pins that CSP first counts in 2024-25: the yearly model takes each parameter's value on 30 April of the fiscal year (convert_to_fiscal_year_parameters), and (iiia) begins 19.11.2023. On main, 16 fail and the private-pension control passes.
  • Contributory ESA enters the property tests as esa_contrib_reported, so families with earnings exercise the income tax path.
  • test_uc_unearned_benefits_properties.py: the invariants above, plus the strict xfail.
  • Full YAML policy suite at 18e06b8: 1,304 passed (the later commit changes one test comment).
  • Property suite at 18e06b8: 6 passed, 1 xfailed (strict, UC earned income deducts the whole benefit unit's tax, including tax on pensions and other unearned income #1942).

Known limits (follow-ups tracked)

  • Widowed mother's allowance, widowed parent's allowance and widow's pension (reg. 66(1)(b)(v)-(vii)) are not counted. PolicyEngine has no variable for them.
    • policyengine-uk-data's bsp_reported sums FRS codes 6 (BSP / Widowed Parent's Allowance) and 9 (War Widow's Pension, about 90% of the money).
    • Reg. 66 counts neither BSP nor war widow's pension, so bsp correctly stays out.
    • Follow-up: split the codes in uk-data and add a WPA/widow's pension variable.
  • Industrial injuries benefit s. 104/105 increases. PolicyEngine counts all of iidb (= iidb_reported). All 116 FRS 2024-25 code-15 amounts sit on the disablement-pension rate grid, and none is above the 100% rate, so the data carry no constant attendance or exceptionally severe disablement increases.
    • A household-calculator user entering IIDB with those increases would over-count.
    • "Industrial injuries benefit" is all of SSCBA Part 5 (also reduced earnings allowance, retirement allowance and industrial death benefit), and PolicyEngine models only IIDB. The FRS routes REA to "other benefits", which is absent from the end-user file.
  • Overlapping benefits. Carer's Allowance (SI 1979/597 regs. 4(5) and 12) and Carer Support Payment (SSI 2023/302 reg. 16(2)-(3)) are reduced by contributory ESA, contribution-based JSA, MA and State Pension, among others. PolicyEngine pays both in full.
    • Whether the reg. 16(2) CSP reduction reaches (iiia) is an open reading: SI 2023/1218 added reg. 16(2) to the Pension Credit and pension-age HB income rules but not to UC reg. 66. A formula right under either reading is min(CSP given, max(0, CA − overlapping benefits)).
    • Reg. 66(1)(b) counts the benefits after that adjustment. So a household with both CA and contributory ESA now has both counted in full. While UC stays above zero, net income comes out right but the UC/CA split does not; where UC floors at zero, net income is overstated by the unreduced CA/CSP.
    • There is no effect in the Enhanced FRS (above). Follow-up: model the reduction in carers_allowance and carer_support_payment.
  • Benefit cap. WRA 2012 s. 96(10) lists maternity allowance, widow's pension, widowed mother's/parent's allowance and bereavement allowance as welfare benefits, and benefit_cap_reduction omits them. Follow-up; check against Fix benefit cap exemption defects (#1818) #1820.
  • Carer's Allowance 2025-26. The rate is 83.29 rather than £83.30, so the (iiia) cap is 1p a week low in 2025-26; Set DWP benefit rates to the announced amounts, not CPI projections #1925 corrects it.
  • Dependants' benefits. uc_unearned_income sums the list over every benefit-unit member, so a child's or qualifying young person's CSP, ESA, MA or IIB now reduces the parents' UC. Reg. 22(1)(a) deducts only the claimant's (or joint claimants') unearned income. The pattern already applied to Carer's Allowance and every other listed income; this PR extends it to four more benefits. The Enhanced FRS effect is unmeasured. Follow-up tracked: restrict UC unearned income to claimants, alongside the Replace generic child and adult flags with each programme's legal definitions #1896 dependant definitions.
  • Old-style contributory ESA. Whether it reaches UC via the UC (Transitional Provisions) Regulations 2014 wasn't checked. esa_contrib doesn't distinguish old-style from new-style.

Coordination

axiom: uk:regulations/uksi/2013/376/66 (b)(ii), (viii) and the base limb of (ix) (s.104/105 exclusion deferred, TheAxiomFoundation/rulespec-uk#392) encoded-correct via TheAxiomFoundation/rulespec-uk#391 (companion cases contributory_esa_counts_in_full, maternity_allowance_counts_in_full, industrial_injuries_benefit_counts_in_full) | TheAxiomFoundation/rulespec-uk#392 queued ((iiia) is dated 2013-04-29 but inserted 19.11.2023; reg 2 definitions; s.104/105 exclusion)

🤖 Generated with Claude Code

MaxGhenis and others added 3 commits September 30, 2026 14:59
UC Regs 2013 reg 66(1)(b) counts contributory ESA (ii), carer support
payment up to the Carer's Allowance amount (iiia, from 19 November 2023),
maternity allowance (viii) and industrial injuries benefit (ix) as
unearned income. PolicyEngine counted none of them. Add esa_contrib,
maternity_allowance and iidb to the unearned list from 2013-04-29, and a
new uc_unearned_carer_support_payment (the carer support payment
component, without the Scottish Carer Supplement, capped at a year of
Carer's Allowance) from 2023-11-19.

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

carer_support_payment is about to become the carer support payment
component only (the Scottish Carer Supplement moves to its own variable
on branch pension-credit-carers-income), so scaling it by the component's
share would remove the supplement twice. The component is paid at the
Carer's Allowance rate, so the reg 66(1)(b)(iiia) cap alone gives the
component for a full year either way.

Property tests: the award after the benefit cap is non-increasing only
for families already receiving the benefit (receipt of contributory ESA,
industrial injuries benefit or CSP can exempt a family from the cap);
explicit capped-family examples; CSP monotonicity restricted to families
without earnings, with a strict xfail pinning #1942 (the carer's tax on
CSP above the cap lowers the partner's UC earned income).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits September 30, 2026 18:19
- 2020-21: assert only unearned income and the reduction; the 2020-21
  standard allowance parameter holds the 2021-22 figures (S.I. 2020/371
  gives 594.04 for a couple aged 25 or over, not 596.58).
- Add a 2023-24 case: the yearly model takes the list in force at the
  start of the fiscal year, so CSP first counts in 2024-25.
- Draw contributory ESA as esa_contrib_reported so tests with earnings
  exercise the income tax path.
- Add the pound-for-pound property for counted Carer Support Payment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
convert_to_fiscal_year_parameters samples each parameter on 30 April of
the fiscal year, not at its start. Comment only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis merged commit 9fb46c7 into main Oct 1, 2026
6 checks passed
@MaxGhenis
MaxGhenis deleted the uc-unearned-reg66-benefits branch October 1, 2026 13:31
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Merged on green CI at dfffc19 (all six checks pass; mergeable and clean).

MaxGhenis added a commit that referenced this pull request Oct 1, 2026
#1958 split the list into 2013-04-29 and 2023-11-19 blocks. The rebase
removed interest, dividends and rent from the later block only, so remove
them from the earlier one too. The single-count property now reads the
listed sources from the parameter and asserts none of the three is on it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 1, 2026
After merging main (#1958), carer_support_payment in the Scottish UC case
is the component alone, 4,495.40, with scottish_carer_supplement 608.40
asserted beside it. uc_unearned_carer_support_payment and universal_credit
are unchanged. Refreshes the wording that said carer_support_payment
includes the supplement.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 1, 2026
#1958 split the UC unearned income list into two dated blocks
(2013-04-29 and 2023-11-19, when carer support payment starts to
count). State Pension goes in both: retirement pension income has
counted since 29 April 2013 (reg 66(1)(a) as made).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 1, 2026
Resolve council_tax_reduction_applicable_income: keep #1909's guarantee
credit and savings-credit-only rules and this branch's income-from-capital
rules, documentation and references.

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

The property tests merged from #1958 and #1909 build couples such as 42 and 18
or 67 and 18 without relationship inputs, which this branch's presumption reads
as a parent and child. Set is_claimant_or_partner from each generated role
(adults True, children False, a separate non-dependant True for their own
benefit unit), as the FRS supplies it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
juaristi22 pushed a commit that referenced this pull request Oct 2, 2026
#1958 split the list into 2013-04-29 and 2023-11-19 blocks. The rebase
removed interest, dividends and rent from the later block only, so remove
them from the earlier one too. The single-count property now reads the
listed sources from the parameter and asserts none of the three is on it.

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

- test_uc_unearned_benefits_properties.py (added on main by #1958) had a
  strict xfail pinned to #1942, which this fix turns into a pass. Remove it
  and widen the earnings-free invariants to all families, with Marriage
  Allowance off as in the State Pension file (#1947).
- The tests review found that random draws missed two mutations. Pin its
  minimized counterexamples as @example cases: a pound of State Pension
  for a pensioner just above the personal allowance with an earning
  partner, and a pound of pension for an earner just above it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
juaristi22 pushed a commit that referenced this pull request Oct 2, 2026
#1958 split the list into 2013-04-29 and 2023-11-19 blocks. The rebase
removed interest, dividends and rent from the later block only, so remove
them from the earlier one too. The single-count property now reads the
listed sources from the parameter and asserts none of the three is on it.

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.

UC earned income deducts the whole benefit unit's tax, including tax on pensions and other unearned income

1 participant