Repository navigation
UC gross earnings: trade losses offset employment, expenses and statutory pay mishandled, payroll giving missing #1997
Description
Problem
uc_mif_capped_earned_income builds a person's gross UC earnings as employment + self-employment + miscellaneous income. That breaks UC Regs 2013 regs 55 and 57 in four ways. All four predate #1949 (the #1942 fix) and were found in its review. #1949 makes the deductions per person but does not change the gross figure.
Runs on #1949's head b8555a2, 2026: a single person aged 40 earning £20,000, with council rent of £20,000. Base UC before the cap is £15,243.02.
| Case | Gross UC earnings | Tax deducted | NI deducted | UC before cap | What the law gives |
|---|---|---|---|---|---|
| + self-employment loss of £5,000 (start-up period) | £15,000 | £1,486 | £594.40 | £17,993.02 | £15,243.02: the loss is floored at nil and cannot reduce employed earnings |
| + employment expenses of £5,000 | £20,000 | £486 | £594.40 | £14,693.02 | gross £15,000, so earned income £13,919.60 and £2,750 more UC |
| + statutory sick pay of £10,000 | £20,000 | £3,486 | £1,394.40 | £16,783.02 | gross £30,000, so earned income £25,119.60 and UC £5,500 lower |
Law (legislation.gov.uk, read 2026-09-30)
UC Regs 2013 reg 55 (https://www.legislation.gov.uk/uksi/2013/376/regulation/55):
(3) In the calculation of employed earnings the following are to be disregarded— (a) expenses that are allowed to be deducted under Chapter 2 of Part 5 of ITEPA; ...
(4) The following benefits are to be treated as employed earnings— (a) statutory sick pay; (b) statutory maternity pay; (c) ... statutory paternity pay; ... (e) statutory adoption pay; ... (f) statutory shared parental pay; ... (g) statutory parental bereavement pay; and (h) statutory neonatal care pay.
(5) ... there are to be deducted ... (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):
If the amount resulting from steps 1 to 3 is nil or a negative amount, the amount of the person's self-employed earnings in respect of the assessment period is nil (and ignore the following steps).
A loss is carried forward only against the same person's later self-employed earnings (reg 57A).
The four defects
- Trade losses offset employment. Negative
self_employment_incomeis added to employment income before anything is floored. Self-employed earnings should be computed separately, floored at nil after the reg 57 steps, then added to employed earnings. - Employment expenses are not disregarded.
employment_expenses(employment_deductions) reduce taxable employment income, so they reduce the tax deducted, but not gross UC earnings. - Statutory pay is not in UC earnings. In the SSP case, gross UC earnings stay at £20,000 while the tax and NI deducted are on £30,000. So SSP lowers UC earnings instead of raising them. The same applies to the other reg 55(4) payments the model has.
- Payroll giving is not modelled. The repository has no payroll giving variable, so the reg 55(5)(c) deduction is missing.
Fix sketch
- Separate employed earnings (reg 55: general earnings less reg 55(3) disregards, plus reg 55(4) statutory payments) from self-employed earnings (reg 57 steps, nil floor).
- Floor self-employed earnings at nil on their own, then sum the two.
- Keep Deduct only each person's own tax and NI on earnings from UC earned income #1949's per-person deductions on top.
- Add a payroll giving input, or record its omission in the variable's documentation.
- Coordinate with Apply the UC minimum income floor to net earned income against a net threshold #1973, which wraps the per-person figure in the minimum income floor and removes
uc_mif_capped_earned_income. - Each fix needs YAML tests from the law, property tests (for example: a trade loss never lowers UC earnings; statutory pay never lowers UC earnings), a real Enhanced FRS run, and the Axiom mirror (Encode UC Regs 2013 reg 55 and 57 earnings deductions per person (PE parity: policyengine-uk#1942) TheAxiomFoundation/rulespec-uk#387 covers regs 55 and 57).
Activity
MaxGhenis commentedon Oct 12, 2026
Status of the four defects on main (3f174d0), 2026-10-12:
uc_individual_earned_income_before_mifnow floors self-employment income at nil before adding it to employed earnings (self_employed = max_(0, person("self_employment_income", period)), with the reg. 57(2) comment).employment_income, not net ofemployment_deductions.uc_individual_earned_income_before_mif, with YAML cases and Hypothesis properties (UC never rises with a claimant's statutory pay; sick and maternity pay count exactly as wages). Use each rule's own Universal Credit earned income in the benefit cap, targeted childcare and local CTR #1999'sbenefit_cap_earned_incomereads the same variable, so the benefit cap earnings exception picks this up when both land.