From 132da97776811edb00ebb69de1595a11e58e80d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Fri, 23 Oct 2026 10:37:13 +0100 Subject: [PATCH] Count statutory pay in Income Support income --- changelog.d/2370.fixed.md | 1 + .../gov/dwp/income_support/README.md | 20 + .../family/income_support/statutory_pay.yaml | 343 ++++++++++++++++++ .../dwp/income_support_applicable_income.py | 8 + 4 files changed, 372 insertions(+) create mode 100644 changelog.d/2370.fixed.md create mode 100644 policyengine_uk/tests/policy/baseline/finance/benefit/family/income_support/statutory_pay.yaml diff --git a/changelog.d/2370.fixed.md b/changelog.d/2370.fixed.md new file mode 100644 index 0000000000..c2c8c62ec4 --- /dev/null +++ b/changelog.d/2370.fixed.md @@ -0,0 +1 @@ +- Count statutory sick, maternity and paternity pay in the legacy Income Support means test. diff --git a/policyengine_uk/parameters/gov/dwp/income_support/README.md b/policyengine_uk/parameters/gov/dwp/income_support/README.md index 5cb2858c20..33b3338536 100644 --- a/policyengine_uk/parameters/gov/dwp/income_support/README.md +++ b/policyengine_uk/parameters/gov/dwp/income_support/README.md @@ -1 +1,21 @@ # Income Support + +The means test includes the claimant's and partner's gross statutory sick, +maternity and paternity pay through the separate `statutory_sick_pay`, +`statutory_maternity_pay` and `statutory_paternity_pay` inputs. These payments +count as other income: [regulation 35(2)(b)](https://www.legislation.gov.uk/uksi/1987/1967/regulation/35) +excludes employer illness and statutory leave pay from earnings, while +[regulation 40(4)(a)](https://www.legislation.gov.uk/uksi/1987/1967/regulation/40) +includes it in income other than earnings. [Schedule 9, paragraphs 1 and 4](https://www.legislation.gov.uk/uksi/1987/1967/schedule/9) +provides for deductions for relevant income tax, primary Class 1 National +Insurance and half of qualifying pension contributions. + +The model currently deducts annual income tax, National Insurance and pension +contributions without attributing them to particular payments. It also applies +one claimant-type earnings disregard to combined income. As a result, a case +with statutory pay but unused earnings disregard can have understated assessable +income. Including gross statutory pay does not resolve these existing deduction +and disregard limitations. + +The activation parameter turns off on 1 April 2026. The full-year 2027 award is +zero. diff --git a/policyengine_uk/tests/policy/baseline/finance/benefit/family/income_support/statutory_pay.yaml b/policyengine_uk/tests/policy/baseline/finance/benefit/family/income_support/statutory_pay.yaml new file mode 100644 index 0000000000..aa0e6efbfb --- /dev/null +++ b/policyengine_uk/tests/policy/baseline/finance/benefit/family/income_support/statutory_pay.yaml @@ -0,0 +1,343 @@ +# IS Regs 1987 reg 35(2)(b) excludes sickness and parental-leave remuneration +# from earnings; reg 40(4)(a) counts it as other income. Schedule 9 paras 1 +# and 4 permit tax, primary Class 1 NI and half of pension contributions. +# https://www.legislation.gov.uk/uksi/1987/1967/regulation/40 +# https://www.legislation.gov.uk/uksi/1987/1967/schedule/9/paragraph/4 +# +# Ordinary earnings independently consume the Schedule 8 disregard in these +# targeted cases: £20 x 52 = £1,040 for lone parents, £10 x 52 = £520 for a +# couple. Statutory pay then counts in full. The existing model applies its +# disregard to all income; statutory-only cases with unused earnings disregard +# require a separate correction and are not asserted here as current law. +# The 2025/26 lone-parent allowance is £92.05 x 52 = £4,786.60 (DWP rates). +# https://www.legislation.gov.uk/uksi/1987/1967/schedule/8/paragraph/5 +# https://www.legislation.gov.uk/uksi/1987/1967/schedule/8/paragraph/6 +# https://www.gov.uk/government/publications/benefit-and-pension-rates-2025-to-2026/benefit-and-pension-rates-2025-to-2026 + +- name: Case 1, a claimant's statutory sick pay reduces a lone-parent award. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_parent: true + is_claimant_or_partner: true + income_support_reported: 1_000 + hours_worked: 0 + employment_income: 1_040 + statutory_sick_pay: 1_000 + social_security_income: 0 + person2: + age: 3 + is_claimant_or_partner: false + benunits: + benunit: + members: [person1, person2] + would_claim_IS: true + would_claim_uc: false + income_support_assessable_capital: 0 + households: + household: + members: [person1, person2] + output: + # £1,040 earnings - £1,040 earnings disregard + £1,000 SSP = £1,000. + employment_income: [1_040, 0] + statutory_sick_pay: [1_000, 0] + income_tax: [0, 0] + national_insurance: [0, 0] + income_support_tariff_income: 0 + income_support_applicable_amount: 4_786.60 + income_support_applicable_income: 1_000 + income_support_entitlement: 3_786.60 + income_support: 3_786.60 + +- name: Case 2, a claimant's statutory maternity pay reduces a lone-parent award. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_parent: true + is_claimant_or_partner: true + income_support_reported: 1_000 + hours_worked: 0 + employment_income: 1_040 + statutory_maternity_pay: 2_000 + social_security_income: 0 + person2: + age: 3 + is_claimant_or_partner: false + benunits: + benunit: + members: [person1, person2] + would_claim_IS: true + would_claim_uc: false + income_support_assessable_capital: 0 + households: + household: + members: [person1, person2] + output: + # £4,786.60 - £2,000 SMP = £2,786.60. + income_support_applicable_income: 2_000 + income_support_entitlement: 2_786.60 + income_support: 2_786.60 + +- name: Case 3, a claimant's statutory paternity pay reduces a lone-parent award. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_parent: true + is_claimant_or_partner: true + income_support_reported: 1_000 + hours_worked: 0 + employment_income: 1_040 + statutory_paternity_pay: 300 + social_security_income: 0 + person2: + age: 3 + is_claimant_or_partner: false + benunits: + benunit: + members: [person1, person2] + would_claim_IS: true + would_claim_uc: false + income_support_assessable_capital: 0 + households: + household: + members: [person1, person2] + output: + # £4,786.60 - £300 SPP = £4,486.60. + income_support_applicable_income: 300 + income_support_entitlement: 4_486.60 + income_support: 4_486.60 + +- name: Case 4, the partner's statutory sick pay counts in the couple's income. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_claimant_or_partner: true + employment_income: 520 + social_security_income: 0 + person2: + age: 32 + is_claimant_or_partner: true + statutory_sick_pay: 1_000 + social_security_income: 0 + benunits: + benunit: + members: [person1, person2] + income_support_assessable_capital: 0 + households: + household: + members: [person1, person2] + output: + # Reg 23(1): £520 ordinary earnings - £520 disregard + £1,000 SSP. + income_support_applicable_income: 1_000 + +- name: Case 5, statutory payments add across the claimant and partner. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_claimant_or_partner: true + employment_income: 520 + statutory_sick_pay: 500 + statutory_paternity_pay: 300 + social_security_income: 0 + person2: + age: 32 + is_claimant_or_partner: true + statutory_maternity_pay: 700 + social_security_income: 0 + benunits: + benunit: + members: [person1, person2] + income_support_assessable_capital: 0 + households: + household: + members: [person1, person2] + output: + # £520 - £520 + £500 SSP + £300 SPP + £700 SMP = £1,500. + income_support_applicable_income: 1_500 + +- name: Case 6, another adult's statutory pay does not reduce the claimant's award. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_parent: true + is_claimant_or_partner: true + income_support_reported: 1_000 + hours_worked: 0 + employment_income: 1_040 + statutory_sick_pay: 1_000 + social_security_income: 0 + person2: + age: 3 + is_claimant_or_partner: false + person3: + age: 38 + is_claimant_or_partner: false + statutory_maternity_pay: 1_500 + income_tax: 300 + national_insurance: 100 + pension_contributions: 200 + social_security_income: 0 + benunits: + benunit: + members: [person1, person2, person3] + would_claim_IS: true + would_claim_uc: false + income_support_assessable_capital: 0 + households: + household: + members: [person1, person2, person3] + output: + # Only the claimant and partner count (reg 23(1)); the excluded adult's + # £1,500 SMP and deductions do not change Case 1's income or award. + income_support_applicable_income: 1_000 + income_support: 3_786.60 + +- name: Case 7, zero statutory pay leaves the ordinary earnings disregard unchanged. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_parent: true + is_claimant_or_partner: true + income_support_reported: 1_000 + hours_worked: 0 + employment_income: 1_040 + statutory_sick_pay: 0 + statutory_maternity_pay: 0 + statutory_paternity_pay: 0 + social_security_income: 0 + person2: + age: 3 + is_claimant_or_partner: false + benunits: + benunit: + members: [person1, person2] + would_claim_IS: true + would_claim_uc: false + income_support_assessable_capital: 0 + households: + household: + members: [person1, person2] + output: + income_support_applicable_income: 0 + income_support: 4_786.60 + +- name: Case 8, statutory pay retains the tax NI and half-pension deductions. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_parent: true + is_claimant_or_partner: true + income_support_reported: 1_000 + hours_worked: 0 + employment_income: 3_040 + statutory_sick_pay: 1_000 + # Enter actual deductions to isolate the IS calculation. This case + # does not assert how the annual tax and NI models calculate them. + income_tax: 100 + national_insurance: 50 + pension_contributions: 200 + social_security_income: 0 + person2: + age: 3 + is_claimant_or_partner: false + benunits: + benunit: + members: [person1, person2] + would_claim_IS: true + would_claim_uc: false + income_support_assessable_capital: 0 + households: + household: + members: [person1, person2] + output: + # £3,040 + £1,000 - £100 - £50 - (0.5 x £200) - £1,040 = £2,750. + # Ordinary earnings still exceed the disregard after all deductions. + income_support_applicable_income: 2_750 + income_support: 2_036.60 + +- name: Case 9, earnings and statutory sick pay above the allowance leave no award. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_parent: true + is_claimant_or_partner: true + income_support_reported: 1_000 + hours_worked: 0 + employment_income: 6_040 + statutory_sick_pay: 1_000 + social_security_income: 0 + person2: + age: 3 + is_claimant_or_partner: false + benunits: + benunit: + members: [person1, person2] + would_claim_IS: true + would_claim_uc: false + income_support_assessable_capital: 0 + households: + household: + members: [person1, person2] + output: + # £6,040 - £1,040 earnings disregard + £1,000 SSP = £6,000. + income_support_applicable_income: 6_000 + income_support_entitlement: 0 + income_support: 0 + +- name: Case 10, statutory pay does not reopen Income Support after closure. + # 2027 is wholly after 31 March 2026. This avoids assuming that an annual + # 2026 formula selects the parameter after its 1 April closure boundary. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_parent: true + is_claimant_or_partner: true + income_support_reported: 1_000 + hours_worked: 0 + employment_income: 1_040 + statutory_sick_pay: 1_000 + social_security_income: 0 + person2: + age: 3 + is_claimant_or_partner: false + benunits: + benunit: + members: [person1, person2] + would_claim_IS: true + would_claim_uc: false + income_support_assessable_capital: 0 + households: + household: + members: [person1, person2] + output: + income_support: 0 diff --git a/policyengine_uk/variables/gov/dwp/income_support_applicable_income.py b/policyengine_uk/variables/gov/dwp/income_support_applicable_income.py index 4ae8cb39de..8010d580f5 100644 --- a/policyengine_uk/variables/gov/dwp/income_support_applicable_income.py +++ b/policyengine_uk/variables/gov/dwp/income_support_applicable_income.py @@ -11,6 +11,10 @@ class income_support_applicable_income(Variable): "https://www.legislation.gov.uk/uksi/1987/1967/schedule/8", "https://www.legislation.gov.uk/uksi/1987/1967/regulation/36", "https://www.legislation.gov.uk/uksi/1987/1967/regulation/38", + "https://www.legislation.gov.uk/uksi/1987/1967/regulation/35", + "https://www.legislation.gov.uk/uksi/1987/1967/regulation/40", + "https://www.legislation.gov.uk/uksi/1987/1967/schedule/9/paragraph/1", + "https://www.legislation.gov.uk/uksi/1987/1967/schedule/9/paragraph/4", ) def formula(benunit, period, parameters): @@ -27,6 +31,10 @@ def formula(benunit, period, parameters): "self_employment_income", "property_income_after_finance_costs", "private_pension_income", + # Employer statutory pay counts as other income (reg 40(4)(a)). + "statutory_sick_pay", + "statutory_maternity_pay", + "statutory_paternity_pay", ] bi = parameters(period).gov.contrib.ubi_center.basic_income if bi.interactions.include_in_means_tests: