Skip to content

Apply the UC minimum income floor to net earned income against a net threshold - #1973

Open
MaxGhenis wants to merge 6 commits into
uc-earned-income-own-taxfrom
uc-mif-net-floor
Open

MaxGhenis wants to merge 6 commits into
uc-earned-income-own-taxfrom
uc-mif-net-floor

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

The Universal Credit minimum income floor (MIF) compared the wrong things. uc_mif_capped_earned_income took max(gross earnings, gross floor), where the gross floor was the minimum wage × 35 hours × 52. uc_individual_earned_income then subtracted the tax and NI on the claimant's actual profits. So a self-employed claimant below the floor was treated as having the gross threshold less tax they never paid on it. For most of them (no tax or NI on small profits) that meant the whole gross threshold.

UC Regs 2013 reg 62 says something different:

  • it compares the claimant's earned income, which is already net of their own tax, NI and pension contributions (reg 55(5), reg 57(2));
  • it compares that with the reg 90(2) threshold "converted to net ... amounts by ... deducting such amount for income tax and national insurance contributions as the Secretary of State considers appropriate" (reg 62(4));
  • a claimant below it is "treated as having earned income equal to that threshold", the net amount (reg 62(2));
  • a member of a couple is lifted only while the couple's combined earned income is below the couple threshold. Any excess over that threshold comes off the floor (reg 62(3)). The model had no couple rule.

A 2026 example: a single claimant aged 30 with £5,000 of profits and council rent of £9,600.

  • Before: treated as earning £23,132.20, giving UC of £1,976.09.
  • After: treated as earning the net floor of £20,386.03 (£1,698.84 a month), giving UC of £3,486.48, which is £1,510.39 a year more.

On the Enhanced FRS this raises 2026 UC by £0.281bn. About 196,000 benefit units gain (148 records, a mean of £1,499 a year). About 2,600 lose (6 records), all with pension contributions. The UC caseload rises by about 5,500.

Stacked on #1949 (per-person tax on earnings, which fixes #1942), which is stacked on #1943.

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

