PolicyEngine / PolicyEngine/policyengine-scorecard

Decompose the OBR costings divergences: PE/OBR 1.40 on the PA/HRT freezes, 1.99 on the additional-rate cut

Open
#59 0 comments 0 reactions 1 assignee View on GitHub

@vahid-ahmadi is already working on this.

Since Aug 17, 2026.

Dominant language
Python
Stars
0
Forks
0
Avg merge
6d 12h
Merged PRs (30d)
32

Description

The mode-2 lane (#54/#56) now produces descriptive comparison rows, and its own smoke run shows the work this issue tracks: PE-UK's static costing of the PA/HRT freezes lands at 1.40× OBR (+£47.7bn vs +£34.0bn, FY2026-27) and the additional-rate threshold reduction at 1.96–1.99×. The comparison rows name the axes (static vs behavioural-adjusted, certified-world vs announcement baseline, CY-proxies-FY, head scope) and leave the remainder unexplained.

The US side has the precedent for what happens next: #30 decomposed the Yale-TPC tariff divergence into named components (weight year −1.34pp, residual ~0) and retired the gap. This is the UK sibling — and under the 2026-08-16 steer (model development centers on the Scorecard), the decomposition IS the PE-UK model-development queue: each named component either justifies the gap or becomes a fix.

Candidate components to size, per measure

  • Behavioural adjustment: OBR's costings are post-behavioural; PE's are static. HMRC publishes static-vs-post-behavioural splits for some personal-tax measures (the ready reckoner's additional-rate rows carry large behavioural offsets — plausibly most of the 1.99). Where a published static leg exists, re-basis the comparison onto it and size the axis exactly.
  • Baseline vintage: certified 2023-based world uprated to FY2026-27 vs OBR's announcement-time forecast baseline (earnings growth assumptions move fiscal-drag costings materially). The #13 baselines registry is where the alternative leg comes from.
  • CY-proxies-FY: quantify by computing both adjacent CYs and interpolating.
  • Head scope / population coverage: which heads PE aggregates vs the tax heads in the PMD row.
  • Genuine model gaps: whatever remains after the named axes — the actual PE-UK development items (e.g. taxable-income composition at the top for the additional-rate measure).

Deliverable

Per-measure decomposition artifacts (the #30 pattern: one named component per row, signed, summing to the observed gap with a residual), landing next to results/uk/obr_costings/COMPARISON.md, plus assumptions-registry entries (#10) for each axis sized. Components that turn out to be model defects get filed against policyengine-uk with the Scorecard row as the evidence.

Depends on #56 (the lane), #13 (announcement-baseline legs). Feeds #55 (the behavioural components are exactly the published behavioural-effects population that issue harvests).

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.