Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
87b0861
Count person cash and stocks and shares ISAs in the holder's benefit …
MaxGhenis Nov 1, 2026
cb78a00
Test that each ISA pound counts once, in its holder's benefit unit
MaxGhenis Nov 1, 2026
f6b37de
Run fewer examples of the whole-means-test properties and rename a st…
MaxGhenis Nov 1, 2026
cb6e5a8
Restate UC person_sources' own 2013 value in the dated-reform example
MaxGhenis Nov 1, 2026
c3a1026
Keep each ISA holding within its household total in float32
MaxGhenis Nov 1, 2026
42130d5
Test person ISA balances with no household totals, as Microcosm write…
MaxGhenis Nov 1, 2026
8223ae3
Change UC's capital lists in place in one lodger test
MaxGhenis Nov 1, 2026
fdbae65
Describe the ISA attribution with the formulas and the model as actors
MaxGhenis Nov 1, 2026
e2d52d2
List the new slow ISA tests in the shard table
MaxGhenis Nov 1, 2026
c1098e8
Run two examples of the two slowest ISA properties
MaxGhenis Nov 1, 2026
960272f
Give the ISA documentation strings real verbs
MaxGhenis Nov 1, 2026
f1f5477
Name the UC formula as the actor in the report test cases
MaxGhenis Nov 1, 2026
da3c824
Sum an ISA total's scaled holdings to the total exactly
MaxGhenis Nov 1, 2026
bc3d712
Describe the ISA attribution with the formulas and DWP as actors
MaxGhenis Nov 1, 2026
38da30f
Name the formula as the actor in the ISA test comments and the ISA note
MaxGhenis Nov 1, 2026
ee7375d
List the new slow ISA test nodes in the shard table
MaxGhenis Nov 1, 2026
1ad916e
Keep the sources descriptions' last lines, where #2688 appends
MaxGhenis Nov 1, 2026
4df1a2d
Compare the unrelated adult's outputs before the holdings' sum
MaxGhenis Nov 1, 2026
b729799
State ISA ownership as the regulations do, for ordinary and junior ISAs
MaxGhenis Nov 1, 2026
53e081e
Give DWP and local authorities the verbs in the ISA descriptions
MaxGhenis Nov 1, 2026
8d7d480
Say why households with no stored totals take their own dataset
MaxGhenis Nov 1, 2026
50c56c6
Say what the counted-ISA check compares each holding with
MaxGhenis Nov 1, 2026
7bcd324
Give the allocation prose real verbs
MaxGhenis Nov 1, 2026
7d6a937
Name the formula as the actor in the ISA test module's summary
MaxGhenis Nov 1, 2026
6cd22fd
Cap the ISA allocation step at float32's largest spacing
claude Nov 2, 2026
4fae1bf
Check the ISA allocation step against frexp and silence spacing's ove…
claude Nov 2, 2026
3aa7917
Separate the three clauses of the ISA pool sentence
MaxGhenis Nov 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/2729.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
The model now counts each person's cash ISA and stocks and shares ISA balances in their own benefit unit for Universal Credit, Housing Benefit, Pension Credit, Income Support, income-based JSA and income-related ESA, so a lodger's or an adult child's ISA no longer adds to the main family's capital.
30 changes: 27 additions & 3 deletions docs/book/assumptions/isa-inputs-and-capital-flows.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,33 @@ respectively, including years after the dataset projection ends, unless the
dataset holds the person balances for a later year than the total, or a reform
changes what the total sums or stops a person balance reading its inputs. A
household input in a situation applies only to its own year; the person
balances carry the variable-level uprating to later years. The means tests read
the household totals, so they pool a person's balance with the household's
other financial capital rather than attribute it to their own benefit unit.
balances carry the variable-level uprating to later years.

