Skip to content

Commit 821395c

Browse files
MaxGhenisclaude
andauthored
Add liquid asset variables for SSI modeling (#7329)
* Add liquid asset variables for SSI modeling Adds three input variables imputed from SIPP in policyengine-us-data: - bank_account_assets: checking, savings, money market - stock_assets: stocks and mutual funds - bond_assets: bonds and government securities Updates ssi_countable_resources to calculate from these asset categories, enabling realistic asset-based eligibility testing for SSI. Co-Authored-By: Claude Opus 4.5 <[email protected]> * Use adds pattern for ssi_countable_resources Replace formula with adds attribute referencing parameter file that lists the asset sources. This separates policy logic (which assets count) from variable implementation. Co-Authored-By: Claude Opus 4.5 <[email protected]> * Fix references to use POMS sections that explicitly list countable resources The USC only lists exclusions, not what counts. POMS SI 01140.xxx explicitly defines bank accounts, stocks, and bonds as countable. Co-Authored-By: Claude Opus 4.5 <[email protected]> * Add spm_unit_cash_assets aggregation from person-level assets spm_unit_cash_assets now sums bank_account_assets, stock_assets, and bond_assets across the SPM unit. This flows through to IL AABD and MA EAEDC which use spm_unit_cash_assets. Co-Authored-By: Claude Opus 4.5 <[email protected]> * Use actual imputed assets for SSI resource test Remove microsimulation bypass that used random pass rate. Now that liquid assets are imputed from SIPP, the resource test can use real calculated values. - Remove pass_rate.yaml parameter (no longer needed) - Update README to reflect new methodology - meets_ssi_resource_test now always uses ssi_countable_resources Co-Authored-By: Claude Opus 4.5 <[email protected]> * Add SSI takeup variable and apply in benefit calculation - Add takes_up_ssi_if_eligible with default_value=True - Apply takeup multiplier in ssi.py for microsimulation - Follows new pattern from PR #7326 (no random() in country package) Co-Authored-By: Claude Opus 4.5 <[email protected]> * Trigger CI * Trigger CI * Add POMS references to asset variables Co-Authored-By: Claude Opus 4.5 <[email protected]> --------- Co-authored-by: Claude Opus 4.5 <[email protected]>
1 parent 97b46db commit 821395c

File tree

12 files changed

+110
-8
lines changed

12 files changed

+110
-8
lines changed

changelog_entry.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
- bump: minor
2+
changes:
3+
added:
4+
- Add liquid asset input variables (bank_account_assets, stock_assets, bond_assets), ssi_countable_resources, and spm_unit_cash_assets aggregation
5+
- Add takes_up_ssi_if_eligible variable for SSI takeup modeling
6+
changed:
7+
- SSI resource test now uses actual imputed assets instead of random pass rate
8+
- SSI benefit now applies takeup in microsimulation
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
# Resources
22

3-
[SSA reported $5.293 billion in SSI expenditures in February 2023](https://www.ssa.gov/policy/docs/quickfacts/stat_snapshot/#table3).
4-
Adjust `pass_rate.yaml` to match this for SSI in 2023 ($5.293 billion * 12 = $63.5 billion).
3+
SSI countable resources are now calculated from imputed liquid assets
4+
(bank accounts, stocks, bonds) rather than using a random pass rate.
5+
6+
The assets are imputed from SIPP in policyengine-us-data and flow through
7+
to the SSI resource test via `ssi_countable_resources`.
58

6-
Check with this code:
9+
Check SSI expenditures with:
710
```python
811
from policyengine_us import Microsimulation
912
Microsimulation().calc("ssi", map_to="person", period=2023).sum() / 1e9
1013
```
14+
15+
[SSA reported $5.293 billion in SSI expenditures in February 2023](https://www.ssa.gov/policy/docs/quickfacts/stat_snapshot/#table3).
16+
Annual target: $5.293 billion * 12 = $63.5 billion.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
description: >-
2+
The US counts these asset types as countable resources for SSI eligibility.
3+
Excludes home, one vehicle, household goods, burial plots, and retirement accounts.
4+
values:
5+
1975-01-01:
6+
# Liquid assets counted as resources
7+
- bank_account_assets # Checking, savings, money market
8+
- stock_assets # Stocks and mutual funds
9+
- bond_assets # Bonds and government securities
10+
metadata:
11+
label: SSI countable resource sources
12+
reference:
13+
- title: SSA POMS SI 01140.200 - Checking and Savings Accounts
14+
href: https://secure.ssa.gov/poms.nsf/lnx/0501140200
15+
- title: SSA POMS SI 01140.220 - Stocks
16+
href: https://secure.ssa.gov/poms.nsf/lnx/0501140220
17+
- title: SSA POMS SI 01140.240 - U.S. Savings Bonds
18+
href: https://secure.ssa.gov/poms.nsf/lnx/0501140240
19+
- title: SSA POMS SI 01140.250 - Municipal, Corporate and Government Bonds
20+
href: https://secure.ssa.gov/poms.nsf/lnx/0501140250

policyengine_us/parameters/gov/ssa/ssi/eligibility/resources/pass_rate.yaml

Lines changed: 0 additions & 3 deletions
This file was deleted.

policyengine_us/variables/gov/ssa/ssi/eligibility/resources/meets_ssi_resource_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ class meets_ssi_resource_test(Variable):
55
value_type = bool
66
entity = Person
77
label = "Meets SSI resource test"
8-
unit = USD
98
definition_period = YEAR
9+
reference = "https://secure.ssa.gov/poms.nsf/lnx/0501110000"
1010

1111
def formula(person, period, parameters):
1212
p = parameters(period).gov.ssa.ssi

policyengine_us/variables/gov/ssa/ssi/eligibility/resources/ssi_countable_resources.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,15 @@ class ssi_countable_resources(Variable):
55
value_type = float
66
entity = Person
77
label = "SSI countable resources"
8+
documentation = (
9+
"Countable resources for SSI eligibility. Includes liquid assets "
10+
"(bank accounts, stocks, bonds) but excludes home, one vehicle, "
11+
"household goods, and retirement accounts per SSI rules."
12+
)
813
unit = USD
914
definition_period = YEAR
15+
reference = (
16+
"https://secure.ssa.gov/poms.nsf/lnx/0501140000", # POMS SI 01140.000 - Types of Countable Resources
17+
)
18+
19+
adds = "gov.ssa.ssi.eligibility.resources.countable"

policyengine_us/variables/gov/ssa/ssi/ssi.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,11 @@ def formula(person, period, parameters):
3030
individual_max = p.individual * MONTHS_IN_YEAR
3131
capped_benefit = min_(benefit, individual_max)
3232

33-
return where(
33+
final_benefit = where(
3434
deeming_applies,
3535
capped_benefit,
3636
benefit,
3737
)
38+
39+
takes_up = person("takes_up_ssi_if_eligible", period)
40+
return final_benefit * takes_up
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from policyengine_us.model_api import *
2+
3+
4+
class takes_up_ssi_if_eligible(Variable):
5+
value_type = bool
6+
entity = Person
7+
label = "Takes up SSI if eligible"
8+
definition_period = YEAR
9+
default_value = True
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from policyengine_us.model_api import *
2+
3+
4+
class bank_account_assets(Variable):
5+
value_type = float
6+
entity = Person
7+
label = "Bank account assets"
8+
documentation = (
9+
"Value of checking, savings, and money market accounts. "
10+
"Imputed from SIPP TVAL_BANK."
11+
)
12+
unit = USD
13+
definition_period = YEAR
14+
uprating = "gov.bls.cpi.cpi_u"
15+
reference = "https://secure.ssa.gov/poms.nsf/lnx/0501140200"
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from policyengine_us.model_api import *
2+
3+
4+
class bond_assets(Variable):
5+
value_type = float
6+
entity = Person
7+
label = "Bond assets"
8+
documentation = (
9+
"Value of bonds and government securities. "
10+
"Imputed from SIPP TVAL_BOND."
11+
)
12+
unit = USD
13+
definition_period = YEAR
14+
uprating = "gov.bls.cpi.cpi_u"
15+
reference = (
16+
"https://secure.ssa.gov/poms.nsf/lnx/0501140240",
17+
"https://secure.ssa.gov/poms.nsf/lnx/0501140250",
18+
)

0 commit comments

Comments
 (0)