diff --git a/changelog.d/nv-ssp-2026.added.md b/changelog.d/nv-ssp-2026.added.md new file mode 100644 index 00000000000..9385408cb7e --- /dev/null +++ b/changelog.d/nv-ssp-2026.added.md @@ -0,0 +1 @@ +Add Nevada Optional State Supplementation with 2026 payment rates, living arrangements, couple and spouse-deeming calculations, and benefit and SNAP income integration. diff --git a/policyengine_us/parameters/gov/household/household_state_benefits.yaml b/policyengine_us/parameters/gov/household/household_state_benefits.yaml index b27adb9a164..67f5fdccda4 100644 --- a/policyengine_us/parameters/gov/household/household_state_benefits.yaml +++ b/policyengine_us/parameters/gov/household/household_state_benefits.yaml @@ -60,6 +60,7 @@ values: - ne_aabd - ne_child_care_subsidies # Nevada benefits + - nv_oss - nv_child_care_subsidies # Oklahoma benefits - ok_child_care_subsidies @@ -162,6 +163,7 @@ values: - ne_aabd - ne_child_care_subsidies # Nevada benefits + - nv_oss - nv_child_care_subsidies # Oklahoma benefits - ok_child_care_subsidies @@ -271,6 +273,7 @@ values: - ne_aabd - ne_child_care_subsidies # Nevada benefits + - nv_oss - nv_child_care_subsidies # Oklahoma benefits - ok_child_care_subsidies @@ -381,6 +384,7 @@ values: - ne_aabd - ne_child_care_subsidies # Nevada benefits + - nv_oss - nv_child_care_subsidies # Oklahoma benefits - ok_child_care_subsidies 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 e989412f9c4..9b22e1cc3a7 100644 --- a/policyengine_us/parameters/gov/hud/annual_income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/hud/annual_income/sources/unearned.yaml @@ -23,6 +23,7 @@ values: - pa_ssp - wy_ssp - nc_sa_countable_for_hud + - nv_oss - general_assistance - total_unemployment_compensation - child_support_received diff --git a/policyengine_us/parameters/gov/states/nv/dwss/oss/payment/couple.yaml b/policyengine_us/parameters/gov/states/nv/dwss/oss/payment/couple.yaml new file mode 100644 index 00000000000..58542cc0904 --- /dev/null +++ b/policyengine_us/parameters/gov/states/nv/dwss/oss/payment/couple.yaml @@ -0,0 +1,57 @@ +description: Nevada provides this monthly same-category couple payment before income reductions under the Optional State Supplementation program. + +metadata: + propagate_metadata_to_children: true + unit: currency-USD + period: month + label: Nevada OSS couple payment + breakdown: + - nv_oss_living_arrangement + - ssi_category + reference: + - title: POMS SI 01415.058 I.2.b - Nevada payment levels for January 2026 + href: https://secure.ssa.gov/poms.nsf/lnx/0501415058#i2b + - title: NRS 422A.070, State Supplementary Assistance defined + href: https://www.leg.state.nv.us/NRS/NRS-422A.html#NRS422ASec070 + +# Full couple rates for two members of the same category. Averaging the +# applicable rates reproduces the published mixed-category couple totals. +INDEPENDENT_LIVING: + AGED: + 2026-01-01: 74.46 + BLIND: + 2026-01-01: 374.6 + DISABLED: + 2026-01-01: 0 + NONE: + 2026-01-01: 0 + +HOUSEHOLD_OF_ANOTHER: + AGED: + 2026-01-01: 49.64 + BLIND: + 2026-01-01: 531.94 + DISABLED: + 2026-01-01: 0 + NONE: + 2026-01-01: 0 + +DOMICILIARY_CARE: + AGED: + 2026-01-01: 881 + BLIND: + 2026-01-01: 881 + DISABLED: + 2026-01-01: 0 + NONE: + 2026-01-01: 0 + +NONE: + AGED: + 2026-01-01: 0 + BLIND: + 2026-01-01: 0 + DISABLED: + 2026-01-01: 0 + NONE: + 2026-01-01: 0 diff --git a/policyengine_us/parameters/gov/states/nv/dwss/oss/payment/individual.yaml b/policyengine_us/parameters/gov/states/nv/dwss/oss/payment/individual.yaml new file mode 100644 index 00000000000..f7ad222b62c --- /dev/null +++ b/policyengine_us/parameters/gov/states/nv/dwss/oss/payment/individual.yaml @@ -0,0 +1,55 @@ +description: Nevada provides this monthly individual payment before income reductions under the Optional State Supplementation program. + +metadata: + propagate_metadata_to_children: true + unit: currency-USD + period: month + label: Nevada OSS individual payment + breakdown: + - nv_oss_living_arrangement + - ssi_category + reference: + - title: POMS SI 01415.058 I.2.a - Nevada payment levels for January 2026 + href: https://secure.ssa.gov/poms.nsf/lnx/0501415058#i2a + - title: NRS 422A.070, State Supplementary Assistance defined + href: https://www.leg.state.nv.us/NRS/NRS-422A.html#NRS422ASec070 + +INDEPENDENT_LIVING: + AGED: + 2026-01-01: 36.4 + BLIND: + 2026-01-01: 109.3 + DISABLED: + 2026-01-01: 0 + NONE: + 2026-01-01: 0 + +HOUSEHOLD_OF_ANOTHER: + AGED: + 2026-01-01: 24.27 + BLIND: + 2026-01-01: 213.96 + DISABLED: + 2026-01-01: 0 + NONE: + 2026-01-01: 0 + +DOMICILIARY_CARE: + AGED: + 2026-01-01: 391 + BLIND: + 2026-01-01: 391 + DISABLED: + 2026-01-01: 0 + NONE: + 2026-01-01: 0 + +NONE: + AGED: + 2026-01-01: 0 + BLIND: + 2026-01-01: 0 + DISABLED: + 2026-01-01: 0 + NONE: + 2026-01-01: 0 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 4fd3bd4c94a..9484a2a732b 100644 --- a/policyengine_us/parameters/gov/usda/snap/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/usda/snap/income/sources/unearned.yaml @@ -49,6 +49,7 @@ values: - ne_aabd - nj_ssp - nm_ssi_state_supplement + - nv_oss - pa_ssp - sc_ssi_state_supplement - tx_ssi_state_supplement diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index 69d1b8a36d7..8ea5f36e8e8 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -1072,6 +1072,18 @@ programs: name: New Mexico SSI supplement full_name: New Mexico SSI state supplement variable: nm_ssi_state_supplement + - state: NV + status: partial + name: Nevada OSS + full_name: Nevada Optional State Supplementation + variable: nv_oss + parameter_prefix: gov.states.nv.dwss.oss + verified_years: "2026" + notes: >- + Models 2026 optional supplementation for independent living, another + person's household and state-certified domiciliary care, including + couples and spouse deeming. Mandatory minimum-income protection for + December 1973 conversions is not modeled. - state: SC status: complete name: South Carolina SSI supplement diff --git a/policyengine_us/tests/policy/baseline/gov/states/nv/dwss/oss/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/nv/dwss/oss/integration.yaml new file mode 100644 index 00000000000..304e6aec557 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/nv/dwss/oss/integration.yaml @@ -0,0 +1,188 @@ +- name: Case 1, aged individual integrates federal SSI and Nevada OSS once. + # POMS I.2.a: $994 + $36.40 = $1,030.40; 7 CFR 273.9(b)(2)(i). + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: NV + age: 65 + snap: + 2026: 0 + output: + is_ssi_eligible: true + ssi_category: AGED + nv_oss_living_arrangement: INDEPENDENT_LIVING + ssi_countable_income: 0 + ssi_amount_if_eligible: 994 + ssi: 994 + nv_oss: 36.4 + household_state_benefits: + 2026: 436.8 + snap_unearned_income: 1_030.4 + spm_unit_benefits: + 2026: 12_364.8 + # HUD counts SSI and the supplement: $994 * 12 + $436.80 = $12,364.80. + hud_annual_income: + 2026: 12_364.8 + +- name: Case 2, state-only payment remains after federal SSI is exhausted. + # $1,030 Social Security - $20 exclusion = $1,010 countable income. + # Excess over $994 is $16, so Nevada pays $36.40 - $16 = $20.40. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: NV + age: 65 + social_security_retirement: 12_360 + snap: + 2026: 0 + output: + is_ssi_eligible: true + ssi_category: AGED + nv_oss_living_arrangement: INDEPENDENT_LIVING + ssi_countable_income: 1_010 + ssi_amount_if_eligible: 994 + ssi: 0 + nv_oss: 20.4 + household_state_benefits: + 2026: 244.8 + snap_unearned_income: 1_050.4 + spm_unit_benefits: + 2026: 12_604.8 + +- name: Case 3, mixed aged blind couple shares the joint payment after income reduction. + # $1,700 - $20 = $1,680 countable income; excess over $1,491 is $189. + # $224.53 - $189 = $35.53; each $17.765 rounds up to $17.77. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 65 + social_security_retirement: 20_400 + person2: + age: 40 + is_blind: true + marital_units: + marital_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + snap: + 2026: 0 + households: + household: + members: [person1, person2] + state_code: NV + output: + is_ssi_eligible: [true, true] + ssi_category: [AGED, BLIND] + ssi_couple_computation_applies: [true, true] + ssi_countable_income: [840, 840] + ssi_amount_if_eligible: [745.5, 745.5] + ssi: [0, 0] + nv_oss: [17.77, 17.77] + household_state_benefits: + 2026: 426.48 + snap_unearned_income: 1_735.54 + spm_unit_benefits: + 2026: 20_826.48 + +- name: Case 4, blind claimant with an ineligible spouse uses the couple deeming standard. + # SI 01320.430 D: spouse's $1,850 - $20 = $1,830 countable. + # $374.60 - ($1,830 - $1,491) = $35.60, below the $109.30 own-income cap. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + is_blind: true + person2: + age: 40 + social_security_retirement: 22_200 + marital_units: + marital_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + snap: + 2026: 0 + households: + household: + members: [person1, person2] + state_code: NV + output: + is_ssi_eligible: [true, false] + ssi_category: [BLIND, NONE] + ssi_couple_computation_applies: [false, false] + is_ssi_spousal_deeming_applies: [true, false] + ssi_countable_income: [1_830, 0] + ssi_amount_if_eligible: [1_491, 994] + ssi: [0, 0] + nv_oss: [35.6, 0] + household_state_benefits: + 2026: 427.2 + snap_unearned_income: 1_885.6 + spm_unit_benefits: + 2026: 22_627.2 + +- name: Case 5, blind recipient in another household uses the reduced federal rate. + # POMS I.2.a: federal $662.67 plus Nevada $213.96 = $876.63. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: NV + age: 40 + is_blind: true + ssi_lives_in_another_persons_household: + 2026: true + ssi_receives_shelter_from_others_in_household: + 2026: true + ssi_others_pay_all_meals: + 2026: true + snap: + 2026: 0 + output: + is_ssi_eligible: true + ssi_category: BLIND + ssi_federal_living_arrangement: ANOTHER_PERSONS_HOUSEHOLD + nv_oss_living_arrangement: HOUSEHOLD_OF_ANOTHER + ssi_countable_income: 0 + ssi_amount_if_eligible: 662.67 + ssi: 662.67 + nv_oss: 213.96 + household_state_benefits: + 2026: 2_567.52 + snap_unearned_income: 876.63 + spm_unit_benefits: + 2026: 10_519.52 + +- name: Case 6, July domiciliary care uses monthly benefits and annual income inputs. + # $1,200 monthly Social Security - $20 = $1,180 countable income. + # $391 - ($1,180 - $994) = $205 Nevada OSS; no federal SSI remains. + period: 2026-07 + absolute_error_margin: 0.01 + input: + state_code: + 2026: NV + age: + 2026: 65 + social_security_retirement: + 2026: 14_400 + nv_oss_care_setting: DOMICILIARY_CARE + output: + is_ssi_eligible: true + ssi_category: AGED + nv_oss_living_arrangement: DOMICILIARY_CARE + ssi_countable_income: 1_180 + ssi_amount_if_eligible: 994 + ssi: 0 + nv_oss: 205 diff --git a/policyengine_us/tests/policy/baseline/gov/states/nv/dwss/oss/nv_oss.yaml b/policyengine_us/tests/policy/baseline/gov/states/nv/dwss/oss/nv_oss.yaml new file mode 100644 index 00000000000..6eeb1959be4 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/nv/dwss/oss/nv_oss.yaml @@ -0,0 +1,1450 @@ +# Rates: POMS SI 01415.058 I.2. +# Income phaseout: 20 CFR 416.2025(b). +# Spouse deeming: POMS SI 01320.430 D; minimum payment: SI 02001.005. +# Annual income inputs include the $20 monthly general income exclusion. +# Mixed-category couple payments are divided equally after the joint phaseout. +- name: Case 1, aged individual receives the published independent living supplement. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + output: + nv_oss: 36.4 + +- name: Case 2, person just below the aged threshold receives no supplement. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 64 + output: + nv_oss: 0 + +- name: Case 3, blind aged recipient gets the higher blind category. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + is_blind: true + output: + nv_oss: 109.3 + +- name: Case 4, blind child receives the independent living supplement. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 10 + is_blind: true + output: + nv_oss: 109.3 + +- name: Case 5, countable resources exactly at the individual limit remain eligible. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + ssi_countable_resources: 2_000 + output: + nv_oss: 36.4 + +- name: Case 6, countable resources above the individual limit are ineligible. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + ssi_countable_resources: 2_001 + output: + nv_oss: 0 + +- name: Case 7, person without qualifying immigration status receives no supplement. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + immigration_status: UNDOCUMENTED + output: + nv_oss: 0 + +- name: Case 8, Nevada benefit is zero outside Nevada. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: CA + age: 65 + output: + nv_oss: 0 + +- name: Case 9, Medicaid majority-funded medical facility receives no supplement. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + output: + nv_oss: 0 + +- name: Case 10, certified medical facility without majority Medicaid funding uses independent living. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: false + output: + nv_oss: 36.4 + +- name: Case 11, uncertified private medical facility receives no supplement. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + nv_oss_care_setting: UNCERTIFIED_MEDICAL_FACILITY + output: + nv_oss: 0 + +- name: Case 12, full month in a public emergency shelter receives no supplement. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + nv_oss_care_setting: PUBLIC_EMERGENCY_SHELTER + output: + nv_oss: 0 + +- name: Case 13, negative earned income cannot increase the maximum supplement. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + self_employment_income: -12_000 + output: + nv_oss: 36.4 + +- name: Case 14, federal SSI absorbs income below the federal limit. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + social_security_retirement: 12_000 + output: + nv_oss: 36.4 + ssi_countable_income: 980 + ssi: 14 + +- name: Case 15, supplement continues after federal SSI is exhausted. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + social_security_retirement: 12_360 + output: + nv_oss: 20.4 + ssi_countable_income: 1_010 + ssi: 0 + +- name: Case 16, positive payment below one dollar is raised to the minimum. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + social_security_retirement: 12_603.6 + output: + nv_oss: 1 + ssi: 0 + +- name: Case 17, income at the combined standard produces zero. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + social_security_retirement: 12_604.8 + output: + nv_oss: 0 + ssi: 0 + +- name: Case 18, income above the combined standard produces zero. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + social_security_retirement: 12_612 + output: + nv_oss: 0 + ssi: 0 + +- name: Case 19, earned income uses the federal general and earned exclusions. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + employment_income: 25_200 + output: + nv_oss: 22.9 + ssi_countable_income: 1_007.5 + ssi: 0 + +- name: Case 20, mixed category couple phases out using combined income. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + social_security_retirement: 20_400 + person2: + age: 40 + is_blind: true + 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: NV + output: + nv_oss: [17.77, 17.77] + +- name: Case 21, disabled spouse receives half of the aged disabled couple payment. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + social_security_retirement: 18_360 + person2: + age: 40 + meets_ssi_disability_criteria: true + 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: NV + output: + nv_oss: [9.12, 9.12] + +- name: Case 22, couple gets the one dollar minimum per member. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + social_security_retirement: 19_005.6 + person2: + age: 65 + 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: NV + output: + nv_oss: [1, 1] + +- name: Case 23, couple at the combined income cutoff gets zero. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + social_security_retirement: 19_025.52 + person2: + age: 65 + 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: NV + output: + nv_oss: [0, 0] + +- name: Case 24, ineligible spouse without income preserves the individual rate. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + person2: + age: 40 + 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: NV + output: + nv_oss: [36.4, 0] + +- name: Case 25, spousal deeming uses the blind couple rate before capping at the individual payment. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 40 + is_blind: true + person2: + age: 40 + social_security_retirement: 19_200 + 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: NV + output: + nv_oss: [109.3, 0] + +- name: Case 26, spousal deeming reduces payment after exceeding the couple standard. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 40 + is_blind: true + person2: + age: 40 + social_security_retirement: 22_200 + 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: NV + output: + nv_oss: [35.6, 0] + +- name: Case 27, spousal deeming cannot exceed the payment on the claimant's own income. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 40 + is_blind: true + social_security_retirement: 12_960 + person2: + age: 40 + social_security_retirement: 7_200 + 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: NV + output: + nv_oss: [43.3, 0] + +- name: Case 28, spousal deemed income can eliminate the supplement. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 40 + is_blind: true + person2: + age: 40 + social_security_retirement: 22_800 + 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: NV + output: + nv_oss: [0, 0] + +- name: Case 29, one spouse in a Medicaid facility leaves the other on the individual rate. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + person2: + age: 65 + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + 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: NV + output: + nv_oss: [36.4, 0] + +- name: Case 30, couple resources exactly at the limit remain eligible. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + ssi_countable_resources: 1_500 + person2: + age: 65 + ssi_countable_resources: 1_500 + 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: NV + output: + nv_oss: [37.23, 37.23] + +- name: Case 31, couple resources over the limit eliminate both payments. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + ssi_countable_resources: 1_501 + person2: + age: 65 + ssi_countable_resources: 1_500 + 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: NV + output: + nv_oss: [0, 0] + +- name: Case 32, annual amount sums twelve monthly payments. + period: 2026 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + output: + nv_oss: 436.8 + household_state_benefits: 436.8 + +- name: Case 33, mixed households preserve couple sharing and Nevada residence filtering. + # Reverse the aged/blind order and place the couple's income on the blind + # member. The published $224.53 rate less $189 excess leaves $17.77 each. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 40 + is_blind: true + person2: + age: 40 + is_blind: true + social_security_retirement: 20_400 + person3: + age: 65 + person4: + age: 65 + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2, person3] + marital_unit3: + members: [person4] + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2, person3] + tax_unit3: + members: [person4] + spm_units: + spm_unit1: + members: [person1] + spm_unit2: + members: [person2, person3] + spm_unit3: + members: [person4] + households: + household1: + members: [person1] + state_code: NV + household2: + members: [person2, person3] + state_code: NV + household3: + members: [person4] + state_code: CA + output: + nv_oss: [109.3, 17.77, 17.77, 0] + +- name: Case 34, an eligible person who does not take up SSI receives no supplement. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 65 + takes_up_ssi_if_eligible: false + output: + # Aged citizen with no resources meets the categorical and resource tests. + is_ssi_eligible: true + # $994 federal benefit rate - $0 countable income = $994 if taken up. + ssi_if_takes_up: 994 + # SSI is defined only for people who take it up. + ssi: 0 + # SSA pays the supplement through the SSI claim, so no take-up means $0. + nv_oss: 0 + +- name: Case 35, spousal deeming in another person's household caps the payment with the reduced federal rate. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 40 + is_blind: true + # $750 monthly Social Security disability benefit. + social_security_disability: 9_000 + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + person2: + age: 40 + # 20 hours a week at the $12.00 Nevada minimum wage (NRS 608.250): + # $12 * 20 * 52 = $12,480 a year, $1,040 a month. + employment_income: 12_480 + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + 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: NV + output: + # Shelter from others and all meals paid by others: one-third reduction. + ssi_federal_living_arrangement: [ANOTHER_PERSONS_HOUSEHOLD, ANOTHER_PERSONS_HOUSEHOLD] + nv_oss_living_arrangement: [HOUSEHOLD_OF_ANOTHER, HOUSEHOLD_OF_ANOTHER] + # Not a joint claim: person1's own-income cap uses the blind + # household-of-another individual rate; person2 has no SSI category. + # Spouse earnings $1,040 > $1,491 - $994 = $497, so deeming applies. + # Deemed: ($1,040 - $65) / 2 = $487.50. + ssi_income_deemed_from_ineligible_spouse: [487.5, 0] + # Own $750 - $20 = $730; $730 + $487.50 = $1,217.50. + ssi_countable_income: [1_217.5, 0] + # $1,491 couple rate * 2/3 = $994 - $1,217.50 < 0. + ssi: [0, 0] + # Couple path: $531.94 - ($1,217.50 - $994) = $308.44. + # Own-income cap: $213.96 - ($730 - $994 * 2/3 = $662.67) = $146.63 + # after rounding up to cents. min($146.63, $308.44) = $146.63. + nv_oss: [146.63, 0] + +- name: Case 36, a blind child in domiciliary care keeps the independent living supplement. + period: 2026-01 + absolute_error_margin: 0.001 + input: + state_code: NV + age: 17 + is_blind: true + nv_oss_care_setting: DOMICILIARY_CARE + output: + # SF01415.300 E lists no exclusion for children, so the child keeps the + # federal mapping: FLA A gives OSS A, the blind independent living rate. + nv_oss_living_arrangement: INDEPENDENT_LIVING + nv_oss: 109.3 + +- name: Case 37, blind child with two working parents keeps the full supplement after parental deeming. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + own_children_in_household: 1 + # Full-time cashier (SOC 41-2011) at the Nevada median wage, BLS OEWS + # May 2025: $14.36 an hour * 2,080 hours, published as $29,870 a year. + employment_income: 29_870 + person2: + age: 38 + own_children_in_household: 1 + # Also a full-time cashier at the Nevada median: $29,870 a year. + employment_income: 29_870 + person3: + age: 10 + is_blind: true + marital_units: + marital_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2, person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: NV + output: + # Neither parent is aged, blind or disabled, so the blind child lives with + # ineligible parents (federal code C), which Nevada pays as OS code A. + ssi_federal_living_arrangement: [OWN_HOUSEHOLD, OWN_HOUSEHOLD, CHILD_IN_PARENTAL_HOUSEHOLD] + nv_oss_living_arrangement: [INDEPENDENT_LIVING, INDEPENDENT_LIVING, INDEPENDENT_LIVING] + # Parents: $29,870 * 2 = $59,740 a year, $4,978.33 a month, all earned. + # ($4,978.33 - $20 - $65) * 0.5 = $2,446.67; less the two-parent + # allocation, the $1,491 couple rate, leaves $955.67 deemed to the child. + ssi_unearned_income_deemed_from_ineligible_parent: [0, 0, 955.67] + # Child: $955.67 - $20 general exclusion = $935.67. + ssi_countable_income: [0, 0, 935.67] + # $994 individual rate - $935.67 = $58.33. + ssi: [0, 0, 58.33] + # $935.67 is below the $994 rate, so there is no excess income and the + # child gets the full $109.30 blind independent living rate. + nv_oss: [0, 0, 109.3] + +# Published payment levels: POMS SI 01415.058 I.2.a-b (January 2026). A joint +# couple's payment is divided equally (POMS SI 02005.030 G.1), and fractions of +# a cent round up (SI 02001.010), so 224.53 / 2 = 112.265 is paid as 112.27. +- name: Case 38, aged and aged couple in independent matches the published total of 74.46. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + person2: + age: 65 + 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: NV + output: + nv_oss: [37.23, 37.23] + +- name: Case 39, blind and blind couple in independent matches the published total of 374.6. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 40 + is_blind: true + person2: + age: 40 + is_blind: true + 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: NV + output: + nv_oss: [187.3, 187.3] + +- name: Case 40, aged and blind couple in independent matches the published total of 224.53. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + person2: + age: 40 + is_blind: true + 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: NV + output: + nv_oss: [112.27, 112.27] + +- name: Case 41, aged and disabled couple in independent matches the published total of 37.23. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + person2: + age: 40 + meets_ssi_disability_criteria: true + 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: NV + output: + nv_oss: [18.62, 18.62] + +- name: Case 42, blind and disabled couple in independent matches the published total of 187.3. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 40 + is_blind: true + person2: + age: 40 + meets_ssi_disability_criteria: true + 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: NV + output: + nv_oss: [93.65, 93.65] + +- name: Case 43, disabled and disabled couple in independent matches the published total of 0. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 40 + meets_ssi_disability_criteria: true + person2: + age: 40 + meets_ssi_disability_criteria: true + 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: NV + output: + nv_oss: [0, 0] + +- name: Case 44, aged and aged couple in another household matches the published total of 49.64. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + person2: + age: 65 + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + 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: NV + output: + nv_oss: [24.82, 24.82] + +- name: Case 45, blind and blind couple in another household matches the published total of 531.94. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 40 + is_blind: true + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + person2: + age: 40 + is_blind: true + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + 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: NV + output: + nv_oss: [265.97, 265.97] + +- name: Case 46, aged and blind couple in another household matches the published total of 290.79. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + person2: + age: 40 + is_blind: true + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + 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: NV + output: + nv_oss: [145.4, 145.4] + +- name: Case 47, aged and disabled couple in another household matches the published total of 24.82. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + person2: + age: 40 + meets_ssi_disability_criteria: true + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + 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: NV + output: + nv_oss: [12.41, 12.41] + +- name: Case 48, blind and disabled couple in another household matches the published total of 265.97. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 40 + is_blind: true + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + person2: + age: 40 + meets_ssi_disability_criteria: true + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + 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: NV + output: + nv_oss: [132.99, 132.99] + +- name: Case 49, disabled and disabled couple in another household matches the published total of 0. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 40 + meets_ssi_disability_criteria: true + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + person2: + age: 40 + meets_ssi_disability_criteria: true + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + 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: NV + output: + nv_oss: [0, 0] + +- name: Case 50, aged and aged couple in domiciliary care matches the published total of 881. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + nv_oss_care_setting: DOMICILIARY_CARE + person2: + age: 65 + nv_oss_care_setting: DOMICILIARY_CARE + 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: NV + output: + nv_oss: [440.5, 440.5] + +- name: Case 51, blind and blind couple in domiciliary care matches the published total of 881. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 40 + is_blind: true + nv_oss_care_setting: DOMICILIARY_CARE + person2: + age: 40 + is_blind: true + nv_oss_care_setting: DOMICILIARY_CARE + 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: NV + output: + nv_oss: [440.5, 440.5] + +- name: Case 52, aged and blind couple in domiciliary care matches the published total of 881. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + nv_oss_care_setting: DOMICILIARY_CARE + person2: + age: 40 + is_blind: true + nv_oss_care_setting: DOMICILIARY_CARE + 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: NV + output: + nv_oss: [440.5, 440.5] + +- name: Case 53, aged and disabled couple in domiciliary care matches the published total of 440.5. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + nv_oss_care_setting: DOMICILIARY_CARE + person2: + age: 40 + meets_ssi_disability_criteria: true + nv_oss_care_setting: DOMICILIARY_CARE + 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: NV + output: + nv_oss: [220.25, 220.25] + +- name: Case 54, blind and disabled couple in domiciliary care matches the published total of 440.5. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 40 + is_blind: true + nv_oss_care_setting: DOMICILIARY_CARE + person2: + age: 40 + meets_ssi_disability_criteria: true + nv_oss_care_setting: DOMICILIARY_CARE + 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: NV + output: + nv_oss: [220.25, 220.25] + +- name: Case 55, disabled and disabled couple in domiciliary care matches the published total of 0. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 40 + meets_ssi_disability_criteria: true + nv_oss_care_setting: DOMICILIARY_CARE + person2: + age: 40 + meets_ssi_disability_criteria: true + nv_oss_care_setting: DOMICILIARY_CARE + 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: NV + output: + nv_oss: [0, 0] + +- name: Case 56, all individual categories in independent match the published rates. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + is_blind: false + meets_ssi_disability_criteria: false + person2: + age: 40 + is_blind: true + meets_ssi_disability_criteria: false + person3: + age: 40 + is_blind: false + meets_ssi_disability_criteria: true + person4: + age: 40 + is_blind: false + meets_ssi_disability_criteria: false + marital_units: + marital_units1: + members: [person1] + marital_units2: + members: [person2] + marital_units3: + members: [person3] + marital_units4: + members: [person4] + tax_units: + tax_units1: + members: [person1] + tax_units2: + members: [person2] + tax_units3: + members: [person3] + tax_units4: + members: [person4] + spm_units: + spm_units1: + members: [person1] + spm_units2: + members: [person2] + spm_units3: + members: [person3] + spm_units4: + members: [person4] + households: + households1: + members: [person1] + state_code: NV + households2: + members: [person2] + state_code: NV + households3: + members: [person3] + state_code: NV + households4: + members: [person4] + state_code: NV + output: + nv_oss: [36.4, 109.3, 0, 0] + +- name: Case 57, all individual categories in another household match the published rates. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + is_blind: false + meets_ssi_disability_criteria: false + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + person2: + age: 40 + is_blind: true + meets_ssi_disability_criteria: false + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + person3: + age: 40 + is_blind: false + meets_ssi_disability_criteria: true + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + person4: + age: 40 + is_blind: false + meets_ssi_disability_criteria: false + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + marital_units: + marital_units1: + members: [person1] + marital_units2: + members: [person2] + marital_units3: + members: [person3] + marital_units4: + members: [person4] + tax_units: + tax_units1: + members: [person1] + tax_units2: + members: [person2] + tax_units3: + members: [person3] + tax_units4: + members: [person4] + spm_units: + spm_units1: + members: [person1] + spm_units2: + members: [person2] + spm_units3: + members: [person3] + spm_units4: + members: [person4] + households: + households1: + members: [person1] + state_code: NV + households2: + members: [person2] + state_code: NV + households3: + members: [person3] + state_code: NV + households4: + members: [person4] + state_code: NV + output: + nv_oss: [24.27, 213.96, 0, 0] + +- name: Case 58, all individual categories in domiciliary care match the published rates. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 65 + is_blind: false + meets_ssi_disability_criteria: false + nv_oss_care_setting: DOMICILIARY_CARE + person2: + age: 40 + is_blind: true + meets_ssi_disability_criteria: false + nv_oss_care_setting: DOMICILIARY_CARE + person3: + age: 40 + is_blind: false + meets_ssi_disability_criteria: true + nv_oss_care_setting: DOMICILIARY_CARE + person4: + age: 40 + is_blind: false + meets_ssi_disability_criteria: false + nv_oss_care_setting: DOMICILIARY_CARE + marital_units: + marital_units1: + members: [person1] + marital_units2: + members: [person2] + marital_units3: + members: [person3] + marital_units4: + members: [person4] + tax_units: + tax_units1: + members: [person1] + tax_units2: + members: [person2] + tax_units3: + members: [person3] + tax_units4: + members: [person4] + spm_units: + spm_units1: + members: [person1] + spm_units2: + members: [person2] + spm_units3: + members: [person3] + spm_units4: + members: [person4] + households: + households1: + members: [person1] + state_code: NV + households2: + members: [person2] + state_code: NV + households3: + members: [person3] + state_code: NV + households4: + members: [person4] + state_code: NV + output: + nv_oss: [391, 391, 0, 0] diff --git a/policyengine_us/tests/policy/baseline/gov/states/nv/dwss/oss/nv_oss_living_arrangement.yaml b/policyengine_us/tests/policy/baseline/gov/states/nv/dwss/oss/nv_oss_living_arrangement.yaml new file mode 100644 index 00000000000..32a4814c83b --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/nv/dwss/oss/nv_oss_living_arrangement.yaml @@ -0,0 +1,77 @@ +# POMS SI SF01415.300 A-E: Nevada living arrangements and exclusions. +- name: Case 1, ordinary living uses independent living. + period: 2026-01 + input: + state_code: NV + output: + nv_oss_living_arrangement: INDEPENDENT_LIVING + +- name: Case 2, federal parental household uses independent living. + period: 2026-01 + input: + state_code: NV + ssi_federal_living_arrangement: CHILD_IN_PARENTAL_HOUSEHOLD + output: + nv_oss_living_arrangement: INDEPENDENT_LIVING + +- name: Case 3, federal one third reduction identifies another household. + period: 2026-01 + input: + state_code: NV + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + output: + nv_oss_living_arrangement: HOUSEHOLD_OF_ANOTHER + +- name: Case 4, state certification identifies domiciliary care. + period: 2026-01 + input: + state_code: NV + nv_oss_care_setting: DOMICILIARY_CARE + output: + nv_oss_living_arrangement: DOMICILIARY_CARE + +- name: Case 5, Medicaid majority funding overrides a conflicting care setting. + period: 2026-01 + input: + state_code: NV + nv_oss_care_setting: DOMICILIARY_CARE + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + output: + nv_oss_living_arrangement: NONE + +- name: Case 6, uncertified medical facility is excluded. + period: 2026-01 + input: + state_code: NV + nv_oss_care_setting: UNCERTIFIED_MEDICAL_FACILITY + output: + nv_oss_living_arrangement: NONE + +- name: Case 7, public emergency shelter is excluded. + period: 2026-01 + input: + state_code: NV + nv_oss_care_setting: PUBLIC_EMERGENCY_SHELTER + output: + nv_oss_living_arrangement: NONE + +- name: Case 8, outside Nevada defaults to no supplementation. + period: 2026-01 + input: + state_code: CA + output: + nv_oss_living_arrangement: NONE + +- name: Case 9, a child in domiciliary care keeps the federal living arrangement mapping. + period: 2026-01 + input: + state_code: NV + age: 17 + is_blind: true + nv_oss_care_setting: DOMICILIARY_CARE + output: + # SF01415.300 E lists no exclusion for children; FLA A gives OSS A. + nv_oss_living_arrangement: INDEPENDENT_LIVING diff --git a/policyengine_us/variables/gov/states/nv/dwss/oss/nv_oss.py b/policyengine_us/variables/gov/states/nv/dwss/oss/nv_oss.py new file mode 100644 index 00000000000..ced89214951 --- /dev/null +++ b/policyengine_us/variables/gov/states/nv/dwss/oss/nv_oss.py @@ -0,0 +1,41 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.ssa.ssi._ssi_state_supplement import ( + ssi_state_supplement, +) + + +class nv_oss(Variable): + value_type = float + entity = Person + definition_period = MONTH + unit = USD + label = "Nevada Optional State Supplementation" + defined_for = StateCode.NV + reference = ( + "https://secure.ssa.gov/poms.nsf/lnx/0501415058#i", + "https://www.leg.state.nv.us/NRS/NRS-422A.html#NRS422ASec070", + "https://www.ssa.gov/OP_Home/cfr20/416/416-2025.htm", + "https://secure.ssa.gov/poms.nsf/lnx/0501320430#d", + "https://secure.ssa.gov/poms.nsf/lnx/0502005030#g", + "https://secure.ssa.gov/poms.nsf/lnx/0502001005", + "https://secure.ssa.gov/poms.nsf/lnx/0502001010", + ) + + def formula(person, period, parameters): + p = parameters(period).gov.states.nv.dwss.oss.payment + arrangement = person("nv_oss_living_arrangement", period) + category = person("ssi_category", period.this_year) + # SSA administers Nevada's supplement (SI 01415.058 A), so the federal + # rounding and $1 minimum apply. Half of each member's same-category + # couple rate reproduces all mixed-category totals in SI 01415.058 I.2.b. + # Every Nevada couple rate is at least the individual rate, so spouse + # deeming compares against the couple rate (SI 01320.430 D.3.b). + # NOTE: couples living apart in different Nevada arrangements cannot + # be modeled, because the federal framework has no living-apart status. + return ssi_state_supplement( + person, + period, + parameters, + p.individual[arrangement][category], + p.couple[arrangement][category], + ) diff --git a/policyengine_us/variables/gov/states/nv/dwss/oss/nv_oss_care_setting.py b/policyengine_us/variables/gov/states/nv/dwss/oss/nv_oss_care_setting.py new file mode 100644 index 00000000000..8d9bac7dee5 --- /dev/null +++ b/policyengine_us/variables/gov/states/nv/dwss/oss/nv_oss_care_setting.py @@ -0,0 +1,28 @@ +from policyengine_us.model_api import * + + +class NVOssCareSetting(Enum): + DOMICILIARY_CARE = "State-certified domiciliary care" + UNCERTIFIED_MEDICAL_FACILITY = ( + "Private medical facility not certified under Medicaid" + ) + PUBLIC_EMERGENCY_SHELTER = "Public emergency shelter for the full month" + NONE = "No special Nevada supplementation care setting" + + +class nv_oss_care_setting(Variable): + value_type = Enum + entity = Person + definition_period = MONTH + label = "Nevada OSS care setting" + possible_values = NVOssCareSetting + default_value = NVOssCareSetting.NONE + reference = "https://secure.ssa.gov/poms.nsf/lnx/0501415300SF" + documentation = """ + Domiciliary care means a private nonmedical facility, or a public + nonmedical institution serving at most 16 people, licensed or authorized + by Nevada to provide personal care to unrelated adults. The uncertified + medical setting means a private facility not certified under Medicaid. + The public emergency shelter setting applies to residence throughout + the month. Other SSI medical-facility inputs continue to apply. + """ diff --git a/policyengine_us/variables/gov/states/nv/dwss/oss/nv_oss_living_arrangement.py b/policyengine_us/variables/gov/states/nv/dwss/oss/nv_oss_living_arrangement.py new file mode 100644 index 00000000000..1d91e90291f --- /dev/null +++ b/policyengine_us/variables/gov/states/nv/dwss/oss/nv_oss_living_arrangement.py @@ -0,0 +1,55 @@ +from policyengine_us.model_api import * + + +class NVOssLivingArrangement(Enum): + INDEPENDENT_LIVING = "Independent living or living in a parental household" + HOUSEHOLD_OF_ANOTHER = "Living in the household of another" + DOMICILIARY_CARE = "State-certified domiciliary care" + NONE = "No Nevada optional supplement" + + +class nv_oss_living_arrangement(Variable): + value_type = Enum + entity = Person + definition_period = MONTH + label = "Nevada OSS living arrangement" + possible_values = NVOssLivingArrangement + default_value = NVOssLivingArrangement.NONE + defined_for = StateCode.NV + reference = ( + "https://secure.ssa.gov/poms.nsf/lnx/0501415300SF", + "https://secure.ssa.gov/poms.nsf/lnx/0501415058#i", + ) + + def formula(person, period, parameters): + care = person("nv_oss_care_setting", period) + settings = care.possible_values + federal = person("ssi_federal_living_arrangement", period) + arrangements = federal.possible_values + excluded = ( + (federal == arrangements.MEDICAL_TREATMENT_FACILITY) + | (care == settings.UNCERTIFIED_MEDICAL_FACILITY) + | (care == settings.PUBLIC_EMERGENCY_SHELTER) + ) + # SF01415.300 C facilities serve adults, but E lists no exclusion for + # children, so a child in such a setting keeps the federal mapping + # (A.2: FLA A or a blind child in FLA C is OSS A). + domiciliary = (care == settings.DOMICILIARY_CARE) & ~person( + "is_child", period.this_year + ) + return select( + [ + excluded, + domiciliary, + federal == arrangements.ANOTHER_PERSONS_HOUSEHOLD, + (federal == arrangements.OWN_HOUSEHOLD) + | (federal == arrangements.CHILD_IN_PARENTAL_HOUSEHOLD), + ], + [ + NVOssLivingArrangement.NONE, + NVOssLivingArrangement.DOMICILIARY_CARE, + NVOssLivingArrangement.HOUSEHOLD_OF_ANOTHER, + NVOssLivingArrangement.INDEPENDENT_LIVING, + ], + default=NVOssLivingArrangement.NONE, + ) 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 02f7ed03df5..dddb58ad8ae 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 @@ -37,6 +37,7 @@ def formula(spm_unit, period, parameters): "mo_ssp", # Missouri benefits "mn_msa", # Minnesota benefits "ne_aabd", # Nebraska benefits + "nv_oss", # Nevada benefits # California programs. "ca_cvrp", # California Clean Vehicle Rebate Project. # California SSI state supplement (SSP). The formula nets federal