diff --git a/changelog.d/va-ssp-2026.added.md b/changelog.d/va-ssp-2026.added.md new file mode 100644 index 00000000000..714b781c8f5 --- /dev/null +++ b/changelog.d/va-ssp-2026.added.md @@ -0,0 +1 @@ +Add Virginia Auxiliary Grant for 2026. diff --git a/policyengine_us/parameters/gov/household/household_state_benefits.yaml b/policyengine_us/parameters/gov/household/household_state_benefits.yaml index d2cbd6ba2d4..63e548cfb70 100644 --- a/policyengine_us/parameters/gov/household/household_state_benefits.yaml +++ b/policyengine_us/parameters/gov/household/household_state_benefits.yaml @@ -73,6 +73,7 @@ values: - tx_ssi_state_supplement # Virginia benefits - va_child_care_subsidies + - va_ag # Massachusetts benefits - ma_eaedc # DC benefits @@ -165,6 +166,7 @@ values: - tx_ssi_state_supplement # Virginia benefits - va_child_care_subsidies + - va_ag # West Virginia benefits - wv_child_care_subsidies # North Carolina benefits @@ -267,6 +269,7 @@ values: - tx_ssi_state_supplement # Virginia benefits - va_child_care_subsidies + - va_ag # West Virginia benefits - wv_child_care_subsidies # North Carolina benefits @@ -370,6 +373,7 @@ values: - tx_ssi_state_supplement # Virginia benefits - va_child_care_subsidies + - va_ag # West Virginia benefits - wv_child_care_subsidies # North Carolina benefits @@ -401,6 +405,7 @@ values: - nj_property_tax_relief # New York benefits - ny_child_care_subsidies + metadata: unit: list period: year diff --git a/policyengine_us/parameters/gov/hud/annual_income/sources/unearned.yaml b/policyengine_us/parameters/gov/hud/annual_income/sources/unearned.yaml index 0df11213631..2ea82256abe 100644 --- a/policyengine_us/parameters/gov/hud/annual_income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/hud/annual_income/sources/unearned.yaml @@ -19,6 +19,7 @@ values: - strike_benefits - social_security - ssi + - va_ag - general_assistance - total_unemployment_compensation - child_support_received @@ -29,6 +30,7 @@ values: - disability_benefits - survivor_benefits - financial_assistance + metadata: unit: list period: year diff --git a/policyengine_us/parameters/gov/states/va/dars/ag/excluded_unearned_sources.yaml b/policyengine_us/parameters/gov/states/va/dars/ag/excluded_unearned_sources.yaml new file mode 100644 index 00000000000..0d17d75c45f --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dars/ag/excluded_unearned_sources.yaml @@ -0,0 +1,15 @@ +description: Virginia excludes these sources from countable unearned income under the Auxiliary Grant program. +values: + # Section 24.1.1 excludes interest and dividends earned on countable resources. + # Section 24.1.2 counts interest on some excluded resources, which the inputs + # do not identify, so all interest and dividends are excluded. + 2019-07-01: + - dividend_income + - interest_income + +metadata: + unit: list + label: Virginia Auxiliary Grant non-SSI excluded unearned income sources + reference: + - title: Virginia Auxiliary Grant Manual, Chapter I section 24.1 + href: https://townhall.virginia.gov/l/GetFile.cfm?File=C:%5CTownHall%5Cdocroot%5CGuidanceDocs%5C262%5CGDoc_DARS_5346_v2.pdf#page=439 diff --git a/policyengine_us/parameters/gov/states/va/dars/ag/northern_virginia_localities.yaml b/policyengine_us/parameters/gov/states/va/dars/ag/northern_virginia_localities.yaml new file mode 100644 index 00000000000..389c14d2b15 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dars/ag/northern_virginia_localities.yaml @@ -0,0 +1,23 @@ +description: Virginia applies the Planning District Eight care rate in these localities under the Auxiliary Grant program. +values: + 2026-01-01: + - ARLINGTON_COUNTY_VA + - FAIRFAX_COUNTY_VA + - LOUDOUN_COUNTY_VA + - PRINCE_WILLIAM_COUNTY_VA + - ALEXANDRIA_CITY_VA + - FAIRFAX_CITY_VA + - FALLS_CHURCH_CITY_VA + - MANASSAS_CITY_VA + - MANASSAS_PARK_CITY_VA + +metadata: + unit: list + label: Virginia Auxiliary Grant Northern Virginia localities + reference: + - title: Virginia Auxiliary Grant Manual, Supportive Housing, AG rate and approved provider listing + href: https://townhall.virginia.gov/l/GetFile.cfm?File=C:%5CTownHall%5Cdocroot%5CGuidanceDocs%5C262%5CGDoc_DARS_5346_v2.pdf#page=542 + - title: Virginia Auxiliary Grant January 2026 rate letter + href: https://www.dss.virginia.gov/media/vdss/licensing/documents/assisted-living-facilities/additional-resources/ARC2026_ag_rate_letter.pdf + - title: Virginia 2026 Appropriation Act, Item 332 A + href: https://budget.lis.virginia.gov/item/2026/2/HB30/Chapter/1/332/ diff --git a/policyengine_us/parameters/gov/states/va/dars/ag/personal_needs_allowance.yaml b/policyengine_us/parameters/gov/states/va/dars/ag/personal_needs_allowance.yaml new file mode 100644 index 00000000000..344784943fc --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dars/ag/personal_needs_allowance.yaml @@ -0,0 +1,17 @@ +description: Virginia provides this monthly personal needs allowance under the Auxiliary Grant program. +values: + 2024-01-01: 87 + +metadata: + unit: currency-USD + period: month + label: Virginia Auxiliary Grant personal needs allowance + reference: + - title: Va. Code ยง 51.5-160(C) + href: https://law.lis.virginia.gov/vacode/title51.5/chapter14/section51.5-160/ + - title: Virginia Auxiliary Grant January 2026 rate letter + href: https://www.dss.virginia.gov/media/vdss/licensing/documents/assisted-living-facilities/additional-resources/ARC2026_ag_rate_letter.pdf + - title: Virginia 2025 Appropriation Act, Item 328 A + href: https://budget.lis.virginia.gov/item/2025/1/HB1600/Chapter/1/328/ + - title: Virginia 2026 Appropriation Act, Item 332 A + href: https://budget.lis.virginia.gov/item/2026/2/HB30/Chapter/1/332/ diff --git a/policyengine_us/parameters/gov/states/va/dars/ag/proration_days.yaml b/policyengine_us/parameters/gov/states/va/dars/ag/proration_days.yaml new file mode 100644 index 00000000000..ccdb5b05f01 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dars/ag/proration_days.yaml @@ -0,0 +1,11 @@ +description: Virginia divides the monthly care rate by this number of days to prorate the entry month under the Auxiliary Grant program. +values: + 2017-07-01: 30 + +metadata: + unit: day + period: month + label: Virginia Auxiliary Grant proration days + reference: + - title: Virginia Auxiliary Grant Manual, Chapter J section 3.3 + href: https://townhall.virginia.gov/l/GetFile.cfm?File=C:%5CTownHall%5Cdocroot%5CGuidanceDocs%5C262%5CGDoc_DARS_5346_v2.pdf#page=522 diff --git a/policyengine_us/parameters/gov/states/va/dars/ag/rate/fbr_offset.yaml b/policyengine_us/parameters/gov/states/va/dars/ag/rate/fbr_offset.yaml new file mode 100644 index 00000000000..840527cde2e --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dars/ag/rate/fbr_offset.yaml @@ -0,0 +1,23 @@ +description: Virginia sets the maximum monthly care rate outside Planning District Eight at this amount above the federal Supplemental Security Income benefit rate under the Auxiliary Grant program. +values: + # Derived, not stated in law: 2,130 - 994 = 1,136 (2,103 - 967 and + # 2,079 - 943 also give 1,136). Tying the rate to the FBR passes through + # federal increases (Item 332 A.3; 20 CFR 416.2096); a reform that lowered + # the FBR would also lower this rate below the appropriated amount. + 2026-01-01: 1_136 + +metadata: + unit: currency-USD + period: month + label: Virginia Auxiliary Grant care rate offset above the SSI federal benefit rate + reference: + - title: 22VAC30-80-50 + href: https://law.lis.virginia.gov/admincode/title22/agency30/chapter80/section50/ + - title: Virginia Auxiliary Grant January 2026 rate letter + href: https://www.dss.virginia.gov/media/vdss/licensing/documents/assisted-living-facilities/additional-resources/ARC2026_ag_rate_letter.pdf + - title: Virginia 2025 Appropriation Act, Item 328 A + href: https://budget.lis.virginia.gov/item/2025/1/HB1600/Chapter/1/328/ + - title: Virginia 2026 Appropriation Act, Item 332 A + href: https://budget.lis.virginia.gov/item/2026/2/HB30/Chapter/1/332/ + - title: 20 CFR 416.2096 + href: https://www.ecfr.gov/current/title-20/chapter-III/part-416/subpart-T/section-416.2096 diff --git a/policyengine_us/parameters/gov/states/va/dars/ag/rate/northern_virginia_differential.yaml b/policyengine_us/parameters/gov/states/va/dars/ag/rate/northern_virginia_differential.yaml new file mode 100644 index 00000000000..b9b1a15091c --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dars/ag/rate/northern_virginia_differential.yaml @@ -0,0 +1,15 @@ +description: Virginia increases the maximum monthly care rate by this share in Planning District Eight under the Auxiliary Grant program. +values: + 2026-01-01: 0.15 + +metadata: + unit: /1 + period: year + label: Virginia Auxiliary Grant Planning District Eight care rate differential + reference: + - title: Virginia 2026 Appropriation Act, Item 332 A.1 + href: https://budget.lis.virginia.gov/item/2026/2/HB30/Chapter/1/332/ + - title: Virginia 2025 Appropriation Act, Item 328 A.1 + href: https://budget.lis.virginia.gov/item/2025/1/HB1600/Chapter/1/328/ + - title: Virginia Auxiliary Grant January 2026 rate letter + href: https://www.dss.virginia.gov/media/vdss/licensing/documents/assisted-living-facilities/additional-resources/ARC2026_ag_rate_letter.pdf 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 e9baee603e8..c0b7e1e88d6 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: - nm_ssi_state_supplement - sc_ssi_state_supplement - tx_ssi_state_supplement + - va_ag - wa_ssp # Listed elsewhere: ca_state_supplement is an SPM unit variable with no # person-level counterpart. policyengine-core projects a group value onto @@ -95,9 +96,7 @@ values: metadata: reference: - - title: 7 CFR 273.9(b)(2) - href: https://www.law.cornell.edu/cfr/text/7/273.9#b_2 - - title: 7 CFR 273.9(c)(1) - href: https://www.law.cornell.edu/cfr/text/7/273.9#c_1 + - title: 7 CFR 273.9(b)(2) and (c)(1) + href: https://www.law.cornell.edu/cfr/text/7/273.9 - title: POMS SI 01401.001 General Information about State Supplementation href: https://secure.ssa.gov/poms.nsf/lnx/0501401001 diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index 5250ab3aa89..6284be2c418 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -1093,6 +1093,16 @@ programs: tracks. Unmodeled paths: grandfathered medically-needy-in-medical- institution recipients per WAC 388-478-0055(2)(b); DDA-determined / PVL track per (2)(f); and foster child in BRS per (2)(g). + - state: VA + status: partial + name: Virginia Auxiliary Grant + full_name: Virginia Auxiliary Grant + variable: va_ag + parameter_prefix: gov.states.va.dars.ag + verified_years: '2026' + notes: Models 2026 locality rates and SSI and non-SSI budgets for certified assisted living, + adult foster care and supportive housing residents. Conditional resource benefits and + historical grandfathering are not modeled. - id: social_security name: Social Security diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dars/ag/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dars/ag/integration.yaml new file mode 100644 index 00000000000..25228f8d9a3 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dars/ag/integration.yaml @@ -0,0 +1,328 @@ +- name: Case 1, separate SSI claims. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 65 + va_ag_certified: true + person2: + age: 65 + va_ag_certified: true + # After the entry month spouses sharing a facility are individuals for + # SSI (POMS SI 00501.154 B), so they sit in separate marital units. + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + tax_units: + unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + ssi: [994, 994] + va_ag: [1_223, 1_223] + +- name: Case 2, joint SSI couple claim. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 65 + va_ag_certified: true + person2: + age: 65 + va_ag_certified: true + marital_units: + couple: + members: [person1, person2] + tax_units: + unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # Both aged spouses claim SSI jointly: 1,491 / 2 = 745.50 each. + ssi_claim_is_joint: [true, true] + ssi: [745.5, 745.5] + # Chapter D: SSA's gross SSI plus net income, 745.50 + 0. + va_ag_countable_income: [745.5, 745.5] + # 2,130 + 87 - 745.50 = 1,471.50, rounded up to 1,472. + va_ag: [1_472, 1_472] + +- name: Case 3, spouse at home has income deemed in the resident's entry month. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 65 + va_ag_certified: true + person2: + age: 63 + social_security_retirement: 18_000 + marital_units: + couple: + members: [person1, person2] + tax_units: + unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # In the entry month the spouses are still one marital unit, and + # 20 CFR 416.1163(f)(2) stops deeming only from the following month + # (Case 6). person2 (63, not disabled) is not SSI-eligible, so SSI + # deems 1,500 - 20 = 1,480: 1,491 - 1,480 = 11. + ssi: [11, 0] + # Chapter D (p. 126) uses SSA's amounts: 1,480 + 11 = 1,491. + # person2's own non-SSI budget is 1,500 - 20 = 1,480. + va_ag_countable_income: [1_491, 1_480] + # 2,130 + 87 - 1,491 = 726; person2 is not certified. + va_ag: [726, 0] + +- name: Case 4, initial couple resource limit. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 65 + va_ag_certified: true + va_ag_is_joint_initial_month: true + ssi_countable_resources: 1_500 + person2: + age: 65 + va_ag_certified: true + va_ag_is_joint_initial_month: true + ssi_countable_resources: 1_501 + marital_units: + couple: + members: [person1, person2] + tax_units: + unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + va_ag: [0, 0] + +- name: Case 5, annual grant and SNAP income. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + output: + va_ag: 14_676 + household_state_benefits: 14_676 + snap_unearned_income: 26_604 + hud_unearned_income: 26_604 + +- name: Case 6, moderate earnings spouse in a separate marital unit is not deemed in ongoing care. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + va_ag_certified: true + person2: + age: 60 + employment_income: 30_000 + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + tax_units: + unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # After the entry month the spouse sits in a separate marital unit, + # so none of the spouse's 2,500 monthly earnings is deemed. + is_ssi_spousal_deeming_applies: [false, false] + ssi_income_deemed_from_ineligible_spouse: [0, 0] + ssi_countable_income: [0, 0] + # person1 gets the individual FBR: 994 - 0 = 994. + # person2 (60, not disabled) is not SSI-eligible. + uncapped_ssi: [994, 0] + ssi: [994, 0] + va_ag_eligible: [true, false] + va_ag_maximum_care_rate: [2_130, 2_130] + # Countable income 0 + 994 = 994; 2,130 + 87 - 994 = 1,223. + # In one marital unit, (2,500 - 85) * 0.5 = 1,207.50 would be deemed: + # SSI 1,491 - 1,207.50 = 283.50 and the grant 2,217 - 1,491 = 726. + va_ag: [1_223, 0] + +- name: Case 7, couple entering care together pools income in the initial month. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + va_ag_certified: true + va_ag_is_joint_initial_month: true + social_security_retirement: 19_200 + person2: + age: 70 + va_ag_certified: true + va_ag_is_joint_initial_month: true + social_security_retirement: 19_200 + marital_units: + couple: + members: [person1, person2] + tax_units: + unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # Both spouses are aged, so SSI uses the couple computation. + ssi_claim_is_joint: [true, true] + ssi_couple_computation_applies: [true, true] + # 1,491 / 2 = 745.50 each. + ssi_amount_if_eligible: [745.5, 745.5] + # (1,600 + 1,600 - 20) / 2 = 1,590 each. + ssi_countable_income: [1_590, 1_590] + # 745.50 - 1,590 = -844.50, so no SSI. + uncapped_ssi: [-844.5, -844.5] + ssi: [0, 0] + # Pooled resources 0 are within the 3,000 couple limit. + va_ag_eligible: [true, true] + va_ag_maximum_care_rate: [2_130, 2_130] + # Non-SSI budget pools 3,200, takes one 20 exclusion and halves: + # (3,200 - 20) / 2 = 1,590 each (separate budgets would give 1,580). + va_ag_countable_income: [1_590, 1_590] + # 2,130 + 87 - 1,590 = 627 each (637 without the joint flag). + va_ag: [627, 627] + +- name: Case 8, asymmetric non SSI couple budgets separately after the initial month. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + va_ag_certified: true + social_security_retirement: 30_000 + person2: + age: 70 + va_ag_certified: true + social_security_retirement: 18_000 + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + tax_units: + unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # After the initial month SSA treats spouses sharing a facility as + # individuals (POMS SI 00501.154 B): 2,500 - 20 = 2,480 and + # 1,500 - 20 = 1,480, both above 994, so no SSI. + ssi_countable_income: [2_480, 1_480] + ssi: [0, 0] + va_ag_eligible: [true, true] + # Chapter B section 6: after the initial month each spouse is a separate unit. + # 2,500 - 20 = 2,480 and 1,500 - 20 = 1,480. + va_ag_countable_income: [2_480, 1_480] + # 2,217 - 2,480 is below 0, so 0; 2,217 - 1,480 = 737. + va_ag: [0, 737] + +- name: Case 9, asymmetric non SSI couple pools income in the initial month. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + va_ag_certified: true + va_ag_is_joint_initial_month: true + social_security_retirement: 30_000 + person2: + age: 70 + va_ag_certified: true + va_ag_is_joint_initial_month: true + social_security_retirement: 18_000 + marital_units: + couple: + members: [person1, person2] + tax_units: + unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + ssi_claim_is_joint: [true, true] + ssi_couple_computation_applies: [true, true] + ssi_countable_income: [1_990, 1_990] + # 745.50 - 1,990 = -1,244.50, so no SSI. + uncapped_ssi: [-1_244.5, -1_244.5] + ssi: [0, 0] + va_ag_eligible: [true, true] + # Both entered care on January 1, so the month is not prorated. + # The pooled 4,000 gets one 20 exclusion and is halved: (4,000 - 20) / 2 = 1,990. + va_ag_countable_income: [1_990, 1_990] + # 2,130 + 87 - 1,990 = 227 each (separate budgets give [0, 737]). + va_ag: [227, 227] + +- name: Case 10, initial-month couple flag entered for January budgets the spouses separately in February. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + va_ag_certified: true + va_ag_is_joint_initial_month: + 2026-01: true + social_security_retirement: 19_200 + person2: + age: 70 + va_ag_certified: true + va_ag_is_joint_initial_month: + 2026-01: true + social_security_retirement: 19_200 + marital_units: + couple: + members: [person1, person2] + tax_units: + unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # January pools the couple (Case 7): 2,217 - 1,590 = 627 each. + # February: each spouse is a separate unit: 2,217 - (1,600 - 20) = 637. + va_ag: + 2026-01: [627, 627] + 2026-02: [637, 637] diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dars/ag/va_ag.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dars/ag/va_ag.yaml new file mode 100644 index 00000000000..0f21c77ff63 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dars/ag/va_ag.yaml @@ -0,0 +1,406 @@ +- name: Case 1, full SSI with standard care rate. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + output: + va_ag: 1_223 + +- name: Case 2, Northern Virginia facility. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + county: FAIRFAX_COUNTY_VA + output: + va_ag: 1_543 + +- name: Case 3, Northern Virginia independent city. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + county: MANASSAS_PARK_CITY_VA + output: + va_ag: 1_543 + +- name: Case 4, state only grant. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + social_security_retirement: 24_000 + output: + va_ag: 237 + +- name: Case 5, earned income while receiving SSI. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + employment_income: 7_200 + output: + va_ag: 1_223 + +- name: Case 6, benefit rounds a half dollar up. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 50 + va_ag_certified: true + meets_ssi_disability_criteria: true + social_security_disability: 18_000 + employment_income: 7_224 + output: + # Earnings of 602 a month are below the 1,690 SGA level, so SSI disabled. + # Countable: (1,500 - 20) + (602 - 65) * 0.5 = 1,748.50 > 994, so SSI is 0. + # Need 2,130 + 87 = 2,217; 2,217 - 1,748.50 = 468.50, rounded up to 469 + # (half-to-even rounding would give 468). + va_ag: 469 + +- name: Case 7, deficiency cents below fifty round down. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + county: ARLINGTON_COUNTY_VA + va_ag_partial_month_days: 14 + output: + # Entry on January 18 gives 14 days: 2,450 / 30 * 14 = 1,143.33. + # Need 1,143.33 + 87 = 1,230.33; SSI 994 makes countable income 994. + # 1,230.33 - 994 = 236.33, rounded down to 236. + va_ag: 236 + +- name: Case 8, income above need standard. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + social_security_retirement: 24_000 + pension_income: 6_000 + output: + # Countable: 2,000 + 500 - 20 = 2,480 > 994, so SSI is 0. + # 2,480 exceeds the 2,217 need, so no grant. + va_ag: 0 + +- name: Case 9, resources at limit. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + ssi_countable_resources: 2_000 + output: + va_ag: 1_223 + +- name: Case 10, excess resources. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + ssi_countable_resources: 2_001 + output: + va_ag: 0 + +- name: Case 11, no approved care. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: false + output: + va_ag: 0 + +- name: Case 12, nonresident. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: NC + age: 65 + va_ag_certified: true + output: + va_ag: 0 + +- name: Case 13, not aged blind or disabled. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 40 + va_ag_certified: true + output: + va_ag: 0 + +- name: Case 14, certified disabled adult. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 18 + va_ag_certified: true + meets_ssi_disability_criteria: true + output: + va_ag: 1_223 + +- name: Case 15, certified blind adult. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 45 + va_ag_certified: true + is_blind: true + output: + # Blindness qualifies for SSI at any age: SSI 994, countable income 994. + # 2,217 - 994 = 1,223. + va_ag: 1_223 + +- name: Case 16, first month fifteen days of care. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + va_ag_partial_month_days: 15 + output: + va_ag: 158 + +- name: Case 17, partial-month days equal to the month length are a full month. + period: 2026-02 + absolute_error_margin: 0.01 + input: + state_code: + 2026: VA + age: + 2026: 65 + va_ag_certified: true + va_ag_partial_month_days: 28 + output: + # 28 days covers all of February, so the rate is not prorated: + # 2,130 + 87 - 994 = 1,223. + va_ag: 1_223 + +- name: Case 18, first month community expenses. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + va_ag_partial_month_days: 15 + va_ag_allowable_income_exclusions: 400 + output: + va_ag: 558 + +- name: Case 19, guardianship fee increases grant. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + va_ag_allowable_income_exclusions: 10 + output: + va_ag: 1_233 + +- name: Case 20, actual approved rate below maximum. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + va_ag_facility_rate: 1_500 + output: + va_ag: 593 + +- name: Case 21, interest on countable resources is not counted for a non SSI applicant. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + social_security_retirement: 24_000 + ssi_countable_resources: 2_000 + interest_income: 60 + output: + # SSI counts the 5 monthly interest: 2,000 + 5 - 20 = 1,985 > 994, so SSI is 0. + # The AG budget excludes it: 2,000 - 20 = 1,980 (resources 2,000 at the limit). + # 2,217 - 1,980 = 237; counting the interest would give 232. + va_ag: 237 + +- name: Case 22, noncitizen who is not a qualified alien. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + immigration_status: UNDOCUMENTED + output: + # Chapter C section 9.4 limits eligibility to qualified aliens. + # SSI is also 0, so without the gate the non-SSI budget would pay 2,217. + ssi: 0 + va_ag_eligible: false + va_ag: 0 + +- name: Case 23, incarcerated person. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + is_incarcerated: true + output: + va_ag_eligible: false + va_ag: 0 + +- name: Case 24, approved facility rate above the maximum is capped. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + va_ag_facility_rate: 2_500 + output: + va_ag_maximum_care_rate: 2_130 + va_ag_care_rate: 2_130 + # 2,500 is capped at 2,130: 2,130 + 87 - 994 = 1,223 (uncapped 1,593). + va_ag: 1_223 + +- name: Case 25, applicant who appears eligible for SSI but does not apply is denied. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + takes_up_ssi_if_eligible: false + output: + # With no income the applicant meets SSI income standards (uncapped SSI + # 994), so Chapter C 8.2.2 requires an SSI application and 8.2.2.2.1 + # denies the grant without one; otherwise the grant would pay 2,217. + uncapped_ssi: 994 + ssi: 0 + va_ag_eligible: false + va_ag: 0 + +- name: Case 26, applicant over the SSI income limit need not apply for SSI. + period: 2026-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + takes_up_ssi_if_eligible: false + social_security_retirement: 24_000 + output: + # 994 - (2,000 - 20) = -986, so Chapter C 8.2.1 does not require an SSI + # application: 2,217 - 1,980 = 237. + uncapped_ssi: -986 + va_ag_eligible: true + va_ag: 237 + +- name: Case 27, unrelated residents with a facility rate and a partial month. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 65 + va_ag_certified: true + va_ag_facility_rate: 1_500 + person2: + age: 65 + va_ag_certified: true + va_ag_partial_month_days: 15 + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # Each input applies only to its own resident. + va_ag_care_rate: [1_500, 2_130] + # person1: 1,500 + 87 - 994 = 593. + # person2: 2,130 / 30 * 15 = 1,065; 1,065 + 87 - 994 = 158. + va_ag: [593, 158] + +- name: Case 28, partial-month days do not carry into the next month. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + va_ag_partial_month_days: + 2026-02: 27 + output: + # February: 2,130 / 30 * 27 = 1,917; 1,917 + 87 - 994 = 1,010. + # March is a full month again: 2,130 + 87 - 994 = 1,223. + va_ag: + 2026-02: 1_010 + 2026-03: 1_223 + +- name: Case 29, standard rate follows the federal benefit rate in 2027. + period: 2027-01 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + output: + # The maximum rate is the federal benefit rate plus 1,136, so for an + # SSI-only resident the grant stays 1,136 + 87 = 1,223 whatever the FBR. + va_ag: 1_223 + +- name: Case 30, entry-month community expenses do not carry into the next month. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: VA + age: 65 + va_ag_certified: true + va_ag_partial_month_days: + 2026-01: 15 + va_ag_allowable_income_exclusions: + 2026-01: 400 + output: + # January: 2,130 / 30 * 15 = 1,065; countable income 994 - 400 = 594; + # 1,065 + 87 - 594 = 558. + # February has no exclusion and a full month: 2,130 + 87 - 994 = 1,223. + va_ag: + 2026-01: 558 + 2026-02: 1_223 diff --git a/policyengine_us/variables/gov/states/va/dars/ag/va_ag.py b/policyengine_us/variables/gov/states/va/dars/ag/va_ag.py new file mode 100644 index 00000000000..cfc3f714617 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dars/ag/va_ag.py @@ -0,0 +1,26 @@ +from policyengine_us.model_api import * + + +class va_ag(Variable): + value_type = float + entity = Person + label = "Virginia Auxiliary Grant" + definition_period = MONTH + unit = USD + defined_for = "va_ag_eligible" + reference = ( + "https://law.lis.virginia.gov/vacode/title51.5/chapter14/section51.5-160/", + "https://law.lis.virginia.gov/admincode/title22/agency30/chapter80/section50/", + # PDF pages 519-520, 522, 524 + "https://townhall.virginia.gov/l/GetFile.cfm?File=C:%5CTownHall%5Cdocroot%5CGuidanceDocs%5C262%5CGDoc_DARS_5346_v2.pdf#page=519", + ) + + def formula(person, period, parameters): + p = parameters(period).gov.states.va.dars.ag + rate = person("va_ag_care_rate", period) + days = person("va_ag_partial_month_days", period) + partial_month = (days > 0) & (days < period.days) + rate = where(partial_month, rate / p.proration_days * days, rate) + need = rate + p.personal_needs_allowance + deficiency = max_(need - person("va_ag_countable_income", period), 0) + return np.floor(deficiency + 0.5) diff --git a/policyengine_us/variables/gov/states/va/dars/ag/va_ag_allowable_income_exclusions.py b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_allowable_income_exclusions.py new file mode 100644 index 00000000000..2cf813d5192 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_allowable_income_exclusions.py @@ -0,0 +1,24 @@ +from policyengine_us.model_api import * + + +class va_ag_allowable_income_exclusions(Variable): + value_type = float + entity = Person + label = "Virginia Auxiliary Grant allowable state income exclusions" + definition_period = MONTH + unit = USD + # PDF pages 127-132, 369-379, 383 + reference = "https://townhall.virginia.gov/l/GetFile.cfm?File=C:%5CTownHall%5Cdocroot%5CGuidanceDocs%5C262%5CGDoc_DARS_5346_v2.pdf#page=127" + documentation = """ + Total verified Virginia exclusions after applying Chapter D section 6 or + Chapter H: entry-month community expenses, the applicable spouse/child + allocation, and court-authorized guardianship fees. Enter only the allowed + amount, not total expenses. These adjustments are additional to federal + SSI exclusions. A percentage guardianship fee that includes the grant is + calculated using the grant before that fee, as in Chapter D section 6.4.1.2.2. + Key each amount to its month; a yearly entry is spread evenly over the months. + """ + + def formula(person, period, parameters): + # A formula stops a one-month input from carrying into later months. + return 0 diff --git a/policyengine_us/variables/gov/states/va/dars/ag/va_ag_care_rate.py b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_care_rate.py new file mode 100644 index 00000000000..45aef76c512 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_care_rate.py @@ -0,0 +1,15 @@ +from policyengine_us.model_api import * + + +class va_ag_care_rate(Variable): + value_type = float + entity = Person + label = "Virginia Auxiliary Grant approved monthly care rate" + definition_period = MONTH + unit = USD + reference = "https://www.dss.virginia.gov/media/vdss/licensing/documents/assisted-living-facilities/additional-resources/ARC2026_ag_rate_letter.pdf" + + def formula(person, period, parameters): + maximum = person("va_ag_maximum_care_rate", period) + facility_rate = person("va_ag_facility_rate", period) + return where(facility_rate > 0, min_(facility_rate, maximum), maximum) diff --git a/policyengine_us/variables/gov/states/va/dars/ag/va_ag_certified.py b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_certified.py new file mode 100644 index 00000000000..7e656f08df1 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_certified.py @@ -0,0 +1,15 @@ +from policyengine_us.model_api import * + + +class va_ag_certified(Variable): + value_type = bool + entity = Person + label = "Certified for Virginia Auxiliary Grant care" + definition_period = MONTH + default_value = False + reference = ( + "https://law.lis.virginia.gov/admincode/title22/agency30/chapter80/section10/", + # PDF pages 69, 83-95 + "https://townhall.virginia.gov/l/GetFile.cfm?File=C:%5CTownHall%5Cdocroot%5CGuidanceDocs%5C262%5CGDoc_DARS_5346_v2.pdf#page=69", + ) + documentation = """An approved assisted living, adult foster care or supportive housing placement with the required needs assessment. Includes the Virginia residency period or exception, pursuit of other benefits, and satisfaction of applicable transfer, public-institution and nonfinancial conditions. These are adult settings, so certification also covers the program's adult requirement. Marital units cannot change within a simulation. For months after spouses stop living in the same household, such as months after the entry month of a resident whose spouse stays at home, put them in separate marital units so that SSI and the Auxiliary Grant treat each spouse as an individual. Simulate the month of entry, including the initial month both spouses enter care together, with one marital unit.""" diff --git a/policyengine_us/variables/gov/states/va/dars/ag/va_ag_countable_income.py b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_countable_income.py new file mode 100644 index 00000000000..314011cd7d3 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_countable_income.py @@ -0,0 +1,59 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.ssa.ssi.eligibility.income._apply_ssi_exclusions import ( + _apply_ssi_exclusions, +) + + +class va_ag_countable_income(Variable): + value_type = float + entity = Person + label = "Virginia Auxiliary Grant countable income" + definition_period = MONTH + unit = USD + # PDF pages 34-35, 123, 126-128, 369-374, 439 + reference = "https://townhall.virginia.gov/l/GetFile.cfm?File=C:%5CTownHall%5Cdocroot%5CGuidanceDocs%5C262%5CGDoc_DARS_5346_v2.pdf#page=34" + documentation = """ + SSI recipients use SSA's net countable income plus the SSI payment. After + the initial month each spouse in care is a separate case and a spouse's + income is not deemed. + """ + + def formula(person, period, parameters): + p = parameters(period).gov.states.va.dars.ag + joint = ( + person.marital_unit.sum(person("va_ag_is_joint_initial_month", period)) == 2 + ) + # NOTE: AG Manual Chapter H's exclusion list (p. 370) does not name the + # SSI student earned income exclusion, while Chapter D (p. 123) + # requires SSI policy; the model keeps the SSI exclusion. + earned = max_( + person("ssi_earned_income", period) + - person("ssi_blind_or_disabled_working_student_exclusion", period), + 0, + ) + unearned = max_( + person("ssi_unearned_income", period) + - add(person, period, p.excluded_unearned_sources), + 0, + ) + earned = where(joint, person.marital_unit.sum(earned), earned) + unearned = where(joint, person.marital_unit.sum(unearned), unearned) + non_ssi_countable = ( + _apply_ssi_exclusions( + earned * MONTHS_IN_YEAR, unearned * MONTHS_IN_YEAR, parameters, period + ) + / MONTHS_IN_YEAR + ) + non_ssi_countable = where(joint, non_ssi_countable / 2, non_ssi_countable) + ssi = person("ssi", period) + # Chapter D uses SSA's verified net income for current SSI recipients; + # non-SSI institutional recipients have individual income budgets. + # NOTE: in the entry month of a resident whose spouse stays home, SSA + # still deems the spouse's income and Chapter D uses SSA's amounts, + # although Chapter B section 6 makes the assistance unit the applicant + # only. + countable = where( + ssi > 0, person("ssi_countable_income", period) + ssi, non_ssi_countable + ) + exclusions = max_(person("va_ag_allowable_income_exclusions", period), 0) + return max_(countable - exclusions, 0) diff --git a/policyengine_us/variables/gov/states/va/dars/ag/va_ag_eligible.py b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_eligible.py new file mode 100644 index 00000000000..acc268b6f8e --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_eligible.py @@ -0,0 +1,40 @@ +from policyengine_us.model_api import * + + +class va_ag_eligible(Variable): + value_type = bool + entity = Person + label = "Virginia Auxiliary Grant non-income eligibility" + definition_period = MONTH + defined_for = StateCode.VA + # PDF pages 75-78, 93-96, 102-103, 125, 152 + reference = "https://townhall.virginia.gov/l/GetFile.cfm?File=C:%5CTownHall%5Cdocroot%5CGuidanceDocs%5C262%5CGDoc_DARS_5346_v2.pdf#page=75" + + def formula(person, period, parameters): + immigration = person("immigration_status", period.this_year) + citizen = immigration == immigration.possible_values.CITIZEN + immigrant = person("is_ssi_qualified_noncitizen", period.this_year) + joint = ( + person.marital_unit.sum(person("va_ag_is_joint_initial_month", period)) == 2 + ) + resources = person("ssi_countable_resources", period.this_year) + resources = where(joint, person.marital_unit.sum(resources), resources) + limits = parameters(period).gov.ssa.ssi.eligibility.resources.limit + receives_ssi = (person("ssi", period) > 0) | person("receives_ssi", period) + resource_eligible = receives_ssi | ( + resources <= where(joint, limits.couple, limits.individual) + ) + # Chapter C 8.2.2: an applicant who appears to meet SSI income standards + # must apply for SSI, and 8.2.2.2.1 denies AG otherwise; 8.2.1 exempts + # an applicant over income for SSI. + pursues_ssi = person("takes_up_ssi_if_eligible", period.this_year) | ( + person("uncapped_ssi", period) <= 0 + ) + return ( + person("va_ag_certified", period) + & person("is_ssi_aged_blind_disabled", period.this_year) + & (citizen | immigrant) + & resource_eligible + & ~person("is_incarcerated", period) + & pursues_ssi + ) diff --git a/policyengine_us/variables/gov/states/va/dars/ag/va_ag_facility_rate.py b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_facility_rate.py new file mode 100644 index 00000000000..ae90254d0d3 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_facility_rate.py @@ -0,0 +1,16 @@ +from policyengine_us.model_api import * + + +class va_ag_facility_rate(Variable): + value_type = float + entity = Person + label = "Virginia Auxiliary Grant approved facility monthly rate below the maximum" + definition_period = MONTH + unit = USD + defined_for = StateCode.VA + default_value = 0 + documentation = "The monthly rate approved for the resident's licensed assisted living facility when it is below the locality maximum; adult foster care homes use the maximum. Leave at 0 to use the maximum; a higher entry is capped at the maximum." + reference = ( + "https://budget.lis.virginia.gov/item/2026/2/HB30/Chapter/1/332/", + "https://townhall.virginia.gov/l/GetFile.cfm?File=C:%5CTownHall%5Cdocroot%5CGuidanceDocs%5C262%5CGDoc_DARS_5346_v2.pdf#page=520", + ) diff --git a/policyengine_us/variables/gov/states/va/dars/ag/va_ag_is_joint_initial_month.py b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_is_joint_initial_month.py new file mode 100644 index 00000000000..28c19795f2f --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_is_joint_initial_month.py @@ -0,0 +1,23 @@ +from policyengine_us.model_api import * + + +class va_ag_is_joint_initial_month(Variable): + value_type = bool + entity = Person + label = "Virginia Auxiliary Grant couple in the initial month" + definition_period = MONTH + default_value = False + # PDF pages 34-35 + reference = "https://townhall.virginia.gov/l/GetFile.cfm?File=C:%5CTownHall%5Cdocroot%5CGuidanceDocs%5C262%5CGDoc_DARS_5346_v2.pdf#page=34" + documentation = """ + The Chapter B section 6 initial-month exception, under which the assistance + unit contains both spouses. Set for both spouses only in the initial + application month when both were married and lived together at the start + of the month, entered approved care, applied, and were found eligible that + month. Simulate that month with both spouses in one marital unit. In later + months each spouse is a separate case. + """ + + def formula(person, period, parameters): + # A formula stops a one-month input from carrying into later months. + return False diff --git a/policyengine_us/variables/gov/states/va/dars/ag/va_ag_maximum_care_rate.py b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_maximum_care_rate.py new file mode 100644 index 00000000000..94dd62d7a66 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_maximum_care_rate.py @@ -0,0 +1,30 @@ +from policyengine_us.model_api import * + + +class va_ag_maximum_care_rate(Variable): + value_type = float + entity = Person + label = "Virginia Auxiliary Grant maximum monthly care rate" + definition_period = MONTH + unit = USD + reference = ( + "https://www.dss.virginia.gov/media/vdss/licensing/documents/assisted-living-facilities/additional-resources/ARC2026_ag_rate_letter.pdf", + "https://budget.lis.virginia.gov/item/2026/2/HB30/Chapter/1/332/", + # PDF pages 520, 542 + "https://townhall.virginia.gov/l/GetFile.cfm?File=C:%5CTownHall%5Cdocroot%5CGuidanceDocs%5C262%5CGDoc_DARS_5346_v2.pdf#page=520", + ) + + def formula(person, period, parameters): + p = parameters(period).gov.states.va.dars.ag + fbr = parameters(period).gov.ssa.ssi.amount.individual + standard = fbr + p.rate.fbr_offset + # The published $2,450 Planning District Eight rate is 2,130 x 1.15 + # rounded to the nearest dollar; the rounding is inferred. + northern_rate = np.floor( + standard * (1 + p.rate.northern_virginia_differential) + 0.5 + ) + northern = np.isin( + person.household("county_str", period.this_year), + p.northern_virginia_localities, + ) + return where(northern, northern_rate, standard) diff --git a/policyengine_us/variables/gov/states/va/dars/ag/va_ag_partial_month_days.py b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_partial_month_days.py new file mode 100644 index 00000000000..6bf3160120d --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dars/ag/va_ag_partial_month_days.py @@ -0,0 +1,16 @@ +from policyengine_us.model_api import * + + +class va_ag_partial_month_days(Variable): + value_type = int + entity = Person + label = "Virginia Auxiliary Grant days in care in a partial entry month" + definition_period = MONTH + defined_for = StateCode.VA + default_value = 0 + reference = "https://townhall.virginia.gov/l/GetFile.cfm?File=C:%5CTownHall%5Cdocroot%5CGuidanceDocs%5C262%5CGDoc_DARS_5346_v2.pdf#page=522" + documentation = "Days in care in an entry month that starts after the first, or a month of entry and discharge, counting the day of entry but not discharge. Leave at 0 for a full month; a value of at least the month's length is also a full month. A later discharge month is not prorated. Key the entry to its month (for example 2026-01: 15); a yearly entry applies to every month of the year." + + def formula(person, period, parameters): + # A formula stops a one-month input from carrying into later months. + return 0 diff --git a/policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py b/policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py index a473c2b438d..44d040123ee 100644 --- a/policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py +++ b/policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py @@ -22,6 +22,7 @@ def formula(spm_unit, period, parameters): "ky_ssp", # Kentucky benefits "de_ssp", # Delaware benefits "fl_oss", + "va_ag", # Virginia benefits "ks_sspp", # Kansas benefits "hi_oss", "la_oss", # Louisiana benefits