Skip to content

Charge the winter fuel payment back through income tax, person by person - #2066

Draft
MaxGhenis wants to merge 2 commits into
winter-heating-per-person-receiptfrom
winter-fuel-payment-charge
Draft

MaxGhenis wants to merge 2 commits into
winter-heating-per-person-receiptfrom
winter-fuel-payment-charge

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 2, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Models the winter fuel payment charge (ITEPA 2003 s.681I, inserted by FA 2026 Sch 10, from 2025-26) person by person, for the Winter Fuel Payment in England, Wales and Northern Ireland and for Scotland's Pension Age Winter Heating Payment. The payments are now paid in full to everyone entitled, and the charge recovers them through income tax.

Stacked on #2038 (→ #2027 → #2013 → #2001 → #1896).

The law

  • P is liable if entitled to a winter fuel payment for the qualifying week and P's total income for the tax year exceeds £35,000 (s.681I(1)).
  • The charge equals the payment (s.681I(3)). There is no taper.
  • P is not liable if entitled to Income Support, income-based JSA, Pension Credit, income-related ESA or Universal Credit on any day in the qualifying week (s.681I(4), (5)).
  • "Winter fuel payment" covers payments under SI 2025/969, SSI 2024/351 and NISR 2025/142 (s.681I(6)(a)).
  • The charge is additional tax at Step 7 of the income tax calculation: ITA 2007 s.30(1) lists "Chapter 9 of Part 10 of ITEPA 2003 (winter fuel payment charge)", and s.23 Step 7 adds it after the Step 6 tax reductions.

What was wrong

On #2038 a household test stood in for the charge: a person not on a relevant benefit was paid only if some member of pensionable age in the household had total income under £35,000, in England and Wales only.

  1. The charge looks at P's own total income. The test let a whole household through on one low-income member, and charged nobody whose household had one.
  2. The boundary is "exceeds £35,000". The test excluded income of exactly £35,000.
  3. Northern Ireland pays everyone of pensionable age from 2025 (NISR 2025/142 reg 2) and the charge applies there. The model paid NI pensioners not on a relevant benefit nothing.
  4. PAWHP was not charged at all.

Design: an income tax charge, not a net payment

The charge could be netted off each person's payment, or added to income tax. This PR adds it to income tax.

  • The statute makes it income tax. s.681I(1) creates "a charge to income tax", and ITA 2007 s.30 makes it Step 7 additional tax. The regulations still pay everyone of pensionable age in full (SI 2025/969 reg 2; NISR 2025/142 reg 2; SSI 2024/351 as amended).
  • The model already treats the neighbouring charge this way. The high income child benefit charge (ITEPA Pt 10 Ch 8, also in s.30) is CB_HITC inside income_tax, with child_benefit kept gross.
  • Each government's line stays its own. gov_spending counts what DWP, the Department for Communities and Social Security Scotland pay, and gov_tax counts the UK income tax charge. Netting would show an income tax receipt as lower Scottish spending on PAWHP.
  • Entitlement comes before the charge. The shared amounts depend on "living with a person entitled to a winter fuel payment". A person charged in full is still entitled, so the gross payment has to exist in the model either way.

What the choice changes, against netting:

  • household_net_income and hbai_household_net_income are the same under both. Each counts the payment and deducts the tax.
  • The split moves. household_benefits, hbai_benefits and gov_spending carry the gross payment. household_tax, income_tax and gov_tax carry the charge. In 2025 that is £304m on each side.

Two consequences of putting it in income tax:

  • The means tests deduct income tax before the charge. Pension Credit, Income Support, Housing Benefit, Council Tax Reduction, Universal Credit earned income and the three benefit-cap earnings tests deducted income_tax (or tax). They now deduct income_tax_before_winter_fuel_payment_charge. The charge depends on Pension Credit and Universal Credit receipt, so deducting it would make the model circular (the core raises CycleError). It also is not tax on the income those tests assess: it is the payment, recovered. The Enhanced FRS run confirms no means-tested award moves (see below).
  • PAWHP has to count as household income. pawhp was in gov_spending but not in household_benefits, hbai_household_net_income or hbai_benefits. Left out, the charge on PAWHP would lower a Scottish household's income with no payment to set it against. This PR adds it to all three. Count the Pension Age Winter Heating Payment in household and HBAI income #2047 adds the same three lines in the same places, so whichever merges second merges cleanly.

