Repository navigation
Conversation
ITEPA 2003 s. 660(1) Table A lists statutory paternity pay as a taxable UK benefit with statutory sick and maternity pay, but employment_benefits added only the latter two, so taxable_employment_income left SPP out. Housing Benefit and Council Tax Reduction deduct all of a person's income tax and NI but counted only SSP and SMP as income, although every scheme's earnings definition includes SPP (HB Regs 2006 reg 35(1)(i), SPC reg 35(1)(i), NI equivalents; CTR SI 2012/2885 Sch 1 para 18(1)(j), SI 2012/2886, WSI 2013/3029, SSI 2012/319, SSI 2021/249). Count SPP there too, so the tax on it does not raise those awards. Fixes #2367 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Hypothesis properties over generated singles and couples across the four nations: income tax never falls as statutory paternity pay rises, and rises by at most a pound per pound without Marriage Allowance; statutory paternity pay is taxed and means-tested as the same amount of statutory sick pay, and taxed as wages where wages and profit cover pension contributions; and employment_benefits and taxable_employment_income add up. Four of the five fail against main's variables. Refs #2367 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 12, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #2367
What and why
ITEPA 2003 s. 660(1) Table A lists statutory paternity pay (SSCBA 1992 s. 171ZA or 171ZB) as a taxable UK benefit, with statutory sick pay and statutory maternity pay.
employment_benefitsadded only SSP and SMP, sotaxable_employment_incomecharged no income tax onstatutory_paternity_pay. National Insurance already fell on it:ni_class_1_incomeadds all three.Housing Benefit and Council Tax Reduction deduct all of a person's income tax and NI. They counted SSP and SMP as income, but not SPP. Every earnings definition in those schemes includes SPP:
So NI on SPP already raised those awards, and taxing SPP without counting it would raise them further. This PR:
statutory_paternity_paytoemployment_benefits, so income tax falls on it as on SSP and SMP;housing_benefit_applicable_incomeandcouncil_tax_reduction_applicable_income;housing_benefit_net_earningsand the specified-accommodation disregard. Both reademployment_benefits, so they pick SPP up with no formula change. The CTR pensioner earnings disregard readshousing_benefit_net_earnings, so it does too.The regulations leave no second reading: each scheme lists SPP in its earnings definition in terms.
Merge order
Merge after #2365. On main,
uc_individual_earned_income_before_mifleaves out SSP, SMP and SPP. Butuc_income_tax_on_earnings(which readstaxable_employment_income) anduc_national_insurance_on_earningsdeduct the tax on them. So this PR alone would raise UC by 0.55 × 20p for each pound of SPP above the personal allowance (it already rises 0.55 × 8p through NI). #2365 counts the three payments as UC earned income (UC Regs 2013 reg 55(4)). Once #2365 is on main, addstatutory_paternity_paytoTAXED_AS_WAGESin itstest_uc_statutory_pay_properties.py, because the model now taxes SPP as wages.Invariants
These hold for every input and are tested with Hypothesis in
policyengine_uk/tests/test_statutory_paternity_pay_income_tax_properties.py. The generated families are singles and couples, with 0 to 3 children, in the four nations, with wages, profit, pensions, savings, dividends, pension contributions, Plan 2 loans and Marriage Allowance claims.pension_contributions_reliefcaps relief at employment and self-employment income.employment_benefitsis SSP + SMP + SPP, andtaxable_employment_incomeis max(0, wages + statutory pay − employment deductions).Against main's variables, invariants 3, 4 and 5 fail, and so does the 20% example test. The monotonic property holds there trivially, because main doesn't tax SPP. All five pass on this branch.
Tests
YAML expected values are worked by hand from the published 2026-27 rates:
New and extended files:
gov/hmrc/income_tax/bases/employment_benefits.yaml(new):employment_benefits;housing_benefit_net_earnings.yaml:housing_benefit_applicable_income.yaml: SPP counts, less tax, NI and the £5 Sch 4 para 10 disregard (17,939.42).housing_benefit_specified_or_temporary_accommodation_disregard.yaml: SPP alone makes the claimant an employed earner, and the disregard is capped at 388.64.council_tax_reduction/council_tax_reduction_statutory_pay.yaml(new): SPP counts (18,199.42), the same as SSP.9 of the 11 new YAML cases fail on main. The other 2 use SSP only and pass on both.
Commands run on this branch:
uvx ruff@latest format --check .(ruff 0.17.0) andruff check .: clean.test_threshold_indexation.py(Class 4 lower profits limit is £11,908 in 2023-24; NICA 2022 s.2 sets £12,570 from 6 April 2023 #1968), which is unrelated.Impact
The certified enhanced FRS (uk-data 1.58.0) has no
statutory_paternity_paycolumn, and uk-data'sfrs.pysets only SSP (sspadj) and SMP (smpadj). So survey aggregates are not expected to move, and the real run confirms it.Two 2026 Microsimulations ran on the certified enhanced FRS (
enhanced_frs_2024_25.h5, sha256 5ba399ea5ab9, 52,846 households): main 3f174d0 against this branch's model commit 626f020. Both ran from clean worktrees, through the machine-wide heavy lock. Every aggregate is identical:No sample household's income tax, UC, HB, CTR or net income changes by more than 1p. Later commits change only tests and documentation. Scripts and outputs:
~/reviews/uk-spp-income-tax-2026-10-12/(impact.py,run_all.zsh,compare.py,runs/).Review
GPT-6.1 Sol reviewed b9922f5 and requested changes. Its one blocking finding: nothing enforced merging after #2365. It confirmed every legal citation and recomputed every YAML value.
Response (
~/reviews/uk-spp-income-tax-2026-10-12/review/response_2368.md): this PR stays a draft until #2365 is on main. Then this branch merges main, adds SPP to #2365'sTAXED_AS_WAGES, and adds a property that UC never rises with SPP. That property fails on a main without #2365. The non-blocking findings (citations and docstrings) are fixed in 9b97d3c.Known gaps (follow-ups, not in this PR)
household_benefits, the HBAI lists andgov_spendingdon't count SPP. Count statutory sick, maternity and paternity pay as Universal Credit earned income #2365 adds it.statutory_paternity_pay: Construct statutory paternity pay from the FRS (sppadj) policyengine-uk-data#575. The 2023-24 FRS has ansppadjcolumn, positive for 3 adults.Reproducer: policyengine_uk/tests/policy/baseline/gov/hmrc/income_tax/bases/employment_benefits.yaml::Two weeks of statutory paternity pay are taxed with wages; policyengine_uk/tests/test_statutory_paternity_pay_income_tax_properties.py::test_statutory_paternity_pay_on_the_basic_rate_bears_20_percent
axiom: TheAxiomFoundation/rulespec-uk#460 queued (ITEPA 2003 s. 660, the HB reg 35 and CTR earnings provisions are not in the corpus; each returns 404)
🤖 Generated with Claude Code