Skip to content

Apply the income-related ESA and income-based JSA remunerative work conditions - #2031

Open
MaxGhenis wants to merge 13 commits into
is-remunerative-work-jsa-conditionsfrom
esa-jsa-remunerative-work
Open

MaxGhenis wants to merge 13 commits into
is-remunerative-work-jsa-conditionsfrom
esa-jsa-remunerative-work

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 2, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2043

Stacked on #2025 (base is-remunerative-work-jsa-conditions, which is stacked on #2013, #2001 and #1896). It needs is_claimant_or_partner (#1896) and the Income Support gate's readers of the screened awards (#2013, #2025). Retarget to main after #2025 merges.

What the law says

Income-related ESA. Welfare Reform Act 2007 Sch 1 para 6(1): the claimant "(e) is not engaged in remunerative work; (f) is not a member of a couple the other member of which is engaged in remunerative work".

  • The claimant (reg 41(1)). ESA Regs 2008 reg 41(1) defines the claimant's remunerative work as "any work which a claimant does for which payment is made or which is done in expectation of payment, other than work listed in paragraph (2) of regulation 40". Reg 40(2)(f) includes the exempt work in reg 45:

    • "(2) Work for which the earnings in any week do not exceed £20.00";
    • "(4) Work which is done for less than 16 hours a week, for which earnings in any week do not exceed 16 x National Minimum Wage", rounded up to the next 50p (reg 45(9A)).

    So the claimant's test is not an hours threshold. Earnings of £20 a week or less never bar the award. Above £20, work of 16 hours or more bars it, and work under 16 hours bars it only above the higher limit.

  • The partner (reg 42(1)). Paid work "for not less than 24 hours a week". Under reg 43(2)(c), a partner who would satisfy IS Regs Sch 1B para 4 (a carer) "is not to be treated as engaged in remunerative work".

Income-based JSA. Jobseekers Act 1995 s.1(2)(e): the claimant "is not engaged in remunerative work". S.3(1)(e): the claimant "is not a member of a couple the other member of which is engaged in remunerative work". JSA Regs 1996 reg 51(1) sets 16 hours "in the case of a claimant" and 24 "in the case of any partner of the claimant".

  • Joint claims. A couple without children claim jointly, and each member is then a claimant held to 16 hours (s.1(2B)(b), s.35(1)). But reg 3E(1) lets a member claim alone, under s.3, where the other "is engaged … in remunerative work for 16 hours or more per week but less than 24 hours per week" (reg 3E(2)(g), in force since joint claims began on 19 March 2001). So for every couple, an award ends only when the other member works 24 hours or more.
  • Carers. Reg 53 has no exception for a carer doing unrelated paid work. Its work-specific exceptions (placement care and the others it lists) are not modelled.

What changes

