Skip to content

Count only claimants' income in Universal Credit - #1978

Draft
MaxGhenis wants to merge 5 commits into
uc-mif-net-floorfrom
uc-claimant-only-income
Draft

MaxGhenis wants to merge 5 commits into
uc-mif-net-floorfrom
uc-claimant-only-income

Conversation

@MaxGhenis

Copy link
Copy Markdown
Collaborator

Fixes #1976

Summary

Universal Credit counted the income of every member of the benefit unit. uc_earned_income summed uc_individual_earned_income over all members and uc_unearned_income summed its source list over all members, so a dependent child's or qualifying young person's wages, profits, savings interest, dividends, rent or pension reduced the parents' award. The law counts the claimant's income only (or joint claimants' combined income).

A 2026 example: a lone parent aged 40 with no income, and a 17-year-old in upper secondary education.

The 17-year-old has Before After
wages of £12,000 earned income 3,480 counted; UC £7,407.36 nothing counted; UC £9,321.36
savings interest of £12,000 (or dividends, rent, a pension) unearned income 12,000 counted; UC £0 nothing counted; UC £9,321.36

£9,321.36 is 12 × (£424.90 + £351.88), the 2026-27 standard allowance and first-child element in the reg 36 table.

Two other Universal Credit tests read every member's earnings and are fixed the same way: the benefit cap earnings exception and the childcare work condition.

The impact number needs reading with care. On the Enhanced FRS this raises 2026 UC by £4.97bn. Only £0.22bn of that is in households with survey-reported incomes. The other £4.75bn is in the dataset's SPI-synthetic households, where policyengine-uk-data gives every child imputed employment income (PolicyEngine/policyengine-uk-data#504, found here). The model bug was hiding that data bug in UC. See "Impact".

Stacked on #1973 (minimum income floor), which is stacked on #1949 and #1943.

Law (legislation.gov.uk /data.xml, read 2026-09-30)

Welfare Reform Act 2012 s.8(3)-(4), on the amounts deducted from the maximum amount:

(4) In subsection (3)(a) and (b) the references to income are— (a) in the case of a single claimant, to income of the claimant, and (b) in the case of joint claimants, to combined income of the claimants.

s.40: "“claimant” means a single claimant or each of joint claimants". s.2(1): a claim is made by "a single person" or "members of a couple jointly". So a claim has at most two claimants, and a child or qualifying young person is never one of them.

UC Regulations 2013 reg 22(1) deducts:

(a) all of the claimant's unearned income (or in the case of joint claimants all of their combined unearned income) in respect of the assessment period; and
(b) the following amount of the claimant's earned income (or, in the case of joint claimants, their combined earned income) in respect of the assessment period

Reg 22(3) adds one person: where a member of a couple claims as a single person, the deduction is "the same as the amount that would be deducted ... if the couple were joint claimants". No provision brings a child's income in.

Reg 82(1)(a), the benefit cap earnings exception:

the claimant's earned income or, if the claimant is a member of a couple, the couple's combined earned income, is equal to or exceeds the amount of earnings that a person would be paid at the hourly rate set out in regulation 4 of the National Minimum Wage Regulations for 16 hours per week

Reg 32(1), the childcare work condition:

(a) the claimant is in paid work or has an offer of paid work ...; and (b) if the claimant is a member of a couple (whether claiming jointly or as a single person), the other member is either in paid work or is unable to provide childcare ...

Guidance. DWP's Advice for Decision Making says the same of income for claimants (E2191: "All of the claimant's unearned income ... should be deducted ... Where the claim is from joint claimants then the deduction is all of their combined unearned income"). It has no paragraph on a child's income, because nothing in the regulations brings it in. It is explicit on capital (H1077: capital owned by "a dependent child or qualifying young person is not to be included in the capital of the claimant").

Contrast with the old benefits: Income Support counted a child's income until 2004 (IS Regs 1987 regs 23 and 44), and Housing Benefit needed an express exclusion (HB Regs 2006 reg 25(3)). Universal Credit never counted it.

Change

  • is_uc_assessed_claimant (new): the single claimant or the two members of the couple whose income counts. It is is_uc_claimant limited to the two eldest, the rule Apply the UC minimum income floor to net earned income against a net threshold #1973 already used for the reg 62(3) couple threshold. Where the data flag more than two claimants (an adult child in the parents' benefit unit), the others' income does not count.
  • uc_earned_income: sums the assessed claimants' uc_individual_earned_income, then takes off the work allowance.
  • uc_unearned_income: sums person-level sources over the assessed claimants. Benefit-unit sources (uc_tariff_income) are added as they are. The capital yield that tariff income replaces (reg 72(3)) is the claimants' own.
  • is_benefit_cap_exempt_earnings: sums the assessed claimants' earnings. Nothing else in that formula changes.
  • uc_childcare_work_condition: tests the claimants' work, not every member aged 18 or over. This file is identical to Replace generic child and adult flags with each programme's legal definitions #1896's version.
  • uc_individual_earned_income: reads is_uc_assessed_claimant instead of computing the same thing inline. No change in behaviour.
  • add_for_members (policyengine_uk/utils/benefit_unit.py, exported from model_api): sums person-level variables over chosen members. The file and the import line are byte-identical to Replace generic child and adult flags with each programme's legal definitions #1896's, so the two PRs merge without conflict there.
  • The Universal Credit docs page says whose income counts.

Overlap with open PRs

Tests

YAML tests, expectations computed by hand from regs 22, 36, 80A and 82 (derivations in the comments):

  • is_uc_assessed_claimant.yaml: lone parent and child; couple and qualifying young person; an adult child flagged as a third claimant; three flagged claimants in any order.
  • income/uc_earned_income.yaml: the example above with the UC award; joint claimants earning £10,000 and £5,000 with an 18-year-old earning £8,000 (earned income 15,000 − 8,520 = 6,480; UC 12 × (£666.97 + £351.88) − 55% × 6,480 = £8,662.20); a third adult's earnings; a dependant's self-employed profits (no minimum income floor either).
  • income/uc_unearned_income.yaml: a dependant's interest, dividends, rent, pension and Carer's Allowance do not count while the parent's pension does; the savings-interest example with the UC award; with tariff income, a dependant's interest is neither added nor taken off.
  • dependants_earnings.yaml: a young person's £12,000 does not meet the benefit cap earnings exception (cap £22,020, reg 80A(2)(d)(ii)); the claimant's own earnings and joint claimants' combined earnings still do; an 18-year-old's job neither meets nor blocks the childcare work condition.

Eleven of the new cases fail on #1973's head; the rest check that claimants' own income still counts.

Mutation check. Undoing each of the five changes in a scratch copy makes the tests fail: results to follow in a comment.

Invariants

Property tests (test_uc_claimant_income_properties.py, Hypothesis) generate single claimants, couples and mixed-age couples with up to three dependants aged 0 to 19 (in and out of education), with rent, childcare costs and capital, in England, Wales and Scotland, for 2020, 2026 and 2027.

  1. A dependant's income never changes Universal Credit. Giving every non-claimant earnings, profits or losses, miscellaneous income, savings interest, dividends, property income or a private pension leaves UC, UC before the cap, earned income and unearned income exactly as they are when those members have no income.
  2. Differential against the regulation. Earned income equals the assessed claimants' own earned income less the work allowance, floored at zero. Unearned income equals the claimants' listed income plus tariff income, less the claimants' savings interest where tariff income replaces it. Both are written in the test from reg 22(1) and the parameter list.
  3. At most two assessed claimants, all of them flagged claimants, and every flagged claimant when two or fewer are flagged.
  4. Order does not matter. Entering each family's people in reverse leaves the assessed claimants and UC unchanged.

The same invariants hold on the whole Enhanced FRS, checked in the impact scripts for every year from 2025 to 2030:

  • Every benefit unit with no non-claimant income has the same UC, earned income and unearned income before and after.
  • No benefit unit's earned or unearned income rises.
  • On this branch UC is identical for all 61,223 benefit units whether or not under-16s have employment income (the file as built against a copy with those earnings set to zero): UC, UC before the cap, earned income, unearned income, the cap reduction and the childcare element all match exactly.

Impact (Enhanced FRS, real runs)

Base: #1973's head baff2d793. Branch: 15e790d87 (the runs recorded dea7fb09b, whose tree is identical). Neither has uncommitted changes. Both use a copy of the Enhanced FRS 2024-25 (enhanced_frs_2024_25.h5, sha256 e433e532…), one real Microsimulation per state. Benefit units in thousands, survey records in brackets.

Year UC change Units gaining Units losing UC caseload In FRS-origin households In SPI-synthetic households With under-16 earnings zeroed
2025 +£4.68bn 727k (1,026) 2.2k (2) +186k +£0.22bn +£4.46bn +£0.80bn
2026 +£4.97bn 721k (1,027) 2.2k (2) +184k +£0.22bn +£4.75bn +£0.81bn
2027 +£5.09bn 723k (1,029) 2.2k (2) +188k +£0.23bn +£4.86bn +£0.83bn
2028 +£5.19bn 725k (1,022) 2.2k (2) +189k +£0.24bn +£4.95bn +£0.85bn
2029 +£5.21bn 719k (1,011) 2.2k (2) +194k +£0.25bn +£4.96bn +£0.90bn
2030 +£5.25bn 717k (999) 2.2k (2) +194k +£0.25bn +£4.99bn +£0.91bn

2026 UC goes from £78.7bn to £83.7bn, and the caseload from 6.33m to 6.52m benefit units.

Where it comes from (2026). Each benefit unit whose UC changes is assigned to the first source of non-claimant income it has:

Source UC change Benefit units Records
Earnings of a non-claimant aged under 16 +£4.48bn 541k 911
Earnings of a non-claimant aged 16 to 19 +£0.35bn 81k 68
Unearned income of a non-claimant +£0.14bn 101k 50
Income of a third flagged claimant £0 0 0
Unexplained £0 0 0

Why under-16s have earnings. The Enhanced FRS is the FRS plus a synthetic copy whose incomes are imputed from HMRC's Survey of Personal Incomes. The imputation predicts income for every person in the copy from age, sex and region, children included (PolicyEngine/policyengine-uk-data#504). All 7,856 under-16 records in synthetic households have employment income; none of the 12,895 in FRS-origin households does. In 2026 that is £74bn of earnings on 3.7 million children. Before this PR those earnings cut their parents' UC.

The same real runs split by household origin (2026):

FRS-origin households SPI-synthetic households
UC change +£0.22bn +£4.75bn
Benefit units gaining 161k (82 records) 559k (945 records)
Mean gain £1,383 £8,487
Benefit units losing 0 2.2k (2 records)
Dependants' earnings in these households £0.7bn £82.1bn
UC before this PR £70.9bn £7.8bn

So in households with survey-reported incomes this PR is worth about £0.22bn a year, to about 161,000 families whose teenagers have a job or whose children have savings interest. That figure rests on 82 records, and the ten largest account for 53% of it.

Sensitivity. The last column of the first table repeats both runs on a copy of the data with under-16 employment_income set to zero and nothing else changed (sha256 b34ac1d7…). It is larger than the FRS-origin figure because synthetic 16- and 17-year-olds keep their imputed earnings and synthetic children keep imputed savings interest. In 2026: 553k units gain (773 records), 12.7k lose (6 records).

Benefit cap (2026). 187k benefit units (407 records) no longer meet the earnings exception through a dependant's earnings, and the cap takes £0.25bn more. The two losing records are capped families who were exempt only because of a child's earnings.

Other programmes (2026). Tax-Free Childcare falls £0.07bn, because families newly entitled to UC cannot claim it in the model. Scottish Child Payment rises £0.03bn and the targeted childcare entitlement £0.01bn. Nothing else moves. Household net income rises £4.93bn: 685k households are better off, and 38k are worse off through Tax-Free Childcare.

Poverty (2026). AHC poverty falls 0.30 points and child AHC poverty 0.83 points (BHC: 0.04 and 0.10). With under-16 earnings zeroed the falls are 0.25 and 0.71 points.

What this means for published numbers. The model bug and the data bug offset each other in UC. On the base model, setting under-16 earnings to zero raises 2026 UC from £78.7bn to £82.9bn; on this branch it is £83.7bn either way. Fixing the data alone would move UC by about as much as this PR does, and would also take £63bn out of household net income and raise measured child AHC poverty from 24.0% to 29.3% (details in policyengine-uk-data#504). The dataset's weights were calibrated with the old model, so UC totals will sit above their targets until the data are rebuilt on this version.

Known gaps (follow-ups, not in this PR)

  • Dependants' circumstances, not income. uc_carer_element, the LCWRA element and the limited-capability route to the work allowance read every member, so a dependant's caring or disability can add an element. Flagged as a separate task.
  • The benefit cap threshold and tax measure. is_benefit_cap_exempt_earnings still uses a fixed £10,152 and deducts all income tax. Fix benefit cap exemption defects (#1818) #1820 fixes both.
  • A child's capital. It is not the claimant's (s.5, reg 18; ADM H1077), but the model holds capital at household level and cannot tell whose it is.
  • Who the claimants are. is_uc_claimant treats an 18- or 19-year-old as a claimant unless a parent is flagged with is_parent, and with more than two flagged claimants the two eldest are taken. Replace generic child and adult flags with each programme's legal definitions #1896 replaces this with claimant and partner.
  • Tax-Free Childcare is switched off for every family with a UC award, where a real family would choose the better of the two.

Axiom parity

axiom: queued (rulespec-uk issue to follow)

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits September 30, 2026 23:21
uc_earned_income and uc_unearned_income summed every member of the
benefit unit, so a dependent child's or qualifying young person's wages,
profits, savings interest, dividends, rent or pension reduced the
parents' award. WRA 2012 s. 8(4) and UC Regs 2013 reg. 22(1) deduct the
income of the claimant, or the combined income of joint claimants.

- is_uc_assessed_claimant: the single claimant or the two members of the
  couple whose income counts (is_uc_claimant, limited to the two eldest,
  as the reg. 62(3) couple rule already did).
- uc_earned_income, uc_unearned_income: sum over the assessed claimants.
- is_benefit_cap_exempt_earnings: reg. 82(1)(a) tests the claimant's or
  the couple's earned income, so a dependant's job no longer lifts the cap.
- uc_childcare_work_condition: reg. 32(1) tests the claimant and the other
  member of the couple, not every member aged 18 or over.
- add_for_members: the helper and its import are byte-identical to
  #1896's.

Fixes #1976

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
YAML cases computed by hand from regs 22, 36, 80A and 82, and Hypothesis
properties: a dependant's income never changes UC; earned and unearned
income match the regulation's closed form; at most two assessed
claimants; member order does not matter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 3 commits September 30, 2026 23:48
…; stronger properties

- uc_childcare_work_condition and uc_mif_applies read is_uc_assessed_claimant,
  so a third flagged member's work neither meets nor blocks the condition.
- benefit_cap_reduction counts person-level benefits for the claimants only
  (WRA 2012 s. 96(1), reg. 80(1)).
- Property tests build capped and childcare families, give dependants
  contributory benefits, flag every member as a claimant, and check earned
  and unearned income against the reg. 22 and reg. 72 figures.

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

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

Copy link
Copy Markdown
Collaborator Author

Coordination with #1999 (fixes #1986), which this PR will meet once both are on main:

  • uc_earned_income no longer sums uc_individual_earned_income itself. It subtracts the work allowance from the new uc_earned_income_before_work_allowance, which the targeted childcare criterion and the local CTR helper also read. The claimant-only sum belongs there.
  • is_benefit_cap_exempt_earnings now compares the new benefit_cap_earned_income (a sum of uc_individual_earned_income_before_mif) with benefit_cap_earnings_threshold. The reg 82(1)(a) claimant restriction belongs in benefit_cap_earned_income.

A test merge of b696f8d01 into this branch conflicts in those files plus uc_individual_earned_income*.py, the UC docs notebook and #1949's property test.

🤖 Generated with Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Coordination with #2076, stacked on #2027.

#2076 rewrites benefit_cap_reduction to count only the welfare benefits "to which the single person or couple is entitled" (UC Regs 2013 reg 80(1); HB Regs 2006 reg 75A). That means:

  • the claimant's and partner's own contributory ESA and JSA, incapacity benefit and SDA;
  • claimant_or_partner_esa_income and claimant_or_partner_jsa_income;
  • the family's Child Benefit, CTC, Income Support, UC and HB.

Before, a non-dependent adult's own award reduced the family's UC: with UC of £20,000 before the cap, a non-dependant's £5,000 of ESA cut UC from £14,753 to £9,753. Whichever lands second: keep #2076's claimant-or-partner lists alongside this PR's changes.

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Coordination with #2084 (UC claim by a member of a couple as a single person, UC Regs 2013 reg 3(3)).

There, uc_is_ineligible_partner marks the member of a couple who cannot be a joint claimant, so the other member claims as a single person. is_uc_single_or_joint_claimant is the claimant in WRA 2012 s.40's sense ("a single claimant or each of joint claimants"): is_uc_claimant (two eldest) less that partner.

For this PR: is_uc_assessed_claimant should keep that partner. Their income counts "as if the couple were joint claimants" (reg 22(3)), and their capital counts too (reg 18(2)). It does keep them today, because is_uc_claimant includes them, so nothing needs to change here. Whichever PR lands second should check that the reg 3(3) YAML cases in claims_as_single_person.yaml still pass.

Two more points from that PR's review:

  • Its docstring ("the single claimant ... or one of the two members of the couple") should say the reg 3(3) partner is included.
  • If this PR rewrites uc_childcare_work_condition, it should keep that PR's reading of reg 32(1): the s.40 claimant (is_uc_single_or_joint_claimant) must be in work, and so must the other member, "whether claiming jointly or as a single person".

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