Skip to content

Commit c02be72

Browse files
authored
Fix stock capital period handling (#1675)
1 parent 6d2a176 commit c02be72

15 files changed

Lines changed: 68 additions & 4 deletions
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
from policyengine_uk import Simulation
2+
3+
4+
def test_uc_capital_stocks_are_not_prorated_in_monthly_calculations():
5+
situation = {
6+
"people": {"person": {"age": {"2026": 30}}},
7+
"benunits": {
8+
"benunit": {
9+
"members": ["person"],
10+
"would_claim_uc": {"2026": True},
11+
}
12+
},
13+
"households": {
14+
"household": {
15+
"members": ["person"],
16+
"savings": {"2026": 12_000},
17+
"other_residential_property_value": {"2026": 12_000},
18+
"corporate_wealth": {"2026": 12_000},
19+
}
20+
},
21+
}
22+
simulation = Simulation(situation=situation)
23+
24+
assert simulation.calculate("savings", "2026-01")[0] == 12_000
25+
assert simulation.calculate("corporate_wealth", "2026-01")[0] == 12_000
26+
assert simulation.calculate("uc_assessable_capital", "2026-01")[0] == 36_000
27+
assert not simulation.calculate("is_uc_eligible", "2026-01")[0]
28+
29+
30+
def test_pension_credit_capital_stocks_are_not_prorated_monthly():
31+
situation = {
32+
"people": {"person": {"age": {"2026": 70}}},
33+
"benunits": {"benunit": {"members": ["person"]}},
34+
"households": {
35+
"household": {
36+
"members": ["person"],
37+
"savings": {"2026": 12_000},
38+
"owned_land": {"2026": 12_000},
39+
"corporate_wealth": {"2026": 12_000},
40+
}
41+
},
42+
}
43+
simulation = Simulation(situation=situation)
44+
45+
assert simulation.calculate("savings", "2026-01")[0] == 12_000
46+
assert (
47+
simulation.calculate("pension_credit_assessable_capital", "2026-01")[0]
48+
== 36_000
49+
)

policyengine_uk/variables/gov/dwp/esa_income_assessable_capital.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class esa_income_assessable_capital(Variable):
1515
)
1616
definition_period = YEAR
1717
unit = GBP
18+
quantity_type = STOCK
1819

1920
def formula(benunit, period, parameters):
2021
ESA = parameters(period).gov.dwp.ESA.income

policyengine_uk/variables/gov/dwp/housing_benefit/housing_benefit_assessable_capital.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@ class housing_benefit_assessable_capital(Variable):
1111
)
1212
definition_period = YEAR
1313
unit = GBP
14+
quantity_type = STOCK
1415

1516
def formula(benunit, period, parameters):
1617
household = benunit.household
1718
person = benunit.members
1819
any_over_SP_age = benunit.any(person("is_SP_age", period))
1920
p = parameters(period).gov.dwp.housing_benefit.means_test.capital
20-
household_capital = add(household, period, p.sources)
21+
household_capital = sum(household(source, period) for source in p.sources)
2122
benunit_adults = add(benunit, period, ["is_adult"])
2223
household_adults = benunit.max(
2324
person.household.sum(person.household.members("is_adult", period))

policyengine_uk/variables/gov/dwp/income_support_assessable_capital.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class income_support_assessable_capital(Variable):
1414
)
1515
definition_period = YEAR
1616
unit = GBP
17+
quantity_type = STOCK
1718

1819
def formula(benunit, period, parameters):
1920
IS = parameters(period).gov.dwp.income_support

policyengine_uk/variables/gov/dwp/jsa_income_assessable_capital.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class jsa_income_assessable_capital(Variable):
1515
)
1616
definition_period = YEAR
1717
unit = GBP
18+
quantity_type = STOCK
1819

1920
def formula(benunit, period, parameters):
2021
JSA = parameters(period).gov.dwp.JSA.income

policyengine_uk/variables/gov/dwp/pension_credit/pension_credit_assessable_capital.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@ class pension_credit_assessable_capital(Variable):
1313
)
1414
definition_period = YEAR
1515
unit = GBP
16+
quantity_type = STOCK
1617

1718
def formula(benunit, period, parameters):
1819
household = benunit.household
1920
person = benunit.members
2021
p = parameters(period).gov.dwp.pension_credit.income.capital
21-
household_capital = add(household, period, p.sources)
22+
household_capital = sum(household(source, period) for source in p.sources)
2223
any_pension_age = benunit.any(person("is_SP_age", period))
2324
benunit_pension_age_adults = benunit.sum(person("is_SP_age", period))
2425
household_pension_age_adults = benunit.max(

policyengine_uk/variables/gov/dwp/universal_credit/household_uc_reported_capital.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class household_uc_reported_capital(Variable):
77
label = "Household Universal Credit capital explicitly reported by benunits"
88
definition_period = YEAR
99
unit = GBP
10+
quantity_type = STOCK
1011

1112
def formula(household, period, parameters):
1213
person = household.members

policyengine_uk/variables/gov/dwp/universal_credit/uc_assessable_capital.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@ class uc_assessable_capital(Variable):
1111
)
1212
definition_period = YEAR
1313
unit = GBP
14+
quantity_type = STOCK
1415

1516
def formula(benunit, period, parameters):
1617
household = benunit.household
1718
p = parameters(period).gov.dwp.universal_credit.means_test
18-
household_capital = add(household, period, p.capital.sources)
19+
household_capital = sum(
20+
household(source, period) for source in p.capital.sources
21+
)
1922
benunit_adults = add(benunit, period, ["is_adult"])
2023
household_reported_capital = household("household_uc_reported_capital", period)
2124
household_unreported_adults = household(

policyengine_uk/variables/gov/dwp/universal_credit/uc_reported_capital.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ class uc_reported_capital(Variable):
1212
)
1313
definition_period = YEAR
1414
unit = GBP
15+
quantity_type = STOCK
1516
default_value = -1

policyengine_uk/variables/gov/hmrc/student_loans/student_loan_balance.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ class student_loan_balance(Variable):
1111
)
1212
definition_period = YEAR
1313
unit = GBP
14+
quantity_type = STOCK
1415
default_value = 0

0 commit comments

Comments
 (0)