Each means-test formula counts the claimant's and partner's cash and stocks and
shares ISA balances in their own benefit unit, through
`cash_isa_countable_capital` and `stocks_and_shares_isa_countable_capital` in
its `person_sources`, and excludes a dependant's balance, a child's junior ISA
among them. The formulas subtract a household's counted balances from `cash_isa`
and `share_like_capital` before they allocate the remainder between benefit
units. Where the balances sum to less than the total the model holds for the
year, the remainder stays in the pool. Where their stored sum exceeds the total,
the model scales them to sum to the total exactly: it rounds each proportional
share down to a whole step of the total's float32 spacing and gives the steps
left over, one each, to the members whose shares lost most in rounding. The pool
then keeps nothing of that total; for totals under £268 million, each holding
passes a capital limit only where its proportional share does; and a sole holder
whose balance reaches the total counts exactly the total. For stocks and shares
ISAs the model takes the smaller of `stocks_and_shares_isa` and
`share_like_capital` as the total. Data that store only household totals hold no
balances, so the pool keeps the whole total. The formulas count a balance only
while the programme's `sources` lists the household source that includes it, so
a reform that drops `cash_isa` or `share_like_capital` from `sources` drops the
balances with it. For a Universal Credit unit that reports its capital
(`benunit_reported_capital` or `uc_reported_capital`, zero or more), the formula
leaves the unit's claimant's and partner's ISAs in the pool and subtracts the
report, as it does for their company holdings. A nonnegative
`pension_credit_reported_capital` replaces the unit's calculated Pension Credit
capital.

