PolicyEngine / PolicyEngine/policyengine-scorecard
HMRC ready reckoner (mode 2): PE-UK counterparts to the direct effects of illustrative tax changes
@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 external side is already in the DB: the merged HMRC adapter (#45, sources/hmrc-personal-tax/adapter.py) parses the June 2025 tax ready reckoner — revenue effects of illustrative changes (1p on each rate, £100/£500 on each threshold, allowance moves, NICs rates/thresholds), three forecast years each, with the sign-convention machinery (classify_reckoner_label) reviewed and landed. The campaign also proved computability: 23 uk_reckoner PE results staged in #32. What does not exist is the maintained lane: no measure→reform registry, no per-row PE counterpart on the certified bundle, no comparison artifact, no issue tracking it. This fills the gap.
Why this population is the best-value mode-2 family per unit of work
- Parametrically trivial: every reckoner row is a one-parameter reform (a rate or threshold delta) — near-zero
not_expressibletriage, unlike the OBR PMD's 5/26. - Dense and refreshed: ~250 rows per publication, updated twice a year, so it doubles as a per-fiscal-event regression battery for PE-UK's tax logic.
- Decomposition-grade: HMRC publishes the reckoner in both pre- and post-behavioural terms for the income-tax rate rows, giving #59 its behavioural-axis measurements for free.
- US analogue: this is the UK's closest thing to the reform-score adapters lane (#4) with an official static-ish counterpart — a cleaner benchmark class than OBR's behavioural-adjusted costings.
Design — extend #56's machinery, don't reinvent
- Registry
data/uk/hmrc_reckoner_reforms.yamlunder the same schema asobr_measure_reforms.yaml(verbatim HMRC change label, pe-uk parameter dict, construction, computability, notes), generated semi-mechanically from the adapter's parsed labels since each is a stated parameter delta. - Compute via the same offline-hardened certified-bundle pipeline as
pipeline/compute_uk_obr_costings.py(one delta per row, per forecast year), staged under the campaign ingest contract; descriptive comparison with named axes (basis: pre/post-behavioural where HMRC splits it; CY-proxies-FY; certified-world vs reckoner baseline). - Join key: the adapter's verbatim-label subgroup ids, so external and PE rows meet without re-parsing.
Blocked only on #57 (which DB shape the staged rows ingest against). Sibling of #54; feeds #59.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.