From 3c3ef918d9c6ee1762c45aefe821c2eca9d3e26f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Fri, 16 Oct 2026 13:50:22 +0100 Subject: [PATCH] Respect NI liability in Carers Allowance earnings --- changelog.d/2360.fixed.md | 1 + .../dwp/carers_allowance_earnings_limit.yaml | 66 +++++++++++++++++++ .../gov/dwp/carers_allowance_earnings.py | 32 ++++++--- 3 files changed, 91 insertions(+), 8 deletions(-) create mode 100644 changelog.d/2360.fixed.md diff --git a/changelog.d/2360.fixed.md b/changelog.d/2360.fixed.md new file mode 100644 index 0000000000..fc9a663d4d --- /dev/null +++ b/changelog.d/2360.fixed.md @@ -0,0 +1 @@ +- Corrected Carer's Allowance earnings to deduct notional Class 2 and Class 4 National Insurance only when the carer is liable for those contributions. diff --git a/policyengine_uk/tests/policy/baseline/gov/dwp/carers_allowance_earnings_limit.yaml b/policyengine_uk/tests/policy/baseline/gov/dwp/carers_allowance_earnings_limit.yaml index f7ad5724ac..d33549c435 100644 --- a/policyengine_uk/tests/policy/baseline/gov/dwp/carers_allowance_earnings_limit.yaml +++ b/policyengine_uk/tests/policy/baseline/gov/dwp/carers_allowance_earnings_limit.yaml @@ -255,3 +255,69 @@ carers_allowance_earnings: 6_146.60 is_gainfully_employed_for_carers_allowance: false carers_allowance: 64.60 * 52 + +- name: Case 18, a pension-age trader has no notional Class 2 deduction in 2018. + period: 2018 + absolute_error_margin: 0.01 + input: + age: 70 + self_employment_income: 7_000 + personal_pension_contributions: 1_400 + state_pension: 6_000 + care_hours: 40 + country: ENGLAND + output: + # SSCBA 1992 s. 11(7)(b): no Class 2 after the week of State Pension + # age. 7,000 - 700 = 6,300, or £121.15 a week, above the £120 limit. + # State Pension already prevents a cash CA award, but the earnings + # limit also removes underlying entitlement and the PC carer addition. + ni_liable: false + carers_allowance_earnings: 6_300 + is_gainfully_employed_for_carers_allowance: true + carers_allowance_pre_overlap: 0 + carers_allowance: 0 + is_entitled_to_carer_benefit: false + carer_minimum_guarantee_addition: 0 + +- name: Case 19, a pension-age trader has no notional Class 4 deduction in 2026. + period: 2026 + absolute_error_margin: 0.01 + input: + age: 70 + self_employment_income: 15_000 + capital_allowances: 5_000 + personal_pension_contributions: 7_700 + state_pension: 10_000 + care_hours: 40 + country: ENGLAND + output: + # Contributions Regulations 2001 reg. 91(a): over State Pension age + # at the start of the tax year. 15,000 - 486 tax - 3,850 pension + # = 10,664, or £205.08 a week, above £204. Deducting Class 4 wrongly + # gives £202.27. Capital allowances still do not reduce reg. 14 profit. + ni_class_4_liable: false + carers_allowance_earnings: 10_664 + is_gainfully_employed_for_carers_allowance: true + carers_allowance_pre_overlap: 0 + carers_allowance: 0 + is_entitled_to_carer_benefit: false + carer_minimum_guarantee_addition: 0 + +- name: Case 20, Class 4 remains deductible in the tax year State Pension age is reached. + period: 2026 + absolute_error_margin: 0.01 + input: + # Born 6 June 1960, reaching SPA on 6 September 2026, after 6 April. + age: 66 + months_since_last_birthday: 4 + self_employment_income: 15_000 + personal_pension_contributions: 7_700 + care_hours: 40 + country: ENGLAND + output: + # Class 4's tax-year exception differs from the general NI age flag. + ni_liable: false + ni_class_4_liable: true + carers_allowance_earnings: 10_518.20 + is_gainfully_employed_for_carers_allowance: false + carers_allowance_pre_overlap: 86.45 * 52 diff --git a/policyengine_uk/variables/gov/dwp/carers_allowance_earnings.py b/policyengine_uk/variables/gov/dwp/carers_allowance_earnings.py index d9d7e6f167..b49b6618d0 100644 --- a/policyengine_uk/variables/gov/dwp/carers_allowance_earnings.py +++ b/policyengine_uk/variables/gov/dwp/carers_allowance_earnings.py @@ -22,14 +22,17 @@ class carers_allowance_earnings(Variable): "Self-employment (regs. 13(4) and 14): trading profit less a notional " "income tax at the basic rate (the Scottish basic rate for a Scottish " "taxpayer) on the profit above the full personal allowance, and Class 4 " - "contributions at the main rate on the profit between the lower and " - "upper profits limits. Regulation 14(1) deducts the personal reliefs " + "contributions, where payable, at the main rate on the profit between " + "the lower and upper profits limits. Regulation 14(1) deducts the personal reliefs " "the claimant is entitled to, with no reduction for any allowance the " "pay uses, and capital expenditure is not deducted (reg. 13(6)(a)). " "Until 6 April 2024 reg. 14(2)(a) also deducted the Class 2 " "contributions payable on the chargeable profit; that paragraph was " "omitted with compulsory Class 2, whose flat rate is nil from " - "2024-25.\n\n" + "2024-25. Class 2 uses ni_liable's annual approximation of the " + "exemption after the week State Pension age is reached. Class 4 uses " + "ni_class_4_liable: reaching State Pension age during the tax year " + "leaves that year's contributions payable.\n\n" "Not modelled: the deduction for care charges (Schedule 3, up to half " "of net earnings) and the Schedule 1 disregards, so this can overstate " "earnings for a carer who pays for care while at work." @@ -49,6 +52,14 @@ class carers_allowance_earnings(Variable): title="Social Security Benefit (Computation of Earnings) Regulations 1996 reg. 14", href="https://www.legislation.gov.uk/uksi/1996/2745/regulation/14", ), + dict( + title="Social Security Contributions and Benefits Act 1992 s. 11(7)", + href="https://www.legislation.gov.uk/ukpga/1992/4/section/11", + ), + dict( + title="Social Security (Contributions) Regulations 2001 reg. 91(a)", + href="https://www.legislation.gov.uk/uksi/2001/1004/regulation/91", + ), ] def formula(person, period, parameters): @@ -87,10 +98,14 @@ def formula(person, period, parameters): income_tax.rates.uk.rates[0], ) trading_tax = basic_rate * max_(0, profit - personal_allowance) - trading_class_4 = class_4.rates.main * max_( - 0, - min_(profit, class_4.thresholds.upper_profits_limit) - - class_4.thresholds.lower_profits_limit, + trading_class_4 = ( + person("ni_class_4_liable", period) + * class_4.rates.main + * max_( + 0, + min_(profit, class_4.thresholds.upper_profits_limit) + - class_4.thresholds.lower_profits_limit, + ) ) # Reg. 14(2)(a), omitted from 6 April 2024: the Class 2 contributions # payable on the chargeable profit (SSCBA 1992 s. 11), on the @@ -98,7 +113,8 @@ def formula(person, period, parameters): # allowances. The flat rate is nil from 2024-25. class_2 = p.national_insurance.class_2 trading_class_2 = ( - class_2_liable(profit, class_2) + person("ni_liable", period) + * class_2_liable(profit, class_2) * class_2.flat_rate * class_2_contribution_weeks(period.start.year) )