Let a dataset supply each benefit unit's own Pension Credit capital - #2018
Conversation
pension_credit_reported_capital (benefit unit, default -1) replaces the household proxy in pension_credit_assessable_capital when it is 0 or more. Pension Credit counts the claimant's capital and, under SPCA 2002 s.5, the partner's. A survey's benefit-unit capital measure records that directly, where the household proxy spreads imputed household wealth. With the default every output is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex review — ready to mergeReviewed commit The benefit-unit STOCK input uses a negative missing sentinel and distinguishes an explicit zero from missing capital. For a pension-age unit, the nonnegative input replaces both the household proxy and person-level capital; the existing pension-age gate and nonnegative floor remain outside that selection. The missing-input branch reproduces the old formula exactly. Other benefit units' existing proxy shares are unaffected. The input is registered with the same uprating index and dataset growth group as savings. Inspected period/entity metadata and the path through deemed income, Pension Credit income, guarantee credit, eligibility, entitlement and take-up. The changed property and YAML tests cover default behavior, zero/nonzero override, multi-unit locality, couple pooling, person-level capital replacement, working-age exclusion, tariff rounding and entitlement monotonicity. A reviewer-owned two-case YAML diagnostic additionally exercises final payments with demographic/income inputs: for a single pensioner aged 75 in 2024, £9,000 State Pension and £120,000 imputed household savings, reporting £4,000 capital produces £2,343.80 Pension Credit; leaving the sentinel produces £0. No eligibility or intermediate benefit was forced. The expected payment extends the PR's existing 2024 guarantee calculation through the unchanged final-payment formula; this is implementation/composition validation, not a new statutory-rate audit. Validation: 64 passed, 1 warning in 97.20s (0:01:37), exit 0; wrapper wall time 106.05s. Includes the new property tests, complete Pension Credit YAML directory, and two final-payment cases. Tests imported this PR's isolated source snapshot using an existing cached Python environment (PolicyEngine Core 3.32.9, NumPy 2.1.3, pandas 2.3.1, microdf-python 1.2.1, Hypothesis 6.168.2 and pytest 8.4.2). This was focused local validation, not a full-suite run or a newly synced lockfile environment. No dependencies were installed. Live check before posting (2026-10-02T10:35:16.614204+00:00): same commit, CLEAN; all reported CI checks pass. Private survey impact estimates were not rerun and are not used as approval evidence. This recommendation covers the reviewed change; it is posted as a review comment, not a formal GitHub approval vote. Merge coordination: PRs #1969 and #1896 edit the same capital formula. Preserve this override outside their valuation/claimant-renaming changes when resolving any subsequent merge conflict. The data producer must fill this input before it changes population outputs. |
Why
About a third of Family Resources Survey benefit units that report Pension Credit get no modelled entitlement. Most of them fail on deemed income from imputed household capital, which the survey's own record of their capital contradicts.
Measured on the PolicyEngine/policyengine-uk-data#510 build D Enhanced FRS (2024-25 survey, FY2025-26, Great Britain), policyengine-uk main 7b9fc37. These are the original FRS households at survey grossing weights, which reproduces #510's take-up step to within about 2%.
For the 415k who are not entitled, the two capital measures disagree:
TOTCAPB3)The imputation draws a household's wealth from Wealth and Assets Survey households with similar income, household size, tenure and region. Receipt of a means-tested benefit plays no part in that draw. Most of the gap is
corporate_wealth, which the current build fills mostly with pension wealth (PolicyEngine/policyengine-uk-data#501 removes it), plus imputed savings and property. The survey's own measure also matches how DWP treats these cases: for 2023-24 it assigned Pension Credit to eligible FRS non-reporters "using the eligibility criteria sourced from survey data, combined with administrative data" (FRS 2023-24 background information and methodology, section 8.3).What changes
New benefit-unit input
pension_credit_reported_capital(default -1):pension_credit_assessable_capitaluses it in place of the household proxy and the person-level sources. Pension Credit counts the claimant's capital and, under SPCA 2002 s.5, the partner's. A benefit-unit measure records exactly that, where the proxy spreads household wealth.savings(per-capita GDP,uprating_indices.yaml), and the sentinel stays negative under uprating.uc_reported_capitalfollows the same pattern. Nothing reads the new input until a dataset fills it. PolicyEngine/policyengine-uk-data#513 fills it from FRSTOTCAPB3and needs this release.Measured impact (real runs)
pension_credit_assessable_capital,pension_credit_entitlement,housing_benefit,council_tax_reductionandhousehold_net_incomeare identical to main for all 61,212 benefit units and 52,846 households.TOTCAPB3(build D plus that one column on original FRS benefit units, otherwise unchanged; GB, 2025-26):Several open PRs close part of the rest, and the counts below include them: #1899 (Savings Credit age test), #1940 (mixed-age saving), #1925 (2025-26 rates) and #2019 (Sch VI earnings disregards, which changes no reporter's entitlement). With all of them, this PR and capital filled for every benefit unit, 88k reporters remain not entitled (7.5%). GB entitled benefit units reach 2,084k, against roughly 2.2m implied by DWP's 1,382k caseload at 62% take-up. Calibration then needs 1.07x claims and 1.02x spending. Build D took reporters from 1,199k to 1,736k (+45%).
Rebuild (build E, real production build by the #510 session)
Build E is #510 plus PolicyEngine/policyengine-uk-data#513 on this PR combined with #2019, #1899, #1940 and #1925. Against D′ (#510 alone on 2.102.5), GB, FY2025-26:
Static totals on build D's calibrated weights are not meaningful here. Those weights already inflate reporters to make up for the missing entitlement, so filling capital without recalibrating overshoots DWP's spending (GB £6.24bn becomes £8.17bn). The pre-calibration figures above are the comparison that holds; a rebuild with the data PR gives the final numbers.
Invariants (property tests,
tests/test_pension_credit_reported_capital_properties.py)Hypothesis tests over households of one or two benefit units: ages from 30 to 90, savings, land, corporate wealth, Lifetime ISAs, State Pension, and reported capital that is -1 or between 0 and 60,000.
savings, and the default is -1.pension_credit_reported_capital.yamlhas nine hand-computed cases. They cover the default proxy, an override above and below the disregard, rounding of a part of £500, zero, a couple, person-level sources replaced, a working-age unit, a two-unit household (locality) and a guarantee credit case (2024-25 rates). The Pension Credit and local authority YAML suites (115 cases) andtests/code_healthpass locally.Coordination
is_uc_claimant→is_claimant_or_partner) edit the same formula. Whichever merges second keeps thereported_capital >= 0branch outside their valuation and renaming.corporate_wealth. That fixes the proxy for benefit units without reported capital, and it is complementary to this input.axiom: n/a: microsim input for data-supplied benefit-unit capital; no rule change (SPC Regs reg 15(6) deemed income and SPCA s.5 aggregation are unchanged)
🤖 Generated with Claude Code