Skip to content

Value means-tested capital less 10% sale expenses and secured debt (UC reg 49 and legacy equivalents) - #1969

Open
MaxGhenis wants to merge 18 commits into
mainfrom
uc-capital-sale-expenses
Open

MaxGhenis wants to merge 18 commits into
mainfrom
uc-capital-sale-expenses

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #1960.

Reproducer: policyengine_uk/tests/policy/baseline/gov/dwp/capital_valuation.yaml::UC values a mortgaged holiday home as in ADM H1602, policyengine_uk/tests/policy/baseline/gov/dwp/capital_valuation.yaml::UC shares valued less sale expenses bring capital within the limit, policyengine_uk/tests/test_capital_valuation_properties.py::test_valuation_matches_the_regulation_and_never_adds_capital

Universal Credit and every legacy means test counted each capital source at full value. The regulations value capital "at its current market value or surrender value less— (a) where there would be expenses attributable to sale, 10%; and (b) the amount of any encumbrances secured on it" (UC Regs 2013 reg 49(1)). This PR applies that valuation to UC, Housing Benefit, Income Support, income-based JSA, income-related ESA and Pension Credit.

The law

Programme Provision (GB) Northern Ireland
Universal Credit UC Regs 2013 reg 49(1) S.R. 2016/216 reg 49(1)
Housing Benefit HB Regs 2006 reg 47; HB (SPC) Regs 2006 reg 45 S.R. 2006/405 reg 44; S.R. 2006/406 reg 43
Income Support IS Regs 1987 reg 49 S.R. 1987/459 reg 49
Income-based JSA JSA Regs 1996 reg 111 S.R. 1996/198 reg 111
Income-related ESA ESA Regs 2008 reg 113 S.R. 2008/280 reg 113
Pension Credit SPC Regs 2002 reg 19 S.R. 2003/28 reg 19
  • All the legacy provisions say the same thing, in older wording ("10 per cent", "encumbrance/incumbrance").
  • The GB provisions were substituted on 1.10.2007 (SI 2007/2618). The as-made JSA 1996, SPC 2002 and HB 2006 texts already carried the 10% and encumbrance rule, plus a National Savings Certificate special case that the substitution removed. So each rate parameter starts on the date its sources parameter starts.
  • The texts were fetched from legislation.gov.uk /data.xml on 2026-09-30. An independent re-fetch confirmed the regulation numbers: JSA is reg 111, not 109; ESA is reg 113, not 112.

The DWP guidance sets the order and scope of the deductions:

  • The flat 10% applies only where selling needs an agent, broker, auctioneer, solicitor or accountant, whatever the actual costs (ADM H1604-H1605).
  • Real property always has costs of sale (H1606).
  • The 10% comes off gross value, before encumbrances (H1608; DMG 29624; MH v Waltham Forest [2016] UKUT 161 (AAC) para 43).
  • A secured debt is deducted only from the asset it is secured on; unsecured debt is not deducted (H1615-H1616).

