Skip to content

Add blog post: the Pension Tax Allowance in the Autumn Budget 2026 - #1457

Merged
MaxGhenis merged 51 commits into
mainfrom
pavel/pension-tax-allowance-post
Oct 28, 2026
Merged

MaxGhenis merged 51 commits into
mainfrom
pavel/pension-tax-allowance-post

Conversation

@PavelMakarchuk

@PavelMakarchuk PavelMakarchuk commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Adds a UK blog post that explains the Budget 2026 Pension Tax Allowance (PTA) step by step. It walks through the rules, worked examples and household charts behind the PTA figures that the Autumn Budget dashboard publishes (£94, £182 and £250 full allowances), then the population results.

Depends on #1462 (the line chart type and bar chart valueLabels), which this PR is based on, so the diff here is the post only: the article, its posts.json entry and the cover.

Structure

  1. What the PTA does: eligibility, value (20% of the full new State Pension above the Personal Allowance, £94 in 2027-28; Scottish taxpayers at 20%), a non-refundable tax reduction, the income test, the £1-in-£3 taper, and the tax-year table (£94/£182/£250, ending at £13,319/£14,025/£14,567).
  2. Household impacts: the explainer's five pensioners; net income and other benefits for eight households (Pension Credit, Housing Benefit, Council Tax Reduction, Universal Credit for mixed-age couples, the TV licence for over-75s); the PTA in each tax year; income tax; net income; effective marginal tax rates.
  3. Population impacts: budgetary impact beside Table 6.1 (−£42m, −£113m, −£193m against −£45m, −£90m, −£150m), who gains (528,000 households in 2027-28, 1.07 million in 2029-30), decile charts, poverty and inequality.
  4. Assumptions and limitations, and Methodology.