esa_income_eligible and jsa_income_eligible, the screens applied to reported awards, tested only capital. They now also apply the work conditions:

  • ESA claimant. esa_income_claimant_remunerative_work: earnings over the lower limit, unless the work is under 16 hours and within the higher limit. Being a carer does not take a claimant out of remunerative work.
  • ESA earnings (new esa_exempt_work_earnings, worked out under the ESA(IR) earnings rules per DMG 41189):
    • Pay (reg 96(3)): less the income tax and primary Class 1 deducted from it, and half the occupational or personal pension contributions. The regulation takes the amounts actually deducted, which the inputs don't record. The model approximates them on the pay alone:

      • Income tax: the rates on the pay less employment expenses and employee pension contributions (net pay arrangements), above the personal and blind person's allowances, less the married couple's allowance reduction up to that tax. The rates apply to the pay alone. The allowances are the person's own, assessed on whole income, so other income can taper the personal allowance. The tax on other income never comes off the pay, and neither a loss nor a credit settled through a tax return (such as foreign tax credit relief) changes it.
      • Class 1: the main and additional primary rates on the pay.
      • Statutory sick, maternity and paternity pay are not earnings (reg 95(2)(b)). They add nothing to the pay, nor to the tax and Class 1 taken off it. The shared taxable_employment_income and Class 1 base include them, so neither is read.

      A second job taxed at the basic rate through PAYE would leave lower net earnings than this, and the variable can be entered directly.

    • Self-employment (reg 98(3), reg 99): the profit less several notional deductions, and half the personal pension contributions. Personal pension contributions go to self-employment when there is a profit and to pay otherwise. The notional deductions are:

      • basic-rate tax on the profit above the personal and blind person's allowances. A Scottish taxpayer pays the Scottish basic rate: the first band before 2018-19, the second once the starter rate came in;
      • Class 4 at the main rate between the profits limits;
      • Class 2 until 5 April 2024 (reg 99(3)(a)). It ran from the small profits threshold, and from 6 April 2022 applied only above the lower profits threshold.

      The notional National Insurance reads the model's Class 2 and Class 4 parameters. This PR corrects the dated amounts that differed from the statute (table below).

    • Losses: a self-employment loss is not set against pay (reg 98(11)), nor does it change the tax on the pay.

  • ESA partner. 24 hours or more of paid work, from the new esa_income_remunerative_work_hours, unless is_carer_for_benefits (the IS gate's proxy for Sch 1B para 4).
  • JSA. The claimant at 16 hours or more, and the other member of the couple at 24 or more, from the new jsa_remunerative_work_hours. There is no exception for carers doing unrelated paid work.
  • Who is tested. The claimant is a member who reports the award, tested against the other member of the couple. When the claimant or partner reports one, only they are candidates. A non-dependant who reports an award is tested on their own work only when neither does, so their award can never change the couple's. Without this rule a non-dependant's award could flip the benefit-unit screen, and with it the Income Support gate.

New parameters, each dated from the point-in-time legislation:

Parameter Values
gov.dwp.ESA.exempt_work.lower_earnings_limit £20
gov.dwp.ESA.exempt_work.hours_limit 16
gov.dwp.ESA.exempt_work.higher_earnings_limit £92 from 27 Oct 2008; £93 from 1 Oct 2009; 16 x NMW rounded up to 50p from 11 Apr 2011, at each NMW change. That gives £183.50, £195.50 and £203.50 for 2024/25-2026/27, matching DWP's published limits. Later years follow average earnings, rounded up to 50p
gov.dwp.ESA.income.remunerative_work.partner_hours 24 from 27 Oct 2008
gov.dwp.ESA.income.self_employment_class_2.deducted true from 27 Oct 2008; false from 6 Apr 2024 (SI 2024/377)
gov.dwp.ESA.income.self_employment_class_2.above_lower_profits_threshold false from 27 Oct 2008; true from 6 Apr 2022 (SI 2022/1329)
gov.dwp.JSA.remunerative_work.claimant_hours 16 from 7 Oct 1996
gov.dwp.JSA.remunerative_work.partner_hours 24 from 7 Oct 1996

The existing gov.dwp.JSA.hours.single and couple are kept, and a test pins them to the new ones. Their descriptions called 24 hours the "joint claimants'" requirement; it is the partner's.

National Insurance amounts corrected to the statute. Reg 99(3) deducts notional Class 2 and Class 4, so these feed the ESA earnings. Each value is checked against the point-in-time legislation.gov.uk text and carries its reference. The model samples each tax year at 30 April.

Parameter Was Now Source
class_2.small_profits_threshold, 2015-16 and 2016-17 £3,965 £5,965 SSCBA 1992 s.11(4) as at 6 Apr 2015 and 2016
class_2.flat_rate, 2023-24 £3.15 £3.45 s.11(2) as at 6 Apr 2023
class_4.thresholds.lower_profits_limit, 2023-24 £11,908 £12,570 s.15(3)(a) as at 6 Apr 2023
class_4.rates.main, 2022-23 10.25% 9.73% for the whole year Health and Social Care Levy (Repeal) Act 2022 s.2(2)(a)
class_4.rates.additional, 2022-23 3.5% 2.73% s.2(2)(b) of the same Act
class_4.rates.additional, 2023-24 3.5% 2% s.15(3ZA)(b) as at 6 Apr 2023

Four 2023 NI tests encoded the old amounts and now take hand-derived statutory values:

  • ni_class_2 over the lower profits limit: 52 × £3.45 = £179.40;
  • ni_class_4 on £30,000: 9% × (£30,000 − £12,570) = £1,568.70;
  • ni_class_4_main over the upper limit: 9% × £37,700 = £3,393;
  • ni_class_4_maximum, on £100,000 of profit and £100,000 of pay, by SI 2001/1004 reg 100(3) as at 6 April 2023: £1,748.60. Primary Class 1 on the pay exceeds Step 3's £3,575.85 less Class 2, so Step 4 is negative (Case 3) and treated as nil. Step 8 is 2% × £37,700 = £754 and Step 9 is 2% × £49,730 = £994.60.

None of these years is in the Enhanced FRS impact below (2025-2030). The corrections are to shared parameters, so they also change National Insurance, net income and the means tests that read them in 2015-16, 2016-17, 2022-23 and 2023-24. The 2025-2030 figures do not measure those effects. For example, with £30,000 of profit in 2023-24, Class 2 plus Class 4 falls from £1,792.08 to £1,748.10. Remaining NI questions are a separate audit, listed under follow-ups.

Not modelled (each documented on the variable; enter the variable directly to apply it):

  • ESA: supervised work, test trading, voluntary work, work placements and the other reg 40(2) work.
  • The pre-April 2017 52-week limit on ESA permitted work.
  • The transferable (marriage) allowance and other reliefs in reg 99(1) beyond the personal and blind person's allowances.
  • The reg 43(1) and JSA reg 53 employments, leave, illness and trade disputes.
  • The other reg 3E(2) grounds, which matter for the joint-claim route but not for remunerative work.

Design points

In the screen, beside the capital test. The work conditions are further conditions of entitlement alongside the capital test the screens already apply. For ESA they are para 6(1)(e)-(f) beside (b); for JSA they are ss.1(2)(e) and 3(1)(e) beside s.13. Work ends an award. Within the model's bounded reported-award approach (no new claims can be made, so a reported award is screened rather than computed), applying them in the screen keeps every reader consistent:

The alternative would be household income keeping the reported award while the gate and passports see no entitlement. The household would then both have and not have the benefit. The cost is that household income falls where a survey report conflicts with the rules. The impact section sizes that.

Helpers and award formulas unchanged. income_related_esa_award, income_related_jsa_award and the esa_income/jsa_income formulas are untouched; only the variables' documentation changed. They read the screens. So #2025's and #2027's value rule for direct entries is unaffected: a calculated esa_income is still exactly the award on everyone's reports.

A trial merge with #2027's head e741e1f passes:

Income Support property tests (test_income_support_eligibility_properties.py). The reference's award on the claimant's and partner's reports, and explained_by_reports' award on everyone's reports, now pass the same work screens (new shared tests/legacy_award_work_reference.py). The monotonicity property needed one law-based allowance. A carer is not in remunerative work for Income Support (reg 6(4)(c)) but is for JSA, so more hours can end a carer's own JSA award that barred the claim. The property therefore allows a gain only where a calculated esa_income or jsa_income award actually ended.

Tests

  • YAML. esa_income_remunerative_work.yaml has 39 cases and jsa_income_remunerative_work.yaml has 16, each hand-computed from the law. They cover:

    • £20 a week at 30 hours, which is exempt;
    • £21 at 16 hours, which is remunerative;
    • £195.50 and £196 at 15 hours in 2025-26, and £196 and £204 in 2026-27;
    • half pension contributions;
    • tax on pay as the lowest slice;
    • reg 99's notional tax on a £13,200 profit with a £5,900 pension premium (£193.97);
    • a self-employment loss of £1,000 or £20,000 beside £11,000 of pay (£211.54 either way);
    • the blind person's allowance in reg 99's notional tax (£196.39);
    • a 2017-18 Scottish profit with the Scottish basic rate and Class 2 (£122.28 against £120);
    • the married couple's allowance with a loss, and a foreign tax credit on other income, neither changing the tax on pay;
    • statutory sick, maternity or paternity pay beside £10,300 of pay (£198.08 each time), and a control that sets the shared taxable pay and Class 1 base to £13,300 without moving the result;
    • 2023-24 reg 99 cases at the statutory amounts: £12,500 of profit (£170.19 against £167), a profit equal to the £12,570 lower profits threshold (no Class 2: £168.65), £1 over it (Class 2 brings it to £165.22, the intended cliff), and £13,000 (Class 2 at £3.45: £167.23);
    • 2015-16 cases: £5,000 of profit (no Class 2: £96.15 against £104), and a profit equal to the £5,965 small profits threshold (Class 2 due: £102.30);
    • a carer claimant and a carer partner;
    • a partner at 23 and 24 hours;
    • both members reporting;
    • non-dependants;
    • couples without children at 15, 16, 20, 23 and 24 hours (reg 3E), and a couple caring for a placed child;
    • the Income Support gate.

    With the two old screens and everything else at the head, 21 ESA and 8 JSA cases fail: each case where the work condition bars the award.

  • Hypothesis (test_legacy_award_work_properties.py, 4 properties, 20 examples each):

    • the screens, and each adult's weekly earnings, equal a family-by-family reading of the law in 2025 and 2026. Families mix employees, self-employed people, pay with profit, losses beside pay (including losses larger than the pay), pension contributions, statutory sick, maternity and paternity pay, ages either side of state pension age, placed children and non-dependants;
    • more hours or pay never makes a family eligible (in the tested 2025 and 2026);
    • caring never ends an ESA award and never matters for JSA (no exception for carers doing unrelated paid work);
    • a member outside the family never changes the couple's screen.

    A 150-example run of an earlier version passed. All four pass at the head.

  • Parameters.

    • The higher limit equals 16 x NMW rounded up to 50p at every rate in DMG ch. 41 Appendix 5, and matches DWP's published limits.
    • Projected years are multiples of 50p and never fall.
    • The JSA hours parameters match the older ones.
  • Suites.

    • Full YAML at 2c5da98: 1,573 passed. Full pytest excluding microsimulation at 2c5da98: 2,079 passed and 19 skipped.
    • At 2a6fd9e: full YAML, 1,582 passed, and the targeted pytest files (Income Support and new properties, direct inputs, the entered-directly lifecycle, parameters), 57 passed.
    • At 045e0a3: the income_support, esa_income and jsa_income YAML directories (156 cases) and the property and direct-input files (38 tests) pass.
    • At the head e38ea0c: full YAML, 1,592 passed. The new properties, parameter tests and NI Class 4 pytest files: 25 passed.

Invariants

For every input:

  1. Subset of the old screen. An award that passes the new screen passed the capital-only one.
  2. Monotonicity. More hours or pay for anyone never makes an award pass. This holds from 6 April 2024, and the property tests 2025 and 2026. Before then reg 99(3)(a)'s fixed Class 2 deduction starts once profit reaches the threshold (from 6 April 2022, exceeds it), so £1 more profit can lower net earnings. A YAML case shows this intended cliff: in 2023-24, £12,570 of profit with a £7,600 premium is £168.65 a week (remunerative), and £12,571 is £165.22 (exempt).
  3. Caring. Caring never ends an ESA award and never changes a JSA award.
  4. Non-dependants. When the claimant or partner reports the award, adding a non-dependent adult, with any award and any work, never changes either screen.
  5. Placed children. A child placed with a couple never changes the JSA work test.
  6. Parameters. The higher limit equals 16 x NMW rounded up to 50p whenever it is NMW-linked, and projected values are 50p multiples.

Invariants 2-4 are property tests. Invariant 5 is a YAML case and follows from reg 3E. Invariant 1 holds by construction and through the reference test. Invariant 6 is a table and range test.

Enhanced FRS impact

The runs used real Microsimulations on copies of enhanced_frs_2024_25.h5 (sha256 e433e532…), base 081ec14 (#2025) against the head e38ea0c, each from its own worktree venv with clean trees. Benefit units are weighted thousands, and "records" are dataset records.

Year Income-related ESA Benefit units losing it Income-based JSA Household net income
2025 −£88.3m 7.7k (40 records) −£0.8m (0.19k units, 8 records) −£89.1m
2026 −£90.7m 7.7k £0 (scheme closed) −£90.7m
2027 −£92.7m 7.8k £0 −£92.7m
2028 −£94.9m 7.8k £0 −£94.9m
2029 −£304.2m, of which −£97.1m outside the salary-sacrifice artefact 24.7k (7.8k) £0 −£299.9m
2030 −£311.6m, of which −£99.4m outside it 24.8k (7.9k) £0 −£307.1m

By channel in 2025 (first-match attribution in the branch run):

  • ESA claimant in remunerative work: 3.0k units, 22 records, −£32.4m.
  • ESA partner working 24+ hours: 4.7k units, 18 records, −£55.9m.
  • JSA claimant working 16+ hours: 0.2k units, 8 records, −£0.8m.

Nothing else changes in 2025-2028: Income Support, Housing Benefit, council tax reduction, Universal Credit and Pension Credit are identical arrays. Poverty rates move by about 0.001 percentage points. None of the review fixes (reg 3E, the self-employment earnings rules, the pay-side tax and Class 1, the NI amounts) alter an Enhanced FRS benefit outcome. The benefit outcomes of these runs reproduce exactly those of every earlier pair (46d11fc against bebbfad, ffe3a58 against c200dd8, da1a798 against ebed8bd, and 081ec14 against 045e0a3). Only the earnings and claimant remunerative-work auxiliary arrays differ.

Against the previous head (045e0a3), the statutory-pay fix leaves every benefit and income array identical. Weekly ESA earnings move by more than half a penny only for recipients of statutory sick or maternity pay: about 340 records a year, all rises. Everyone else moves by under £0.001 a week: rounding in the new pay-side computation, and only among people with pay above the primary threshold. The claimant flag changes for 2 records a year, neither of whom reports ESA.

Separate ESA-only and JSA-only runs against 46d11fc showed no interaction between the two screens.

The 2029-30 jump is a data defect, not this rule. From 2029 the £2,000 salary-sacrifice cap moves sacrifice above the cap into employment_income (salary_sacrifice_returned_to_income).

  • The Enhanced FRS imputes salary sacrifice to 1,528 records (1.08m weighted) with no employment income before the cap. In 2029, 1,283 of them (874k) gain employment income from it.
  • Among income-related ESA reporters that is 106 records (27k), 97 of them with zero hours.
  • The claimant earnings test reads that as work above the higher limit. Splitting the same runs, the units whose ESA claimant has no pay or profit of their own account for −£207m of the 2029 change and −£212m of 2030's (52 records). The rest continues the 2025-2028 trend.
  • In 2029-30 Housing Benefit rises £4.4m to £4.5m and council tax reduction £0.02m in those units.
  • Chip task_d73fcf28 restricts the imputation to people with pay and guards the model.

What the 40 records are. They are survey reports of income-related ESA alongside work the regulations say ends it: 22 records with a claimant over the exempt-work limits and 18 with a partner working 24+ hours. The contributory/income-related split is the respondent's own report (FRS BENEFITS VAR2). Some may be contributory ESA, which a partner's work does not affect (DMG 41302) and which this screen does not touch. The rule is the law; whether the survey labels are right is a data question.

Review

  • r1 (Subfleet, GPT-6.1 Sol): REQUEST CHANGES with three blocking findings, all fixed in d146b96:

    • reg 3E single claims;
    • reg 99 notional tax for self-employment;
    • reg 98(11) losses.

    It also raised five should-fix findings, also addressed: rounding of projected limits, the monotonicity waiver, the earnings documentation, text defects, and the Axiom issue.

  • r2 (Subfleet, GPT-6.1 Sol): resolved r1's reg 3E, rounding, monotonicity and text findings. It requested changes on four more, fixed in ebed8bd:

    • a self-employment loss larger than the pay reached the pay's tax through the shared pension_contributions_relief, which goes negative there (the pay side is now PAYE on the pay alone; the shared bug is chip task_3ccdecda);
    • the Scottish basic rate before 2018-19;
    • reg 99(3)(a) Class 2 before April 2024;
    • the blind person's allowance in reg 99.

    Its nits are also addressed: reference age coverage and mixed sources, the Axiom table and carer wording, and "benefit outcomes" here.

  • r3: found two should-fix issues. The first was addressed in 17ebd16; r4 rejected 17ebd16's deferral of the second, and e38ea0c fixes it.

    • The shared tax reductions on the pay side reached the loss path and tax-return credits. The pay side now takes only the married couple's allowance reduction, capped at the tax on the pay.
    • Out-of-date 2015-16 and 2023-24 NI parameters fed the reg 99 notional NI.
  • r4: REQUEST CHANGES with two should-fix findings and three nits, all addressed in e38ea0c:

    • The NI parameters are now corrected here with statutory references, including 2022-23. The four NI tests take hand-derived statutory values (the reg 100 maximum is £1,748.60, because the 2023-24 additional rate is 2%). The ESA YAML adds the 2023 regression and the threshold-equality cases.
    • Statutory sick and maternity pay no longer reach the pay's tax, nor statutory sick, maternity and paternity pay its Class 1 (reg 95(2)(b)). Both are now computed on the pay alone, with YAML controls and property coverage.
    • The nits: the auxiliary-array wording, ages either side of pension age, "no exception for carers doing unrelated paid work", and "Fixes Income-related ESA and income-based JSA awards ignore the remunerative work conditions #2043".
  • r5 (Subfleet, GPT-6.1 Sol): APPROVE WITH NITS at e38ea0c. It independently recomputed every corrected NI value, the four NI tests (including reg 100), the nine new ESA cases and the impact figures. Its two nits are addressed in 232358d:

    • the monotonicity invariant fails before 6 April 2024 at reg 99(3)(a)'s Class 2 threshold. It is now qualified, with the cliff as a labelled YAML case;
    • the historical effects of the shared NI corrections are now disclosed.

Axiom

axiom: TheAxiomFoundation/rulespec-uk#417 queued. rulespec-uk has no module for:

  • WRA 2007 Sch 1 para 6;
  • ESA Regs 2008 regs 40-45, 96, 98 and 99;
  • Jobseekers Act 1995 ss.1, 3 and 35;
  • JSA Regs 1996 regs 3E and 51-53.

The statute provisions are not in the corpus. The regulations are only in the non-release scope 2026-06-01-uk-frs-microsim. The issue carries the verbatim law, the required outputs, a review_finding and 12 groups of companion tests from the same ground truth as the YAML.

Follow-ups

  • task_d73fcf28: stop imputing salary sacrifice to people with no pay (uk-data), and guard salary_sacrifice_returned_to_income.

  • task_df8732a5: gov.hmrc.minimum_wage has no April 2023 rates, so 2023-24 reads £9.50 where the NLW was £10.42.

  • task_3ccdecda: pension_contributions_relief goes negative when losses exceed income.

  • NI audit (from chip task_21085692, now running separately). Open questions:

    • Class 2 liability for 2022-24: s.11(2) as at 6 April 2023 charges it only on profits over the lower profits threshold, but ni_class_2 charges it from the small profits threshold.
    • The 2023-24 and 2024-25 small profits threshold. S.11(4) as at 6 April 2023 says £6,725; the model CPI-uprates it.
    • The 2015-16 upper profits limit.
    • Class 1 rates and thresholds that change part-way through 2022-23 and 2023-24, given the 30 April sampling.

    How these reach the ESA earnings:

    • Reg 99(3)(a) has its own Class 2 rule (self_employment_class_2), so neither Class 2 item does.
    • The 2015-16 upper profits limit enters only main-rate Class 4 on profits far above any exempt-work limit.
    • The pay side's Class 1 reads the Class 1 parameters, so the part-year changes affect 2022-23 and 2023-24 pay, as they do every Class 1 figure.

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits October 2, 2026 01:32
Income-related ESA (WRA 2007 Sch 1 para 6(1)(e), (f); ESA Regs 2008 regs
41-43, 45) and income-based JSA (Jobseekers Act 1995 ss.1(2)(e), 1(2B)(b),
3(1)(e); JSA Regs 1996 regs 3A, 51) are barred when the claimant, or the
other member of the couple, is engaged in remunerative work. The screens
applied only the capital test.

- ESA claimant: paid work other than exempt work (£20 a week, or under 16
  hours within 16 x NMW), on net earnings.
- ESA partner: 24 hours, except a carer (reg 43(2)(c)).
- JSA: 16 hours for a claimant, including each member of a joint-claim
  couple; 24 for a partner otherwise; no carer exception.
- Candidates are the claimant and partner when either reports the award.

The income_related_*_award helpers are unchanged; they read the screens.
The Income Support property reference now applies the same tests, holding
the JSA joint-claim status fixed in the invariance property and allowing
work that ends a barring award in the monotonicity property.

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

The stored higher limit equals 16 x the National Minimum Wage rounded up to
the next 50p (ESA Regs 2008 reg 45(9A)) at every rate in DMG ch. 41
Appendix 5, and DWP's published £183.50, £195.50 and £203.50. The JSA hours
parameters match the older gov.dwp.JSA.hours ones. The new property tests
run 20 examples each.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 3 commits October 2, 2026 02:33
Takes is-remunerative-work-jsa-conditions at bfff081 (with #2013 at
97b7a1c). In test_income_support_eligibility_properties.py, #2025's version
is kept and the work tests are re-applied: the reference's award on the
claimant's and partner's reports, and explained_by_reports' award on
everyone's reports, pass the ESA and JSA work screens; monotonicity allows a
gain only where a calculated award was lost. Excluded members are now adults
only, so the invariance property needs no joint-claim hold.

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

- JSA: a member of a joint-claim couple whose partner works 16 to under 24
  hours can claim alone (JSA Regs 1996 reg 3E(1), (2)(g), since 19 March
  2001), so the other member's limit is 24 hours for every couple. The
  joint-claim switch, is_jsa_joint_claim_couple and its parameters are
  removed.
- ESA earnings: pay under reg 96(3); self-employment under reg 98(3) and
  reg 99 (notional basic-rate tax above the personal allowance, main-rate
  Class 4, half the personal pension premium); a self-employment loss is no
  longer set against pay (reg 98(11)). The documentation calls the PAYE
  attribution an approximation, not the reading most favourable to the
  claimant.
- The projected higher earnings limit rounds up to 50p (reg 45(9A)).
- The Income Support monotonicity property allows a gain only where a
  calculated esa_income or jsa_income award actually ended.
- esa_income and jsa_income documentation names the work tests.
- YAML: two self-employment cases, JSA couples without children at 15, 16,
  20, 23 and 24 hours, and a couple with a placed child.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Brings #2013's DIFFERENTIAL_SETTINGS (25 examples) for the Income Support
family-by-family property. Clean merge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
esa_income_eligible is the screen esa_income applies. It is a capital test
here, but #2031 (on #2025) adds remunerative-work tests to it, so the
comments now name the variable rather than the test. Comment-only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 7 commits October 2, 2026 03:05
…pers

Comment-only. In esa_income.py and jsa_income.py the helpers keep #2025's
docstrings ("fails the screen in esa_income_eligible" / "jsa_income_eligible"),
so they stay identical to #2025 and #2013; the variables' documentation names
the capital and remunerative work tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Brings #2013's 3402629 and #2025's round-4 changes: the IS gate compares
direct awards in the stored dtype, documents the value convention's
boundary, and adds direct-input tests. Clean merge; the property file's
docstring and the work-screen reference sit side by side.

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

- A self-employment loss larger than the pay no longer reaches the tax on
  the pay through the shared allowances (pension_contributions_relief goes
  negative there). The pay side is PAYE on the pay alone: taxable pay less
  employee pension contributions and the personal and blind person's
  allowances, less tax reductions.
- Reg 99(1): the notional tax allows the blind person's allowance.
- Reg 99(3)(a): Class 2 is deducted until 5 April 2024, from the small
  profits threshold and, from 6 April 2022, above the lower profits
  threshold (two dated parameters).
- The Scottish basic rate is the first Scottish band before 2018-19 and the
  second once the starter rate came in.
- YAML: a loss larger than the pay, the blind person's allowance, and a
  2017-18 Scottish profit with Class 2.
- The reference applies National Insurance only below state pension age and
  covers pay with profit and a loss larger than the pay. The differential
  property also compares weekly earnings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The pay side takes only the married couple's allowance reduction, up to
  the tax on the pay itself, instead of the shared income_tax_subtractions.
  The shared capped_mcad is capped against the whole liability, which a loss
  moves through negative pension relief, and other_tax_credits holds credits
  settled through a tax return, such as foreign tax credit relief.
- YAML: the married couple's allowance with a £20,000 loss, and a foreign
  tax credit on property income.
- Documentation: the notional National Insurance follows the model's
  Class 2 and Class 4 parameters. Their 2015-16 and 2023-24 values are out
  of date; a separate fix is chip task_21085692.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Brings #2025's stored-award convention wording, its tolerance tests and
test_direct_awards_match_the_reference_deterministically. In
test_income_support_eligibility_properties.py the monotonicity waiver for a
lost calculated award is kept and the new deterministic test follows it;
reference_eligibility's signature is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Brings #2013's under-16 limit on Sch 1B para 2 and the zero-award guard on
both income-related bars, with their tests. Clean merge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Correct the dated National Insurance amounts reg 99's notional
  contributions read: the 2015-16/2016-17 Class 2 small profits threshold
  (£5,965), the 2023-24 Class 2 rate (£3.45) and lower profits limit
  (£12,570), the 2022-23 Class 4 rates (9.73%/2.73%, Health and Social
  Care Levy (Repeal) Act 2022 s.2(2)) and the 2023-24 additional rate
  (2%). The four 2023 NI tests now take hand-derived statutory values,
  including the reg 100 annual maximum (£1,748.60).
- Take the ESA pay's tax and primary Class 1 on the pay alone: statutory
  sick, maternity and paternity pay are not earnings (reg 95(2)(b)), so
  the shared taxable pay and Class 1 bases, which include them, are not
  used.
- YAML: SSP/SMP/SPP controls, a shared-base isolation control, the 2023
  regression and threshold-equality cases for 2023-24 and 2015-16.
- Properties draw statutory payments; describe ages on both sides of
  pension age and the JSA carer rule as no exception for carers doing
  unrelated paid work.

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

Copy link
Copy Markdown
Collaborator Author

The NI parameter corrections this PR carries (review r4 finding 1) now have their own PR off main: #2058. Note for whoever next works on this branch.

The hunks are not byte-identical. #1888 already held the Class 2 fix in a different form (every value cited, new class_2/lower_profits_threshold.yaml and lower_profits_threshold_applies.yaml, and ni_class_2 charging only above the lower profits threshold in 2022-23 and 2023-24). #2058 takes that commit and adds the Class 4 fix; #1888 is closed as superseded.

Every value in this branch's NI hunks is in #2058 with the same number:

  • small profits threshold £5,965 from 2015;
  • Class 2 £3.45 from 6 April 2023;
  • lower profits limit £12,570 from 6 April 2023;
  • Class 4 main rate 9.73% for 2022-23 and 9% from 6 April 2023; additional rate 2.73% and 2%.

The four 2023 test expectations match too (179.40; 1,568.70; 3,393; 1,748.60).

#2058 also has:

  • the small profits threshold at £6,725 for 2023-24 and 2024-25, with the uprating anchor removed;
  • the 2015-16 upper profits limit of £42,385;
  • corrected dates for the 2016-17 upper limit, the 6% main rate and the end of compulsory Class 2.

When #2058 lands, merge main and take main's version of these paths whole, without hand-merging hunks:

git checkout origin/main -- policyengine_uk/parameters/gov/hmrc/national_insurance/class_2 policyengine_uk/parameters/gov/hmrc/national_insurance/class_4 policyengine_uk/tests/policy/baseline/gov/hmrc/national_insurance

Checked against this branch. I overlaid #2058's NI parameter, variable and test files onto head e38ea0c in a probe worktree. esa_income_remunerative_work.yaml plus the NI YAML: 108 passed. The 2023-24 case (£12,500 profit, £7,300 personal pension) gives esa_exempt_work_earnings 170.19 and esa_income_eligible false.

esa_exempt_work_earnings reads the Class 4 lower profits limit and this PR's own DWP switch for the Class 2 threshold. That still works. The HMRC-side equivalents after #2058 are gov.hmrc.national_insurance.class_2.lower_profits_threshold and .lower_profits_threshold_applies.

Not covered by #2058: the Class 1 rates and thresholds that changed mid-year in 2022-23 and 2023-24 (#1807).

Axiom: rulespec-uk#353 (s.11) and rulespec-uk#423 (s.15 and regulation 100) are the queued parity issues for the NI history.

- YAML: in 2023-24, £1 of profit over the lower profits threshold brings
  reg 99(3)(a)'s fixed Class 2 in and the work under the £167 limit
  (£165.22 against £168.65). This is the intended statutory cliff,
  labelled as such.
- The monotonicity property's docstring now names its tested years
  (2025-26) and this pre-April-2024 exception.
- Changelog: the shared NI corrections also change historical NI, net
  income and means tests in those years.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis marked this pull request as ready for review October 2, 2026 13:39
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Cross-PR note from #2075 (stacked on #2027 + #2025): #2075 switches income_support_eligible's ESA and JSA limbs to read claimant_or_partner_esa_income > 0 / claimant_or_partner_jsa_income > 0. Those variables still go through income_related_esa_award / income_related_jsa_award, so this PR's work conditions in the screens reach the gate unchanged.

#2075 does not edit test_income_support_eligibility_properties.py, esa_income_eligible or jsa_income_eligible. Its new differential test imports FAMILIES, input_settings, situation and DIFFERENTIAL_SETTINGS from that property file, so renaming any of them would need a matching change in #2075.

Because the gate now reads a calculated variable, a test that changes esa_income/jsa_income after calculating the gate must also delete the claimant_or_partner_* arrays.

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