diff --git a/changelog.d/va-ccap.added.md b/changelog.d/va-ccap.added.md new file mode 100644 index 00000000000..f33fcc46cde --- /dev/null +++ b/changelog.d/va-ccap.added.md @@ -0,0 +1 @@ +Add Virginia Child Care Subsidy Program (CCSP). diff --git a/policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml b/policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml index 4050e47c83e..e7d7a987760 100644 --- a/policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml +++ b/policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml @@ -11,6 +11,7 @@ values: - nh_child_care_subsidies # New Hampshire Child Care Scholarship Program - pa_child_care_subsidies # Pennsylvania Child Care Works - ri_child_care_subsidies # Rhode Island Child Care Assistance Program + - va_child_care_subsidies # Virginia Child Care Subsidy Program metadata: unit: list diff --git a/policyengine_us/parameters/gov/household/household_state_benefits.yaml b/policyengine_us/parameters/gov/household/household_state_benefits.yaml index eb8c9cd5676..af75169ee46 100644 --- a/policyengine_us/parameters/gov/household/household_state_benefits.yaml +++ b/policyengine_us/parameters/gov/household/household_state_benefits.yaml @@ -26,6 +26,8 @@ values: - ak_ssp # Nebraska benefits - ne_child_care_subsidies + # Virginia benefits + - va_child_care_subsidies # Massachusetts benefits - ma_eaedc - ma_tafdc @@ -55,6 +57,8 @@ values: - ak_ssp # Nebraska benefits - ne_child_care_subsidies + # Virginia benefits + - va_child_care_subsidies # North Carolina benefits - nc_scca # Massachusetts benefits diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/activity/min_hours_per_week.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/activity/min_hours_per_week.yaml new file mode 100644 index 00000000000..0eb8370ec64 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/activity/min_hours_per_week.yaml @@ -0,0 +1,13 @@ +description: Virginia sets this amount as the minimum weekly hours of approved activity under the Child Care Subsidy Program. +values: + 2023-08-01: 8 + +metadata: + unit: hour + period: year + label: Virginia CCSP minimum weekly activity hours + reference: + - title: 8VAC20-790-30 + href: https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section30/ + - title: Child Care Subsidy Program Guidance Manual Section 1.1 + href: https://ris.dls.virginia.gov/uploads/22VAC40/dibr/VDOE%20Child%20Care%20Program%20Guidance%20Manual%205.3.2023-20240822104447.pdf#page=20 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/age_threshold/child.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/age_threshold/child.yaml new file mode 100644 index 00000000000..a0f45e713b5 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/age_threshold/child.yaml @@ -0,0 +1,13 @@ +description: Virginia limits the Child Care Subsidy Program to children younger than this age. +values: + 2023-01-01: 13 + +metadata: + unit: year + period: year + label: Virginia CCSP child age threshold + reference: + - title: 8VAC20-790-20(A) + href: https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section20/ + - title: Virginia Child Care Subsidy Program Guidance Manual Section 3.3 G + href: https://ris.dls.virginia.gov/uploads/22VAC40/dibr/VDOE%20Child%20Care%20Program%20Guidance%20Manual%205.3.2023-20240822104447.pdf#page=58 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/age_threshold/disabled_child.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/age_threshold/disabled_child.yaml new file mode 100644 index 00000000000..e275d9939c1 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/age_threshold/disabled_child.yaml @@ -0,0 +1,13 @@ +description: Virginia limits the Child Care Subsidy Program to children with special needs younger than this age. +values: + 2023-01-01: 18 + +metadata: + unit: year + period: year + label: Virginia CCSP disabled child age threshold + reference: + - title: 8VAC20-790-20(B) + href: https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section20/ + - title: Virginia Child Care Subsidy Program Guidance Manual Section 3.3 G + href: https://ris.dls.virginia.gov/uploads/22VAC40/dibr/VDOE%20Child%20Care%20Program%20Guidance%20Manual%205.3.2023-20240822104447.pdf#page=58 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/copay/income_cap_rate.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/copay/income_cap_rate.yaml new file mode 100644 index 00000000000..8f31d8e58de --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/copay/income_cap_rate.yaml @@ -0,0 +1,14 @@ +description: Virginia limits the family copayment to this share of gross countable income under the Child Care Subsidy Program. +values: + 2023-01-01: 0.07 + 2025-07-01: 0.05 + +metadata: + unit: /1 + period: year + label: Virginia CCSP copayment income cap rate + reference: + - title: Virginia Child Care Subsidy Program Guidance Manual Section 3.5 A + href: https://ris.dls.virginia.gov/uploads/22VAC40/dibr/VDOE%20Child%20Care%20Program%20Guidance%20Manual%205.3.2023-20240822104447.pdf#page=69 + - title: Budget Amendment HB30 Item 126 #2h + href: https://budget.lis.virginia.gov/amendment/2024/2/HB30/Enrolled/CR/126/2h/ diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/copay/max_children.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/copay/max_children.yaml new file mode 100644 index 00000000000..d6f2b4dfa8d --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/copay/max_children.yaml @@ -0,0 +1,11 @@ +description: Virginia sets this maximum number of children assessed copayments under the Child Care Subsidy Program. +values: + 2023-01-01: 3 + +metadata: + unit: person + period: year + label: Virginia CCSP maximum children assessed copayment + reference: + - title: Virginia Child Care Subsidy Program Guidance Manual Section 3.5 A + href: https://ris.dls.virginia.gov/uploads/22VAC40/dibr/VDOE%20Child%20Care%20Program%20Guidance%20Manual%205.3.2023-20240822104447.pdf#page=69 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/copay/per_child_scale.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/copay/per_child_scale.yaml new file mode 100644 index 00000000000..6d743f03203 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/copay/per_child_scale.yaml @@ -0,0 +1,67 @@ +description: Virginia sets this per-child monthly copayment based on the family's income as a share of the federal poverty guideline under the Child Care Subsidy Program. + +metadata: + type: single_amount + threshold_unit: /1 + amount_unit: currency-USD + period: month + label: Virginia CCSP per-child copayment scale + reference: + - title: Virginia Child Care Subsidy Program Guidance Manual Appendix B + href: https://ris.dls.virginia.gov/uploads/22VAC40/dibr/VDOE%20Child%20Care%20Program%20Guidance%20Manual%205.3.2023-20240822104447.pdf#page=143 + - title: Child Care Subsidy Program (CCSP) Copayment Scale (Effective July 1, 2025) + href: https://www.childcare.virginia.gov/home/showpublisheddocument/65775/638937831784030000 + +brackets: + # 0% FPG (income = $0): $0 copay in both eras + - threshold: + 2023-01-01: 0 + amount: + 2023-01-01: 0 + # >$0 to 100% FPG: $0 (2023), $5 (2025-07-01) + # Use .inf in 2023 so this bracket is unreachable (0-100% stays $0) + - threshold: + 2023-01-01: .inf + 2025-07-01: 0.0001 + amount: + 2023-01-01: 0 + 2025-07-01: 5 + # >100% FPG: $60 (2023), split into two brackets in 2025 + - threshold: + 2023-01-01: 1.0001 + amount: + 2023-01-01: 60 + 2025-07-01: 125 + # >150% FPG: new bracket in 2025 + - threshold: + 2023-01-01: .inf + 2025-07-01: 1.5001 + amount: + 2023-01-01: 0 + 2025-07-01: 175 + # >200% FPG + - threshold: + 2023-01-01: 2.0001 + amount: + 2023-01-01: 120 + 2025-07-01: 225 + # >250% FPG: new bracket in 2025 + - threshold: + 2023-01-01: .inf + 2025-07-01: 2.5001 + amount: + 2023-01-01: 0 + 2025-07-01: 275 + # >300% FPG + - threshold: + 2023-01-01: 3.0001 + amount: + 2023-01-01: 180 + 2025-07-01: 325 + # >350% FPG: new bracket in 2025 + - threshold: + 2023-01-01: .inf + 2025-07-01: 3.5001 + amount: + 2023-01-01: 0 + 2025-07-01: 375 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/income/countable_income/sources.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/income/countable_income/sources.yaml new file mode 100644 index 00000000000..19e7d8a2fa0 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/income/countable_income/sources.yaml @@ -0,0 +1,33 @@ +description: Virginia counts these income sources as countable income under the Child Care Subsidy Program. +values: + 2023-01-01: + - employment_income + - self_employment_income + - child_support_received + - social_security + - pension_income + - unemployment_compensation + - workers_compensation + - veterans_benefits + - disability_benefits + - interest_income + - dividend_income + - rental_income + - alimony_income + # The following are excluded income per 8VAC20-790-40(C)(1): + # ssi, tanf, snap, school meals, eitc, lump sums, + # education scholarships/loans/grants, tax refunds, + # monetary gifts, vendor payments, loans, capital gains, + # GI Bill benefits, reimbursements, Holocaust restitution, + # Agent Orange settlements, temporary census earnings, + # earnings of child under 18, earnings under $25/month + +metadata: + unit: list + period: year + label: Virginia CCSP countable income sources + reference: + - title: 8VAC20-790-40(C)(1) + href: https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section40/ + - title: Virginia Child Care Subsidy Program Guidance Manual Section 3.4 E + href: https://ris.dls.virginia.gov/uploads/22VAC40/dibr/VDOE%20Child%20Care%20Program%20Guidance%20Manual%205.3.2023-20240822104447.pdf#page=63 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/income/countable_income/subtracts.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/income/countable_income/subtracts.yaml new file mode 100644 index 00000000000..197160584ea --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/income/countable_income/subtracts.yaml @@ -0,0 +1,14 @@ +description: Virginia deducts these income sources from countable income under the Child Care Subsidy Program. +values: + 2023-01-01: + - child_support_expense + +metadata: + unit: list + period: year + label: Virginia CCSP countable income deductions + reference: + - title: 8VAC20-790-40(B) + href: https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section40/ + - title: Virginia Child Care Subsidy Program Guidance Manual Section 3.4 G + href: https://ris.dls.virginia.gov/uploads/22VAC40/dibr/VDOE%20Child%20Care%20Program%20Guidance%20Manual%205.3.2023-20240822104447.pdf#page=66 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/income/exit_smi_rate.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/income/exit_smi_rate.yaml new file mode 100644 index 00000000000..03f20058655 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/income/exit_smi_rate.yaml @@ -0,0 +1,13 @@ +description: Virginia limits income at redetermination to this share of the state median income under the Child Care Subsidy Program. +values: + 2023-01-01: 0.85 + +metadata: + unit: /1 + period: year + label: Virginia CCSP exit income SMI rate + reference: + - title: 8VAC20-790-40(D) + href: https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section40/ + - title: Virginia Child Care Subsidy Program Guidance Manual Section 3.15 E + href: https://ris.dls.virginia.gov/uploads/22VAC40/dibr/VDOE%20Child%20Care%20Program%20Guidance%20Manual%205.3.2023-20240822104447.pdf#page=99 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/income/fairfax_alexandria_fpg_rate.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/income/fairfax_alexandria_fpg_rate.yaml new file mode 100644 index 00000000000..50b6f2fecf0 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/income/fairfax_alexandria_fpg_rate.yaml @@ -0,0 +1,12 @@ +description: Virginia limits initial income eligibility to this share of the federal poverty guideline for Fairfax and Alexandria under the Child Care Subsidy Program. + +values: + 2023-01-01: 2.5 + +metadata: + unit: /1 + period: year + label: Virginia CCSP Fairfax/Alexandria FPG rate + reference: + - title: Virginia Child Care Subsidy Program Guidance Manual Appendix Z footnote + href: https://www.childcare.virginia.gov/home/showpublisheddocument/66667/638981099706730000#page=206 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/income/initial_eligibility_fpg_rate.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/income/initial_eligibility_fpg_rate.yaml new file mode 100644 index 00000000000..2a41ef2f325 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/income/initial_eligibility_fpg_rate.yaml @@ -0,0 +1,20 @@ +description: Virginia limits initial income eligibility to this share of the federal poverty guideline by locality group under the Child Care Subsidy Program. + +metadata: + unit: /1 + period: year + label: Virginia CCSP initial eligibility FPG rate by locality group + breakdown: + - va_ccsp_locality_group + reference: + - title: 8VAC20-790-40(C)(1) + href: https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section40/ + - title: Virginia Child Care Subsidy Program Guidance Manual Appendix A + href: https://ris.dls.virginia.gov/uploads/22VAC40/dibr/VDOE%20Child%20Care%20Program%20Guidance%20Manual%205.3.2023-20240822104447.pdf#page=142 + +GROUP_I: + 2023-01-01: 1.5 +GROUP_II: + 2023-01-01: 1.6 +GROUP_III: + 2023-01-01: 1.85 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/income/young_child_age_threshold.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/income/young_child_age_threshold.yaml new file mode 100644 index 00000000000..78ea7c9c20c --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/income/young_child_age_threshold.yaml @@ -0,0 +1,13 @@ +description: Virginia sets this age threshold for the young child income eligibility exception under the Child Care Subsidy Program. +values: + 2023-01-01: 6 + +metadata: + unit: year + period: year + label: Virginia CCSP young child age threshold + reference: + - title: 8VAC20-790-40(C)(2) + href: https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section40/ + - title: Virginia Child Care Subsidy Program Guidance Manual Section 3.4 A + href: https://ris.dls.virginia.gov/uploads/22VAC40/dibr/VDOE%20Child%20Care%20Program%20Guidance%20Manual%205.3.2023-20240822104447.pdf#page=62 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/income/young_child_smi_rate.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/income/young_child_smi_rate.yaml new file mode 100644 index 00000000000..ef72a5d0c4b --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/income/young_child_smi_rate.yaml @@ -0,0 +1,13 @@ +description: Virginia limits income to this share of the state median income for families with a child age five or younger under the Child Care Subsidy Program. +values: + 2023-01-01: 0.85 + +metadata: + unit: /1 + period: year + label: Virginia CCSP young child SMI rate + reference: + - title: 8VAC20-790-40(C)(2) + href: https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section40/ + - title: Virginia Child Care Subsidy Program Guidance Manual Section 3.4 A + href: https://ris.dls.virginia.gov/uploads/22VAC40/dibr/VDOE%20Child%20Care%20Program%20Guidance%20Manual%205.3.2023-20240822104447.pdf#page=62 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/localities/fairfax_alexandria.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/localities/fairfax_alexandria.yaml new file mode 100644 index 00000000000..e5e47557d65 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/localities/fairfax_alexandria.yaml @@ -0,0 +1,15 @@ +description: Virginia lists these localities as having a higher income eligibility threshold under the Child Care Subsidy Program. + +values: + 2023-01-01: + - FAIRFAX_COUNTY_VA + - FAIRFAX_CITY_VA + - ALEXANDRIA_CITY_VA + +metadata: + unit: list + period: year + label: Virginia CCSP Fairfax/Alexandria exception localities + reference: + - title: Virginia Child Care Subsidy Program Guidance Manual Appendix Z footnote + href: https://www.childcare.virginia.gov/home/showpublisheddocument/66667/638981099706730000#page=206 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/localities/group1.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/localities/group1.yaml new file mode 100644 index 00000000000..715918dcb72 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/localities/group1.yaml @@ -0,0 +1,98 @@ +description: Virginia lists these localities as Income Cap Group I under the Child Care Subsidy Program. + +values: + 2023-01-01: + # Counties + - ACCOMACK_COUNTY_VA + - ALLEGHANY_COUNTY_VA + - AMELIA_COUNTY_VA + - AMHERST_COUNTY_VA + - APPOMATTOX_COUNTY_VA + - AUGUSTA_COUNTY_VA + - BATH_COUNTY_VA + - BEDFORD_COUNTY_VA + - BLAND_COUNTY_VA + - BOTETOURT_COUNTY_VA + - BRUNSWICK_COUNTY_VA + - BUCHANAN_COUNTY_VA + - BUCKINGHAM_COUNTY_VA + - CAMPBELL_COUNTY_VA + - CAROLINE_COUNTY_VA + - CARROLL_COUNTY_VA + - CHARLOTTE_COUNTY_VA + - CRAIG_COUNTY_VA + - CUMBERLAND_COUNTY_VA + - DICKENSON_COUNTY_VA + - ESSEX_COUNTY_VA + - FLOYD_COUNTY_VA + - FRANKLIN_COUNTY_VA + - FREDERICK_COUNTY_VA + - GILES_COUNTY_VA + - GRAYSON_COUNTY_VA + - GREENSVILLE_COUNTY_VA + - HALIFAX_COUNTY_VA + - HENRY_COUNTY_VA + - HIGHLAND_COUNTY_VA + - KING_AND_QUEEN_COUNTY_VA + - KING_WILLIAM_COUNTY_VA + - LANCASTER_COUNTY_VA + - LEE_COUNTY_VA + - LOUISA_COUNTY_VA + - LUNENBURG_COUNTY_VA + - MADISON_COUNTY_VA + - MECKLENBURG_COUNTY_VA + - MIDDLESEX_COUNTY_VA + - MONTGOMERY_COUNTY_VA + - NELSON_COUNTY_VA + - NORTHAMPTON_COUNTY_VA + - NORTHUMBERLAND_COUNTY_VA + - NOTTOWAY_COUNTY_VA + - ORANGE_COUNTY_VA + - PAGE_COUNTY_VA + - PATRICK_COUNTY_VA + - PITTSYLVANIA_COUNTY_VA + - PRINCE_EDWARD_COUNTY_VA + - PULASKI_COUNTY_VA + - RAPPAHANNOCK_COUNTY_VA + - RICHMOND_COUNTY_VA + - ROANOKE_COUNTY_VA + - ROCKBRIDGE_COUNTY_VA + - ROCKINGHAM_COUNTY_VA + - RUSSELL_COUNTY_VA + - SCOTT_COUNTY_VA + - SHENANDOAH_COUNTY_VA + - SMYTH_COUNTY_VA + - SOUTHAMPTON_COUNTY_VA + - SURRY_COUNTY_VA + - SUSSEX_COUNTY_VA + - TAZEWELL_COUNTY_VA + - WASHINGTON_COUNTY_VA + - WESTMORELAND_COUNTY_VA + - WISE_COUNTY_VA + - WYTHE_COUNTY_VA + # Cities + - BRISTOL_CITY_VA + # - BUENA_VISTA_CITY_VA # not in county_enum + # - COVINGTON_CITY_VA # not in county_enum + - DANVILLE_CITY_VA + - EMPORIA_CITY_VA + - FRANKLIN_CITY_VA + # - GALAX_CITY_VA # not in county_enum + - HARRISONBURG_CITY_VA + - LEXINGTON_CITY_VA + - LYNCHBURG_CITY_VA + # - MARTINSVILLE_CITY_VA # not in county_enum + - NORTON_CITY_VA + - RADFORD_CITY_VA + - ROANOKE_CITY_VA + - STAUNTON_CITY_VA + - WAYNESBORO_CITY_VA + # - WINCHESTER_CITY_VA # not in county_enum + +metadata: + unit: list + period: year + label: Virginia CCSP Income Cap Group I localities + reference: + - title: Virginia Child Care Subsidy Program Guidance Manual Appendix Z + href: https://www.childcare.virginia.gov/home/showpublisheddocument/66667/638981099706730000#page=204 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/localities/group2.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/localities/group2.yaml new file mode 100644 index 00000000000..e5381a6ff3a --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/localities/group2.yaml @@ -0,0 +1,45 @@ +description: Virginia lists these localities as Income Cap Group II under the Child Care Subsidy Program. + +values: + 2023-01-01: + # Counties + - ALBEMARLE_COUNTY_VA + - CHARLES_CITY_COUNTY_VA + - CHESTERFIELD_COUNTY_VA + - DINWIDDIE_COUNTY_VA + - FLUVANNA_COUNTY_VA + - GLOUCESTER_COUNTY_VA + - GOOCHLAND_COUNTY_VA + - GREENE_COUNTY_VA + - HANOVER_COUNTY_VA + - HENRICO_COUNTY_VA + - ISLE_OF_WIGHT_COUNTY_VA + - JAMES_CITY_COUNTY_VA + - MATHEWS_COUNTY_VA + - NEW_KENT_COUNTY_VA + - POWHATAN_COUNTY_VA + - PRINCE_GEORGE_COUNTY_VA + - YORK_COUNTY_VA + # Cities + - CHARLOTTESVILLE_CITY_VA + - CHESAPEAKE_CITY_VA + # - COLONIAL_HEIGHTS_CITY_VA # not in county_enum + - HAMPTON_CITY_VA + - HOPEWELL_CITY_VA + - NEWPORT_NEWS_CITY_VA + - NORFOLK_CITY_VA + - PETERSBURG_CITY_VA + - POQUOSON_CITY_VA + - PORTSMOUTH_CITY_VA + - RICHMOND_CITY_VA + - SUFFOLK_CITY_VA + - VIRGINIA_BEACH_CITY_VA + # - WILLIAMSBURG_CITY_VA # not in county_enum + +metadata: + unit: list + period: year + label: Virginia CCSP Income Cap Group II localities + reference: + - title: Virginia Child Care Subsidy Program Guidance Manual Appendix Z + href: https://www.childcare.virginia.gov/home/showpublisheddocument/66667/638981099706730000#page=205 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/localities/group3.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/localities/group3.yaml new file mode 100644 index 00000000000..a14ca0859a2 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/localities/group3.yaml @@ -0,0 +1,31 @@ +description: Virginia lists these localities as Income Cap Group III under the Child Care Subsidy Program. + +values: + 2023-01-01: + # Counties + - ARLINGTON_COUNTY_VA + - CLARKE_COUNTY_VA + - CULPEPER_COUNTY_VA + - FAIRFAX_COUNTY_VA + - FAUQUIER_COUNTY_VA + - KING_GEORGE_COUNTY_VA + - LOUDOUN_COUNTY_VA + - PRINCE_WILLIAM_COUNTY_VA + - SPOTSYLVANIA_COUNTY_VA + - STAFFORD_COUNTY_VA + - WARREN_COUNTY_VA + # Cities + - ALEXANDRIA_CITY_VA + - FAIRFAX_CITY_VA + - FALLS_CHURCH_CITY_VA + - FREDERICKSBURG_CITY_VA + # - MANASSAS_CITY_VA # not in county_enum + - MANASSAS_PARK_CITY_VA + +metadata: + unit: list + period: year + label: Virginia CCSP Income Cap Group III localities + reference: + - title: Virginia Child Care Subsidy Program Guidance Manual Appendix Z + href: https://www.childcare.virginia.gov/home/showpublisheddocument/66667/638981099706730000#page=206 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/care_age_group.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/care_age_group.yaml new file mode 100644 index 00000000000..41556d1cee7 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/care_age_group.yaml @@ -0,0 +1,33 @@ +description: Virginia assigns children to these age group categories by age in months for child care reimbursement rates under the Child Care Subsidy Program. + +metadata: + type: single_amount + threshold_unit: month + amount_unit: /1 + period: year + label: Virginia CCSP care age group thresholds + reference: + - title: Virginia Child Care Subsidy Program Guidance Manual Section 7.2 + href: https://www.childcare.virginia.gov/home/showpublisheddocument/66667/638981099706730000#page=203 + +brackets: + - threshold: + 2023-01-01: 0 + amount: + 2023-01-01: 0 + - threshold: + 2023-01-01: 16 + amount: + 2023-01-01: 1 + - threshold: + 2023-01-01: 24 + amount: + 2023-01-01: 2 + - threshold: + 2023-01-01: 36 + amount: + 2023-01-01: 3 + - threshold: + 2023-01-01: 60 + amount: + 2023-01-01: 4 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/center.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/center.yaml new file mode 100644 index 00000000000..c4a3f74e983 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/center.yaml @@ -0,0 +1,112 @@ +description: Virginia sets this daily maximum reimbursement rate for child care centers under the Child Care Subsidy Program. + +metadata: + period: day + unit: currency-USD + label: Virginia CCSP center daily maximum reimbursement rate + breakdown: + - va_ccsp_ready_region + - va_ccsp_care_age_group + reference: + - title: VDOE Maximum Reimbursement Rates FY 2024 + href: https://data.virginia.gov/dataset/general-child-care-subsidy-program-maximum-reimbursement-rates + +BLUE_RIDGE: + INFANT: + 2023-08-01: 70 + TODDLER: + 2023-08-01: 61 + TWO_YEAR_OLD: + 2023-08-01: 47 + PRESCHOOL: + 2023-08-01: 42 + SCHOOL_AGE: + 2023-08-01: 30 +CAPITAL_AREA: + INFANT: + 2023-08-01: 94 + TODDLER: + 2023-08-01: 81 + TWO_YEAR_OLD: + 2023-08-01: 62 + PRESCHOOL: + 2023-08-01: 59 + SCHOOL_AGE: + 2023-08-01: 52 +CENTRAL: + INFANT: + 2023-08-01: 69 + TODDLER: + 2023-08-01: 60 + TWO_YEAR_OLD: + 2023-08-01: 47 + PRESCHOOL: + 2023-08-01: 41 + SCHOOL_AGE: + 2023-08-01: 29 +CHESAPEAKE_BAY: + INFANT: + 2023-08-01: 68 + TODDLER: + 2023-08-01: 59 + TWO_YEAR_OLD: + 2023-08-01: 45 + PRESCHOOL: + 2023-08-01: 41 + SCHOOL_AGE: + 2023-08-01: 29 +NORTH_CENTRAL: + INFANT: + 2023-08-01: 83 + TODDLER: + 2023-08-01: 72 + TWO_YEAR_OLD: + 2023-08-01: 55 + PRESCHOOL: + 2023-08-01: 50 + SCHOOL_AGE: + 2023-08-01: 35 +SOUTHEASTERN: + INFANT: + 2023-08-01: 71 + TODDLER: + 2023-08-01: 61 + TWO_YEAR_OLD: + 2023-08-01: 47 + PRESCHOOL: + 2023-08-01: 42 + SCHOOL_AGE: + 2023-08-01: 30 +SOUTHSIDE: + INFANT: + 2023-08-01: 64 + TODDLER: + 2023-08-01: 56 + TWO_YEAR_OLD: + 2023-08-01: 43 + PRESCHOOL: + 2023-08-01: 39 + SCHOOL_AGE: + 2023-08-01: 28 +SOUTHWEST: + INFANT: + 2023-08-01: 63 + TODDLER: + 2023-08-01: 55 + TWO_YEAR_OLD: + 2023-08-01: 42 + PRESCHOOL: + 2023-08-01: 38 + SCHOOL_AGE: + 2023-08-01: 27 +WEST: + INFANT: + 2023-08-01: 67 + TODDLER: + 2023-08-01: 58 + TWO_YEAR_OLD: + 2023-08-01: 45 + PRESCHOOL: + 2023-08-01: 41 + SCHOOL_AGE: + 2023-08-01: 29 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/family_day_home.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/family_day_home.yaml new file mode 100644 index 00000000000..0c7a708c9a2 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/family_day_home.yaml @@ -0,0 +1,30 @@ +description: Virginia sets this daily maximum reimbursement rate for family day homes under the Child Care Subsidy Program. + +metadata: + period: day + unit: currency-USD + label: Virginia CCSP family day home daily maximum reimbursement rate + breakdown: + - va_ccsp_ready_region + reference: + - title: VDOE Maximum Reimbursement Rates FY 2024 + href: https://data.virginia.gov/dataset/general-child-care-subsidy-program-maximum-reimbursement-rates + +BLUE_RIDGE: + 2023-08-01: 53 +CAPITAL_AREA: + 2023-08-01: 62 +CENTRAL: + 2023-08-01: 53 +CHESAPEAKE_BAY: + 2023-08-01: 51 +NORTH_CENTRAL: + 2023-08-01: 53 +SOUTHEASTERN: + 2023-08-01: 54 +SOUTHSIDE: + 2023-08-01: 49 +SOUTHWEST: + 2023-08-01: 48 +WEST: + 2023-08-01: 51 diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/part_day_factor.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/part_day_factor.yaml new file mode 100644 index 00000000000..68d35e79f41 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/part_day_factor.yaml @@ -0,0 +1,12 @@ +description: Virginia sets this share of the full day rate as the part day maximum reimbursement rate under the Child Care Subsidy Program. + +values: + 2023-08-01: 0.7 + +metadata: + unit: /1 + period: year + label: Virginia CCSP part day factor + reference: + - title: VDOE Maximum Reimbursement Rates FY 2024 + href: https://data.virginia.gov/dataset/general-child-care-subsidy-program-maximum-reimbursement-rates diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/blue_ridge.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/blue_ridge.yaml new file mode 100644 index 00000000000..575796fcf5a --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/blue_ridge.yaml @@ -0,0 +1,33 @@ +description: Virginia defines these localities as the Blue Ridge Ready Region under the Child Care Subsidy Program. + +metadata: + unit: list + period: year + label: Virginia CCSP Blue Ridge Ready Region localities + reference: + - title: VDOE Maximum Reimbursement Rates FY 2024 + href: https://data.virginia.gov/dataset/general-child-care-subsidy-program-maximum-reimbursement-rates + +values: + 2023-08-01: + - ALBEMARLE_COUNTY_VA + - AUGUSTA_COUNTY_VA + - BUCKINGHAM_COUNTY_VA + - CHARLOTTESVILLE_CITY_VA + - CLARKE_COUNTY_VA + - FLUVANNA_COUNTY_VA + - FREDERICK_COUNTY_VA + - GREENE_COUNTY_VA + - HARRISONBURG_CITY_VA + - LOUISA_COUNTY_VA + - MADISON_COUNTY_VA + - NELSON_COUNTY_VA + - ORANGE_COUNTY_VA + - PAGE_COUNTY_VA + - RAPPAHANNOCK_COUNTY_VA + - ROCKINGHAM_COUNTY_VA + - SHENANDOAH_COUNTY_VA + - STAUNTON_CITY_VA + - WARREN_COUNTY_VA + - WAYNESBORO_CITY_VA + # - WINCHESTER_CITY_VA # not in county_enum diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/capital_area.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/capital_area.yaml new file mode 100644 index 00000000000..14ce0d4ed7b --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/capital_area.yaml @@ -0,0 +1,17 @@ +description: Virginia defines these localities as the Capital Area Ready Region under the Child Care Subsidy Program. + +metadata: + unit: list + period: year + label: Virginia CCSP Capital Area Ready Region localities + reference: + - title: VDOE Maximum Reimbursement Rates FY 2024 + href: https://data.virginia.gov/dataset/general-child-care-subsidy-program-maximum-reimbursement-rates + +values: + 2023-08-01: + - ALEXANDRIA_CITY_VA + - ARLINGTON_COUNTY_VA + - FAIRFAX_CITY_VA + - FAIRFAX_COUNTY_VA + - FALLS_CHURCH_CITY_VA diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/central.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/central.yaml new file mode 100644 index 00000000000..7ad8e39d099 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/central.yaml @@ -0,0 +1,29 @@ +description: Virginia defines these localities as the Central Ready Region under the Child Care Subsidy Program. + +metadata: + unit: list + period: year + label: Virginia CCSP Central Ready Region localities + reference: + - title: VDOE Maximum Reimbursement Rates FY 2024 + href: https://data.virginia.gov/dataset/general-child-care-subsidy-program-maximum-reimbursement-rates + +values: + 2023-08-01: + - CHARLES_CITY_COUNTY_VA + - CHESTERFIELD_COUNTY_VA + # - COLONIAL_HEIGHTS_CITY_VA # not in county_enum + - DINWIDDIE_COUNTY_VA + - EMPORIA_CITY_VA + - GOOCHLAND_COUNTY_VA + - GREENSVILLE_COUNTY_VA + - HANOVER_COUNTY_VA + - HENRICO_COUNTY_VA + - HOPEWELL_CITY_VA + - NEW_KENT_COUNTY_VA + - PETERSBURG_CITY_VA + - POWHATAN_COUNTY_VA + - PRINCE_GEORGE_COUNTY_VA + - RICHMOND_CITY_VA + - SURRY_COUNTY_VA + - SUSSEX_COUNTY_VA diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/chesapeake_bay.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/chesapeake_bay.yaml new file mode 100644 index 00000000000..34cdb625dc3 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/chesapeake_bay.yaml @@ -0,0 +1,28 @@ +description: Virginia defines these localities as the Chesapeake Bay Ready Region under the Child Care Subsidy Program. + +metadata: + unit: list + period: year + label: Virginia CCSP Chesapeake Bay Ready Region localities + reference: + - title: VDOE Maximum Reimbursement Rates FY 2024 + href: https://data.virginia.gov/dataset/general-child-care-subsidy-program-maximum-reimbursement-rates + +values: + 2023-08-01: + - ESSEX_COUNTY_VA + - GLOUCESTER_COUNTY_VA + - HAMPTON_CITY_VA + - JAMES_CITY_COUNTY_VA + - KING_AND_QUEEN_COUNTY_VA + - KING_WILLIAM_COUNTY_VA + - LANCASTER_COUNTY_VA + - MATHEWS_COUNTY_VA + - MIDDLESEX_COUNTY_VA + - NEWPORT_NEWS_CITY_VA + - NORTHUMBERLAND_COUNTY_VA + - POQUOSON_CITY_VA + - RICHMOND_COUNTY_VA + - WESTMORELAND_COUNTY_VA + # - WILLIAMSBURG_CITY_VA # not in county_enum + - YORK_COUNTY_VA diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/north_central.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/north_central.yaml new file mode 100644 index 00000000000..1e8259dd0e0 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/north_central.yaml @@ -0,0 +1,23 @@ +description: Virginia defines these localities as the North Central Ready Region under the Child Care Subsidy Program. + +metadata: + unit: list + period: year + label: Virginia CCSP North Central Ready Region localities + reference: + - title: VDOE Maximum Reimbursement Rates FY 2024 + href: https://data.virginia.gov/dataset/general-child-care-subsidy-program-maximum-reimbursement-rates + +values: + 2023-08-01: + - CAROLINE_COUNTY_VA + - CULPEPER_COUNTY_VA + - FAUQUIER_COUNTY_VA + - FREDERICKSBURG_CITY_VA + - KING_GEORGE_COUNTY_VA + - LOUDOUN_COUNTY_VA + # - MANASSAS_CITY_VA # not in county_enum + - MANASSAS_PARK_CITY_VA + - PRINCE_WILLIAM_COUNTY_VA + - SPOTSYLVANIA_COUNTY_VA + - STAFFORD_COUNTY_VA diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/southeastern.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/southeastern.yaml new file mode 100644 index 00000000000..f1bc7929236 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/southeastern.yaml @@ -0,0 +1,22 @@ +description: Virginia defines these localities as the Southeastern Ready Region under the Child Care Subsidy Program. + +metadata: + unit: list + period: year + label: Virginia CCSP Southeastern Ready Region localities + reference: + - title: VDOE Maximum Reimbursement Rates FY 2024 + href: https://data.virginia.gov/dataset/general-child-care-subsidy-program-maximum-reimbursement-rates + +values: + 2023-08-01: + - ACCOMACK_COUNTY_VA + - CHESAPEAKE_CITY_VA + - FRANKLIN_CITY_VA + - ISLE_OF_WIGHT_COUNTY_VA + - NORFOLK_CITY_VA + - NORTHAMPTON_COUNTY_VA + - PORTSMOUTH_CITY_VA + - SOUTHAMPTON_COUNTY_VA + - SUFFOLK_CITY_VA + - VIRGINIA_BEACH_CITY_VA diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/southside.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/southside.yaml new file mode 100644 index 00000000000..a228674a374 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/southside.yaml @@ -0,0 +1,28 @@ +description: Virginia defines these localities as the Southside Ready Region under the Child Care Subsidy Program. + +metadata: + unit: list + period: year + label: Virginia CCSP Southside Ready Region localities + reference: + - title: VDOE Maximum Reimbursement Rates FY 2024 + href: https://data.virginia.gov/dataset/general-child-care-subsidy-program-maximum-reimbursement-rates + +values: + 2023-08-01: + - AMELIA_COUNTY_VA + - AMHERST_COUNTY_VA + - APPOMATTOX_COUNTY_VA + - BEDFORD_COUNTY_VA + - BRUNSWICK_COUNTY_VA + - CAMPBELL_COUNTY_VA + - CHARLOTTE_COUNTY_VA + - CUMBERLAND_COUNTY_VA + - DANVILLE_CITY_VA + - HALIFAX_COUNTY_VA + - LUNENBURG_COUNTY_VA + - LYNCHBURG_CITY_VA + - MECKLENBURG_COUNTY_VA + - NOTTOWAY_COUNTY_VA + - PITTSYLVANIA_COUNTY_VA + - PRINCE_EDWARD_COUNTY_VA diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/southwest.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/southwest.yaml new file mode 100644 index 00000000000..b9b300ffbd5 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/southwest.yaml @@ -0,0 +1,33 @@ +description: Virginia defines these localities as the Southwest Ready Region under the Child Care Subsidy Program. + +metadata: + unit: list + period: year + label: Virginia CCSP Southwest Ready Region localities + reference: + - title: VDOE Maximum Reimbursement Rates FY 2024 + href: https://data.virginia.gov/dataset/general-child-care-subsidy-program-maximum-reimbursement-rates + +values: + 2023-08-01: + - BLAND_COUNTY_VA + - BRISTOL_CITY_VA + - BUCHANAN_COUNTY_VA + - CARROLL_COUNTY_VA + - DICKENSON_COUNTY_VA + - FLOYD_COUNTY_VA + # - GALAX_CITY_VA # not in county_enum + - GILES_COUNTY_VA + - GRAYSON_COUNTY_VA + - LEE_COUNTY_VA + - MONTGOMERY_COUNTY_VA + - NORTON_CITY_VA + - PULASKI_COUNTY_VA + - RADFORD_CITY_VA + - RUSSELL_COUNTY_VA + - SCOTT_COUNTY_VA + - SMYTH_COUNTY_VA + - TAZEWELL_COUNTY_VA + - WASHINGTON_COUNTY_VA + - WISE_COUNTY_VA + - WYTHE_COUNTY_VA diff --git a/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/west.yaml b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/west.yaml new file mode 100644 index 00000000000..2aa200f0562 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/ccsp/maximum_reimbursement_rate/ready_region/west.yaml @@ -0,0 +1,28 @@ +description: Virginia defines these localities as the West Ready Region under the Child Care Subsidy Program. + +metadata: + unit: list + period: year + label: Virginia CCSP West Ready Region localities + reference: + - title: VDOE Maximum Reimbursement Rates FY 2024 + href: https://data.virginia.gov/dataset/general-child-care-subsidy-program-maximum-reimbursement-rates + +values: + 2023-08-01: + - ALLEGHANY_COUNTY_VA + - BATH_COUNTY_VA + - BOTETOURT_COUNTY_VA + # - BUENA_VISTA_CITY_VA # not in county_enum + # - COVINGTON_CITY_VA # not in county_enum + - CRAIG_COUNTY_VA + - FRANKLIN_COUNTY_VA + - HENRY_COUNTY_VA + - HIGHLAND_COUNTY_VA + - LEXINGTON_CITY_VA + # - MARTINSVILLE_CITY_VA # not in county_enum + - PATRICK_COUNTY_VA + - ROANOKE_CITY_VA + - ROANOKE_COUNTY_VA + - ROCKBRIDGE_COUNTY_VA + # - SALEM_CITY_VA # not in county_enum diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/integration_edge.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/integration_edge.yaml new file mode 100644 index 00000000000..3bf736c08e6 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/integration_edge.yaml @@ -0,0 +1,390 @@ +# Virginia CCSP edge case integration tests +# Full pipeline verification with boundary conditions +# +# 2024 FPG: first_person = 15,060, additional = 5,380 +# Family of 2: 20,440 Family of 3: 25,820 +# 2024 VA SMI base: 121,130 (effective 2023-10-01) +# SMI size adj: first_person=0.52, second_to_sixth=0.16 +# Size 2: 121,130*0.68 = 82,368.40 +# 85% SMI size 2: 70,013.14 +# +# Current copay: $0/$0/$60/$60/$120/$120/$180/$180 +# Income cap: 7%, max children: 3 + +- name: Case 1, Group I boundary income $1 below 150% FPG with young child SMI fallback. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 30_659 + immigration_status: CITIZEN + person2: + age: 4 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 12_000 + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + output: + # === Child eligibility === + va_ccsp_child_eligible: [false, true] + + # === Income === + # Countable: 30,659/12 = 2,554.92/month + va_ccsp_countable_income: 2_554.92 + + # Group I: 150% FPG = 30,660 + # Young child (age 4 < 6): also check 85% SMI = 70,013.14 + # Use max(30,660, 70,013.14) = 70,013.14 + # 30,659 <= 70,013.14 -> eligible + va_ccsp_income_eligible: true + va_ccsp_eligible: true + + # === Copay === + # Monthly FPG: 20,440/12 = 1,703.33 + # FPG ratio: 2,554.92/1,703.33 = 1.5000 -> $60/child + # 1 child, scale total = $60 + # Income cap: 30,659 * 0.07/12 = 178.84 + # Copay: min(60, 178.84) = $60 + va_ccsp_copay: 60 + + # === Benefit === + # Monthly expenses: 12,000/12 = 1,000 + # Benefit: max(1,000 - 60, 0) = $940 + va_ccsp: 940 + +- name: Case 2, Group I $1 above 150% FPG with older child, no SMI fallback. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + employment_income: 30_661 + immigration_status: CITIZEN + person2: + age: 8 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 10_000 + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + output: + va_ccsp_child_eligible: [false, true] + + # Group I: 150% FPG = 30,660 + # No young child -> no SMI fallback + # 30,661 > 30,660 -> ineligible + va_ccsp_income_eligible: false + va_ccsp_eligible: false + + # Ineligible -> $0 + va_ccsp: 0 + +- name: Case 3, enrolled family at exact 85% SMI boundary. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 70_013 + immigration_status: CITIZEN + person2: + age: 8 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 40 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 18_000 + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + va_ccsp_ready_region: CAPITAL_AREA + output: + va_ccsp_child_eligible: [false, true] + + # === Income === + # Countable: 70,013/12 = 5,834.42/month + va_ccsp_countable_income: 5_834.42 + + # Enrolled -> 85% SMI = 70,013.14 + # 70,013 <= 70,013.14 -> eligible + va_ccsp_income_eligible: true + va_ccsp_eligible: true + + # === Copay === + # FPG ratio: 5,834.42/1,703.33 = 3.4253 -> $180/child + # 1 child * $180 = $180 + # Income cap: 70,013 * 0.07/12 = 408.41 + # Copay: min(180, 408.41) = $180 + va_ccsp_copay: 180 + + # === Benefit === + # Monthly expenses: 18,000/12 = 1,500 + # Benefit: max(1,500 - 180, 0) = $1,320 + va_ccsp: 1_320 + +- name: Case 4, 4 children copay capped at 3 with income cap binding. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + employment_income: 72_000 + immigration_status: CITIZEN + person2: + age: 11 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person3: + age: 8 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person4: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person5: + age: 3 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2, person3, person4, person5] + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5] + spm_unit_pre_subsidy_childcare_expenses: 30_000 + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2, person3, person4, person5] + state_code: VA + output: + # === Child eligibility === + # All 4 children: ages 11,8,5,3 all < 13, citizen -> eligible + va_ccsp_child_eligible: [false, true, true, true, true] + + # === Income === + # Countable: 72,000/12 = 6,000/month + va_ccsp_countable_income: 6_000 + + # Enrolled -> 85% SMI + # FPG size 5: 36,580 + # SMI size 5: 121,130 * 1.16 = 140,510.80 + # 85% SMI = 119,434.18 + # 72,000 <= 119,434.18 -> eligible + va_ccsp_income_eligible: true + va_ccsp_eligible: true + + # === Copay === + # Monthly FPG size 5: 36,580/12 = 3,048.33 + # FPG ratio: 6,000/3,048.33 = 1.9683 -> $60/child (still in 100-200% bracket) + # 4 eligible children, capped at 3 + # Scale total: $60 * 3 = $180 + # Income cap: 72,000 * 0.07/12 = 420 + # Copay: min(180, 420) = $180 + va_ccsp_copay: 180 + + # === Benefit === + # Monthly expenses: 30,000/12 = 2,500 + # Benefit: max(2,500 - 180, 0) = $2,320 + va_ccsp: 2_320 + +- name: Case 5, young child age 5 vs age 6 sibling difference. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + employment_income: 48_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person3: + age: 6 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2, person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + spm_unit_pre_subsidy_childcare_expenses: 18_000 + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + va_ccsp_child_eligible: [false, true, true] + + # === Income === + # Countable: 48,000/12 = 4,000/month + va_ccsp_countable_income: 4_000 + + # Group I: 150% FPG size 3 = 25,820 * 1.5 = 38,730 + # Has young child (age 5 < 6): 85% SMI + # SMI size 3: 121,130 * 0.84 = 101,749.20 + # 85% SMI = 86,486.82 + # Use max(38,730, 86,486.82) = 86,486.82 + # 48,000 <= 86,486.82 -> eligible + va_ccsp_income_eligible: true + va_ccsp_eligible: true + + # === Copay === + # Monthly FPG size 3: 25,820/12 = 2,151.67 + # FPG ratio: 4,000/2,151.67 = 1.8590 -> $60/child + # 2 children, scale total = $60 * 2 = $120 + # Income cap: 48,000 * 0.07/12 = 280 + # Copay: min(120, 280) = $120 + va_ccsp_copay: 120 + + # === Benefit === + # Monthly expenses: 18,000/12 = 1,500 + # Benefit: max(1,500 - 120, 0) = $1,380 + va_ccsp: 1_380 + +- name: Case 6, disabled child age 15 still eligible. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 45 + employment_income: 24_000 + immigration_status: CITIZEN + person2: + age: 15 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + is_disabled: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 12_000 + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # Disabled child age 15 < 18 -> eligible child + va_ccsp_child_eligible: [false, true] + + va_ccsp_countable_income: 2_000 + va_ccsp_income_eligible: true + va_ccsp_eligible: true + + # Monthly FPG: 20,440/12 = 1,703.33 + # FPG ratio: 2,000/1,703.33 = 1.1741 -> $60/child + # 1 child * $60 = $60 + # Income cap: 24,000 * 0.07/12 = 140 + # Copay: min(60, 140) = $60 + va_ccsp_copay: 60 + + # Monthly expenses: 12,000/12 = 1,000 + # Benefit before MRR: max(1,000 - 60, 0) = $940 + # Default county ACCOMACK -> SOUTHEASTERN region + # MRR: SCHOOL_AGE CENTER SOUTHEASTERN = $30/day * 23 days = $690 + # Benefit: min(940, 690) = $690 + va_ccsp: 690 + +- name: Case 7, TANF-enrolled family waives income test for high-income family. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 120_000 + immigration_status: CITIZEN + person2: + age: 3 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 40 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 18_000 + va_ccsp_locality_group: GROUP_I + is_tanf_enrolled: true + households: + household: + members: [person1, person2] + state_code: VA + va_ccsp_ready_region: CAPITAL_AREA + output: + va_ccsp_child_eligible: [false, true] + + # === Income === + va_ccsp_countable_income: 10_000 + + # Group I: 150% FPG = 30,660 + # Young child exception: 85% SMI = 70,013.14 + # max(30,660, 70,013.14) = 70,013.14 + # 120,000 > 70,013.14 -> income test fails + # BUT TANF enrolled -> income waived + va_ccsp_income_test_waived: true + va_ccsp_income_eligible: true + va_ccsp_eligible: true + + # === Copay === + # TANF recipients are exempt from copayments + # (Guidance Manual Section 3.5, working_references.md) + va_ccsp_copay: 0 + + # Monthly expenses: 18,000/12 = 1,500 + # Benefit: max(1,500 - 0, 0) = $1,500 + va_ccsp: 1_500 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/va_ccsp_activity_eligible_edge.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/va_ccsp_activity_eligible_edge.yaml new file mode 100644 index 00000000000..33d370342cd --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/va_ccsp_activity_eligible_edge.yaml @@ -0,0 +1,166 @@ +# Virginia CCSP activity eligibility edge case tests +# Focus: zero hours worked, exactly 1 hour, two-parent mixed, child hours ignored +# +# Activity test: all heads/spouses must have (weekly_hours_worked >= 8) OR is_in_k12_school + +- name: Case 1, parent with exactly 8 hours worked (at threshold). + period: 2024-01 + input: + people: + person1: + age: 30 + weekly_hours_worked: 8 + person2: + age: 5 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # 8 >= 8 -> meets activity requirement + va_ccsp_activity_eligible: true + +- name: Case 2, parent with zero hours and not in school. + period: 2024-01 + input: + people: + person1: + age: 30 + weekly_hours_worked: 0 + is_in_k12_school: false + person2: + age: 5 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # 0 hours, not in school -> fails + va_ccsp_activity_eligible: false + +- name: Case 3, two parents where one works and one is in school. + period: 2024-01 + input: + people: + person1: + age: 35 + weekly_hours_worked: 40 + is_in_k12_school: false + person2: + age: 30 + weekly_hours_worked: 0 + is_in_k12_school: true + person3: + age: 5 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2, person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + # Person1: works 40hrs -> active + # Person2: in school -> active + # Both parents active -> eligible + va_ccsp_activity_eligible: true + +- name: Case 4, child hours do not affect activity test. + period: 2024-01 + input: + people: + person1: + age: 30 + weekly_hours_worked: 8 + person2: + age: 10 + is_tax_unit_dependent: true + weekly_hours_worked: 0 + is_in_k12_school: false + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # Only heads/spouses matter for activity test + # Child's zero hours are irrelevant + # Person1 works 8hrs -> active + va_ccsp_activity_eligible: true + +- name: Case 5, two parents both zero hours both not in school. + period: 2024-01 + input: + people: + person1: + age: 35 + weekly_hours_worked: 0 + is_in_k12_school: false + person2: + age: 33 + weekly_hours_worked: 0 + is_in_k12_school: false + person3: + age: 5 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2, person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + # Both parents fail activity test + va_ccsp_activity_eligible: false + +- name: Case 6, single parent in school with zero work hours. + period: 2024-01 + input: + people: + person1: + age: 22 + weekly_hours_worked: 0 + is_in_k12_school: true + person2: + age: 1 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # In school -> active, even with zero work hours + va_ccsp_activity_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/va_ccsp_child_eligible_edge.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/va_ccsp_child_eligible_edge.yaml new file mode 100644 index 00000000000..5318810593f --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/va_ccsp_child_eligible_edge.yaml @@ -0,0 +1,179 @@ +# Virginia CCSP child eligibility edge case tests +# Focus: age boundaries (12/13 for normal, 17/18 for disabled), newborn, non-dependent + +- name: Case 1, child age 12 just under threshold. + period: 2024-01 + input: + people: + person1: + age: 35 + person2: + age: 12 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # age 12 < 13 -> eligible + va_ccsp_child_eligible: [false, true] + +- name: Case 2, newborn age 0. + period: 2024-01 + input: + people: + person1: + age: 25 + person2: + age: 0 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # age 0 < 13 -> eligible + va_ccsp_child_eligible: [false, true] + +- name: Case 3, disabled child age 17 just under threshold. + period: 2024-01 + input: + people: + person1: + age: 45 + person2: + age: 17 + is_tax_unit_dependent: true + is_disabled: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # disabled, age 17 < 18 -> eligible + va_ccsp_child_eligible: [false, true] + +- name: Case 4, disabled child age 13 still eligible. + period: 2024-01 + input: + people: + person1: + age: 40 + person2: + age: 13 + is_tax_unit_dependent: true + is_disabled: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # disabled, age 13 < 18 -> eligible (would be ineligible if not disabled) + va_ccsp_child_eligible: [false, true] + +- name: Case 5, non-disabled child age 13 is ineligible but disabled same-age is eligible. + period: 2024-01 + input: + people: + person1: + age: 40 + person2: + age: 13 + is_tax_unit_dependent: true + is_disabled: false + immigration_status: CITIZEN + person3: + age: 13 + is_tax_unit_dependent: true + is_disabled: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2, person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + # person2: age 13, not disabled -> 13 >= 13 -> ineligible + # person3: age 13, disabled -> 13 < 18 -> eligible + va_ccsp_child_eligible: [false, false, true] + +- name: Case 6, dependent child who is a legal permanent resident. + period: 2024-01 + input: + people: + person1: + age: 35 + person2: + age: 6 + is_tax_unit_dependent: true + immigration_status: LEGAL_PERMANENT_RESIDENT + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # LPR is a qualified immigrant -> eligible + va_ccsp_child_eligible: [false, true] + +- name: Case 7, child under 13 but not a dependent. + period: 2024-01 + input: + people: + person1: + age: 35 + person2: + age: 10 + is_tax_unit_dependent: false + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # Not a dependent -> ineligible even though age < 13 + va_ccsp_child_eligible: [false, false] diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/va_ccsp_copay_edge.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/va_ccsp_copay_edge.yaml new file mode 100644 index 00000000000..58839d8bc2f --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/va_ccsp_copay_edge.yaml @@ -0,0 +1,664 @@ +# Virginia CCSP copay edge case tests +# Focus: copay bracket boundaries, income cap binding vs not, max children cap, +# 2025-07-01 new copay scale (tested at 2026-01) +# +# 2024 FPG (contiguous US): Family of 2: 20,440 +# Monthly FPG: 20,440/12 = 1,703.333... +# +# Current copay scale (2023-01-01): +# 0: $0, >0-100%: $0, >100-200%: $60, >200-300%: $120, >300%+: $180 +# Income cap: 7% +# Max children: 3 +# +# New copay scale (2025-07-01): +# 0: $0, >0-100%: $5, >100-150%: $125, >150-200%: $175, +# >200-250%: $225, >250-300%: $275, >300-350%: $325, >350%+: $375 +# Income cap: 5% +# Max children: 3 +# +# 2025 FPG: Family of 2: 21,150 +# Monthly FPG: 21,150/12 = 1,762.50 + +# === CURRENT SCALE (2024) BRACKET BOUNDARIES === + +- name: Case 1, current scale income at exactly 100% FPG boundary. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + # Annual income = FPG for size 2 = 20,440 + # Monthly income = 20,440/12 = 1,703.33 + # Monthly FPG = 20,440/12 = 1,703.33 + # FPG ratio = 1.0000 -> at 100%, still in 0-100% bracket + employment_income: 20_440 + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # FPG ratio = 1.0 -> bracket threshold is 1.0001 for $60 + # 1.0 < 1.0001 -> stays in $0 bracket + # 1 child * $0 = $0 + # Income cap: 20,440 * 0.07 / 12 = 119.23 + # Copay: min(0, 119.23) = $0 + va_ccsp_copay: 0 + +- name: Case 2, current scale income just above 100% FPG boundary. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + # Need FPG ratio just above 1.0001 + # Monthly FPG = 1,703.33 + # Monthly income = 1,703.33 * 1.001 = 1,705.04 + # Annual = 1,705.04 * 12 = 20,460.44 + employment_income: 20_461 + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # Monthly income: 20,461/12 = 1,705.08 + # FPG ratio: 1,705.08 / 1,703.33 = 1.0010 -> above 1.0001 + # Per-child copay: $60 + # 1 child * $60 = $60 + # Income cap: 20,461 * 0.07 / 12 = 119.36 + # Copay: min(60, 119.36) = $60 + va_ccsp_copay: 60 + +- name: Case 3, current scale income at exactly 200% FPG boundary. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + # 200% FPG = 40,880 annual + # FPG ratio = 2.0 -> threshold for $120 is 2.0001 + # 2.0 < 2.0001 -> stays in $60 bracket + employment_income: 40_880 + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # FPG ratio = 2.0 -> still in $60 bracket (threshold is 2.0001) + # 1 child * $60 = $60 + # Income cap: 40,880 * 0.07 / 12 = 238.47 + # Copay: min(60, 238.47) = $60 + va_ccsp_copay: 60 + +- name: Case 4, current scale income just above 300% FPG. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + # 300% FPG = 61,320 annual + # Need above 3.0001: 61,321 -> ratio = 61,321/20,440 = 2.9999... + # Actually: monthly 61,321/12 = 5,110.08 / (20,440/12 = 1,703.33) = 2.9999 + # Need higher: 61,350 -> 5,112.50/1,703.33 = 3.001 -> above 3.0001 + employment_income: 61_350 + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # Monthly income: 61,350/12 = 5,112.50 + # FPG ratio: 5,112.50/1,703.33 = 3.001 -> $180 bracket + # 1 child * $180 = $180 + # Income cap: 61,350 * 0.07 / 12 = 357.88 + # Copay: min(180, 357.88) = $180 + va_ccsp_copay: 180 + +# === MAX CHILDREN CAP === + +- name: Case 5, exactly 3 eligible children assessed. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + employment_income: 48_000 + immigration_status: CITIZEN + person2: + age: 10 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person3: + age: 7 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person4: + age: 4 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2, person3, person4] + state_code: VA + output: + # Monthly income: 48,000/12 = 4,000 + # FPG size 4: 31,200, monthly = 2,600 + # FPG ratio: 4,000/2,600 = 1.5385 -> $60/child + # 3 eligible children = min(3, 3) = 3 + # Scale total: $60 * 3 = $180 + # Income cap: 48,000 * 0.07 / 12 = 280 + # Copay: min(180, 280) = $180 + va_ccsp_copay: 180 + +- name: Case 6, 5 eligible children still capped at 3. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + employment_income: 60_000 + immigration_status: CITIZEN + person2: + age: 11 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person3: + age: 9 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person4: + age: 7 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person5: + age: 4 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person6: + age: 2 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2, person3, person4, person5, person6] + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5, person6] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2, person3, person4, person5, person6] + state_code: VA + output: + # Monthly income: 60,000/12 = 5,000 + # FPG size 6: 15,060 + 5*5,380 = 41,960, monthly = 3,496.67 + # FPG ratio: 5,000/3,496.67 = 1.4299 -> $60/child + # 5 eligible children, capped at 3 + # Scale total: $60 * 3 = $180 + # Income cap: 60,000 * 0.07 / 12 = 350 + # Copay: min(180, 350) = $180 + va_ccsp_copay: 180 + +# === INCOME CAP BINDING === + +- name: Case 7, income cap binds below scale total. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 24_000 + immigration_status: CITIZEN + person2: + age: 8 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person3: + age: 6 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person4: + age: 3 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2, person3, person4] + state_code: VA + output: + # Monthly income: 24,000/12 = 2,000 + # FPG size 4: 31,200, monthly = 2,600 + # FPG ratio: 2,000/2,600 = 0.7692 -> $0/child + # Scale total: $0 * 3 = $0 + # Income cap: 24,000 * 0.07 / 12 = 140 + # Copay: min(0, 140) = $0 + va_ccsp_copay: 0 + +- name: Case 8, income cap binds with high copay bracket and low income. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + # Need FPG ratio > 300% but low absolute income + # Use large family to get low FPG + # Single person: FPG = 15,060 for size 1 (not possible with child) + # Family of 2: FPG = 20,440 + # Income = 36,000, Monthly = 3,000 + # FPG ratio: 3,000/(20,440/12) = 3,000/1,703.33 = 1.761 -> $60 + # Not high enough. Need >300%: income > 61,320 + # But that makes income cap high too. + # Better: 3 children at $180 each = $540 + # With income = 84,000, cap = 84,000*0.07/12 = 490 + # 490 < 540 -> cap binds! + employment_income: 84_000 + immigration_status: CITIZEN + person2: + age: 10 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person3: + age: 7 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person4: + age: 4 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2, person3, person4] + state_code: VA + output: + # Monthly income: 84,000/12 = 7,000 + # FPG size 4: 31,200, monthly = 2,600 + # FPG ratio: 7,000/2,600 = 2.6923 -> $120/child + # 3 children, scale total: $120 * 3 = $360 + # Income cap: 84,000 * 0.07 / 12 = 490 + # Copay: min(360, 490) = $360 + va_ccsp_copay: 360 + +# === 2025-07-01 NEW COPAY SCALE (tested at 2026-01) === +# +# 2026 FPG: first_person = 15,960, additional = 5,680 +# Family of 2: 21,640 +# Monthly FPG: 21,640/12 = 1,803.33 +# +# New brackets (2025-07-01): +# 0%: $0, >0-100%: $5, >100-150%: $125, >150-200%: $175, +# >200-250%: $225, >250-300%: $275, >300-350%: $325, >350%+: $375 +# Income cap: 5% + +- name: Case 9, new scale zero income. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # Zero income -> FPG ratio = 0 -> $0/child + va_ccsp_copay: 0 + +- name: Case 10, new scale above $0 but under 100% FPG ($5 bracket). + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 12_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # Monthly income: 12,000/12 = 1,000 + # Monthly FPG: 21,640/12 = 1,803.33 + # FPG ratio: 1,000/1,803.33 = 0.5546 -> new scale >0 = $5 + # 1 child * $5 = $5 + # Income cap: 12,000 * 0.05 / 12 = 50 + # Copay: min(5, 50) = $5 + va_ccsp_copay: 5 + +- name: Case 11, new scale above 100% FPG ($125 bracket). + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 24_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # Monthly income: 24,000/12 = 2,000 + # Monthly FPG: 21,640/12 = 1,803.33 + # FPG ratio: 2,000/1,803.33 = 1.1090 -> new scale >100% = $125 + # 1 child * $125 = $125 + # Income cap: 24,000 * 0.05 / 12 = 100 + # Copay: min(125, 100) = $100 (income cap binds) + va_ccsp_copay: 100 + +- name: Case 12, new scale above 200% FPG ($225 bracket). + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 48_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # Monthly income: 48,000/12 = 4,000 + # Monthly FPG: 21,640/12 = 1,803.33 + # FPG ratio: 4,000/1,803.33 = 2.2178 -> new scale >200% = $225 + # 1 child * $225 = $225 + # Income cap: 48,000 * 0.05 / 12 = 200 + # Copay: min(225, 200) = $200 (income cap binds) + va_ccsp_copay: 200 + +- name: Case 13, new scale above 350% FPG ($375 bracket). + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 84_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # Monthly income: 84,000/12 = 7,000 + # Monthly FPG: 21,640/12 = 1,803.33 + # FPG ratio: 7,000/1,803.33 = 3.8814 -> new scale >350% = $375 + # 1 child * $375 = $375 + # Income cap: 84,000 * 0.05 / 12 = 350 + # Copay: min(375, 350) = $350 (income cap binds) + va_ccsp_copay: 350 + +- name: Case 14, new scale 5% income cap with 3 children. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + employment_income: 84_000 + immigration_status: CITIZEN + person2: + age: 10 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person3: + age: 7 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person4: + age: 4 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2, person3, person4] + state_code: VA + output: + # Monthly income: 84,000/12 = 7,000 + # FPG size 4: 15,960 + 5,680*3 = 33,000, monthly = 2,750 + # FPG ratio: 7,000/2,750 = 2.5455 -> new scale >250% = $275 + # 3 eligible children, scale total: $275 * 3 = $825 + # Income cap: 84,000 * 0.05 / 12 = 350 (5% cap) + # Copay: min(825, 350) = $350 + va_ccsp_copay: 350 + +# === TANF RECIPIENT ZERO COPAY === + +- name: Case 15, TANF recipient with high income still pays zero. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 60_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person3: + age: 3 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2, person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + is_tanf_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + # TANF -> $0 regardless of income/bracket + va_ccsp_copay: 0 + +# === SINGLE CHILD COPAY === + +- name: Case 16, single child copay not inflated by max_children. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 72_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # FPG ratio > 300% -> $180/child + # 1 child * $180 = $180 + # Income cap: 72,000 * 0.07 / 12 = 420 + # Copay: min(180, 420) = $180 + va_ccsp_copay: 180 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/va_ccsp_edge.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/va_ccsp_edge.yaml new file mode 100644 index 00000000000..62811b9b313 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/va_ccsp_edge.yaml @@ -0,0 +1,225 @@ +# Virginia CCSP benefit edge case tests +# Focus: zero expenses, expenses less than copay, negative income prevention, +# zero income full subsidy, ineligible returns zero +# +# Benefit = max(expenses - copay, 0) +# defined_for = "va_ccsp_eligible" -> ineligible SPMUnits get 0 + +- name: Case 1, zero childcare expenses yields zero benefit. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 36_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 0 + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # Eligible but no expenses -> benefit = max(0 - 60, 0) = 0 + va_ccsp: 0 + +- name: Case 2, expenses exactly equal to copay yields zero benefit. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 36_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + # Monthly copay = $60, need annual expenses = 60 * 12 = 720 + spm_unit_pre_subsidy_childcare_expenses: 720 + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # Monthly income: 36,000/12 = 3,000 + # FPG ratio: 3,000/(20,440/12) = 1.761 -> $60 copay + # Monthly expenses: 720/12 = 60 + # Benefit: max(60 - 60, 0) = $0 + va_ccsp: 0 + +- name: Case 3, expenses $1 more than copay yields $1 benefit. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 36_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + # Monthly copay = $60, need monthly expenses = $61 + # Annual = 61 * 12 = 732 + spm_unit_pre_subsidy_childcare_expenses: 732 + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # Monthly expenses: 732/12 = 61 + # Benefit: max(61 - 60, 0) = $1 + va_ccsp: 1 + +- name: Case 4, large expenses with zero income gives full subsidy. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 40 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 24_000 + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + va_ccsp_ready_region: CAPITAL_AREA + output: + # Zero income -> $0 copay + # Monthly expenses: 24,000/12 = 2,000 + # Benefit: max(2,000 - 0, 0) = $2,000 + va_ccsp: 2_000 + +- name: Case 5, TANF family gets full expenses as benefit. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 28 + employment_income: 12_000 + immigration_status: CITIZEN + person2: + age: 4 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + is_tanf_enrolled: true + spm_unit_pre_subsidy_childcare_expenses: 14_400 + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + va_ccsp_ready_region: CAPITAL_AREA + output: + # TANF -> $0 copay + # Monthly expenses: 14,400/12 = 1,200 + # Benefit: max(1,200 - 0, 0) = $1,200 + va_ccsp: 1_200 + +- name: Case 6, ineligible family returns zero benefit even with expenses. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 200_000 + immigration_status: CITIZEN + person2: + age: 8 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 24_000 + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # Income 200,000 >> 185% FPG = 37,814 -> ineligible + # defined_for = "va_ccsp_eligible" filters out -> $0 + va_ccsp: 0 + +- name: Case 7, family of 1 adult with no children gets zero. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 12_000 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + spm_unit_pre_subsidy_childcare_expenses: 6_000 + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1] + state_code: VA + output: + # No eligible children -> ineligible -> $0 + va_ccsp: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/va_ccsp_income_eligible_edge.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/va_ccsp_income_eligible_edge.yaml new file mode 100644 index 00000000000..6fe638173e3 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/edge_cases/va_ccsp_income_eligible_edge.yaml @@ -0,0 +1,569 @@ +# Virginia CCSP income eligibility edge case tests +# Focus: exact threshold boundaries for each locality group, +# enrolled vs not enrolled, young child SMI exception boundary +# +# 2024 FPG (contiguous US): first_person = 15,060, additional = 5,380 +# Family of 2: 20,440 +# +# 2024 VA SMI base (effective 2023-10-01): 121,130 +# Size 2: 121,130 * 0.68 = 82,368.40 +# 85% SMI size 2: 70,013.14 +# +# Group I: 150% FPG size 2 = 20,440 * 1.50 = 30,660 +# Group II: 160% FPG size 2 = 20,440 * 1.60 = 32,704 +# Group III: 185% FPG size 2 = 20,440 * 1.85 = 37,814 +# +# Income is tested as annual (SPMUnit MONTH reads YEAR income / 12). +# Threshold comparison is also monthly: annual_threshold / 12. +# So we test with annual income vs annual threshold equivalents. + +# === GROUP I BOUNDARY (150% FPG) === + +- name: Case 1, Group I income $1 below 150% FPG threshold. + period: 2024-01 + input: + people: + person1: + employment_income: 30_659 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + output: + # 150% FPG = 30,660 + # 30,659 <= 30,660 -> eligible + va_ccsp_income_eligible: true + +- name: Case 2, Group I income exactly at 150% FPG threshold. + period: 2024-01 + input: + people: + person1: + employment_income: 30_660 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + output: + # 150% FPG = 30,660 + # 30,660 <= 30,660 -> eligible (at threshold = eligible) + va_ccsp_income_eligible: true + +- name: Case 3, Group I income $1 above 150% FPG threshold. + period: 2024-01 + input: + people: + person1: + employment_income: 30_661 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + output: + # 150% FPG = 30,660 + # 30,661 > 30,660 -> ineligible + va_ccsp_income_eligible: false + +# === GROUP II BOUNDARY (160% FPG) === + +- name: Case 4, Group II income exactly at 160% FPG threshold. + period: 2024-01 + input: + people: + person1: + employment_income: 32_704 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_II + households: + household: + members: [person1, person2] + state_code: VA + output: + # 160% FPG = 32,704 + # 32,704 <= 32,704 -> eligible + va_ccsp_income_eligible: true + +- name: Case 5, Group II income $1 above 160% FPG threshold. + period: 2024-01 + input: + people: + person1: + employment_income: 32_705 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_II + households: + household: + members: [person1, person2] + state_code: VA + output: + # 160% FPG = 32,704 + # 32,705 > 32,704 -> ineligible + va_ccsp_income_eligible: false + +# === GROUP III BOUNDARY (185% FPG) === + +- name: Case 6, Group III income $1 below 185% FPG threshold. + period: 2024-01 + input: + people: + person1: + employment_income: 37_813 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # 185% FPG = 37,814 + # 37,813 <= 37,814 -> eligible + va_ccsp_income_eligible: true + +- name: Case 7, Group III income $1 above 185% FPG threshold. + period: 2024-01 + input: + people: + person1: + employment_income: 37_815 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # 185% FPG = 37,814 + # 37,815 > 37,814 -> ineligible + va_ccsp_income_eligible: false + +# === ENROLLED 85% SMI BOUNDARY === + +- name: Case 8, enrolled family income just below 85% SMI. + period: 2024-01 + input: + people: + person1: + # SMI size 2: 121,130 * 0.68 = 82,368.40 + # 85% SMI = 82,368.40 * 0.85 = 70,013.14 + # Monthly: 82,368.40/12 * 0.85 = 5,834.43 + # Annual 70,013 -> monthly 5,834.42 <= 5,834.43 -> eligible + employment_income: 70_013 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + output: + # Enrolled -> 85% SMI = 70,013.14 + # 70,013 <= 70,013.14 -> eligible + va_ccsp_income_eligible: true + +- name: Case 9, enrolled family income $1 above 85% SMI. + period: 2024-01 + input: + people: + person1: + employment_income: 70_014 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + output: + # 85% SMI = 70,013.14 + # 70,014 > 70,013.14 -> ineligible + va_ccsp_income_eligible: false + +# === YOUNG CHILD SMI EXCEPTION BOUNDARY === + +- name: Case 10, young child age 5 triggers SMI exception. + period: 2024-01 + input: + people: + person1: + employment_income: 48_000 + person2: + age: 5 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + output: + # Group I: 150% FPG = 30,660 + # Young child (age 5 < 6): also check 85% SMI = 70,013.14 + # Use max(30,660, 70,013.14) = 70,013.14 + # 48,000 <= 70,013.14 -> eligible + va_ccsp_income_eligible: true + +- name: Case 11, child age 6 does NOT trigger SMI exception. + period: 2024-01 + input: + people: + person1: + employment_income: 48_000 + person2: + age: 6 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + output: + # Group I: 150% FPG = 30,660 + # Child age 6 not < 6: no SMI exception + # 48,000 > 30,660 -> ineligible + va_ccsp_income_eligible: false + +# === ENROLLED OVERRIDES LOCALITY GROUP === + +- name: Case 12, enrolled family in Group I uses SMI not FPG. + period: 2024-01 + input: + people: + person1: + employment_income: 60_000 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + output: + # Enrolled -> exit limit = 85% SMI = 70,013.14 + # (Not Group I 150% FPG = 30,660 -- enrolled uses SMI) + # 60,000 <= 70,013.14 -> eligible + va_ccsp_income_eligible: true + +# === ZERO INCOME === + +- name: Case 13, zero income always eligible. + period: 2024-01 + input: + people: + person1: + age: 30 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + output: + # 0 <= any threshold -> eligible + va_ccsp_income_eligible: true + +# === TANF CATEGORICAL ELIGIBILITY === + +- name: Case 14, TANF-enrolled household waives income test. + period: 2024-01 + input: + people: + person1: + employment_income: 200_000 + person2: + age: 3 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_III + is_tanf_enrolled: true + households: + household: + members: [person1, person2] + state_code: VA + output: + # Income far above any threshold but TANF -> waived + va_ccsp_income_eligible: true + +# === FAIRFAX/ALEXANDRIA EXCEPTION (250% FPG capped at 85% SMI) === + +- name: Case 15, Fairfax family eligible at 250% FPG. + period: 2024-01 + input: + people: + person1: + employment_income: 50_000 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + county: FAIRFAX_COUNTY_VA + output: + # Fairfax: 250% FPG = 20,440 * 2.5 = 51,100 + # 85% SMI = 70,013.14 + # Limit: min(51,100, 70,013.14) = 51,100 + # 50,000 <= 51,100 -> eligible + va_ccsp_income_eligible: true + +- name: Case 16, Fairfax family above 250% FPG ineligible. + period: 2024-01 + input: + people: + person1: + employment_income: 51_101 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + county: FAIRFAX_COUNTY_VA + output: + # Fairfax: 250% FPG = 51,100 + # 51,101 > 51,100 -> ineligible + va_ccsp_income_eligible: false + +- name: Case 17, Alexandria family eligible under 250% FPG exception. + period: 2024-01 + input: + people: + person1: + employment_income: 45_000 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + county: ALEXANDRIA_CITY_VA + output: + # Alexandria: 250% FPG = 51,100 + # 45,000 <= 51,100 -> eligible + va_ccsp_income_eligible: true + +- name: Case 18, non-Fairfax Group III family at same income ineligible. + period: 2024-01 + input: + people: + person1: + employment_income: 45_000 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + county: STAFFORD_COUNTY_VA + output: + # Stafford is Group III but NOT Fairfax/Alexandria + # 185% FPG = 37,814 + # 45,000 > 37,814 -> ineligible + va_ccsp_income_eligible: false + +# === MEDICAID/WIC INCOME WAIVER === + +- name: Case 19, Medicaid recipient waives income test. + period: 2024-01 + input: + people: + person1: + employment_income: 200_000 + receives_medicaid: true + person2: + age: 5 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # Income far above any threshold but Medicaid -> waived + va_ccsp_income_eligible: true + +- name: Case 20, WIC recipient waives income test. + period: 2024-01 + input: + people: + person1: + employment_income: 200_000 + person2: + age: 2 + is_tax_unit_dependent: true + immigration_status: CITIZEN + receives_wic: true + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # Child on WIC -> income test waived for unit + va_ccsp_income_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/integration.yaml new file mode 100644 index 00000000000..9a785d99dea --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/integration.yaml @@ -0,0 +1,378 @@ +# Virginia CCSP Integration Tests +# +# 2024 FPG (contiguous US): +# first_person = 15,060, additional = 5,380 +# Family of 2: 20,440 Family of 3: 25,820 +# Family of 4: 31,200 Family of 5: 36,580 +# +# 2024 VA SMI base: 121,130 (effective 2023-10-01) +# SMI size adj: first_person=0.52, second_to_sixth=0.16, threshold=6 +# Size 2: 121,130*0.68 = 82,368.40 +# Size 3: 121,130*0.84 = 101,749.20 +# Size 4: 121,130*1.00 = 121,130.00 +# Size 5: 121,130*1.16 = 140,510.80 +# 85% SMI: Size 2=69,913.14, Size 3=86,486.82, +# Size 4=102,960.50, Size 5=119,434.18 +# +# Current copay (2024): $0/$0/$60/$60/$120/$120/$180/$180 +# Income cap: 7% +# Max children: 3 + +- name: Case 1, basic eligible single parent with one child Group III. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 36_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 12_000 + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # === Child eligibility === + # person2: age 5 < 13, citizen, dependent -> eligible + va_ccsp_child_eligible: [false, true] + + # === Income === + # Countable: 36,000 / 12 = 3,000/month + va_ccsp_countable_income: 3_000 + + # FPG size 2: 20,440 + # New applicant Group III: 185% FPG = 20,440 * 1.85 = 37,814 + # Also young child (age 5 <= 5): 85% SMI = 69,913.14 + # Use max(37,814, 69,913.14) = 69,913.14 + # 36,000 <= 69,913.14 -> income eligible + va_ccsp_income_eligible: true + + # === Asset === + # Default assets 0 <= 1,000,000 + is_ccdf_asset_eligible: true + + # === Overall === + va_ccsp_eligible: true + + # === Copay === + # Monthly FPG: 20,440 / 12 = 1,703.33 + # FPG ratio: 3,000 / 1,703.33 = 1.7610 -> $60/child + # 1 child, scale total = $60 + # Income cap: 36,000 * 0.07 / 12 = 210 + # Copay: min(60, 210) = $60 + va_ccsp_copay: 60 + + # === Benefit === + # Monthly expenses: 12,000 / 12 = 1,000 + # Benefit before MRR: max(1,000 - 60, 0) = $940 + # Default county ACCOMACK -> SOUTHEASTERN + # Age 5 = 60 months -> SCHOOL_AGE, CENTER rate = $30/day + # MRR: $30 * 23 = $690 + # Benefit: min(940, 690) = $690 + va_ccsp: 690 + +- name: Case 2, enrolled family at redetermination income limit. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + employment_income: 60_000 + immigration_status: CITIZEN + person2: + age: 33 + employment_income: 24_000 + immigration_status: CITIZEN + person3: + age: 10 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person4: + age: 7 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + spm_unit_pre_subsidy_childcare_expenses: 18_000 + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2, person3, person4] + state_code: VA + output: + # === Child eligibility === + # person3 (10) and person4 (7): both < 13, citizen -> eligible + va_ccsp_child_eligible: [false, false, true, true] + + # === Income === + # Countable: (60,000 + 24,000) / 12 = 7,000/month + va_ccsp_countable_income: 7_000 + + # Enrolled -> exit limit = 85% SMI + # SMI size 4: 121,130 * 1.00 = 121,130 + # 85% SMI = 102,960.50 + # 84,000 <= 102,960.50 -> income eligible + va_ccsp_income_eligible: true + + is_ccdf_asset_eligible: true + va_ccsp_eligible: true + + # === Copay === + # Monthly FPG size 4: 31,200 / 12 = 2,600 + # FPG ratio: 7,000 / 2,600 = 2.6923 -> $120/child + # 2 eligible children, scale total = $120 * 2 = $240 + # Income cap: 84,000 * 0.07 / 12 = 490 + # Copay: min(240, 490) = $240 + va_ccsp_copay: 240 + + # === Benefit === + # Monthly expenses: 18,000 / 12 = 1,500 + # Benefit: max(1,500 - 240, 0) = $1,260 + va_ccsp: 1_260 + +- name: Case 3, TANF recipient with zero copay. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 28 + employment_income: 12_000 + immigration_status: CITIZEN + person2: + age: 3 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: LEGAL_PERMANENT_RESIDENT + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + is_tanf_enrolled: true + spm_unit_pre_subsidy_childcare_expenses: 9_600 + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # === Child eligibility === + # person2: age 3 < 13, LPR (qualified) -> eligible + va_ccsp_child_eligible: [false, true] + + # === Income === + va_ccsp_countable_income: 1_000 + + # TANF enrolled -> auto income-eligible + va_ccsp_income_eligible: true + is_ccdf_asset_eligible: true + va_ccsp_eligible: true + + # === Copay === + # TANF recipient -> $0 copay + va_ccsp_copay: 0 + + # === Benefit === + # Monthly expenses: 9,600 / 12 = 800 + # Benefit: max(800 - 0, 0) = $800 + va_ccsp: 800 + +- name: Case 4, Group I applicant above FPG but with young child uses SMI. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 25 + employment_income: 48_000 + immigration_status: CITIZEN + person2: + age: 2 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 15_000 + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + va_ccsp_ready_region: CAPITAL_AREA + output: + # === Child eligibility === + va_ccsp_child_eligible: [false, true] + + # === Income === + # Countable: 48,000 / 12 = 4,000/month + va_ccsp_countable_income: 4_000 + + # Group I: 150% FPG = 20,440 * 1.5 = 30,660 + # 48,000 > 30,660 -- would fail FPG test + # But child age 2 <= 5: also check 85% SMI = 69,913.14 + # Use max(30,660, 69,913.14) = 69,913.14 + # 48,000 <= 69,913.14 -> income eligible + va_ccsp_income_eligible: true + + is_ccdf_asset_eligible: true + va_ccsp_eligible: true + + # === Copay === + # Monthly FPG: 20,440 / 12 = 1,703.33 + # FPG ratio: 4,000 / 1,703.33 = 2.3482 -> $120/child + # 1 child, scale total = $120 + # Income cap: 48,000 * 0.07 / 12 = 280 + # Copay: min(120, 280) = $120 + va_ccsp_copay: 120 + + # === Benefit === + # Monthly expenses: 15,000 / 12 = 1,250 + # Benefit: max(1,250 - 120, 0) = $1,130 + va_ccsp: 1_130 + +- name: Case 5, income too high for Group I without young child. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + employment_income: 48_000 + immigration_status: CITIZEN + person2: + age: 10 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 8_000 + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + output: + va_ccsp_child_eligible: [false, true] + + # Group I: 150% FPG = 20,440 * 1.5 = 30,660 + # No young child, not enrolled -> use 30,660 + # 48,000 > 30,660 -> income ineligible + va_ccsp_income_eligible: false + + va_ccsp_eligible: false + va_ccsp: 0 + +- name: Case 6, undocumented child makes family ineligible. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 24_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: UNDOCUMENTED + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 10_000 + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # Child is undocumented -> not eligible child + va_ccsp_child_eligible: [false, false] + + # No eligible children -> overall ineligible + va_ccsp_eligible: false + va_ccsp: 0 + +- name: Case 7, zero income family full subsidy. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + immigration_status: CITIZEN + person2: + age: 4 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person3: + age: 2 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2, person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + spm_unit_pre_subsidy_childcare_expenses: 18_000 + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + va_ccsp_child_eligible: [false, true, true] + + # Zero income + va_ccsp_countable_income: 0 + + # 0 <= any threshold -> income eligible + va_ccsp_income_eligible: true + is_ccdf_asset_eligible: true + va_ccsp_eligible: true + + # FPG ratio = 0 -> $0/child, cap = $0 + va_ccsp_copay: 0 + + # Monthly expenses: 18,000 / 12 = 1,500 + # Benefit: max(1,500 - 0, 0) = $1,500 + va_ccsp: 1_500 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp.yaml new file mode 100644 index 00000000000..0d4fc7d5524 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp.yaml @@ -0,0 +1,145 @@ +# Virginia CCSP benefit amount tests +# Benefit = min(max(childcare_expenses - copay, 0), monthly_mrr) + +- name: Case 1, basic benefit calculation. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 36_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 12_000 + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # Monthly income: 36,000 / 12 = 3,000 + # FPG size 2: 20,440 / 12 = 1,703.33 + # FPG ratio: 3,000 / 1,703.33 = 1.7610 -> $60 per child + # 1 eligible child, scale total = $60 + # Income cap: 36,000 * 0.07 / 12 = 210 + # Copay: min(60, 210) = $60 + # Monthly expenses: 12,000 / 12 = 1,000 + # Benefit before MRR: max(1,000 - 60, 0) = $940 + # Default county ACCOMACK -> SOUTHEASTERN + # Age 5 = 60 months -> SCHOOL_AGE, CENTER rate = $30/day + # MRR: $30 * 23 = $690 + # Benefit: min(940, 690) = $690 + va_ccsp: 690 + +- name: Case 2, copay exceeds expenses so benefit is zero. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 72_000 + immigration_status: CITIZEN + person2: + age: 8 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 1_200 + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # Monthly income: 72,000 / 12 = 6,000 + # FPG size 2: 20,440 / 12 = 1,703.33 + # FPG ratio: 6,000 / 1,703.33 = 3.5218 -> $180 per child + # 1 eligible child, scale total = $180 + # Income cap: 72,000 * 0.07 / 12 = 420 + # Copay: min(180, 420) = $180 + # Monthly expenses: 1,200 / 12 = 100 + # Benefit: max(100 - 180, 0) = $0 + va_ccsp: 0 + +- name: Case 3, ineligible family gets zero. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 120_000 + immigration_status: CITIZEN + person2: + age: 8 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 12_000 + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + va_ccsp: 0 + +- name: Case 4, zero income family gets full subsidy. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 10_000 + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # Zero income -> $0 copay + # Monthly expenses: 10,000 / 12 = 833.33 + # Benefit before MRR: max(833.33 - 0, 0) = $833.33 + # Default county ACCOMACK -> SOUTHEASTERN + # Age 5 = 60 months -> SCHOOL_AGE, CENTER rate = $30/day + # MRR: $30 * 23 = $690 + # Benefit: min(833.33, 690) = $690 + va_ccsp: 690 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_activity_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_activity_eligible.yaml new file mode 100644 index 00000000000..5b09c85d86e --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_activity_eligible.yaml @@ -0,0 +1,161 @@ +# Virginia CCSP activity eligibility tests +# Simplified proxy: parent meets activity requirement if +# weekly_hours_worked >= min hours threshold OR is_in_k12_school +# All heads/spouses must meet requirement (same pattern as RI CCAP) + +- name: Case 1, parent working full time. + period: 2024-01 + input: + people: + person1: + age: 30 + weekly_hours_worked: 40 + person2: + age: 5 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + va_ccsp_activity_eligible: true + +- name: Case 2, parent not working enough hours. + period: 2024-01 + input: + people: + person1: + age: 30 + weekly_hours_worked: 5 + is_full_time_student: false + is_in_k12_school: false + person2: + age: 5 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + va_ccsp_activity_eligible: false + +- name: Case 3, parent is student. + period: 2024-01 + input: + people: + person1: + age: 22 + weekly_hours_worked: 0 + is_in_k12_school: true + person2: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # In school -> meets activity requirement + va_ccsp_activity_eligible: true + +- name: Case 4, two parents both working. + period: 2024-01 + input: + people: + person1: + age: 35 + weekly_hours_worked: 40 + person2: + age: 33 + weekly_hours_worked: 30 + person3: + age: 5 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2, person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + va_ccsp_activity_eligible: true + +- name: Case 5, two parents one not meeting requirement. + period: 2024-01 + input: + people: + person1: + age: 35 + weekly_hours_worked: 40 + person2: + age: 33 + weekly_hours_worked: 0 + is_full_time_student: false + is_in_k12_school: false + person3: + age: 5 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2, person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + # Person2 is head/spouse but fails activity test + va_ccsp_activity_eligible: false + +- name: Case 6, two parents one works other is disabled. + period: 2024-01 + input: + people: + person1: + age: 35 + weekly_hours_worked: 40 + person2: + age: 33 + weekly_hours_worked: 0 + is_full_time_student: false + is_disabled: true + person3: + age: 5 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2, person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + # Person1 works (active), person2 disabled (meets requirement) + va_ccsp_activity_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_care_age_group.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_care_age_group.yaml new file mode 100644 index 00000000000..251f8b0659a --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_care_age_group.yaml @@ -0,0 +1,141 @@ +- name: Case 1, newborn is infant. + period: 2024 + input: + people: + person1: + age: 0 + households: + household: + members: [person1] + state_code: VA + output: + va_ccsp_care_age_group: INFANT + +- name: Case 2, 12 month old (1 year) is still infant. + period: 2024 + input: + people: + person1: + age: 1 + households: + household: + members: [person1] + state_code: VA + output: + # 12 months < 16 month cutoff -> infant + va_ccsp_care_age_group: INFANT + +- name: Case 3, 15 month old is still infant. + period: 2024 + input: + people: + person1: + age: 1.25 + households: + household: + members: [person1] + state_code: VA + output: + # 15 months < 16 month cutoff -> infant + va_ccsp_care_age_group: INFANT + +- name: Case 4, 16 month old is toddler. + period: 2024 + input: + people: + person1: + # 16/12 = 1.333... + age: 1.334 + households: + household: + members: [person1] + state_code: VA + output: + # 16 months >= 16 month cutoff -> toddler + va_ccsp_care_age_group: TODDLER + +- name: Case 5, 23 month old is toddler. + period: 2024 + input: + people: + person1: + # 23/12 = 1.9167 + age: 1.917 + households: + household: + members: [person1] + state_code: VA + output: + # 23 months < 24 month cutoff -> toddler + va_ccsp_care_age_group: TODDLER + +- name: Case 6, 2 year old (24 months) is two year old. + period: 2024 + input: + people: + person1: + age: 2 + households: + household: + members: [person1] + state_code: VA + output: + # 24 months >= 24, < 36 -> two year old + va_ccsp_care_age_group: TWO_YEAR_OLD + +- name: Case 7, 4 year old is preschool. + period: 2024 + input: + people: + person1: + age: 4 + households: + household: + members: [person1] + state_code: VA + output: + # 48 months >= 36, < 72 -> preschool + va_ccsp_care_age_group: PRESCHOOL + +- name: Case 8, 5 year old is school age. + period: 2024 + input: + people: + person1: + age: 5 + households: + household: + members: [person1] + state_code: VA + output: + # 60 months >= 60 -> school age + va_ccsp_care_age_group: SCHOOL_AGE + +- name: Case 9, 7 year old is school age. + period: 2024 + input: + people: + person1: + age: 7 + households: + household: + members: [person1] + state_code: VA + output: + # 84 months >= 60 -> school age + va_ccsp_care_age_group: SCHOOL_AGE + +- name: Case 10, 59 month old is preschool. + period: 2024 + input: + people: + person1: + # 59/12 = 4.9167 + age: 4.917 + households: + household: + members: [person1] + state_code: VA + output: + # 59 months < 60 -> preschool + va_ccsp_care_age_group: PRESCHOOL diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_child_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_child_eligible.yaml new file mode 100644 index 00000000000..386d1dad827 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_child_eligible.yaml @@ -0,0 +1,186 @@ +# Virginia CCSP child eligibility tests +# Tests: age < 13 (or < 18 if disabled), immigration, residency +# Uses federal CCDF variables: is_ccdf_age_eligible, is_ccdf_immigration_eligible_child + +- name: Case 1, child under 13 and citizen. + period: 2024-01 + input: + people: + person1: + age: 30 + person2: + age: 5 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + va_ccsp_child_eligible: [false, true] + +- name: Case 2, child exactly age 13 is ineligible. + period: 2024-01 + input: + people: + person1: + age: 40 + person2: + age: 13 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + va_ccsp_child_eligible: [false, false] + +- name: Case 3, disabled child age 15 is eligible. + period: 2024-01 + input: + people: + person1: + age: 40 + person2: + age: 15 + is_tax_unit_dependent: true + is_disabled: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + va_ccsp_child_eligible: [false, true] + +- name: Case 4, disabled child age 18 is ineligible. + period: 2024-01 + input: + people: + person1: + age: 45 + person2: + age: 18 + is_tax_unit_dependent: true + is_disabled: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + va_ccsp_child_eligible: [false, false] + +- name: Case 5, undocumented child is ineligible. + period: 2024-01 + input: + people: + person1: + age: 30 + person2: + age: 5 + is_tax_unit_dependent: true + immigration_status: UNDOCUMENTED + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + va_ccsp_child_eligible: [false, false] + +- name: Case 6, non-dependent adult is not eligible as child. + period: 2024-01 + input: + people: + person1: + age: 30 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: VA + output: + va_ccsp_child_eligible: [false] + +- name: Case 7, refugee child under 13 is eligible. + period: 2024-01 + input: + people: + person1: + age: 35 + person2: + age: 3 + is_tax_unit_dependent: true + immigration_status: REFUGEE + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + va_ccsp_child_eligible: [false, true] + +- name: Case 8, non-VA child is not eligible. + period: 2024-01 + input: + people: + person1: + age: 30 + person2: + age: 5 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: MD + output: + va_ccsp_child_eligible: [false, false] diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_copay.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_copay.yaml new file mode 100644 index 00000000000..9417653cddd --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_copay.yaml @@ -0,0 +1,216 @@ +# Virginia CCSP family copayment tests +# Formula: copay = min(per_child_copay * min(n_eligible_children, 3), income * cap_rate / 12) +# TANF recipients: $0 copay +# +# 2024 FPG (contiguous US): first_person = 15,060, additional = 5,380 +# Family of 4: 31,200 +# +# Current (2023) params: max 3 children, 7% income cap +# New (2025-07-01) params: max 3 children, 5% income cap + +- name: Case 1, two children current scale with income cap binding. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 24_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person3: + age: 3 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2, person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + # Monthly income: 24,000 / 12 = 2,000 + # Monthly FPG: 25,820 / 12 = 2,151.67 + # FPG ratio: 2,000 / 2,151.67 = 0.9296 -> $0 per child + # Scale total: $0 * 2 = $0 + # Income cap: 24,000 * 0.07 / 12 = 140 + # Copay: min(0, 140) = $0 + va_ccsp_copay: 0 + +- name: Case 2, two children current scale uncapped. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 48_000 + immigration_status: CITIZEN + person2: + age: 8 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person3: + age: 6 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2, person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + # Monthly income: 48,000 / 12 = 4,000 + # Monthly FPG: 25,820 / 12 = 2,151.67 + # FPG ratio: 4,000 / 2,151.67 = 1.8591 -> $60/child + # Scale total: $60 * 2 = $120 + # Income cap: 48,000 * 0.07 / 12 = 280 + # Copay: min(120, 280) = $120 + va_ccsp_copay: 120 + +- name: Case 3, four children capped at 3 children. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + employment_income: 60_000 + immigration_status: CITIZEN + person2: + age: 10 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person3: + age: 8 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person4: + age: 6 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person5: + age: 3 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2, person3, person4, person5] + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2, person3, person4, person5] + state_code: VA + output: + # Monthly income: 60,000 / 12 = 5,000 + # FPG size 5: 36,580 + # Monthly FPG: 36,580 / 12 = 3,048.33 + # FPG ratio: 5,000 / 3,048.33 = 1.6402 -> $60/child + # 4 eligible children, capped at 3 + # Scale total: $60 * 3 = $180 + # Income cap: 60,000 * 0.07 / 12 = 350 + # Copay: min(180, 350) = $180 + va_ccsp_copay: 180 + +- name: Case 4, TANF recipient pays zero copay. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 24_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + is_tanf_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + va_ccsp_copay: 0 + +- name: Case 5, income cap binds below scale total. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 36_000 + immigration_status: CITIZEN + person2: + age: 8 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person3: + age: 6 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + person4: + age: 3 + is_tax_unit_dependent: true + childcare_attending_days_per_month: 23 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2, person3, person4] + state_code: VA + output: + # Monthly income: 36,000 / 12 = 3,000 + # FPG size 4: 31,200 + # Monthly FPG: 31,200 / 12 = 2,600 + # FPG ratio: 3,000 / 2,600 = 1.1538 -> $60/child + # 3 eligible children (all 3 assessed) + # Scale total: $60 * 3 = $180 + # Income cap: 36,000 * 0.07 / 12 = 210 + # Copay: min(180, 210) = $180 + va_ccsp_copay: 180 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_countable_income.yaml new file mode 100644 index 00000000000..7011296f88c --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_countable_income.yaml @@ -0,0 +1,114 @@ +# Virginia CCSP countable income tests +# va_ccsp_countable_income uses adds/subtracts pattern: +# adds: employment_income, self_employment_income, child_support_received, +# social_security, pension_income, unemployment_compensation, +# workers_compensation, veterans_benefits, disability_benefits, +# interest_income, dividend_income, rental_income, alimony_income +# subtracts: child_support_expense +# +# Variable is SPMUnit, MONTH. Income sources are Person, YEAR. +# In MONTH test: input annual amounts, output = monthly (annual / 12). + +- name: Case 1, employment income only. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + employment_income: 36_000 + person2: + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # 36,000 / 12 = 3,000 + va_ccsp_countable_income: 3_000 + +- name: Case 2, multiple income sources. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + employment_income: 24_000 + self_employment_income: 6_000 + child_support_received: 3_600 + person2: + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # (24,000 + 6,000 + 3,600) / 12 = 2,800 + va_ccsp_countable_income: 2_800 + +- name: Case 3, income with child support deduction. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + employment_income: 48_000 + child_support_expense: 6_000 + person2: + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + # (48,000 - 6,000) / 12 = 3,500 + va_ccsp_countable_income: 3_500 + +- name: Case 4, zero income. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + person2: + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + va_ccsp_countable_income: 0 + +- name: Case 5, two-parent household with combined income. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + employment_income: 30_000 + person2: + employment_income: 24_000 + person3: + age: 5 + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + # (30,000 + 24,000) / 12 = 4,500 + va_ccsp_countable_income: 4_500 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_daily_mrr.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_daily_mrr.yaml new file mode 100644 index 00000000000..22bd24e6cc5 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_daily_mrr.yaml @@ -0,0 +1,104 @@ +- name: Case 1, center infant in Capital Area full day. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 0 + va_ccsp_provider_type: CENTER + va_ccsp_is_full_day: true + households: + household: + members: [person1] + state_code: VA + va_ccsp_ready_region: CAPITAL_AREA + output: + va_ccsp_daily_mrr: 94 + +- name: Case 2, center school age in Southwest full day. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 8 + va_ccsp_provider_type: CENTER + va_ccsp_is_full_day: true + households: + household: + members: [person1] + state_code: VA + va_ccsp_ready_region: SOUTHWEST + output: + va_ccsp_daily_mrr: 27 + +- name: Case 3, family day home in Southeastern full day. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 3 + va_ccsp_provider_type: FAMILY_DAY_HOME + va_ccsp_is_full_day: true + households: + household: + members: [person1] + state_code: VA + va_ccsp_ready_region: SOUTHEASTERN + output: + va_ccsp_daily_mrr: 54 + +- name: Case 4, center infant in Blue Ridge part day. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 1 + va_ccsp_provider_type: CENTER + va_ccsp_is_full_day: false + households: + household: + members: [person1] + state_code: VA + va_ccsp_ready_region: BLUE_RIDGE + output: + # Age 1 = 12 months < 16 month cutoff -> INFANT + # Full day: $70, part day: $70 * 0.7 = $49 + va_ccsp_daily_mrr: 49 + +- name: Case 5, family day home in West part day. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 4 + va_ccsp_provider_type: FAMILY_DAY_HOME + va_ccsp_is_full_day: false + households: + household: + members: [person1] + state_code: VA + va_ccsp_ready_region: WEST + output: + # Full day: $51, part day: $51 * 0.7 = $35.7 + va_ccsp_daily_mrr: 35.7 + +- name: Case 6, center 2 year old in North Central full day. + period: 2024-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 2 + va_ccsp_provider_type: CENTER + va_ccsp_is_full_day: true + households: + household: + members: [person1] + state_code: VA + va_ccsp_ready_region: NORTH_CENTRAL + output: + va_ccsp_daily_mrr: 55 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_eligible.yaml new file mode 100644 index 00000000000..d1f81cace88 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_eligible.yaml @@ -0,0 +1,130 @@ +# Virginia CCSP overall eligibility tests +# Combines: has eligible child, income eligible, asset eligible, activity eligible + +- name: Case 1, basic eligible family. + period: 2024-01 + input: + people: + person1: + age: 30 + employment_income: 24_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + va_ccsp_eligible: true + +- name: Case 2, income too high. + period: 2024-01 + input: + people: + person1: + age: 30 + employment_income: 120_000 + immigration_status: CITIZEN + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # 185% FPG size 2 = 20,440 * 1.85 = 37,814 + # 120,000 > 37,814 -> income ineligible -> overall ineligible + va_ccsp_eligible: false + +- name: Case 3, no eligible children. + period: 2024-01 + input: + people: + person1: + age: 30 + employment_income: 24_000 + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1] + state_code: VA + output: + va_ccsp_eligible: false + +- name: Case 4, not in Virginia. + period: 2024-01 + input: + people: + person1: + age: 30 + employment_income: 24_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: MD + output: + va_ccsp_eligible: false + +- name: Case 5, assets over $1 million. + period: 2024-01 + input: + people: + person1: + age: 30 + employment_income: 24_000 + immigration_status: CITIZEN + person2: + age: 5 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_assets: 1_500_000 + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + va_ccsp_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_income_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_income_eligible.yaml new file mode 100644 index 00000000000..3dcc4570cef --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_income_eligible.yaml @@ -0,0 +1,212 @@ +# Virginia CCSP income eligibility tests +# Logic: +# - New applicants (not enrolled): income <= FPG * locality_fpg_rate +# GROUP_I: 150% FPG, GROUP_II: 160% FPG, GROUP_III: 185% FPG +# - Enrolled (redetermination): income <= 85% SMI +# - Families with child <= 5: also eligible if income <= 85% SMI +# - TANF recipients: auto income-eligible +# +# 2024 FPG (contiguous US): first_person = 15,060, additional = 5,380 +# Family of 2: 20,440 Family of 3: 25,820 Family of 4: 31,200 +# +# 2024 VA SMI base: 121,130 (effective 2023-10-01) +# SMI size adj: 0.52 + 0.16*(min(size-1,5)) + 0.03*max(size-6,0) +# Size 2: 121,130 * 0.68 = 82,368.40 +# Size 3: 121,130 * 0.84 = 101,749.20 +# Size 4: 121,130 * 1.00 = 121,130.00 +# 85% SMI size 2: 69,913.14 +# 85% SMI size 3: 86,486.82 +# 85% SMI size 4: 102,960.50 + +- name: Case 1, new applicant Group III below 185% FPG. + period: 2024-01 + input: + people: + person1: + employment_income: 48_000 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # FPG size 2: 20,440 + # 185% FPG = 20,440 * 1.85 = 37,814 + # Annual income 48,000, monthly = 4,000 + # Monthly limit = 37,814 / 12 = 3,151.17 + # 4,000 > 3,151.17 -> not income eligible + va_ccsp_income_eligible: false + +- name: Case 2, new applicant Group III below threshold. + period: 2024-01 + input: + people: + person1: + employment_income: 36_000 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # FPG size 2: 20,440 + # 185% FPG = 37,814 + # 36,000 <= 37,814 -> income eligible + va_ccsp_income_eligible: true + +- name: Case 3, new applicant Group I with lower threshold. + period: 2024-01 + input: + people: + person1: + employment_income: 32_000 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + output: + # FPG size 2: 20,440 + # 150% FPG = 20,440 * 1.5 = 30,660 + # 32,000 > 30,660 -> not income eligible + va_ccsp_income_eligible: false + +- name: Case 4, enrolled family at 85% SMI. + period: 2024-01 + input: + people: + person1: + employment_income: 84_000 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + output: + # Enrolled -> exit limit = 85% SMI + # SMI size 2: 82,368.40 + # 85% SMI = 69,913.14 + # 84,000 > 69,913.14 -> ineligible + va_ccsp_income_eligible: false + +- name: Case 5, enrolled family within 85% SMI. + period: 2024-01 + input: + people: + person1: + employment_income: 60_000 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_enrolled: true + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + output: + # 85% SMI size 2 = 69,913.14 + # 60,000 <= 69,913.14 -> eligible + va_ccsp_income_eligible: true + +- name: Case 6, new applicant with young child uses 85% SMI. + period: 2024-01 + input: + people: + person1: + employment_income: 48_000 + person2: + age: 4 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + va_ccsp_locality_group: GROUP_I + households: + household: + members: [person1, person2] + state_code: VA + output: + # Group I: 150% FPG = 20,440 * 1.5 = 30,660 + # Young child (age 4 <= 5): also check 85% SMI = 69,913.14 + # Use max(30,660, 69,913.14) = 69,913.14 + # 48,000 <= 69,913.14 -> eligible + va_ccsp_income_eligible: true + +- name: Case 7, TANF recipient auto income-eligible. + period: 2024-01 + input: + people: + person1: + employment_income: 120_000 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + is_tanf_enrolled: true + va_ccsp_locality_group: GROUP_III + households: + household: + members: [person1, person2] + state_code: VA + output: + # TANF enrolled -> auto income-eligible regardless of income + va_ccsp_income_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_income_test_waived.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_income_test_waived.yaml new file mode 100644 index 00000000000..dd7aafe7af9 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_income_test_waived.yaml @@ -0,0 +1,85 @@ +- name: Case 1, TANF enrolled waives income test. + period: 2024-01 + input: + people: + person1: + age: 30 + spm_units: + spm_unit: + members: [person1] + is_tanf_enrolled: true + households: + household: + members: [person1] + state_code: VA + output: + va_ccsp_income_test_waived: true + +- name: Case 2, Medicaid recipient waives income test. + period: 2024-01 + input: + people: + person1: + age: 30 + receives_medicaid: true + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: VA + output: + va_ccsp_income_test_waived: true + +- name: Case 3, WIC recipient waives income test. + period: 2024-01 + input: + people: + person1: + age: 30 + receives_wic: true + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: VA + output: + va_ccsp_income_test_waived: true + +- name: Case 4, no public assistance does not waive income test. + period: 2024-01 + input: + people: + person1: + age: 30 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: VA + output: + va_ccsp_income_test_waived: false + +- name: Case 5, child on Medicaid waives income test for unit. + period: 2024-01 + input: + people: + person1: + age: 30 + person2: + age: 5 + receives_medicaid: true + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + va_ccsp_income_test_waived: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_locality_group.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_locality_group.yaml new file mode 100644 index 00000000000..e0172b33bf8 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_locality_group.yaml @@ -0,0 +1,135 @@ +- name: Case 1, Group I county (Accomack). + period: 2024-01 + input: + people: + person1: + age: 30 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: VA + county: ACCOMACK_COUNTY_VA + output: + va_ccsp_locality_group: GROUP_I + +- name: Case 2, Group II county (Henrico). + period: 2024-01 + input: + people: + person1: + age: 30 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: VA + county: HENRICO_COUNTY_VA + output: + va_ccsp_locality_group: GROUP_II + +- name: Case 3, Group III county (Arlington). + period: 2024-01 + input: + people: + person1: + age: 30 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: VA + county: ARLINGTON_COUNTY_VA + output: + va_ccsp_locality_group: GROUP_III + +- name: Case 4, Group III city (Alexandria). + period: 2024-01 + input: + people: + person1: + age: 30 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: VA + county: ALEXANDRIA_CITY_VA + output: + va_ccsp_locality_group: GROUP_III + +- name: Case 5, Group II city (Norfolk). + period: 2024-01 + input: + people: + person1: + age: 30 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: VA + county: NORFOLK_CITY_VA + output: + va_ccsp_locality_group: GROUP_II + +- name: Case 6, Group I city (Lynchburg). + period: 2024-01 + input: + people: + person1: + age: 30 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: VA + county: LYNCHBURG_CITY_VA + output: + va_ccsp_locality_group: GROUP_I + +- name: Case 7, Group III county (Fairfax). + period: 2024-01 + input: + people: + person1: + age: 30 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: VA + county: FAIRFAX_COUNTY_VA + output: + va_ccsp_locality_group: GROUP_III + +- name: Case 8, Group II city (Chesapeake). + period: 2024-01 + input: + people: + person1: + age: 30 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: VA + county: CHESAPEAKE_CITY_VA + output: + va_ccsp_locality_group: GROUP_II diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_ready_region.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_ready_region.yaml new file mode 100644 index 00000000000..9a947ceac6d --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/ccsp/va_ccsp_ready_region.yaml @@ -0,0 +1,125 @@ +- name: Case 1, Capital Area (Arlington). + period: 2024-01 + input: + people: + person1: + age: 30 + households: + household: + members: [person1] + state_code: VA + county: ARLINGTON_COUNTY_VA + output: + va_ccsp_ready_region: CAPITAL_AREA + +- name: Case 2, Southeastern (Accomack). + period: 2024-01 + input: + people: + person1: + age: 30 + households: + household: + members: [person1] + state_code: VA + county: ACCOMACK_COUNTY_VA + output: + va_ccsp_ready_region: SOUTHEASTERN + +- name: Case 3, North Central (Loudoun). + period: 2024-01 + input: + people: + person1: + age: 30 + households: + household: + members: [person1] + state_code: VA + county: LOUDOUN_COUNTY_VA + output: + va_ccsp_ready_region: NORTH_CENTRAL + +- name: Case 4, Southwest (Bristol). + period: 2024-01 + input: + people: + person1: + age: 30 + households: + household: + members: [person1] + state_code: VA + county: BRISTOL_CITY_VA + output: + va_ccsp_ready_region: SOUTHWEST + +- name: Case 5, Blue Ridge (Rockingham). + period: 2024-01 + input: + people: + person1: + age: 30 + households: + household: + members: [person1] + state_code: VA + county: ROCKINGHAM_COUNTY_VA + output: + va_ccsp_ready_region: BLUE_RIDGE + +- name: Case 6, West (Roanoke County). + period: 2024-01 + input: + people: + person1: + age: 30 + households: + household: + members: [person1] + state_code: VA + county: ROANOKE_COUNTY_VA + output: + va_ccsp_ready_region: WEST + +- name: Case 7, Central (Henrico). + period: 2024-01 + input: + people: + person1: + age: 30 + households: + household: + members: [person1] + state_code: VA + county: HENRICO_COUNTY_VA + output: + va_ccsp_ready_region: CENTRAL + +- name: Case 8, Chesapeake Bay (York). + period: 2024-01 + input: + people: + person1: + age: 30 + households: + household: + members: [person1] + state_code: VA + county: YORK_COUNTY_VA + output: + va_ccsp_ready_region: CHESAPEAKE_BAY + +- name: Case 9, Southside (Bedford). + period: 2024-01 + input: + people: + person1: + age: 30 + households: + household: + members: [person1] + state_code: VA + county: BEDFORD_COUNTY_VA + output: + va_ccsp_ready_region: SOUTHSIDE diff --git a/policyengine_us/variables/gov/hhs/ccdf/meets_ccdf_activity_test.py b/policyengine_us/variables/gov/hhs/ccdf/meets_ccdf_activity_test.py index 3caf0f1f1ae..5e0830f6df2 100644 --- a/policyengine_us/variables/gov/hhs/ccdf/meets_ccdf_activity_test.py +++ b/policyengine_us/variables/gov/hhs/ccdf/meets_ccdf_activity_test.py @@ -5,5 +5,12 @@ class meets_ccdf_activity_test(Variable): value_type = bool entity = SPMUnit definition_period = YEAR - documentation = "Indicates whether parent or parents meet activity test (working/in job training/in educational program)" + documentation = ( + "Indicates whether parent or parents meet activity test " + "(working/in job training/in educational program). " + "Use this input to cover approved activities not individually " + "modeled in PolicyEngine, such as job search, education/training " + "programs, SNAP E&T, VIEW participation, CPS referral, or " + "temporary leave from work or school." + ) label = "Activity test for CCDF" diff --git a/policyengine_us/variables/gov/states/va/dss/ccsp/copay/va_ccsp_copay.py b/policyengine_us/variables/gov/states/va/dss/ccsp/copay/va_ccsp_copay.py new file mode 100644 index 00000000000..4690647e9d6 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/ccsp/copay/va_ccsp_copay.py @@ -0,0 +1,46 @@ +from policyengine_us.model_api import * + + +class va_ccsp_copay(Variable): + value_type = float + entity = SPMUnit + unit = USD + label = "Virginia Child Care Subsidy Program family copayment" + definition_period = MONTH + defined_for = StateCode.VA + reference = ( + "https://doe.virginia.gov/home/showpublisheddocument/56270#page=69", + "https://doe.virginia.gov/home/showpublisheddocument/56270#page=143", + ) + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.va.dss.ccsp.copay + countable_income = spm_unit("va_ccsp_countable_income", period) + fpg = spm_unit("spm_unit_fpg", period) + + # FPG ratio for copay bracket lookup + fpg_ratio = np.divide( + countable_income, + fpg, + out=np.zeros_like(countable_income), + where=fpg > 0, + ) + per_child_copay = p.per_child_scale.calc(fpg_ratio) + + # Count eligible children actually in care, capped at max_children + person = spm_unit.members + eligible_child = person("va_ccsp_child_eligible", period) + attending = person("childcare_attending_days_per_month", period.this_year) > 0 + n_eligible_children = spm_unit.sum(eligible_child & attending) + n_assessed = min_(n_eligible_children, p.max_children) + + # Total from scale + total_from_scale = per_child_copay * n_assessed + + # Income cap + income_cap = countable_income * p.income_cap_rate + family_copay = min_(total_from_scale, income_cap) + + # TANF recipients exempt from copay + is_tanf = spm_unit("is_tanf_enrolled", period) + return where(is_tanf, 0, family_copay) diff --git a/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_activity_eligible.py b/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_activity_eligible.py new file mode 100644 index 00000000000..92f9c2d94c5 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_activity_eligible.py @@ -0,0 +1,32 @@ +from policyengine_us.model_api import * + + +class va_ccsp_activity_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "Activity-eligible for Virginia Child Care Subsidy Program" + definition_period = MONTH + defined_for = StateCode.VA + reference = ( + "https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section20/", + "https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section30/", + "https://doe.virginia.gov/home/showpublisheddocument/56270#page=36", + ) + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.va.dss.ccsp.activity + person = spm_unit.members + is_head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) + hours_worked = person("weekly_hours_worked", period.this_year) + is_in_school = person("is_full_time_student", period.this_year) + is_disabled = person("is_disabled", period.this_year) + is_active = (hours_worked >= p.min_hours_per_week) | is_in_school + meets_requirement = is_active | is_disabled + has_active_parent = spm_unit.sum(is_head_or_spouse & is_active) >= 1 + all_covered = spm_unit.sum(is_head_or_spouse & ~meets_requirement) == 0 + modeled_eligible = has_active_parent & all_covered + # meets_ccdf_activity_test covers activities not individually + # modeled: job search, education/training, VIEW/SNAP E&T, + # CPS referral, and temporary leave. + ccdf_activity = spm_unit("meets_ccdf_activity_test", period.this_year) + return modeled_eligible | ccdf_activity diff --git a/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_child_eligible.py b/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_child_eligible.py new file mode 100644 index 00000000000..8071aad384f --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_child_eligible.py @@ -0,0 +1,25 @@ +from policyengine_us.model_api import * + + +class va_ccsp_child_eligible(Variable): + value_type = bool + entity = Person + label = "Eligible child for Virginia Child Care Subsidy Program" + definition_period = MONTH + defined_for = StateCode.VA + reference = ( + "https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section20/", + "https://doe.virginia.gov/home/showpublisheddocument/56270#page=58", + ) + + def formula(person, period, parameters): + p = parameters(period).gov.states.va.dss.ccsp.age_threshold + age = person("age", period.this_year) + is_disabled = person("is_disabled", period.this_year) + age_limit = where(is_disabled, p.disabled_child, p.child) + age_eligible = age < age_limit + immigration_eligible = person( + "is_ccdf_immigration_eligible_child", period.this_year + ) + is_dependent = person("is_tax_unit_dependent", period.this_year) + return age_eligible & immigration_eligible & is_dependent diff --git a/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_eligible.py b/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_eligible.py new file mode 100644 index 00000000000..8ae904f84e3 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_eligible.py @@ -0,0 +1,21 @@ +from policyengine_us.model_api import * + + +class va_ccsp_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "Eligible for Virginia Child Care Subsidy Program" + definition_period = MONTH + defined_for = StateCode.VA + reference = ( + "https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section40/", + "https://doe.virginia.gov/home/showpublisheddocument/56270#page=54", + ) + + def formula(spm_unit, period, parameters): + person = spm_unit.members + has_eligible_child = spm_unit.any(person("va_ccsp_child_eligible", period)) + income_eligible = spm_unit("va_ccsp_income_eligible", period) + activity_eligible = spm_unit("va_ccsp_activity_eligible", period) + asset_eligible = spm_unit("is_ccdf_asset_eligible", period.this_year) + return has_eligible_child & income_eligible & activity_eligible & asset_eligible diff --git a/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_enrolled.py b/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_enrolled.py new file mode 100644 index 00000000000..47860dbc2a3 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_enrolled.py @@ -0,0 +1,13 @@ +from policyengine_us.model_api import * + + +class va_ccsp_enrolled(Variable): + value_type = bool + entity = SPMUnit + definition_period = MONTH + label = "Whether the family is currently enrolled in Virginia Child Care Subsidy Program" + defined_for = StateCode.VA + reference = ( + "https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section40/", + "https://doe.virginia.gov/home/showpublisheddocument/56270#page=96", + ) diff --git a/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_income_eligible.py b/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_income_eligible.py new file mode 100644 index 00000000000..e94d8b84d12 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_income_eligible.py @@ -0,0 +1,55 @@ +from policyengine_us.model_api import * + + +class va_ccsp_income_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "Income-eligible for Virginia Child Care Subsidy Program" + definition_period = MONTH + defined_for = StateCode.VA + reference = ( + "https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section40/", + "https://www.childcare.virginia.gov/home/showpublisheddocument/66667/638981099706730000#page=204", + ) + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.va.dss.ccsp.income + p_loc = parameters(period).gov.states.va.dss.ccsp.localities + countable_income = spm_unit("va_ccsp_countable_income", period) + fpg = spm_unit("spm_unit_fpg", period) + smi = spm_unit("hhs_smi", period) + + # New applicants: FPG-based limit by locality group + locality_group = spm_unit("va_ccsp_locality_group", period.this_year) + fpg_rate = p.initial_eligibility_fpg_rate[locality_group] + initial_limit = fpg * fpg_rate + + # Fairfax/Alexandria exception: 250% FPG capped at 85% SMI + county = spm_unit.household("county_str", period) + is_fairfax_alexandria = np.isin(county, p_loc.fairfax_alexandria) + fa_limit = min_(fpg * p.fairfax_alexandria_fpg_rate, smi * p.exit_smi_rate) + initial_limit = where(is_fairfax_alexandria, fa_limit, initial_limit) + + # Redetermination (enrolled): 85% SMI + exit_limit = smi * p.exit_smi_rate + + enrolled = spm_unit("va_ccsp_enrolled", period) + income_limit = where(enrolled, exit_limit, initial_limit) + + # Young child exception: families with a child five years of age + # or younger qualify for the higher of FPG limit or 85% SMI + person = spm_unit.members + age = person("age", period.this_year) + has_young_child = spm_unit.any(age < p.young_child_age_threshold) + young_child_limit = smi * p.young_child_smi_rate + income_limit = where( + has_young_child & ~enrolled, + max_(initial_limit, young_child_limit), + income_limit, + ) + + income_test_passed = countable_income <= income_limit + + # TANF categorical eligibility waives income test + income_waived = spm_unit("va_ccsp_income_test_waived", period) + return income_test_passed | income_waived diff --git a/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_income_test_waived.py b/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_income_test_waived.py new file mode 100644 index 00000000000..62c3fce6078 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/ccsp/eligibility/va_ccsp_income_test_waived.py @@ -0,0 +1,20 @@ +from policyengine_us.model_api import * + + +class va_ccsp_income_test_waived(Variable): + value_type = bool + entity = SPMUnit + label = "Income test waived for Virginia Child Care Subsidy Program" + definition_period = MONTH + defined_for = StateCode.VA + reference = ( + "https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section30/", + "https://www.childcare.virginia.gov/home/showpublisheddocument/66667/638981099706730000#page=29", + ) + + def formula(spm_unit, period, parameters): + tanf_enrolled = spm_unit("is_tanf_enrolled", period) + person = spm_unit.members + has_medicaid = spm_unit.any(person("receives_medicaid", period.this_year)) + has_wic = spm_unit.any(person("receives_wic", period)) + return tanf_enrolled | has_medicaid | has_wic diff --git a/policyengine_us/variables/gov/states/va/dss/ccsp/income/va_ccsp_countable_income.py b/policyengine_us/variables/gov/states/va/dss/ccsp/income/va_ccsp_countable_income.py new file mode 100644 index 00000000000..48d94cc93c4 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/ccsp/income/va_ccsp_countable_income.py @@ -0,0 +1,17 @@ +from policyengine_us.model_api import * + + +class va_ccsp_countable_income(Variable): + value_type = float + entity = SPMUnit + label = "Virginia Child Care Subsidy Program countable income" + unit = USD + definition_period = MONTH + defined_for = StateCode.VA + reference = ( + "https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section40/", + "https://doe.virginia.gov/home/showpublisheddocument/56270#page=63", + ) + + adds = "gov.states.va.dss.ccsp.income.countable_income.sources" + subtracts = "gov.states.va.dss.ccsp.income.countable_income.subtracts" diff --git a/policyengine_us/variables/gov/states/va/dss/ccsp/rates/va_ccsp_care_age_group.py b/policyengine_us/variables/gov/states/va/dss/ccsp/rates/va_ccsp_care_age_group.py new file mode 100644 index 00000000000..3504f9939c0 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/ccsp/rates/va_ccsp_care_age_group.py @@ -0,0 +1,25 @@ +from policyengine_us.model_api import * + + +class VACCSPCareAgeGroup(Enum): + INFANT = "Infant" + TODDLER = "Toddler" + TWO_YEAR_OLD = "2 year old" + PRESCHOOL = "Pre-School" + SCHOOL_AGE = "School Age" + + +class va_ccsp_care_age_group(Variable): + value_type = Enum + possible_values = VACCSPCareAgeGroup + default_value = VACCSPCareAgeGroup.INFANT + entity = Person + definition_period = YEAR + label = "Virginia CCSP care age group" + defined_for = StateCode.VA + reference = "https://www.childcare.virginia.gov/home/showpublisheddocument/66667/638981099706730000#page=203" + + def formula(person, period, parameters): + age_months = person("age", period) * MONTHS_IN_YEAR + p = parameters(period).gov.states.va.dss.ccsp.maximum_reimbursement_rate + return p.care_age_group.calc(age_months) diff --git a/policyengine_us/variables/gov/states/va/dss/ccsp/rates/va_ccsp_daily_mrr.py b/policyengine_us/variables/gov/states/va/dss/ccsp/rates/va_ccsp_daily_mrr.py new file mode 100644 index 00000000000..374146a38f6 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/ccsp/rates/va_ccsp_daily_mrr.py @@ -0,0 +1,27 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.states.va.dss.ccsp.rates.va_ccsp_provider_type import ( + VACCSPProviderType, +) + + +class va_ccsp_daily_mrr(Variable): + value_type = float + entity = Person + definition_period = MONTH + unit = USD + label = "Virginia CCSP daily maximum reimbursable rate" + defined_for = StateCode.VA + reference = "https://data.virginia.gov/dataset/general-child-care-subsidy-program-maximum-reimbursement-rates" + + def formula(person, period, parameters): + p = parameters(period).gov.states.va.dss.ccsp.maximum_reimbursement_rate + region = person.household("va_ccsp_ready_region", period.this_year) + provider_type = person("va_ccsp_provider_type", period.this_year) + age_group = person("va_ccsp_care_age_group", period.this_year) + is_full_day = person("va_ccsp_is_full_day", period.this_year) + + is_center = provider_type == provider_type.possible_values.CENTER + center_rate = p.center[region][age_group] + fdh_rate = p.family_day_home[region] + full_day_rate = where(is_center, center_rate, fdh_rate) + return where(is_full_day, full_day_rate, full_day_rate * p.part_day_factor) diff --git a/policyengine_us/variables/gov/states/va/dss/ccsp/rates/va_ccsp_is_full_day.py b/policyengine_us/variables/gov/states/va/dss/ccsp/rates/va_ccsp_is_full_day.py new file mode 100644 index 00000000000..42b063383af --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/ccsp/rates/va_ccsp_is_full_day.py @@ -0,0 +1,11 @@ +from policyengine_us.model_api import * + + +class va_ccsp_is_full_day(Variable): + value_type = bool + entity = Person + definition_period = YEAR + default_value = True + label = "Virginia CCSP full day care" + defined_for = StateCode.VA + reference = "https://www.childcare.virginia.gov/home/showpublisheddocument/66667/638981099706730000#page=203" diff --git a/policyengine_us/variables/gov/states/va/dss/ccsp/rates/va_ccsp_provider_type.py b/policyengine_us/variables/gov/states/va/dss/ccsp/rates/va_ccsp_provider_type.py new file mode 100644 index 00000000000..38ee5089f66 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/ccsp/rates/va_ccsp_provider_type.py @@ -0,0 +1,17 @@ +from policyengine_us.model_api import * + + +class VACCSPProviderType(Enum): + CENTER = "Center" + FAMILY_DAY_HOME = "Family Day Home" + + +class va_ccsp_provider_type(Variable): + value_type = Enum + possible_values = VACCSPProviderType + default_value = VACCSPProviderType.CENTER + entity = Person + definition_period = YEAR + label = "Virginia CCSP provider type" + defined_for = StateCode.VA + reference = "https://www.childcare.virginia.gov/home/showpublisheddocument/66667/638981099706730000#page=203" diff --git a/policyengine_us/variables/gov/states/va/dss/ccsp/rates/va_ccsp_ready_region.py b/policyengine_us/variables/gov/states/va/dss/ccsp/rates/va_ccsp_ready_region.py new file mode 100644 index 00000000000..95fcc0e8d37 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/ccsp/rates/va_ccsp_ready_region.py @@ -0,0 +1,66 @@ +from policyengine_us.model_api import * + + +class VACCSPReadyRegion(Enum): + BLUE_RIDGE = "Blue Ridge" + CAPITAL_AREA = "Capital Area" + CENTRAL = "Central" + CHESAPEAKE_BAY = "Chesapeake Bay" + NORTH_CENTRAL = "North Central" + SOUTHEASTERN = "Southeastern" + SOUTHSIDE = "Southside" + SOUTHWEST = "Southwest" + WEST = "West" + + +class va_ccsp_ready_region(Variable): + value_type = Enum + possible_values = VACCSPReadyRegion + default_value = VACCSPReadyRegion.CENTRAL + entity = Household + definition_period = YEAR + label = "Virginia CCSP Ready Region" + defined_for = StateCode.VA + reference = "https://data.virginia.gov/dataset/general-child-care-subsidy-program-maximum-reimbursement-rates" + + def formula(household, period, parameters): + county = household("county_str", period) + p = parameters( + period + ).gov.states.va.dss.ccsp.maximum_reimbursement_rate.ready_region + + blue_ridge = np.isin(county, p.blue_ridge) + capital_area = np.isin(county, p.capital_area) + central = np.isin(county, p.central) + chesapeake_bay = np.isin(county, p.chesapeake_bay) + north_central = np.isin(county, p.north_central) + southeastern = np.isin(county, p.southeastern) + southside = np.isin(county, p.southside) + southwest = np.isin(county, p.southwest) + west = np.isin(county, p.west) + + return select( + [ + blue_ridge, + capital_area, + central, + chesapeake_bay, + north_central, + southeastern, + southside, + southwest, + west, + ], + [ + VACCSPReadyRegion.BLUE_RIDGE, + VACCSPReadyRegion.CAPITAL_AREA, + VACCSPReadyRegion.CENTRAL, + VACCSPReadyRegion.CHESAPEAKE_BAY, + VACCSPReadyRegion.NORTH_CENTRAL, + VACCSPReadyRegion.SOUTHEASTERN, + VACCSPReadyRegion.SOUTHSIDE, + VACCSPReadyRegion.SOUTHWEST, + VACCSPReadyRegion.WEST, + ], + default=VACCSPReadyRegion.CENTRAL, + ) diff --git a/policyengine_us/variables/gov/states/va/dss/ccsp/va_ccsp.py b/policyengine_us/variables/gov/states/va/dss/ccsp/va_ccsp.py new file mode 100644 index 00000000000..815ae50afe4 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/ccsp/va_ccsp.py @@ -0,0 +1,23 @@ +from policyengine_us.model_api import * + + +class va_ccsp(Variable): + value_type = float + entity = SPMUnit + unit = USD + label = "Virginia Child Care Subsidy Program benefit" + definition_period = MONTH + defined_for = "va_ccsp_eligible" + reference = ( + "https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section40/", + "https://doe.virginia.gov/home/showpublisheddocument/56270#page=92", + ) + + def formula(spm_unit, period, parameters): + expenses = spm_unit("spm_unit_pre_subsidy_childcare_expenses", period) + copay = spm_unit("va_ccsp_copay", period) + person = spm_unit.members + daily_mrr = person("va_ccsp_daily_mrr", period) + attending_days = person("childcare_attending_days_per_month", period.this_year) + monthly_mrr = spm_unit.sum(daily_mrr * attending_days) + return min_(max_(expenses - copay, 0), monthly_mrr) diff --git a/policyengine_us/variables/gov/states/va/dss/ccsp/va_ccsp_locality_group.py b/policyengine_us/variables/gov/states/va/dss/ccsp/va_ccsp_locality_group.py new file mode 100644 index 00000000000..b1039ba7974 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/ccsp/va_ccsp_locality_group.py @@ -0,0 +1,37 @@ +from policyengine_us.model_api import * + + +class VACCSPLocalityGroup(Enum): + GROUP_I = "Group I" + GROUP_II = "Group II" + GROUP_III = "Group III" + + +class va_ccsp_locality_group(Variable): + value_type = Enum + possible_values = VACCSPLocalityGroup + default_value = VACCSPLocalityGroup.GROUP_I + entity = SPMUnit + label = "Virginia CCSP locality group" + definition_period = YEAR + defined_for = StateCode.VA + reference = ( + "https://law.lis.virginia.gov/admincode/title8/agency20/chapter790/section40/", + "https://www.childcare.virginia.gov/home/showpublisheddocument/66667/638981099706730000#page=204", + ) + + def formula(spm_unit, period, parameters): + county = spm_unit.household("county_str", period) + p = parameters(period).gov.states.va.dss.ccsp.localities + + group3 = np.isin(county, p.group3) + group2 = np.isin(county, p.group2) + + return select( + [group3, group2], + [ + VACCSPLocalityGroup.GROUP_III, + VACCSPLocalityGroup.GROUP_II, + ], + default=VACCSPLocalityGroup.GROUP_I, + ) diff --git a/policyengine_us/variables/gov/states/va/dss/ccsp/va_child_care_subsidies.py b/policyengine_us/variables/gov/states/va/dss/ccsp/va_child_care_subsidies.py new file mode 100644 index 00000000000..3b0b3a2d6be --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/ccsp/va_child_care_subsidies.py @@ -0,0 +1,11 @@ +from policyengine_us.model_api import * + + +class va_child_care_subsidies(Variable): + value_type = float + entity = SPMUnit + label = "Virginia child care subsidies" + unit = USD + definition_period = YEAR + defined_for = StateCode.VA + adds = ["va_ccsp"] diff --git a/sources/working_references.md b/sources/working_references.md deleted file mode 100644 index 6567b9debfb..00000000000 --- a/sources/working_references.md +++ /dev/null @@ -1,230 +0,0 @@ -# Delaware State Supplementary Payment (SSP) - Working References - -## Program Overview - -Delaware provides an optional State Supplementary Payment (SSP) to SSI recipients -residing in certified adult residential care facilities. The program has dual -administration: SSA administers the federally-administered optional supplement for -facility residents, and the Delaware Division of Social Services (DSS) administers -a separate $5/month supplement for individuals losing SSI due to SSDI (MAT program). - -**Official program name**: State Supplement Payment / Optional State Supplementary Payment -**Administering agency**: SSA (federal portion) + Delaware DSS (state portion) -**Administration classification**: F (mandatory) / F/S (optional) per SI 01415.010 - -## Primary Sources - -### 1. SSA POMS SI PHI01415.008 - Delaware-Specific Administration -- **URL**: https://secure.ssa.gov/poms.nsf/lnx/0501415008PHI -- **Title**: Administration of State Supplementary Programs -- Delaware (RTN 61 -- 12/2015) -- **Content**: Complete historical payment levels from 1992-2016, living arrangement - definitions, certification requirements, income limitation rules -- **Key data**: - - State supplement for certified residential care home: $140/month (individual), $448/month (couple) - - These amounts have been frozen since at least 1992 - - Effective March 1, 2003: "Residential Care Homes" include Adult Foster Care Homes, - Adult Residential Care Facilities, and Assisted Living Facilities - - Eligibility requires Adult Residential Care Certification Form - -### 2. SSA POMS SI 01415.058 - January 2026 Payment Levels -- **URL**: https://secure.ssa.gov/poms.nsf/lnx/0501415058 -- **Title**: Federally Administered Optional Supplementary Payment Programs for January 2026 -- **Content**: Current payment levels effective January 1, 2026 -- **Delaware data**: - - Individual (OS Code A): FBR $994 + supplement $140 = $1,134 total - - Couple (OS Code A): FBR $1,491 + supplement $448 = $1,939 total - - OS Code Z (non-facility): $0 supplement - - OS Code Y: waived supplementation - -### 3. SSA POMS SI 01415.057 - January 2025 Payment Levels -- **URL**: https://secure.ssa.gov/POMS.NSF/lnx/0501415057 -- **Title**: Federally Administered Optional Supplementary Payment Programs for January 2025 -- **Content**: Payment levels effective January 1, 2025 -- **Delaware data**: - - Individual (OS Code A): FBR $967 + supplement $140 = $1,107 total - - Couple (OS Code A): FBR $1,450 + supplement $448 = $1,898 total - -### 4. SSA POMS SI 01415.056 - January 2024 Payment Levels -- **URL**: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415056 -- **Title**: Federally Administered Optional Supplementary Payment Programs for January 2024 -- **Delaware data**: - - Individual (OS Code A): FBR $943 + supplement $140 = $1,083 total - - Couple (OS Code A): FBR $1,415 + supplement $448 = $1,863 total - -### 5. SSA POMS SI 01415.055 - January 2023 Payment Levels -- **URL**: https://secure.ssa.gov/poms.NSF/lnx/0501415055 -- **Delaware data**: - - Individual (OS Code A): FBR $914 + supplement $140 = $1,054 total - - Couple (OS Code A): FBR $1,371 + supplement $448 = $1,819 total - -### 6. SSA POMS SI 01415.054 - January 2022 Payment Levels -- **URL**: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415054 -- **Delaware data**: - - Individual (OS Code A): FBR $841 + supplement $140 = $981 total - - Couple (OS Code A): FBR $1,261 + supplement $448 = $1,709 total - -### 7. SSA POMS SI 01415.053 - January 2021 Payment Levels -- **URL**: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415053 -- **Delaware data**: - - Individual (OS Code A): FBR $794 + supplement $140 = $934 total - - Couple (OS Code A): FBR $1,191 + supplement $448 = $1,639 total - -### 8. SSA POMS SI 01415.052 - January 2020 Payment Levels -- **URL**: https://secure.ssa.gov/poms.nsf/lnx/0501415052 -- **Delaware data**: - - Individual (OS Code A): FBR $783 + supplement $140 = $923 total - - Couple (OS Code A): FBR $1,175 + supplement $448 = $1,623 total - -### 9. SSA POMS SI 01415.051 - January 2019 Payment Levels -- **URL**: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415051 -- **Delaware data**: - - Individual (OS Code A): FBR $771 + supplement $140 = $911 total - - Couple (OS Code A): FBR $1,157 + supplement $448 = $1,605 total - -### 10. SSA POMS SI 01415.050 - January 2018 Payment Levels -- **URL**: https://secure.ssa.gov/poms.nsf/lnx/0501415050 -- **Delaware data**: - - Individual (OS Code A): FBR $750 + supplement $140 = $890 total - - Couple (OS Code A): FBR $1,125 + supplement $448 = $1,573 total - -### 11. SSA POMS SI 01415.049 - January 2017 Payment Levels -- **URL**: https://secure.ssa.gov/poms.nsf/lnx/0501415049 -- **Delaware data**: - - Individual (OS Code A): FBR $735 + supplement $140 = $875 total - - Couple (OS Code A): FBR $1,103 + supplement $448 = $1,551 total - -### 12. SSA POMS SI 01415.047 - January 2015 Payment Levels -- **URL**: https://secure.ssa.gov/poms.nsf/lnx/0501415047 -- **Delaware data**: - - Individual (OS Code A): FBR $733 + supplement $140 = $873 total - - Couple (OS Code A): FBR $1,100 + supplement $448 = $1,548 total - -### 13. SSA POMS SI 01415.046 - January 2014 Payment Levels -- **URL**: https://secure.ssa.gov/poms.nsf/lnx/0501415046 -- **Delaware data**: - - Individual (OS Code A): FBR $721 + supplement $140 = $861 total - - Couple (OS Code A): FBR $1,082 + supplement $448 = $1,530 total - -### 14. SSA POMS SI 01415.045 - January 2013 Payment Levels -- **URL**: https://secure.ssa.gov/apps10/poms.nsf/links/0501415045 -- **Delaware data**: - - Individual (OS Code A): FBR $710 + supplement $140 = $850 total - - Couple (OS Code A): FBR $1,066 + supplement $448 = $1,514 total - -### 15. SSA POMS SI 01415.044 - January 2012 Payment Levels -- **URL**: https://secure.ssa.gov/poms.nsf/lnx/0501415044 -- **Delaware data**: - - Individual (OS Code A): FBR $698 + supplement $140 = $838 total - - Couple (OS Code A): FBR $1,048 + supplement $448 = $1,496 total - -### 16. SSA POMS SI 01415.040 - January 2008 Payment Levels -- **URL**: https://secure.ssa.gov/POMS.nsf/lnx/0501415040 -- **Delaware data**: - - Individual (OS Code A): FBR $637 + supplement $140 = $777 total - - Couple (OS Code A): FBR $956 + supplement $448 = $1,404 total - -### 17. SSA POMS SI 01415.036 - January 2004 Payment Levels -- **URL**: https://secure.ssa.gov/poms.nsf/lnx/0501415036 -- **Delaware data**: - - Individual (OS Code A): FBR $564 + supplement $140 = $704 total - - Couple (OS Code A): FBR $846 + supplement $448 = $1,294 total - -### 18. SSA POMS SI 01415.032 - January 2000 Payment Levels -- **URL**: https://secure.ssa.gov/poms.nsf/lnx/0501415032 -- **Delaware data**: - - Individual (OS Code A): FBR $512 + supplement $140 = $652 total - - Couple (OS Code A): FBR $769 + supplement $448 = $1,217 total - -### 19. SSA POMS SI 01415.031 - January 1999 Payment Levels -- **URL**: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415031 -- **Delaware data**: - - Individual (OS Code A): FBR $500 + supplement $140 = $640 total - - Couple (OS Code A): FBR $751 + supplement $448 = $1,199 total - -### 20. SSA POMS SI 01415.010 - Administration Classification -- **URL**: https://secure.ssa.gov/poms.nsf/lnx/0501415010 -- **Title**: Administration of State Supplementary Programs -- **Delaware classification**: F (mandatory) / F/S (optional) - -## Secondary Sources - -### 21. WorkWorld - SSI State Supplement Delaware -- **URL**: https://help.workworldapp.com/wwwebhelp/ssi_state_supplement_delaware.htm -- **Content**: Program overview with 2010 payment amounts -- **Key data**: - - Adult Residential Care Facility: Individual $140 supplement / Couple $448 supplement - - Special category (losing SSI due to SSDI): Individual $5 supplement (state-administered) - - Children under 18 are ineligible - - No additional income disregards beyond federal SSI limits - - Federal resource limitations apply - - Data reflects CY2010 payment levels - -### 22. Delaware Admin Code 16 Del. Admin. Code SS 13000-13640 -- **URL**: https://www.law.cornell.edu/regulations/delaware/16-Del-Admin-Code-SS-13000-13640 -- **Title**: The Social Security Administration (SSA) -- Delaware Social Services Manual -- **Content**: SSA determines eligibility for SSP for individuals in adult residential care -- **Source regulation**: 15 DE Reg. 202, 08/01/11 - -### 23. SSA State Assistance Programs for SSI Recipients, January 2011 - Delaware -- **URL**: https://www.ssa.gov/policy/docs/progdesc/ssi_st_asst/2011/de.html -- **Status**: 403 FORBIDDEN (SSA blocks automated access -- per memory note) -- **Note**: This is the discontinued 2011 SSA report. Last published edition. - -## Summary of State Supplement Amounts (FROZEN) - -The Delaware state supplement amounts have been unchanged since at least 1992: - -| Claim Type | Monthly Supplement | -|---|---| -| Individual in certified residential care | $140 | -| Couple (both eligible) in certified residential care | $448 | -| Individual losing SSI due to SSDI (MAT, state-administered) | $5 | - -## Living Arrangement / OS Code Definitions - -| OS Code | Description | Supplement? | -|---|---|---| -| A | Adult residential care facility, assisted living facility, or adult foster care home | Yes ($140 individual / $448 couple) | -| Y | Eligible but waived supplementation | No | -| Z | All other recipients (independent living, household of another, Medicaid facility) | No | - -## Federal Living Arrangement Code Mapping - -| Federal Code | Description | State Supplement When OS=A | -|---|---|---| -| A | Own household / independent living | $140 / $448 | -| B | Household of another (reduced FBR) | N/A (only OS=Z) | -| C | Parental household (child) | N/A (children ineligible) | -| D | Medicaid facility ($30 personal needs) | N/A (only OS=Z) | - -Note: Federal Code A with OS Code A is the only combination that receives a state supplement. -This means the recipient must be in a certified residential care facility AND classified as -independent living (Federal Code A) rather than in a Medicaid facility (Federal Code D). - -## Eligibility Requirements - -1. Must be SSI-eligible (aged, blind, or disabled) -- adults only (18+) -2. Must reside in Delaware -3. Must reside in a certified adult residential care facility, assisted living facility, - or adult foster care home -4. State must provide certification documentation (Adult Residential Care Certification Form) -5. No additional state income disregards beyond federal SSI rules -6. Federal SSI resource limits apply ($2,000 individual / $3,000 couple) - -## State-Administered Portion (MAT) - -The state-administered portion is specifically for: -- Individuals who lost SSI eligibility due to SSDI receipt -- $5/month supplement to maintain Medicaid eligibility during transition to Medicare -- Administered by Delaware Division of Social Services (DSS) -- Established March 1, 2001 per DSSM 17800 -- Extended September 1, 2008 to cover individuals who lost Medicaid on/after January 1, 2008 - -## Key Dates - -- **Pre-1992**: Program existed but specific amounts before 1992 not documented in POMS -- **1992-present**: $140 individual / $448 couple (frozen, no COLA) -- **March 1, 2001**: MAT program established ($5 state supplement) -- **March 1, 2003**: "Residential Care Homes" definition expanded to include Adult Foster - Care Homes, Adult Residential Care Facilities, and Assisted Living Facilities -- **September 1, 2008**: MAT coverage extended diff --git a/uv.lock b/uv.lock index 26678f33b63..ad816d5caa8 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 2 +revision = 3 requires-python = ">=3.11, <3.15" resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'win32'", @@ -1641,7 +1641,7 @@ wheels = [ [[package]] name = "policyengine-us" -version = "1.624.0" +version = "1.632.0" source = { editable = "." } dependencies = [ { name = "microdf-python" },