What changes

  • capital.sale_expenses for each programme, next to its existing capital.sources:
    • rate is 0.1.
    • sources lists the capital sources whose sale incurs expenses. Each cites that programme's regulation and guidance (ADM for UC, DMG ch 29 for IS/JSA, DMG ch 84 for PC, HBGM BW1/BP1 for HB).
  • policyengine_uk/utils/capital_valuation.py adds valued_capital(). For each source it takes 10% of gross value where the source is listed, then subtracts the debt secured on that source, and floors each encumbered source at nil. Negative equity in one asset therefore never reduces another.
  • Penny rounding, as each programme's regulations require. A new capital.round_down parameter for each programme sets the rule:
    • Nearest penny, half up: UC (UC Regs 2013 reg 6(1), which is mandatory; NI reg 7(1)) and HB (HB Regs 2006 reg 80; HB (SPC) Regs 2006 reg 61(6); NI regs 78(8) and 59(7)).
    • Down: IS (reg 27), JSA (reg 92), ESA (reg 3(a)) and Pension Credit (reg 24A). These count a fraction as a penny only where that is to the claimant's advantage.
    • ADM H1665 rounds a share valuation down. For UC the regulation governs the guidance (logged as a ruling).
    • Each valuation, each UC holding and property share, and each programme's assessed capital (the last stage) is rounded by that rule, in float64.
    • exact_amount removes float32 storage error, but only where a stored value is the float nearest a whole penny (£1,000.10 is stored as 1,000.0999756). Any other value, such as a share price to four decimal places, is kept exactly.
  • Universal Credit on current main. Main values UC property on its own path (UC capital: a reported financial-capital figure replaces the whole capital stock, so second-home and non-residential property drop out #2439: property_sources, uc_*_property_capital, secured debt). This PR:
    • folds main's separate property_sale_cost_rate into the one capital.sale_expenses.rate, so a single 10% serves property and the financial pool;
    • lists corporate_wealth as UC's financial source with costs of sale, so shares count at 90% (savings stay at face value).
  • Regulation 77 (Model Universal Credit reg 77 for owner-managers of a company #1965). This PR lands second of the two, so the reg 49 factor is applied exactly once:
    • a disregarded company holding leaves capital at the value at which it was counted, 90% from the household pool (household_uc_pool_company_holdings), in the override floor (household_uc_reported_financial_capital) and from a complete uc_reported_capital, which is a countable figure;
    • it leaves the owner's own recorded benunit_reported_capital total in full, because that total is used unvalued;
    • where a recorded total is consumed from the household pool, it consumes its part beyond the holding in full and the holding at the counted 90%. A total below the holding still consumes the holding, as a complete override does, so no part of an owner's holding is left for another unit;
    • a small counted_share helper keeps the rule in one place. The company capital substituted under reg 77(2) stays outside the helper (ADM H1892).
  • The six *_assessable_capital variables call the helper instead of sum(...). The allocation proxies (adult shares, reported-claim paths) and the uc_reported_capital override are unchanged. Reported capital is taken as already assessed.
  • Three household inputs, defaulting to 0 and registered in uprating_indices.yaml next to the values they offset:
    • other_residential_property_secured_debt
    • non_residential_property_secured_debt
    • owned_land_secured_debt
  • Council tax reduction. The national schemes on main test only household savings, so nothing changes there. Kingston, Westminster, Merton and Newham use uc_assessable_capital for UC claimants, so they inherit the UC valuation. That is what the prescribed schemes' UC pass-throughs require (2886 para 37(6); WSI 3029 Sch 6 para 9(6)).

Which sources take the 10%

Source 10%? Authority
savings (bank and building society balances, cash ISAs) No Inferred, not stated in terms: an account is valued at "the balance in the account" (ADM H1675, DMG 29685, DMG 84731), and the incidental costs of withdrawing money are not costs of sale (H1607). No guidance paragraph says "cash has no costs of sale".
owned_land, other_residential_property_value, non_residential_property_value Yes, always Real property (ADM H1606). The WAS round 8 variables behind these are gross values ("Total value of other houses/buildings/UK land"), so the 10% applies to the right base.
corporate_wealth Yes Quoted shares take 10% (ADM H1665). Unit trusts do not: "no costs of sale ... even if persons use an agent" (H1674). ISAs are valued at withdrawal value (H1656).

The corporate_wealth row is a judgement, and the parameter descriptions say so:

  • The variable bundles shares with unit trusts and stocks-and-shares ISAs.
  • From WAS round 8 aggregates with an HMRC ISA look-through (Table 9.6), about 46% of the share-like holdings carry sale costs. That makes the correct deduction about 4.6% of value: about 6.3% among households near the £16,000 limit, where direct shareholdings dominate.
  • A flat 10% overstates the correct deduction by about 1.6× near the limit. Leaving corporate_wealth unlisted would understate it by the full 6.3 points.
  • The proper fix is a data split (see follow-ups).

Invariants

These hold for every input and are tested as properties (policyengine_uk/tests/test_capital_valuation_properties.py, Hypothesis). The first two were also checked on every Enhanced FRS record in every year of the impact runs below.

  1. Non-increasing. Every programme's assessable capital is at most its value with the deduction off (rate 0, no debt).
  2. Cash only. A household holding only savings has the same capital with the deduction on or off.
  3. Differential. Capital equals an independent implementation of the regulation: savings + Σ max(0, 90% × value − secured debt), over each programme's own source list.
  4. Monotone. A higher rate, or more secured debt, never raises capital.
  5. Isolation. Debt secured on one asset never takes capital below the value of the household's other assets, and capital is never negative.
  6. Pennies. 90% of any whole-penny value stored as a float32 input equals the exact figure rounded down, or to the nearest penny. This is checked in integer pence up to £131,071.99, the largest value float32 holds to the penny.
  7. Never the wrong way. For any stored value, whole penny or not, the result is within a penny below 90% of the exact value when rounding down, and within half a penny of it when rounding to the nearest penny. Storage error is removed only within half the stored value's own precision.
  8. Whole pennies through the model. Every programme counts whole-penny savings in full, shares at 90% rounded by its rule, and a Lifetime ISA at 75% below its charge-free age, to the penny.

Tests

  • New policyengine_uk/tests/policy/baseline/gov/dwp/capital_valuation.yaml has twenty-one cases, each worked by hand from the provisions above:
    • UC:
      • the ADM H1602 example: £125,000 − £12,500 − £100,500 = £12,000, so tariff income is 24 × £4.35 × 12 = £1,252.80;
      • cash savings at face value;
      • shares that bring capital under the limit: £5,000 + 90% × £12,000 = £15,800;
      • negative equity that doesn't reach savings;
      • sale expenses taken before the encumbrance;
      • each encumbered source floored on its own: a second home in negative equity plus premises worth £10,000 gives £9,000, where netting the debts across both would give nil;
      • the exact limit: £1,000 + 90% × £16,666.67 (£15,000.003, so £15,000.00 to the nearest penny) is £16,000.00, which is not greater than £16,000 (WRA 2012 s 5(1)(a); UC Regs 2013 reg 18(1)), so the household is eligible;
      • half a penny up: £1,000.02 + 90% × £16,666.65 (£14,999.985, so £14,999.99) is £16,000.01, over the limit;
      • £16,000.01 of savings under IS, JSA and ESA stays £16,000.01: stored as float32 16,000.0098, it is recovered as that penny before the last-stage floor;
      • a £1,000.04 Lifetime ISA counts £750.03;
      • pennies: 90% of £16,001 of property is £14,400.90 and 90% of £1,000.10 of shares is £900.09, £15,300.99 in all;
      • the ADM H1665 / DMG 84763 worked example, 250 shares at £4.1375: Pension Credit counts £930.93 and UC £930.94.
    • IS: capital shared three ways is rounded down at the last stage: £10,000.01 gives £3,333.33 each.
    • HB:
      • encumbered land;
      • mortgaged second homes and premises: £1,000 + (£45,000 − £30,000) + max(0, £18,000 − £25,000) = £16,000;
      • pension-age HB under HB (SPC) reg 45: 90% × £200,000 − £50,000 = £130,000. Deemed income of 240 × £52 = £12,480 exceeds the guarantee, so no guarantee credit disregards it.
    • IS, JSA, ESA and PC: one case each with secured debt or shares.
  • Updated existing expectations, each with the arithmetic in a comment:
    • IS, JSA and ESA, the cases that ignore the main residence: £10,500 becomes £1,000 + 90% × £9,500 = £9,550.
    • The private-pension disregard cases: £3,000 becomes £2,800.
    • UC and HB £50,000 property and wealth cases: £45,000.
    • The HB and PC land cases keep their intent by raising the input: 90% × £17,780 = £16,002 stays over the HB limit. A new HB case shows that land worth £16,001 now falls within it.
    • Pension Credit cases 4 and 5 are recomputed in full:
      • Case 4: capital £50,288, deemed income 81 × £52 = £4,212. Savings credit is now 60% × (£12,376 − £208.07 × 52) − 40% × (£14,688 − £12,376) = £9.02.
      • Case 5: capital £98,670, deemed income 178 × £52 = £9,256, guarantee credit £3,120.
    • test_stock_capital_periods.py now also gives the second home a £5,000 mortgage: £12,000 + (£10,800 − £5,000) + £10,800 = £28,600, the same for a month as for the year.
  • test_capital_valuation_properties.py (Hypothesis, 20-200 households per example). The oracle fixes which assets take the 10%, and the 10% itself, from the law, rather than reading the parameters. Removing HB's two property sources from its list makes these tests fail.
  • Regulation 77 tests from main, rewritten from the law now that shares count at 90%:
    • uc_company_analogous_business.yaml and the property-capital YAML and Python suites, with each figure worked in a comment;
    • a new regression, "A recorded financial total consumes its owner's company holding at its counted value": £16,500 of savings and a £10,000 holding, with a £10,000 recorded total, give capital of [£0, £16,500];
    • test_uc_company_override_properties.py: the conservation oracle (unit capitals plus disregarded holdings at 90% equal the valued pool) consumes holdings the same way. Its grid now includes recorded totals below the holdings: 1,280 households per layout;
    • three more regressions:
      • after a £10,000.01 holding leaves a £25,000.01 pool, the other unit's capital is exactly £16,000.00 and eligible;
      • £48,000.01 shared three ways is £16,000.00 each;
      • a £4,000 recorded total below a £10,000 holding consumes the holding at £9,000, leaving the other unit only its savings.
  • CI: re-running on 9b9ef66. Locally all 1,991 YAML cases under gov/dwp, finance/benefit/family and council_tax_reduction pass, as do the focused capital, company, allocation and warning-filter Python tests (162). Every check passed on a7d8988, including the full Python and YAML shards and the aggregate-impact job.

Impact on the certified data

These are real paired runs by this repository's aggregate-impact CI on enhanced_frs_2024_25.h5 (policyengine-uk-data 1.58.1, sha256 056e80fd8e91). Base is main e2ea32893; head is this PR merged onto it. Each fiscal year is a full microsimulation on each side (report).

Change 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Universal Credit +£225.7m +£370.5m +£577.9m +£516.8m +£1.32bn +£1.49bn +£1.12bn
Universal Credit caseload +31.5k +44.0k +47.0k +46.7k +97.9k +92.4k +69.2k
Housing Benefit +£0.8m +£0.8m +£0.3m +£2.7m +£0.5m +£31.0m +£45.5m
Pension Credit +£0.9m +£1.0m +£1.0m +£0.7m +£0.7m +£0.7m +£0.6m
ESA (income-related) +£4.4m +£0.9m +£1.0m +£3.5m +£1.4m +£1.4m +£1.6m
Scottish Child Payment 0 0 0 0 +£5.9m +£6.1m +£4.9m
Tax-Free Childcare -£0.9m -£1.3m -£1.3m 0 -£1.5m -£10.3m -£10.6m
Household net income +£231.2m +£372.9m +£579.1m +£523.9m +£1.33bn +£1.52bn +£1.16bn
Absolute poverty AHC, children -0.02pp -0.19pp -0.29pp -0.16pp -0.42pp -0.37pp -0.15pp

How to read these:

  • Who gains. Household-matched changes within the base run's deciles are non-negative in every decile and year, and largest in deciles 1, 2 and (from 2029-30) 5.
  • Decile flags. The report's "mean household_net_income per household" flags (for example decile 9, −£480 in 2026-27) are each side's own-decile levels (measure.py, group "Own-decile levels"). They move as households re-rank, and they net to the total.
  • Knock-ons. Scottish Child Payment and Tax-Free Childcare move because new UC claimants become eligible for the first and lose the second: UC is among SCP's qualifying_benefits and among Tax-Free Childcare's disqualifying_benefits.
  • Concentration. UC caseload moves by 30-100k, so the figures rest on a modest number of records near the capital limits. On the earlier build, the year-to-year swings came from records crossing the frozen £16,000 limit as capital is uprated. That was not decomposed on this dataset.
  • Composition. The figures are the effect of the code on this dataset's capital variables. Where corporate_wealth still holds unit trusts, ISAs or pension wealth (see the parameter descriptions, Exclude corporate_wealth from Universal Credit countable capital pending a pension split #1837 and policyengine-uk-data#501), part of the share deduction reaches assets the law would treat differently. These are not a fiscal estimate of reg 49 alone.

Earlier runs on a private copy of the 29 September Enhanced FRS build (before #1950, #2201 and #2439 merged) are kept in the evidence folder for the record. On that build every award effect ran through corporate_wealth, about 85% of which was pension wealth there. A run that applied the deduction to property and land only changed no award.

Coordination

axiom: TheAxiomFoundation/rulespec-uk#395 queued

  • Reg 49 is not encoded in rulespec-uk: UC 46, 47, 48, 18 and 72 take valued capital as an opaque leaf.
  • None of these provisions is in the pinned signed corpus release, so the encoder route is blocked until they are ingested. The queued issue carries the verbatim law, corpus state, landing path, a pasteable review_finding and hand-computed companion tests (ADM H1602 and H1616).

Follow-ups (chips filed)

  • Export secured debt on other property (WAS DVHseDebtR8_sum, DVBldDebtR8_sum, DVLUKDebtR8_sum; buy-to-let DVBltValR8_sum/DVBLtDebtR8_sum is being checked too), the pension split and a share / fund / ISA split of corporate_wealth from policyengine-uk-data. In progress as Split pensions, shares, trusts, ISAs and secured debt out of WAS wealth policyengine-uk-data#501 (draft). It exports private_pension_wealth, directly_held_shares, unit_and_investment_trusts, stocks_and_shares_isa, cash_isa and the three *_secured_debt columns, and adds buy-to-let to other_residential_property_value. A model-side follow-up stacked on this PR will name the split variables in the sale-expense lists, so that unit trusts and stocks-and-shares ISAs are exempt.
  • National CTR schemes count only savings and apply no tariff income; they should count all capital, with the UC and PC pass-throughs.
  • UC capital sources omit owned_land, which every legacy test counts (from Add Universal Credit capital limits #1572, no stated reason).
  • axiom-oracles' capital surfaces feed PE assessable capital into the Axiom side, so they can never catch a valuation error.
  • rulespec-uk's composed UC pipeline ends entitlement at exactly £16,000 (>=); the Act says "not greater than".

🤖 Generated with Claude Code

UC Regs 2013 reg. 49(1) and its legacy equivalents (HB Regs 2006 reg. 47,
HB (SPC) Regs 2006 reg. 45, IS Regs 1987 reg. 49, JSA Regs 1996 reg. 111,
ESA Regs 2008 reg. 113, SPC Regs 2002 reg. 19) calculate capital at market
or surrender value less 10% where a sale would incur expenses and less any
encumbrance secured on it. The model summed every capital source at full
value.

Each programme gets a capital.sale_expenses node (rate 0.1 and the sources
whose sale incurs expenses: land, property and corporate_wealth, not cash
savings). A shared helper applies the 10% before the encumbrance and never
values an encumbered asset below nil. New household inputs carry debt
secured on other residential property, non-residential property and land;
the Enhanced FRS has none, so they default to zero.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits September 30, 2026 22:07
- Each programme's sale-expense parameters now cite its GB and NI
  regulations, the guidance paragraph that orders the 10% before the
  encumbrance, and per-asset guidance with exact PDF page anchors (DMG ch 52
  for ESA, HBGM Annex F for HB savings, H1656/H1665/H1673-H1675 for UC).
- The source-list descriptions and changelog say plainly that
  corporate_wealth also holds unit trusts, ISAs, employee share options and,
  in datasets built before the pension split, non-DB pension wealth.
- The helper and secured-debt docs say debts net within a source category.
- The property-test oracle fixes the sale-expense assets and the 10% itself
  instead of reading the parameters, checks pension-age HB, and runs on
  larger populations. New hand-computed cases cover HB second homes and
  premises, per-source flooring between two encumbered sources, pension-age
  HB, and a monthly secured debt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
HBGM W1.430 states only the general 10% rule; the rule that real property
always has costs of sale comes from R(IS) 21/93, as DMG 29622 applies it.

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

Copy link
Copy Markdown
Collaborator Author

Coordination note from #1950 (UC capital income). If this PR lands after #1950, please update the "reg 49 is #1960" notes #1950 adds:

  • in uc_income_from_capital.yaml, the header and both let-property cases (GB and NI);
  • in uc_unearned_income.yaml, the savings-0 let-property case.

Those cases enter £10,000 of property as capital. At 90% that is 12 tariff steps, not 16, so either update the expected values or restate the input as a property value of £11,111.11. If #1950 lands second, I'll do it on rebase. #1950's merge is waiting on a decision from Max (over the £1bn/yr line).

🤖 Generated with Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

#1950 merged (770bc06), so this PR is second. Please update the "reg 49 is #1960" notes:

  • in uc_income_from_capital.yaml, the header and the GB and NI let-property cases;
  • in uc_unearned_income.yaml, the savings-0 let-property case.

At 90% valuation, £10,000 of property is 12 tariff steps, not 16, so either update the expected values or enter £11,111.11.

🤖 Generated with Claude Code

Max Ghenis and others added 2 commits October 3, 2026 17:20
Resolve the capital variables onto main's claimant/partner allocation and
person-level sources, valuing household sources through valued_capital.
Update the let-property tests #1950 added: £10,000 of property is now £9,000
of capital under reg. 49(1), so 12 tariff steps, not 16.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two tests main added after this branch's earlier base assumed full-value
capital:

- The CTR savings-credit-only case holds savings 10,000 and a 7,000 second
  property: capital is 10,000 + 90% of 7,000 = 16,300 (SPC Regs 2002 reg.
  19(a)), still over the 16,000 limit, so CTR stays nil. Deemed income is 13
  steps x 52 = 676, Pension Credit income 13,314 + 676 = 13,990, and savings
  credit 60% of (12,376 - 208.07 x 52) less 40% of (13,990 - 12,376) =
  288.22.
- The reported-capital property test's proxy oracle now values land,
  property and shares at 90% and savings at face value.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 4, 2026
The six capital sources lists (UC, HB, IS, JSA, ESA, PC) name
directly_held_shares, unit_and_investment_trusts and stocks_and_shares_isa
in place of corporate_wealth, plus a new formula variable,
unitemised_corporate_wealth = max(0, corporate_wealth - components), for
whatever a dataset does not itemise. Datasets without the components keep
counting corporate_wealth in full; datasets that build corporate_wealth as
the components' exact sum count the same total, now itemised, so each
component can carry its own valuation rule (the sale-expense deduction stacked
on #1969 exempts unit trusts and ISAs). No dataset's capital changes: a
differential property test checks that every programme's assessable capital
equals the same holdings entered as one corporate_wealth.

Review nits: the growth-factor sentence now matches uprating_indices.yaml
exactly; the variable docs cite the DMG for the legacy benefits, the expert
valuation of unquoted shares and the quoted-share rule for investment trusts.

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

Copy link
Copy Markdown
Collaborator Author

Stacked follow-up: #2131 lists only directly_held_shares and unitemised_corporate_wealth as share-like sources with sale expenses, so unit and investment trusts (ADM H1673-H1674) and stocks and shares ISAs (ADM H1656) count at full value. It builds on this branch's head 22274ca and includes #1974, which itemises corporate_wealth in the six capital lists. Datasets that don't itemise keep this PR's flat treatment exactly.

🤖 Generated with Claude Code

@vahid-ahmadi vahid-ahmadi left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Max. Reviewed at head 22274cad.

The law is right in every programme. I re-fetched each provision from legislation.gov.uk:

  • UC Regs 2013 reg 49(1): "Capital is to be calculated at its current market value or surrender value less— (a) where there would be expenses attributable to sale, 10%; and (b) the amount of any encumbrances secured on it."

  • The same rule appears, in older wording ("10 per cent", "encumbrance/incumbrance"), in:

    • SPC Regs 2002 reg 19;
    • HB Regs 2006 reg 47 and HB (SPC) Regs 2006 reg 45;
    • IS Regs 1987 reg 49;
    • JSA Regs 1996 reg 111;
    • ESA Regs 2008 reg 113.

    The regulation numbers are right (JSA 111 and ESA 113).

  • CTR Prescribed Requirements SI 2012/2885 Sch 1 para 32 has the same 10% rule for pension-age CTR.

  • SPC Sch V has no disregard that touches share, unit trust or ISA valuation. Para 9 is business assets only.

The helper follows the guidance. valued_capital takes the 10% off gross value before the debt (ADM H1608) and floors each encumbered source on its own (H1615-H1616).

Probes all match hand arithmetic:

  • savings £5,000 + corporate_wealth £12,000 gives £15,800 for UC, HB and IS, and £15,800 for PC at 70 (main: £17,000);
  • a £100,000 second home with £95,000 debt plus £3,000 savings gives £3,000;
  • a second home of £20,000 with £25,000 debt plus premises of £10,000 gives £9,000.

Tests:

  • At the head: properties, PC reported capital and stock periods, 9 passed. DWP, family and CTR YAML, 967 passed.
  • Merged into current main b5b09231 (the merge is clean; the branch is 280 commits behind): the same YAML set, 1,274 passed. But two of the new property tests fail; see finding 1. The green CI is from the stale merge ref.

Findings:

  1. Blocking (rebase). On main + this branch, test_valuation_matches_the_regulation_and_never_adds_capital and test_cash_only_households_have_no_deduction fail (2 failed, 8 passed). The valuation isn't the problem; the test's oracle is out of date.

    • Main now sets HB capital to nil for anyone on UC, IS, income-based JSA or income-related ESA (HB Regs Sch 6 para 5, housing_benefit_on_passporting_benefit). It also switches the pension-age rules on housing_benefit_pension_age_regulations_apply rather than age 67.
    • So a working-age single person with £2,441.62 of cash now has HB capital of nil (on main too), while applies() at tests/test_capital_valuation_properties.py:127 still expects their savings.
    • I reproduced the cash-only failure directly. The other failing test uses the same applies() predicate, so it is most likely the same cause.
    • Fix: rebase and key the pension-age branch on housing_benefit_pension_age_regulations_apply. Then either skip units where housing_benefit_on_passporting_benefit is true, or give the generated units enough earnings to stay off UC. Skipping alone would hollow out the working-age HB branch, because the strategy's no-income singles are nearly all on UC.
  2. Blocking (merge order with #1974). Git merges this branch and #1974 cleanly, but together they undo this PR:

    • #1974 takes corporate_wealth out of every capital.sources list, while this PR's sale_expenses.sources still names it. So the 10% on shares silently stops.
    • On a 1969 + 1974 tree, the probe above goes back to £17,000. Seven YAML cases fail: 3 in capital_valuation.yaml, and 2 each in the IS and ESA capital files.
    • #2131 fixes this. So either merge #1974 first and then this PR and #2131 together, or merge this PR and then #2131 retargeted to main (it carries #1974).
    • A cheap guard in tests/test_capital_valuation_properties.py: assert set(sale_expenses.sources) <= set(capital.sources) for each programme. The existing check at line 160 intersects both sides with counted, so it can't see a stale name.
  3. Should fix (body, disclosure). In "A few records carry each figure", the UC, PC and HB bullets, and the poverty bullet, attribute most of each year's change to one or a handful of records, with percentages and counts. Read against the impact table, that is effectively a record-level weighted amount. Keep the caveat ("driven by a handful of records; not an estimate") and drop the percentages, record counts and the median gain.

  4. Nit. parameters/gov/dwp/income_support/means_test/capital/sale_expenses/rate.yaml:9. This starts on 2010-01-01, to match sources. IS reg 49 has applied the 10% since 11.4.1988. Add a sentence saying the date follows the sources list, as the HB and PC files already explain their own dates.

  5. Nit. utils/capital_valuation.py:18-19. Netting debt across assets within a category is documented. H1616 actually allows it where one debt is secured on several assets. You could cite that, so the approximation reads as partly lawful rather than purely a data limitation.

  6. Coordination with #1965. Merged with #1965 there is no textual conflict, but the holding comes off at 100% while it is counted at 90%: savings £5,000 + a £10,000 holding gives £4,000 instead of £5,000. I've put the fix on #1965, since it rebases second.

Max Ghenis and others added 4 commits October 11, 2026 20:55
Keep main's recorded benefit-unit capital (benunit_reported_capital), which
replaces the valued household sources as recorded, and register the
secured-debt inputs beside main's uprating entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
£20,000 of shares is £18,000 of Pension Credit capital (SPC Regs 2002
reg. 19(a)), still over the CTR limit: deemed income 16 x 52 = 832,
Pension Credit income 14,146, savings credit 933.816 - 0.4 x 1,770 =
225.82.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main's Housing Benefit passport (#1927 and the Universal Credit limb) gives a
family on a passporting benefit nil HB capital, so the property's
independent reg 47 valuation applies only to non-passported families.

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

Copy link
Copy Markdown
Collaborator Author

Refreshed onto current main at Fleet ops' request (owner session c12c197a not running): 54ed063.

Local results on the new head:

  • benefit, gov/dwp, household/wealth and gov/local_authorities YAML: 1,669 passed;
  • property tests: 3 passed;
  • code_health: passed;
  • ruff: clean.

A fresh independent review is being requested at this head.

🤖 Generated with Claude Code

MaxGhenis added a commit that referenced this pull request Oct 12, 2026
#1974 replaced the components-plus-residual design with one share_like_capital
block that keeps the supplied corporate_wealth exactly. This follow-up now
splits that block in two:

- share_like_capital_with_sale_expenses: share_like_capital less the itemised
  holdings in gov.dwp.share_like_capital.without_sale_expenses (unit and
  investment trusts, stocks and shares ISAs), floored at nil; all of it when
  nothing is itemised.
- share_like_capital_without_sale_expenses: the rest, exactly nil when nothing
  is itemised.

The six capital lists name both parts and the six sale-expense lists the
first, so datasets that carry only corporate_wealth keep #1969's flat 10%
exactly (differential test, annual and monthly, against the lists before
itemising, including negative aggregates and a value whose 90% is a fraction
of a penny over the limit). The exempt holdings are a parameter list, so the
methodology call on investment trusts and ISAs (d1396) is a one-line change.

Merged the refreshed #1969 (54ed063) and #1974 (7784193). #1969's
property oracle reads the share-like sources from an unitemised household's
corporate_wealth; the split invariants (definition of both parts, the
unitemised differential, split effect = 10% of trusts plus ISAs on UC
capital, components-only valuation) are in test_capital_share_components.
Dropping the nothing-itemised branch from the formula fails the differential.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 3 commits October 13, 2026 08:35
Review of 54ed063: half the generated units now decline Universal Credit,
so the Housing Benefit passport cannot remove every working-age unit from the
reg 47 differential, and a passported unit's HB capital is asserted to be nil
rather than skipped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Delta review of b541677 (F1): coverage of the HB passport-nil assertion and
the working-age reg 47 differential depended on Hypothesis draws. The checks
move into check_valuation(), which counts the branches it ran, and a fixed
test asserts both run: a UC claimant with £5,000 of savings (passported, nil
HB capital) and a non-claimant with a mortgaged second home (valued under
reg 47).

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

@vahid-ahmadi vahid-ahmadi left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Needs changes before merge. The reg 49 valuation is still right. But this head fails a main test in CI, and #1965 merged first without the rate fix I flagged last time, so on main the company holding now comes off at the wrong rate.

@MaxGhenis, this is a delta review. My last review was at 22274cad; this one is at 1efee62b. Since then:

  • main was merged three times (up to 976ec91fe);
  • the CTR shares case was revalued under reg 19 (f3929c19);
  • the HB property oracle was reworked (54ed063b, 3abaf166, 1efee62b).

Main has since moved on to 714b1438c, which includes #1965.

Status of my earlier findings:

  • F1 (stale HB oracle): fixed. Passported units are now asserted to have nil HB capital, and a fixed test proves both branches run. Its property tests pass at this head and on current main.
  • F2 (merge order with #1974): still live. See finding 4.
  • F3 (record-level figures in the body): not addressed. See finding 5.
  • F4 and F5 (nits): not taken. That's fine.
  • F6 (#1965): now this PR's to fix. See finding 2.

Findings:

  1. must. CI Test / Python 1/4 fails at this head, and this PR causes it. The failing test is tests/test_savings_credit_only_receipt_properties.py:508, test_stopping_pension_credit_payments_ends_the_pension_credit_capital_test, from main. Its case is £12,000 of savings plus £5,000 of other property, with expectations written for full value. I reproduced the failure at this head (it gets 621.816, not 601.02). It passes at 976ec91fe.

    • Under reg 19 the property is £4,500, so PC capital is £16,500. That is still over £16,000, so the test's point (no CTR) holds.
    • Deemed income is (16,500 − 10,000) / 500 = 13, so £13 a week. Income falls from £254 to £253, so the savings credit is 0.6 × 29.93 − 0.4 × (253 − 238) = £11.958 a week, or £621.82 a year. The engine agrees.
    • Update the comment and two expectations: 601.02 → 621.82, and council_tax_reduction_assessable_capital 17,000 → 16,500. The stopped branch is unaffected, because it uses savings only.
  2. must (my F6, now on this PR). uc_assessable_capital.py subtracts disregarded company holdings at full value, while this PR counts corporate_wealth at 90%. That happens both in household_uc_pool_company_holdings (capped at full corporate_wealth) and in own_holdings against reported capital.

    • Probes on this head merged into current main (the merge is clean): a single UC claimant who stands as sole owner of a trading company, with a £10,000 holding and no company capital.

      Case This PR on main Expected
      savings £5,000, corporate_wealth £10,000 £4,000 £5,000
      savings £5,000, corporate_wealth £20,000 £13,000 £5,000 + 90% × £10,000 = £14,000

      Main alone gives £5,000 and £15,000. So the reg 77(2) disregard now takes £1,000 of savings with it.

    • Fix: take the holding off at the rate its source was counted at, 1 − sale_expenses.rate, when corporate_wealth is in UC's sale-expense list. Cap it at the valued corporate_wealth. Do this in the pool and, if reported capital is taken as already valued, against reported capital too.

    • Main's own #1965 tests already catch it. On this head merged into main, 8 of the 26 cases in tests/policy/baseline/finance/benefit/family/universal_credit/company/uc_company_analogous_business.yaml fail. Three properties in tests/test_uc_company_owner_properties.py fail too: test_household_capital_is_allocated_and_conserved_across_benefit_units, test_disregarded_holdings_count_for_no_benefit_unit and test_capital_and_earnings_identities.

    • Five of the eight failing YAML cases are the holding at full value: the cases at lines 114, 152, 329, 459 and 616. For example, in the property company case at line 114 (savings £2,000, a £90,000 holding, company capital £120,000), the expected £122,000 comes out as £120,000. That's 2,000 + 81,000 − 90,000, floored at nil, plus 120,000.

    • The other three (lines 210, 247 and 275) have no disregarded holding. There corporate_wealth simply counts at 90%, which is this PR's intended change, so they only need new expectations.

    • The cases at lines 182 and 297 pass only because the nil floor absorbs the same 10% gap, so the bug reaches further than the failures show.

    • CI at this head was cut before #1965 merged, so it can't show any of this.

    • Add my two cases above as tests too.

  3. should. There's still no guard against a sale-expense list naming a source that no capital list counts. That is exactly how #1974 silently undoes this PR.

    • My earlier suggestion (sale_expenses.sources ⊆ capital.sources) would trip on UC, whose sale list names owned_land while UC capital omits it.
    • A version that works: assert that every name in each sale_expenses.sources is in at least one programme's capital.sources.
    • The current check at tests/test_capital_valuation_properties.py:178 intersects with counted, so it can't see a stale name.
  4. should (merge order, still live). At these heads, a #1969 + #1974 tree gives £5,000 savings + corporate_wealth £12,000 = £17,000 for UC and IS, and for PC at 70. This PR alone gives £15,800. Either land #2131 retargeted to main (it contains this PR and #1974) and close the other two, or land all three back to back with #2131 green first.

  5. should (body, my F3). "A few records carry each figure" still gives top-record shares (35-78%, 69-78%, 95-97%) and record counts. The poverty bullet still gives "56 person records in 36 benefit units", "97% of the weight" and the median gain. Read against the table, that's record-level weighted detail. Keep the caveat and drop the numbers. The table is also from before the 10/12 merges, as the body says, so mark it as superseded rather than leaving it as the PR's impact.

What I checked:

  • Merge resolutions. --remerge-diff on a8857439d, 503bebb4a and b5416775. The conflicts in uprating_indices.yaml and the uc_assessable_capital docstring were resolved keeping both sides.
  • New CTR expectations, by hand. 18,000 capital, then (18,000 − 10,000) / 500 = 16 × £52 = £832, then 13,500 − 186 + 832 = 14,146, then 933.816 − 0.4 × 1,770 = 225.82. All match.
  • Tests. I ran the capital-valuation, PC reported-capital, stock-period, share-component, wealth-component, projection-horizon and savings-credit-only property files, code_health, and #1965's two company-owner files. I also ran the YAML under gov/dwp, finance/benefit, household/wealth and gov/local_authorities.
    • At this head: 1 failed (finding 1) and 2,334 passed; YAML 1,879 passed.
    • Merged into current main (the merge is clean): 4 failed (finding 1, plus the three #1965 properties) and 2,379 passed; YAML 8 failed (finding 2) and 1,970 passed. Current main 714b1438c on the same set: all 2,363 pass, and YAML 1,964 pass.
  • Lint. ruff check and ruff format --check on the 13 changed Python files: clean.
  • CI at 1efee62b. Every check passes except Test / Python 1/4, which fails on finding 1 only (1 failed, 1,415 passed).
  • Not checked. The Enhanced FRS impact at this head; I have no data access.

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits October 19, 2026 15:53
Savings 12,000 plus a 5,000 property is 12,000 + 4,500 = 16,500 of Pension
Credit capital (SPC Regs 2002 reg. 19(a)), still over the 16,000 CTR limit.
Deemed income is 13 a week, so the savings credit is 0.6 x 29.93 - 0.4 x 15
= 11.958 a week (621.82).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main now values Universal Credit property on its own path (#2439:
property_sources, secured debt, a 10% property_sale_cost_rate) and carries
regulation 77 company substitution (#1965). Reconcile:

- One UC rate: property_sale_cost_rate becomes capital.sale_expenses.rate,
  used by the property path and the financial pool; UC sale_expenses.sources
  lists the financial source with costs of sale, corporate_wealth.
- The financial pool is valued with valued_capital, so shares count at 90%.
- As the second of #1965 and #1969 to land, value reg. 77 holdings where they
  leave capital: at 90% from the pool (household_uc_pool_company_holdings),
  in the override floor (household_uc_reported_financial_capital) and from a
  complete override, which is a countable figure; in full from a recorded
  financial total, which is used unvalued. A shared counted_share helper.
- Keep main's secured-debt inputs, documenting the legacy equivalents, and
  add owned_land_secured_debt in the same shape.
- Tests main added that assumed full-value shares, rewritten from the law:
  the reg. 77 company cases, the property-capital and mock suites, the
  company-override conservation identities and the savings-credit-only cases.

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

Copy link
Copy Markdown
Collaborator Author

Status at a7d8988 (merges main e2ea328):

  • UC capital: a reported financial-capital figure replaces the whole capital stock, so second-home and non-residential property drop out #2439 reconciled. UC now has one 10% parameter, capital.sale_expenses.rate, which replaces property_sale_cost_rate. It is used by main's property path and by the financial pool, where corporate_wealth (shares) now counts at 90%.
  • Model Universal Credit reg 77 for owner-managers of a company #1965 interaction. This PR lands second, so it applies the reg 49 factor to reg 77 holdings exactly once. Holdings leave the pool, the override floor and a complete override at 90%, and leave a recorded benunit_reported_capital total in full, because that total is used unvalued.
  • Tests from main that assumed full-value shares are rewritten from the law: the reg 77 company cases, the property-capital and mock suites, the company-override conservation identities, and the savings-credit-only Pension Credit cases (£16,500 of capital; savings credit £621.82). This also fixes the earlier Test / Python 1/4 failure.
  • Local results. 364 capital, company and property pytest cases pass, as do the 540 related YAML cases. The full local suites and a fresh real impact run against e2ea328 are queued behind the Route A host reservation, which ends 2026-10-21 04:00Z.
  • Review. An independent GPT-6.1 Sol review of this head is dispatched (20261019-163419-pr1969-review-v3) and will run when the Codex lanes reopen at 2026-10-20 01:04Z.

The target is to land before the triple-lock re-certification (~26 Oct). The impact table in the description will be refreshed from the new runs.

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Aggregate impact on certified data: pass

Base 582b86315c against head 31591a1f68, both on enhanced_frs_2024_25.h5 (policyengine-uk-data 1.58.1, sha256 056e80fd8e91), fiscal years 2025-26 to 2031-32. Each year is a full microsimulation run on each side.

Checks: 0 broken by this change, 1 failing on both sides, 0 fixed. Moves flagged for review: 188 (thresholds in report_spec.yaml; a flag does not fail the job).

Workflow run and full report

Notes

  • In the years a figure from fewer than 10 records is suppressed (spending.disabled_students_allowance), every total containing it, and the decile incomes, are rebuilt from their other components, so no published total includes it. Those totals are marked †. A change is withheld where the two sides leave out different figures and can't be lined up.

Moves flagged for review

Measure Year Base Head Change
Universal Credit 2030-31 £89.03bn £90.51bn +£1.49bn
Universal Credit 2029-30 £87.61bn £88.94bn +£1.32bn
Decile 5: mean household_net_income per household 2029-30 £48,027 £48,649 +£622
Universal Credit 2031-32 £90.35bn £91.47bn +£1.12bn
Decile 5: mean household_net_income per household 2030-31 £49,181 £49,494 +£312
Decile 3: mean household_net_income per household 2031-32 £38,492 £38,733 +£241
Universal Credit 2027-28 £84.93bn £85.50bn +£577.9m
Decile 3: mean household_net_income per household 2029-30 £37,221 £37,433 +£212
Decile 7: mean household_net_income per household 2031-32 £62,893 £63,235 +£342
Decile 2: mean household_net_income per household 2028-29 £28,983 £29,139 +£156
Decile 4: mean household_net_income per household 2031-32 £44,926 £45,168 +£241
Decile 5: mean household_net_income per household 2031-32 £50,036 £50,299 +£264
Decile 9: mean household_net_income per household 2026-27 £81,992 £81,560 -£432
Decile 8: mean household_net_income per household 2031-32 £77,578 £77,171 -£407
Universal Credit 2028-29 £86.69bn £87.20bn +£516.8m
Decile 8: mean household_net_income per household 2026-27 £70,356 £70,719 +£363
Relative poverty, before housing costs: pensioners 2031-32 1,686k 1,726k +40.7k
Relative poverty, before housing costs: children 2029-30 23.2% 22.8% -0.47pp
Decile 8: mean household_net_income per household 2030-31 £75,797 £75,473 -£324
Decile 3: mean household_net_income per household 2030-31 £37,811 £37,972 +£160
Decile 8: mean household_net_income per household 2029-30 £74,351 £74,038 -£314
Decile 2: mean household_net_income per household 2029-30 £29,330 £29,452 +£122
Absolute poverty, before housing costs: children 2029-30 21.6% 21.2% -0.41pp
Relative poverty, before housing costs: children 2029-30 3,542k 3,470k -71.3k
Absolute poverty, before housing costs: children 2029-30 3,298k 3,235k -62.6k
Decile 2: mean household_net_income per household 2027-28 £28,705 £28,813 +£108
Universal Credit 2026-27 £83.11bn £83.48bn +£370.3m
Relative poverty, before housing costs: children 2031-32 23.2% 23.6% +0.37pp
Relative poverty, after housing costs: children 2030-31 31.6% 31.2% -0.36pp
Decile 2: mean household_net_income per household 2026-27 £29,102 £28,998 -£104
Relative poverty, before housing costs: pensioners 2031-32 14.6% 14.9% +0.35pp
Decile 4: mean household_net_income per household 2029-30 £43,435 £43,292 -£143
Tax-Free Childcare 2027-28 1,028k 1,011k -16.8k
Tax-Free Childcare 2026-27 1,028k 1,011k -16.8k
Relative poverty, before housing costs: children 2031-32 3,565k 3,622k +56.8k
Decile 3: mean household_net_income per household 2026-27 £35,807 £35,918 +£111
Relative poverty, before housing costs: children 2027-28 23.2% 22.9% -0.31pp
Universal Credit 2029-30 6,395k 6,493k +97.9k
Relative poverty, before housing costs: everyone 2031-32 11,879k 12,058k +179.8k
Government balance, each receipt once 2030-31 £501.23bn £499.71bn -£1.52bn

148 more flags are in the report artifact.

Receipts by tax head

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
TV licence fee -£0.2m -£0.2m -£0.2m -£0.2m -£80,053 -£80,413 -£6,209

Spending by benefit and service

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Pension Credit +£1.0m +£1.1m +£1.0m +£0.7m +£0.7m +£0.7m +£0.6m
Winter Fuel Payment +£6,040 0 0 0 0 0 0
Universal Credit +£225.7m +£370.3m +£577.9m +£516.8m +£1.32bn +£1.49bn +£1.12bn
Housing Benefit +£0.9m +£0.8m +£0.3m +£2.8m +£0.6m +£30.8m +£43.8m
Council Tax Reduction +£0.8m +£0.2m +£0.9m +£1.0m -£20,650 -£25,929 -£0.3m
Employment and Support Allowance (income-related) +£4.4m +£0.9m +£1.0m +£3.5m +£1.4m +£1.4m +£1.6m
Jobseeker's Allowance (income-based) +£13,693 0 0 0 0 0 0
Income Support +£44,469 0 0 0 0 0 0
Scottish Child Payment 0 0 0 0 +£5.9m +£6.1m +£4.9m
Tax-Free Childcare -£0.9m -£1.3m -£1.3m 0 -£1.5m -£10.3m -£10.6m
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Caseloads

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Pension Credit +975 +2.4k +967 +1.2k +445 +457 +45
Winter Fuel Payment +30 0 0 0 0 0 0
Universal Credit +31.5k +44.0k +47.0k +46.7k +97.9k +92.4k +69.2k
Housing Benefit +94 +87 0 +198 0 +3.1k +5.0k
Council Tax Reduction +99 -76 +551 +553 0 0 -54
Employment and Support Allowance (income-related) +317 0 0 +190 0 0 0
Scottish Child Payment 0 0 0 0 +3.8k +3.8k +3.0k
Tax-Free Childcare -1.3k -16.8k -16.8k 0 -4.3k -12.1k -11.6k
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Government balance, each component counted once

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Government receipts, each component once -£0.2m -£0.2m -£0.2m -£0.2m -£80,053 -£80,413 -£6,209
Government spending +£231.9m † +£372.0m † +£579.9m † +£524.8m † +£1.33bn † +£1.52bn † +£1.16bn †
Government balance, each receipt once -£232.1m † -£372.2m † -£580.1m † -£525.0m † -£1.33bn † -£1.52bn † -£1.16bn †

Model totals

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
gov_tax -£0.2m -£0.2m -£0.2m -£0.2m -£80,053 -£80,413 -£6,209
household_tax -£0.2m -£0.2m -£0.2m -£0.2m -£80,053 -£80,413 -£6,209
pre_budget_change_household_tax -£0.2m -£0.2m -£0.2m -£0.2m -£80,053 -£80,413 -£6,209
gov_spending +£231.9m † +£372.0m † +£579.9m † +£524.8m † +£1.33bn † +£1.52bn † +£1.16bn †
household_benefits +£231.9m † +£372.0m † +£579.9m † +£524.8m † +£1.33bn † +£1.52bn † +£1.16bn †
gov_balance -£232.1m † -£372.2m † -£580.1m † -£525.0m † -£1.33bn † -£1.52bn † -£1.16bn †

Household income totals

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Household net income +£232.1m † +£372.2m † +£580.1m † +£525.0m † +£1.33bn † +£1.52bn † +£1.16bn †
Household net income (HBAI definition) +£231.9m +£371.9m +£579.8m +£522.9m +£1.33bn +£1.52bn +£1.16bn

Poverty rates

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone -0.02pp -0.02pp -0.08pp -0.09pp -0.16pp -0.09pp -0.08pp
Absolute poverty, before housing costs: children -0.04pp -0.04pp -0.21pp -0.24pp -0.41pp -0.22pp -0.17pp
Absolute poverty, before housing costs: working-age adults -0.02pp -0.02pp -0.05pp -0.06pp -0.11pp -0.06pp -0.06pp
Absolute poverty, before housing costs: pensioners -0.00pp -0.00pp -0.00pp -0.00pp 0 -0.02pp -0.03pp
Absolute poverty, after housing costs: everyone -0.01pp -0.11pp -0.11pp -0.06pp -0.15pp -0.16pp -0.12pp
Absolute poverty, after housing costs: children -0.02pp -0.30pp -0.27pp -0.14pp -0.29pp -0.30pp -0.15pp
Absolute poverty, after housing costs: working-age adults -0.01pp -0.08pp -0.08pp -0.04pp -0.15pp -0.16pp -0.13pp
Absolute poverty, after housing costs: pensioners -0.00pp -0.00pp 0 -0.00pp 0 -0.01pp -0.03pp
Relative poverty, before housing costs: everyone -0.02pp -0.08pp -0.11pp -0.09pp -0.13pp -0.06pp +0.25pp
Relative poverty, before housing costs: children -0.04pp -0.23pp -0.31pp -0.22pp -0.47pp -0.16pp +0.37pp
Relative poverty, before housing costs: working-age adults -0.02pp -0.06pp -0.07pp -0.06pp -0.07pp -0.06pp +0.19pp
Relative poverty, before housing costs: pensioners -0.00pp 0 +0.00pp +0.00pp +0.05pp +0.05pp +0.35pp
Relative poverty, after housing costs: everyone -0.03pp -0.09pp -0.03pp -0.05pp -0.16pp -0.18pp -0.12pp
Relative poverty, after housing costs: children -0.05pp -0.25pp -0.11pp -0.13pp -0.29pp -0.36pp -0.17pp
Relative poverty, after housing costs: working-age adults -0.03pp -0.06pp -0.03pp -0.04pp -0.17pp -0.16pp -0.13pp
Relative poverty, after housing costs: pensioners +0.00pp -0.00pp +0.07pp -0.00pp +0.04pp -0.01pp -0.03pp

People in poverty

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone -12.8k -12.8k -55.6k -63.4k -109.9k -62.4k -56.4k
Absolute poverty, before housing costs: children -5.6k -6.2k -31.9k -35.7k -62.6k -33.5k -25.8k
Absolute poverty, before housing costs: working-age adults -7.1k -6.6k -23.7k -27.7k -47.3k -26.9k -27.0k
Absolute poverty, before housing costs: pensioners -8 -19 -19 -19 0 -2.0k -3.7k
Absolute poverty, after housing costs: everyone -8.2k -77.8k -77.8k -40.8k -109.3k -116.6k -82.9k
Absolute poverty, after housing costs: children -3.3k -45.2k -41.2k -21.9k -43.9k -46.2k -23.3k
Absolute poverty, after housing costs: working-age adults -4.8k -32.4k -36.6k -18.9k -65.4k -68.7k -55.9k
Absolute poverty, after housing costs: pensioners -94 -87 0 -8 0 -1.7k -3.7k
Relative poverty, before housing costs: everyone -12.2k -58.4k -74.9k -59.8k -94.2k -42.8k +179.8k
Relative poverty, before housing costs: children -5.7k -34.8k -46.7k -34.0k -71.3k -23.9k +56.8k
Relative poverty, before housing costs: working-age adults -6.5k -23.6k -28.6k -26.1k -29.0k -25.1k +82.3k
Relative poverty, before housing costs: pensioners -8 0 +508 +264 +6.1k +6.2k +40.7k
Relative poverty, after housing costs: everyone -18.0k -65.0k -22.0k -38.3k -113.0k -127.2k -88.5k
Relative poverty, after housing costs: children -7.1k -37.1k -16.1k -19.9k -43.9k -55.6k -26.2k
Relative poverty, after housing costs: working-age adults -10.9k -27.5k -13.8k -18.4k -73.1k -70.2k -58.6k
Relative poverty, after housing costs: pensioners +74 -455 +7.8k -8 +4.0k -1.4k -3.7k

Inequality

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Gini coefficient, equivalised HBAI income before housing costs -0.0001 -0.0002 -0.0004 -0.0004 -0.0007 -0.0007 -0.0004

Mean household net income in each side's own deciles

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1: mean household_net_income per household +£12 † -£25 † -£2.83 † +£51 † -£55 † -£8.28 † +£33 †
Decile 2: mean household_net_income per household +£44 † -£104 † +£108 † +£156 † +£122 † +£75 † -£20 †
Decile 3: mean household_net_income per household +£8.79 † +£111 † +£19 † -£45 † +£212 † +£160 † +£241 †
Decile 4: mean household_net_income per household -£19 † +£35 † +£53 † -£9.72 † -£143 † +£105 † +£241 †
Decile 5: mean household_net_income per household +£6.15 † +£65 † +£49 † +£98 † +£622 † +£312 † +£264 †
Decile 6: mean household_net_income per household +£4.63 † +£6.57 † +£40 † -£71 † -£36 † +£57 † +£44 †
Decile 7: mean household_net_income per household +£1.03 † -£0.91 † -£11 † -£12 † +£46 † -£8.25 † +£342 †
Decile 8: mean household_net_income per household +£4.60 † +£363 † -£0.45 † +£25 † -£314 † -£324 † -£407 †
Decile 9: mean household_net_income per household +£2.59 † -£432 † +£0.83 † +£3.83 † -£0.54 † -£0.53 † -£0.56 †
Decile 10: mean household_net_income per household +£0.36 † +£0.21 † +£0.36 † +£0.36 † +£0.36 † +£0.36 † +£0.37 †

Standard reform costings (change in gov_balance)

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp -£2.1m -£3.2m -£3.7m -£3.0m -£7.1m -£3.5m -£4.5m
Raise higher rate by 1pp -£5,510 +£7 -£0.1m -£0.2m -£0.8m +£0.6m -£0.1m
Raise personal allowance by ~800GBP/year +£2.0m +£2.1m +£3.2m +£2.8m +£3.3m +£3.0m +£1.6m
Raise child benefit by 25GBP/week per additional child +£0.5m +£7,725 -£83 +£10,463 +£31,763 +£1.1m +£0.9m
Reduce Universal Credit taper rate to 20% -£186.2m -£452.4m -£526.9m -£453.8m -£645.8m -£471.2m -£428.2m
Raise Class 1 main employee NICs rate to 10% -£2.9m -£4.8m -£7.2m -£6.9m -£15.6m -£9.6m -£10.5m
Raise VAT standard rate by 2pp +£79 +£87 +£10 +£19 -£12 +£48 -£73
Raise additional rate by 3pp +£0 -£0 +£0 -£0 0 +£0 -£0
Raise the Universal Credit standard allowance by 10% -£8.4m -£22.5m -£32.9m -£31.3m -£65.5m -£52.7m -£41.1m
Raise the State Pension by 10% -£4.5m +£0.9m +£1.4m +£1.6m +£0.5m +£2.7m +£3.6m

Standard reforms: change in each reform's target

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Reduce Universal Credit taper rate to 20%: change in universal_credit +£183.4m +£450.2m +£526.1m +£452.9m +£645.1m +£471.2m +£428.2m
Raise the Universal Credit standard allowance by 10%: change in universal_credit +£8.4m +£22.8m +£33.1m +£31.4m +£65.0m +£52.8m +£41.3m

Household net income by decile

Mean change in household net income per household, and as a share of the decile's base income; households stay in the base run's deciles.

Base decile 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1 +£25 (+0.1%) +£17 (+0.1%) +£60 (+0.3%) +£98 (+0.5%) +£164 (+0.9%) +£165 (+0.9%) +£85 (+0.5%)
Decile 2 +£8 (+0.0%) +£62 (+0.2%) +£64 (+0.2%) +£10 (+0.0%) +£42 (+0.1%) +£47 (+0.2%) +£37 (+0.1%)
Decile 3 +£12 (+0.0%) +£9 (+0.0%) +£16 (+0.0%) +£8 (+0.0%) +£8 (+0.0%) +£9 (+0.0%) +£10 (+0.0%)
Decile 4 +£5 (+0.0%) +£7 (+0.0%) +£7 (+0.0%) +£8 (+0.0%) +£15 (+0.0%) +£76 (+0.2%) +£75 (+0.2%)
Decile 5 +£5 (+0.0%) +£4 (+0.0%) +£10 (+0.0%) +£9 (+0.0%) +£151 (+0.3%) +£144 (+0.3%) +£140 (+0.3%)
Decile 6 +£5 (+0.0%) +£6 (+0.0%) +£6 (+0.0%) +£3 (+0.0%) +£13 (+0.0%) +£12 (+0.0%) +£6 (+0.0%)
Decile 7 +£3 (+0.0%) +£3 (+0.0%) +£3 (+0.0%) +£3 (+0.0%) +£2 (+0.0%) +£2 (+0.0%) +£3 (+0.0%)
Decile 8 +£3 (+0.0%) +£5 (+0.0%) +£5 (+0.0%) +£6 (+0.0%) +£2 (+0.0%) +£2 (+0.0%) +£1 (+0.0%)
Decile 9 +£5 (+0.0%) +£4 (+0.0%) +£4 (+0.0%) +£4 (+0.0%) fewer than 10 households change fewer than 10 households change fewer than 10 households change
Decile 10 fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change
all +£7 (+0.0%) +£12 (+0.0%) +£18 (+0.0%) +£17 (+0.0%) +£42 (+0.1%) +£48 (+0.1%) +£36 (+0.1%)
Year People gaining over £1 People losing over £1
2025-26 3.6% 0.0%
2026-27 3.6% 0.0%
2027-28 3.8% 0.0%
2028-29 3.7% 0.0%
2029-30 3.8% 0.0%
2030-31 3.6% 0.0%
2031-32 3.5% 0.0%

No change in any year: components the model counts twice; population.

Checks failing on both base and head (1)
  • VAT is never negative (sign:vat): 2025-26: 76 units below zero, a weighted £-54,797,972 in total; 2026-27: 76 units below zero, a weighted £-56,271,349 in total; 2027-28: 76 units below zero, a weighted £-57,609,146 in total
Counted-once check

Each of 84 components was raised by £1 per unit in 2026-27, and every head of its totals was read household by household: its own head must rise by exactly £1, no other tax head may move, no other benefit may rise, and the model's own total must move by what its heads moved. A head that breaks a rule is measured again twice: with every other head held at its baseline value, and with every other head held at its value after the first £1 while the component rises again. It fails where either still shows the response. 0 failed; 0 were skipped.

Provenance
Side Commit Runtime Environment hash Partition hash Time
base main 582b86315c uk 2.146.1 (files 792e7aaf1a15), core 3.33.2, py 3.13.16 aarch64 5d40da9d9749 f210f83d5be4 1458.37s
head #1969 merged into main 31591a1f68 uk 2.146.1 (files ca50dc0833fd), core 3.33.2, py 3.13.16 aarch64 5d40da9d9749 f210f83d5be4 1486.04s

Dataset: hf://policyengine/policyengine-uk-data-private/enhanced_frs_2024_25.h5@2526edbbb687a3b54dbb11272e5389e4b62d2ac2, sha256 056e80fd8e9151d78f432a25cde863340baee81304c6216a37fb575ce8563784 (verified on both sides), policyengine-uk-data 1.58.1.

Receipts by tax head: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Income tax £299.29bn £319.01bn £336.47bn £351.62bn £367.17bn £385.29bn £403.59bn
National Insurance (employee and self-employed) £52.58bn £54.94bn £56.75bn £58.48bn £60.62bn £62.57bn £65.03bn
National Insurance (employer) £152.64bn £159.18bn £164.14bn £168.73bn £176.11bn £181.72bn £188.90bn
Employer NI change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Employer NI change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Capital gains tax £12.62bn £13.06bn £13.55bn £14.04bn £14.54bn £15.09bn £15.65bn
Student loan repayments £7.83bn £8.12bn £8.35bn £8.56bn £8.79bn £9.04bn £9.38bn
VAT £253.71bn £260.53bn £266.72bn £273.14bn £279.83bn £286.71bn £293.71bn
Change in VAT from its baseline £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
VAT on private school fees £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Fuel duties £24.53bn £24.64bn £26.64bn £26.69bn £26.42bn £25.76bn £26.35bn
Alcohol duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Tobacco duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Vehicle excise duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
TV licence fee £4.28bn £4.43bn £4.44bn £4.46bn £4.48bn £4.51bn £4.53bn
Council tax £49.56bn £52.45bn £55.78bn £59.39bn £62.98bn £66.74bn £70.70bn
High value council tax surcharge £0.00bn £0.00bn £0.00bn £0.48bn £0.49bn £0.51bn £0.52bn
Northern Ireland domestic rates £0.55bn £0.58bn £0.61bn £0.63bn £0.67bn £0.70bn £0.73bn
Business rates £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn
Stamp duty land tax (own purchases, and corporate until the £10.06bn £10.56bn £10.98bn £11.40bn £11.81bn £12.23bn £12.64bn
Land transaction tax (Wales) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Land and buildings transaction tax (Scotland) £0.01bn £0.01bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn
Unspecified tax change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Unspecified tax change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax excluding the main residence £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Land value tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Carbon tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Spending by benefit and service: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension £122.15bn £126.64bn £127.57bn £129.47bn £133.29bn £137.24bn £141.32bn
Pension Credit £6.69bn £7.07bn £7.06bn £7.13bn £7.26bn £7.39bn £7.49bn
Winter Fuel Payment £1.70bn £1.68bn £1.59bn £1.58bn £1.57bn £1.55bn £1.52bn
Pension Age Winter Heating Payment (Scotland) £0.19bn £0.20bn £0.20bn £0.21bn £0.21bn £0.22bn £0.22bn
Universal Credit £79.04bn £83.48bn £85.50bn £87.20bn £88.94bn £90.51bn £91.47bn
Housing Benefit £8.59bn £8.93bn £9.19bn £9.34bn £9.61bn £9.90bn £10.20bn
Council Tax Reduction £1.99bn £2.03bn £2.08bn £2.13bn £2.18bn £2.23bn £2.29bn
Employment and Support Allowance (income-related) £2.12bn £2.18bn £2.23bn £2.28bn £2.33bn £2.39bn £2.45bn
Employment and Support Allowance (contribution-based) £5.22bn £5.36bn £5.49bn £5.62bn £5.76bn £5.90bn £6.04bn
Jobseeker's Allowance (income-based) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Jobseeker's Allowance (contribution-based) £0.29bn £0.30bn £0.30bn £0.31bn £0.32bn £0.33bn £0.33bn
Income Support £0.12bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Working Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Child Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Incapacity Benefit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Personal Independence Payment £27.05bn £28.19bn £28.94bn £29.64bn £30.37bn £31.11bn £31.87bn
Disability Living Allowance £7.52bn £7.83bn £8.04bn £8.24bn £8.44bn £8.65bn £8.86bn
Attendance Allowance £8.71bn £9.08bn £9.32bn £9.55bn £9.78bn £10.02bn £10.26bn
Carer's Allowance £4.50bn £4.69bn £4.81bn £4.93bn £5.05bn £5.17bn £5.29bn
Carer Support Payment (Scotland) £0.31bn £0.32bn £0.33bn £0.34bn £0.35bn £0.36bn £0.36bn
Carer's Allowance Supplement (Scotland) £0.00bn £0.04bn £0.04bn £0.04bn £0.04bn £0.04bn £0.04bn
Severe Disablement Allowance £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn
Industrial Injuries Disablement Benefit £0.51bn £0.52bn £0.53bn £0.54bn £0.56bn £0.57bn £0.59bn
Armed Forces Compensation Scheme £0.61bn £0.62bn £0.64bn £0.65bn £0.67bn £0.69bn £0.70bn
War Widow's or Widower's Pension £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Child Benefit £16.23bn £16.91bn £17.32bn £17.73bn £18.16bn £18.60bn £19.04bn
Scottish Child Payment £0.50bn £0.52bn £0.53bn £0.55bn £0.56bn £0.58bn £0.58bn
Two Child Limit Payment (Scotland, counterfactual) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Healthy Start vouchers £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn
Maternity Allowance £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Maternity Pay £3.32bn £3.41bn £3.49bn £3.57bn £3.66bn £3.75bn £3.84bn
Statutory Paternity Pay £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Sick Pay £1.13bn £1.16bn £1.19bn £1.22bn £1.25bn £1.28bn £1.31bn
Sure Start Maternity Grant £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn
Bereavement Support Payment £0.67bn £0.69bn £0.70bn £0.72bn £0.74bn £0.76bn £0.78bn
Tax-Free Childcare £0.55bn £0.56bn £0.57bn £0.58bn £0.60bn £0.60bn £0.58bn
Extended childcare entitlement £2.66bn £3.14bn £3.23bn £3.30bn £3.38bn £3.47bn £3.55bn
Universal childcare entitlement £3.32bn £3.59bn £3.69bn £3.78bn £3.88bn £3.99bn £4.08bn
Targeted childcare entitlement £0.57bn £0.60bn £0.62bn £0.63bn £0.65bn £0.66bn £0.67bn
Care to Learn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Childcare Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Parents' Learning Allowance £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn
Adult Dependants' Grant £0.06bn £0.06bn £0.04bn £0.04bn £0.04bn £0.04bn £0.04bn
Travel Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
16 to 19 Bursary Fund £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
NHS spending £204.68bn £205.46bn £206.22bn £207.04bn £207.96bn £208.89bn £209.79bn
State education spending £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn
Transport subsidy spending £25.15bn £25.25bn £25.34bn £25.44bn £25.55bn £25.67bn £25.78bn
Cost-of-living support payment £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Bills Rebate £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Price Guarantee subsidy £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disability basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Other public spending budget change £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Caseloads: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension 11,308k 11,208k 10,906k 10,812k 10,860k 10,908k 10,955k
Pension Credit 1,492k 1,492k 1,479k 1,460k 1,460k 1,457k 1,453k
Winter Fuel Payment 7,092k 7,011k 6,601k 6,517k 6,493k 6,381k 6,254k
Pension Age Winter Heating Payment (Scotland) 806k 807k 807k 805k 809k 812k 816k
Universal Credit 6,403k 6,423k 6,456k 6,466k 6,493k 6,480k 6,441k
Housing Benefit 1,254k 1,252k 1,254k 1,240k 1,245k 1,250k 1,254k
Council Tax Reduction 3,186k 3,211k 3,225k 3,245k 3,264k 3,280k 3,293k
Employment and Support Allowance (income-related) 187k 188k 188k 189k 190k 190k 191k
Employment and Support Allowance (contribution-based) 722k 724k 727k 730k 733k 737k 740k
Jobseeker's Allowance (income-based) 0k 0k 0k 0k 0k 0k 0k
Jobseeker's Allowance (contribution-based) 67k 67k 68k 68k 68k 69k 69k
Income Support 25k 0k 0k 0k 0k 0k 0k
Working Tax Credit 0k 0k 0k 0k 0k 0k 0k
Child Tax Credit 0k 0k 0k 0k 0k 0k 0k
Incapacity Benefit 0k 0k 0k 0k 0k 0k 0k
Personal Independence Payment 3,581k 3,595k 3,608k 3,623k 3,639k 3,655k 3,671k
Disability Living Allowance 1,296k 1,301k 1,306k 1,311k 1,317k 1,323k 1,329k
Attendance Allowance 1,701k 1,708k 1,714k 1,721k 1,729k 1,736k 1,744k
Carer's Allowance 1,038k 1,042k 1,046k 1,050k 1,055k 1,059k 1,064k
Carer Support Payment (Scotland) 71k 72k 72k 72k 73k 73k 73k
Carer's Allowance Supplement (Scotland) 0k 72k 72k 72k 73k 73k 73k
Severe Disablement Allowance 4k 4k 4k 4k 4k 4k 4k
Industrial Injuries Disablement Benefit 137k 138k 139k 139k 140k 140k 141k
Armed Forces Compensation Scheme 94k 94k 94k 95k 95k 95k 96k
War Widow's or Widower's Pension 0k 0k 0k 0k 0k 0k 0k
Child Benefit 8,136k 8,165k 8,185k 8,215k 8,249k 8,282k 8,314k
Scottish Child Payment 352k 354k 355k 356k 360k 362k 360k
Two Child Limit Payment (Scotland, counterfactual) 0k 0k 0k 0k 0k 0k 0k
Healthy Start vouchers 200k 201k 202k 203k 204k 204k 205k
Maternity Allowance 0k 0k 0k 0k 0k 0k 0k
Statutory Maternity Pay 334k 335k 336k 338k 339k 341k 342k
Statutory Paternity Pay 0k 0k 0k 0k 0k 0k 0k
Statutory Sick Pay 182k 183k 183k 184k 185k 186k 186k
Sure Start Maternity Grant 26k 26k 26k 27k 27k 27k 27k
Bereavement Support Payment 98k 98k 99k 99k 100k 100k 101k
Tax-Free Childcare 1,016k 1,011k 1,011k 1,033k 1,029k 1,026k 1,012k
Extended childcare entitlement 665k 671k 675k 677k 682k 686k 687k
Universal childcare entitlement 986k 989k 992k 997k 1,002k 1,013k 1,015k
Targeted childcare entitlement 119k 120k 120k 121k 121k 122k 121k
Care to Learn 0k 0k 0k 0k 0k 0k 0k
Childcare Grant 0k 0k 0k 0k 0k 0k 0k
Parents' Learning Allowance 98k 99k 99k 100k 100k 100k 101k
Adult Dependants' Grant 18k 18k 12k 13k 13k 13k 13k
Travel Grant 0k 0k 0k 0k 0k 0k 0k
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
16 to 19 Bursary Fund 0k 0k 0k 0k 0k 0k 0k
Cost-of-living support payment 0k 0k 0k 0k 0k 0k 0k
Energy Bills Rebate 0k 0k 0k 0k 0k 0k 0k
Energy Price Guarantee subsidy 0k 0k 0k 0k 0k 0k 0k
Basic income 0k 0k 0k 0k 0k 0k 0k
Disability basic income 0k 0k 0k 0k 0k 0k 0k
Government balance, each component counted once: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Government receipts, each component once £899.38bn £939.24bn £976.18bn £1,009.38bn £1,045.66bn £1,082.60bn £1,123.48bn
Government spending £536.47bn † £550.82bn † £557.15bn † £564.14bn † £573.48bn † £582.89bn † £591.71bn †
Government balance, each receipt once £362.91bn † £388.42bn † £419.03bn † £445.25bn † £472.18bn † £499.71bn † £531.77bn †
Benefits in household_benefits but not in gov_spending £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Model totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
gov_tax £902.51bn £942.37bn £979.31bn £1,012.51bn £1,048.79bn £1,085.73bn £1,126.61bn
household_tax £496.17bn £522.66bn £548.45bn £570.64bn £592.85bn £617.30bn £644.01bn
pre_budget_change_household_tax £488.34bn £514.54bn £540.10bn £561.60bn £583.57bn £607.75bn £634.11bn
gov_spending £536.47bn † £550.82bn † £557.15bn † £564.14bn † £573.48bn † £582.89bn † £591.71bn †
household_benefits £536.47bn † £550.82bn † £557.15bn † £564.14bn † £573.48bn † £582.89bn † £591.71bn †
gov_balance £366.04bn † £391.55bn † £422.16bn † £448.38bn † £475.31bn † £502.84bn † £534.90bn †
Components the model counts twice: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
corporate_sdlt, counted again inside expected_sdlt £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn
Household income totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Household market income £1,657.06bn £1,719.25bn £1,771.68bn £1,821.99bn £1,872.88bn £1,930.99bn £2,001.98bn
Household net income £1,658.09bn † £1,706.65bn † £1,738.50bn † £1,772.55bn † £1,809.43bn † £1,851.24bn † £1,902.64bn †
Household net income (HBAI definition) £1,466.65bn £1,513.43bn £1,545.69bn £1,578.60bn £1,613.42bn £1,652.64bn £1,702.73bn
Population: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
People 69,514k 69,778k 70,036k 70,316k 70,626k 70,944k 71,249k
Benefit units 35,247k 35,381k 35,512k 35,654k 35,811k 35,972k 36,127k
Households 31,167k 31,285k 31,401k 31,526k 31,665k 31,808k 31,944k
Poverty rates: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 15.9% 14.9% 15.4% 15.5% 15.5% 15.7% 15.7%
Absolute poverty, before housing costs: children 23.7% 20.8% 21.4% 21.2% 21.2% 21.6% 21.5%
Absolute poverty, before housing costs: working-age adults 13.7% 13.4% 13.9% 14.0% 14.1% 14.2% 14.2%
Absolute poverty, before housing costs: pensioners 13.7% 13.2% 13.3% 13.5% 13.6% 13.7% 13.6%
Absolute poverty, after housing costs: everyone 21.1% 20.5% 21.2% 21.5% 21.8% 22.0% 22.2%
Absolute poverty, after housing costs: children 32.0% 30.0% 30.7% 31.0% 31.4% 32.0% 32.3%
Absolute poverty, after housing costs: working-age adults 19.6% 19.3% 20.1% 20.4% 20.6% 20.9% 20.9%
Absolute poverty, after housing costs: pensioners 12.8% 12.6% 12.6% 13.1% 13.4% 13.4% 13.4%
Relative poverty, before housing costs: everyone 16.9% 16.3% 16.3% 16.5% 16.4% 16.6% 16.9%
Relative poverty, before housing costs: children 25.6% 23.3% 22.9% 23.0% 22.8% 23.1% 23.6%
Relative poverty, before housing costs: working-age adults 14.4% 14.3% 14.6% 14.7% 14.8% 15.0% 15.1%
Relative poverty, before housing costs: pensioners 15.0% 14.9% 14.4% 14.7% 14.3% 14.3% 14.9%
Relative poverty, after housing costs: everyone 21.7% 21.2% 21.3% 21.4% 21.5% 21.7% 21.9%
Relative poverty, after housing costs: children 32.9% 31.3% 30.9% 30.9% 31.0% 31.2% 31.8%
Relative poverty, after housing costs: working-age adults 20.0% 19.9% 20.2% 20.3% 20.4% 20.7% 20.8%
Relative poverty, after housing costs: pensioners 13.7% 13.1% 12.9% 13.0% 12.8% 12.9% 13.2%
People in poverty: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 11,043k 10,422k 10,801k 10,896k 10,981k 11,158k 11,178k
Absolute poverty, before housing costs: children 3,554k 3,135k 3,229k 3,217k 3,235k 3,301k 3,309k
Absolute poverty, before housing costs: working-age adults 5,855k 5,729k 6,045k 6,136k 6,188k 6,287k 6,294k
Absolute poverty, before housing costs: pensioners 1,634k 1,559k 1,527k 1,543k 1,558k 1,570k 1,575k
Absolute poverty, after housing costs: everyone 14,655k 14,288k 14,829k 15,103k 15,382k 15,639k 15,791k
Absolute poverty, after housing costs: children 4,806k 4,511k 4,635k 4,697k 4,791k 4,893k 4,971k
Absolute poverty, after housing costs: working-age adults 8,328k 8,294k 8,738k 8,912k 9,057k 9,207k 9,273k
Absolute poverty, after housing costs: pensioners 1,521k 1,484k 1,456k 1,493k 1,533k 1,539k 1,547k
Relative poverty, before housing costs: everyone 11,768k 11,405k 11,448k 11,601k 11,613k 11,789k 12,058k
Relative poverty, before housing costs: children 3,834k 3,503k 3,459k 3,490k 3,470k 3,530k 3,622k
Relative poverty, before housing costs: working-age adults 6,148k 6,136k 6,327k 6,438k 6,501k 6,611k 6,710k
Relative poverty, before housing costs: pensioners 1,786k 1,766k 1,661k 1,673k 1,642k 1,649k 1,726k
Relative poverty, after housing costs: everyone 15,092k 14,801k 14,934k 15,071k 15,168k 15,386k 15,607k
Relative poverty, after housing costs: children 4,941k 4,719k 4,668k 4,695k 4,727k 4,785k 4,890k
Relative poverty, after housing costs: working-age adults 8,520k 8,532k 8,780k 8,899k 8,981k 9,117k 9,198k
Relative poverty, after housing costs: pensioners 1,631k 1,550k 1,487k 1,477k 1,460k 1,484k 1,519k
Inequality: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Gini coefficient, equivalised HBAI income before housing costs 0.3073 0.3050 0.3062 0.3069 0.3071 0.3077 0.3091
Mean household net income in each side's own deciles: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1: mean household_net_income per household £17,711 † £17,970 † £17,931 † £18,042 † £18,273 † £18,498 † £18,714 †
Decile 2: mean household_net_income per household £28,367 † £28,998 † £28,813 † £29,139 † £29,452 † £29,809 † £30,298 †
Decile 3: mean household_net_income per household £34,638 † £35,918 † £36,465 † £36,974 † £37,433 † £37,972 † £38,733 †
Decile 4: mean household_net_income per household £39,316 † £40,838 † £41,811 † £42,683 † £43,292 † £44,130 † £45,168 †
Decile 5: mean household_net_income per household £44,862 † £46,215 † £47,126 † £47,538 † £48,649 † £49,494 † £50,299 †
Decile 6: mean household_net_income per household £47,935 † £49,341 † £50,330 † £51,103 † £52,131 † £53,010 † £54,249 †
Decile 7: mean household_net_income per household £56,320 † £57,567 † £58,461 † £59,411 † £60,195 † £61,612 † £63,235 †
Decile 8: mean household_net_income per household £69,272 † £70,719 † £71,671 † £72,835 † £74,038 † £75,473 † £77,171 †
Decile 9: mean household_net_income per household £79,650 † £81,560 † £83,193 † £84,490 † £86,055 † £87,569 † £90,645 †
Decile 10: mean household_net_income per household £117,618 † £120,489 † £122,421 † £124,553 † £126,803 † £129,074 † £131,887 †
Standard reform costings (change in gov_balance): head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp £6.21bn £6.50bn £6.70bn £6.90bn £7.10bn £7.34bn £7.61bn
Raise higher rate by 1pp £3.54bn £3.82bn £4.05bn £4.27bn £4.49bn £4.76bn £4.96bn
Raise personal allowance by ~800GBP/year £-3.83bn £-3.95bn £-4.03bn £-4.10bn £-4.19bn £-4.29bn £-2.01bn
Raise child benefit by 25GBP/week per additional child £-2.00bn £-1.76bn £-1.64bn £-1.54bn £-1.44bn £-1.34bn £-1.23bn
Reduce Universal Credit taper rate to 20% £-20.73bn £-21.55bn £-21.98bn £-22.33bn £-22.60bn £-22.80bn £-23.22bn
Raise Class 1 main employee NICs rate to 10% £11.06bn £11.51bn £11.83bn £12.13bn £12.46bn £12.80bn £13.28bn
Raise VAT standard rate by 2pp £25.01bn £25.68bn £26.29bn £26.92bn £27.58bn £28.26bn £28.95bn
Raise additional rate by 3pp £2.83bn £3.07bn £3.27bn £3.47bn £3.67bn £3.91bn £4.23bn
Raise the Universal Credit standard allowance by 10% £-3.05bn £-3.19bn £-3.28bn £-3.35bn £-3.44bn £-3.48bn £-3.51bn
Raise the State Pension by 10% £-7.81bn £-8.06bn £-7.99bn £-8.10bn £-8.36bn £-8.66bn £-9.02bn
Standard reforms: change in each reform's target: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp: change in income_tax £6.36bn £6.65bn £6.86bn £7.07bn £7.28bn £7.52bn £7.80bn
Raise higher rate by 1pp: change in income_tax £3.55bn £3.83bn £4.06bn £4.28bn £4.50bn £4.77bn £4.97bn
Raise personal allowance by ~800GBP/year: change in income_tax £-3.96bn £-4.10bn £-4.19bn £-4.26bn £-4.36bn £-4.47bn £-1.77bn
Raise child benefit by 25GBP/week per additional child: change in child_benefit £2.34bn £2.15bn £2.03bn £1.92bn £1.82bn £1.71bn £1.59bn
Reduce Universal Credit taper rate to 20%: change in universal_credit £20.71bn £21.54bn £21.96bn £22.32bn £22.59bn £22.79bn £23.21bn
Raise Class 1 main employee NICs rate to 10%: change in national_insurance £11.33bn £11.79bn £12.13bn £12.44bn £12.78bn £13.13bn £13.62bn
Raise VAT standard rate by 2pp: change in vat £25.01bn £25.68bn £26.29bn £26.92bn £27.58bn £28.26bn £28.95bn
Raise additional rate by 3pp: change in income_tax £2.83bn £3.07bn £3.27bn £3.47bn £3.67bn £3.91bn £4.23bn
Raise the Universal Credit standard allowance by 10%: change in universal_credit £3.05bn £3.19bn £3.28bn £3.35bn £3.44bn £3.48bn £3.51bn
Raise the State Pension by 10%: change in state_pension £10.72bn £11.23bn £11.37bn £11.62bn £12.08bn £12.54bn £13.07bn

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

UK hub: #1995 (head 3727eb8) now depends on this PR. Its r3 finding 3, the Pension Credit savings-credit exit cliff, is Pension Credit's gross property valuation, which this PR fixes. So #1969 should land first; #1995 will then merge main and add two property boundary cases. This PR's latest review (Subfleet 20261019-181511-pr1969-review-v3b, 2026-10-20 01:43Z) requested changes, and there has been no new head since.

🤖 Generated with Claude Code

MaxGhenis and others added 3 commits October 20, 2026 18:32
… penny

From the GPT-6.1 Sol review of a7d8988:

- A recorded benunit_reported_capital total holds its owner's reg. 77
  holding at full value, while the pool counts that holding at 90%. The
  report now consumes its known holding part at the counted 90%
  (household_uc_reported_financial_capital), so it can no longer eat another
  unit's savings; the owner's own assessment still takes the full holding off
  the report. The company-override conservation oracle consumes the same way,
  and a YAML regression pins the reviewer's case: £16,500 of savings and a
  £10,000 report that is all holding give [0, 16,500].
- valued_capital rounds the 90% value down to the penny in the claimant's
  favour (ADM H1665), in float64 with a guard against binary noise. A YAML
  regression puts £1,000 of savings and £16,666.67 of shares at exactly
  £16,000.00, which passes the limit (WRA 2012 s. 5(1)(a), UC reg. 18(1)).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Inputs are float32, so 90% of £16,001 came to £14,400.8994 and the
penny floor gave £14,400.89 (the HB £16,001 case failed). less_sale_expenses
takes the value to the penny in float64 before the 10% deduction and
rounds down to the penny (ADM H1665). The UC property path now uses it
too, so every reg. 49(1)(a) valuation rounds the same way.

Adds a Hypothesis property checking 90% of every whole-penny float32
input up to £131,071.99 against integer pence, and a UC YAML case.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sol review v4b found that rounding the input to the penny first could
round up (the ADM H1665 example gave 930.94, not 930.93), that nothing
was rounded at the last stage, and that UC rounds to the nearest penny.

- capital.round_down per programme: false for UC (UC Regs 2013 reg 6(1);
  NI reg 7(1)) and HB (HB Regs 2006 reg 80; HB (SPC) reg 61(6); NI 78(8),
  59(7)); true for IS (reg 27), JSA (reg 92), ESA (reg 3(a)) and Pension
  Credit (reg 24A), which count a fraction only to the claimant's
  advantage.
- exact_amount removes float32 storage error only where a value is the
  stored form of a whole penny; other values are kept exactly.
- Each valuation, each UC holding and property share, and each
  programme's assessed capital (the last stage) is rounded by that rule.
- A recorded financial total below its owner's holding now consumes the
  holding at its counted value, as an override does, so no part of the
  holding is left for another unit.

Tests: the H1665 example (930.93 / 930.94), whole-penny properties for
both rules, a never-wrong-way bound for any float32 input, UC half-penny,
16,000.00 after a holding, a three-way split, IS shared-capital rounding,
and reports below the holding in the reg 77 conservation grid.

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

Copy link
Copy Markdown
Collaborator Author

Merge-order note from #1974's owner. #1974 (head 6600477, main a8b2848 merged) is being finished for the Budget cut. If it lands first, this PR's next merge of main needs the following, or the 10% sale-expense deduction silently stops applying to shares.

#1974 renames the share-like source in all six capital sources lists from corporate_wealth to share_like_capital. That variable is corporate_wealth as supplied, or its itemised components where they exceed it beyond float32 rounding. On every released dataset it equals corporate_wealth exactly.

Rename in this PR. valued_capital applies the 10% only to a source listed in sale_expenses.sources, so these must change:

  • All six sale_expenses/sources.yaml: corporate_wealth becomes share_like_capital.
  • Three hardcoded counted_share(p.sale_expenses, "corporate_wealth") calls, in uc_assessable_capital.py, household_uc_pool_company_holdings.py and household_uc_reported_financial_capital.py. Import HOLDINGS_SOURCE from household_uc_company_holding_pool_scale and pass it instead.
  • The exact_amount(person.household("corporate_wealth", period)) budgets, in the pool and reported-capital files. Itemise corporate_wealth's share-like components for the means tests #1974 already points main's versions of these lines at HOLDINGS_SOURCE (= "share_like_capital"), so take Itemise corporate_wealth's share-like components for the means tests #1974's side and keep exact_amount around it.

Tests.

If this PR lands first instead, #1974 does the same reconciliation when it merges main. #2131 is then rebuilt on whichever head results.

🤖 Generated with Claude Code

MaxGhenis added a commit that referenced this pull request Oct 22, 2026
Reg 77 holdings are shares with sale expenses, so HOLDINGS_SOURCE is
share_like_capital_with_sale_expenses: the holdings budget and the 90%
counted share both read it, where #1969 read corporate_wealth. The test file
keeps the round-3 fixes (projected years, the 16,000 overshoot, the
power-of-two precondition, the grouping example, the exempt list's start).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sol review v5 at b3f6f60:
- exact_amount raised an underflow warning on zero inputs, failing
  test_warning_filters. Errors are now ignored inside np.errstate, and
  twice the gap is compared with the spacing.
- IS, JSA and ESA read household values through benunit.max, which is
  float64, so exact_amount used float64 spacing and never removed float32
  storage error: 16,000.01 of savings floored to 16,000.00, at the limit.
  A value equal to its float32 is now judged at float32 spacing.
- From 131,072 float32 cannot hold every penny, so no penny is identified
  and the stored value is kept; rounding down then never goes against
  the claimant.
- The Lifetime ISA's 75% and UC company capital are worked in float64
  from the stored amounts; company capital is rounded under reg. 6(1).
- test_uc_capital_allocation expected exact conservation; each share is
  now its own nearest-penny amount (1.00 three ways is 0.33 each).
- Docstrings: the guard's intended tolerance; no report leaves a holding
  in the pool.

Tests: a model-level property that every programme counts whole-penny
savings, shares and Lifetime ISA balances to the penny; widened-input
and above-131,072 helper checks; YAML for 16,000.01 of savings under IS,
JSA and ESA and a 1,000.04 Lifetime ISA.

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

This branch has not been deployed

No deployments
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.

UC capital ignores reg 49 valuation (10% sale costs and secured debts)

2 participants