Changes

  • winter_fuel_payment_charge (person): the person's winter_fuel_payment plus pension_age_winter_heating_payment, when their own total_income exceeds the threshold and they are on none of the s.681I(5) benefits.
  • income_tax = income_tax_before_winter_fuel_payment_charge (the previous formula) + winter_fuel_payment_charge.
  • New parameters under gov.hmrc.income_tax.charges.winter_fuel_payment: in_effect (true from 2025), income_threshold (£35,000), relevant_benefits.
  • gov.dwp.winter_fuel_payment.eligibility.require_benefits is false from 2025, so the Winter Fuel Payment reaches everyone of pensionable age in England, Wales and Northern Ireland.
  • gov.dwp.winter_fuel_payment.eligibility.taxable_income_test is deprecated, not removed. A reform that sets a missing parameter fails to load, so both parameters stay. The test is off from 2025 and has effect only in a reform that also sets require_benefits to true. Its limit now admits total income equal to it. A saved reform that only moved maximum_taxable_income no longer does anything: the lever for the threshold is now gov.hmrc.income_tax.charges.winter_fuel_payment.income_threshold.

Invariants

  1. The charge is 0 or the whole payment, never more than the payment.
  2. income_tax − income_tax_before_winter_fuel_payment_charge = winter_fuel_payment_charge, for every person.
  3. Nobody's payment depends on anybody's income. Incomes change only the charge.
  4. No charge before 2025, on anyone on a relevant benefit, or on anyone not entitled to a payment.
  5. The charge is not monotone in income by design: it is a cliff at £35,000.

