Add private_pension_wealth as an explicit capital disregard; corporate_wealth keeps the share-like holdings - #1824
Draft
MaxGhenis wants to merge 1 commit into
Draft
Add private_pension_wealth as an explicit capital disregard; corporate_wealth keeps the share-like holdings#1824MaxGhenis wants to merge 1 commit into
MaxGhenis wants to merge 1 commit into
Conversation
The WAS wealth imputation folds private pension wealth (total private pension wealth less the current-employment defined benefit component) into corporate_wealth, and corporate_wealth is a capital source in every means test, so imputed pension pots fail benefit units against the GBP 16,000 Universal Credit limit: on enhanced_frs_2024_25 at 2025, 46% of UC-reporting benefit units fail the capital test, 96% of them on corporate_wealth alone (policyengine-uk-data#452). The value of a right to receive a pension under an occupational or personal pension scheme is disregarded capital (UC Regs 2013 Sch 10 para 10; HB Regs 2006 Sch 6 paras 31-32 and HB(SPC) Regs 2006 Sch 6 para 24; JSA Regs 1996 Sch 8 paras 28-29; ESA Regs 2008 Sch 9 paras 28-29; IS Regs 1987 Sch 10 paras 23-23A; SPC Regs 2002 Sch V paras 22-23). The data pipelines (microcosm#750; the uk-data mirror is held) will emit the pension component as private_pension_wealth and keep corporate_wealth to the share-like holdings. This makes the disregard explicit on the model side and keeps every other consumer whole: - private_pension_wealth: new Household STOCK input (per-capita-GDP uprating, default 0), documented as disregarded capital and absent from every capital sources list; pension income drawn still counts through private_pension_income. - corporate_wealth: documentation describes the share-like holdings the data carries (no private pensions, no corporate bonds) and names the separately exported stocks_and_shares_isa fold. - total_wealth adds private_pension_wealth, so wealth taxes and wealth deciles keep the pre-split base. - corporate_sector_wealth (corporate_wealth + private_pension_wealth) is the allocation key for shareholding, corporate_land_value and the employer NI capital response, so corporate-tax incidence and corporate land value (the LVT inputs) do not move when the data splits the column. On existing datasets every consumer is bit-identical (verified on enhanced_frs_2024_25 v1.56.16 at 2025 and 2029). - The six capital sources parameters cite the disregard paragraph; uprating_indices.yaml and growthfactors.md register the new stock. - Tests: YAML cases for each means test, the wealth aggregates, and a regression that corporate_land_value and shareholding are unchanged when wealth moves between the two components. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of PolicyEngine/policyengine-uk-data#452 (mechanism M2) and PolicyEngine/microcosm#750. Draft — held for Max's go.
What
Makes the means-test treatment of pension wealth explicit on the model side, ahead of the data pipelines splitting it out of
corporate_wealth:private_pension_wealth— new HouseholdSTOCKinput (GBP, per-capita-GDP uprating, default 0): the value of private pension rights other than current-employment defined-benefit entitlements (DC pots, AVCs, current personal pensions, retained DB/DC rights, pensions in payment, pension-sharing rights), imputed from the Wealth and Assets Survey. It is not a capital source in any means test — the value of a right to receive a pension under an occupational or personal pension scheme is disregarded capital — and pension income actually drawn still counts throughprivate_pension_income.corporate_wealth— documentation now describes what the data carries (UK shares, employee shares and options, unit and investment trusts, stocks-and-shares ISAs); no "private pensions", no "corporate bonds". It names the separately exportedstocks_and_shares_isafold (Add cash ISA and stocks and shares ISA holdings variables #1791) so nobody sums both.total_wealthaddsprivate_pension_wealth, so wealth taxes, wealth deciles andnet_wealth(Add net_wealth variable and mortgage_debt / consumer_debt inputs #1761) keep the pre-split base.corporate_sector_wealth=corporate_wealth+private_pension_wealthis the new allocation key forshareholding(corporate-tax incidence: business rates, corporate SDLT, carbon tax, corporate-incident revenue),corporate_land_value(the LVT input) andemployer_ni_response_capital_incidence. Pension funds hold corporate equity; keeping the key whole means the split moves nothing but the capital tests.sources.yamlparameters cite the disregard paragraph and explain whyprivate_pension_wealthis absent from the list;data/uprating_indices.yamlanddocs/book/assumptions/growthfactors.mdregister the new stock.Why
corporate_wealth= WAS total pensions − current DB + shares/ISAs/trusts in both data builds, and it is a countable capital source everywhere. Onenhanced_frs_2024_25.h5(uk-data 1.56.14) at 2025, 2,983 of 6,447 benefit-unit records that report Universal Credit fail the £16,000 test, 96% of them oncorporate_wealthalone (mean imputed corporate wealth among them £250k) — the largest single mechanism behind the UC caseload shortfall in policyengine-uk-data#452.Statute (all fetched 2026-08-23): UC Regs 2013 Sch 10 ¶10; Housing Benefit Regs 2006 Sch 6 ¶31–32 and the pension-age HB Regs 2006 Sch 6 ¶24; JSA Regs 1996 Sch 8 ¶28–29; ESA Regs 2008 Sch 9 ¶28–29; Income Support Regs 1987 Sch 10 ¶23–23A; State Pension Credit Regs 2002 Sch V ¶22–23 (Part I). Not modelled (stated in the docstring): the notional-income rule for claimants over SPC qualifying age with undrawn money-purchase pots, and the capital treatment of withdrawn lump sums.
Inert on today's data, whole on tomorrow's
private_pension_wealthcolumn → default 0 → every consumer is bit-identical tomainonenhanced_frs_2024_25.h5v1.56.16 at 2025 and 2029 (independent check:total_wealth,shareholding,corporate_land_value,land_value,LVT,wealth_tax,non_primary_residence_wealth_tax,household_wealth_decile,employer_ni_response_capital_incidence,corporate_sdlt,business_rates,carbon_tax,corporate_incident_tax_revenue_change,uc_assessable_capital,household_net_income,universal_credit— all byte-equal).private_pension_wealth;total_wealthandcorporate_sector_wealthequal the pre-split values by construction (float32 rounding), and only the means tests move. The measured effect on the microcosm machinery (weights unchanged, 2025): UC benefit units 5.19m → 6.27m, eligible benefit units 9.8m → 16.3m; receipt in microcosmexperiments/452-uk-pension-wealth-split.md.total_wealth/ the exposure keys silently narrow.Consumer check (every reader of
corporate_wealth/total_wealth)private_pension_wealthdocumented as disregardeduc_unearned_incomedividend gate (corporate_wealth > 0)total_wealth→wealth_tax,non_primary_residence_wealth_tax,household_wealth_decile,net_wealth(#1761)shareholding→ business rates, corporate SDLT, carbon tax, corporate-incident revenuecorporate_sector_wealthcorporate_land_value→land_value→land_value_tax(LVT paper inputs)corporate_sector_wealthemployer_ni_response_capital_incidencecorporate_sector_wealthhousehold/wealth/land/intensity.yaml: corporate_wealthcorporate_wealth(8 YAML files, 2 Python tests)Tests
New:
tests/policy/baseline/household/wealth/private_pension_wealth.yaml; disregard cases in the UC, HB, ESA, JSA, IS and PC capital YAMLs;test_corporate_land_value_key_is_unchanged_by_the_pension_split.Out of scope
Current-employment DB entitlements (WAS
DVValDBT_SCAPE, £1.15tn on the donor) are not carried by either data build — a futurecurrent_db_pension_wealthwould complete private pension wealth and changetotal_wealth. Cash ISAs (cash_isa, #1791) are capital for the means tests but the model'ssavingsmaps WAS savings accounts only — the opposite-direction gap, registered on microcosm#750.Authored by Claude (Fable) from the #452 diagnosis; six-refuter adversarial verification of the design (statute, chain, model consumers, gates, measurement, completeness) with the model-side claims re-verified bit-for-bit on the licensed artifact.
🤖 Generated with Claude Code