Repository navigation
Add blog post: the fuel duty cut extension in the Autumn Budget 2026 - #1459
Conversation
A household-level explainer of the Budget 2026 Pension Tax Allowance: the rules from HM Treasury's explainer, the five worked examples reproduced in PolicyEngine UK, three charts (income tax, the allowance by tax year, marginal rates) and the Pension Credit interaction. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
New posts draw charts as ```chart blocks (chart-standards.md), and the website had no line type, so this adds one: BlogLineChart.tsx draws series against a numeric x axis, with optional step series and labelled vertical markers, using ui-kit's axis, grid, tooltip and legend styles and the chart color tokens. blogChartUtils gains a thousands separator, a niceTicks option that leaves zero out of the range, and validFormat for the x axis format. The post's three charts become line blocks built from the PTA rules and checked against PolicyEngine UK at every £2 of income. The text follows the review of the dashboard's modifier (#290 at 1df76b8d): 2028-29's State Pension is rounded down to 5p a week (£13,361.40), tax starts at £13,037.75, the uprating reading is stated, and Scottish taxpayers, the full costing and the adjusted triple lock rule are added. The cover is a new title card. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Pension Credit section gets a line chart of the change in household net income in 2027-28 for a pensioner who claims Pension Credit and one who does not. Its breakpoints come from the PTA rules and PolicyEngine UK's £12,660.62 minimum guarantee, and agree with PolicyEngine UK to within £0.01 at every £2 of income. "The PTA in each tax year" now comes before "Income tax by total income". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Official parliamentary portrait of John Healey by Richard Townshend (UK Parliament, CC BY 3.0, via Wikimedia Commons), cropped to 16:9 and credited in imageCredit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Pension Credit section's chart now plots household net income for a claimant with and without the PTA, like the income tax and marginal rate charts. Line charts gain "yIncludesZero": false, which fits the y axis to levels far from zero. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Explains the Budget 2026 fuel duty measure at household level: the 5p cut kept to 1 July 2027 and the RPI rise deferred to the same date. Charts are chart blocks (a bar chart of the rate by period and a line chart of the saving by litres), checked against PolicyEngine UK. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
David Howard, "Petrol pumps at Tesco, Brent Cross", CC BY-SA 2.0, via Wikimedia Commons; cropped to 16:9, metadata removed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
The post now shows full household net income for three example households, with Universal Credit, Pension Credit, Housing Benefit and Council Tax Reduction unchanged, and says that marginal rates do not change. The cover is a PolicyEngine title card of the rate path, so it needs no photo credit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Pension Credit: use the 2027-28 minimum guarantee uprated by earnings (£247.30 a week; the April 2027 State Pension rise of 3.9% is earnings growth, above September 2026 CPI of 3.5%), not the model's CPI projection. - Worked examples: add a net income table that shows how the PTA passes through to Pension Credit, Housing Benefit and Council Tax Reduction. - Charts: a point every £100 for the tooltip; the net income chart starts at £0; the marginal rate chart shows the effective rate from household net income, as marginal_tax_rate does, not the income tax rate. - Text: who gets the PTA, the 500,000 and 290,000 counts, the Scottish rule from the explainer, non-transferability, the costing's signs and its no-behaviour assumption, qualified "pays no income tax", the 52-week and rounding assumptions, the 6 October State Pension age test, and the simplified worked examples. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…' into claude/fuel-duty-post-ffda8b
A tax letter showing £0.00, pound coins, a teacup and reading glasses in the PolicyEngine teal palette, drawn as SVG and rendered to WebP. It replaces the portrait, so the photo credit goes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Marker labels move to a strip above the plot area, one row per marker, so they no longer cross the data lines. The income tax chart now spans £12,400 to £13,500, like the net income and marginal rate charts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
State that the pre-Budget April 2027 rate of 60.59p is an assumption and give the result on PolicyEngine UK's own 59.75p; note the tax-year and fiscal-year difference; put source quotes in our own words and drop the spelled-out arithmetic; plot the saving every 100 litres, checked against PolicyEngine UK at each point; state the example households' rent, council tax and State Pension inputs; merge the latest line chart fixes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A mixed-age couple claims Universal Credit, which counts pension income before income tax (UC Regs 2013 reg. 66), so the PTA leaves it unchanged and the couple keeps the full PTA. The post notes the Marriage Allowance case and the earnings case the model does not capture. The chart source lines no longer repeat the Pension Credit estimate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Married couples keep the Marriage Allowance, which already removes the older partner's tax, so the PTA gives nothing. Unmarried couples keep the full PTA on pension income; on earnings, Universal Credit now takes back 55p of each £1, because the model passes the PTA into the tax that UC deducts from earnings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@PavelMakarchuk, I've checked e3a4bee; the post is the same at 6df8990. Every point from my 16:11 comment is fixed. There's one wording change left, plus a correction of my own. One change: the pensioner doesn't get Pension CreditThe appendix says the pensioner "claims Pension Credit and Housing Benefit". On the October scenario they get no Pension Credit. Their income for it is £12,944, above the £12,761 guarantee, and the table rightly lists none. Suggested wording: "...pays £7,800 in rent and £1,600 in council tax, and gets Housing Benefit and Council Tax Reduction; their income is above the Pension Credit guarantee, so they get no Pension Credit." Correction to my 15:45 commentI said the Budget's words are "35 million individual motorists – and businesses across the UK", so the 35 million counts motorists only. The Budget uses both forms:
Your current wording follows the first and is fine. But the Budget doesn't settle whether businesses are inside the 35 million, so "counts motorists only" was too strong. Checked at e3a4bee
With the Pension Credit wording fixed, I have nothing else on the fuel duty content. Whether the population section goes out today is for Max and Vahid. #1459 merges after #1457, which it is stacked on. 🤖 Generated with Claude Code |
Their income after tax (£12,943) is above the October guarantee (£12,761), so the table lists Housing Benefit and Council Tax Reduction only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@PavelMakarchuk, Max wants the explainer posts merged today so the dashboard's Policies tab can link them. Is it OK to merge this post at 42a6de0?
A "yes" here is enough. I'll squash-merge on it, after #1457, once CI is green. 🤖 Generated with Claude Code |
|
@PavelMakarchuk, a correction to my 16:29 comment. Your OK is still needed, but it isn't enough on its own. Merging this post also needs Max's yes, for this PR and for whether the costing section goes out before the dashboard approves fuel duty. The coordinator will put both to him after the webinar. In the meantime, once #1457 is in, I'll merge origin/main into this branch and check the figures against #290. I won't merge until Max has said yes. 🤖 Generated with Claude Code |
…1462) * Add a line chart type for blog posts, and valueLabels for bar charts BlogLineChart.tsx draws series against a numeric x axis, with step series, markers labelled in a strip above the plot, an x axis format, a y axis fitted to the data on request, and a y axis width that follows the tick labels. blogChartUtils gains a thousands separator, a niceTicks option that leaves zero out, and validFormat. Bar charts take "valueLabels": false when several series make the labels overlap. chart-standards.md documents both. Used by the Budget 2026 posts (#1457, #1459). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Keep line chart axis labels, axis title and legend apart The first x tick label no longer touches the lowest y tick label at the plot's corner, and the legend sits clear of the x axis title. Checked on every chart in the PTA post at 1280 and 375 pixels wide. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…-ffda8b # Conflicts: # app/src/data/posts/articles/pension-tax-allowance.md # app/src/data/posts/posts.json
…370e The two decile charts held the 0d9dccb2 preview's values, from before the October detailed-table inputs. These are the dashboard's own DistributionalImpactCalculator and WinnersLosersCalculator on fuel_duty_rise_deferral at 9b98370e, the bundle's certified data and the October forecast. They are stored to 3 dp (pounds) and 5 dp (shares), so the charts' toFixed rounds once. Shown values that change: decile 2, 2026-27, £7 to £8; decile 7, 2027-28, £20 to £19; decile 10's 2027-28 share, 0.015% to 0.014%, as the text says. Every other bar, and every figure in the text, is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@PavelMakarchuk, I pushed one commit to this branch: be1b1cf, on top of your merge of main (da89d29). It changes only the two decile charts'
When Vahid freezes #290, I'll check that nothing feeding the fuel measure has changed since 9b98370e, and rerun if anything has. 🤖 Generated with Claude Code |
…-ffda8b # Conflicts: # app/src/data/posts/posts.json
|
@PavelMakarchuk, Max has said yes to merging this post today, with the costing section as it is, once you OK it.
If you're happy, reply here with "OK to merge". I'll then approve and squash-merge at the head you OK. If you'd rather change something first, push it and say so; I'll recheck and merge that head instead. The final dashboard regeneration hasn't been published yet. When it is, I'll check the post's figures against it, and fix anything that moves in a follow-up PR. 🤖 Generated with Claude Code |
|
OK to merge at 0ddbe9b, given Max's yes. |
MaxGhenis
left a comment
There was a problem hiding this comment.
Approving at 0ddbe9b on Max's yes (relayed by the coordinator: "Yes, once Pavel OKs") and Pavel's OK (6476100182). Checked: every microsimulation figure in the post against the dashboard's final fuel duty receipt (test link revision 28, artifact e077f8d4, built at #290's freeze head 4de166f0; no displayed figure differs), whole-pound rounding, the household examples on the October scenario, and CI (all checks pass at this head). The post is unchanged since be1b1cf; 0ddbe9b only merges main.
🤖 Generated with Claude Code
PolicyEngine's post "The fuel duty cut extension in the Autumn Budget 2026" is live (PolicyEngine/policyengine-app-v2#1459), so its card links it as "Our explainer". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Draft Autumn Budget 2026 savings/property and trading explainers * Add provisional dashboard population results to draft explainers * Clarify income bands and prepare draft review handoff * Add a line chart type for blog posts, and valueLabels for bar charts BlogLineChart.tsx draws series against a numeric x axis, with step series, markers labelled in a strip above the plot, an x axis format, a y axis fitted to the data on request, and a y axis width that follows the tick labels. blogChartUtils gains a thousands separator, a niceTicks option that leaves zero out, and validFormat. Bar charts take "valueLabels": false when several series make the labels overlap. chart-standards.md documents both. Used by the Budget 2026 posts (#1457, #1459). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Keep savings/property post and shared analysis in base draft * Keep line chart axis labels, axis title and legend apart The first x tick label no longer touches the lowest y tick label at the plot's corner, and the legend sits clear of the x axis title. Checked on every chart in the PTA post at 1280 and 375 pixels wide. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Pin Budget paragraph citations and record latest review decisions * Round savings/property worked table to whole pounds * Flag pending replacement of regenerated national results * Align budget explainers with PTA forecast and chart methodology * Add illustrated savings and property cover * Clarify cover image provenance * Split property income tax explainer from savings draft * Clarify property sources and shared household methodology * docs: clarify budget household generator scope * docs: add property microsimulation to Budget explainer * docs: address property microsimulation review feedback Clarify the timing comparison and landlord residence. Remove internal review notes and uncleared reach, poverty and inequality outputs while retaining verified national revenue and decile results. * docs: remove withdrawn microsimulation previews Drop the old combined savings/property and trading preview aggregates, their verifier and public references. Keep the approved property-only revenue and decile microsimulation unchanged. * docs: remove internal review-status wording * docs: compare property estimate with the OBR's income tax line Max's rule (28 Oct): cite primary sources. Compare PolicyEngine with the income tax line of measure 61 in the OBR's detailed policy table (Table 1.1, policy.xlsx sha256 cdcc2a06): 0, 0, 539, 394, 403, 412 £m. Table 6.1's total (the lines rounded to the nearest £5m) stays as context, and the other lines are named by the table's own labels. From 2029-30 the estimate is 9%, 10% and 11% above that line (unrounded figures). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: say the OBR income tax line is the closest comparison, not the same scope Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: broaden property explainer key figures heading * docs: say 'exceeds' rather than 'is above' (style) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: dashboard line covers the Budget measures we model Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: PavelMakarchuk <pavel.ma99@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Max Ghenis <mghenis@gmail.com>
* Draft Autumn Budget 2026 savings/property and trading explainers * Add provisional dashboard population results to draft explainers * Clarify income bands and prepare draft review handoff * Add a line chart type for blog posts, and valueLabels for bar charts BlogLineChart.tsx draws series against a numeric x axis, with step series, markers labelled in a strip above the plot, an x axis format, a y axis fitted to the data on request, and a y axis width that follows the tick labels. blogChartUtils gains a thousands separator, a niceTicks option that leaves zero out, and validFormat. Bar charts take "valueLabels": false when several series make the labels overlap. chart-standards.md documents both. Used by the Budget 2026 posts (#1457, #1459). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Keep savings/property post and shared analysis in base draft * Keep line chart axis labels, axis title and legend apart The first x tick label no longer touches the lowest y tick label at the plot's corner, and the legend sits clear of the x axis title. Checked on every chart in the PTA post at 1280 and 375 pixels wide. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Add standalone trading allowance explainer with UC and sole-trader cases * Pin Budget paragraph citations and record latest review decisions * Use agreed UC example and cite the Budget trading paragraph * Round savings/property worked table to whole pounds * Round sole-trader worked table to whole pounds * Flag pending replacement of regenerated national results * Mark national snapshot as awaiting reconciled replacement * Align budget explainers with PTA forecast and chart methodology * Match trading explainer to PTA structure and line charts * Trading allowance post: cut the model's national figures until the final run The national figures came from preview run 230c4665427e0bb1, which the final regeneration replaces, so they are cut (MERGE.md gate 2). The Treasury costing keeps Table 6.1 row 15 and the timing explanation, and links the dashboard for PolicyEngine's estimate, whose 2027-28 figure is marked not comparable (Self Assessment timing, mapping.csv). Also drops the draft review note and the sentence about a proposed dashboard example the dashboard does not have, links the dashboard's canonical URL and the analysis folder on main, and names the lone parent in the £1,500 limitation case. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Trading allowance post: name PolicyEngine's estimates where the cut left them implicit After the national figures were cut, say whose estimates the coverage limits describe, drop the claim that the dashboard already shows the cost, describe Table 6.1's 2027-28 entry as no receipts effect, and name the baseline and reform in the methodology. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Clarify trading allowance exclusions and dashboard introduction * Format merged blog metadata * Add illustrated trading allowance cover * Add illustrated savings and property cover * Clarify cover image provenance * Split property income tax explainer from savings draft * Clarify property sources and shared household methodology * docs: clarify budget household generator scope * Trading allowance post: remove the unused SVG cover posts.json uses uk-autumn-budget-2026-trading-allowance/cover.webp, and nothing in the repository references the SVG. #1460 removed its unused SVG the same way. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: add property microsimulation to Budget explainer * docs: address property microsimulation review feedback Clarify the timing comparison and landlord residence. Remove internal review notes and uncleared reach, poverty and inequality outputs while retaining verified national revenue and decile results. * docs: remove withdrawn microsimulation previews Drop the old combined savings/property and trading preview aggregates, their verifier and public references. Keep the approved property-only revenue and decile microsimulation unchanged. * docs: remove internal review-status wording * docs: compare property estimate with the OBR's income tax line Max's rule (28 Oct): cite primary sources. Compare PolicyEngine with the income tax line of measure 61 in the OBR's detailed policy table (Table 1.1, policy.xlsx sha256 cdcc2a06): 0, 0, 539, 394, 403, 412 £m. Table 6.1's total (the lines rounded to the nearest £5m) stays as context, and the other lines are named by the table's own labels. From 2029-30 the estimate is 9%, 10% and 11% above that line (unrounded figures). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: cite the OBR's policy breakdown for the trading costing Compare with the government's costing, certified by the OBR, on the Income tax and NICs lines of the OBR's Table 1.1 (measure 15), which match the taxes the post's examples cover: 221, 165, 171 and 178 £m from 2028-29. Table 6.1's rounded total stays as context, with the other lines named by the table's own labels (about £2m a year). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: say the OBR income tax line is the closest comparison, not the same scope Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: define NICs and quote Table 1.1's line labels in the trading costing Review fixes: the 93% income tax share holds from 2028-29 (the line is zero before), NICs is spelled out at first use, the other lines carry the table's own labels in quotes, and the policy costings are noted as showing Table 6.1's rounded figures. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: broaden property explainer key figures heading * docs: point to the dashboard for the Budget measures we model Production doesn't show the trading allowance until the dashboard's next deploy, so the line no longer says the dashboard has "this" measure; same wording as the property post's fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: PavelMakarchuk <pavel.ma99@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Max Ghenis <mghenis@gmail.com>
Summary
Adds a UK blog post that explains the Budget 2026 fuel duty measure step by step at household level: the 5p cut kept to 1 July 2027 and the planned RPI rise deferred to the same date. The main Autumn Budget dashboard does not show the measure by date or by litre.
Base: this PR is stacked on #1457 (
pavel/pension-tax-allowance-post), because the post uses thelinechart type that #1457 adds. The branch merges #1457's latest head (5b6eb05). Retarget it tomainafter #1457 merges.Post
household_net_incomefor a single earner, a couple with two children on Universal Credit, and a pensioner on Housing Benefit, Council Tax Reduction and Pension Credit. Net income rises by exactly the duty and VAT saving; no benefit, income tax or NI amount changes. Effective marginal rates are the same before and after, so there is no MTR chart.barchart of the rate by period, before and after the Budget, and alinechart of the saving by litres (a point every 100 litres).fuel_duty_rise_deferral(Vahid, commit 0d9dccb2, generated 28 Oct 14:30 UTC,ab2026-local-previewmanifest; the four CSVs match the receipt's SHA-256 hashes), the same source Autumn Budget 2026 property income tax explainer #1460 uses. −£301m and −£521m (static, household fuel, incl. VAT) beside Table 6.1, with the scope, timing, behaviour and VAT differences from María's and Vahid's Create Donate page #290 notes; average gain £10.33 and £17.77 per household; 61% and 73% of people affected; two bar charts by income decile (£ and % of income); poverty unchanged because HBAI income does not deduct taxes on spending. Max asked for this section on Add blog post: the Pension Tax Allowance in the Autumn Budget 2026 #1457. Replace these figures when the dashboard publishes its final run.Method
pe.uk.calculate_household(policyengine 6.11.1, policyengine-uk 2.151.0) with two dated parameter reforms ongov.hmrc.fuel_duty.petrol_and_diesel, one per path. The engine day-weights the rates over each tax year (fiscal_year_blend). VAT is 20% of the duty change, as inpump_vat_on_fuel_duty_deferralin PolicyEngine/uk-autumn-budget-dashboard-2026#290; for the net income table a structural reform lowersvatby that amount, so it flows throughvat_changeintohousehold_net_income, as the dashboard'sapply_vat_base_changedoes. Rates and dates matchfuel_duty_rise_deferralthere (FUEL_DUTY_FROZEN_UNTIL = "2027-07-01"). The chart values agree with PolicyEngine UK to within £0.01 at every 100 litres from 0 to 2,500, in both tax years.The net income table and the marginal rate check run on the dashboard's OBR October 2026 forecast (
forecast/__init__.pyandobr_october_2026.jsonat 069203c4, applied as a scenario before data load, aswith_forecastdoes). The 2027-28 values are the same on the March 2026 forecast; from 2028-29 the forecasts differ, but the post's figures stop at 2027-28.Consistency with other work: the rates and dates match PolicyEngine/policyengine-uk#2715 (Max, draft: 52.95p to 30 June 2027, then the RPI step on 1 July 2027 that used to fall on 1 April) and the dashboard's 60.59p (Vahid, d442ef77). The dashboard's own population cost (−£301m and −£521m against the Treasury's −£575m and −£780m) is a gap under investigation on #290; the post cites only the Treasury.
An independent audit recomputed every number and reran the model; it found no numeric errors. Its wording points (the April 2027 assumption, tax year vs fiscal year, HODA citation, net income definition, stated inputs, other fuels, rural relief pass-through) are fixed.
Checks
tsc --noEmitis clean. No TypeScript files change. Prettier is clean on the article andposts.json.To review
🤖 Generated with Claude Code