PolicyEngine / PolicyEngine/policyengine-scorecard
Pensions: the Budget's most-reported measure is not expressible, and nothing validates the pensions PE-UK does model
@vahid-ahmadi is already working on this.
Since Aug 25, 2026.
- Dominant language
- Python
- Stars
- 0
- Forks
- 0
- Avg merge
- 6d 12h
- Merged PRs (30d)
- 32
Description
Two findings from checking policyengine-uk 2.89.2 directly, which belong together.
1. The most-reported pensions measure of this Budget cannot be scored at all
Reducing or removing the 25% tax-free pension lump sum (currently capped at £268,275, reported at around £2bn a year) is among the most-discussed options for 28 October.
gov.hmrc.pensions has no tax-free lump sum parameter at the certified pin — probed, not assumed; the lookup raises AttributeError. The engine models pension contributions and their relief, plus a lump_sum_income input variable, but not the pension commencement lump sum or its cap.
So if this measure is announced, PolicyEngine has nothing to say about it. That is an upstream development item, and better identified in August than on Budget day.
2. Pensions are a scorecard gap independently of the Budget
gov/hmrc/pensions is modelled — contributions, relief, the age limit, salary-sacrifice interaction — and there is not one external claim about pensions anywhere in the 15,858 UK rows. Nothing validates any of it.
Published populations that would:
- HMRC — Personal pension statistics (contributions and relief by income band, annual)
- DWP — Workplace pension participation and savings trends (auto-enrolment participation by earnings band, sector, age)
- HMRC — Pension flexibility statistics (flexible withdrawals, quarterly), which is also the population that would eventually validate a lump-sum capability if one is built
Why together
The engine gap and the validation gap are the same story: pensions are a substantial part of the UK tax system that this repo currently neither validates nor can score reforms in. The external side can land now and is useful on its own; it also means that if the lump-sum capability is built, the population to check it against already exists.
Steps
- Upstream: raise the tax-free lump sum representation with policyengine-uk, with the Budget relevance stated
- Harvest lane for HMRC personal pension statistics + DWP participation, primary sources, Wayback originals, SHA-256 pinned
- Settle the calibration question FIRST: if pe-uk-data consumes any pension series as a target, those rows are
consumed_as_targetand agreement is a tautology -
uk_aliases: closed earnings-band and scheme-type vocabularies - Counterpart compute on #51's machinery once the lane lands
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.