UC Regs 2013 reg 62 (https://www.legislation.gov.uk/uksi/2013/376/regulation/62):

(2) Where this regulation applies to a single claimant, for any assessment period in respect of which the claimant's earned income is less than their individual threshold, the claimant is to be treated as having earned income equal to that threshold.

(3) Where this regulation applies to a claimant who is a member of a couple, for any assessment period in respect of which— (a) the claimant's earned income is less than their individual threshold; and (b) the couple's combined earned income is less than the couple threshold, the claimant is to be treated as having earned income equal to their individual threshold minus any amount by which that amount of earned income combined with their partner's earned income would exceed the couple threshold.

(4) In this regulation, references to the claimant's individual threshold and to the couple threshold are to the amounts set out in regulation 90(2) and 90(3) respectively, converted to net ... amounts by— (a) . . . (b) deducting such amount for income tax and national insurance contributions as the Secretary of State considers appropriate.

Reg 90(2) (https://www.legislation.gov.uk/uksi/2013/376/regulation/90):

A claimant's individual threshold is the amount that a person of the same age as the claimant would be paid at the hourly rate applicable under regulation 4 or regulation 4A(1)(a) to (c) of the National Minimum Wage Regulations for— ... (b) the expected number of hours per week in the case of a claimant who would otherwise fall within section 22 of the Act ..., converted to a monthly amount by multiplying by 52 and dividing by 12.

Reg 90(3)(a) makes the couple threshold for joint claimants "the sum of their individual thresholds". The rate is the one for the person's age: reg 4A(1)(d), the apprenticeship rate, is not in the list.

The Secretary of State's deduction (the modelling choice)

Reg 62(4)(b) leaves the tax and NI deduction to the Secretary of State. The model deducts what a self-employed person would pay if the threshold were their only income:

  • income tax on the threshold less the standard personal allowance, at the person's own rest-of-UK or Scottish rates;
  • Class 2 and Class 4 NI on profits equal to the threshold. Class 2 is nil from April 2024, so in 2026 this is Class 4 at 6% above £12,570. Neither is due from anyone over State Pension age.

This is DWP's own method, on the evidence:

  • DWP's guidance "Applying the Minimum Income Floor", version 9 (3 April 2017, deposited in Parliament as DEP2017-0556), step 4: "Taking off the Income Tax and Class 2 and Class 4 NI contributions payable on actual earnings at that level, to get an assumed net monthly income - this is the claimant's MIF." Later versions say "appropriate NI contributions" (v12, 2018) and "Notional tax and National Insurance payable on actual earnings" (v16 to v23, 2021 to 2025). None names Class 1.

  • Figures DWP issued or applied match this basis. Each row below is the minimum wage × 35 × 52 / 12, less income tax and NI, computed monthly at that year's statutory rates with no rounding of the threshold. The last two columns show the alternatives.

    Source Year Floor Self-employed NI Class 1 Whole-pound threshold
    Griffiths and Wood, Going it alone, University of Bath IPR, July 2025, note 3: "if the gross individual monthly earnings threshold is £1851.85, the net MIF would be £1,642.72 (information supplied by the DWP)" 2025-26 £1,642.72 £1,642.72 £1,626.63 £1,642.09
    Claimant, MoneySavingExpert, 25 Nov 2019: "The minimum income floor was set at £1144.15 a month" 2019-20 £1,144.15 £1,144.15 £1,141.34 £1,144.02
    ADM H4079 (Kyle), illustrative, in whole pounds: £1,016 less £70 2015-16 £946 £946.46 £948.30

    A May 2024 thread agrees. DWP told the claimant "£1556", which fits self-employed NI (£1,556.30) and not Class 1 (£1,542.59). The pence there came from another forum user, so it is a consistency check only.

  • The 2013 original text of reg 62 made the deduction "an amount that the Secretary of State considers appropriate to take account of any income tax or national insurance contributions for which the person would be liable in respect of the assessment period if they had earned income of that amount" (https://www.legislation.gov.uk/uksi/2013/376/regulation/62/2013-04-29). It was discretionary then too, but tied to tax on the threshold itself, not on actual profits.

The other reading is employee NI. DWP's self-employment quick guide describes the floor as "the amount of money an employed person in a similar situation to you would earn on the National Living Wage or National Minimum Wage, after tax and National Insurance". LITRG's illustrative example ("say £225.07" for 2025-26) uses Class 1. The parameter gov.dwp.universal_credit.means_test.minimum_income_floor.self_employed_national_insurance (default true) switches to primary Class 1 when set to false. A real run with it set to false raises 2026 UC by £0.304bn, against £0.281bn by default.

No whole-pound rounding. Reg 6(1A)(a) disregards "a fraction of a pound" in amounts calculated "for the purposes of ... regulation 90", the conditionality earnings threshold. The floor is calculated for reg 62. The two pence-level DWP figures above come from the unrounded thresholds (£1,851.85 and £1,245.18), and rounding down first would give £1,642.09 and £1,144.02. The ADM's illustrative example rounds to whole pounds (£1,016 less £70). Reg 62(4)'s reference to "the amounts set out in regulation 90(2)" could be read either way; the model follows DWP's figures.

Change

  • uc_minimum_income_floor_gross (new): the minimum wage for the person's age (never the apprenticeship rate) × expected hours × 52.
  • uc_minimum_income_floor_income_tax, uc_minimum_income_floor_national_insurance (new): the notional deductions above.
  • uc_minimum_income_floor: now the net floor, gross less both deductions.
  • uc_individual_earned_income_before_mif (new): actual earned income. That is earnings less the person's own pension contributions and their own income tax and NI on those earnings. A trading loss counts as nil self-employed earnings; reg 57(2) does not set it against employed earnings. Deduct only each person's own tax and NI on earnings from UC earned income #1949 put this in uc_individual_earned_income.
  • uc_individual_earned_income: applies reg 62(2) and (3).
    • The couple threshold is the sum of the couple's net floors. The partner's earned income is their actual earned income.
    • When both partners are under their floors, each is treated as having their own floor, whichever is applied first.
    • For a single claimant, reg 62(3) reduces to reg 62(2).
    • A claim has at most two claimants. Where the data flag more (an adult child in the parents' benefit unit), the two eldest are the couple.
  • uc_mif_applies: now claimants only (reg 62 applies to "a claimant"), and a trading loss counts. Gainful self-employment is a trade carried on "in expectation of profit" (reg 64), and ADM H4503 applies the floor in a loss-making period.
  • uc_mif_capped_earned_income: removed. Nothing else in this repo, policyengine-uk-data, policyengine.py or policyengine-api uses it.
  • Deduct only each person's own tax and NI on earnings from UC earned income #1949's invariant 4 (test_fix_only_removes_deductions) compared against the pre-UC earned income deducts the whole benefit unit's tax, including tax on pensions and other unearned income #1942 formula, which used uc_mif_capped_earned_income. It now runs with everyone in a start-up period, because the net floor moves earned income in either direction.
  • The docs page on Universal Credit describes the floor.

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

  • Reg 62(1)(b). The floor applies only to a claimant who "would, apart from this regulation or regulation 90, fall within section 22" (all work-related requirements). The model still applies it to everyone with self-employment income outside a start-up period. That includes claimants with limited capability for work-related activity, carers, responsible carers of a child under 3, and pregnant claimants. In the 2026 run, of the 197,000 people in UC benefit units whom the floor lifts: about 43,800 are in a benefit unit whose youngest child is under 3 (counting both partners), 5,800 have limited capability for work-related activity, and 5,300 are carers.
  • Reg 88(2) expected hours. The model uses 35 hours for everyone. DWP says self-employed parents of children aged 3 to 12 "typically have their Minimum Income Floor set using a maximum of 30 hours per week" (written answer 129349, 28 April 2026).
  • Reg 90(2)(a) and (3)(b). A partner in the work-focused-interview or work-preparation group has a 16-hour threshold. A claimant whose partner is not a joint claimant uses a 35-hour partner amount. Neither is modelled.
  • Data. The Enhanced FRS never sets uc_is_in_startup_period and has no gainful self-employment test (reg 64). So every self-employed claimant in a UC benefit unit is treated as subject to the floor: 294,000 people in 2026.
  • Dependants' earnings. uc_earned_income sums every member of the benefit unit, so a dependent qualifying young person's earnings count towards the claimants' UC. That predates this PR.
  • Break-even. With no self-employment status input, the model reads zero profit as no self-employment. So a loss gets the floor (reg 57(2), ADM H4503) and exactly £0 does not. For example, in 2026 a single claimant with council rent of £9,600 gets UC of £3,486.48 at −£1 and £14,698.80 at £0. In law a break-even trader in gainful self-employment keeps the floor. The Enhanced FRS has no negative profits, so the impact is unaffected.
  • Annual assessment. Reg 62 applies in each monthly assessment period. The model works on annual amounts, so a claimant whose profits fluctuate is floored on their annual average, not in each low month. This holds across the whole UC model.
  • Parameter gaps. The model has no April 2023 minimum wage rates and no 2016-17 personal allowance, so the 2023 and 2016 floors use the previous year's values. This predates this PR.

Tests

YAML tests are hand-computed from the law at the rates the model holds, in income_floor/uc_minimum_income_floor.yaml, income_floor/uc_mif_earned_income.yaml and income_floor/uc_MIF_applies.yaml. They cover:

  • the gross threshold, including an apprentice (age rate, not the apprenticeship rate);
  • the net floor for England, Scotland, age 19 (18 to 20 rate), over State Pension age, and 2020 (Class 2 and Class 4);
  • a single claimant below the floor, with the UC award, and UC staying flat as profits rise under the floor. At £20,000 of profits it is £3,486.48, the same as at £5,000; before this PR it was £2,928.58 against £1,976.09;
  • the floor applying above the gross threshold because pension contributions take net earnings under it;
  • the floor not applying when net earnings are above it, even below the gross threshold;
  • start-up period, no self-employment, dependant, a trading loss, a trading loss alongside a job, and break-even;
  • ADM H4080 examples 1 and 2 (the husband is treated as having £700 a month), both partners under their floors, the couple at the threshold;
  • a couple built from gross incomes, where the partner's excess over their floor reduces the floor, with the UC award;
  • a third adult flagged as a claimant, who does not join the couple threshold.

Property tests (test_uc_minimum_income_floor_properties.py, Hypothesis) run over generated populations of single people, couples, mixed-age couples and couples with an adult child in their benefit unit, in England, Wales and Scotland, in 2020, 2026 and 2027. Each invariant below holds for every input.

Invariants

  1. The floor never lowers earned income. It changes it only for claimants it applies to.
  2. The floor holds.
    • A single claimant it applies to has at least the net floor.
    • A member of a couple it applies to leaves the couple with at least min(couple threshold, their own floor + partner's earned income).
    • No one is lifted above their own floor.
  3. The couple threshold caps the top-up. Whenever the floor lifts anyone, the couple's combined earned income is at most the couple threshold.
  4. Differential against a closed form. The model's reg 62(2)/(3) conditions equal max(E, T − max(0, T + E_partner − T_couple)), written in the test from the regulation. The two forms agree because the couple threshold is the sum of the individual thresholds.
  5. Differential against the tax engine, under both NI bases.
    • The notional income tax equals the income_tax of the same person paid the gross threshold as their only income.
    • The notional NI equals their ni_class_2 + ni_class_4 with profits of that amount (default basis), or their ni_class_1_employee on pay of that amount (parameter switched).
    • So the net floor is never above the gross threshold.
  6. Monotone. More earnings for any adult never lower the benefit unit's uc_earned_income and never raise UC before the benefit cap. The property draws profits from −£10,000 to £40,000. The one intended exception is a loss raised to exactly £0, because the model reads zero profit as no self-employment (see known gaps). Before this PR, UC rose with the profits of a self-employed claimant under the floor: profits of £20,000 gave £715 more UC than £15,000 in 2026, because more tax on actual profits came off the gross threshold.

Marriage Allowance is off in the property tests. A transfer can lower one partner's earned income when the other's earnings rise, which is lawful and not part of this change.

Impact (Enhanced FRS, real runs)

Base: #1949's head c98c53c58 (which includes main at 2.104.2). Branch: ae8f59fd1. Neither run had uncommitted changes. Both use a copy of the Enhanced FRS 2024-25 (enhanced_frs_2024_25.h5, sha256 e433e532…), one real Microsimulation per state. The Class 1 column is a separate real run with the parameter set to false. Benefit units are counted in thousands, with records in brackets. Poverty is in percentage points.

Year UC change UC change, Class 1 basis Units gaining Units losing UC caseload AHC poverty AHC child poverty
2025 +£0.260bn +£0.283bn 207k (150) 2.6k (6) +3.7k -0.032 -0.069
2026 +£0.281bn +£0.304bn 196k (148) 2.6k (6) +5.5k -0.020 -0.042
2027 +£0.276bn +£0.302bn 197k (150) 2.6k (6) +5.2k -0.024 -0.053
2028 +£0.272bn +£0.297bn 190k (143) 2.7k (6) +5.7k -0.024 -0.054
2029 +£0.200bn +£0.224bn 173k (136) 23.4k (23) +4.1k -0.003 -0.006
2030 +£0.191bn +£0.214bn 174k (136) 21.6k (21) +9.7k -0.050 -0.113

How 2026 decomposes, for people in UC benefit units:

  • Floored before and after: 197k people. They are now treated as having the net floor, not the gross threshold less the tax on their actual profits. Their earned income falls by £0.487bn.
  • Floored before, not after: 6.1k people. Their earnings are below the gross threshold but above the net floor, so their actual earnings now count. Earned income falls by £0.037bn.
  • Reg 62(3): 9.2k people. Their partner's earnings above the partner's own floor reduce their floor. This is included in the lines above.
  • Losers (6 records in 2026, 21-23 records a year from 2029). In every year, every losing benefit unit has a member who makes pension contributions and whose earned income rose. Reg 55(5) and reg 57(2) take relievable pension contributions off earned income, so their net earnings fall below the net floor. The old gross comparison missed them. The count rises in 2029 because the model then caps salary-sacrifice pension contributions at £2,000 and treats the excess as ordinary contributions (total contributions go from £55.8bn in 2028 to £72.1bn in 2029), which come off UC earned income.
  • Dependants. The floor no longer applies to 38 records of dependants with self-employment income. None is in a UC benefit unit.

Every data invariant holds in every year: the floor never lowers anyone's earned income, leaves everyone it doesn't apply to unchanged, and never lifts anyone above their own floor.

An earlier run against #1949's previous head d0fc22f39 (before main was merged in) gave +£0.281bn for 2026; its files are in the review folder's impact/run1-base-d0fc22f39.

Axiom parity

axiom: uk:regulations/uksi/2013/376/62 encoded-correct (rulespec-uk uk/regulations/uksi/2013/376/62.test.yaml: single_claimant_below_individual_threshold_is_deemed_to_threshold, couple_claimant_uses_surplus_allocation_with_lowest_combined_income); composed UC pipeline couple floor TheAxiomFoundation/rulespec-uk#396 queued

The reg 62 module passes all 13 law-derived cases in the issue, including this PR's net floor and couple cases (its deduction is a leaf). The composed UC pipeline applies one floor to the couple's combined earnings, so it fails 4 of 9 couple cases. Example: a self-employed claimant on £400 a month with a partner on £1,000 is deemed £927.68 a month too high. rulespec-uk#396 has the dispatch-ready re-encode (review_finding, companion tests from the same figures as these YAML tests). Signed encodes are OpenAI-billed, so dispatch is Max's call.

🤖 Generated with Claude Code

MaxGhenis and others added 3 commits September 30, 2026 16:39
…threshold

UC Regs 2013 reg 62 compares a self-employed claimant's earned income,
after their own tax, NI and pension contributions, with the reg 90(2)
individual threshold "converted to net ... amounts by ... deducting such
amount for income tax and national insurance contributions as the
Secretary of State considers appropriate" (reg 62(4)), and treats them as
having that net amount. The model took max(gross earnings, gross floor)
and then subtracted the tax and NI on the claimant's actual profits, so a
claimant under the floor was treated as having the gross threshold less
the tax on their actual profits.

- uc_minimum_income_floor_gross: minimum wage x expected hours x 52 / 12,
  rounded down to whole pounds (reg 6(1A)(a)), times 12.
- uc_minimum_income_floor_income_tax / _national_insurance: the notional
  income tax and primary Class 1 NI on the threshold as the person's only
  pay (the modelling choice for the Secretary of State's discretion; a
  parameter switches to Class 2 and Class 4).
- uc_minimum_income_floor: the net floor.
- uc_individual_earned_income_before_mif: actual earned income after the
  reg 55(5) / 57(2) deductions.
- uc_individual_earned_income: reg 62(2) for single claimants and reg
  62(3) for couples (the couple threshold is the sum of the claimants'
  floors).
- uc_mif_applies: claimants only.
- uc_mif_capped_earned_income is removed.

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

- The notional NI now defaults to Class 2 and Class 4 on profits equal to
  the threshold. DWP's 2017 guidance on applying the floor says so, and the
  floors DWP has given claimants match it to the penny (1,144.15 a month in
  2019-20, 1,556.30 in 2024-25); the parameter switches to primary Class 1.
- The threshold keeps its pence: reg 6(1A)(a) rounds amounts calculated for
  reg 90 itself, and DWP's floors are unrounded.
- The threshold uses the minimum wage for the person's age, never the
  apprenticeship rate (reg 90(2) names NMW Regs reg 4 and 4A(1)(a)-(c)).
- A trading loss counts as self-employment for the floor (reg 64, ADM
  H4503) and is not set against employed earnings (reg 57(2)).
- The couple is at most the two eldest claimants, so an adult child
  flagged as a claimant does not join the couple threshold.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The no-rounding evidence is the net floor of 1,642.72 a month that DWP
  supplied for 2025-26 on a threshold of 1,851.85 (University of Bath IPR,
  "Going it alone", 2025), and the floor set on a claimant's award at
  1,144.15 a month in 2019-20. The 1,556.30 figure for 2024-25 came from a
  forum user, not DWP, so it no longer appears as DWP's.
- Property tests now draw trading losses. Monotonicity excludes the one
  intended exception, a loss raised to exactly zero, which the model reads
  as no self-employment; a YAML test pins that edge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 1, 2026 10:35
The generated populations now include a couple with an adult child the
model also flags as a claimant, and the test reference takes the couple as
the two eldest claimants, as the model does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…c-mif-net-floor

# Conflicts:
#	docs/book/programs/gov/dwp/universal-credit.ipynb
…c-mif-net-floor

# Conflicts:
#	docs/book/programs/gov/dwp/universal-credit.ipynb
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Formula changes in #1949, which this PR stacks on. Head b8555a2: three added commits on c98c53c, no history rewrite.

  1. uc_income_tax_on_earnings (f333e17). The final min_(tax, income_tax) cap is now max_(0, tax - reductions), with reductions = add(person, period, gov.hmrc.income_tax.income_tax_subtractions). Tax reductions (married couple's allowance, other tax credits) now come off the tax on earnings first. With the old cap, the pension annual allowance charge and HICBC leaked into the deduction whenever MCA made the cap bind.
  2. uc_income_tax_on_earnings (b8555a2). The incomes outside earned_taxable_income are read from gov.hmrc.income_tax.earned_taxable_income_exclusions, intersected with adjusted_net_income_components, not hard-coded. A reform exempting pensions no longer subtracts them twice.
  3. uc_individual_earned_income (f333e17). pension_contributions are deducted only below gov.hmrc.pensions.pension_contributions_relief_age_limit (75), per Finance Act 2004 s.188(3)(a).

uc_national_insurance_on_earnings is unchanged. On #1949's tree: YAML policy suite 1,394 passed; both property files 9 passed, 1 xfailed.

Change 3 is in uc_individual_earned_income, which this PR's floor wraps, so expect a conflict there when merging #1949's head. The post-merge launchd job (com.maxghenis.pe-uk-1973-after-1949) should not merge this PR until that conflict is resolved and the floor tests are re-run.

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Coordination with #1999 (fixes #1986: benefit cap earnings exception, targeted childcare, local CTR).

#1999 needs earned income without the floor for reg 82(4), so it adds this PR's uc_individual_earned_income_before_mif, copied from ae8f59fd1, with one change. Since #1949's f333e17, uc_individual_earned_income deducts only relievable pension contributions: none after 75 (Finance Act 2004 s.188(3)(a)). #1999's copy does the same:

        # Contributions paid after the person reaches 75 are not relievable
        # (Finance Act 2004 s. 188(3)(a)), so reg. 55(5)(a) does not deduct
        # them.
        age_limit = parameters(
            period
        ).gov.hmrc.pensions.pension_contributions_relief_age_limit
        relievable_pension_contributions = person("pension_contributions", period) * (
            person("age", period) < age_limit
        )
        tax_and_national_insurance = add(
            person,
            period,
            ["uc_income_tax_on_earnings", "uc_national_insurance_on_earnings"],
        )
        return max_(
            0, earnings - relievable_pension_contributions - tax_and_national_insurance
        )

It also adds the FA 2004 s.188 reference. This PR has not merged #1949's b8555a2d0 yet. When it does, uc_individual_earned_income.py and test_uc_earnings_deductions_properties.py conflict with #1949, not with #1999, and the relievable rule has to move into _before_mif anyway. If the file then matches #1999's byte for byte (blob 73a93702a at b696f8d01), the two PRs merge in either order. Otherwise whichever merges second takes one version.

🤖 Generated with Claude Code

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