Ordinary accessible cash ISA balances enter the capital sources for Universal
Credit, Housing Benefit, Pension Credit, Income Support, income-based JSA and
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,26 @@
description: >
Person-level model variables counted as income-related Employment and
Support Allowance capital of the person's own benefit unit. They are summed
over the benefit unit's claimant and partner (`is_claimant_or_partner`), so
they need none of the household proxy that the household `sources` use, and
a dependant's holding is left out: regulation 83 adds only the partner's
capital to the claimant's. `lifetime_isa_countable_capital` is a Lifetime
ISA at its surrender value: regulation 113 values capital at its current
market or surrender value, and DMG 52665 counts a Lifetime ISA at 75% of its
value under 60 and in full from 60. Lifetime ISAs exist from 6 April 2017,
and the list is empty before then.
Support Allowance capital of the person's own benefit unit. The formulas sum
these sources over the benefit unit's claimant and partner
(`is_claimant_or_partner`) and exclude dependants: DWP excludes children's
capital under regulation 83(2). `lifetime_isa_countable_capital` values a
Lifetime ISA at its surrender value: DWP values capital at its current
market or surrender value under regulation 113, and DMG 52665 counts a
Lifetime ISA at 75% of its value under 60 and in full from 60. Lifetime ISAs
exist from 6 April 2017, and the formulas count them from then.
`cash_isa_countable_capital` and `stocks_and_shares_isa_countable_capital`
hold a member's cash and stocks and shares ISA balances, bounded by the
household total. The account investor beneficially owns an ordinary ISA's
investments, and the named child owns a junior ISA's investments (Individual
Savings Account Regulations 1998 reg. 4(6)(a) and reg. 2B(c)). The formulas
subtract each bounded ISA balance from its household source (`cash_isa`,
`share_like_capital`) and count it in the holder's unit. When a household's
balances exceed its total, the model scales them to sum to the total
exactly, rounding each share down or up to a whole float32 step of the
total. When a reform removes a household source from `sources`, the formulas
exclude the corresponding ISA person source. With household totals alone,
the formulas leave the whole total in the pool. The ISA Regulations came
into force for all other purposes on 6 April 1999 (reg. 1).
metadata:
label: Income-related ESA person-level capital sources
period: year
Expand All @@ -20,7 +32,15 @@ metadata:
href: https://www.legislation.gov.uk/uksi/2008/794/regulation/113
- title: Decision Makers' Guide, Chapter 52 (Capital), para. 52665
href: https://assets.publishing.service.gov.uk/media/69d8f30ad3e08b8871b665ac/dmg-Ch-52.pdf
- title: The Individual Savings Account Regulations 1998 reg. 4
href: https://www.legislation.gov.uk/uksi/1998/1870/regulation/4
- title: The Individual Savings Account Regulations 1998 reg. 2B
href: https://www.legislation.gov.uk/uksi/1998/1870/regulation/2B
values:
2008-10-27: []
2008-10-27:
- cash_isa_countable_capital
- stocks_and_shares_isa_countable_capital
2017-04-06:
- lifetime_isa_countable_capital
- cash_isa_countable_capital
- stocks_and_shares_isa_countable_capital
18 changes: 11 additions & 7 deletions policyengine_uk/parameters/gov/dwp/ESA/income/capital/sources.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
description: >
Ordinary cash ISA balances are separate from savings and are included at
their accessible cash value, without a generic cash sale-cost deduction.
The formulas count ordinary accessible cash ISAs separately from savings,
at their cash value, without a generic cash sale-cost deduction.
Where the data tie a cash ISA or stocks and shares ISA balance to a member,
the formulas count it through `person_sources` in the holder's own benefit
unit and subtract it from `cash_isa` or `share_like_capital` before they
allocate the rest.
Model variables currently mapped to countable income-related Employment and
Support Allowance capital. The Employment and Support Allowance Regulations
2008 treat capital as assessable unless it is disregarded under Schedule 9.
Expand All @@ -19,11 +23,11 @@ description: >
occupational or personal pension and the value of funds held under a
personal pension scheme. Other Schedule 9 disregards and the higher
residential-care capital disregard are not yet modeled because the current
dataset does not isolate those states or asset holdings. Because the dataset
only provides household-level capital stocks, the model allocates the full
household total to benunits with a reported income-related ESA award and
only falls back to an adult-share proxy when nobody in the household is on
that reported claim path. That allocation is a data approximation, not a
dataset does not isolate those states or asset holdings. For capital whose
owner the data do not identify, the model allocates the full household
remainder to benunits with a reported income-related ESA award and falls
back to claimant and partner shares when nobody in the household reports
such an award. That allocation is a data approximation, not a
legislated ownership rule.
metadata:
label: Income-related ESA countable capital sources
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,27 @@
description: >
Person-level model variables counted as income-based Jobseeker's Allowance
capital of the person's own benefit unit. They are summed over the benefit
unit's claimant and partner (`is_claimant_or_partner`), so they need none of
the household proxy that the household `sources` use, and a dependant's
holding is left out: regulation 109 kept a child's or young person's capital
out of the claimant's, and since children moved to child tax credit they are
outside the assessment altogether. `lifetime_isa_countable_capital` is a
Lifetime ISA at its surrender value: regulation 111 values capital at its
current market or surrender value, and DMG 29665 counts a Lifetime ISA at
75% of its value under 60 and in full from 60. Lifetime ISAs exist from 6
April 2017, and the list is empty before then.
capital of the person's own benefit unit. The formulas sum these sources
over the benefit unit's claimant and partner (`is_claimant_or_partner`) and
exclude dependants: DWP excludes children's capital under regulation 109
until SI 2003/455 applies, and regulation 88(2) from then.
`lifetime_isa_countable_capital` values a Lifetime ISA at its surrender
value: DWP values capital at its current market or surrender value under
regulation 111, and DMG 29665 counts a Lifetime ISA at 75% of its value
under 60 and in full from 60. Lifetime ISAs exist from 6 April 2017, and the
formulas count them from then. `cash_isa_countable_capital` and
`stocks_and_shares_isa_countable_capital` hold a member's cash and stocks
and shares ISA balances, bounded by the household total. The account
investor beneficially owns an ordinary ISA's investments, and the named
child owns a junior ISA's investments (Individual Savings Account
Regulations 1998 reg. 4(6)(a) and reg. 2B(c)). The formulas subtract each
bounded ISA balance from its household source (`cash_isa`,
`share_like_capital`) and count it in the holder's unit. When a household's
balances exceed its total, the model scales them to sum to the total
exactly, rounding each share down or up to a whole float32 step of the
total. When a reform removes a household source from `sources`, the formulas
exclude the corresponding ISA person source. With household totals alone,
the formulas leave the whole total in the pool. The ISA Regulations came
into force for all other purposes on 6 April 1999 (reg. 1).
metadata:
label: Income-based JSA person-level capital sources
period: year
Expand All @@ -21,7 +33,16 @@ metadata:
href: https://www.legislation.gov.uk/uksi/1996/207/regulation/111
- title: Decision Makers' Guide, Chapter 29 (Capital), para. 29665
href: https://assets.publishing.service.gov.uk/media/6894a69d3080e72710b2e237/dmg-ch-29.pdf
- title: The Individual Savings Account Regulations 1998 reg. 4
href: https://www.legislation.gov.uk/uksi/1998/1870/regulation/4
- title: The Individual Savings Account Regulations 1998 reg. 2B
href: https://www.legislation.gov.uk/uksi/1998/1870/regulation/2B
values:
1996-10-07: []
1999-04-06:
- cash_isa_countable_capital
- stocks_and_shares_isa_countable_capital
2017-04-06:
- lifetime_isa_countable_capital
- cash_isa_countable_capital
- stocks_and_shares_isa_countable_capital
16 changes: 10 additions & 6 deletions policyengine_uk/parameters/gov/dwp/JSA/income/capital/sources.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
description: >
Ordinary cash ISA balances are separate from savings and are included at
their accessible cash value, without a generic cash sale-cost deduction.
The formulas count ordinary accessible cash ISAs separately from savings,
at their cash value, without a generic cash sale-cost deduction.
Where the data tie a cash ISA or stocks and shares ISA balance to a member,
the formulas count it through `person_sources` in the holder's own benefit
unit and subtract it from `cash_isa` or `share_like_capital` before they
allocate the rest.
Model variables currently mapped to countable income-based Jobseeker's
Allowance capital. The Jobseeker's Allowance Regulations 1996 treat capital
as assessable unless it is disregarded under Schedule 8. The current
Expand All @@ -20,10 +24,10 @@ description: >
personal pension scheme. Other Schedule 8 disregards, the higher
residential-care capital disregard, and the separate child-capital disregard
are not yet modeled because the current dataset does not isolate those
states or asset holdings. Because the dataset only provides household-level
capital stocks, the model allocates the full household total to benunits
with a reported income-based JSA award and only falls back to an adult-share
proxy when nobody in the household is on that reported claim path. That
states or asset holdings. For capital whose owner the data do not identify,
the model allocates the full household remainder to benunits with a
reported income-based JSA award and falls back to claimant and partner
shares when nobody in the household reports such an award. That
allocation is a data approximation, not a legislated ownership rule.
metadata:
label: Income-based JSA countable capital sources
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,32 @@
description: >
Person-level model variables counted as Housing Benefit capital of the
person's own benefit unit. They are summed over the benefit unit's claimant
and partner (`is_claimant_or_partner`), so they need none of the household
proxy that the household `sources` use, and a dependant's holding is left
out: regulation 45 says the capital of a child or young person in the
claimant's family is not the claimant's. `lifetime_isa_countable_capital` is
a Lifetime ISA at its surrender value: regulation 47 (regulation 45 of the
pension-age regulations) values capital at its current market or surrender
value, in the words of the DWP benefits' regulations, for which DWP guidance
counts a Lifetime ISA at 75% of its value under 60 and in full from 60.
Lifetime ISAs exist from 6 April 2017, and the list is empty before then.
person's own benefit unit. The formulas sum these sources over the benefit
unit's claimant and partner (`is_claimant_or_partner`) and exclude
dependants: local authorities exclude children's capital under regulation
45 (regulation 23(3) of the pension-age regulations).
`lifetime_isa_countable_capital` values a Lifetime ISA at its surrender
value: local authorities value capital at its current market or surrender
value under regulation 47 (regulation 45 of the pension-age regulations),
whose words match the DWP benefits' valuation rules, and DWP guidance on
those rules counts a Lifetime ISA at 75% of its value under 60 and in full
from 60. Lifetime ISAs exist from 6 April 2017, and the formulas count them
from then. `cash_isa_countable_capital` and
`stocks_and_shares_isa_countable_capital` hold a member's cash and stocks
and shares ISA balances, bounded by the household total. The account
investor beneficially owns an ordinary ISA's investments, and the named
child owns a junior ISA's investments (Individual Savings Account
Regulations 1998 reg. 4(6)(a) and reg. 2B(c)). In the ordinary calculation,
the formula subtracts each bounded ISA balance from its household source
(`cash_isa`, `share_like_capital`) and counts it in the holder's unit. For a
family on a passporting benefit, or at pension age on a guarantee credit,
the formula returns zero capital, and for a savings-credit-only award it
uses the Pension Credit capital assessment. When a household's balances
exceed its total, the model scales them to sum to the total exactly,
rounding each share down or up to a whole float32 step of the total. When a
reform removes a household source from `sources`, the formulas exclude the
corresponding ISA person source. With household totals alone, the formulas
leave the whole total in the pool. The ISA Regulations came into force for
all other purposes on 6 April 1999 (reg. 1).
metadata:
label: Housing Benefit person-level capital sources
period: year
Expand All @@ -23,7 +40,15 @@ metadata:
href: https://www.legislation.gov.uk/uksi/2006/214/regulation/45
- title: Decision Makers' Guide, Chapter 29 (Capital), para. 29665 (Income Support and JSA, whose valuation rule has the same words)
href: https://assets.publishing.service.gov.uk/media/6894a69d3080e72710b2e237/dmg-ch-29.pdf
- title: The Individual Savings Account Regulations 1998 reg. 4
href: https://www.legislation.gov.uk/uksi/1998/1870/regulation/4
- title: The Individual Savings Account Regulations 1998 reg. 2B
href: https://www.legislation.gov.uk/uksi/1998/1870/regulation/2B
values:
2006-04-10: []
2006-04-10:
- cash_isa_countable_capital
- stocks_and_shares_isa_countable_capital
2017-04-06:
- lifetime_isa_countable_capital
- cash_isa_countable_capital
- stocks_and_shares_isa_countable_capital
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
description: >
Ordinary cash ISA balances are separate from savings and are included at
their accessible cash value, without a generic cash sale-cost deduction.
The formulas count ordinary accessible cash ISAs separately from savings,
at their cash value, without a generic cash sale-cost deduction.
Where the data tie a cash ISA or stocks and shares ISA balance to a member,
the formulas count it through `person_sources` in the holder's own benefit
unit and subtract it from `cash_isa` or `share_like_capital` before they
allocate the rest.
Model variables currently mapped to countable Housing Benefit capital. The
Housing Benefit Regulations 2006 treat the whole of a claimant's capital as
assessable unless it is disregarded under Schedule 6. The current mappings
Expand All @@ -22,8 +26,8 @@ description: >
regulations make the same disregard). Datasets built before private pension
wealth was split out of `corporate_wealth` still carry it inside
`share_like_capital`. Other Schedule 6 disregards within these broad asset
classes are not yet split out separately. Because the dataset only provides
household-level capital stocks, the model allocates them across benunits
classes are not yet split out separately. For capital whose owner the data
do not identify, the model allocates the household remainder across benunits
using an adult-share proxy.
metadata:
label: Housing Benefit countable capital sources
Expand Down
Loading
Loading