Skip to content

Solve Pension Credit take-up over entitled benefit units - #510

Merged
MaxGhenis merged 15 commits into
mainfrom
pc-takeup-over-eligible
Oct 7, 2026
Merged

MaxGhenis merged 15 commits into
mainfrom
pc-takeup-over-eligible

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Stacked on #490: this PR's branch is #490's branch plus six commits. It targets main so that CI runs, since this repo's CI only runs on PRs into main. Until #490 merges, the diff here includes #490's commits; merge #490 first.

Results (real builds, FY2025-26, Great Britain)

Production builds (PE_UK_DATA_OA_CLONES=1, 512 epochs) with identical trained imputation models:

  • C2: Calibrate Housing Benefit to DWP's GB figures by age group #490, which this stacks on.
  • D′: this PR at 0598636, on the locked policyengine-uk 2.102.5. Its tree is identical to e386209 apart from one test and some wording. It predates d798: build G2 ("d798 implemented" above) describes the current rule.
  • E: this PR plus uk-data#513 (FRS benefit-unit capital for Pension Credit), on policyengine-uk main plus #2018, #2019, #1899, #1940 and #1925 (v2.104.2). It shows where the take-up solve lands once the model finds reporters entitled.

Earlier build D, at 381e398, solved over UK units and anchored SPI-synthetic reporters. Its figures differed from D′ by under 1%.

d798 implemented (10/5). Max ruled 37%: units not entitled in the calibration year claim Pension Credit at DWP's Savings Credit-only caseload take-up, with reporters and the solved fill for entitled non-reporters unchanged. Commit "Draw units not entitled in the calibration year at 37% Pension Credit take-up" builds it. The rate is a new take-up parameter, pension_credit_newly_entitled: 37% from FYE 2024 and 42% for FYE 2023, from DWP's table PC1.

Build G2 is this PR with that rule, at ba97fb1 on #490 9f18a3d. The head is now 6565630, on #490 f4d8f95; #490's later commits change only docs and comments. Both sides are measured on G2's own weights, with the old flags rebuilt from the same seeded draws. Draws and flags align, with no violations across 61,212 benefit units.

