diff --git a/changelog.d/ut-ssp-2026.added.md b/changelog.d/ut-ssp-2026.added.md new file mode 100644 index 00000000000..0157c1cba44 --- /dev/null +++ b/changelog.d/ut-ssp-2026.added.md @@ -0,0 +1 @@ +Add Utah's state supplements to SSI recipients for 2026: the Department of Workforce Services supplement and the $15 payment to Medicaid institution residents. diff --git a/policyengine_us/parameters/gov/household/household_state_benefits.yaml b/policyengine_us/parameters/gov/household/household_state_benefits.yaml index 235a7a5d63a..d81996e0e8b 100644 --- a/policyengine_us/parameters/gov/household/household_state_benefits.yaml +++ b/policyengine_us/parameters/gov/household/household_state_benefits.yaml @@ -82,6 +82,8 @@ values: - sc_ssi_state_supplement # South Dakota benefits - sd_ssp + # Utah benefits + - ut_ssp # Texas benefits - tx_ssi_state_supplement # Virginia benefits @@ -189,6 +191,8 @@ values: - sc_ssi_state_supplement # South Dakota benefits - sd_ssp + # Utah benefits + - ut_ssp # Texas benefits - tx_ssi_state_supplement # Virginia benefits @@ -307,6 +311,8 @@ values: - sc_ssi_state_supplement # South Dakota benefits - sd_ssp + # Utah benefits + - ut_ssp # Texas benefits - tx_ssi_state_supplement # Virginia benefits @@ -426,6 +432,8 @@ values: - sc_ssi_state_supplement # South Dakota benefits - sd_ssp + # Utah benefits + - ut_ssp # Texas benefits - tx_ssi_state_supplement # Virginia benefits 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 257416a9692..79e1024b36a 100644 --- a/policyengine_us/parameters/gov/hud/annual_income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/hud/annual_income/sources/unearned.yaml @@ -28,6 +28,7 @@ values: - ok_ssp - ny_ssp - ri_ssp + - ut_dws_ssp - sd_ssp - va_ag - general_assistance diff --git a/policyengine_us/parameters/gov/states/ut/dhhs/ssp/amount.yaml b/policyengine_us/parameters/gov/states/ut/dhhs/ssp/amount.yaml new file mode 100644 index 00000000000..b5a945dd245 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ut/dhhs/ssp/amount.yaml @@ -0,0 +1,13 @@ +description: Utah provides this amount as the monthly payment to Medicaid institution residents under the State Supplemental Payment program. +values: + 2008-02-01: 15 + +metadata: + unit: currency-USD + period: month + label: Utah DHHS SSP amount + reference: + - title: Utah Admin. Code R414-306-6(2) + href: https://www.law.cornell.edu/regulations/utah/Utah-Admin-Code-R414-306-6 + - title: Utah Medicaid Manual 661, Eligibility for the Supplemental Payment + href: https://oepmanuals.dhhs.utah.gov/600_Program_Benefits/661_Fifteen_Dollar_State_Supplemental_Payment_%28SSP%29.htm diff --git a/policyengine_us/parameters/gov/states/ut/dhhs/ssp/minimum_ssi_payment.yaml b/policyengine_us/parameters/gov/states/ut/dhhs/ssp/minimum_ssi_payment.yaml new file mode 100644 index 00000000000..52c533a81e7 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ut/dhhs/ssp/minimum_ssi_payment.yaml @@ -0,0 +1,13 @@ +description: Utah sets this amount as the minimum monthly federal Supplemental Security Income payment under the State Supplemental Payment program. +values: + 2008-02-01: 1 + +metadata: + unit: currency-USD + period: month + label: Utah DHHS SSP minimum federal SSI payment + reference: + - title: Utah Medicaid Manual 661, Eligibility for the Supplemental Payment + href: https://oepmanuals.dhhs.utah.gov/600_Program_Benefits/661_Fifteen_Dollar_State_Supplemental_Payment_%28SSP%29.htm + - title: Utah Admin. Code R414-306-6(2) + href: https://www.law.cornell.edu/regulations/utah/Utah-Admin-Code-R414-306-6 diff --git a/policyengine_us/parameters/gov/states/ut/dws/ssp/amount/couple/another_household.yaml b/policyengine_us/parameters/gov/states/ut/dws/ssp/amount/couple/another_household.yaml new file mode 100644 index 00000000000..26b1720848a --- /dev/null +++ b/policyengine_us/parameters/gov/states/ut/dws/ssp/amount/couple/another_household.yaml @@ -0,0 +1,12 @@ +description: Utah provides this amount as the monthly supplement to a couple living in the household of another under the State Supplemental Payments to Supplemental Security Income Recipients program. +values: + # DWS has republished the amounts each January since 2024; no indexing rule is published. + 2026-01-01: 12.19 + +metadata: + unit: currency-USD + period: month + label: Utah DWS SSP couple amount in the household of another + reference: + - title: Utah DWS Eligibility Manual 205-10, State Supplemental Payments to SSI Recipients (effective January 1, 2026) + href: https://jobs.utah.gov/infosource/eligibilitymanual/200_Program_Eligibility_Requirements/205-10_State_Supplemental_Payments_to_SSI_Recipients_-_General_Information.htm diff --git a/policyengine_us/parameters/gov/states/ut/dws/ssp/amount/couple/own_household.yaml b/policyengine_us/parameters/gov/states/ut/dws/ssp/amount/couple/own_household.yaml new file mode 100644 index 00000000000..efafb8a865e --- /dev/null +++ b/policyengine_us/parameters/gov/states/ut/dws/ssp/amount/couple/own_household.yaml @@ -0,0 +1,12 @@ +description: Utah provides this amount as the monthly supplement to a couple living alone or with others in their own household under the State Supplemental Payments to Supplemental Security Income Recipients program. +values: + # DWS has republished the amounts each January since 2024; no indexing rule is published. + 2026-01-01: 5.75 + +metadata: + unit: currency-USD + period: month + label: Utah DWS SSP couple amount in their own household + reference: + - title: Utah DWS Eligibility Manual 205-10, State Supplemental Payments to SSI Recipients (effective January 1, 2026) + href: https://jobs.utah.gov/infosource/eligibilitymanual/200_Program_Eligibility_Requirements/205-10_State_Supplemental_Payments_to_SSI_Recipients_-_General_Information.htm diff --git a/policyengine_us/parameters/gov/states/ut/dws/ssp/amount/individual.yaml b/policyengine_us/parameters/gov/states/ut/dws/ssp/amount/individual.yaml new file mode 100644 index 00000000000..a41ea3401b5 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ut/dws/ssp/amount/individual.yaml @@ -0,0 +1,12 @@ +description: Utah provides this amount as the monthly supplement to a single person under the State Supplemental Payments to Supplemental Security Income Recipients program. +values: + # DWS has republished the amounts each January since 2024; no indexing rule is published. + 2026-01-01: 3.91 + +metadata: + unit: currency-USD + period: month + label: Utah DWS SSP single person amount + reference: + - title: Utah DWS Eligibility Manual 205-10, State Supplemental Payments to SSI Recipients (effective January 1, 2026) + href: https://jobs.utah.gov/infosource/eligibilitymanual/200_Program_Eligibility_Requirements/205-10_State_Supplemental_Payments_to_SSI_Recipients_-_General_Information.htm 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 e8d950512b9..56e994eb644 100644 --- a/policyengine_us/parameters/gov/usda/snap/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/usda/snap/income/sources/unearned.yaml @@ -58,6 +58,10 @@ values: - sc_ssi_state_supplement - sd_ssp - tx_ssi_state_supplement + # Utah exempts its Department of Workforce Services supplement + # (ut_dws_ssp) from SNAP income (DWS Eligibility Manual 425-11). + # The model follows that exemption, which cites no 273.9(c) exclusion. + - ut_dhhs_ssp - va_ag - wa_ssp - wy_ssp diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index 43fdd714b80..c00939bf9f1 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -1247,6 +1247,20 @@ programs: notes: Models 2026 independent living and certified nonwaiver assisted living/adult foster care supplements. Out-of-state placements, historical mandatory supplements and claim administration are not modeled. + - state: UT + status: partial + name: Utah SSP + full_name: Utah State Supplemental Payment + variable: ut_ssp + parameter_prefix: gov.states.ut.dhhs.ssp + verified_years: "2026" + notes: >- + Models the 2026 Department of Workforce Services supplement, paid + quarterly to SSI recipients and over-income applicants other than + single individuals living alone, and the $15 monthly payment to SSI + recipients in Medicaid-funded medical institutions. The over-income + path has no take-up, so microsimulation pays far more people than + the program reaches. - state: VA status: partial name: Virginia Auxiliary Grant diff --git a/policyengine_us/tests/policy/baseline/gov/states/ut/dhhs/ssp/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ut/dhhs/ssp/integration.yaml new file mode 100644 index 00000000000..18c99456130 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ut/dhhs/ssp/integration.yaml @@ -0,0 +1,179 @@ +- name: Case 1, Utah supplement enters state benefit and SNAP income totals. + period: 2026 + input: + state_code: UT + age: 65 + medicaid_enrolled: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + # SNAP take-up off keeps projected SNAP out of spm_unit_benefits. + takes_up_snap_if_eligible: false + output: + ut_ssp: 180 + snap_unearned_income: 540 + household_state_benefits: 180 + # HUD income excludes the supplement (see ut_ssp): SSI 30 * 12 = 360. + hud_unearned_income: 360 + # SSI 30 * 12 = 360 + Utah SSP 15 * 12 = 180 = 540 (SNAP take-up off). + spm_unit_benefits: 540 + +- name: Case 2, endogenous Medicaid enrollment counts the supplement in SNAP income without a dependency cycle. + period: 2026-01 + input: + state_code: UT + age: 65 + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + output: + ut_ssp: 15 + # $30 SSI + $15 supplement = $45 for the month. + snap_unearned_income: 45 + +- name: Case 3, 2027 facility resident with endogenous Medicaid keeps the fixed supplement. + period: 2027-01 + input: + state_code: UT + age: 65 + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + output: + # The federal $30 medical treatment facility rate has no COLA. + ssi: 30 + # Medicaid work requirements apply from 2027, so enrollment comes from the + # cycle-breaking Medicaid branch; the $15 supplement is not indexed. + ut_ssp: 15 + # $30 SSI + $15 supplement = $45 for the month. + snap_unearned_income: 45 + +- name: Case 4, DWS supplement enters state benefit and HUD totals but not SNAP income. + period: 2026 + input: + people: + person1: + age: 72 + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + person2: + age: 45 + # Utah minimum wage (the federal $7.25, Utah Code 34-40-103) full time: + # 7.25 * 2,080 = 15,080. + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + # One-third reduction: 994 * 2 / 3 * 12 = 7,952. + ssi: [7_952, 0] + # Single person in the household of another: 3.91 * 12 = 46.92. + ut_dws_ssp: [46.92, 0] + ut_dhhs_ssp: [0, 0] + ut_ssp: [46.92, 0] + household_state_benefits: 46.92 + # Utah exempts the DWS supplement from SNAP income (DWS Manual 425-11): + # SSI only. + snap_unearned_income: 7_952 + # SSI 7,952 + DWS supplement 46.92 = 7,998.92. + hud_unearned_income: [7_998.92, 0] + +- name: Case 5, 2027 couple in the household of another keeps the 2026 DWS amount. + period: 2027-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 72 + is_tax_unit_head: true + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + person2: + age: 70 + is_tax_unit_spouse: true + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + person3: + age: 45 + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1, person2] + tax_unit2: + members: [person3] + marital_units: + marital_unit1: + members: [person1, person2] + marital_unit2: + members: [person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: UT + output: + # 2027 couple rate 1,544 / 2 * 2 / 3 = 514.67 each. + ssi: [514.67, 514.67, 0] + # DWS publishes no indexing rule, so the 2026 $12.19 carries forward: + # 12.19 / 2 = 6.095 each. + ut_dws_ssp: [6.095, 6.095, 0] + ut_ssp: [6.095, 6.095, 0] + # SSI 514.67 * 2 = 1,029.33; the DWS supplement is exempt. + snap_unearned_income: 1_029.33 + +- name: Case 6, over-income DWS recipient counts Social Security but not the supplement for SNAP. + period: 2026 + input: + people: + person1: + age: 72 + # SSA 2026 COLA fact sheet: average retired-worker benefit $2,071 a + # month, 2,071 * 12 = 24,852. + social_security_retirement: 24_852 + person2: + age: 45 + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + # Countable income 2,071 - 20 = 2,051 > $994: no SSI. + ssi: [0, 0] + # Meets SSI criteria other than income and lives with others: + # 3.91 * 12 = 46.92. + ut_ssp: [46.92, 0] + household_state_benefits: 46.92 + # Social Security 24,852; the DWS supplement is exempt. + snap_unearned_income: 24_852 + # Social Security 24,852 + DWS supplement 46.92 = 24,898.92. + hud_unearned_income: [24_898.92, 0] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ut/dhhs/ssp/ut_ssp.yaml b/policyengine_us/tests/policy/baseline/gov/states/ut/dhhs/ssp/ut_ssp.yaml new file mode 100644 index 00000000000..1a9f7e0d1dd --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ut/dhhs/ssp/ut_ssp.yaml @@ -0,0 +1,296 @@ +# Utah Medicaid Manual 661: $15 when institutional SSI is $1 through $30. +- name: Case 1, Medicaid institutional recipient receives the fixed supplement. + period: 2026-01 + input: + state_code: UT + age: 65 + medicaid_enrolled: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + output: + ssi: 30 + ut_ssp: 15 + +- name: Case 2, one dollar institutional SSI still qualifies for the full payment. + period: 2026-01 + input: + state_code: UT + age: 65 + medicaid_enrolled: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + ssi: 1 + output: + # $1 SSI >= $1 minimum federal SSI payment, so the $15 payment applies. + ut_dhhs_ssp_eligible: true + ut_ssp: 15 + +- name: Case 3, institutional SSI below one dollar does not qualify. + period: 2026-01 + input: + state_code: UT + age: 65 + medicaid_enrolled: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + ssi: 0.50 + output: + # $0.50 SSI < $1 minimum federal SSI payment and no reported receipt. + ut_dhhs_ssp_eligible: false + ut_ssp: 0 + +- name: Case 4, Medicaid approval is required. + period: 2026-01 + input: + state_code: UT + age: 65 + medicaid_enrolled: false + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + output: + ut_ssp: 0 + +- name: Case 5, independent living does not receive an institutional supplement. + period: 2026-01 + input: + state_code: UT + age: 65 + medicaid_enrolled: true + output: + ssi: 994 + ut_ssp: 0 + +- name: Case 6, Utah supplement is not payable outside Utah. + period: 2026-01 + input: + state_code: WY + age: 65 + medicaid_enrolled: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + output: + ut_ssp: 0 + +- name: Case 7, medical care without majority Medicaid funding does not qualify. + period: 2026-01 + input: + state_code: UT + age: 65 + medicaid_enrolled: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: false + output: + ut_ssp: 0 + +- name: Case 8, declining SSI leaves no qualifying receipt. + period: 2026-01 + input: + state_code: UT + age: 65 + medicaid_enrolled: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + takes_up_ssi_if_eligible: false + output: + ut_ssp: 0 + +- name: Case 9, negative earnings cannot increase the fixed supplement. + period: 2026-01 + input: + state_code: UT + age: 65 + medicaid_enrolled: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + self_employment_income: -12_000 + output: + ut_ssp: 15 + +- name: Case 10, year total includes twelve monthly payments. + period: 2026 + input: + state_code: UT + age: 65 + medicaid_enrolled: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + output: + ut_ssp: 180 + +- name: Case 11, reported SSI receipt qualifies without a computed SSI payment. + period: 2026-01 + input: + state_code: UT + age: 50 + receives_ssi: true + medicaid_enrolled: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + output: + # Age 50 with no disability inputs is not aged, blind or disabled: SSI $0. + ssi: 0 + # Reported SSI receipt meets the SSI condition: $15. + ut_ssp: 15 + +- name: Case 12, couple both in a Medicaid facility each receive the supplement. + period: 2026-01 + input: + people: + person1: + age: 72 + is_tax_unit_head: true + medicaid_enrolled: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + person2: + age: 70 + is_tax_unit_spouse: true + medicaid_enrolled: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + marital_units: + marital_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + # Both in a facility: couple computation, $60 / 2 = $30 each with + # no income (20 CFR 416.414(b)(2)). + ssi: [30, 30] + # $30 SSI >= $1 minimum for each spouse: $15 each. + ut_ssp: [15, 15] + +- name: Case 13, couple with one spouse in a Medicaid facility pays only that spouse. + period: 2026-01 + input: + people: + person1: + age: 72 + is_tax_unit_head: true + medicaid_enrolled: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + person2: + age: 70 + is_tax_unit_spouse: true + medicaid_enrolled: true + marital_units: + marital_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + # One spouse in a facility: separate computation (20 CFR 416.414(b)(3)). + # person1 gets the $30 facility rate; person2 at home gets the $994 + # individual FBR. Both are eligible, so no deeming; no income. + ssi: [30, 994] + # Only person1 lives in a medical treatment facility: [$15, $0]. + ut_ssp: [15, 0] + +- name: Case 14, Medicaid facility spouse receives the DHHS payment and the spouse at home with a son receives the DWS supplement. + period: 2026-01 + input: + people: + person1: + age: 80 + is_tax_unit_head: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + person2: + age: 78 + is_tax_unit_spouse: true + person3: + age: 50 + # Utah minimum wage (the federal $7.25, Utah Code 34-40-103) full time: + # 7.25 * 2,080 = 15,080. + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1, person2] + tax_unit2: + members: [person3] + marital_units: + marital_unit1: + members: [person1, person2] + marital_unit2: + members: [person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: UT + output: + # One spouse in a facility: separate computation, $30 and $994. + ssi: [30, 994, 0] + # person1: $30 SSI >= $1 in a Medicaid facility: $15. + ut_dhhs_ssp: [15, 0, 0] + # person2 is a single individual living with person3: $3.91. + ut_dws_ssp: [0, 3.91, 0] + ut_ssp: [15, 3.91, 0] + +- name: Case 15, Utah recipient is paid beside a Massachusetts recipient in the same simulation. + period: 2026-01 + input: + people: + person1: + age: 72 + person2: + age: 45 + employment_income: 15_080 + person3: + age: 72 + person4: + age: 45 + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + tax_unit3: + members: [person3] + tax_unit4: + members: [person4] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + marital_unit3: + members: [person3] + marital_unit4: + members: [person4] + families: + family1: + members: [person1, person2] + family2: + members: [person3, person4] + spm_units: + spm_unit1: + members: [person1, person2] + spm_unit2: + members: [person3, person4] + households: + household1: + members: [person1, person2] + state_code: UT + household2: + members: [person3, person4] + state_code: MA + output: + ssi: [994, 0, 994, 0] + # Only the Utah recipient, who lives with others, receives $3.91. + ut_dws_ssp_eligible: [true, false, false, false] + ut_ssp: [3.91, 0, 0, 0] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ut/dws/ssp/ut_dws_ssp.yaml b/policyengine_us/tests/policy/baseline/gov/states/ut/dws/ssp/ut_dws_ssp.yaml new file mode 100644 index 00000000000..06cb2964b8d --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ut/dws/ssp/ut_dws_ssp.yaml @@ -0,0 +1,300 @@ +# Utah DWS Eligibility Manual 205-10 (effective January 1, 2026): $3.91 a +# month for a single person, $12.19 for a couple in the household of another +# and $5.75 for a couple living alone or with others in their own household. +# Each spouse receives half of a couple amount. +- name: Case 1, single SSI recipient living with others in their own household. + period: 2026-01 + input: + people: + person1: + age: 72 + person2: + age: 45 + # Utah minimum wage (the federal $7.25, Utah Code 34-40-103) full time: + # 7.25 * 2,080 = 15,080. + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + ssi: [994, 0] + # Single person who does not live alone: $3.91. + ut_dws_ssp: [3.91, 0] + +- name: Case 2, single SSI recipient in the household of another. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 72 + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + person2: + age: 45 + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + # One-third reduction: 994 * 2 / 3 = 662.67. + ssi: [662.67, 0] + # A single person receives $3.91 in any arrangement other than alone. + ut_dws_ssp: [3.91, 0] + +- name: Case 3, SSI couple living alone splits the own-household couple amount. + period: 2026-01 + input: + people: + person1: + age: 72 + is_tax_unit_head: true + person2: + age: 70 + is_tax_unit_spouse: true + marital_units: + marital_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + # Couple rate $1,491 / 2 = $745.50 each with no income. + ssi: [745.5, 745.5] + # $5.75 / 2 = $2.875 each; the couple receives $5.75. + ut_dws_ssp: [2.875, 2.875] + +- name: Case 4, SSI couple in the household of another splits the higher couple amount. + period: 2026-01 + input: + people: + person1: + age: 72 + is_tax_unit_head: true + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + person2: + age: 70 + is_tax_unit_spouse: true + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + person3: + age: 45 + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1, person2] + tax_unit2: + members: [person3] + marital_units: + marital_unit1: + members: [person1, person2] + marital_unit2: + members: [person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: UT + output: + # One-third reduction: 1,491 / 2 * 2 / 3 = 497 each. + ssi: [497, 497, 0] + # $12.19 / 2 = $6.095 each; the couple receives $12.19. + ut_dws_ssp: [6.095, 6.095, 0] + +- name: Case 5, SSI couple living with a grandson in their own household. + period: 2026-01 + input: + people: + person1: + age: 72 + is_tax_unit_head: true + person2: + age: 70 + is_tax_unit_spouse: true + person3: + age: 22 + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1, person2] + tax_unit2: + members: [person3] + marital_units: + marital_unit1: + members: [person1, person2] + marital_unit2: + members: [person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: UT + output: + ssi: [745.5, 745.5, 0] + # Couple with others in their own household: $5.75 / 2 = $2.875 each. + ut_dws_ssp: [2.875, 2.875, 0] + +- name: Case 6, SSI recipient whose working spouse is not aged, blind or disabled receives the single amount. + period: 2026-01 + input: + people: + person1: + age: 72 + is_tax_unit_head: true + person2: + age: 60 + is_tax_unit_spouse: true + employment_income: 15_080 + marital_units: + marital_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + # person2 is not aged, blind or disabled, so person1 is an individual + # recipient who lives with a spouse: $3.91; person2 receives nothing. + ut_dws_ssp_eligible: [true, false] + ut_dws_ssp: [3.91, 0] + +- name: Case 7, aged couple over the SSI income limit splits the own-household couple amount. + period: 2026-01 + input: + people: + person1: + age: 72 + is_tax_unit_head: true + # SSA 2026 COLA fact sheet: average aged couple benefit $3,208 a + # month, with person1 at the $2,071 average retired-worker benefit: + # 2,071 * 12 = 24,852 and (3,208 - 2,071) * 12 = 13,644. + social_security_retirement: 24_852 + person2: + age: 70 + is_tax_unit_spouse: true + social_security_retirement: 13_644 + marital_units: + marital_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + # Countable income 3,208 - 20 = 3,188 > $1,491 couple rate: no SSI. + ssi: [0, 0] + # Both spouses meet SSI criteria other than income: $5.75 / 2 each. + ut_dws_ssp: [2.875, 2.875] + +- name: Case 8, year total for a single recipient in the household of another. + period: 2026 + input: + people: + person1: + age: 72 + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + person2: + age: 45 + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + # $3.91 * 12 = $46.92, paid in four quarterly installments of $11.73. + ut_dws_ssp: [46.92, 0] + +- name: Case 9, aged couple with one spouse in a medical facility where Medicaid pays half or less of the cost. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 80 + is_tax_unit_head: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: false + person2: + age: 78 + is_tax_unit_spouse: true + marital_units: + marital_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + # Medicaid does not pay most of person1's care, so both stay in their own + # household for SSI and receive the couple rate: 1,491 / 2 = 745.50. + ssi: [745.5, 745.5] + # 205-10 does not exclude this facility. Person1 has a household member + # outside a facility, so does not live alone; person2's only household + # member is in the facility, so person2 lives alone. Person1 receives the + # single person amount, since person2 does not qualify. + ut_dws_ssp_eligible: [true, false] + ut_dws_ssp: [3.91, 0] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ut/dws/ssp/ut_dws_ssp_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ut/dws/ssp/ut_dws_ssp_eligible.yaml new file mode 100644 index 00000000000..938958487c4 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ut/dws/ssp/ut_dws_ssp_eligible.yaml @@ -0,0 +1,339 @@ +# Utah DWS Eligibility Manual 205-10 (effective January 1, 2026): SSI +# recipients and people who meet SSI criteria other than income qualify, +# except single individuals who live alone, Medicaid institution residents, +# inmates and people denied SSI for reasons other than income. +- name: Case 1, SSI recipient living with a working daughter is eligible. + period: 2026-01 + input: + people: + person1: + age: 72 + person2: + age: 45 + # Utah minimum wage (the federal $7.25, Utah Code 34-40-103) full time: + # 7.25 * 2,080 = 15,080. + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + # person1: no income, own household: $994 SSI. + ssi: [994, 0] + # person1 receives SSI and lives with others; person2 is not aged, + # blind or disabled and receives no SSI. + ut_dws_ssp_eligible: [true, false] + +- name: Case 2, SSI recipient who lives alone is not eligible. + period: 2026-01 + input: + state_code: UT + age: 72 + output: + ssi: 994 + # "Single individuals who live alone" are not eligible. + ut_dws_ssp_eligible: false + +- name: Case 3, aged person over the SSI income limit living with a daughter is eligible. + period: 2026-01 + input: + people: + person1: + age: 72 + # SSA 2026 COLA fact sheet: average retired-worker benefit $2,071 a + # month, 2,071 * 12 = 24,852. + social_security_retirement: 24_852 + person2: + age: 45 + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + # Countable income 2,071 - 20 = 2,051 > $994: no SSI. + ssi: [0, 0] + # person1 meets SSI criteria other than income. + ut_dws_ssp_eligible: [true, false] + +- name: Case 4, person who declines SSI with qualifying income is not eligible. + period: 2026-01 + input: + people: + person1: + age: 72 + takes_up_ssi_if_eligible: false + person2: + age: 45 + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + ssi: [0, 0] + # Income would qualify for SSI, which the person must apply for (DWS + # Eligibility Manual 205), so the over-income path does not apply. + ut_dws_ssp_eligible: [false, false] + +- name: Case 5, person denied SSI for excess resources is not eligible. + period: 2026-01 + input: + people: + person1: + age: 72 + # Savings above the $2,000 SSI resource limit. + bank_account_assets: 15_000 + person2: + age: 45 + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + ssi: [0, 0] + # "Individuals who are denied or closed SSI for reasons other than + # exceeding the income" are not eligible. + ut_dws_ssp_eligible: [false, false] + +- name: Case 6, reported SSI receipt qualifies without a computed SSI payment. + period: 2026-01 + input: + people: + person1: + age: 50 + receives_ssi: true + person2: + age: 45 + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + # Age 50 with no disability inputs: no computed SSI. + ssi: [0, 0] + ut_dws_ssp_eligible: [true, false] + +- name: Case 7, incarcerated SSI recipient is not eligible. + period: 2026-01 + input: + people: + person1: + age: 72 + is_incarcerated: true + person2: + age: 45 + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + # Federal SSI does not model the inmate bar, so SSI is still paid. + ssi: [994, 0] + # "Individuals who are incarcerated" are not eligible. + ut_dws_ssp_eligible: [false, false] + +- name: Case 8, Medicaid institution resident is not eligible. + period: 2026-01 + input: + people: + person1: + age: 80 + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + person2: + age: 50 + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + # $30 federal medical treatment facility rate. + ssi: [30, 0] + # Medicaid pays more than half the cost of care: not eligible. + ut_dws_ssp_eligible: [false, false] + +- name: Case 9, spouse at home alone while the other spouse is in a Medicaid facility is not eligible. + period: 2026-01 + input: + people: + person1: + age: 80 + is_tax_unit_head: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + person2: + age: 78 + is_tax_unit_spouse: true + marital_units: + marital_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + # One spouse in a facility: separate computation, $30 and $994. + ssi: [30, 994] + # person1 lives in a Medicaid institution. person2's only household + # member lives in the facility, so person2 lives alone as a single + # individual. + ut_dws_ssp_eligible: [false, false] + +- name: Case 10, supplement is not payable outside Utah. + period: 2026-01 + input: + people: + person1: + age: 72 + person2: + age: 45 + employment_income: 15_080 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WY + output: + ssi: [994, 0] + ut_dws_ssp_eligible: [false, false] + +- name: Case 11, spouse at home alone while the other spouse is incarcerated is not eligible. + period: 2026-01 + input: + people: + person1: + age: 72 + is_tax_unit_head: true + is_incarcerated: true + person2: + age: 70 + is_tax_unit_spouse: true + marital_units: + marital_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: UT + output: + # Federal SSI does not model the inmate bar: $1,491 couple rate, half + # each. + ssi: [745.5, 745.5] + # person1 is incarcerated. As with a spouse in a facility (Case 9), + # person2's only household member is absent, so person2 lives alone as a + # single individual. + ut_dws_ssp_eligible: [false, false] diff --git a/policyengine_us/variables/gov/hhs/medicaid/medicaid_enrolled_for_ssi_state_supplement.py b/policyengine_us/variables/gov/hhs/medicaid/medicaid_enrolled_for_ssi_state_supplement.py index d02f1625c4e..aadcfc81799 100644 --- a/policyengine_us/variables/gov/hhs/medicaid/medicaid_enrolled_for_ssi_state_supplement.py +++ b/policyengine_us/variables/gov/hhs/medicaid/medicaid_enrolled_for_ssi_state_supplement.py @@ -14,7 +14,7 @@ class medicaid_enrolled_for_ssi_state_supplement(Variable): ) documentation = ( "Medicaid enrollment condition for SSI/aged/blind/disabled state " - "supplement candidates only (Indiana SAPN/RCAP and Kansas SSPP). " + "supplement candidates only (state supplements that require Medicaid enrollment). " "SSI recipients and aged, blind, or disabled RCAP candidates do not " "need the SNAP/TANF community-engagement exclusion. Other consumers " "must use medicaid_enrolled, which retains that exclusion." diff --git a/policyengine_us/variables/gov/states/ut/dhhs/ssp/ut_dhhs_ssp.py b/policyengine_us/variables/gov/states/ut/dhhs/ssp/ut_dhhs_ssp.py new file mode 100644 index 00000000000..8aa2d448563 --- /dev/null +++ b/policyengine_us/variables/gov/states/ut/dhhs/ssp/ut_dhhs_ssp.py @@ -0,0 +1,20 @@ +from policyengine_us.model_api import * + + +class ut_dhhs_ssp(Variable): + value_type = float + entity = Person + label = "Utah DHHS State Supplemental Payment" + definition_period = MONTH + unit = USD + defined_for = "ut_dhhs_ssp_eligible" + # Utah administers and issues this payment itself, not through SSA + # (Manual 661, "The Payment Process"). + # NOTE: Not in the HUD income list. Recipients live in a Medicaid-funded medical + # institution (Manual 661), not HUD-assisted housing, and HUD income would make + # the Medicaid condition circular via rent tax deductions. + reference = ( + "https://www.law.cornell.edu/regulations/utah/Utah-Admin-Code-R414-306-6", + "https://oepmanuals.dhhs.utah.gov/600_Program_Benefits/661_Fifteen_Dollar_State_Supplemental_Payment_%28SSP%29.htm", + ) + adds = ["gov.states.ut.dhhs.ssp.amount"] diff --git a/policyengine_us/variables/gov/states/ut/dhhs/ssp/ut_dhhs_ssp_eligible.py b/policyengine_us/variables/gov/states/ut/dhhs/ssp/ut_dhhs_ssp_eligible.py new file mode 100644 index 00000000000..96abbd92d01 --- /dev/null +++ b/policyengine_us/variables/gov/states/ut/dhhs/ssp/ut_dhhs_ssp_eligible.py @@ -0,0 +1,44 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.ssa.ssi.eligibility.status.ssi_federal_living_arrangement import ( + SSIFederalLivingArrangement, +) + + +class ut_dhhs_ssp_eligible(Variable): + value_type = bool + entity = Person + label = "Eligible for Utah DHHS State Supplemental Payment" + definition_period = MONTH + defined_for = StateCode.UT + reference = ( + "https://www.law.cornell.edu/regulations/utah/Utah-Admin-Code-R414-306-6", + "https://oepmanuals.dhhs.utah.gov/600_Program_Benefits/661_Fifteen_Dollar_State_Supplemental_Payment_%28SSP%29.htm", + ) + documentation = """ + Set ssi_lives_in_medical_treatment_facility and + ssi_medicaid_pays_majority_of_care to true while the person lives in a + medical treatment facility where Medicaid pays more than half the cost of + care, which limits SSI to the federal facility rate. Utah Medicaid + enrollment is computed from Medicaid eligibility and take-up. Set + receives_ssi when the person reports an SSI payment that the model does + not compute. + """ + # NOTE: the microdata do not populate ssi_lives_in_medical_treatment_facility + # or ssi_medicaid_pays_majority_of_care, so this payment reaches household + # calculations only. + + def formula(person, period, parameters): + p = parameters(period).gov.states.ut.dhhs.ssp + # NOTE: R414-306-6(2) requires that the resident "receives a + # Supplemental Security Income (SSI) payment"; Manual 661 sets the + # floor ("The SSI payment must be at least $1.00"), which the model + # applies through minimum_ssi_payment. + receives_ssi = (person("ssi", period) >= p.minimum_ssi_payment) | person( + "receives_ssi", period + ) + arrangement = person("ssi_federal_living_arrangement", period) + medical = arrangement == SSIFederalLivingArrangement.MEDICAL_TREATMENT_FACILITY + medicaid = person( + "medicaid_enrolled_for_ssi_state_supplement", period.this_year + ) + return receives_ssi & medical & medicaid diff --git a/policyengine_us/variables/gov/states/ut/dhhs/ssp/ut_ssp.py b/policyengine_us/variables/gov/states/ut/dhhs/ssp/ut_ssp.py new file mode 100644 index 00000000000..edcd8a84980 --- /dev/null +++ b/policyengine_us/variables/gov/states/ut/dhhs/ssp/ut_ssp.py @@ -0,0 +1,23 @@ +from policyengine_us.model_api import * + + +class ut_ssp(Variable): + value_type = float + entity = Person + label = "Utah State Supplemental Payment" + definition_period = MONTH + unit = USD + defined_for = StateCode.UT + # The Department of Workforce Services supplement excludes residents of + # institutions where Medicaid pays more than half the cost of care + # (DWS Eligibility Manual 205-10), who may receive the DHHS payment + # instead. Both payments key on the federal MEDICAL_TREATMENT_FACILITY + # arrangement, so no one receives both. + # NOTE: Not in the HUD income list, because ut_dhhs_ssp depends on Medicaid + # enrollment. The HUD list carries ut_dws_ssp directly. + reference = ( + "https://www.law.cornell.edu/regulations/utah/Utah-Admin-Code-R414-306-6", + "https://oepmanuals.dhhs.utah.gov/600_Program_Benefits/661_Fifteen_Dollar_State_Supplemental_Payment_%28SSP%29.htm", + "https://jobs.utah.gov/infosource/eligibilitymanual/200_Program_Eligibility_Requirements/205-10_State_Supplemental_Payments_to_SSI_Recipients_-_General_Information.htm", + ) + adds = ["ut_dhhs_ssp", "ut_dws_ssp"] diff --git a/policyengine_us/variables/gov/states/ut/dws/ssp/ut_dws_ssp.py b/policyengine_us/variables/gov/states/ut/dws/ssp/ut_dws_ssp.py new file mode 100644 index 00000000000..2f4d5ad757a --- /dev/null +++ b/policyengine_us/variables/gov/states/ut/dws/ssp/ut_dws_ssp.py @@ -0,0 +1,52 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.ssa.ssi.eligibility.status.ssi_federal_living_arrangement import ( + SSIFederalLivingArrangement, +) + + +class ut_dws_ssp(Variable): + value_type = float + entity = Person + label = "Utah DWS State Supplemental Payment" + definition_period = MONTH + unit = USD + defined_for = "ut_dws_ssp_eligible" + # The Department of Workforce Services pays this supplement "on a + # quarterly basis following the end of the quarter" (205-10). The model + # reports the monthly amount in the month it accrues. + reference = ( + "https://jobs.utah.gov/infosource/eligibilitymanual/200_Program_Eligibility_Requirements/205-10_State_Supplemental_Payments_to_SSI_Recipients_-_General_Information.htm", + # Statutory basis: Appropriation Act for the Department of Workforce + # Services. + "https://www.ssa.gov/policy/docs/progdesc/ssi_st_asst/2011/ut.html", + ) + documentation = """ + Spouses are the members of a marital unit. Set + ssi_lives_in_another_persons_household, + ssi_receives_shelter_from_others_in_household and ssi_others_pay_all_meals + for both spouses to place a couple in the household of another. + """ + + def formula(person, period, parameters): + p = parameters(period).gov.states.ut.dws.ssp.amount + # The couple amounts apply when both spouses qualify, and each spouse + # receives half. A person whose spouse does not qualify receives the + # single person amount. + eligible = person("ut_dws_ssp_eligible", period) + couple = person.marital_unit.sum(eligible) == 2 + # 205-10 pays couples "who live in the household of another" and + # couples "who live alone or with others in their own household". SSA + # paid the same rows by federal living arrangement codes B and A + # (205-10, 2004-2013 edition; SSA's January 2011 table). + arrangement = person("ssi_federal_living_arrangement", period) + another_household = ( + arrangement == SSIFederalLivingArrangement.ANOTHER_PERSONS_HOUSEHOLD + ) + # NOTE: Each spouse's half follows that spouse's own living + # arrangement, as SSI's couple rate does. Household-of-another inputs + # set for only one spouse give a total that matches neither published + # couple amount. + couple_amount = where( + another_household, p.couple.another_household, p.couple.own_household + ) + return where(couple, couple_amount / 2, p.individual) diff --git a/policyengine_us/variables/gov/states/ut/dws/ssp/ut_dws_ssp_eligible.py b/policyengine_us/variables/gov/states/ut/dws/ssp/ut_dws_ssp_eligible.py new file mode 100644 index 00000000000..3db11ca4cab --- /dev/null +++ b/policyengine_us/variables/gov/states/ut/dws/ssp/ut_dws_ssp_eligible.py @@ -0,0 +1,71 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.ssa.ssi.eligibility.status.ssi_federal_living_arrangement import ( + SSIFederalLivingArrangement, +) + + +class ut_dws_ssp_eligible(Variable): + value_type = bool + entity = Person + label = "Eligible for Utah DWS State Supplemental Payment" + definition_period = MONTH + defined_for = StateCode.UT + reference = ( + "https://jobs.utah.gov/infosource/eligibilitymanual/200_Program_Eligibility_Requirements/205-10_State_Supplemental_Payments_to_SSI_Recipients_-_General_Information.htm", + "https://jobs.utah.gov/infosource/eligibilitymanual/200_Program_Eligibility_Requirements/205_Financial_Assistance_General_Information.htm", + "https://jobs.utah.gov/infosource/eligibilitymanual/Obsolete_Policy/Obsolete_200_Program_Eligibility_Requirements/O205/O205-10_%284_1_04_to_12_31_13%29_State_Supp_Payments_SSI_Recipients_Gen_Info.htm", + "https://www.ssa.gov/policy/docs/progdesc/ssi_st_asst/2011/ut.html", + ) + documentation = """ + Living alone is read from household membership: a person with no other + household member who is outside a medical treatment facility and not + incarcerated lives alone. A resident of a medical facility where Medicaid + pays half or less of the cost is judged by household membership like + anyone else. Set receives_ssi when the person reports an SSI payment that + the model does not compute. + """ + + def formula(person, period, parameters): + # 205-10: "Customers who are receiving Supplemental Security Income + # (SSI) or who meet SSI criteria other than income are eligible". + receives_ssi = (person("ssi", period) > 0) | person("receives_ssi", period) + # is_ssi_eligible applies SSI's aged, blind or disabled, resource and + # immigration criteria, so an SSI denial on other grounds also denies + # the supplement ("Individuals who are denied or closed SSI for reasons + # other than exceeding the income"). Applicants for any financial + # assistance program must apply for other benefits they may be entitled + # to (205, "Application for Other Possible Benefits"), so a person whose + # income would qualify for SSI must take it up. + # NOTE: The over-income path has no take-up, so in microsimulation it + # reaches every eligible non-recipient who does not live alone, though + # 205-10 lets DWS reduce the amounts "to stay within budget". + over_income_for_ssi = person("is_ssi_eligible", period) & ( + person("uncapped_ssi", period) <= 0 + ) + # Not eligible: "Individuals who live in a public or private + # institution where Medicaid pays more than 50 percent of their cost of + # care" and "Individuals who are incarcerated". + arrangement = person("ssi_federal_living_arrangement", period) + medicaid_institution = ( + arrangement == SSIFederalLivingArrangement.MEDICAL_TREATMENT_FACILITY + ) + incarcerated = person("is_incarcerated", period) + # Not eligible: "Single individuals who live alone." Members living in + # a medical treatment facility or incarcerated do not share the home. + # The count leaves out the person themselves, and a spouse at home + # means the person does not live alone. + # NOTE: The 2004-2013 edition of 205-10, when SSA paid the supplement, + # paid "$3.13 for a single person living with others", and SSA's + # January 2011 table paid individuals only in the household of + # another (federal code B). The current edition pays "a single person" + # and excludes only "Single individuals who live alone", so the model + # also pays a single person living with others in their own household. + facility = person("ssi_lives_in_medical_treatment_facility", period) + housemate = ~facility & ~incarcerated + lives_alone = (person.household.sum(housemate) - housemate) == 0 + return ( + (receives_ssi | over_income_for_ssi) + & ~medicaid_institution + & ~incarcerated + & ~lives_alone + ) 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 4613c4da26a..203cdac1db3 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 @@ -30,6 +30,7 @@ def formula(spm_unit, period, parameters): "ok_ssp", # Oklahoma benefits "ny_ssp", # New York benefits "ri_ssp", # Rhode Island benefits + "ut_ssp", # Utah benefits "sd_ssp", # South Dakota benefits "va_ag", # Virginia benefits "ks_sspp", # Kansas benefits