Tests

  • YAML, worked by hand from the law: tests/policy/baseline/gov/hmrc/income_tax/charges/winter_fuel_payment_charge.yaml, 20 cases. They cover the £35,000 boundary on both sides, each partner charged on their own income, a person charged in full still counting as entitled for someone else's shared amount, a lodger, a non-dependant's ESA, a Universal Credit couple, the excluded partner of a Pension Credit claimant, Northern Ireland, PAWHP at the 2025 and 2026 amounts, no charge in 2024, the charge inside income_tax, and PAWHP as household income.
  • Reform tests: reforms/parametric/winter_fuel_payment_charge/charge_parameters.yaml (a higher threshold, repeal, the charge on a universal 2024 payment, tax credits not exempting), and the deprecated household test in winter_fuel_allowance/taxable_income_test.yaml (still works when a reform requires a relevant benefit; inert otherwise).
  • Hypothesis (tests/test_winter_heating_payment_properties.py): the reference implementation now pays everyone from 2025 and computes each person's charge from s.681I. The model must match it for payments, charges and income_tax less the pre-charge liability, over households of up to three benefit units in all four countries, with incomes either side of £35,000 and exactly on it. A new property sets every income to £5,000 and then £50,000 and requires identical payments, no charge at £5,000, and the whole payment charged at £50,000 for anyone not on a relevant benefit.
  • Mutation: ten mutants, each breaking one rule (charged at exactly £35,000; household income; a household member's benefit exempting; PAWHP not charged; charged before 2025; entitlement tested after the charge; no exemption; charge left out of income_tax; Winter Fuel Payment still requiring a benefit; tax credits exempting). All ten fail at least one case. The tax-credit mutant survived until the reform case above was added.
  • Circularity: with pension_credit_income deducting income_tax, the core raises CycleError on income_tax@2025.
  • Means-test tests: four existing files entered income_tax or tax to drive a means test. They now enter income_tax_before_winter_fuel_payment_charge, with the same expected values.
  • Full suites on eeb4698a8: YAML 1,644 passed. pytest: PYTEST_RESULT

Impact: Enhanced FRS

Real Enhanced FRS microsimulations on a private copy of enhanced_frs_2024_25.h5 (sha256 e433e532b17b…), 2024 to 2030, one run per package state: #2038 head 071d5170b, #2047 head 27f5fdb0f and this branch eeb4698a8. Aggregates only.

Year Winter Fuel Payment paid (£m) PAWHP paid (£m) Charge (£m) People charged gov_spending (£m) gov_tax (£m) gov_balance (£m) Household net income vs #2047 (£m) Household net income vs #2038 (£m)
2025 1,701 → 1,898 201 304 2.02m +197 +304 +107 -107 +94
2026 1,698 → 1,905 209 331 2.22m +207 +331 +124 -124 +85
2027 1,692 → 1,912 214 347 2.31m +219 +347 +127 -127 +87
2028 1,678 → 1,919 220 367 2.47m +242 +367 +126 -126 +94
2029 1,671 → 1,928 225 387 2.59m +257 +387 +130 -130 +95
2030 1,662 → 1,937 231 407 2.73m +274 +407 +133 -133 +97

The two net-income columns differ only by PAWHP being counted as income, which #2047 also does. Against #2047 the change is the charge alone. Against #2038 it also includes the PAWHP that was missing from household income (£201m in 2025). 2024 is the control: nothing changes against #2047, and against #2038 only the £34m of PAWHP newly counted.

2025 by country, against #2047:

Country Payments, before → after (£m) Charge (£m) People charged Household net income (£m) Households gaining Households losing
England 1,567 → 1,715 231 1.61m -83 0 685k
Wales 107 → 128 25 142k -4 0 39k
Scotland 201 → 201 44 237k -44 0 228k
Northern Ireland 26 → 55 4 25k +24 121k 0
  • England and Wales. The losers are households the old test let through on one lower-income member while another member has total income over £35,000. That member is now charged. Nobody gains: where the old test failed, everyone of pensionable age not on a relevant benefit is now paid and charged in full.
  • Northern Ireland. Pensioners not on a relevant benefit are now paid, and those over £35,000 are charged.
  • Scotland. PAWHP is charged for the first time.
  • The threshold is fixed in cash. The number charged grows from 2.02m in 2025 to 2.73m in 2030 as incomes rise against £35,000. s.681J lets the Treasury change it by order; none is modelled.
  • Split. In 2025 household_benefits and hbai_benefits rise by £197m against Count the Pension Age Winter Heating Payment in household and HBAI income #2047 (the extra Winter Fuel Payments) and income_tax by £304m.
  • Means tests. No Pension Credit, Universal Credit, Income Support, ESA, JSA, Housing Benefit, Council Tax Reduction, tax credit or benefit-cap amount moves in any year. The largest change in any benefit unit's award is 0.4p, which is float32 rounding.
  • Poverty, 2025, against Count the Pension Age Winter Heating Payment in household and HBAI income #2047. Pensioner poverty after housing costs 12.50% → 12.49%; before housing costs 13.46% → 13.45%.
  • By income decile, 2025, against Count the Pension Age Winter Heating Payment in household and HBAI income #2047 (mean change per household, £ a year, deciles 1 to 10): +0.40, +1.04, +1.50, +1.16, -1.78, -1.73, -8.81, -9.07, -17.02, -2.89.

A household counts as gaining or losing when its net income moves by £1 or more. The model computes in float32, so a payment charged back in full can leave a few pence either way.

Scripts and outputs are in ~/reviews/winter-fuel-payment-charge-2026-10-02/impact (dataset_impact.py, compare_impact.py, branch_vs_base.md, branch_vs_base2047.md).

Axiom

axiom: uk/statute/ukpga/2003/1/681I TheAxiomFoundation/rulespec-uk#420 queued. s.681I is not in the corpus and no rulespec-uk module encodes it; the issue now carries (comment) the module path, the verbatim law, the required outputs, a review_finding and 15 companion tests from the same ground truth as the YAML here.

Notes for merging

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits October 2, 2026 07:45
ITEPA 2003 s.681I (FA 2026 Sch 10, from 2025-26) charges a person entitled
to a winter fuel payment the whole payment when their own total income
exceeds £35,000 and they are not entitled to IS, income-based JSA, Pension
Credit, income-related ESA or UC. It covers the Winter Fuel Payment in
England and Wales (SI 2025/969) and Northern Ireland (NISR 2025/142) and
Scotland's Pension Age Winter Heating Payment (SSI 2024/351).

- winter_fuel_payment_charge (Person) under gov.hmrc.income_tax.charges,
  added to income_tax after tax reductions (ITA 2007 s.23 Step 7, s.30).
- Payments stay gross; from 2025 the WFP pays everyone of pensionable age
  (require_benefits false), so entitlement, and the shared amounts, come
  before the charge.
- Means tests deduct income_tax_before_winter_fuel_payment_charge: the
  charge recovers a payment, and it depends on PC/UC receipt.
- pawhp counts in household_benefits and HBAI income, like the WFP.
- The household income test is deprecated (off from 2025; boundary <=).

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

ITEPA 2003 s.681I(5) lists five relevant benefits and no tax credits. A
mutant that exempted tax credit recipients survived the other cases.

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

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