G2 (37% rule) same weights, old rule G (old rule, own build)
GB Pension Credit 2025, saved file £6.19bn, 1,414k £6.19bn, 1,414k £6.23bn, 1,428k
GB Pension Credit 2026 £6.836bn, 1,410k £6.836bn, 1,405k
+10% guarantee: newly entitled units / share claiming 218k / 50% 213k / 20%
+10% guarantee: newly entitled non-reporters claiming 43% 9%
+10% guarantee: added spending (to newly entitled) £1.91bn (£71m) £1.89bn (£28m)
  • 2025 is unchanged. No unit whose flag changed is entitled in the shipped 2025 file. The step and the saved file can disagree on 2025 entitlement (Rail, bus and fuel calibrations run after base-year materialisation, so the shipped file is not uprate-invertible #479), but here none of those units flipped.
  • 2026 changes by 4.9k claims and £0.6m (£0.56m, from unrounded totals).
  • The take-up step is otherwise identical to G's. Fill 12.87%; 37.2% of GB units not entitled in 2025 are flagged.
  • Calibration log. Pension Credit at 1.04x for claims and 1.03x for spending; HB at 1.03x. 84.2% of national targets are within 10%, against 84.1% for G.
  • Other outputs, 2025.
    • UK Pension Credit: £6.32bn.
    • Relative poverty BHC/AHC: 20.18%/23.58%.
    • Pensioner relative poverty AHC: 17.50%.
    • Each is within 0.1pp or £0.04bn of G. G and G2 are separate unseeded builds, so that comparison includes calibration noise (Seed the calibration weight dropout so builds are reproducible #507). The same-weights columns above have none.
  • Caveat on the rate. Savings Credit-only units are a closed cohort (no Savings Credit for people reaching State Pension age from April 2016), and DWP no longer publishes breakdowns of them. People reaching State Pension age after 2025 also draw at 37%, though many will get Guarantee Credit-sized awards (DWP: 69%).

Rebased on 10/4 onto #490's working-age change (#490 at 33092bf; this PR at 7c4972b). #490 now also calibrates working-age Housing Benefit, to DWP's working-age line less supported and temporary accommodation. Build G is this PR at 7c4972b, compared with F, which is #490 at 304baad:

  • The take-up step is unchanged. Fill probability 12.87% over 1,368k GB entitled units, the same as D′.
  • Pension Credit after calibration. GB claims 1,428k and £6.23bn, with take-up among entitled units of 73.5%.
  • Calibration log (calibration year). DWP Pension Credit lands at 1.05x for claims and 1.04x for spending; simulating 2025 from the saved file gives 1,428k claims (1.03x), the round trip in Rail, bus and fuel calibrations run after base-year materialisation, so the shipped file is not uprate-invertible #479. Pension-age and net working-age Housing Benefit are at 1.03-1.04x. 84.1% of national targets are within 10%, against 84.4% for F.
  • +10% minimum guarantee reform. 213k GB units are newly entitled, 20% of them claim, and spending rises £1.89bn.
  • Against F, 2025.
    • UK Pension Credit: £6.35bn, against £6.16bn.
    • Relative poverty BHC/AHC: 20.26%/23.62%, against 20.32%/23.58%.
    • Pensioner relative poverty AHC: 17.54%, against 17.66%.

The D′ tables below therefore describe this PR before d798, which changes only the draw for units not entitled in 2025 (see "d798 implemented" for G2). The commits were replayed unchanged, except that 2371630's message was reworded (now 334b327) for the round-3 review's note on capital-gains donors.

Acceptance gate: reporter baseline before any fill (PolicyEngine/uk-triple-lock#14)

The take-up step's aggregates for 2025, on survey weights, before calibration:

D′ (this PR) E (+#513, PE-UK fixes) DWP 2025-26
GB benefit units reporting Pension Credit 1,196k 1,192k 1,382k claims
GB Pension Credit they report £4.99bn £4.97bn £6.14bn
GB reporters the model finds entitled 771k (64%) 1,105k (93%)
GB entitled units 1,368k 2,129k
solved fill probability (over GB) 12.9% 20.9%
GB claims and spending after the fill 859k, £3.64bn 1,341k, £6.17bn 1,382k, £6.14bn
  • Calibration never has to remove reporters. The GB reporter baseline is below DWP's caseload and spending.
  • When the fill is zero. That depends on a different condition: the fill is 0 only if entitled GB reporters already make up 62% of entitled GB units. Here they make up 56% in D′ and 52% in E. Calibration against DWP's absolute targets is a separate, later step.
  • On 2.102.5, entitlement and the fill set the shortfall together. About a third of GB reporters get no modelled entitlement, and the entitled pool is too small for 62% take-up to reach DWP's caseload (62% of 1,368k is 848k). Calibration closes the gap by upweighting.
  • With Use the FRS benefit-unit capital for Pension Credit's capital test #513's FRS capital, the gap closes before calibration. 93% of reporters are entitled, and pre-calibration claims and spending land at 0.97x and 1.00x DWP. The PolicyEngine UK fixes also move entitlement, so E mixes both changes.

After calibration (dataset simulated for 2025)

C2 (#490, old flags) D′ (this PR) E DWP
GB Pension Credit claims 1,400k 1,428k 1,403k 1,382k
GB Pension Credit spending £6.00bn £6.22bn £6.27bn £6.14bn
GB units reporting Pension Credit (calibrated weights, incl. SPI-synthetic) 1,510k 1,736k 1,309k
take-up among entitled units 80.7% 73.4% 60.2% 62%
non-reporters with would_claim_pc 69% 12% 20%
  • Fit to other targets. Calibration log, final epoch: median |ratio-1| is 4.1% for C2, 4.0% for D′ and 4.0% for E. The share within 10% is 84.0%, 84.5% and 83.9%.
  • Calibration-year vs saved file. D′'s calibration-year Pension Credit is close to the figures above. Simulating 2025 from the saved base-year file shifts them slightly (Rail, bus and fuel calibrations run after base-year materialisation, so the shipped file is not uprate-invertible #479).
  • Reporter upweighting. Counting only survey reporters, the ones the take-up step anchors, calibration raises GB reporters by 41% on 2.102.5 (1,196k to 1,687k) to reach DWP's caseload. With Use the FRS benefit-unit capital for Pension Credit's capital test #513 and the policyengine-uk fixes, the rise is 5% (1,192k to 1,251k). The calibrated reporter totals in the table also count SPI-synthetic units (48.9k in D′, 58.6k in E). Their reports are imputed. None of D′'s 154 SPI-synthetic reporters is entitled; 24 of E's 152 are.

Paired reform: minimum guarantee +10% from 2025, same seeded flags in both runs

C2 (old flags) D′ E
GB units newly entitled 239k 214k 529k
share of them that claim 70% 20% 25%
share of newly entitled non-reporters that claim 66% 9% 18%
added GB Pension Credit spending £2.00bn £1.89bn £1.89bn
of which to newly entitled units £0.109bn £0.028bn £0.081bn

Under the rule in these builds, newly entitled non-reporters claimed at about the solved fill probability, which is low because reporters supply most of the 62%. d798 has since changed that to 37% (see "d798 implemented" above).

Take-up before and after calibration (d798)

The fill probability is solved on survey weights after the imputations, before cloning and calibration. It is the residual share of entitled non-reporters that tops FRS reporters up to DWP's 62%. Take-up among GB units entitled in 2025:

entitled units caseload take-up spending take-up
before calibration, this PR's flags 1,370k 62.7% 70.4%
before calibration, old flags (main) 1,370k 86.6% 89.9%
after calibration, D′ (this PR) 1,944k 73.4% 76.9%
after calibration, C2 (#490, old flags) 1,736k 80.7% 81.1%
DWP FYE 2024 (PC1/PC2) 2,140k 62% 71%
  • Before calibration, spending take-up lands on DWP's 71% although only caseload is solved.
  • Calibration raises take-up to 73%. It meets DWP's caseload and spending by upweighting reporters, whose share of entitled units rises from 56% to 70%. The entitled pool stays below DWP's.
  • d798, ruled 37% on 10/5 and built (see above). Units not entitled in the calibration year draw at DWP's Savings Credit-only take-up. Their mean award of £9 a week is the closest DWP group to a reform's marginal entrants; Guarantee Credit is 69% at £87 a week.

The before-calibration rows use the post-imputation dataset rebuilt on 10/4 from #490's code. D′'s own run solved 12.9% over 1,368k units.

Other outputs (2025)

C2 (#490) D′ (this PR) E
relative poverty BHC / AHC 20.37% / 23.70% 20.29% / 23.63% 20.50% / 23.71%
pensioner relative poverty AHC 17.70% 17.49% 18.43%
GB pension-age HB £7.86bn, 1,148k £7.81bn, 1,146k £7.76bn, 1,152k
UK Pension Credit £6.18bn £6.34bn £6.50bn
ESS of all households 1,305 1,324 1,365

E's pensioner-poverty change mixes the data change with policyengine-uk changes (State Pension age by date of birth, DWP rates, mixed-age couples), so these two builds can't separate them.

The targeted suite passes on D′'s dataset at e386209: 70 tests, including the take-up, HB target, registry, aggregate and reform-impact checks. The full suite passed on build G at 7c4972b: 657 passed, 2 skipped, 1 xfailed. The full suite passed on build G2 at 68e740c, which is 6565630 apart from #490's comment-only f4d8f95: 660 passed, 2 skipped, 1 xfailed.

Invariants and tests

  • Fill probability. For any weights, eligibility and reporting: either weighted expected take-up among eligible units equals the rate exactly, or the probability sits at a bound that the reporters alone (0) or all eligible units (1) force. Property test.
  • Draws. Reporters always claim. Entitled non-reporters claim when draw < p, and units not entitled when draw < 0.37. The newly entitled rate changes neither p nor any entitled unit's flag. Property test.
  • Rates. Weighted take-up among entitled units still meets 62% over 200,000 units, and the rest claim at 37%.
  • Statistical check. Over 200,000 weighted units, take-up among the eligible is within 0.5pp of 62%.
  • Transcription. Spending equals guarantee plus savings credit, and caseload equals its three claim types, using DWP's separate rows.
  • Registry. Only the DWP targets target pension_credit.
  • Northern Ireland. NI's entitlement, reporting and weights cannot change the GB probability or any GB flag. Entitled NI non-reporters are drawn at the GB probability, and NI units not entitled at the newly entitled rate (37%). Property test.
  • SPI-synthetic units are found through their household, in any benefit-unit order.
  • Built dataset. Every survey reporter has would_claim_pc, and GB claims and spending land within 0.5-2x of DWP.

axiom: n/a: data/calibration-only change

🤖 Generated with Claude Code

MaxGhenis and others added 3 commits September 30, 2026 07:55
Replace the OBR table 4.9 Housing Benefit target, which is GB DWP-funded
spending but was compared with UK-wide modelled Housing Benefit, with DWP
Spring 2026 targets for Housing Benefit spending and claims over Pension
Credit qualifying age in Great Britain. Targets can now name the countries
they cover.

The figures under Pension Credit qualifying age are kept but not
calibrated: the model pays working-age Housing Benefit to too few records
for a target to be met without concentrating it on a handful of them.

Stop drawing would_claim_uc for benefit units whose adults have all
reached State Pension age, keeping every other unit's draw unchanged.

Require policyengine-uk 2.102.5, which lets pension-age families make new
Housing Benefit claims (PolicyEngine/policyengine-uk#1901).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
State in the release note that modelled GB Housing Benefit falls to about
£8.0bn. Mark the mixed-age classification as an assumption, date the
benefit-group equality from 2024-25, and quote the calibrated build's
working-age claims. Add a test that the calibrated columns build on the
dataset, since the loss matrix skips a target whose column raises, and note
that would_claim_uc uses survey-year State Pension age.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…flag

The create_frs smoke test's fake simulation did not answer the variables
the would_claim_uc rule now reads (person_benunit_id, is_adult, is_SP_age),
which failed CI with KeyError: 'person_benunit_id'.

Pick the claimant-and-partner flag the way the locked policyengine-uk does
for Housing Benefit's pension-age route: is_claimant_or_partner where the
release defines it, otherwise is_adult as in 2.102.5. Both the
would_claim_uc rule and the age-group targets use it. Under 2.102.5 the
base FRS is identical to the previous commit's in every column.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis force-pushed the pc-takeup-over-eligible branch from ae43f1f to 41a07c9 Compare October 1, 2026 14:09
@MaxGhenis
MaxGhenis force-pushed the pc-takeup-over-eligible branch from f09497f to e386209 Compare October 2, 2026 13:36
MaxGhenis added a commit that referenced this pull request Oct 3, 2026
…513)

- TOTCAPB4 (DWP's below-average-resources measure since 2019/20) in place of
  TOTCAPB3, which stays as the fallback for earlier survey years. On #510
  build D plus the column: the same 87.7k non-entitled reporters as with
  TOTCAPB3, GB entitled units 2,080.7k vs 2,083.5k, gate claims 1,290.0k vs
  1,291.8k. The docstring now calls it an approximation (financial assets
  only; no Sch V disregard or reg 19 valuation).
- uprating_factors.csv and uprating_growth_factors.csv rows recomputed from
  policyengine-uk 2.107.0's per-capita GDP index (2024 1.204, 2025 1.256),
  not copied from the stale savings row, so calibration and runtime grow
  the capital alike; the test now checks the rows against the model.
- policyengine-core 3.32.13 in uv.lock (3.32.12 leaks memory per simulation).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 4, 2026 13:17
…accommodation

Max ruled on d703 that working-age Housing Benefit should be calibrated too.
policyengine-uk pays no Housing Benefit for specified (supported) or temporary
accommodation, so the working-age awards it can pay are general-needs ones.
DWP's working-age line includes both kinds, and DWP splits accommodation type
only across all ages. The calibrated working-age target is therefore DWP's
working-age line less all of its supported and temporary accommodation:
£584.8m and 107k claims in 2025-26, a lower bound on working-age general-needs
Housing Benefit. It exists for 2024-25 and 2025-26 only; from 2026-27 the
all-age accommodation lines exceed the whole working-age line.

Seeded calibrations of one saved 2025 input compared the options. Against the
full working-age line, uncapped calibration loaded it onto about three
effective records. Capping household weights at 20-40 times their prior
reached 54-60% of DWP's spending and raised income-related ESA claimants to
1.6-2.0 times DWP's count. Against the net figure, the calibration meets it
(1.04x) and no other national target crosses the 10% line compared with
calibrating pension-age figures only.

Tests: DWP's accommodation lines reconcile with its age split in every year;
the net figure equals all-age general needs less pension-age Housing Benefit,
the same quantity computed the other way; a property test of the netting; the
calibrated working-age column equals the full line's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis force-pushed the pc-takeup-over-eligible branch from e386209 to 9eaa2fb Compare October 4, 2026 18:39
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The loss matrix fills a year a target doesn't list with the latest earlier
value within three years (_resolve_value). That carried the 2025-26 net
working-age Housing Benefit targets (£584.8m, 107k claims) into 2026-27 to
2028-29, where DWP's lines give a negative net figure. Targets gain a
carry_forward flag (default True, so nothing else changes), and the two net
targets set it to False. The build calibrates 2025 only, so the dataset is
unchanged; any loss matrix built for 2026-28 now leaves the net targets out.

Also reword the docstring: policyengine-uk has no supported or temporary
accommodation rules, but the FRS can't identify those residents, so a
reported award there is modelled under the general-needs rules and treating
the model's working-age HB as general needs is an approximation. The
unmodelled supported and temporary accommodation HB (£5.2bn, all ages) is
recorded as a limitation (d946). "Within 12%" becomes "about 12% below".

Tests: the net targets resolve in 2024-25 and 2025-26 only while the other
HB targets still carry forward; a property test of _resolve_value for any
values, year and flag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis force-pushed the pc-takeup-over-eligible branch from 7c4972b to ba97fb1 Compare October 5, 2026 16:29
MaxGhenis and others added 8 commits October 5, 2026 13:36
…escribe the year resolver exactly

The changelog and a test comment still said the model pays no supported or
temporary accommodation Housing Benefit. It has no rules for it, and the FRS
can't identify those residents, so treating its working-age HB as general
needs is an approximation. The resolver docstring and the carry_forward
comment now describe _resolve_value as it works: the nearest listed year,
the earlier on a tie, used only if it is earlier and at most three years
away.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The FRS build drew would_claim_pc against an unweighted count of every
benefit unit, so entitled non-reporters claimed at about the take-up rate
on top of every reporter. PolicyEngine/uk-triple-lock's coverage run
(data/results.json, Enhanced FRS 2024-25 on policyengine-uk 2.90.2) put
2026-27 Pension Credit claims at 1.82m UK-wide, against DWP's 1.31m for
Great Britain.

After the imputations, compute Pension Credit entitlement and solve the
claim probability that makes weighted take-up among entitled units equal
DWP's FYE 2024 caseload take-up (62%). Reporters claim. Every non-reporter,
entitled or not, is drawn at that probability, so units a reform makes
entitled claim at the same rate.

Replace the OBR Pension Credit target with DWP Spring 2026 Great Britain
spending and caseload targets.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…aseline

The take-up step returns weighted aggregates for the calibration year: the
solved probability, entitled units and reporters, and the Great Britain
reporter baseline before any fill, which the build's summary prints.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Pension Credit reports on SPI-synthetic households are imputed by the
second-stage QRF (imputations/frs_only.py) from their SPI incomes, not
observed claims. In build D, 154 such benefit units reported Pension Credit
and were all anchored as claimants. They are now drawn at the solved
probability like any non-reporter.

Most SPI-synthetic households have zero survey weight when the probability
is solved. The capital-gains band donors (imputations/capital_gains.py) are
copies of sampled households re-weighted to HMRC taxpayer counts, so a copy
of an SPI-synthetic household keeps the flag and has positive weight. The
solved probability still does not move in build D', because none of its
SPI-synthetic reporters is entitled.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
DWP's 62% caseload take-up covers Great Britain, but the solve counted
Northern Ireland's entitled units and reporters too, so NI's reporter mix
moved GB take-up away from 62%. Solve over GB entitled units and draw every
non-reporter, NI included, at that probability. A property test checks that
NI composition cannot change the GB probability or any GB flag.

Correct the docstrings: the fill is zero when entitled GB reporters already
make up the rate of entitled GB units, which is separate from calibration
against DWP's absolute targets. OBR's Pension Credit line is the same GB
series as DWP's, not identical figures. The summary now reports GB
entitled units.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The built-dataset test asserted that every Pension Credit reporter claims,
which no longer holds for SPI-synthetic units, whose reports are imputed
and no longer anchor take-up. It now checks survey reporters. The module
docstring and changelog now say the SPI reports are predicted by the
second-stage imputation from SPI incomes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… take-up

Until now every non-reporter claimed at the solved fill probability (about
13%), including units a reform newly entitles. That probability is a
residual: the share of entitled non-reporters that tops FRS reporters up to
DWP's 62%. Units with no entitlement in the calibration year are now drawn
at DWP's caseload take-up for Savings Credit-only awards, 37% in FYE 2024
(table PC1; 42% in FYE 2023), the group with the smallest awards (£9 a
week, against £87 and 69% take-up for Guarantee Credit). Reporters and the
solved fill for entitled non-reporters are unchanged, so is the solved
probability, and every entitled unit's flag.

The rate is a new take-up parameter, pension_credit_newly_entitled. The
generic assign_takeup_over_eligible helper, which applied one probability
to every non-reporter, is removed; pension_credit_takeup_flags applies the
two rates.

Tests: reporters claim, entitled non-reporters draw at the solved
probability and the rest at the new rate, and the new rate changes neither
the probability nor any entitled unit's flag (property test); weighted
take-up among entitled units still meets 62% and the rest claim at 37%
over 200,000 units; Northern Ireland follows the same split; the parameter
reads 37% for 2025 and 42% for 2022.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis changed the base branch from hb-dwp-age-split-targets to main October 5, 2026 19:24
@MaxGhenis
MaxGhenis marked this pull request as ready for review October 5, 2026 19:24
@MaxGhenis MaxGhenis closed this Oct 5, 2026
@MaxGhenis MaxGhenis reopened this Oct 5, 2026
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Hand-off to the UK hub (owner session e913bdc1, 2026-10-05).

MaxGhenis added a commit that referenced this pull request Oct 6, 2026
Conflicts resolved per runbook A4 step 10: datasets/frs.py keeps #514's assign_reported_takeup(...) calls for would_claim_pc and would_claim_uc, keeps #490/#510's comments, and ANDs #490's ~derive_all_claimants_over_state_pension_age(...) term onto the would_claim_uc draw (draw count unchanged); .gitignore takes the union of both sides; uv.lock reset to main's (b45c373), relocked in R.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Queued in release PR #544 for the 10/8 uk-data batch. It lands only on Max's go (d833).

MaxGhenis added a commit that referenced this pull request Oct 7, 2026
…ount (F1)

test_full_target_set_available_offline (from #536) asserted at least 30 OBR
targets offline. The release combines four member PRs that each replace OBR
targets with better sources, which no single PR's CI saw together:
#490 swaps obr/housing_benefit for DWP Housing Benefit targets, #510 swaps
obr/pension_credit for DWP Pension Credit spend and caseload, #533 swaps the
two OBR salary-sacrifice NI relief targets for HMRC's, and #530 merges the
two OBR UC targets into obr/universal_credit. That leaves 29 OBR targets (34
on main), so release CI failed with 29 >= 30.

The test now checks what it was for: offline, the committed workbooks give
exactly the OBR targets that the same workbooks give when served, plus the
receipts and NICs names. A broken fallback still fails it.

Release-only fix for the 10/8 uk-data release (d833).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis merged commit 152c3aa into main Oct 7, 2026
6 of 8 checks passed
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.

1 participant