Repository navigation
Update the pension tax relief docs page (#704) - #1721
Conversation
8a85069 to
486961e
Compare
#704 reported four worked scenarios where the user expected higher-rate pension contributions to produce only basic-rate (20%) relief, but the model returned full marginal-rate (40%) reductions in income tax. Investigation: the model is correct. The reported numbers match HMRC's treatment in aggregate (RAS + higher-rate top-up via Self Assessment). The user's mental model only counted the first half (relief at source). Persist the explanation in a docs page covering: - how pension_contributions_relief works (reduces taxable income by the contribution amount, capped at annual allowance / basic amount / earned income / age limit), - the four #704 worked scenarios with PolicyEngine's exact returns and the marginal-rate arithmetic that produces them, - the two-part real-world mechanism (RAS + basic-rate-band extension) and why PolicyEngine reports the combined total (matches HMRC pension tax relief statistics methodology), - a note that the 0% marginal-tax-rate display reported in the issue is a frontend concern in the policyengine.org app, not the model repo, - references to FA 2004 s.188-194 and s.227, HMRC's user-facing pension tax relief guide, and pension tax relief statistics.
…elog fragment Checked every variable, parameter, path and link against main in October 2026, updated the data pipeline references to Microcosm UK, and renamed the changelog fragment to a Towncrier type. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Re-ran the four #704 cases on policyengine-uk 2.126.12 (income tax falls by £600 and £2,400, unchanged) and the £110,000 personal allowance example. Described the tapered annual allowance from its parameters, the wider contribution base for the annual allowance charge, and that the charge is added to income tax. Rewrote the marginal tax rate section: the model has its own marginal_tax_rate variable, which now returns 20% and 40% for these cases, so the reported 0% no longer reproduces. Fixed code links that pointed outside the repo, removed em dashes, and dropped the extra bullet from the changelog fragment. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
486961e to
8e28c70
Compare
Main already carries a later, reviewed version of this page (added by #2386 and revised on its branch through 20 October); the conflict resolves to main's version before the page is corrected. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main's version of the page predates #2488 (merged 20 October) and #2536 (merged 21 October). Corrections, each checked against main a45baf5: - #2488 has merged; the page no longer calls it open. - unused_pension_annual_allowance is estimated from 2020-21 (formula_2020) rather than defaulting to nil; nil for the £100k example. - Defined-benefit accrual counts through defined_benefit_pension_share and defined_benefit_pension_input_amount, not only a supplied pension_contributions_for_annual_allowance. - Relevant UK earnings are taxable employment income (less expenses) plus trading profit after capital allowances and the trading allowance, before losses (utils/pensions.py). - The annual allowance charge keeps relief-at-source contributions in income and raises the rate limits only when s. 192(4)'s condition holds (private_pension_contributions_tax.py); new £2,946 example. - s. 192(4) raises the higher rate limit too; the higher-rate top-up can be claimed outside Self Assessment and differs in Scotland. - The model gives no relief on basic-rate RAS above taxable income. - Tapered allowance minimum was £4,000 in 2020-21 to 2022-23. - marginal_tax_rate perturbs the two eldest adults in turn. - #704 gives no year or age, and its reporter expected £0 and -£1,200, so the column is the total relief; examples re-run on 2.148.2. - Replaced the released .added fragment with a .changed fragment. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From the independent review of the corrections: - The £45,000 example's £2,946 arises because s. 192(4)'s condition fails (income below the basic rate limit), so the limits are not raised; HMRC's PTM056120 states no such condition and would give £2,000. The page now says the model follows the statute (as docs/engineering/gift-aid.md does). - defined_benefit_pension_input_amount must be supplied with defined_benefit_pension_share; alone it double counts, and a share alone changes nothing (defined_benefit_input_per_contribution is 1). - The model also gives less than the 20% relief at source on contributions coming off income taxed below 20% (dividends, the Scottish starter band). - The carry-forward estimate applies s. 228A(7) to each earlier excess. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eves Second-round review, checked against FA 2004 s. 192(4)-(4A) and a household run on main: - s. 192(4) turns on tax at the higher or additional rate, so savings (from 2017-18) and dividends do not count, and the model also leaves out property income from 2027-28 (private_pension_contributions_tax.py); Scottish limits are raised under s. 192(4A). - Where only savings or dividends sit above the basic rate limit the model's deduction gives more than the 20% relief at source: £15,000 pay and £60,000 dividends with £10,000 gross contributions saves £3,648 in the model (2025-26) against £2,000 in law. - Re-wrapped two long lines. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tals Third-round review, re-run on main: where only dividends sit above the basic rate limit the model's saving can exceed the 20% in law (£15,000 pay and £60,000 dividends: £3,648 against £2,000) or fall short of it (£12,000 and £40,000: £1,307.50). The headline, the "full marginal rate" sentence, the two-mechanism section and the presentation note now hold only for income taxed at one rate; s. 192(4A) wording follows the statute. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
UK hub (Claude build session, for Max) Head: Context. A later, reviewed version of this page reached main through #2386 (merged 21 October 2026), and its Why it needed updating. Main's page predates #2488 (merged 20 October) and #2536 (merged 21 October). Review. I had a verifier extract and check every claim, and re-ran every worked example on main myself (household simulations; script Corrected (15)
Checked and correct (re-run on main 2.148.2)
Law and code checked:
Uncertain
|
Corrects the pension tax relief page (
docs/book/programs/gov/hmrc/pension-tax-relief.md), written for #704.The page itself is already on main: it shipped in #2386 (merged 21 October 2026), and its original
.addedchangelog entry was released in 2.143.0. This branch has merged main, dropped the released fragment and now carries only corrections to main's copy of the page.What this PR corrects (from its changelog fragment):
The claim-by-claim review behind these corrections, with sources, is in the "Ready for hub review" comment on this PR.
changelog.d/704-pension-tax-relief-page-corrections.changed.md(changed).🤖 Generated with Claude Code