From dbbf7cb4f6a6ebdd2325f89b17d48c45146a4917 Mon Sep 17 00:00:00 2001 From: Ziming Date: Mon, 12 Oct 2026 14:40:44 -0400 Subject: [PATCH 1/4] Add Wyoming state supplementation for 2026 --- changelog.d/wy-ssp-2026.added.md | 1 + .../household/household_state_benefits.yaml | 4 + .../hud/annual_income/sources/unearned.yaml | 1 + .../gov/states/wy/health/ssp/amount.yaml | 10 +++ .../usda/snap/income/sources/unearned.yaml | 7 +- policyengine_us/programs.yaml | 11 +++ .../gov/states/wy/health/ssp/integration.yaml | 37 ++++++++ .../gov/states/wy/health/ssp/wy_ssp.yaml | 84 +++++++++++++++++++ .../gov/states/wy/health/ssp/wy_ssp.py | 14 ++++ .../states/wy/health/ssp/wy_ssp_eligible.py | 21 +++++ .../income/spm_unit/spm_unit_benefits.py | 1 + 11 files changed, 187 insertions(+), 4 deletions(-) create mode 100644 changelog.d/wy-ssp-2026.added.md create mode 100644 policyengine_us/parameters/gov/states/wy/health/ssp/amount.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/integration.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/wy_ssp.yaml create mode 100644 policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp.py create mode 100644 policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp_eligible.py diff --git a/changelog.d/wy-ssp-2026.added.md b/changelog.d/wy-ssp-2026.added.md new file mode 100644 index 00000000000..5cefdcf3772 --- /dev/null +++ b/changelog.d/wy-ssp-2026.added.md @@ -0,0 +1 @@ +Add Wyoming's State Supplemental Payment for residents whose sole income is SSI, verified for 2026. diff --git a/policyengine_us/parameters/gov/household/household_state_benefits.yaml b/policyengine_us/parameters/gov/household/household_state_benefits.yaml index d2cbd6ba2d4..62997666172 100644 --- a/policyengine_us/parameters/gov/household/household_state_benefits.yaml +++ b/policyengine_us/parameters/gov/household/household_state_benefits.yaml @@ -78,6 +78,7 @@ values: # DC benefits - dc_ossp # Kansas benefits + - wy_ssp - ks_sspp # Hawaii benefits - hi_oss @@ -176,6 +177,7 @@ values: # DC benefits - dc_ossp # Kansas benefits + - wy_ssp - ks_sspp # Hawaii benefits - hi_oss @@ -279,6 +281,7 @@ values: - dc_ossp - dc_child_care_subsidies # Kansas benefits + - wy_ssp - ks_sspp # Hawaii benefits - hi_oss @@ -382,6 +385,7 @@ values: - dc_ossp - dc_child_care_subsidies # Kansas benefits + - wy_ssp - ks_sspp # Hawaii benefits - hi_oss diff --git a/policyengine_us/parameters/gov/hud/annual_income/sources/unearned.yaml b/policyengine_us/parameters/gov/hud/annual_income/sources/unearned.yaml index d2b2bbd8675..710bb8b3ada 100644 --- a/policyengine_us/parameters/gov/hud/annual_income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/hud/annual_income/sources/unearned.yaml @@ -19,6 +19,7 @@ values: - strike_benefits - social_security - ssi + - wy_ssp - general_assistance - unemployment_compensation - child_support_received diff --git a/policyengine_us/parameters/gov/states/wy/health/ssp/amount.yaml b/policyengine_us/parameters/gov/states/wy/health/ssp/amount.yaml new file mode 100644 index 00000000000..3796d284673 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wy/health/ssp/amount.yaml @@ -0,0 +1,10 @@ +description: Wyoming provides this monthly State Supplemental Payment to residents whose only income is SSI. +values: + 2021-07-01: 20 +metadata: + unit: currency-USD + period: month + label: Wyoming SSP amount + reference: + - title: Wyoming Eligibility Online Manual M1804, State Supplemental Payments + href: https://ecom.wyo.gov/m1800-other-programs/m1804-state-supplemental-payments diff --git a/policyengine_us/parameters/gov/usda/snap/income/sources/unearned.yaml b/policyengine_us/parameters/gov/usda/snap/income/sources/unearned.yaml index 6f94d3d09b2..6924484a53c 100644 --- a/policyengine_us/parameters/gov/usda/snap/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/usda/snap/income/sources/unearned.yaml @@ -36,6 +36,7 @@ values: - hi_oss - id_aabd - in_ssp + - wy_ssp - ks_sspp - ky_ssp - la_oss @@ -95,9 +96,7 @@ values: metadata: reference: - - title: 7 CFR 273.9(b)(2) - href: https://www.law.cornell.edu/cfr/text/7/273.9#b_2 - - title: 7 CFR 273.9(c)(1) - href: https://www.law.cornell.edu/cfr/text/7/273.9#c_1 + - title: 7 CFR 273.9(b)(2) and (c)(1), (5) + href: https://www.law.cornell.edu/cfr/text/7/273.9 - title: POMS SI 01401.001 General Information about State Supplementation href: https://secure.ssa.gov/poms.nsf/lnx/0501401001 diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index 05cb1d13747..3034511b5eb 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -1090,6 +1090,17 @@ programs: tracks. Unmodeled paths: grandfathered medically-needy-in-medical- institution recipients per WAC 388-478-0055(2)(b); DDA-determined / PVL track per (2)(f); and foster child in BRS per (2)(g). + - state: WY + status: partial + name: Wyoming SSP + full_name: Wyoming State Supplemental Payment + variable: wy_ssp + parameter_prefix: gov.states.wy.health.ssp + verified_years: "2026" + notes: >- + Models the flat payment and sole-income test using the model's SSI + cash-income sources. Noncash support and income sources absent from + the federal SSI income model are not separately evaluated. - id: social_security name: Social Security diff --git a/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/integration.yaml new file mode 100644 index 00000000000..54fcb5af48d --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/integration.yaml @@ -0,0 +1,37 @@ +- name: Case 1, Wyoming supplement enters state benefit and SNAP income totals. + period: 2026-01 + input: + state_code: WY + age: 65 + output: + wy_ssp_eligible: true + wy_ssp: 20 + snap_unearned_income: 1014 + household_state_benefits: 20 +- name: Case 2, eligible couple receives twenty dollars each. + period: 2026-01 + input: + people: + first: + age: 65 + second: + age: 65 + marital_units: + couple: + members: + - first + - second + households: + household: + members: + - first + - second + state_code: WY + output: + ssi: + - 745.5 + - 745.5 + wy_ssp: + - 20 + - 20 + household_state_benefits: 40 diff --git a/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/wy_ssp.yaml b/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/wy_ssp.yaml new file mode 100644 index 00000000000..4286531d2f1 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/wy_ssp.yaml @@ -0,0 +1,84 @@ +# Wyoming EOM M1804: $20 monthly, with SSI as the sole income source. +- name: Case 1, aged recipient with only SSI. + period: 2026-01 + input: + state_code: WY + age: 65 + output: + ssi: 994 + wy_ssp: 20 + +- name: Case 2, income excluded from federal SSI still defeats the sole income rule. + period: 2026-01 + input: + state_code: WY + age: 65 + social_security_retirement: 120 + output: + ssi: 994 + wy_ssp: 0 + +- name: Case 3, excluded earnings still defeat the sole income rule. + period: 2026-01 + input: + state_code: WY + age: 65 + employment_income: 120 + output: + ssi: 994 + wy_ssp: 0 + +- name: Case 4, no SSI receipt. + period: 2026-01 + input: + state_code: WY + age: 65 + takes_up_ssi_if_eligible: false + output: + wy_ssp: 0 + +- name: Case 5, outside Wyoming. + period: 2026-01 + input: + state_code: UT + age: 65 + output: + wy_ssp: 0 + +- name: Case 6, institutional SSI also qualifies. + period: 2026-01 + input: + state_code: WY + age: 65 + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + output: + ssi: 30 + wy_ssp: 20 + +- name: Case 7, losses cannot offset other income for sole source eligibility. + period: 2026-01 + input: + state_code: WY + age: 65 + self_employment_income: -12_000 + social_security_retirement: 120 + output: + wy_ssp: 0 + +- name: Case 8, a disabled child may qualify. + period: 2026-01 + input: + state_code: WY + age: 12 + meets_ssi_disability_criteria: true + output: + wy_ssp: 20 + +- name: Case 9, annual total includes twelve payments. + period: 2026 + input: + state_code: WY + age: 65 + output: + wy_ssp: 240 diff --git a/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp.py b/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp.py new file mode 100644 index 00000000000..fd26153716f --- /dev/null +++ b/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp.py @@ -0,0 +1,14 @@ +from policyengine_us.model_api import * + + +class wy_ssp(Variable): + value_type = float + entity = Person + label = "Wyoming State Supplemental Payment" + definition_period = MONTH + unit = USD + defined_for = "wy_ssp_eligible" + reference = ( + "https://ecom.wyo.gov/m1800-other-programs/m1804-state-supplemental-payments" + ) + adds = ["gov.states.wy.health.ssp.amount"] diff --git a/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp_eligible.py b/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp_eligible.py new file mode 100644 index 00000000000..2b4d4117b47 --- /dev/null +++ b/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp_eligible.py @@ -0,0 +1,21 @@ +from policyengine_us.model_api import * + + +class wy_ssp_eligible(Variable): + value_type = bool + entity = Person + label = "Eligible for Wyoming State Supplemental Payment" + definition_period = MONTH + defined_for = StateCode.WY + reference = ( + "https://ecom.wyo.gov/m1800-other-programs/m1804-state-supplemental-payments" + ) + + def formula(person, period, parameters): + receives_ssi = person("ssi", period) > 0 + p = parameters(period).gov.ssa.ssi.income.sources + # The sole-income rule precedes SSI exclusions. A loss in one source + # cannot erase a positive payment from another source. + sources = list(p.earned) + list(p.unearned) + other_income = sum(max_(person(source, period), 0) for source in sources) + return receives_ssi & (other_income == 0) diff --git a/policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py b/policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py index 41ead044f46..1479b587578 100644 --- a/policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py +++ b/policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py @@ -22,6 +22,7 @@ def formula(spm_unit, period, parameters): "ky_ssp", # Kentucky benefits "de_ssp", # Delaware benefits "fl_oss", + "wy_ssp", "ks_sspp", # Kansas benefits "hi_oss", "la_oss", # Louisiana benefits From 349c83b5a214c090b02133ea24a0ffc2be6fc8e3 Mon Sep 17 00:00:00 2001 From: Ziming Date: Tue, 13 Oct 2026 01:07:15 -0400 Subject: [PATCH 2/4] Normalize Wyoming SSP parameter and test formatting --- .../household/household_state_benefits.yaml | 1 + .../hud/annual_income/sources/unearned.yaml | 1 + .../gov/states/wy/health/ssp/amount.yaml | 1 + .../gov/states/wy/health/ssp/integration.yaml | 23 +++++++------------ 4 files changed, 11 insertions(+), 15 deletions(-) diff --git a/policyengine_us/parameters/gov/household/household_state_benefits.yaml b/policyengine_us/parameters/gov/household/household_state_benefits.yaml index 62997666172..86064706e25 100644 --- a/policyengine_us/parameters/gov/household/household_state_benefits.yaml +++ b/policyengine_us/parameters/gov/household/household_state_benefits.yaml @@ -405,6 +405,7 @@ values: - nj_property_tax_relief # New York benefits - ny_child_care_subsidies + metadata: unit: list period: year diff --git a/policyengine_us/parameters/gov/hud/annual_income/sources/unearned.yaml b/policyengine_us/parameters/gov/hud/annual_income/sources/unearned.yaml index 710bb8b3ada..95290c934fa 100644 --- a/policyengine_us/parameters/gov/hud/annual_income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/hud/annual_income/sources/unearned.yaml @@ -30,6 +30,7 @@ values: - disability_benefits - survivor_benefits - financial_assistance + metadata: unit: list period: year diff --git a/policyengine_us/parameters/gov/states/wy/health/ssp/amount.yaml b/policyengine_us/parameters/gov/states/wy/health/ssp/amount.yaml index 3796d284673..b95642b8613 100644 --- a/policyengine_us/parameters/gov/states/wy/health/ssp/amount.yaml +++ b/policyengine_us/parameters/gov/states/wy/health/ssp/amount.yaml @@ -1,6 +1,7 @@ description: Wyoming provides this monthly State Supplemental Payment to residents whose only income is SSI. values: 2021-07-01: 20 + metadata: unit: currency-USD period: month diff --git a/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/integration.yaml index 54fcb5af48d..d1805f8ba36 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/integration.yaml @@ -6,32 +6,25 @@ output: wy_ssp_eligible: true wy_ssp: 20 - snap_unearned_income: 1014 + snap_unearned_income: 1_014 household_state_benefits: 20 + - name: Case 2, eligible couple receives twenty dollars each. period: 2026-01 input: people: - first: + person1: age: 65 - second: + person2: age: 65 marital_units: couple: - members: - - first - - second + members: [person1, person2] households: household: - members: - - first - - second + members: [person1, person2] state_code: WY output: - ssi: - - 745.5 - - 745.5 - wy_ssp: - - 20 - - 20 + ssi: [745.5, 745.5] + wy_ssp: [20, 20] household_state_benefits: 40 From 34ba99fefafa2998adb21cbcc49156c9bebb31ab Mon Sep 17 00:00:00 2001 From: Ziming Date: Tue, 13 Oct 2026 02:36:08 -0400 Subject: [PATCH 3/4] Fix issues from review: Wyoming SSP code-health, receipt gate and tests - Replace builtin sum() over entity calls with an explicit loop (code-health rule) - Gate on (ssi > 0) | receives_ssi - Registry placement and comments, SNAP reference title, shorter programs.yaml note - Cite W.S. 42-2-103(d) and the 2026 budget authority - Loss-floor and reported-receipt cases; realistic households in Cases 2, 3 and 8 Co-Authored-By: Claude Opus 5.5 --- .../household/household_state_benefits.yaml | 12 ++- .../gov/states/wy/health/ssp/amount.yaml | 6 ++ .../usda/snap/income/sources/unearned.yaml | 4 +- policyengine_us/programs.yaml | 5 +- .../gov/states/wy/health/ssp/wy_ssp.yaml | 83 +++++++++++++++++-- .../gov/states/wy/health/ssp/wy_ssp.py | 3 +- .../states/wy/health/ssp/wy_ssp_eligible.py | 18 ++-- .../income/spm_unit/spm_unit_benefits.py | 2 +- 8 files changed, 107 insertions(+), 26 deletions(-) diff --git a/policyengine_us/parameters/gov/household/household_state_benefits.yaml b/policyengine_us/parameters/gov/household/household_state_benefits.yaml index 86064706e25..8bbb9ff35fe 100644 --- a/policyengine_us/parameters/gov/household/household_state_benefits.yaml +++ b/policyengine_us/parameters/gov/household/household_state_benefits.yaml @@ -73,12 +73,13 @@ values: - tx_ssi_state_supplement # Virginia benefits - va_child_care_subsidies + # Wyoming benefits + - wy_ssp # Massachusetts benefits - ma_eaedc # DC benefits - dc_ossp # Kansas benefits - - wy_ssp - ks_sspp # Hawaii benefits - hi_oss @@ -168,6 +169,8 @@ values: - va_child_care_subsidies # West Virginia benefits - wv_child_care_subsidies + # Wyoming benefits + - wy_ssp # North Carolina benefits - nc_child_care_subsidies # South Carolina benefits @@ -177,7 +180,6 @@ values: # DC benefits - dc_ossp # Kansas benefits - - wy_ssp - ks_sspp # Hawaii benefits - hi_oss @@ -271,6 +273,8 @@ values: - va_child_care_subsidies # West Virginia benefits - wv_child_care_subsidies + # Wyoming benefits + - wy_ssp # North Carolina benefits - nc_child_care_subsidies # South Carolina benefits @@ -281,7 +285,6 @@ values: - dc_ossp - dc_child_care_subsidies # Kansas benefits - - wy_ssp - ks_sspp # Hawaii benefits - hi_oss @@ -375,6 +378,8 @@ values: - va_child_care_subsidies # West Virginia benefits - wv_child_care_subsidies + # Wyoming benefits + - wy_ssp # North Carolina benefits - nc_child_care_subsidies # South Carolina benefits @@ -385,7 +390,6 @@ values: - dc_ossp - dc_child_care_subsidies # Kansas benefits - - wy_ssp - ks_sspp # Hawaii benefits - hi_oss diff --git a/policyengine_us/parameters/gov/states/wy/health/ssp/amount.yaml b/policyengine_us/parameters/gov/states/wy/health/ssp/amount.yaml index b95642b8613..cae70241ef8 100644 --- a/policyengine_us/parameters/gov/states/wy/health/ssp/amount.yaml +++ b/policyengine_us/parameters/gov/states/wy/health/ssp/amount.yaml @@ -9,3 +9,9 @@ metadata: reference: - title: Wyoming Eligibility Online Manual M1804, State Supplemental Payments href: https://ecom.wyo.gov/m1800-other-programs/m1804-state-supplemental-payments + - title: W.S. 42-2-103(d) + href: https://wyoleg.gov/statutes/compress/title42.pdf#page=7 + - title: 2024 Wyoming Budget Act HB0001 (Enrolled Act 50), Section 2, Section 048, footnote 2 + href: https://wyoleg.gov/2024/Enroll/HB0001.pdf#page=21 + - title: "2026 Wyoming Budget Act SF0001 (Enrolled Act 27), Section 2, Section 048, footnote 2 #page 21-22" + href: https://wyoleg.gov/2026/Enroll/SF0001.pdf#page=21 diff --git a/policyengine_us/parameters/gov/usda/snap/income/sources/unearned.yaml b/policyengine_us/parameters/gov/usda/snap/income/sources/unearned.yaml index 6924484a53c..ab7ce04747e 100644 --- a/policyengine_us/parameters/gov/usda/snap/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/usda/snap/income/sources/unearned.yaml @@ -36,7 +36,6 @@ values: - hi_oss - id_aabd - in_ssp - - wy_ssp - ks_sspp - ky_ssp - la_oss @@ -51,6 +50,7 @@ values: - sc_ssi_state_supplement - tx_ssi_state_supplement - wa_ssp + - wy_ssp # Listed elsewhere: ca_state_supplement is an SPM unit variable with no # person-level counterpart. policyengine-core projects a group value onto # every member, so listing it here would count it once per person in the @@ -96,7 +96,7 @@ values: metadata: reference: - - title: 7 CFR 273.9(b)(2) and (c)(1), (5) + - title: 7 CFR 273.9(b)(2) and (c)(1) href: https://www.law.cornell.edu/cfr/text/7/273.9 - title: POMS SI 01401.001 General Information about State Supplementation href: https://secure.ssa.gov/poms.nsf/lnx/0501401001 diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index 3034511b5eb..419b638800b 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -1098,9 +1098,8 @@ programs: parameter_prefix: gov.states.wy.health.ssp verified_years: "2026" notes: >- - Models the flat payment and sole-income test using the model's SSI - cash-income sources. Noncash support and income sources absent from - the federal SSI income model are not separately evaluated. + Models the 2026 flat payment for Wyoming residents who receive SSI + and have no other income. - id: social_security name: Social Security diff --git a/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/wy_ssp.yaml b/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/wy_ssp.yaml index 4286531d2f1..9b06a10c14d 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/wy_ssp.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/wy_ssp.yaml @@ -13,19 +13,30 @@ input: state_code: WY age: 65 - social_security_retirement: 120 + # $1,500 in savings, under the $2,000 SSI resource limit, earning the FDIC + # national savings rate of 0.37% (September 2026): $1,500 * 0.0037 = $5.55. + bank_account_assets: 1_500 + taxable_interest_income: 5.55 output: + # $5.55 / 12 = $0.4625 interest a month, all absorbed by the $20 general + # exclusion: countable income $0, so $994 - $0 = $994. ssi: 994 + # $0.4625 > $0 is other income in the month, so the sole income rule fails. wy_ssp: 0 -- name: Case 3, excluded earnings still defeat the sole income rule. +- name: Case 3, part-time earnings still defeat the sole income rule. period: 2026-01 input: state_code: WY age: 65 - employment_income: 120 + # 10 hours a week at the Wyoming retail salesperson median wage of $16.50 + # (BLS OEWS May 2025): $16.50 * 10 * 52 = $8,580 a year. + employment_income: 8_580 output: - ssi: 994 + # $8,580 / 12 = $715 a month; ($715 - $20 - $65) * 0.5 = $315 countable; + # $994 - $315 = $679. + ssi: 679 + # $715 of wages is other income in the month, so the sole income rule fails. wy_ssp: 0 - name: Case 4, no SSI receipt. @@ -66,14 +77,42 @@ output: wy_ssp: 0 -- name: Case 8, a disabled child may qualify. +- name: Case 8, a disabled child living with working parents may qualify. period: 2026-01 + absolute_error_margin: 0.01 input: - state_code: WY - age: 12 - meets_ssi_disability_criteria: true + people: + person1: + age: 40 + own_children_in_household: 1 + # Full-time work at the Wyoming median annual wage (BLS OEWS May 2025). + employment_income: 50_270 + person2: + age: 38 + own_children_in_household: 1 + person3: + age: 12 + meets_ssi_disability_criteria: true + tax_units: + tax_unit: + members: [person1, person2, person3] + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2, person3] + state_code: WY output: - wy_ssp: 20 + # Parents: $50,270 / 12 = $4,189.17 a month; ($4,189.17 - $20 - $65) * 0.5 + # = $2,052.08; less the two-parent allocation of $1,491 = $561.08 deemed. + ssi_unearned_income_deemed_from_ineligible_parent: [0, 0, 561.08] + # Child: $561.08 - $20 general exclusion = $541.08 countable; + # $994 - $541.08 = $452.92. The parents are not aged, blind or disabled. + ssi: [0, 0, 452.92] + # The sole income rule reads only the child's own sources, which are $0; + # deemed parental income is not one of them. + wy_ssp: [0, 0, 20] - name: Case 9, annual total includes twelve payments. period: 2026 @@ -82,3 +121,29 @@ age: 65 output: wy_ssp: 240 + +- name: Case 10, a self-employment loss alone is not other income. + period: 2026-01 + input: + state_code: WY + age: 65 + self_employment_income: -12_000 + output: + # SSI floors earned income at $0: countable income $0, so $994 - $0 = $994. + ssi: 994 + # -$12,000 / 12 = -$1,000 a month is not above $0, so no source is other + # income: $20. + wy_ssp: 20 + +- name: Case 11, reported SSI receipt qualifies when modeled SSI is zero. + period: 2026-01 + input: + state_code: WY + age: 40 + receives_ssi: true + output: + # No disability input, so the model finds no aged, blind or disabled + # status and computes $0 SSI. + ssi: 0 + # Reported receipt meets the SSI condition and there is no other income: $20. + wy_ssp: 20 diff --git a/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp.py b/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp.py index fd26153716f..f7b4eeb23cd 100644 --- a/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp.py +++ b/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp.py @@ -9,6 +9,7 @@ class wy_ssp(Variable): unit = USD defined_for = "wy_ssp_eligible" reference = ( - "https://ecom.wyo.gov/m1800-other-programs/m1804-state-supplemental-payments" + "https://ecom.wyo.gov/m1800-other-programs/m1804-state-supplemental-payments", + "https://wyoleg.gov/statutes/compress/title42.pdf#page=7", ) adds = ["gov.states.wy.health.ssp.amount"] diff --git a/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp_eligible.py b/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp_eligible.py index 2b4d4117b47..9cc02a01140 100644 --- a/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp_eligible.py +++ b/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp_eligible.py @@ -8,14 +8,20 @@ class wy_ssp_eligible(Variable): definition_period = MONTH defined_for = StateCode.WY reference = ( - "https://ecom.wyo.gov/m1800-other-programs/m1804-state-supplemental-payments" + "https://ecom.wyo.gov/m1800-other-programs/m1804-state-supplemental-payments", + "https://wyoleg.gov/statutes/compress/title42.pdf#page=7", ) def formula(person, period, parameters): - receives_ssi = person("ssi", period) > 0 + receives_ssi = (person("ssi", period) > 0) | person("receives_ssi", period) p = parameters(period).gov.ssa.ssi.income.sources - # The sole-income rule precedes SSI exclusions. A loss in one source - # cannot erase a positive payment from another source. + # W.S. 42-2-103(d) requires no other income in the month. The test + # precedes SSI exclusions, and only positive amounts count, so a loss + # in one source cannot offset a positive payment from another source. + # NOTE: noncash support and income sources absent from the federal SSI + # income model are not separately evaluated. sources = list(p.earned) + list(p.unearned) - other_income = sum(max_(person(source, period), 0) for source in sources) - return receives_ssi & (other_income == 0) + has_other_income = np.zeros_like(receives_ssi) + for source in sources: + has_other_income = has_other_income | (person(source, period) > 0) + return receives_ssi & ~has_other_income diff --git a/policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py b/policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py index 1479b587578..d4f109a9b33 100644 --- a/policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py +++ b/policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py @@ -22,7 +22,7 @@ def formula(spm_unit, period, parameters): "ky_ssp", # Kentucky benefits "de_ssp", # Delaware benefits "fl_oss", - "wy_ssp", + "wy_ssp", # Wyoming benefits "ks_sspp", # Kansas benefits "hi_oss", "la_oss", # Louisiana benefits From 0dd7cd2774ceabf95e89545aa033d8ad1b9e483d Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 14 Oct 2026 13:34:35 -0400 Subject: [PATCH 4/4] Address review: Wyoming SSP description, income-attribution readings and HUD test - Use the parameter description template for the Wyoming amount. - Document that only the person's own income sources count, and pin it with a couple case and an ineligible-spouse deeming case. - Assert the supplement's HUD annual income wiring in an annual integration case. Co-Authored-By: Claude Opus 5.5 --- .../gov/states/wy/health/ssp/amount.yaml | 2 +- .../gov/states/wy/health/ssp/integration.yaml | 10 ++++ .../gov/states/wy/health/ssp/wy_ssp.yaml | 52 +++++++++++++++++++ .../states/wy/health/ssp/wy_ssp_eligible.py | 5 ++ 4 files changed, 68 insertions(+), 1 deletion(-) diff --git a/policyengine_us/parameters/gov/states/wy/health/ssp/amount.yaml b/policyengine_us/parameters/gov/states/wy/health/ssp/amount.yaml index cae70241ef8..06b74f11600 100644 --- a/policyengine_us/parameters/gov/states/wy/health/ssp/amount.yaml +++ b/policyengine_us/parameters/gov/states/wy/health/ssp/amount.yaml @@ -1,4 +1,4 @@ -description: Wyoming provides this monthly State Supplemental Payment to residents whose only income is SSI. +description: Wyoming provides this amount as the monthly payment under the State Supplemental Payment program. values: 2021-07-01: 20 diff --git a/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/integration.yaml index d1805f8ba36..1d07b6116e3 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/integration.yaml @@ -28,3 +28,13 @@ ssi: [745.5, 745.5] wy_ssp: [20, 20] household_state_benefits: 40 + +- name: Case 3, annual Wyoming supplement counts as HUD income. + period: 2026 + input: + state_code: WY + age: 65 + output: + wy_ssp: 240 + # SSI $994 * 12 = $11,928, plus the $240 supplement = $12,168. + hud_annual_income: 12_168 diff --git a/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/wy_ssp.yaml b/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/wy_ssp.yaml index 9b06a10c14d..022a2b11f46 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/wy_ssp.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/wy/health/ssp/wy_ssp.yaml @@ -147,3 +147,55 @@ ssi: 0 # Reported receipt meets the SSI condition and there is no other income: $20. wy_ssp: 20 + +- name: Case 12, in an eligible couple only the spouse with other income loses the supplement. + period: 2026-01 + input: + people: + person1: + age: 67 + # $100 a month of Social Security retirement: $100 * 12 = $1,200 a year. + social_security_retirement: 1_200 + person2: + age: 66 + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WY + output: + # Couple: $100 - $20 general exclusion = $80 countable; + # ($1,491 - $80) / 2 = $705.50 each. + ssi: [705.5, 705.5] + # person1 has $100 of own income; person2's own sources are $0, so the + # spouse's income does not count against person2: $20. + wy_ssp: [0, 20] + +- name: Case 13, income deemed from an ineligible spouse does not defeat the sole income rule. + period: 2026-01 + input: + people: + person1: + age: 67 + person2: + age: 45 + # 14 hours a week at the Wyoming retail salesperson median wage of + # $16.50 (BLS OEWS May 2025): $16.50 * 14 * 52 = $12,012 a year. + employment_income: 12_012 + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WY + output: + # $12,012 / 12 = $1,001 a month of spouse wages, above the $497 difference + # between the couple and individual rates, so deeming applies: + # ($1,001 - $20 - $65) * 0.5 = $458 deemed; $1,491 - $458 = $1,033, + # capped at the $994 individual rate. person2 is not aged, blind or disabled. + ssi: [994, 0] + # person1's own sources are $0; deemed spouse income is not one of them: $20. + wy_ssp: [20, 0] diff --git a/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp_eligible.py b/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp_eligible.py index 9cc02a01140..ab782c831d6 100644 --- a/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp_eligible.py +++ b/policyengine_us/variables/gov/states/wy/health/ssp/wy_ssp_eligible.py @@ -20,6 +20,11 @@ def formula(person, period, parameters): # in one source cannot offset a positive payment from another source. # NOTE: noncash support and income sources absent from the federal SSI # income model are not separately evaluated. + # NOTE: only the person's own sources count. Income deemed from a parent + # or an ineligible spouse, and the other spouse's income in an eligible + # couple, are not treated as the person's other income. The statute does + # not define "income", and EOM M1804 lists child cases in a parent's + # household (living arrangement C) among its pay-rate codes. sources = list(p.earned) + list(p.unearned) has_other_income = np.zeros_like(receives_ssi) for source in sources: