diff --git a/changelog.d/ne-ssp.added.md b/changelog.d/ne-ssp.added.md new file mode 100644 index 00000000000..b5991b36cc8 --- /dev/null +++ b/changelog.d/ne-ssp.added.md @@ -0,0 +1 @@ +Added Nebraska Aid to the Aged, Blind, or Disabled - Payment Maintenance (AABD-PMT) program, the state's SSI supplement, including standard-of-need and shelter allowance parameters, eligibility rules, and living arrangement logic. diff --git a/policyengine_us/parameters/gov/household/household_state_benefits.yaml b/policyengine_us/parameters/gov/household/household_state_benefits.yaml index b1c43628471..2bf546a0e07 100644 --- a/policyengine_us/parameters/gov/household/household_state_benefits.yaml +++ b/policyengine_us/parameters/gov/household/household_state_benefits.yaml @@ -47,6 +47,7 @@ values: # Kentucky benefits - ky_ssp # Nebraska benefits + - ne_aabd - ne_child_care_subsidies # South Carolina benefits - sc_child_care_subsidies @@ -122,6 +123,7 @@ values: # Kentucky benefits - ky_ssp # Nebraska benefits + - ne_aabd - ne_child_care_subsidies # New Mexico benefits - nm_ssi_state_supplement diff --git a/policyengine_us/parameters/gov/states/ne/dhhs/aabd/alternate_living_standard.yaml b/policyengine_us/parameters/gov/states/ne/dhhs/aabd/alternate_living_standard.yaml new file mode 100644 index 00000000000..f37b6b3e6fc --- /dev/null +++ b/policyengine_us/parameters/gov/states/ne/dhhs/aabd/alternate_living_standard.yaml @@ -0,0 +1,45 @@ +description: Nebraska provides this amount as the monthly standard of need for individuals in alternate living arrangements under the Aid to the Aged, Blind, or Disabled program. + +LONG_TERM_CARE: + 2015-01-01: 50 + 2017-01-01: 60 +BOARD_AND_ROOM: + 2015-01-01: 737 + 2017-01-01: 739 + 2021-01-01: 798 +ADULT_FAMILY_HOME: + 2015-01-01: 865 + 2017-01-01: 867 + 2021-01-01: 926 +ASSISTED_LIVING_FACILITY: + 2015-01-01: 1_175 + 2017-01-01: 1_177 + 2021-01-01: 1_236 +ASSISTED_LIVING_WAIVER: + 2015-01-01: 733 + 2017-01-01: 735 + 2021-01-01: 794 +GROUP_HOME_CHILDREN: + 2015-01-01: 801 + 2017-01-01: 803 + 2021-01-01: 862 +INDEPENDENT: + 2015-01-01: 0 +NONE: + 2015-01-01: 0 + +metadata: + unit: currency-USD + period: month + label: Nebraska AABD alternate living standard + breakdown: + - ne_aabd_living_arrangement + reference: + - title: 469 NAC 469-000-211 AABD or SDP Standard of Need (effective 2021-01-01) + href: https://dhhs.ne.gov/Documents/469-000-211.pdf + - title: 469 NAC 469-000-211 AABD or SDP Standard of Need (effective 2017-01-01, Manual Letter #01-2017) + href: https://web.archive.org/web/20161221055507/https://dhhs.ne.gov/Documents/469-000-211.pdf + - title: 469 NAC 469-000-211 AABD or SDP Standard of Need (effective 2015-01-01, Manual Letter #74-2014) + href: https://web.archive.org/web/20150907223322/https://dhhs.ne.gov/Documents/469-000-211.pdf + - title: SSA State Assistance Programs for SSI Recipients, January 2011 - Nebraska, Table 1 + href: https://www.ssa.gov/policy/docs/progdesc/ssi_st_asst/2011/ne.pdf#page=2 diff --git a/policyengine_us/parameters/gov/states/ne/dhhs/aabd/shelter_allowance/multiple.yaml b/policyengine_us/parameters/gov/states/ne/dhhs/aabd/shelter_allowance/multiple.yaml new file mode 100644 index 00000000000..aa4100d6048 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ne/dhhs/aabd/shelter_allowance/multiple.yaml @@ -0,0 +1,14 @@ +description: Nebraska provides this amount as the monthly maximum shelter allowance for multi-person households living independently under the Aid to the Aged, Blind, or Disabled program. + +values: + 2015-01-01: 349 + +metadata: + unit: currency-USD + period: month + label: Nebraska AABD multiple shelter allowance + reference: + - title: 469 NAC 469-000-211 AABD or SDP Standard of Need (effective 2021-01-01) + href: https://dhhs.ne.gov/Documents/469-000-211.pdf + - title: 469 NAC 469-000-211 AABD or SDP Standard of Need (effective 2015-01-01, Manual Letter #74-2014) + href: https://web.archive.org/web/20150907223322/https://dhhs.ne.gov/Documents/469-000-211.pdf diff --git a/policyengine_us/parameters/gov/states/ne/dhhs/aabd/shelter_allowance/single.yaml b/policyengine_us/parameters/gov/states/ne/dhhs/aabd/shelter_allowance/single.yaml new file mode 100644 index 00000000000..c667b38c67d --- /dev/null +++ b/policyengine_us/parameters/gov/states/ne/dhhs/aabd/shelter_allowance/single.yaml @@ -0,0 +1,14 @@ +description: Nebraska provides this amount as the monthly maximum shelter allowance for one-person households living independently under the Aid to the Aged, Blind, or Disabled program. + +values: + 2015-01-01: 281 + +metadata: + unit: currency-USD + period: month + label: Nebraska AABD single shelter allowance + reference: + - title: 469 NAC 469-000-211 AABD or SDP Standard of Need (effective 2021-01-01) + href: https://dhhs.ne.gov/Documents/469-000-211.pdf + - title: 469 NAC 469-000-211 AABD or SDP Standard of Need (effective 2015-01-01, Manual Letter #74-2014) + href: https://web.archive.org/web/20150907223322/https://dhhs.ne.gov/Documents/469-000-211.pdf diff --git a/policyengine_us/parameters/gov/states/ne/dhhs/aabd/standard_of_need/independent.yaml b/policyengine_us/parameters/gov/states/ne/dhhs/aabd/standard_of_need/independent.yaml new file mode 100644 index 00000000000..16f611b38ce --- /dev/null +++ b/policyengine_us/parameters/gov/states/ne/dhhs/aabd/standard_of_need/independent.yaml @@ -0,0 +1,60 @@ +description: Nebraska provides this amount as the monthly standard of need for households living independently, by household size, under the Aid to the Aged, Blind, or Disabled program. + +1: + 2015-01-01: 491 + 2017-01-01: 505 + 2021-01-01: 564 +2: + 2015-01-01: 778 + 2017-01-01: 799 + 2021-01-01: 887 +3: + 2015-01-01: 964 + 2017-01-01: 989 + 2021-01-01: 1_109 +4: + 2015-01-01: 1_155 + 2017-01-01: 1_186 + 2021-01-01: 1_336 +5: + 2015-01-01: 1_346 + 2017-01-01: 1_383 + 2021-01-01: 1_563 +6: + 2015-01-01: 1_537 + 2017-01-01: 1_580 + 2021-01-01: 1_790 +7: + 2015-01-01: 1_728 + 2017-01-01: 1_777 + 2021-01-01: 2_017 +8: + 2015-01-01: 1_919 + 2017-01-01: 1_974 + 2021-01-01: 2_244 +9: + 2015-01-01: 2_110 + 2017-01-01: 2_171 + 2021-01-01: 2_471 +10: + 2015-01-01: 2_301 + 2017-01-01: 2_368 + 2021-01-01: 2_698 + +metadata: + unit: currency-USD + period: month + label: Nebraska AABD independent standard of need + breakdown: + - range(1, 11) + breakdown_label: + - Household size + reference: + - title: 469 NAC 469-000-211 AABD or SDP Standard of Need (effective 2021-01-01) + href: https://dhhs.ne.gov/Documents/469-000-211.pdf + - title: 469 NAC 469-000-211 AABD or SDP Standard of Need (effective 2017-01-01, Manual Letter #01-2017) + href: https://web.archive.org/web/20161221055507/https://dhhs.ne.gov/Documents/469-000-211.pdf + - title: 469 NAC 469-000-211 AABD or SDP Standard of Need (effective 2015-01-01, Manual Letter #74-2014) + href: https://web.archive.org/web/20150907223322/https://dhhs.ne.gov/Documents/469-000-211.pdf + - title: SSA State Assistance Programs for SSI Recipients, January 2011 - Nebraska + href: https://www.ssa.gov/policy/docs/progdesc/ssi_st_asst/2011/ne.pdf#page=2 diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index ab4fe87a7a0..d66185d7f72 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -750,6 +750,12 @@ programs: full_name: Minnesota Supplemental Aid variable: mn_msa parameter_prefix: gov.states.mn.dhs.msa + - state: NE + status: complete + name: Nebraska AABD + full_name: Nebraska Aid to the Aged, Blind, or Disabled + variable: ne_aabd + parameter_prefix: gov.states.ne.dhhs.aabd - state: KS status: complete name: Kansas SSPP @@ -1134,6 +1140,17 @@ programs: variable: il_cta_benefit parameter_prefix: gov.states.il.rta.cta + - id: ne_aabd + name: Nebraska AABD + full_name: Nebraska Aid to the Aged, Blind, or Disabled + category: Benefits + agency: DHHS + status: complete + coverage: NE + variable: ne_aabd + parameter_prefix: gov.states.ne.dhhs.aabd + verified_years: "2015-2025" + - id: ne_childcare name: Nebraska child care subsidy full_name: Nebraska Child Care Subsidy diff --git a/policyengine_us/tests/policy/baseline/gov/states/ne/dhhs/aabd/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ne/dhhs/aabd/integration.yaml new file mode 100644 index 00000000000..34357eccba8 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ne/dhhs/aabd/integration.yaml @@ -0,0 +1,800 @@ +- name: Case 1, single SSI recipient living independently in Nebraska. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + # Federal SSI (2025) individual = $967/month with no other income. + ssi_countable_income: 0 + marital_units: + marital_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + # Federal SSI (2025) individual FBR = $967. + ssi: 967 + # Categorically eligible and receives SSI in NE => eligible. + ne_aabd_eligible: true + ne_aabd_living_arrangement: INDEPENDENT + # Independent budget (2021 rates frozen through 2025): + # standard size 1 ($564) + actual shelter capped at $281 ($0 here) = $564. + ne_aabd_standard_of_need: 564 + # Fill-the-gap: max(0, $564 - $967) = $0 because federal FBR exceeds NE budget. + ne_aabd: 0 + +- name: Case 2, independent couple in Nebraska both receiving SSI. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + ssi_claim_is_joint: true + ssi_countable_income: 0 + person2: + age: 68 + is_ssi_aged: true + is_ssi_eligible: true + ssi_claim_is_joint: true + ssi_countable_income: 0 + marital_units: + marital_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: NE + output: + # Couple FBR (2025) = $1,450, split evenly between both SSI-eligible spouses. + ssi: [725, 725] + ne_aabd_eligible: [true, true] + # Independent budget for size 2 (2021 rates): + # standard size 2 ($887) + actual shelter capped at $349 ($0 here) = $887. + # Per-spouse share: $887 / 2 = $443.50. + ne_aabd_standard_of_need: [443.5, 443.5] + # Fill-the-gap: max(0, $443.50 - $725) = $0. + ne_aabd: [0, 0] + +- name: Case 3, single SSI recipient in an Assisted Living Facility. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 75 + is_ssi_aged: true + is_ssi_eligible: true + ssi_countable_income: 0 + ne_aabd_alternate_living_arrangement: ASSISTED_LIVING_FACILITY + marital_units: + marital_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + # Federal SSI (2025) individual FBR = $967 (ALF is not a Medicaid facility). + ssi: 967 + ne_aabd_eligible: true + ne_aabd_living_arrangement: ASSISTED_LIVING_FACILITY + # Alternate living standard for ASSISTED_LIVING_FACILITY (2021 rates) = $1,236. + ne_aabd_standard_of_need: 1_236 + # Fill-the-gap: max(0, $1,236 - $967) = $269. + ne_aabd: 269 + +- name: Case 4, single SSI recipient in an Adult Family Home using 2017 rates. + period: 2017-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 68 + is_ssi_aged: true + is_ssi_eligible: true + ssi_countable_income: 0 + ne_aabd_alternate_living_arrangement: ADULT_FAMILY_HOME + marital_units: + marital_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + # Federal SSI (2017) individual FBR = $735. + ssi: 735 + ne_aabd_eligible: true + ne_aabd_living_arrangement: ADULT_FAMILY_HOME + # Alternate living standard for ADULT_FAMILY_HOME (2017) = $867. + ne_aabd_standard_of_need: 867 + # Fill-the-gap: max(0, $867 - $735) = $132. + ne_aabd: 132 + +- name: Case 5, SSI recipient in a Long-Term Care Medicaid facility (Code D). + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 80 + is_ssi_aged: true + is_ssi_eligible: true + ssi_countable_income: 0 + # Federal Code D: medical treatment facility with Medicaid paying majority of care. + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + marital_units: + marital_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + # Federal SSI for a Medicaid facility resident is reduced to $30/month (PNA). + ssi: 30 + ne_aabd_eligible: true + # Federal Code D forces NE living arrangement to LONG_TERM_CARE. + ne_aabd_living_arrangement: LONG_TERM_CARE + # Alternate living standard for LONG_TERM_CARE (2021 rates frozen) = $60. + ne_aabd_standard_of_need: 60 + # Fill-the-gap: max(0, $60 - $30) = $30. + ne_aabd: 30 + +- name: Case 6, large negative self-employment income does not inflate the benefit. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + # SSI countable income floors earned income at zero, so ssi receipt is unchanged. + self_employment_income: -60_000_000 + marital_units: + marital_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + # Federal SSI (2025) individual = $967, unaffected by negative earnings. + ssi: 967 + ne_aabd_eligible: true + ne_aabd_living_arrangement: INDEPENDENT + # $0 shelter cost defaults: standard size 1 ($564) + actual shelter $0 = $564. + ne_aabd_standard_of_need: 564 + # Fill-the-gap is bounded by the standard of need: max(0, $564 - $967) = $0. + # The formula must NOT add the negative income excess back into the supplement. + ne_aabd: 0 + +- name: Case 7, mixed-arrangement spouses derive distinct living arrangements. + period: 2021-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + # Per SSA 2011 Table 1 footnote a, alternate-living couples are + # treated as two individuals; ssi_claim_is_joint: false reflects + # the Title XIX separation that gives each spouse the individual FBR. + ssi_claim_is_joint: false + ssi_countable_income: 0 + ne_aabd_alternate_living_arrangement: ADULT_FAMILY_HOME + person2: + age: 68 + is_ssi_aged: true + is_ssi_eligible: true + ssi_claim_is_joint: false + ssi_countable_income: 0 + marital_units: + marital_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: NE + output: + # Each spouse receives the individual federal SSI FBR (2021) = $794 + # because Title XIX separation prevents the joint computation. + ssi: [794, 794] + ne_aabd_eligible: [true, true] + # Person-level living arrangement is derived independently for each spouse: + # Spouse 1 from the alternate input (AFH); spouse 2 defaults to INDEPENDENT. + ne_aabd_living_arrangement: [ADULT_FAMILY_HOME, INDEPENDENT] + +- name: Case 8a, boundary period 2016-01 uses 2015 standard of need rates. + period: 2016-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + ssi_countable_income: 0 + marital_units: + marital_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + # Federal SSI (2016) individual FBR = $733. + ssi: 733 + ne_aabd_eligible: true + # 2016 falls under 2015 rates: standard size 1 ($491) + $0 actual shelter = $491. + ne_aabd_standard_of_need: 491 + # Fill-the-gap: max(0, $491 - $733) = $0; no shelter cost in this case. + ne_aabd: 0 + +- name: Case 8b, boundary period 2017-01 uses 2017 standard of need rates. + period: 2017-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + ssi_countable_income: 0 + marital_units: + marital_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + # Federal SSI (2017) individual FBR = $735. + ssi: 735 + ne_aabd_eligible: true + # 2017 rates: standard size 1 ($505) + $0 actual shelter = $505. + ne_aabd_standard_of_need: 505 + # Fill-the-gap: max(0, $505 - $735) = $0; no shelter cost in this case. + ne_aabd: 0 + +- name: Case 9, post-2021 rates remain frozen so 2025-01 matches 2021 values. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + ssi_countable_income: 0 + marital_units: + marital_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + # 2025 rates equal 2021 rates: standard size 1 ($564) + $0 actual shelter = $564. + ne_aabd_standard_of_need: 564 + +- name: Case 11, non-Nebraska resident with otherwise eligible facts gets zero benefit. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + ssi_countable_income: 0 + ne_aabd_alternate_living_arrangement: ASSISTED_LIVING_FACILITY + marital_units: + marital_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + # Non-Nebraska residency excludes the household via defined_for=StateCode.NE. + state_code: CA + output: + ne_aabd_eligible: false + ne_aabd_living_arrangement: NONE + ne_aabd: 0 + +- name: Case 12, independent couple where the federal couple FBR exceeds NE budget. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + ssi_claim_is_joint: true + ssi_countable_income: 0 + person2: + age: 68 + is_ssi_aged: true + is_ssi_eligible: true + ssi_claim_is_joint: true + ssi_countable_income: 0 + marital_units: + marital_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: NE + output: + # Couple FBR (2025) = $1,450; couple budget (2021 frozen) = $887 + $0 actual shelter = $887. + # Per spouse: standard_of_need = $887/2 = $443.50; federal_ssi = $725. + # Fill-the-gap: max(0, $443.50 - $725) = $0 each. + ne_aabd_couple_rate_applies: [true, true] + ne_aabd: [0, 0] + +- name: Case 13, asymmetric eligibility - only one spouse is SSI-eligible. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + ssi_claim_is_joint: true + ssi_countable_income: 0 + person2: + age: 60 + is_ssi_aged: false + is_ssi_disabled: false + is_ssi_aged_blind_disabled: false + is_ssi_eligible: false + marital_units: + marital_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: NE + output: + # Only one spouse is SSI-eligible -> couple_rate_applies must be false. + # The eligible spouse uses the individual independent budget, not the couple budget. + ne_aabd_couple_rate_applies: [false, false] + ne_aabd_eligible: [true, false] + +- name: Case 14, NE resident with non-NE spouse couple_rate_applies is false. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + ssi_claim_is_joint: true + ssi_countable_income: 0 + person2: + age: 68 + is_ssi_aged: true + is_ssi_eligible: true + ssi_claim_is_joint: true + ssi_countable_income: 0 + marital_units: + marital_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + # Non-NE state means defined_for filters BOTH spouses' living arrangements + # to NONE; couple_rate_applies requires both INDEPENDENT, so it is false. + state_code: IA + output: + ne_aabd_eligible: [false, false] + ne_aabd_couple_rate_applies: [false, false] + ne_aabd: [0, 0] + +- name: Case 15, countable income exactly at the $20 SSI general exclusion boundary. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + # $20/month unearned income exactly matches the SSI general exclusion, + # so countable income remains $0 and the federal SSI = full FBR ($967). + social_security_retirement: 240 + marital_units: + marital_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + # $20 is fully excluded -> ssi = FBR = $967. + ssi: 967 + ne_aabd_eligible: true + # $0 shelter cost defaults: standard size 1 ($564) + $0 actual shelter = $564. + ne_aabd_standard_of_need: 564 + # Fill-the-gap: max(0, $564 - $967) = $0. + ne_aabd: 0 + +- name: Case 16a, boundary period 2020-01 still uses 2017 standard of need rates. + period: 2020-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + ssi_countable_income: 0 + marital_units: + marital_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + # Federal SSI (2020) individual FBR = $783. + ssi: 783 + # 2020 falls under 2017 NE rates: $505 + $0 actual shelter = $505. + ne_aabd_standard_of_need: 505 + # Fill-the-gap: max(0, $505 - $783) = $0; no shelter cost in this case. + ne_aabd: 0 + +- name: Case 16b, boundary period 2021-01 uses 2021 standard of need rates. + period: 2021-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + ssi_countable_income: 0 + marital_units: + marital_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + # Federal SSI (2021) individual FBR = $794. + ssi: 794 + # 2021 rates: $564 + $0 actual shelter = $564. + ne_aabd_standard_of_need: 564 + # Fill-the-gap: max(0, $564 - $794) = $0; no shelter cost in this case. + ne_aabd: 0 + +- name: Case 17, negative employment income does not inflate the supplement. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 75 + is_ssi_aged: true + is_ssi_eligible: true + # Large negative self-employment loss; SSI countable income floors at zero + # so federal SSI is unaffected. + self_employment_income: -1_200_000_000 + ne_aabd_alternate_living_arrangement: ASSISTED_LIVING_FACILITY + marital_units: + marital_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + # Federal SSI (2025) individual FBR = $967, unaffected by negative earnings. + ssi: 967 + ne_aabd_eligible: true + ne_aabd_living_arrangement: ASSISTED_LIVING_FACILITY + ne_aabd_standard_of_need: 1_236 + # Fill-the-gap: max(0, $1,236 - $967 - max(0,-uncapped_ssi)). + # The income_excess clause prevents the formula from adding negative income to the + # supplement (which would otherwise produce a 1.2B benefit). + ne_aabd: 269 + +- name: Case 19, single SSI recipient with $20 unearned income and additional excess. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + # $50 unearned/month: first $20 excluded, remaining $30 reduces SSI. + social_security_retirement: 600 + marital_units: + marital_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + # Federal SSI: $967 - ($50 - $20) = $937. + ssi: 937 + ne_aabd_eligible: true + # $0 shelter cost defaults: standard size 1 ($564) + $0 actual shelter = $564. + ne_aabd_standard_of_need: 564 + # Fill-the-gap: max(0, $564 - $937 - 0) = $0. + ne_aabd: 0 + +- name: Case 20, independent single with below-cap shelter cost (2021). + period: 2021-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + ssi_countable_income: 0 + # $200/month rent = $2,400/year, below the $281 single shelter cap. + rent: 2_400 + marital_units: + marital_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + # Federal SSI (2021) individual FBR = $794. + ssi: 794 + ne_aabd_eligible: true + # Standard size 1 ($564) + actual shelter $200 (below $281 cap) = $764. + ne_aabd_standard_of_need: 764 + # Fill-the-gap: max(0, $764 - $794) = $0. + ne_aabd: 0 + +- name: Case 21, independent single with at-cap shelter cost (2021). + period: 2021-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + ssi_countable_income: 0 + # $281/month rent = $3,372/year, exactly at the single shelter cap. + rent: 3_372 + marital_units: + marital_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + # Federal SSI (2021) individual FBR = $794. + ssi: 794 + ne_aabd_eligible: true + # Standard size 1 ($564) + actual shelter $281 (= $281 cap) = $845. + ne_aabd_standard_of_need: 845 + # Fill-the-gap: max(0, $845 - $794) = $51. + ne_aabd: 51 + +- name: Case 22, independent single with above-cap shelter cost is capped at max (2021). + period: 2021-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + ssi_countable_income: 0 + # $500/month rent = $6,000/year, above the $281 single shelter cap. + rent: 6_000 + marital_units: + marital_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + # Federal SSI (2021) individual FBR = $794. + ssi: 794 + ne_aabd_eligible: true + # Standard size 1 ($564) + actual shelter capped at $281 = $845, not $564 + $500. + ne_aabd_standard_of_need: 845 + # Fill-the-gap: max(0, $845 - $794) = $51. + ne_aabd: 51 + +- name: Case 23, independent couple with above-cap shelter cost uses multiple cap (2021). + period: 2021-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + ssi_claim_is_joint: true + ssi_countable_income: 0 + # $400/month rent for the SPM unit = $4,800/year, above the $349 cap. + rent: 4_800 + person2: + age: 68 + is_ssi_aged: true + is_ssi_eligible: true + ssi_claim_is_joint: true + ssi_countable_income: 0 + marital_units: + marital_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: NE + output: + # Couple FBR (2021) = $1,191; each spouse gets $595.50. + ssi: [595.5, 595.5] + ne_aabd_eligible: [true, true] + # Combined budget: standard size 2 ($887) + actual shelter capped at $349 = $1,236. + # Per-spouse share: $1,236 / 2 = $618. + ne_aabd_standard_of_need: [618, 618] + # Fill-the-gap: max(0, $618 - $595.50) = $22.50 each. + ne_aabd: [22.5, 22.5] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ne/dhhs/aabd/ne_aabd_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ne/dhhs/aabd/ne_aabd_eligible.yaml new file mode 100644 index 00000000000..39faa4a4ab0 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ne/dhhs/aabd/ne_aabd_eligible.yaml @@ -0,0 +1,116 @@ +- name: Case 1, Nebraska resident receiving SSI is eligible. + period: 2025-01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + # Full 2025 individual FBR. + uncapped_ssi: 967 + households: + household: + members: [person1] + state_code: NE + output: + ne_aabd_eligible: true + +- name: Case 2, Nebraska resident SSI-eligible but income above FBR receives no SSI. + period: 2025-01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + # Negative uncapped_ssi means countable income exceeds the FBR, + # so actual ssi = 0 and the person is not an AABD recipient. + uncapped_ssi: -200 + households: + household: + members: [person1] + state_code: NE + output: + ne_aabd_eligible: false + +- name: Case 3, non-Nebraska resident receiving SSI is ineligible. + period: 2025-01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + uncapped_ssi: 967 + households: + household: + members: [person1] + state_code: CA + output: + ne_aabd_eligible: false + +- name: Case 4, Nebraska resident not SSI-eligible is ineligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_ssi_aged_blind_disabled: false + is_ssi_eligible: false + households: + household: + members: [person1] + state_code: NE + output: + ne_aabd_eligible: false + +- name: Case 5, countable income exactly equal to FBR yields zero SSI and ineligible. + period: 2025-01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + # uncapped_ssi = FBR - countable_income; setting it to 0 means + # countable income exactly equals the FBR -> ssi = 0 -> not an AABD recipient. + uncapped_ssi: 0 + households: + household: + members: [person1] + state_code: NE + output: + ne_aabd_eligible: false + +- name: Case 6, countable income just below FBR yields positive SSI and eligible. + period: 2025-01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + # $1 positive SSI -> eligible. + uncapped_ssi: 1 + households: + household: + members: [person1] + state_code: NE + output: + ne_aabd_eligible: true + +- name: Case 7, zero-income SSI recipient is eligible. + period: 2025-01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + ssi_countable_income: 0 + households: + household: + members: [person1] + state_code: NE + output: + ne_aabd_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/ne/dhhs/aabd/ne_aabd_living_arrangement.yaml b/policyengine_us/tests/policy/baseline/gov/states/ne/dhhs/aabd/ne_aabd_living_arrangement.yaml new file mode 100644 index 00000000000..a4d61509efe --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ne/dhhs/aabd/ne_aabd_living_arrangement.yaml @@ -0,0 +1,149 @@ +- name: Case 1, federal Code D (medical treatment facility) overrides input to LONG_TERM_CARE. + period: 2025-01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + # Federal Code D pays $30/month. + uncapped_ssi: 30 + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + # Even with an alternate input, federal Code D wins. + ne_aabd_alternate_living_arrangement: ASSISTED_LIVING_FACILITY + households: + household: + members: [person1] + state_code: NE + output: + ne_aabd_living_arrangement: LONG_TERM_CARE + +- name: Case 2, alternate input ASSISTED_LIVING_FACILITY is used when not in medical facility. + period: 2025-01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + uncapped_ssi: 967 + ne_aabd_alternate_living_arrangement: ASSISTED_LIVING_FACILITY + households: + household: + members: [person1] + state_code: NE + output: + ne_aabd_living_arrangement: ASSISTED_LIVING_FACILITY + +- name: Case 3, default INDEPENDENT when no alternate input and not in medical facility. + period: 2025-01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + uncapped_ssi: 967 + households: + household: + members: [person1] + state_code: NE + output: + ne_aabd_living_arrangement: INDEPENDENT + +- name: Case 4, non-Nebraska resident yields NONE. + period: 2025-01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + uncapped_ssi: 967 + ne_aabd_alternate_living_arrangement: ASSISTED_LIVING_FACILITY + households: + household: + members: [person1] + state_code: CA + output: + ne_aabd_living_arrangement: NONE + +- name: Case 5, BOARD_AND_ROOM input passes through to living arrangement. + period: 2025-01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + uncapped_ssi: 967 + ne_aabd_alternate_living_arrangement: BOARD_AND_ROOM + households: + household: + members: [person1] + state_code: NE + output: + ne_aabd_living_arrangement: BOARD_AND_ROOM + +- name: Case 6, ASSISTED_LIVING_WAIVER input passes through to living arrangement. + period: 2025-01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + uncapped_ssi: 967 + ne_aabd_alternate_living_arrangement: ASSISTED_LIVING_WAIVER + households: + household: + members: [person1] + state_code: NE + output: + ne_aabd_living_arrangement: ASSISTED_LIVING_WAIVER + +- name: Case 7, GROUP_HOME_CHILDREN input passes through to living arrangement. + period: 2025-01 + input: + people: + person1: + age: 40 + is_ssi_disabled: true + is_ssi_eligible: true + uncapped_ssi: 967 + ne_aabd_alternate_living_arrangement: GROUP_HOME_CHILDREN + households: + household: + members: [person1] + state_code: NE + output: + ne_aabd_living_arrangement: GROUP_HOME_CHILDREN + +- name: Case 8, two-spouse household with mixed alternate-living inputs in NE. + period: 2025-01 + input: + people: + person1: + age: 70 + is_ssi_aged: true + is_ssi_eligible: true + uncapped_ssi: 967 + ne_aabd_alternate_living_arrangement: ASSISTED_LIVING_FACILITY + person2: + age: 68 + is_ssi_aged: true + is_ssi_eligible: true + uncapped_ssi: 967 + # No alternate input -> defaults to INDEPENDENT. + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: NE + output: + # Each spouse's living arrangement is derived independently from their own + # alternate input; spouse 1 -> ALF; spouse 2 -> INDEPENDENT. + ne_aabd_living_arrangement: [ASSISTED_LIVING_FACILITY, INDEPENDENT] diff --git a/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd.py b/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd.py new file mode 100644 index 00000000000..0b23283db79 --- /dev/null +++ b/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd.py @@ -0,0 +1,32 @@ +from policyengine_us.model_api import * + + +class ne_aabd(Variable): + value_type = float + entity = Person + label = "Nebraska Aid to the Aged, Blind, or Disabled" + unit = USD + definition_period = MONTH + defined_for = "ne_aabd_eligible" + reference = ( + "https://dhhs.ne.gov/Documents/Title-469-Complete.pdf#page=126", + "https://dhhs.ne.gov/Documents/469-000-211.pdf", + "https://www.ssa.gov/policy/docs/progdesc/ssi_st_asst/2011/ne.pdf#page=1", + ) + + def formula(person, period): + # Per 469 NAC 3-006.01A1, AABD-PMT fills the gap between the state + # standard of need and the federal SSI benefit rate. NE's parameters + # store the FULL standard of need (e.g., $1,236/mo for Assisted + # Living 2021), so the formula subtracts the federal SSI rate to + # arrive at the state supplement portion. + # + # 469 NAC 3-006.01A enumerates a closed list of "available net income" + # to subtract before the FBR: (a) non-spouse Essential Person income, + # (b) VA Aid & Attendance, (c) income allocated from another + # assistance unit, (d) residual ineligible-spouse income not used by + # SSI's deeming formula. We don't track any of these at the moment, + # so the budgetary-need offset is zero in the model. + standard_of_need = person("ne_aabd_standard_of_need", period) + federal_ssi = person("ssi_amount_if_eligible", period) + return max_(0, standard_of_need - federal_ssi) diff --git a/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd_alternate_living_arrangement.py b/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd_alternate_living_arrangement.py new file mode 100644 index 00000000000..14b8ab81114 --- /dev/null +++ b/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd_alternate_living_arrangement.py @@ -0,0 +1,15 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.states.ne.dhhs.aabd.ne_aabd_living_arrangement import ( + NEAABDLivingArrangement, +) + + +class ne_aabd_alternate_living_arrangement(Variable): + value_type = Enum + entity = Person + label = "Nebraska AABD alternate (non-Medicaid) living arrangement" + definition_period = MONTH + defined_for = StateCode.NE + possible_values = NEAABDLivingArrangement + default_value = NEAABDLivingArrangement.INDEPENDENT + reference = "https://dhhs.ne.gov/Documents/469-000-211.pdf" diff --git a/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd_couple_rate_applies.py b/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd_couple_rate_applies.py new file mode 100644 index 00000000000..f69afb0d78d --- /dev/null +++ b/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd_couple_rate_applies.py @@ -0,0 +1,32 @@ +from policyengine_us.model_api import * + + +class ne_aabd_couple_rate_applies(Variable): + value_type = bool + entity = Person + label = "Nebraska AABD couple rate applies" + definition_period = MONTH + defined_for = StateCode.NE + reference = ( + "https://dhhs.ne.gov/Documents/Title-469-Complete.pdf#page=130", + "https://www.ssa.gov/policy/docs/progdesc/ssi_st_asst/2011/ne.pdf#page=2", + ) + + def formula(person, period): + # Per 469 NAC 3-006.02B3a(1), an eligible AABD couple living + # together independently uses a single combined budget split + # 50/50. Per SSA 2011 PDF p.2 footnote a, alternate-living + # couples are treated as two individuals -- so the couple + # branch only fires when both spouses are in INDEPENDENT. + # is_ssi_eligible is used (not ne_aabd_eligible) to avoid a + # circular dependency on the benefit calculation. + joint_claim = person("ssi_claim_is_joint", period.this_year) + unit_size = person.marital_unit.nb_persons() + both_ssi_eligible = ( + person.marital_unit.sum(person("is_ssi_eligible", period)) == unit_size + ) + living_arrangement = person("ne_aabd_living_arrangement", period) + LA = living_arrangement.possible_values + is_independent = living_arrangement == LA.INDEPENDENT + both_independent = person.marital_unit.sum(is_independent) == unit_size + return joint_claim & both_ssi_eligible & both_independent diff --git a/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd_eligible.py b/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd_eligible.py new file mode 100644 index 00000000000..0a5cfe64561 --- /dev/null +++ b/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd_eligible.py @@ -0,0 +1,21 @@ +from policyengine_us.model_api import * + + +class ne_aabd_eligible(Variable): + value_type = bool + entity = Person + label = "Eligible for Nebraska Aid to the Aged, Blind, or Disabled" + definition_period = MONTH + defined_for = StateCode.NE + reference = ( + "https://dhhs.ne.gov/Documents/Title-469-Complete.pdf#page=126", + "https://www.ssa.gov/policy/docs/progdesc/ssi_st_asst/2011/ne.pdf#page=1", + ) + + def formula(person, period): + # Per 469 NAC 3-006.01A1, AABD-PMT requires the person to be an + # SSI recipient. ssi > 0 already implies categorical (aged/blind/ + # disabled), resource, immigration eligibility, the federal + # income test, and takeup -- so no separate is_ssi_eligible + # check is needed. + return person("ssi", period) > 0 diff --git a/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd_living_arrangement.py b/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd_living_arrangement.py new file mode 100644 index 00000000000..e3f6c3780bf --- /dev/null +++ b/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd_living_arrangement.py @@ -0,0 +1,47 @@ +from policyengine_us.model_api import * + + +class NEAABDLivingArrangement(Enum): + INDEPENDENT = "Living independently" + LONG_TERM_CARE = "Long-term care (Medicaid facility)" + BOARD_AND_ROOM = ( + "Board and room facility (also covers Drug Treatment Center, " + "Licensed/Non-Licensed Boarding Home, and Licensed Center for " + "the Developmentally Disabled — all share the same rate per " + "469-000-211)" + ) + ADULT_FAMILY_HOME = "Certified Adult Family Home" + ASSISTED_LIVING_FACILITY = ( + "Licensed Assisted Living Facility (also covers Licensed Mental " + "Health Center — both share the same rate per 469-000-211)" + ) + ASSISTED_LIVING_WAIVER = "Assisted Living Waiver (AD/TBI)" + GROUP_HOME_CHILDREN = "Licensed Group Home for Children or Child Caring Agency" + NONE = "None" + + +class ne_aabd_living_arrangement(Variable): + value_type = Enum + entity = Person + label = "Nebraska AABD living arrangement" + definition_period = MONTH + defined_for = StateCode.NE + possible_values = NEAABDLivingArrangement + default_value = NEAABDLivingArrangement.NONE + reference = ( + "https://dhhs.ne.gov/Documents/469-000-211.pdf", + "https://www.ssa.gov/policy/docs/progdesc/ssi_st_asst/2011/ne.pdf#page=1", + ) + + def formula(person, period): + federal_arrangement = person("ssi_federal_living_arrangement", period) + in_medical_facility = ( + federal_arrangement + == federal_arrangement.possible_values.MEDICAL_TREATMENT_FACILITY + ) + alternate = person("ne_aabd_alternate_living_arrangement", period) + return where( + in_medical_facility, + NEAABDLivingArrangement.LONG_TERM_CARE, + alternate, + ) diff --git a/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd_standard_of_need.py b/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd_standard_of_need.py new file mode 100644 index 00000000000..5c809591608 --- /dev/null +++ b/policyengine_us/variables/gov/states/ne/dhhs/aabd/ne_aabd_standard_of_need.py @@ -0,0 +1,48 @@ +from policyengine_us.model_api import * + + +class ne_aabd_standard_of_need(Variable): + value_type = float + entity = Person + label = "Nebraska AABD standard of need" + unit = USD + definition_period = MONTH + defined_for = "ne_aabd_eligible" + reference = ( + "https://dhhs.ne.gov/Documents/469-000-211.pdf", + "https://www.ssa.gov/policy/docs/progdesc/ssi_st_asst/2011/ne.pdf#page=2", + ) + + def formula(person, period, parameters): + p = parameters(period).gov.states.ne.dhhs.aabd + living_arrangement = person("ne_aabd_living_arrangement", period) + LA = living_arrangement.possible_values + is_independent = living_arrangement == LA.INDEPENDENT + couple_applies = person("ne_aabd_couple_rate_applies", period) + # Per 469 NAC 3-006.02B1a / 3-006.02B3a(1)(a), the independent + # budget is the standard of need plus actual shelter expense up to + # the single (one person) or multiple (couple) shelter cap. Shelter + # includes rent and home ownership expenses (469 NAC 3-004.02). + independent_size = where(couple_applies, 2, 1) + independent_son = p.standard_of_need.independent[independent_size] + shelter_max = where( + couple_applies, + p.shelter_allowance.multiple, + p.shelter_allowance.single, + ) + actual_shelter = person.spm_unit("housing_cost", period) + independent_shelter = min_(actual_shelter, shelter_max) + independent_total = independent_son + independent_shelter + # Couples split the combined budget 50/50 between spouses. + independent_amount = where( + couple_applies, + independent_total / 2, + independent_total, + ) + # Alternate-living standards already include the $64 personal + # needs allowance (except LONG_TERM_CARE, where Medicaid covers + # personal needs and the standard is just $60). Per SSA 2011 PDF + # p.2 footnote a, alternate-living couples are treated as two + # individuals -- no pooling. + alternate_amount = p.alternate_living_standard[living_arrangement] + return where(is_independent, independent_amount, alternate_amount) 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 f750179dc71..78437a73d86 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 @@ -32,6 +32,7 @@ def formula(spm_unit, period, parameters): "me_ssp", # Maine benefits "mo_ssp", # Missouri benefits "mn_msa", # Minnesota benefits + "ne_aabd", # Nebraska benefits # California programs. "ca_cvrp", # California Clean Vehicle Rebate Project. # Colorado programs.