Method

  • Household calculations: pe.uk.calculate_household on published policyengine[uk]==6.11.1 (policyengine-uk 2.151.0, policyengine-core 3.33.3), on the OBR's October 2026 forecast as the dashboard's with_forecast applies it (uk-autumn-budget-dashboard-2026 at 64042657), with the PTA added to that scenario.
  • The PTA reform: reduces income_tax, capped at the tax due, and also the tax Universal Credit deducts from earnings (uc_income_tax_on_earnings), which policyengine-uk computes separately (see the comment on uk-autumn-budget-dashboard-2026#290). Rules and values match budget_measures/pension_tax_allowance.py in Create Donate page #290.
  • Pension Credit 2027-28: the household examples use £247.30 a week (the 2026-27 rate uprated by 3.9% earnings growth); the population run uses the model's £245.38, as the dashboard does.
  • Population run: pe.uk.managed_microsimulation, as the dashboard's build_microsimulation does, on the certified Microcosm UK dataset the 6.11.1 bundle pins (microcosm-uk-2024-25-national-20261025T091414Z-a6299504). Static, no behavioural response.
  • Charts: breakpoints of the piecewise-linear schedules plus a point every £100; they agree with PolicyEngine UK to the penny at every £2 of income, and the effective marginal rates to within 0.04 percentage points.
  • Writing: whole pounds outside the two worked tables, as agreed for the Budget posts.

Checks

  • Post, chart and content tests pass locally.
  • Checked on a local dev server.

To review

  • Post date: 2026-10-28 18:00.
  • The cover: an original vector illustration (no licence needed).

🤖 Generated with Claude Code

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>
@vercel

vercel Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
policyengine-calculator-next Ready Ready Preview Oct 28, 2026 4:37pm UTC
policyengine-website Ready Ready Preview Oct 28, 2026 4:37pm UTC

Request Review

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>
PavelMakarchuk and others added 2 commits October 28, 2026 10:25
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>
PavelMakarchuk and others added 3 commits October 28, 2026 10:28
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>
PavelMakarchuk and others added 2 commits October 28, 2026 10:47
- 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>
PavelMakarchuk and others added 3 commits October 28, 2026 10:49
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>
@MaxGhenis

Copy link
Copy Markdown
Contributor

@PavelMakarchuk Max wants the Budget posts merged today so the dashboard's Policies tab can link them. Is it OK to merge this at 26feaea, after #1462?

Nothing from my review is open at 26feaea. Two checks remain. First, I'm running the PTA microsimulation on #290 at 9b98370e, the head the final regeneration runs from, to compare with the post's −£42m, −£113m and −£193m and its counts. Second, once #1462 merges and this PR retargets to main, CI has to pass again. If both hold, I'll mark it ready, approve and squash at 26feaea.

🤖 Generated with Claude Code

The guarantee rises with earnings (SSAA 1992 s. 150A), so every run,
household and population, uprates £238 a week by the May-July earnings
growth on the October forecast: £247.30, £254.80, £260.35. The total cost
becomes −£30m, −£82m, −£143m; 529,000, 855,000 and 1.07m households gain.
Losers (7,400 and 6,600) all leave Pension Credit and so lose its
passport to maximum Housing Benefit and Council Tax Reduction and, at 75
or over, the free TV licence; the appendix flags the model's Winter Fuel
Payment losses. The OBR coincidence note goes, as the totals now differ.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis pushed a commit that referenced this pull request Oct 28, 2026
…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>
The population run at 45a700b used an earnings-uprated Pension Credit
guarantee, so its total cost (−£82m/−£143m), households gaining, losers
and decile charts no longer matched the Autumn Budget dashboard
(#290: −£30m/−£83m/−£144m). This restores the 26feaea population
figures, appendix paragraph and OBR coincidence note, all on the
model's own guarantee, as the dashboard uses. The household examples
keep the earnings-uprated £247 guarantee, and the assumptions bullet
keeps the section 150A citation. The Winter Fuel Payment household
income note goes with the earnings-basis run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis changed the base branch from pavel/blog-line-chart to main October 28, 2026 16:30
@MaxGhenis

Copy link
Copy Markdown
Contributor

@PavelMakarchuk: I pushed bf81eaa on top of your 45a700b. It puts the population section back on the dashboard's basis, as the coordinator ruled under Max's "fix figures".

Why. The 45a700b rerun used the earnings-uprated Pension Credit guarantee (£247/£255/£260). The Autumn Budget dashboard (#290) uses PolicyEngine UK's own guarantee (£245 in 2027-28). Its PTA run gives a total cost of −£30m, −£83m and −£144m, the figures this post had at 26feaea. The post's population figures need to match the dashboard. Your household examples keep the earnings-uprated £247 guarantee, as they did before.

What changed (each back to its 26feaea value):

  • Budgetary table, total cost: 2028-29 from −£82m to −£83m; 2029-30 from −£143m to −£144m. The income tax column (−£42m/−£113m/−£193m) is unchanged.
  • Who gains: households gaining in 2027-28 from 529,000 to 528,000, and in 2028-29 from 855,000 to 860,000. Average gains in 2028-29 and 2029-30 go from £97 and £135 to £96 and £134.
  • Losers: from 7,400 and 6,600 households (with the Housing Benefit, Council Tax Reduction and TV licence split) back to about 2,700 in 2028-29 and 2,800 in 2029-30, each losing a free TV licence.
  • Both decile charts: the 26feaea values.
  • Appendix, population run: back to "its own Pension Credit guarantee (£245 a week in 2027-28), as the dashboard does", with the £12,760 to £12,807 band.
  • Comparison with the OBR: the sentence on the coincidence with PolicyEngine's total cost is back. With −£83m and −£144m it holds again.
  • Assumptions: back to "For the household examples, we apply 3.9%... £247". I kept your Social Security Administration Act 1992, section 150A citation.

Winter Fuel Payment note: removed. It came with the earnings-basis run, and it also misstates the model. In winter_fuel_payment_eligible (PolicyEngine UK 2.151.0), someone who isn't on a relevant benefit keeps the payment if anyone of pension age in their household has their own total_income at or below £35,000 (England and Wales only). That is not a test on household income.

Please hold further pushes to #1457 until it's merged. The coordinator is merging #1462 and then this PR so the post is live for Q&A. If something needs changing, comment here and I'll fold it in.

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits October 28, 2026 12:31
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… 0.00%

At 2 decimals, 18 of the 30 bars read 0.00%; at 3, 5 still read 0.000%. The data are to 4 decimals, so 4 shows every bar's value. Axis ticks keep their own decimals.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Revision 20's artifact (state_pension_income_tax_protection/db74e63711506e84) gives the decile charts and the Gini change; a run of #290 at 9b98370e on the dashboard's builders, whose gov_balance change equals that artifact's budgetary impact to 12 digits, gives the rest. Income tax 2028-29 is -£112.49m, so -£112m; households gaining 857,000 and 1.09 million at £97 and £132; losers about 1,400, 5,400 and 7,200 (2, 8 and 9 sample households), some losing a free TV licence from 2028-29; Gini falls by about 0.0001 in 2029-30.

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

MaxGhenis commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

@PavelMakarchuk: one more commit, 38cdd4a, and c9a4f38 for the losers line. It puts the remaining population figures on the dashboard's own run, so every number in the population section can be traced to it.

Sources

  • Revision 20 artifact state_pension_income_tax_protection/db74e63711506e84:
    • winners_losers.csv gives the average-change decile chart.
    • distributional_impact.csv gives the share-of-income decile chart.
    • metrics.csv gives poverty and the Gini.
  • A run of Create Donate page #290 at 9b98370e on the dashboard's builders (build_microsimulation) gives everything else. Its gov_balance change equals the artifact's budgetary impact to 12 digits, so it is the same simulation.

Changes

Item Was Now Run value
Income tax, 2028-29 −£113m −£112m −£112.49m
Households gaining, 2028-29 / 2029-30 860,000 / 1.07m 857,000 / 1.09m 856,817 / 1,090,964
Their average gain £96 / £134 £97 / £132 £96.71 / £131.85
Households losing none / 2,700 / 2,800 fewer than 10,000 in each year (c9a4f38) small sample, so no precise estimate
Decile charts earlier run artifact values e.g. 2nd decile, 2027-28: £1.54 → £1.52
Gini "less than 0.0001" "less than 0.0001 in 2027-28 and about 0.0001 in 2029-30" −0.000027 / −0.000125

Notes on the changes

  • Losers. The old line said every loser loses a free TV licence. In the run, the TV licence change is +£0.49m in 2028-29 and +£0.51m in 2029-30. That is about 2,700 households, not all the losers, so the line now says "some of them". The sample is too small for a precise count of losers, so c9a4f38 gives them as fewer than 10,000 a year.
  • Top deciles. The 2029-30 sentence on the top three deciles now says "about £1 or less", because the 8th decile is £1.16.
  • Thresholds. A household gains or loses if its household_net_income changes by more than half a penny. A person pays less tax if their income_tax falls by more than half a penny.

Unchanged, and they match:

  • total cost: −£30m, −£83m and −£144m;
  • income tax: −£42m and −£193m;
  • people paying less tax: 668,000, 1.06m and 1.36m;
  • 528,000 households gaining in 2027-28, at £56;
  • poverty: −0.01pp and −0.02pp.

All six chart blocks parse. The PR is still a draft, so it needs marking ready before the coordinator approves it.

🤖 Generated with Claude Code

The sample is too small to estimate the number of losing households precisely.

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

@MaxGhenis MaxGhenis left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving at c9a4f38 on Max's go, so Pavel can walk through the post in today's webinar Q&A. It's the first of the full explainers for each Budget measure.

  • Review. The PTA review seat reviewed the post and found no must-fix items. I reviewed the last three commits' diffs myself.
  • Figures match the dashboard.
    • Total cost is −£30m, −£83m and −£144m. That is revision 20's artifact for state_pension_income_tax_protection, and the seat's own run at #290's head reproduces the dashboard's budgetary impact to 12 digits.
    • The decile charts, poverty and Gini come from the same artifact.
    • The household counts come from that same simulation.
  • Population basis. The section uses the model's Pension Credit guarantee, as the dashboard does. The household examples keep the earnings-uprated guarantee.
  • Losers. The sentence gives no figures from small sample cells.
  • Diff. Only the post, its cover image and one posts.json entry. The chart support merged in #1462.

🤖 Generated with Claude Code

@MaxGhenis
MaxGhenis merged commit 4adc101 into main Oct 28, 2026
10 checks passed
MaxGhenis added a commit to PolicyEngine/uk-autumn-budget-dashboard-2026 that referenced this pull request Oct 28, 2026
Links state_pension_income_tax_protection's card to
https://www.policyengine.org/uk/research/pension-tax-allowance, titled
"The Pension Tax Allowance in the Autumn Budget 2026" as in app-v2's
posts.json (PolicyEngine/policyengine-app-v2#1457, merged 16:42Z).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
DTrim99 added a commit that referenced this pull request Oct 28, 2026
Resolves the posts.json conflict with the Pension Tax Allowance post
(#1457) by keeping both entries, newest first.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 28, 2026
…1459)

* Add blog post: the Pension Tax Allowance, step by step

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>

* Draw the Pension Tax Allowance post's charts as line chart blocks

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>

* Add a net income change chart and put the PTA by tax year first

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>

* Describe the worked examples by income, without the explainer's names

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

* Use the Chancellor's official portrait as the post's cover

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>

* Show net income with and without the PTA, not the change

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>

* Size the line chart's y axis to its longest tick label

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

* Move the net income chart between income tax and marginal rates

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

* Add blog post: the fuel duty cut extension, step by step

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>

* Use a Geograph photo of petrol pumps as the fuel duty post's cover

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>

* Add net income and benefit interactions, and a title-card cover

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>

* Revise the PTA post after a full review of the model and method

- 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>

* Shorten the wording on the £94 full allowance

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

* Use an original vector illustration as the PTA post's cover

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>

* Rename the PTA cover so caches load the new illustration

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

* Show the net income chart around the PTA range again, not from £0

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

* Put line chart marker labels above the plot; align the PTA chart ranges

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>

* Revise the fuel duty post after an audit and the PTA review standards

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>

* Add Universal Credit to the PTA benefits table; trim the chart sources

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>

* Split the benefits paragraph so Universal Credit has its own

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

* Show real couple cases for Universal Credit and the PTA

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>

* Explain why the fuel duty measure does not reach other programmes

Run the net income table on the OBR October 2026 forecast, as the
dashboard does (2027-28 values are the same on the March forecast), and
say why no benefit, uprating or marginal rate changes; note business
fuel use for the self-employed as out of scope.

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

* Run the PTA post on the OBR October 2026 forecast, as the dashboard does

Max's review: the 2028-29 and 2029-30 maximums came from
policyengine-uk 2.151.0's March 2026 forecast (£159, £226). Every
calculation now applies the dashboard's obr_october_2026.json growth
rates before data load, with the reform added to that scenario, so the
triple lock gives 3.4% in April 2028: the full PTA is £182 and £250, the
withdrawal ends at £14,024.40 and £14,566.40, and the Methodology names
the forecast. 2027-28 results do not change.

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

* Address Max's second review of the PTA post

- Pension Credit claimants aged 75 or over can lose up to £180: leaving
  Pension Credit ends the free TV licence. New aged-76 row and a TV
  licence column in the benefits table; the net income text says so.
- "Pays no income tax" needs income taxed at 20%: property income at
  22% leaves £8.61 on £13,036.40 (was £102.61).
- Name the dashboard's own Pension Credit guarantee on the October
  forecast (£245.38) beside the post's earnings-based £247.30.
- Drop the High Income Child Benefit Charge example; note that no other
  Budget measure is included.

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

* Add the dashboard's provisional population results for fuel duty

Cost by year beside Table 6.1, the scope, timing, behaviour and VAT
differences, the average gain and share of income by decile, the share
of people affected, and why poverty does not change. From the preview
run of fuel_duty_rise_deferral (dashboard 0d9dccb2), hash-checked.

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

* Round the PTA post's figures to whole pounds outside the worked tables

Max's rule for the Budget posts: prose, key figures and summary tables
give whole pounds; pence stay only in the two worked-example tables. The
ends of the withdrawal range round up, as the explainer's £13,319 does:
£13,319, £14,025 and £14,567.

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

* Number and simplify the benefits table; qualify the over-75 loss

Short numbered household labels with the incomes in the text above, a
dash for no change and net income in bold. The over-75 paragraph now
says the loss assumes the household needs a TV licence, and that
leaving Pension Credit can also end help the model leaves out, such as
the Warm Home Discount.

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

* Keep signs with their numbers in the PTA post's tables

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

* Apply Max's review: whole pounds, a weekly table, the Treasury gap

Round prose, headline and summary figures to whole pounds and keep pence
in the worked per-litre figures; add the saving by litres a week; explain
the gap to Table 6.1 as mainly scope, with behaviour and timing working
the other way; use the 2027-28 full new State Pension for the pensioner;
link the dashboard and Table 6.1; drop process wording.

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

* Add the dashboard calculator's commuter as a worked example

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

* Add population results to the PTA post

A static microsimulation set up as the Autumn Budget dashboard sets up
its runs (pe.uk.managed_microsimulation on policyengine 6.11.1's
certified Microcosm UK dataset, policyengine-uk 2.151.0, the OBR's
October 2026 forecast). Income tax falls by £42m, £113m and £193m in
2027-28 to 2029-30 (Treasury: £45m, £90m, £150m); net income rises by
less, as means-tested benefits fall; 528,000 households gain in 2027-28,
rising to 1.07 million. Two decile charts. Marked provisional until the
dashboard publishes its own run.

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

* Use two decimals on the decile share chart's labels

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

* Add the measure's reach and link the dashboard's final URL

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

* Group the PTA post into household and population impacts

The rules, then "Household impacts" (worked examples, net income and
other benefits, the PTA by year, income tax, net income, marginal tax
rates), then "Population impacts" (budgetary impact with the Treasury
costing beside ours, who gains, distributional impact, poverty and
inequality), then assumptions and methodology.

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

* Drop the provisional label from the population results

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

* Say that we reproduced the population results in our own run

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

* Let bar charts hide value labels; drop "provisional" from the PTA post

Bar chart blocks take "valueLabels": false, for charts with several
series where the labels above each bar overlap; the tooltip still gives
each value. The PTA post's two decile charts use it, and the population
section no longer calls its figures provisional.

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

* Finish Max's review: reach as households, whole-pound State Pension

Replace the people-affected shares with the 74% of households that buy
petrol or diesel, round the State Pension to the pound.

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

* 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>

* Give the household fuel duty base in the Treasury gap text

PolicyEngine's household petrol and diesel carry £13.4bn of duty in
2026-27 (local run on the certified data and October forecast), against
the OBR's £24bn of receipts.

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>

* Show the measure on its own in the net income table, per Max

Rename the columns to without and with the measure, note that the
Pension Tax Allowance would remove the pensioner's £93 of income tax,
describe the population source as a run of the dashboard's measure
(the dashboard has not published it yet), and keep the Budget's reach
wording (35 million motorists, as well as businesses).

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

* Round the PTA post's worked tables to whole pounds

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

* Add a footnote under the PTA budgetary table: both estimates are static

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

* Show the PTA's total cost to government in the budgetary table

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

* Split the cost table into duty, VAT and total, with a basis footnote

Add 'Total cost: PolicyEngine' with costs negative, as the Treasury
shows them, and an italic footnote on what the total includes, that
PolicyEngine is static while the Treasury's costing has a demand
response (policy costings, page 13), and the tax-year versus fiscal-year
timing, as in the PTA post.

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

* Say that the Treasury's PTA figure covers income tax only

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

* Neutral wording and absolute poverty in the PTA post

Comparisons with the Treasury and the explainer become context, not
judgements ("close to", "within £3 million", "slightly", "largest"); the
decile pattern is given in numbers; the poverty result names the HBAI
absolute measure before housing costs.

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

* Language review: state figures, give the Treasury as context

Lead the key figure with PolicyEngine's estimate and give the Treasury's
for context; replace the share-of-Treasury comparison and the reasons
for the gap with the method differences only; drop unchecked causes
and comparative phrasing ('the same per litre', 'does not compare',
'agree to within').

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

* Apply the PTA post's standards: rounding notes, poverty measure, labels

Whole pounds in the weekly table, 'Figures may not sum because of
rounding' under tables whose rows do not add, the absolute poverty rate
before housing costs named and defined, and valueLabels off on the
multi-series bar charts (merged with the PTA branch for the chart
changes from #1462).

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

* Add the dashboard calculator's pensioner and Max's smaller fixes

Household 9 is the calculator's "pensioner on the full State Pension"
(68, full new State Pension and £150, Band D council tax), with a link
to the calculator. The methodology says the reform also passes into
Universal Credit's tax on earnings, and "to the penny" replaces a
rounding slip; the State Pension age limitation fits every example;
the Pension Credit note gives the size of the calculator difference.

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

* Shorten bar chart labels so every label shows at 375px

Decile numbers 1 to 10 (1 = lowest) and month ranges with the years in
the subtitle; drop the October-December bar, where both rates are
52.95p and the table above shows it. No text overlaps at 1280px or
375px.

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

* Population results: people counts, benefit split and the OBR figures

Max's review: compare people with the explainer's pensioner count
(668,000 in 2027-28, 1.36 million by 2029-30); split the £12 million that
comes back in 2027-28 (Pension Credit £8m, Housing Benefit £4m, Council
Tax Reduction under £1m; no lost licences until 2028-29); say each
household that loses (2,700 and 2,800) loses a free TV licence, and that
the 2027-28 loss band is empty in the sample; describe the Treasury's
later years in its own terms (National Accounts basis, unexplained); add
the OBR's policy table figures, which also count income tax only.

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

* State that the Treasury figure covers fuel duty receipts only

The OBR's policy table (EFO October 2026, detailed forecast tables,
Table 1.1) scores row 3 as 'Receipts | Fuel Duty', -573.8 and -781.8,
with no VAT line, so the footnote and key figure say so.

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

* Note the calculator's unrounded State Pension for household 9

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

* Shorten the budgetary table footnote to the static point

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

* Shorten the cost table footnote to the static-dynamic line

Move the total cost definition, the fuel-duty-only coverage, the base
and the timing basis into the paragraph after the table.

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

* Say that the OBR's income tax figures and PolicyEngine's total cost match by coincidence

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

* Show the rounding up in the PTA value step: £93.28 to £94

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

* Say which households the average gains in 2028-29 and 2029-30 cover

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

* Audit fixes: Gini basis, £230 note, assumptions wording, OBR link

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

* Move explainers and technical detail into an appendix

The main text keeps the rules, the household results, the charts and
the population results, with one-line pointers. The appendix holds the
household and tax-year definitions, projections and coverage, the
effective marginal rate, poverty and deciles, the population run, the
comparison with the Treasury and the OBR, assumptions and methodology.

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

* Move the PTA post's technical detail into an appendix

The main text keeps the rules, the household results and the population
results, with short introductions. The appendix holds the projections
and uprating reading, household definitions, income taxed above 20%,
chart definitions, the population run setup, the comparison with the
Treasury and the OBR, assumptions and methodology. No figure changes.

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

* Retitle the PTA post: The Pension Tax Allowance in the Autumn Budget 2026

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

* Final audit fixes: October net income, Gini, uprating, sources

- Net income table on the October scenario (the March path kept the
  Pension Credit guarantee at £243.47): pensioner HB £7,682, CTR £1,564,
  net income £20,002 -> £20,024; region, ages, Winter Fuel Payment stated
- Gini change given as a relative change (0.01%, 0.02%)
- Uprating reason simplified; decile basis is HBAI income
- Rate table ends the 60.59p row on 31 March 2028; RPI from April 2028
- Table 6.1 links to the Budget document; HMRC May 2026 note cited
- £230 baseline from footnote 98; OBR VAT wording; other fuels 'where
  practical'; VAT-registered businesses save the duty only
- Key figure notes the April 2027 assumption

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

* Title the post 'The fuel duty cut extension in the Autumn Budget 2026'

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

* Say that the pensioner gets no Pension Credit

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>

* Decile charts: values from the dashboard's calculators at #290's 9b98370e

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>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Max Ghenis <mghenis@gmail.com>
MaxGhenis added a commit that referenced this pull request Oct 28, 2026
* 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>

This branch was successfully deployed

2 active deployments
Preview – policyengine-calculator-next — c9a4f385 Deployed Oct 28, 2026 by vercel[bot]
Preview – policyengine-website — c9a4f385 Deployed Oct 28, 2026 by vercel[bot]
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.

2 participants