Repository navigation
Autumn Budget 2026 property income tax explainer - #1460
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Trading allowance post: review at f581840I reviewed the trading allowance article only ( 1. Show the Universal Credit interaction with a number.
2. Add a full-time sole trader.
3. Say which way the population limits push, and size the one that can be sized. The methodology section rightly says "overstate or understate". The national section quotes only the receipt's "can overstate". With no gross receipts in the data, the model:
Together with behaviour, these let the Treasury section say which way each difference runs, even though the net gap isn't attributed. For the same reason, Class 4 is £0 in every year of the population run: the only profits relieved are £3,000 or less, below the £12,570 lower profits limit. The national figure is therefore income tax alone: −£115m in 2027-28, less about £3m clawed back through means-tested benefits, gives −£112m. The dashboard's expected-effects note says Class 4 falls. That holds in law and for the sole trader above, but not in the population run. 4. Rounding and voice (Max's checks 7 and 4).
5. Smaller points.
Everything else I checked holds:
The worked examples follow the post's own scope and isolate the allowance, so points 1 and 2 are additions, not corrections. I made the runs behind this review on the dashboard branch at ad32af7f. #290's trading allowance code is the same at its current head. 🤖 Generated with Claude Code |
Savings and property post: review at
|
| 2027-28 | 2028-29 | 2029-30 | 2030-31 | 2031-32 | |
|---|---|---|---|---|---|
| PolicyEngine: property, after finance cost relief | +396 | +410 | +425 | +441 | +455 |
| Treasury: property (Table 6.1 row 61) | +35 | +575 | +435 | +445 | +455 |
| PolicyEngine: savings | +269 | +286 | +303 | +322 | +339 |
| Treasury: savings (row 62) | +125 | +555 | +520 | +555 | +590 |
- Property is within £10m of the Treasury from 2029-30.
- Savings is about 58% of the Treasury's figure from 2029-30, about £220m to £250m a year less. That is nearly all of the gap. The Treasury's savings figure is already net of the move into ISAs, so the static difference is larger still. The model's taxed savings base looks smaller than HMRC's base, which comes from the Survey of Personal Incomes (costing p. 75).
- The higher finance cost relief takes £209m to £253m a year off the property figure.
- Scotland: £15m to £18m of that relief goes to about 46,000 Scottish landlords. Their property income stays at Scottish rates, so for them the relief rise is a tax cut. A national sentence beside line 134's £80 example would help.
If you'd rather publish the split from the dashboard itself, ask Vahid for a by-component export; the figures above are from my run, recorded on #290.
4. Line 185's receipts claim has no source. "These government receipts forecasts differ from annual household liabilities" and "Tax-year liabilities and fiscal-year receipts forecasts also differ in timing" describe how the Treasury scores the measure. Neither the costing notes (pp. 74-75) nor Table 6.1 says so, and the costing notes don't explain the 2027-28 to 2028-29 profile. Either cite a primary source or say only that the costing notes don't explain the profile. The 2026-27 savings figure of +15, before the rates start, is unexplained too.
5. Compare reach with the government's own figures. Budget 2026 paragraph 2.50 says "84% of income tax payers will be unaffected" and "Around half of the revenue raised from this change is expected to come from the top 10% of households".
- The decile table already supports the second: the top decile's average (£107) is 48% of the sum of the ten decile averages.
- The 10.67% affected-people figure isn't comparable with the first, because it counts people in households, not taxpayers. Say so beside it.
6. Explain decile 1. The lowest decile loses £13 on average, more than deciles 2 to 7. That is −0.050% of income, against −0.011% to −0.017% for deciles 2 to 7. The PolicyEngine writing checklist asks for counterintuitive results to be explained. Find out from the run which households drive it; for example, people with low net income but property or savings income. Don't guess the reason.
7. Cite the paragraphs.
- Rates, start date and geography: Budget 2026 paragraphs 6.246 (property: "These rates will apply across England, Wales and Northern Ireland") and 6.247 (savings: "across the UK").
- Line 119's "the relief follows the property basic rate": the policy costing p. 74 ("Finance cost relief will continue to be aligned to the property basic rate") and ITTOIA 2005 s. 274AA(5). Line 134 already links FA 2026 Sch. 1 para. 40.
- Line 9's Budget 2025 rates (22%, 42%, 47%): link the technical note line 17 already cites.
- Line 185's link text "#page 74-75" should read "pages 74 and 75".
- For line 134, it's worth adding that the Budget documents don't say whether Finance Bill 2026-27 changes the Scottish relief.
8. Links and draft labels.
- Lines 154, 156, 172 and 193 link
ab2026-local-preview.vercel.app. Swap these for the public dashboard (line 5 already usespolicyengine.org/uk/budgets/autumn-2026) once its artifacts are live. - Line 191 links
reforms.pyatb50787aa. Link the commit the dashboard publishes from. - The checklist asks for finished work without development history, so take these out of the published text and keep them in
REVIEW_NOTES.md:- "generated on 28 October at 14:34 UTC" (line 154);
awaiting_source, "preview manifest", "execution receipt" and the dataset and commit ids (lines 193 and 197).
9. PolicyEngine writing checklist, the rest.
- Open with the national figure. The opening has the household examples but not £664m against the Treasury's £160m (£955m by 2029-30). One sentence would do.
- Self-reference. Cut "This post examines this provision on its own" (line 5) and "The comparison here therefore measures" (line 9).
- Superlative. "The largest average cash loss is in the highest income decile" (line 156) could read: "Households in the top decile lose £107 on average."
- The heading at line 174 picks the Treasury's peak year. "The Treasury's costing: £160 million in 2027-28, £1,045 million by 2031-32" reads more evenly.
- Already fine:
- sentence case;
- tables for the data;
- the model version and assumptions (lines 189-195);
- the limitations;
- no prescriptions;
- behaviour stated for both Treasury figures and left out of the model's.
Disclosure: the decile cells come from the receipt's passed floor of 3 survey households. The figures above that aren't in the article are aggregates; the smallest, Scottish landlords' relief, rests on 170 survey people.
🤖 Generated with Claude Code
Savings and property post: matching the dashboard's example householdMax asked for the post's households and the dashboard's example households to roughly match. The dashboard's savings and property example is The match is your band-crossing household ("When property income pushes savings into a higher band": £45,000 salary, £6,000 property profit, £2,000 interest).
The landlords with a mortgage can't be entered in the calculator, because it has no input for finance costs. That covers the opening landlord, the two landlords in the table and the Scottish landlord in line 134. Keep them as the post's own illustrations of finance cost relief. Say beside the first one that the calculator doesn't take finance costs, so its landlord example has none. Everything in my earlier review (rounding, "in England", the property/savings split and the rest) still stands. 🤖 Generated with Claude Code |
Trading allowance post: matching the dashboard's example householdMax wants the posts' households and the dashboard's example households to roughly match. I proposed the post's lead case for the dashboard's trading allowance example in slot 7 of #292 (PolicyEngine/uk-autumn-budget-dashboard-2026#292 (comment)):
@hua7450, could you keep that case as the post's lead worked example, and name it so the dashboard can match it? Its inputs are aged 35, £30,000, £4,000 of receipts and £500 of expenses, with no benefits.
🤖 Generated with Claude Code |
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>
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>
Savings and property post: checked at
|
Savings and property post: one correction to my reviewMax has revised the rounding rule (about 15:55Z): whole pounds everywhere, worked household tables included. Pence stay only where the post spells out a formula in prose. So my earlier note that the band-crossing table "can keep its pence" no longer holds. Rounded, the table still adds up:
Separately, #290 now splits the measure in two: 🤖 Generated with Claude Code |
|
@MaxGhenis Applied the optional public-wording cleanup from your latest review in 5772c91:
Only these wording changes are included; calculation records and all article figures are unchanged. Format, lint, typecheck and all 6,571 local tests pass (10 existing skips), plus the source numeric check and |
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>
|
| £ million | 2026–27 | 2027–28 | 2028–29 | 2029–30 | 2030–31 | 2031–32 |
|---|---|---|---|---|---|---|
| Income tax | 0 | 0 | 539.10 | 394.29 | 403.38 | 412.24 |
| Onshore CT | 0.23 | 2.04 | 4.09 | 6.03 | 8.10 | 10.25 |
| Scottish BGA (current) | 0 | 26.62 | 26.98 | 27.44 | 27.91 | 28.75 |
| Scottish self-financed expenditure | 0 | 5.20 | 5.29 | 5.41 | 5.52 | 5.70 |
| Total | 0.23 | 33.86 | 575.47 | 433.16 | 444.91 | 456.93 |
Table 6.1 rounds those totals to the nearest £5 million: 0, 35, 575, 435, 445, 455.
What changed in the article
- Key figures, line 9: the costing's income tax line (£394 million to £412 million a year from 2029–30, £539 million in 2028–29, none in 2027–28), with the Table 6.1 total after it.
- The note under the key figures: adds that from 2029–30 our estimate is 9% to 11% above that line.
- Budgetary impact:
- It names the line we compare with and the other lines by the table's own labels.
- The table gains an OBR income tax column, and Table 6.1's total moves to the last column.
- The later-year labels are now 9%, 10% and 11% higher, computed from unrounded figures (429.40 / 394.29, 445.56 / 403.38, 459.49 / 412.24).
- Line 73: "£35 million, or about 9%, above the OBR's £394 million income tax line" in 2029–30, replacing "£6 million below the Treasury's £435 million".
- Line 79: "even where the rounded estimates are close" no longer holds, so the gap is now described as not yet explained, with no attribution to any one cause.
The analysis README (property-population/README.md line 27) records the line, the file hash and the totals.
Unchanged: every PolicyEngine figure, the household examples and the chart.
Checks: the post and chart tests pass (18). The new OBR link is the download page for the detailed forecast tables; obr.uk returns 403 to scripts, as it does for the other posts that link it.
If you'd like different wording, edit freely. An independent review of this commit is running. The merge still waits on #290 and Max's read.
🤖 Generated with Claude Code
…same scope Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Renamed only the opening label to “Key figures” in 91f812f, on top of your comparison clarification at 4796551. No figures or other article wording changed. Format, lint, typecheck and all 6,571 local tests pass (10 existing skips). Trading #1463 is synced at 3cb9b8b, preserving its latest article edits unchanged. |
|
@MaxGhenis Our property blog's national figures already match the approved results in dashboard PR #290. Could we merge #1460 before the dashboard PR, using that verified snapshot, as we did for the other Budget posts? I checked blog head The PTA post #1457 and energy post #1461 were cleared after their figures were checked against the dashboard run, before the dashboard PR merged. Could we use the same approach here, subject to your final review and the required checks? The existing immutable source links work now. We can switch the reader-facing links to dashboard |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
left a comment
There was a problem hiding this comment.
Approving on Max's go, relayed by the Budget coordinator: "Merge after the line-13 fix". The line-13 fix is 0620d73d.
Checked at this head:
- Figures: property artifact
7bf77b35e33233e0is approved in dashboard manifest revision 17 (vahid-ahmadi, 18:29:07Z). Its folder is byte-identical from the post's pinned commit637bb26cto dashboard #290's current head64b36b8a, and the receipt is20df7073. - Revenue: the figures match that artifact: 0, 399, 412, 429, 446 and 459 £m.
- No poverty or reach figures: the post has no poverty, inequality or people-affected figures; line 188 says it does not report them.
- OBR line: the comparison is with the OBR's income tax line (detailed policy table, Table 1.1, measure 61): +8.9%, +10.5% and +11.5% from 2029–30. Table 6.1 is given as context.
- Line 13 now reads "where we publish estimates for the Budget measures we model", because the live dashboard doesn't show property yet.
- Review and CI: an independent review of every change since
2afba859agreed, and CI passes at this head.
Follow-ups after dashboard #290 merges:
- Move the reader-facing source links from
637bb26cto dashboardmain. - Confirm the deployed artifact is still
7bf77b35.
The trading allowance link in line 13 resolves once #1463 merges.
🤖 Generated with Claude Code
|
@hua7450 Max said yes to merging before dashboard #290: "Merge after the line-13 fix". I pushed that fix in There's also one style commit, I checked your snapshot claims against #290's newest head After #290 merges:
I'll do both, or tell me if you'd rather. 🤖 Generated with Claude Code |
* 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>
|
Post-merge audit of the property income tax post (article on Must fix
Should fix
Nice to have
Verified as correct
Not checked: obr.uk (403; checked from a hash-matched local copy instead), the population rerun and the Microcosm landlord coverage (private data), and the Finance Bill 2026-27 text (not published). 🤖 Generated with Claude Code |
The Budget announces a further two-percentage-point rise in property income tax rates from April 2027. This property-only explainer combines worked landlord examples with national microsimulation, including the increase in finance-cost relief.
PolicyEngine estimates £399 million of net government revenue in 2027–28, rising to £459 million in 2031–32. The post includes the annual Treasury comparison, household-income decile tables and a native bar chart. The opening flags the different collection-timing bases for 2027–28 and 2028–29. Household and decile averages include unaffected households.
Source and methodology: approved property-only artifact
property_income_rates_up/7bf77b35e33233e0from dashboard #290, pinned at637bb26c. Receipt, approval, execution identity and all eight source CSV hashes were verified. Runtime: policyengine 6.11.1 / UK 2.151.0 / core 3.33.3; certified national dataseta6299504; October forecast on both sides. The supporting folder retains three aggregate CSVs, the unchanged original receipt and a provenance summary. No population H5 or household records are included.Disclosure and public records: the post and property summary omit reach, poverty and inequality figures pending separate disclosure clearance. The copied
metrics.csvand internalREVIEW_NOTES.mdhave been removed. Disclosure statements identify the tables actually covered by the recorded floor. The withdrawnpopulation-preview/folder and its verifier are removed entirely; public documentation and provenance point only to the retained approved property record.Review and publication: ready for review at
5772c917d. Max confirmed that the dashboard-interface condition no longer applies, but publication still waits for #290 to merge. Then verify that the released property artifact matches the post, update results if it differs, and change reader-facing dashboard source links tomain. Max's review of the revised head remains pending.Validation: format, lint, type checks and 6,571 local tests pass (10 existing skips), on Node 26. Independent checks match the three retained CSV hashes, six annual table rows, 22 rounded decile cells and 20 raw chart values;
git diff --checkpasses. Calculation code and retained household, revenue and decile values are unchanged.Review preview
Related: dashboard PolicyEngine/uk-autumn-budget-dashboard-2026#290 and #292; trading #1463 stays stacked on this PR; savings #1466 remains a separate draft.