Repository navigation
Charge income tax on statutory paternity pay - #2368
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>
#2019 now measures net employed earnings from employment_income alone, and takes the income tax payable on them as the top-slice tax without anyone's employment income. Statutory sick, maternity and paternity pay are earnings of an employed earner (SPC Regs 2002 reg. 17A(2)(h) and (i)), so list them once, in gov.dwp.pension_credit.guarantee_credit.statutory_payments, and read the list in all three places that need employed earnings: pension_credit_earnings, the Sch VI disregard's net earnings, and the top-slice tax (whose branch now zeroes the statutory payments with employment income). earnings_sources is back to employment and self-employment income. Property tests: - drop the temporary point-count prints; - the Housing Benefit differential draws only SSP and SMP until #2368 counts statutory paternity pay in HB, and excludes savings-credit-only awards, whose HB income is the Pension Credit assessment plus the savings credit (HB (SPC) Regs 2006 reg 27); - the move-between-wages-and-pay property checks Pension Credit quantities only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#2464 added employer-paid Statutory Sick Pay and Statutory Maternity Pay (employment_benefits) to relevant UK earnings for pension tax relief, in line with FA 2004 s. 189(2) and HMRC PTM044100. Update the pension tax relief page and the STBM comparison table to match, and note that Statutory Paternity Pay still waits on #2368. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Adoption hand-off for the UK hub Head: Changed: retained SPP income tax/HB/CTR fixes; completed Tests: 0 runtime tests run, because the explicit gate failed (latest load1 67.19; free disk 51.33 decimal GB from Interpretation: SPP is explicitly taxable and employed earnings; no new ambiguous legal reading. The UC non-increase property excludes Marriage Allowance cliffs and childcare openings and allows a final-award rise on a new benefit-cap exemption, matching the existing reg. 55/82 specifications. Open items: focused income-tax/UC property and tax/HB/CTR/UC YAML validation with |
Aggregate impact on certified data: passBase Checks: 0 broken by this change, 1 failing on both sides, 0 fixed. Moves flagged for review: 0 (thresholds in Notes
Moves flagged for reviewNone. Spending by benefit and service
Caseloads
Household net income by decileNo household's net income changes in any year. No change in any year: receipts by tax head; government balance, each component counted once; model totals; household income totals; population; poverty rates; people in poverty; inequality; mean household net income in each side's own deciles; standard reform costings (change in gov_balance); standard reforms: change in each reform's target. Checks failing on both base and head (1)
Counted-once checkEach of 84 components was raised by £1 per unit in 2026-27, and every head of its totals was read household by household: its own head must rise by exactly £1, no other tax head may move, no other benefit may rise, and the model's own total must move by what its heads moved. A head that breaks a rule is measured again twice: with every other head held at its baseline value, and with every other head held at its value after the first £1 while the component rises again. It fails where either still shows the response. 0 failed; 0 were skipped. Provenance
Dataset: Receipts by tax head: head levels
Spending by benefit and service: head levels
Caseloads: head levels
Government balance, each component counted once: head levels
Model totals: head levels
Household income totals: head levels
Population: head levels
Poverty rates: head levels
People in poverty: head levels
Inequality: head levels
Mean household net income in each side's own deciles: head levels
Standard reform costings (change in gov_balance): head levels
Standard reforms: change in each reform's target: head levels
|
|
Merged by the UK hub (Claude session 8e19f9d5) at head
|
Brings in #2368, which adds statutory paternity pay to employment_benefits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Resolves three conflicts with #2368, which taxes statutory paternity pay and counts it as Housing Benefit earnings: both docstrings now name paternity pay and the tax before the winter fuel payment charge, and the net earnings tests keep #2368's two paternity pay cases and this branch's charge case. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#2368 taxes statutory paternity pay, so it is in total income, and with this branch's charge a pound of it can take total income over £35,000 and raise income_tax by the whole winter fuel payment. The bound in test_statutory_paternity_pay_income_tax_properties.py now reads income_tax_before_winter_fuel_payment_charge, names the charge as an intended cliff next to Marriage Allowance, and a new case checks the cliff: £35,000 of pension and savings plus £1 raises income tax by £200.20, 20p before the charge. total_income_charged_to_tax no longer says the model does not tax statutory paternity pay, and the changelog and the Pension Credit statutory pay test's docstring now say that it does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fixes #2367
Statutory paternity pay (SPP) is taxable under ITEPA 2003 s. 660 Table A. This PR adds it to
employment_benefitsso it is taxed with statutory sick and maternity pay. It also counts SPP in Housing Benefit and Council Tax Reduction applicable income, whose earnings definitions explicitly include it, so deducting its tax does not spuriously increase those awards.The prerequisite #2365 is merged (
b8ca8faa) and is included through a merge of current main. The required UC follow-up is complete: SPP is inTAXED_AS_WAGES, and an explicit SPP-only Hypothesis property checks that raising it cannot increase pre-cap UC. The final award may rise when additional earnings newly exempt a family from the benefit cap; Marriage Allowance cliffs and childcare-element openings are excluded from this property, as in the existing statutory-pay specifications. A pinned lone parent on £20,000 wages with £388.64 SPP ensures positive awards and a real tax increase/UC decrease.A new hand-calculated UC YAML case checks £20,000 wages plus £2,000 SPP: income tax £1,886; Class 1 NI £754.40; net earned income £19,359.60; UC £10,516.50. The same family without SPP gets £11,308.50. The existing income-tax, HB and CTR YAML/property cases are retained.
Merge conflicts were resolved by preserving main’s shared HB net-earnings helper and pension-deduction regression cases while retaining the SPP changes.
employment_benefits.pymerged cleanly with all three payments. The helper and UC documentation now mention SPP. No new edits tosimulation.pybeyond the merge from main.Validation at the adoption head: changed Python lint passed;
uvx ruff format --check .passed (1,943 files). Runtime tests: 0 run. The required resource gate failed repeatedly: load1 remained below 110, but free disk fromos.statvfswas 51.33 decimal GB against a minimum of 55 GB. Queued: statutory-paternity income-tax properties, UC statutory-pay properties, and the focused income-tax/HB/CTR/UC YAML cases, all under pytest with two workers. Locked venv uses policyengine-core 3.33.2.Open items: gated runtime validation, CI, and hub independent review. The original PR’s historical survey impact run was not repeated by this adoption job. No microsimulation or dataset build was started. The PR remains draft; the hub owns landing.
Reproducer:
policyengine_uk/tests/policy/baseline/gov/hmrc/income_tax/bases/employment_benefits.yaml,policyengine_uk/tests/test_statutory_paternity_pay_income_tax_properties.py::test_statutory_paternity_pay_on_the_basic_rate_bears_20_percent,policyengine_uk/tests/test_uc_statutory_pay_properties.py::test_uc_does_not_increase_as_statutory_paternity_pay_risesaxiom: TheAxiomFoundation/rulespec-uk#460 queued in the original PR.