PolicyEngine / PolicyEngine/policyengine-scorecard

Pensions: the Budget's most-reported measure is not expressible, and nothing validates the pensions PE-UK does model

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

@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_target and 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

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.