Problem
uc_earned_income (policyengine_uk/variables/gov/dwp/universal_credit/income/uc_earned_income.py) subtracts benunit_tax from gross earnings:
disregards = add(benunit, period, ["uc_work_allowance", "benunit_tax", "pension_contributions"])
return max_(0, personal_gross_earned_income - disregards)
benunit_tax sums tax (income tax + NI) over every member of the benefit unit, on all their income. So income tax on State Pension, private pensions, property, savings or dividend income is taken off the unit's earnings. It is also taken off earnings of a member who did not pay it. Tax paid by a pensioner on their pension reduces their partner's earned income, so the 55% taper bites less and UC is overstated.
Law (legislation.gov.uk, read 2026-09-30)
UC Regs 2013 reg 55(5) (https://www.legislation.gov.uk/uksi/2013/376/regulation/55):
In calculating the amount of a person's employed earnings in respect of an assessment period, there are to be deducted from the amount of general earnings or benefits specified in paragraphs (2) to (4)— (a) any relievable pension contributions made by the person in that period; (b) any amounts paid by the person in that period in respect of the employment by way of income tax or primary Class 1 contributions under section 6(1) of the Contributions and Benefits Act; and (c) any sums withheld as donations to an approved scheme under Part 12 of ITEPA (payroll giving) ...
UC Regs 2013 reg 57(2), step 3 (https://www.legislation.gov.uk/uksi/2013/376/regulation/57):
Deduct from the amount resulting from step 1 or (if applicable) step 2 any payment made by the person to HMRC in the assessment period by way of national insurance contributions or income tax in respect of any trade, profession or vocation carried on by the person.
The deductions are per person and limited to tax "in respect of the employment" or trade. Tax on unearned income is not deductible, and one person's tax cannot come off another person's earnings. The unearned income itself counts gross: reg 66(1) with reg 22(1)(a) deducts "all" of it.
Counterexample (2026, current main, verified)
|
|
| Household |
Couple renting from the council, rent £20,000 |
| Pensioner, aged 70 |
State Pension £16,000, so income tax (16,000 − 12,570) × 20% = £686 |
| Partner, aged 45 |
Earnings £13,000, so income tax £86 and NI £34.40 (no marriage allowance, since the partner is above the personal allowance) |
By law (with State Pension counted as unearned income, see the linked PR):
- earned income = 13,000 − 86 − 34.40 = 12,879.60;
- maximum amount = 8,003.64 + 20,000 = 28,003.64;
- UC = 28,003.64 − (0.55 × 12,879.60 + 16,000) = £4,919.86.
The model deducts benunit_tax = 806.40:
uc_earned_income = 12,193.60;
- UC = £5,297.16.
That is £377.30 too much, which is 0.55 × the pensioner's £686.
The same happens for a single claimant with earnings and taxable property, savings, dividend or private pension income. Their tax on that income comes off their earnings.
It also breaks a basic invariant. On main, which does not yet count State Pension as UC unearned income, UC rises with State Pension for a mixed-age couple where the pensioner pays tax and the partner has earnings above the work allowance.
Fix sketch
- Deduct, per person, only the income tax and NI attributable to that person's employment and self-employment.
- NI is all attributable: Class 1 employee to employment; Class 2/4 to the trade.
- Income tax needs an attribution rule, for example tax on all income minus tax computed without earnings, following the ITA 2007 s.16 ordering (non-savings income before savings and dividends).
- Apply the work allowance after that, then the taper.
The fix needs:
- a real Enhanced FRS impact run;
- YAML tests hand-computed from reg 55(5) / 57;
- property tests (the xfail in
test_uc_state_pension_properties.py from the State Pension PR flips to pass);
- the Axiom mirror (rulespec-uk reg 55/57 modules) per the parity rule.
Found by the pound-for-pound property test while building the State Pension fix (branch uc-state-pension-unearned-income).
Problem
uc_earned_income(policyengine_uk/variables/gov/dwp/universal_credit/income/uc_earned_income.py) subtractsbenunit_taxfrom gross earnings:benunit_taxsumstax(income tax + NI) over every member of the benefit unit, on all their income. So income tax on State Pension, private pensions, property, savings or dividend income is taken off the unit's earnings. It is also taken off earnings of a member who did not pay it. Tax paid by a pensioner on their pension reduces their partner's earned income, so the 55% taper bites less and UC is overstated.Law (legislation.gov.uk, read 2026-09-30)
UC Regs 2013 reg 55(5) (https://www.legislation.gov.uk/uksi/2013/376/regulation/55):
UC Regs 2013 reg 57(2), step 3 (https://www.legislation.gov.uk/uksi/2013/376/regulation/57):
The deductions are per person and limited to tax "in respect of the employment" or trade. Tax on unearned income is not deductible, and one person's tax cannot come off another person's earnings. The unearned income itself counts gross: reg 66(1) with reg 22(1)(a) deducts "all" of it.
Counterexample (2026, current main, verified)
By law (with State Pension counted as unearned income, see the linked PR):
The model deducts
benunit_tax= 806.40:uc_earned_income= 12,193.60;That is £377.30 too much, which is 0.55 × the pensioner's £686.
The same happens for a single claimant with earnings and taxable property, savings, dividend or private pension income. Their tax on that income comes off their earnings.
It also breaks a basic invariant. On main, which does not yet count State Pension as UC unearned income, UC rises with State Pension for a mixed-age couple where the pensioner pays tax and the partner has earnings above the work allowance.
Fix sketch
The fix needs:
test_uc_state_pension_properties.pyfrom the State Pension PR flips to pass);Found by the pound-for-pound property test while building the State Pension fix (branch
uc-state-pension-unearned-income).