Skip to content

Add blog post: Comparing PolicyEngine and OBR salary sacrifice cap estimates#704

Closed
vahid-ahmadi wants to merge 2 commits intomainfrom
salary-sacrifice-obr-comparison
Closed

Add blog post: Comparing PolicyEngine and OBR salary sacrifice cap estimates#704
vahid-ahmadi wants to merge 2 commits intomainfrom
salary-sacrifice-obr-comparison

Conversation

@vahid-ahmadi
Copy link
Contributor

Summary

  • Adds a new UK blog post comparing PolicyEngine's microsimulation of the £2,000 salary sacrifice cap with the OBR's supplementary forecast
  • Includes two interactive Plotly charts: distributional impact by income decile and winners/losers breakdown
  • Registers the post in posts.json with metadata and cover image

Test plan

  • Verify the blog post renders at /uk/research/comparing-policyengine-and-obr-salary-sacrifice-cap-estimates
  • Confirm both interactive charts load and toggle correctly
  • Check all hyperlinks (OBR, FRS, HMRC) resolve

🤖 Generated with Claude Code

…imates

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@vercel
Copy link

vercel bot commented Feb 18, 2026

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

Project Deployment Actions Updated (UTC)
policyengine-app-v2 Ready Ready Preview, Comment Feb 23, 2026 1:33am
policyengine-calculator Ready Ready Preview, Comment Feb 23, 2026 1:33am

Request Review

@vahid-ahmadi
Copy link
Contributor Author

Copy link
Contributor

@MaxGhenis MaxGhenis left a comment

Choose a reason for hiding this comment

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

Review of salary sacrifice OBR comparison blog post

Good post overall — the structure is clear, the OBR comparison methodology is sound, and the interactive charts are well-built. A few items to address:

High priority: Annual Allowance claim needs verification

Under salary sacrifice, contributions are classified as employer contributions, which are exempt from the pension Annual Allowance (AA) tax charge. When reclassified as employee contributions, they push some workers over the £40,000 AA limit, triggering additional tax.

This statement appears factually incorrect. Under HMRC rules, employer contributions do count toward the Annual Allowance — they are not exempt. The AA limit applies to total pension input amounts from all sources (employee + employer). See HMRC's guidance on pension Annual Allowance.

The actual mechanism that could generate income tax revenue here is likely the Tapered Annual Allowance: salary sacrifice lowers "adjusted income," which can keep high earners below the taper threshold (£260k). When contributions are reclassified as employee contributions with higher salary, adjusted income rises, potentially triggering the taper and reducing the AA from £60k down to as low as £10k.

If the underlying model also treats employer contributions as AA-exempt, that would be a code-level issue in policyengine-uk worth investigating. If the model is correct but the blog description is wrong, just the text needs updating.

This is the most important item since it affects the credibility of the £0.61bn income tax finding, which is the post's most novel claim.

Medium: Missing trailing newline

The markdown file is missing a trailing newline at the end (the diff shows \ No newline at end of file). Minor but should be fixed for consistency.

Low priority suggestions

  • "Winners and losers" section heading: Since there are no winners (only losers and unaffected), consider renaming to something like "Share of people affected" to be more precise.
  • Conclusion section: Fairly brief — could mention limitations (no bonus sacrifice modelling, FRS right-tail underrepresentation) as caveats alongside the findings.
  • Missing comma: "depends on how the policy is implemented**,** for example whether HMRC..." — there should be a colon or em-dash rather than a comma before "for example".

Overall this is a strong analysis. The AA claim is the main thing to resolve before merging.

The post claimed employer contributions (including salary sacrifice) are
"exempt from the pension Annual Allowance tax charge." Under HMRC rules,
all contributions count toward the AA. policyengine-uk's AA calculation
excludes employer contributions, which is a modeling limitation, not a
feature of UK tax law. Reframed the income tax section to be transparent
about this limitation and directed readers to the more reliable NICs
comparison.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@MaxGhenis
Copy link
Contributor

Closing this PR because the revenue estimates need to be re-run with the corrected policyengine-uk model.

The post's key finding — +£1.68bn in income tax from Annual Allowance constraints — was driven by a bug where employer pension contributions (including salary sacrifice) were excluded from the AA calculation. This was fixed in PolicyEngine/policyengine-uk#1503.

With the fix:

  • The income tax effect should be approximately neutral (matching the OBR's assumption)
  • The revenue decomposition table needs new numbers
  • The total static estimate (£3.50bn) will change significantly

The NICs comparison, baseline salary sacrifice stats, distributional analysis, and behavioural adjustments sections are still valid and can be reused. @vahid-ahmadi — please re-run the analysis with the latest policyengine-uk and reopen with updated figures.

@MaxGhenis MaxGhenis closed this Feb 26, 2026
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