diff --git a/changelog.d/wa-ccap.added.md b/changelog.d/wa-ccap.added.md new file mode 100644 index 00000000000..7ac7192b4f0 --- /dev/null +++ b/changelog.d/wa-ccap.added.md @@ -0,0 +1 @@ +Implement Washington State Working Connections Child Care (WCCC), the state's child care subsidy program (CCAP-equivalent). 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 89dc3c0bef2..03d7f5dcb88 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 @@ -15,6 +15,7 @@ values: - ri_child_care_subsidies # Rhode Island Child Care Assistance Program - sc_child_care_subsidies # South Carolina Child Care Scholarship Program - va_child_care_subsidies # Virginia Child Care Subsidy Program + - wa_child_care_subsidies # Washington Working Connections Child Care 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 05b8ffc7955..ca76c206a0e 100644 --- a/policyengine_us/parameters/gov/household/household_state_benefits.yaml +++ b/policyengine_us/parameters/gov/household/household_state_benefits.yaml @@ -59,6 +59,8 @@ values: - hi_oss # Louisiana benefits - la_oss + # Washington benefits + - wa_child_care_subsidies 2024-01-01: # Delaware benefits - de_ssp @@ -120,6 +122,8 @@ values: - hi_oss # Louisiana benefits - la_oss + # Washington benefits + - wa_child_care_subsidies metadata: unit: list period: year diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/copay/amount.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/copay/amount.yaml new file mode 100644 index 00000000000..08275546f93 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/copay/amount.yaml @@ -0,0 +1,40 @@ +description: Washington provides this monthly copayment amount based on the household's income as a share of the State Median Income under the Working Connections Child Care program. +metadata: + type: single_amount + threshold_unit: /1 + amount_unit: currency-USD + period: month + label: Washington WCCC monthly copayment by SMI tier + reference: + - title: WAC 110-15-0075(2) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0075 + - title: DCYF Copay Calculation Table (effective October 1, 2025) + href: https://www.dcyf.wa.gov/sites/default/files/pdf/copay_calculation_table.pdf + +brackets: + # At or below 20% SMI: waived + - threshold: + 2018-07-01: 0 + amount: + 2018-07-01: 0 + # Above 20% and at or below 36% SMI + - threshold: + 2018-07-01: 0.2001 + amount: + 2018-07-01: 65 + # Above 36% and at or below 50% SMI + - threshold: + 2018-07-01: 0.3601 + amount: + 2018-07-01: 90 + # Above 50% and at or below 60% SMI + - threshold: + 2018-07-01: 0.5001 + amount: + 2018-07-01: 165 + # Above 60% and at or below 65% SMI (reapplication) + # or above 60% and at or below 75% SMI (state-registered apprenticeship) + - threshold: + 2018-07-01: 0.6001 + amount: + 2018-07-01: 215 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/age_threshold/child.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/age_threshold/child.yaml new file mode 100644 index 00000000000..144d361f6f8 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/age_threshold/child.yaml @@ -0,0 +1,13 @@ +description: Washington limits child eligibility to children under this age threshold under the Working Connections Child Care program. +values: + 2019-04-26: 13 + +metadata: + unit: year + period: year + label: Washington WCCC child age threshold + reference: + - title: WAC 110-15-0005(3)(b)(i) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0005 + - title: RCW 43.216.802(2)(a) + href: https://app.leg.wa.gov/RCW/default.aspx?cite=43.216.802 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/age_threshold/special_needs_child.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/age_threshold/special_needs_child.yaml new file mode 100644 index 00000000000..eb9dbbc6177 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/age_threshold/special_needs_child.yaml @@ -0,0 +1,15 @@ +description: Washington limits child eligibility for children with a verified special need or under court supervision to under this age under the Working Connections Child Care program. +values: + 2019-04-26: 19 + +metadata: + unit: year + period: year + label: Washington WCCC special needs child age threshold + reference: + - title: WAC 110-15-0005(3)(b)(ii) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0005 + - title: WAC 110-15-0220(1)(b) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0220 + - title: RCW 43.216.802(2)(a)(ii) + href: https://app.leg.wa.gov/RCW/default.aspx?cite=43.216.802 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/income/smi_rate/applicant.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/income/smi_rate/applicant.yaml new file mode 100644 index 00000000000..6e19fd25ca4 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/income/smi_rate/applicant.yaml @@ -0,0 +1,13 @@ +description: Washington limits applicant household income to this share of the State Median Income under the Working Connections Child Care program. +values: + 2018-07-01: 0.6 + +metadata: + unit: /1 + period: year + label: Washington WCCC applicant SMI income limit rate + reference: + - title: WAC 110-15-0005(1)(f)(i)(A) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0005 + - title: RCW 43.216.802(2) + href: https://app.leg.wa.gov/RCW/default.aspx?cite=43.216.802 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/income/smi_rate/homeless.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/income/smi_rate/homeless.yaml new file mode 100644 index 00000000000..051d2cdf70e --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/income/smi_rate/homeless.yaml @@ -0,0 +1,11 @@ +description: Washington limits household income for families experiencing homelessness to this share of the State Median Income under the Working Connections Child Care program. +values: + 2023-12-14: 0.85 + +metadata: + unit: /1 + period: year + label: Washington WCCC homeless household SMI income limit rate + reference: + - title: WAC 110-15-0023(2)(b) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0023 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/income/smi_rate/recipient.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/income/smi_rate/recipient.yaml new file mode 100644 index 00000000000..9b46e169c6b --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/income/smi_rate/recipient.yaml @@ -0,0 +1,11 @@ +description: Washington limits enrolled recipient household income to this share of the State Median Income under the Working Connections Child Care program. +values: + 2018-07-01: 0.65 + +metadata: + unit: /1 + period: year + label: Washington WCCC recipient SMI income limit rate + reference: + - title: WAC 110-15-0005(1)(f)(i)(B) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0005 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/income/smi_rate/teen_parent.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/income/smi_rate/teen_parent.yaml new file mode 100644 index 00000000000..ae9043e247e --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/income/smi_rate/teen_parent.yaml @@ -0,0 +1,13 @@ +description: Washington limits household income for parents attending high school to this share of the State Median Income under the Working Connections Child Care program. +values: + 2018-07-01: 0.85 + +metadata: + unit: /1 + period: year + label: Washington WCCC high school parent SMI income limit rate + reference: + - title: WAC 110-15-0005(2) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0005 + - title: RCW 43.216.814(3)(a)(ii) + href: https://app.leg.wa.gov/RCW/default.aspx?cite=43.216.814 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/income/snap_categorical/in_effect.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/income/snap_categorical/in_effect.yaml new file mode 100644 index 00000000000..ab012651893 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/eligibility/income/snap_categorical/in_effect.yaml @@ -0,0 +1,12 @@ +description: Washington applies SNAP categorical income eligibility for the Working Connections Child Care program when this is in effect. +values: + 2018-07-01: false + 2024-11-01: true + +metadata: + unit: bool + period: month + label: Washington WCCC SNAP categorical eligibility in effect + reference: + - title: RCW 43.216.802(5) + href: https://app.leg.wa.gov/RCW/default.aspx?cite=43.216.802 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/age_groups/enhanced_toddler_max_months.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/age_groups/enhanced_toddler_max_months.yaml new file mode 100644 index 00000000000..4cc16daef91 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/age_groups/enhanced_toddler_max_months.yaml @@ -0,0 +1,11 @@ +description: Washington sets this maximum age in months for the enhanced toddler family home rate category under the Working Connections Child Care program. +values: + 2023-07-01: 18 + +metadata: + unit: month + period: year + label: Washington WCCC enhanced toddler maximum age in months (family home) + reference: + - title: WAC 110-15-0205(2) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0205 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/age_groups/infant_max_months.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/age_groups/infant_max_months.yaml new file mode 100644 index 00000000000..a5bd17876bb --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/age_groups/infant_max_months.yaml @@ -0,0 +1,13 @@ +description: Washington sets this maximum age in months for the infant rate category under the Working Connections Child Care program. +values: + 2023-07-01: 12 + +metadata: + unit: month + period: year + label: Washington WCCC infant maximum age in months + reference: + - title: WAC 110-15-0200(1) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200 + - title: WAC 110-15-0205(2) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0205 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/age_groups/preschool_max_years.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/age_groups/preschool_max_years.yaml new file mode 100644 index 00000000000..7989f16cd8a --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/age_groups/preschool_max_years.yaml @@ -0,0 +1,13 @@ +description: Washington sets this maximum age in years for the preschool rate category under the Working Connections Child Care program. +values: + 2023-07-01: 6 + +metadata: + unit: year + period: year + label: Washington WCCC preschool maximum age in years + reference: + - title: WAC 110-15-0200(1) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200 + - title: WAC 110-15-0205(2) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0205 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/age_groups/toddler_max_months.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/age_groups/toddler_max_months.yaml new file mode 100644 index 00000000000..6e3b3bad8f9 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/age_groups/toddler_max_months.yaml @@ -0,0 +1,13 @@ +description: Washington sets this maximum age in months for the toddler rate category under the Working Connections Child Care program. +values: + 2023-07-01: 30 + +metadata: + unit: month + period: year + label: Washington WCCC toddler maximum age in months + reference: + - title: WAC 110-15-0200(1) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200 + - title: WAC 110-15-0205(2) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0205 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/center.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/center.yaml new file mode 100644 index 00000000000..df9e8b76a22 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/center.yaml @@ -0,0 +1,219 @@ +description: Washington provides these daily reimbursement rates for licensed or certified child care centers and DCYF contracted seasonal day camps under the Working Connections Child Care program. +metadata: + period: day + unit: currency-USD + label: Washington WCCC licensed center daily rates + breakdown: + - wa_wccc_region + - wa_wccc_center_age_group + - wa_wccc_day_type + reference: + - title: WAC 110-15-0200(1) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200 + +# WAC 110-15-0200 only defines FULL_DAY and HALF_DAY for centers. PARTIAL_DAY +# entries mirror HALF_DAY because centers do not have a partial-day rate. + +REGION_1: + INFANT: + FULL_DAY: + 2023-07-01: 62.05 + HALF_DAY: + 2023-07-01: 31.03 + PARTIAL_DAY: + 2023-07-01: 31.03 + TODDLER: + FULL_DAY: + 2023-07-01: 56.14 + HALF_DAY: + 2023-07-01: 28.07 + PARTIAL_DAY: + 2023-07-01: 28.07 + PRESCHOOL: + FULL_DAY: + 2023-07-01: 53.18 + HALF_DAY: + 2023-07-01: 26.59 + PARTIAL_DAY: + 2023-07-01: 26.59 + SCHOOL_AGE: + FULL_DAY: + 2023-07-01: 53.36 + HALF_DAY: + 2023-07-01: 26.68 + PARTIAL_DAY: + 2023-07-01: 26.68 +SPOKANE: + INFANT: + FULL_DAY: + 2023-07-01: 68.54 + HALF_DAY: + 2023-07-01: 34.27 + PARTIAL_DAY: + 2023-07-01: 34.27 + TODDLER: + FULL_DAY: + 2023-07-01: 56.59 + HALF_DAY: + 2023-07-01: 28.30 + PARTIAL_DAY: + 2023-07-01: 28.30 + PRESCHOOL: + FULL_DAY: + 2023-07-01: 52.14 + HALF_DAY: + 2023-07-01: 26.07 + PARTIAL_DAY: + 2023-07-01: 26.07 + SCHOOL_AGE: + FULL_DAY: + 2023-07-01: 49.00 + HALF_DAY: + 2023-07-01: 24.50 + PARTIAL_DAY: + 2023-07-01: 24.50 +REGION_2: + INFANT: + FULL_DAY: + 2023-07-01: 59.09 + HALF_DAY: + 2023-07-01: 29.55 + PARTIAL_DAY: + 2023-07-01: 29.55 + TODDLER: + FULL_DAY: + 2023-07-01: 49.09 + HALF_DAY: + 2023-07-01: 24.55 + PARTIAL_DAY: + 2023-07-01: 24.55 + PRESCHOOL: + FULL_DAY: + 2023-07-01: 44.77 + HALF_DAY: + 2023-07-01: 22.39 + PARTIAL_DAY: + 2023-07-01: 22.39 + SCHOOL_AGE: + FULL_DAY: + 2023-07-01: 32.73 + HALF_DAY: + 2023-07-01: 16.37 + PARTIAL_DAY: + 2023-07-01: 16.37 +REGION_3: + INFANT: + FULL_DAY: + 2023-07-01: 88.58 + HALF_DAY: + 2023-07-01: 44.29 + PARTIAL_DAY: + 2023-07-01: 44.29 + TODDLER: + FULL_DAY: + 2023-07-01: 80.36 + HALF_DAY: + 2023-07-01: 40.18 + PARTIAL_DAY: + 2023-07-01: 40.18 + PRESCHOOL: + FULL_DAY: + 2023-07-01: 72.50 + HALF_DAY: + 2023-07-01: 36.25 + PARTIAL_DAY: + 2023-07-01: 36.25 + SCHOOL_AGE: + FULL_DAY: + 2023-07-01: 65.45 + HALF_DAY: + 2023-07-01: 32.73 + PARTIAL_DAY: + 2023-07-01: 32.73 +REGION_4: + INFANT: + FULL_DAY: + 2023-07-01: 113.64 + HALF_DAY: + 2023-07-01: 56.82 + PARTIAL_DAY: + 2023-07-01: 56.82 + TODDLER: + FULL_DAY: + 2023-07-01: 101.59 + HALF_DAY: + 2023-07-01: 50.80 + PARTIAL_DAY: + 2023-07-01: 50.80 + PRESCHOOL: + FULL_DAY: + 2023-07-01: 85.68 + HALF_DAY: + 2023-07-01: 42.84 + PARTIAL_DAY: + 2023-07-01: 42.84 + SCHOOL_AGE: + FULL_DAY: + 2023-07-01: 90.64 + HALF_DAY: + 2023-07-01: 45.32 + PARTIAL_DAY: + 2023-07-01: 45.32 +REGION_5: + INFANT: + FULL_DAY: + 2023-07-01: 72.56 + HALF_DAY: + 2023-07-01: 36.28 + PARTIAL_DAY: + 2023-07-01: 36.28 + TODDLER: + FULL_DAY: + 2023-07-01: 64.00 + HALF_DAY: + 2023-07-01: 32.00 + PARTIAL_DAY: + 2023-07-01: 32.00 + PRESCHOOL: + FULL_DAY: + 2023-07-01: 55.77 + HALF_DAY: + 2023-07-01: 27.89 + PARTIAL_DAY: + 2023-07-01: 27.89 + SCHOOL_AGE: + FULL_DAY: + 2023-07-01: 54.18 + HALF_DAY: + 2023-07-01: 27.09 + PARTIAL_DAY: + 2023-07-01: 27.09 +REGION_6: + INFANT: + FULL_DAY: + 2023-07-01: 77.00 + HALF_DAY: + 2023-07-01: 38.50 + PARTIAL_DAY: + 2023-07-01: 38.50 + TODDLER: + FULL_DAY: + 2023-07-01: 67.50 + HALF_DAY: + 2023-07-01: 33.75 + PARTIAL_DAY: + 2023-07-01: 33.75 + PRESCHOOL: + FULL_DAY: + 2023-07-01: 57.73 + HALF_DAY: + 2023-07-01: 28.87 + PARTIAL_DAY: + 2023-07-01: 28.87 + SCHOOL_AGE: + FULL_DAY: + 2023-07-01: 50.23 + HALF_DAY: + 2023-07-01: 25.12 + PARTIAL_DAY: + 2023-07-01: 25.12 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/family_home.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/family_home.yaml new file mode 100644 index 00000000000..ded91890d50 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/family_home.yaml @@ -0,0 +1,372 @@ +description: Washington provides these daily reimbursement rates for licensed or certified family home child care providers under the Working Connections Child Care program. +metadata: + period: day + unit: currency-USD + label: Washington WCCC licensed family home daily rates + breakdown: + - wa_wccc_region + - wa_wccc_family_home_age_group + - wa_wccc_day_type + reference: + - title: WAC 110-15-0205(2) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0205 + - title: DCYF Licensed Family Home Base Rate (effective July 1, 2025) + href: https://www.dcyf.wa.gov/sites/default/files/pdf/LFH-Base-Rates-July-2025.pdf + +REGION_1: + INFANT: + FULL_DAY: + 2023-07-01: 49.23 + 2025-07-01: 60.00 + HALF_DAY: + 2023-07-01: 24.62 + 2025-07-01: 30.00 + PARTIAL_DAY: + 2023-07-01: 36.92 + 2025-07-01: 45.00 + ENHANCED_TODDLER: + FULL_DAY: + 2023-07-01: 49.23 + 2025-07-01: 60.00 + HALF_DAY: + 2023-07-01: 24.62 + 2025-07-01: 30.00 + PARTIAL_DAY: + 2023-07-01: 36.92 + 2025-07-01: 45.00 + TODDLER: + FULL_DAY: + 2023-07-01: 47.09 + 2025-07-01: 60.00 + HALF_DAY: + 2023-07-01: 23.55 + 2025-07-01: 30.00 + PARTIAL_DAY: + 2023-07-01: 35.32 + 2025-07-01: 45.00 + PRESCHOOL: + FULL_DAY: + 2023-07-01: 40.00 + 2025-07-01: 51.14 + HALF_DAY: + 2023-07-01: 20.00 + 2025-07-01: 25.57 + PARTIAL_DAY: + 2023-07-01: 30.00 + 2025-07-01: 38.36 + SCHOOL_AGE: + FULL_DAY: + 2023-07-01: 36.59 + 2025-07-01: 60.00 + HALF_DAY: + 2023-07-01: 18.30 + 2025-07-01: 30.00 + PARTIAL_DAY: + 2023-07-01: 27.44 + 2025-07-01: 45.00 +SPOKANE: + INFANT: + FULL_DAY: + 2023-07-01: 48.00 + 2025-07-01: 56.00 + HALF_DAY: + 2023-07-01: 24.00 + 2025-07-01: 28.00 + PARTIAL_DAY: + 2023-07-01: 36.00 + 2025-07-01: 42.00 + ENHANCED_TODDLER: + FULL_DAY: + 2023-07-01: 48.00 + 2025-07-01: 56.00 + HALF_DAY: + 2023-07-01: 24.00 + 2025-07-01: 28.00 + PARTIAL_DAY: + 2023-07-01: 36.00 + 2025-07-01: 42.00 + TODDLER: + FULL_DAY: + 2023-07-01: 48.00 + 2025-07-01: 55.00 + HALF_DAY: + 2023-07-01: 24.00 + 2025-07-01: 27.50 + PARTIAL_DAY: + 2023-07-01: 36.00 + 2025-07-01: 41.25 + PRESCHOOL: + FULL_DAY: + 2023-07-01: 45.00 + 2025-07-01: 50.00 + HALF_DAY: + 2023-07-01: 22.50 + 2025-07-01: 25.00 + PARTIAL_DAY: + 2023-07-01: 33.75 + 2025-07-01: 37.50 + SCHOOL_AGE: + FULL_DAY: + 2023-07-01: 45.00 + 2025-07-01: 50.00 + HALF_DAY: + 2023-07-01: 22.50 + 2025-07-01: 25.00 + PARTIAL_DAY: + 2023-07-01: 33.75 + 2025-07-01: 37.50 +REGION_2: + INFANT: + FULL_DAY: + 2023-07-01: 66.00 + 2025-07-01: 80.00 + HALF_DAY: + 2023-07-01: 33.00 + 2025-07-01: 40.00 + PARTIAL_DAY: + 2023-07-01: 49.50 + 2025-07-01: 60.00 + ENHANCED_TODDLER: + FULL_DAY: + 2023-07-01: 66.00 + 2025-07-01: 80.00 + HALF_DAY: + 2023-07-01: 33.00 + 2025-07-01: 40.00 + PARTIAL_DAY: + 2023-07-01: 49.50 + 2025-07-01: 60.00 + TODDLER: + FULL_DAY: + 2023-07-01: 59.09 + 2025-07-01: 72.73 + HALF_DAY: + 2023-07-01: 29.55 + 2025-07-01: 36.37 + PARTIAL_DAY: + 2023-07-01: 44.32 + 2025-07-01: 54.55 + PRESCHOOL: + FULL_DAY: + 2023-07-01: 48.00 + 2025-07-01: 63.64 + HALF_DAY: + 2023-07-01: 24.00 + 2025-07-01: 31.82 + PARTIAL_DAY: + 2023-07-01: 36.00 + 2025-07-01: 47.73 + SCHOOL_AGE: + FULL_DAY: + 2023-07-01: 40.00 + 2025-07-01: 50.00 + HALF_DAY: + 2023-07-01: 20.00 + 2025-07-01: 25.00 + PARTIAL_DAY: + 2023-07-01: 30.00 + 2025-07-01: 37.50 +REGION_3: + INFANT: + FULL_DAY: + 2023-07-01: 65.00 + 2025-07-01: 82.00 + HALF_DAY: + 2023-07-01: 32.50 + 2025-07-01: 41.00 + PARTIAL_DAY: + 2023-07-01: 48.75 + 2025-07-01: 61.50 + ENHANCED_TODDLER: + FULL_DAY: + 2023-07-01: 65.00 + 2025-07-01: 82.00 + HALF_DAY: + 2023-07-01: 32.50 + 2025-07-01: 41.00 + PARTIAL_DAY: + 2023-07-01: 48.75 + 2025-07-01: 61.50 + TODDLER: + FULL_DAY: + 2023-07-01: 59.09 + 2025-07-01: 77.27 + HALF_DAY: + 2023-07-01: 29.55 + 2025-07-01: 38.64 + PARTIAL_DAY: + 2023-07-01: 44.32 + 2025-07-01: 57.95 + PRESCHOOL: + FULL_DAY: + 2023-07-01: 54.18 + 2025-07-01: 70.00 + HALF_DAY: + 2023-07-01: 27.09 + 2025-07-01: 35.00 + PARTIAL_DAY: + 2023-07-01: 40.64 + 2025-07-01: 52.50 + SCHOOL_AGE: + FULL_DAY: + 2023-07-01: 49.23 + 2025-07-01: 75.00 + HALF_DAY: + 2023-07-01: 24.62 + 2025-07-01: 37.50 + PARTIAL_DAY: + 2023-07-01: 36.92 + 2025-07-01: 56.25 +REGION_4: + INFANT: + FULL_DAY: + 2023-07-01: 81.82 + 2025-07-01: 96.55 + HALF_DAY: + 2023-07-01: 40.91 + 2025-07-01: 48.28 + PARTIAL_DAY: + 2023-07-01: 61.37 + 2025-07-01: 72.41 + ENHANCED_TODDLER: + FULL_DAY: + 2023-07-01: 81.82 + 2025-07-01: 96.55 + HALF_DAY: + 2023-07-01: 40.91 + 2025-07-01: 48.28 + PARTIAL_DAY: + 2023-07-01: 61.37 + 2025-07-01: 72.41 + TODDLER: + FULL_DAY: + 2023-07-01: 75.00 + 2025-07-01: 98.49 + HALF_DAY: + 2023-07-01: 37.50 + 2025-07-01: 49.25 + PARTIAL_DAY: + 2023-07-01: 56.25 + 2025-07-01: 73.87 + PRESCHOOL: + FULL_DAY: + 2023-07-01: 68.95 + 2025-07-01: 90.00 + HALF_DAY: + 2023-07-01: 34.48 + 2025-07-01: 45.00 + PARTIAL_DAY: + 2023-07-01: 51.71 + 2025-07-01: 67.50 + SCHOOL_AGE: + FULL_DAY: + 2023-07-01: 60.00 + 2025-07-01: 78.79 + HALF_DAY: + 2023-07-01: 30.00 + 2025-07-01: 39.40 + PARTIAL_DAY: + 2023-07-01: 45.00 + 2025-07-01: 59.09 +REGION_5: + INFANT: + FULL_DAY: + 2023-07-01: 59.09 + 2025-07-01: 90.91 + HALF_DAY: + 2023-07-01: 29.55 + 2025-07-01: 45.46 + PARTIAL_DAY: + 2023-07-01: 44.32 + 2025-07-01: 68.18 + ENHANCED_TODDLER: + FULL_DAY: + 2023-07-01: 59.09 + 2025-07-01: 90.91 + HALF_DAY: + 2023-07-01: 29.55 + 2025-07-01: 45.46 + PARTIAL_DAY: + 2023-07-01: 44.32 + 2025-07-01: 68.18 + TODDLER: + FULL_DAY: + 2023-07-01: 59.09 + 2025-07-01: 70.00 + HALF_DAY: + 2023-07-01: 29.55 + 2025-07-01: 35.00 + PARTIAL_DAY: + 2023-07-01: 44.32 + 2025-07-01: 52.50 + PRESCHOOL: + FULL_DAY: + 2023-07-01: 49.23 + 2025-07-01: 65.00 + HALF_DAY: + 2023-07-01: 24.62 + 2025-07-01: 32.50 + PARTIAL_DAY: + 2023-07-01: 36.92 + 2025-07-01: 48.75 + SCHOOL_AGE: + FULL_DAY: + 2023-07-01: 44.32 + 2025-07-01: 49.24 + HALF_DAY: + 2023-07-01: 22.16 + 2025-07-01: 24.62 + PARTIAL_DAY: + 2023-07-01: 33.24 + 2025-07-01: 36.93 +REGION_6: + INFANT: + FULL_DAY: + 2023-07-01: 59.09 + 2025-07-01: 90.91 + HALF_DAY: + 2023-07-01: 29.55 + 2025-07-01: 45.46 + PARTIAL_DAY: + 2023-07-01: 44.32 + 2025-07-01: 68.18 + ENHANCED_TODDLER: + FULL_DAY: + 2023-07-01: 59.09 + 2025-07-01: 90.91 + HALF_DAY: + 2023-07-01: 29.55 + 2025-07-01: 45.46 + PARTIAL_DAY: + 2023-07-01: 44.32 + 2025-07-01: 68.18 + TODDLER: + FULL_DAY: + 2023-07-01: 55.00 + 2025-07-01: 68.94 + HALF_DAY: + 2023-07-01: 27.50 + 2025-07-01: 34.47 + PARTIAL_DAY: + 2023-07-01: 41.25 + 2025-07-01: 51.71 + PRESCHOOL: + FULL_DAY: + 2023-07-01: 53.00 + 2025-07-01: 63.64 + HALF_DAY: + 2023-07-01: 26.50 + 2025-07-01: 31.82 + PARTIAL_DAY: + 2023-07-01: 39.75 + 2025-07-01: 47.73 + SCHOOL_AGE: + FULL_DAY: + 2023-07-01: 45.00 + 2025-07-01: 68.94 + HALF_DAY: + 2023-07-01: 22.50 + 2025-07-01: 34.47 + PARTIAL_DAY: + 2023-07-01: 33.75 + 2025-07-01: 51.71 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/in_home_relative.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/in_home_relative.yaml new file mode 100644 index 00000000000..8afde9ca421 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/in_home_relative.yaml @@ -0,0 +1,12 @@ +description: Washington provides this hourly reimbursement rate per child for in-home and relative providers under the Working Connections Child Care program. +values: + 2023-07-01: 3.85 + 2024-07-01: 4.0 + +metadata: + unit: currency-USD + period: hour + label: Washington WCCC in-home and relative provider hourly rate + reference: + - title: WAC 110-15-0240(1) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0240 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/monthly_units/center_full_days.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/monthly_units/center_full_days.yaml new file mode 100644 index 00000000000..3b611af6e4a --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/monthly_units/center_full_days.yaml @@ -0,0 +1,11 @@ +description: Washington sets this maximum number of full-day billing units per month for licensed centers under the Working Connections Child Care program. +values: + 2023-07-01: 23 + +metadata: + unit: day + period: month + label: Washington WCCC monthly full-day billing units for centers + reference: + - title: WAC 110-15-0190(3)(b) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0190 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/monthly_units/family_home_full_days.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/monthly_units/family_home_full_days.yaml new file mode 100644 index 00000000000..cd352b05762 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/monthly_units/family_home_full_days.yaml @@ -0,0 +1,11 @@ +description: Washington sets this maximum number of full-day billing units per month for licensed family home providers under the Working Connections Child Care program. +values: + 2023-07-01: 22 + +metadata: + unit: day + period: month + label: Washington WCCC monthly full-day billing units for family home providers + reference: + - title: WAC 110-15-0190(4)(a) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0190 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/monthly_units/in_home_relative_full_hours.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/monthly_units/in_home_relative_full_hours.yaml new file mode 100644 index 00000000000..1f680ffe471 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/rates/monthly_units/in_home_relative_full_hours.yaml @@ -0,0 +1,11 @@ +description: Washington sets this maximum number of hours per month per child for license-exempt in-home and relative providers under the Working Connections Child Care program. +values: + 2023-07-01: 230 + +metadata: + unit: hour + period: month + label: Washington WCCC monthly hour cap for in-home and relative providers + reference: + - title: WAC 110-15-0190(8)(a) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0190 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/center_override_to_region_3_counties.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/center_override_to_region_3_counties.yaml new file mode 100644 index 00000000000..29d4392ffac --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/center_override_to_region_3_counties.yaml @@ -0,0 +1,12 @@ +description: Washington assigns licensed center providers in these counties to Region 3 rates under the Working Connections Child Care program. +values: + 2023-07-01: + - CLARK_COUNTY_WA + +metadata: + unit: list + period: year + label: Washington WCCC center-rate Region 3 override counties + reference: + - title: WAC 110-15-0200(1)(a) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/center_override_to_region_6_counties.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/center_override_to_region_6_counties.yaml new file mode 100644 index 00000000000..03fd4dda920 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/center_override_to_region_6_counties.yaml @@ -0,0 +1,14 @@ +description: Washington assigns licensed center providers in these counties to Region 6 rates under the Working Connections Child Care program. +values: + 2023-07-01: + - BENTON_COUNTY_WA + - WALLA_WALLA_COUNTY_WA + - WHITMAN_COUNTY_WA + +metadata: + unit: list + period: year + label: Washington WCCC center-rate Region 6 override counties + reference: + - title: WAC 110-15-0200(1)(b) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200 diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_1_counties.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_1_counties.yaml new file mode 100644 index 00000000000..09b8da587ed --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_1_counties.yaml @@ -0,0 +1,27 @@ +description: Washington assigns these counties to Region 1 for child care subsidy rate purposes under the Working Connections Child Care program. +values: + 2023-07-01: + - ADAMS_COUNTY_WA + - ASOTIN_COUNTY_WA + - CHELAN_COUNTY_WA + - DOUGLAS_COUNTY_WA + - FERRY_COUNTY_WA + - GARFIELD_COUNTY_WA + - GRANT_COUNTY_WA + - LINCOLN_COUNTY_WA + - OKANOGAN_COUNTY_WA + - PEND_OREILLE_COUNTY_WA + - STEVENS_COUNTY_WA + - WHITMAN_COUNTY_WA + +metadata: + unit: list + period: year + label: Washington WCCC Region 1 counties + reference: + - title: WAC 110-15-0200(1) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200 + - title: WAC 110-15-0205(2) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0205 + - title: DCYF Child Care Subsidy Rates Regional Map (EPS_0004) + href: https://www.dcyf.wa.gov/sites/default/files/pubs/EPS_0004.pdf diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_2_counties.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_2_counties.yaml new file mode 100644 index 00000000000..12909611dcc --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_2_counties.yaml @@ -0,0 +1,21 @@ +description: Washington assigns these counties to Region 2 for child care subsidy rate purposes under the Working Connections Child Care program. +values: + 2023-07-01: + - BENTON_COUNTY_WA + - COLUMBIA_COUNTY_WA + - FRANKLIN_COUNTY_WA + - KITTITAS_COUNTY_WA + - WALLA_WALLA_COUNTY_WA + - YAKIMA_COUNTY_WA + +metadata: + unit: list + period: year + label: Washington WCCC Region 2 counties + reference: + - title: WAC 110-15-0200(1) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200 + - title: WAC 110-15-0205(2) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0205 + - title: DCYF Child Care Subsidy Rates Regional Map (EPS_0004) + href: https://www.dcyf.wa.gov/sites/default/files/pubs/EPS_0004.pdf diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_3_counties.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_3_counties.yaml new file mode 100644 index 00000000000..45dc11c6ce4 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_3_counties.yaml @@ -0,0 +1,20 @@ +description: Washington assigns these counties to Region 3 for child care subsidy rate purposes under the Working Connections Child Care program. +values: + 2023-07-01: + - ISLAND_COUNTY_WA + - SAN_JUAN_COUNTY_WA + - SKAGIT_COUNTY_WA + - SNOHOMISH_COUNTY_WA + - WHATCOM_COUNTY_WA + +metadata: + unit: list + period: year + label: Washington WCCC Region 3 counties + reference: + - title: WAC 110-15-0200(1) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200 + - title: WAC 110-15-0205(2) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0205 + - title: DCYF Child Care Subsidy Rates Regional Map (EPS_0004) + href: https://www.dcyf.wa.gov/sites/default/files/pubs/EPS_0004.pdf diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_4_counties.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_4_counties.yaml new file mode 100644 index 00000000000..7844b4035b4 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_4_counties.yaml @@ -0,0 +1,16 @@ +description: Washington assigns these counties to Region 4 for child care subsidy rate purposes under the Working Connections Child Care program. +values: + 2023-07-01: + - KING_COUNTY_WA + +metadata: + unit: list + period: year + label: Washington WCCC Region 4 counties + reference: + - title: WAC 110-15-0200(1) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200 + - title: WAC 110-15-0205(2) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0205 + - title: DCYF Child Care Subsidy Rates Regional Map (EPS_0004) + href: https://www.dcyf.wa.gov/sites/default/files/pubs/EPS_0004.pdf diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_5_counties.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_5_counties.yaml new file mode 100644 index 00000000000..d51a6e01308 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_5_counties.yaml @@ -0,0 +1,17 @@ +description: Washington assigns these counties to Region 5 for child care subsidy rate purposes under the Working Connections Child Care program. +values: + 2023-07-01: + - KITSAP_COUNTY_WA + - PIERCE_COUNTY_WA + +metadata: + unit: list + period: year + label: Washington WCCC Region 5 counties + reference: + - title: WAC 110-15-0200(1) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200 + - title: WAC 110-15-0205(2) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0205 + - title: DCYF Child Care Subsidy Rates Regional Map (EPS_0004) + href: https://www.dcyf.wa.gov/sites/default/files/pubs/EPS_0004.pdf diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_6_counties.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_6_counties.yaml new file mode 100644 index 00000000000..c6d87345fe0 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/region_6_counties.yaml @@ -0,0 +1,27 @@ +description: Washington assigns these counties to Region 6 for child care subsidy rate purposes under the Working Connections Child Care program. +values: + 2023-07-01: + - CLALLAM_COUNTY_WA + - CLARK_COUNTY_WA + - COWLITZ_COUNTY_WA + - GRAYS_HARBOR_COUNTY_WA + - JEFFERSON_COUNTY_WA + - KLICKITAT_COUNTY_WA + - LEWIS_COUNTY_WA + - MASON_COUNTY_WA + - PACIFIC_COUNTY_WA + - SKAMANIA_COUNTY_WA + - THURSTON_COUNTY_WA + - WAHKIAKUM_COUNTY_WA + +metadata: + unit: list + period: year + label: Washington WCCC Region 6 counties + reference: + - title: WAC 110-15-0200(1) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200 + - title: WAC 110-15-0205(2) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0205 + - title: DCYF Child Care Subsidy Rates Regional Map (EPS_0004) + href: https://www.dcyf.wa.gov/sites/default/files/pubs/EPS_0004.pdf diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/spokane_counties.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/spokane_counties.yaml new file mode 100644 index 00000000000..e4519b135c0 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/region/spokane_counties.yaml @@ -0,0 +1,16 @@ +description: Washington assigns these counties to the Spokane region for child care subsidy rate purposes under the Working Connections Child Care program. +values: + 2023-07-01: + - SPOKANE_COUNTY_WA + +metadata: + unit: list + period: year + label: Washington WCCC Spokane region counties + reference: + - title: WAC 110-15-0200(1) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200 + - title: WAC 110-15-0205(2) + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0205 + - title: DCYF Child Care Subsidy Rates Regional Map (EPS_0004) + href: https://www.dcyf.wa.gov/sites/default/files/pubs/EPS_0004.pdf diff --git a/policyengine_us/parameters/gov/states/wa/dcyf/wccc/sources.yaml b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/sources.yaml new file mode 100644 index 00000000000..1e592f3c4b3 --- /dev/null +++ b/policyengine_us/parameters/gov/states/wa/dcyf/wccc/sources.yaml @@ -0,0 +1,38 @@ +description: Washington uses these income sources to determine countable income under the Working Connections Child Care program. +values: + 2018-07-01: + # Earned income (WAC 110-15-0060) + - employment_income + - self_employment_income + - farm_operations_income + - rental_income + # Unearned income (WAC 110-15-0060) + - social_security + - pension_income + - retirement_distributions + - disability_benefits + - ssi + - veterans_benefits + - military_retirement_pay + - unemployment_compensation + - workers_compensation + - interest_income + - dividend_income + - child_support_received + - alimony_income + - capital_gains + # TANF is countable per WAC 110-15-0060 but is excluded here to avoid + # circular dependency: tanf -> childcare_expenses -> wa_wccc -> + # wa_wccc_countable_income -> tanf. + +metadata: + unit: list + period: year + label: Washington WCCC countable income sources + reference: + - title: WAC 110-15-0060 + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0060 + - title: WAC 110-15-0065 + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0065 + - title: WAC 110-15-0070 + href: https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0070 diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index 67ad00323c9..b2c4d260486 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -423,7 +423,7 @@ programs: category: Benefits agency: HHS status: partial - coverage: CA, CO, CT, DE, DC, IL, MA, MD, ME, NC, NH, NJ, PA, RI, SC, TX, VA, VT, WV + coverage: CA, CO, CT, DE, DC, IL, MA, MD, ME, NC, NH, NJ, PA, RI, SC, TX, VA, VT, WA, WV state_implementations: - state: CA status: complete @@ -512,6 +512,11 @@ programs: name: Vermont CCFAP full_name: Vermont Child Care Financial Assistance Program variable: vt_ccfap + - state: WA + status: complete + name: Washington WCCC + full_name: Washington Working Connections Child Care + variable: wa_wccc - state: WV status: in_progress name: West Virginia CCAP diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/integration.yaml new file mode 100644 index 00000000000..c202e19027b --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/integration.yaml @@ -0,0 +1,357 @@ +- name: Case 1, single parent at 65% SMI recipient track, copay $65 tier, Region 1 center. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: true + employment_income: 24_000 + person2: + age: 4 + is_tax_unit_dependent: true + wa_wccc_provider_type: CENTER + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 20_000 + spm_unit_assets: 5_000 + snap: 0 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + county_str: ADAMS_COUNTY_WA + is_homeless: false + output: + wa_wccc_eligible_child: [false, true] + # SMI rate 0.65 (recipient track since is_wccc_enrolled). + wa_wccc_smi_rate: 0.65 + # Size 2 SMI 2024-10-01: 131,054 * 0.68 / 12 = $7,426.39/mo. + # Limit = 7,426.39 * 0.65 = $4,827.16/mo. Income $2,000/mo <= limit. + wa_wccc_income_eligible: true + is_ccdf_asset_eligible: true + wa_wccc_activity_eligible: true + wa_wccc_eligible: true + # SMI fraction: 2,000 / 7,426.39 = 0.2693 (above 20%, <= 36% -> $65 tier). + wa_wccc_copay: 65 + # Person2 is age 4 -> PRESCHOOL. Region 1 PRESCHOOL FULL_DAY = $53.18. + wa_wccc_center_age_group: [SCHOOL_AGE, PRESCHOOL] + wa_wccc_center_region: REGION_1 + # Max reimbursement: 53.18 * 23 = $1,223.14 (only person2 contributes). + wa_wccc_max_monthly_reimbursement: [0, 1_223.14] + # Actual expenses 20,000/12 = 1,666.67/mo. Uncapped = max(1666.67 - 65, 0) = 1,601.67. + # Benefit = min(1,601.67, 1,223.14) = $1,223.14. + wa_wccc: 1_223.14 + +- name: Case 2, two-parent family above 60% SMI applicant limit, ineligible. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + employment_income: 60_000 + person2: + age: 33 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + employment_income: 40_000 + person3: + age: 4 + is_tax_unit_dependent: true + wa_wccc_provider_type: CENTER + person4: + age: 7 + is_tax_unit_dependent: true + wa_wccc_provider_type: CENTER + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + spm_unit_pre_subsidy_childcare_expenses: 25_000 + spm_unit_assets: 50_000 + snap: 0 + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + households: + household: + members: [person1, person2, person3, person4] + state_code: WA + county_str: KING_COUNTY_WA + is_homeless: false + output: + wa_wccc_eligible_child: [false, false, true, true] + # Size 4 SMI 2024-10-01: 131,054/12 = $10,921.17/mo. + # Applicant 60% limit = $6,552.70/mo. + # Combined income $100,000/yr = $8,333.33/mo > $6,552.70 limit. + wa_wccc_smi_rate: 0.6 + wa_wccc_income_eligible: false + wa_wccc_eligible: false + wa_wccc: 0 + +- name: Case 3, homeless family HGP path bypasses asset and activity tests, copay waived. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + employment_income: 30_000 + person2: + age: 4 + is_tax_unit_dependent: true + wa_wccc_provider_type: CENTER + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 20_000 + spm_unit_assets: 5_000 + snap: 0 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + county_str: KING_COUNTY_WA + is_homeless: true + output: + wa_wccc_eligible_child: [false, true] + # Homeless triggers 85% SMI rate. + wa_wccc_smi_rate: 0.85 + # Homeless triggers categorical eligibility (HGP); income test bypassed. + wa_wccc_income_eligible: true + wa_wccc_hgp_eligible: true + wa_wccc_eligible: true + # Homeless triggers copay waiver. + wa_wccc_copay: 0 + wa_wccc_center_age_group: [SCHOOL_AGE, PRESCHOOL] + # Region 4 (King) PRESCHOOL FULL_DAY = $85.68. + wa_wccc_center_region: REGION_4 + # Max reimbursement: 85.68 * 23 = $1,970.64. + wa_wccc_max_monthly_reimbursement: [0, 1_970.64] + # Expenses 20,000/12 = 1,666.67/mo. Copay 0. Uncapped = 1,666.67. + # Benefit = min(1,666.67, 1,970.64) = $1,666.67. + wa_wccc: 1_666.67 + +- name: Case 4, teen parent age 19 in K-12 at 85% SMI, copay waived. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 19 + is_tax_unit_head_or_spouse: true + is_in_k12_school: true + is_wccc_enrolled: false + employment_income: 12_000 + person2: + age: 1 + is_tax_unit_dependent: true + wa_wccc_provider_type: CENTER + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 18_000 + spm_unit_assets: 1_000 + snap: 0 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + county_str: SPOKANE_COUNTY_WA + is_homeless: false + output: + wa_wccc_eligible_child: [false, true] + # Teen parent (age 19, in K-12) sets 85% SMI rate. + wa_wccc_smi_rate: 0.85 + # Income $1,000/mo well below 85% of size 2 SMI ($6,312.43/mo). + wa_wccc_income_eligible: true + # Activity passes via is_in_k12_school. + wa_wccc_activity_eligible: true + wa_wccc_eligible: true + # Teen-parent copay waiver applies. + wa_wccc_copay: 0 + wa_wccc_center_region: SPOKANE + # Person2 is age 1 -> 12 months not less than 12 -> TODDLER. + wa_wccc_center_age_group: [SCHOOL_AGE, TODDLER] + # Spokane TODDLER FULL_DAY = $56.59. Max reimbursement = 56.59 * 23 = $1,301.57. + wa_wccc_max_monthly_reimbursement: [0, 1_301.57] + # Expenses 18,000/12 = $1,500/mo. Copay 0. Uncapped = 1,500. + # Benefit = min(1,500, 1,301.57) = $1,301.57. + wa_wccc: 1_301.57 + +- name: Case 5, SNAP recipient with high income, auto-income-eligible. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + employment_income: 80_000 + person2: + age: 4 + is_tax_unit_dependent: true + wa_wccc_provider_type: CENTER + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 24_000 + spm_unit_assets: 10_000 + snap_reported: 2_400 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + county_str: ADAMS_COUNTY_WA + is_homeless: false + output: + wa_wccc_eligible_child: [false, true] + # SNAP recipient triggers auto-income-eligibility regardless of $80k/yr. + wa_wccc_income_eligible: true + wa_wccc_eligible: true + # Income $80,000/yr = $6,666.67/mo. Size 2 SMI/mo = $7,426.39. + # SMI fraction = 6,666.67 / 7,426.39 = 0.898 -> above 60% -> $215 tier. + wa_wccc_copay: 215 + wa_wccc_center_age_group: [SCHOOL_AGE, PRESCHOOL] + wa_wccc_center_region: REGION_1 + # Region 1 PRESCHOOL FULL_DAY = $53.18. Max reimbursement = 53.18 * 23 = $1,223.14. + wa_wccc_max_monthly_reimbursement: [0, 1_223.14] + # Expenses 24,000/12 = $2,000/mo. Uncapped = max(2000 - 215, 0) = $1,785. + # Benefit = min(1,785, 1,223.14) = $1,223.14. + wa_wccc: 1_223.14 + +- name: Case 6, assets above $1M, ineligible regardless of income. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + employment_income: 24_000 + person2: + age: 4 + is_tax_unit_dependent: true + wa_wccc_provider_type: CENTER + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 20_000 + spm_unit_assets: 1_500_000 + snap: 0 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + county_str: ADAMS_COUNTY_WA + is_homeless: false + output: + is_ccdf_asset_eligible: false + wa_wccc_eligible: false + wa_wccc: 0 + +- name: Case 7, income just under 65% SMI threshold, recipient eligible. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: true + # Annual income just below 65% SMI for size 2: + # 131,054 * 0.68 * 0.65 = $57,925.87/yr. Test 1 dollar below. + employment_income: 57_924 + person2: + age: 4 + is_tax_unit_dependent: true + wa_wccc_provider_type: CENTER + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 20_000 + spm_unit_assets: 5_000 + snap: 0 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + county_str: ADAMS_COUNTY_WA + is_homeless: false + output: + # Income exactly at limit -> eligible (<=). + wa_wccc_smi_rate: 0.65 + wa_wccc_income_eligible: true + wa_wccc_eligible: true + +- name: Case 8, negative self-employment income does not inflate benefit. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + is_full_time_student: true + employment_income: 6_000 + self_employment_income: -60_000_000 + person2: + age: 4 + is_tax_unit_dependent: true + wa_wccc_provider_type: CENTER + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 20_000 + spm_unit_assets: 5_000 + snap: 0 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + county_str: ADAMS_COUNTY_WA + is_homeless: false + output: + wa_wccc_eligible: true + # Region 1 PRESCHOOL FULL_DAY = $53.18. Max reimbursement = $1,223.14. + # Expenses 20,000/12 = $1,666.67/mo. Benefit capped at max_reimbursement. + # Critical: benefit is min(uncapped, max_reimbursement) -- never max_reimb minus countable_income. + wa_wccc: 1_223.14 diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc.yaml new file mode 100644 index 00000000000..32c1f9373e9 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc.yaml @@ -0,0 +1,124 @@ +- name: Case 1, expenses below copay, benefit is zero. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + person2: + age: 4 + is_tax_unit_dependent: true + wa_wccc_max_monthly_reimbursement: 1_200 + spm_units: + spm_unit: + members: [person1, person2] + wa_wccc_eligible: true + wa_wccc_copay: 100 + # Annual expenses; auto-divides to ~33.33/mo, below copay. + spm_unit_pre_subsidy_childcare_expenses: 400 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + # max(33.33 - 100, 0) = 0; min(0, 1200) = 0. + wa_wccc: 0 + +- name: Case 2, expenses between copay and max reimbursement, uncapped path. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + person2: + age: 4 + is_tax_unit_dependent: true + wa_wccc_max_monthly_reimbursement: 1_500 + spm_units: + spm_unit: + members: [person1, person2] + wa_wccc_eligible: true + wa_wccc_copay: 100 + # Annual 12,000 → 1,000/mo. + spm_unit_pre_subsidy_childcare_expenses: 12_000 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + # max(1000 - 100, 0) = 900; min(900, 1500) = 900. + wa_wccc: 900 + +- name: Case 3, expenses exceed max reimbursement, capped at max reimbursement. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + person2: + age: 4 + is_tax_unit_dependent: true + wa_wccc_max_monthly_reimbursement: 1_000 + spm_units: + spm_unit: + members: [person1, person2] + wa_wccc_eligible: true + wa_wccc_copay: 100 + # Annual 36,000 → 3,000/mo. + spm_unit_pre_subsidy_childcare_expenses: 36_000 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + # max(3000 - 100, 0) = 2900; min(2900, 1000) = 1000. + wa_wccc: 1_000 + +- name: Case 4, two eligible children sum max reimbursements via add(). + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + person2: + age: 4 + is_tax_unit_dependent: true + wa_wccc_max_monthly_reimbursement: 1_000 + person3: + age: 6 + is_tax_unit_dependent: true + wa_wccc_max_monthly_reimbursement: 800 + spm_units: + spm_unit: + members: [person1, person2, person3] + wa_wccc_eligible: true + wa_wccc_copay: 100 + # Annual 30,000 → 2,500/mo. + spm_unit_pre_subsidy_childcare_expenses: 30_000 + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: WA + output: + # Max reimbursement = 1000 + 800 = 1800. + # max(2500 - 100, 0) = 2400; min(2400, 1800) = 1800. + wa_wccc: 1_800 diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_activity_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_activity_eligible.yaml new file mode 100644 index 00000000000..97c7a6554cc --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_activity_eligible.yaml @@ -0,0 +1,217 @@ +- name: Case 1, single working parent, activity eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + employment_income: 30_000 + is_full_time_student: false + is_in_k12_school: false + is_disabled: false + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + wa_wccc_activity_eligible: true + +- name: Case 2, single non-working parent, activity ineligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + employment_income: 0 + is_full_time_student: false + is_in_k12_school: false + is_disabled: false + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + wa_wccc_activity_eligible: false + +- name: Case 3, two-parent household both working, eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + employment_income: 30_000 + is_full_time_student: false + is_in_k12_school: false + is_disabled: false + person2: + age: 28 + is_tax_unit_head_or_spouse: true + employment_income: 25_000 + is_full_time_student: false + is_in_k12_school: false + is_disabled: false + person3: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2, person3] + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: WA + output: + wa_wccc_activity_eligible: true + +- name: Case 4, two-parent household one not working, ineligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + employment_income: 30_000 + is_full_time_student: false + is_in_k12_school: false + is_disabled: false + person2: + age: 28 + is_tax_unit_head_or_spouse: true + employment_income: 0 + is_full_time_student: false + is_in_k12_school: false + is_disabled: false + person3: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2, person3] + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: WA + output: + wa_wccc_activity_eligible: false + +- name: Case 5, two-parent household with disabled spouse exempt from activity test. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + employment_income: 30_000 + is_full_time_student: false + is_in_k12_school: false + is_disabled: false + person2: + age: 28 + is_tax_unit_head_or_spouse: true + employment_income: 0 + is_full_time_student: false + is_in_k12_school: false + is_disabled: true + person3: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2, person3] + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: WA + output: + wa_wccc_activity_eligible: true + +- name: Case 6, full-time student parent with no earnings, eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + employment_income: 0 + is_full_time_student: true + is_in_k12_school: false + is_disabled: false + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + wa_wccc_activity_eligible: true + +- name: Case 7, two-parent household with disabled head and working spouse, eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + employment_income: 0 + is_full_time_student: false + is_in_k12_school: false + is_disabled: true + person2: + age: 28 + is_tax_unit_head_or_spouse: true + employment_income: 30_000 + is_full_time_student: false + is_in_k12_school: false + is_disabled: false + person3: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2, person3] + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: WA + output: + # Disabled head exempt from activity test; working spouse passes via earnings. + wa_wccc_activity_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_center_age_group.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_center_age_group.yaml new file mode 100644 index 00000000000..101a974f5c9 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_center_age_group.yaml @@ -0,0 +1,68 @@ +- name: Case 1, infant 6 months old. + period: 2025-01 + input: + age: 0.5 + state_code: WA + output: + # 0.5 yr * 12 = 6 months < 12 -> INFANT. + wa_wccc_center_age_group: INFANT + +- name: Case 2, infant boundary at 11 months. + period: 2025-01 + input: + age: 0.92 + state_code: WA + output: + # 0.92 yr * 12 = 11.04 months < 12 -> INFANT. + wa_wccc_center_age_group: INFANT + +- name: Case 3, toddler at exactly 12 months. + period: 2025-01 + input: + age: 1 + state_code: WA + output: + # 12 months not less than 12 -> TODDLER. + wa_wccc_center_age_group: TODDLER + +- name: Case 4, toddler at 24 months. + period: 2025-01 + input: + age: 2 + state_code: WA + output: + wa_wccc_center_age_group: TODDLER + +- name: Case 5, preschool at 30 months boundary. + period: 2025-01 + input: + age: 2.5 + state_code: WA + output: + # 30 months not less than 30 -> PRESCHOOL. + wa_wccc_center_age_group: PRESCHOOL + +- name: Case 6, preschool at 4 years. + period: 2025-01 + input: + age: 4 + state_code: WA + output: + wa_wccc_center_age_group: PRESCHOOL + +- name: Case 7, school age at exactly 6 years (boundary). + period: 2025-01 + input: + age: 6 + state_code: WA + output: + # 6 yr not less than 6 -> SCHOOL_AGE. + wa_wccc_center_age_group: SCHOOL_AGE + +- name: Case 8, school age at 10 years. + period: 2025-01 + input: + age: 10 + state_code: WA + output: + wa_wccc_center_age_group: SCHOOL_AGE diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_center_region.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_center_region.yaml new file mode 100644 index 00000000000..d9a589bc785 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_center_region.yaml @@ -0,0 +1,58 @@ +- name: Case 1, Adams County, no override, Region 1. + period: 2025-01 + input: + county_str: ADAMS_COUNTY_WA + state_code: WA + output: + wa_wccc_center_region: REGION_1 + +- name: Case 2, Clark County overrides to Region 3 for centers. + period: 2025-01 + input: + county_str: CLARK_COUNTY_WA + state_code: WA + output: + # Clark is base Region 6 but pays Region 3 rates for centers. + wa_wccc_center_region: REGION_3 + +- name: Case 3, Benton County overrides to Region 6 for centers. + period: 2025-01 + input: + county_str: BENTON_COUNTY_WA + state_code: WA + output: + # Benton is base Region 2 but pays Region 6 rates for centers. + wa_wccc_center_region: REGION_6 + +- name: Case 4, Walla Walla County overrides to Region 6 for centers. + period: 2025-01 + input: + county_str: WALLA_WALLA_COUNTY_WA + state_code: WA + output: + wa_wccc_center_region: REGION_6 + +- name: Case 5, Whitman County overrides to Region 6 for centers. + period: 2025-01 + input: + county_str: WHITMAN_COUNTY_WA + state_code: WA + output: + # Whitman is base Region 1 but pays Region 6 rates for centers. + wa_wccc_center_region: REGION_6 + +- name: Case 6, Spokane County, no override, Spokane region. + period: 2025-01 + input: + county_str: SPOKANE_COUNTY_WA + state_code: WA + output: + wa_wccc_center_region: SPOKANE + +- name: Case 7, King County, no override, Region 4. + period: 2025-01 + input: + county_str: KING_COUNTY_WA + state_code: WA + output: + wa_wccc_center_region: REGION_4 diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_copay.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_copay.yaml new file mode 100644 index 00000000000..0297e99d82e --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_copay.yaml @@ -0,0 +1,330 @@ +- name: Case 1, single adult at 17.6% SMI, copay waived ($0 tier). + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + employment_income: 12_000 + spm_units: + spm_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: WA + is_homeless: false + output: + # SMI fraction = 1,000/mo / 5,679.01/mo = 0.176 (<= 20%, $0 tier). + wa_wccc_copay: 0 + +- name: Case 2, single adult at ~26% SMI, $65 copay tier. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + employment_income: 18_000 + spm_units: + spm_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: WA + is_homeless: false + output: + # SMI fraction = 1,500/mo / 5,679.01/mo = 0.264 (above 20%, <= 36% -> $65). + wa_wccc_copay: 65 + +- name: Case 3, single adult at ~44% SMI, $90 copay tier. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + employment_income: 30_000 + spm_units: + spm_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: WA + is_homeless: false + output: + # SMI fraction = 2,500/mo / 5,679.01/mo = 0.440 (above 36%, <= 50% -> $90). + wa_wccc_copay: 90 + +- name: Case 4, single adult at ~53% SMI, $165 copay tier. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + employment_income: 36_000 + spm_units: + spm_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: WA + is_homeless: false + output: + # SMI fraction = 3,000/mo / 5,679.01/mo = 0.528 (above 50%, <= 60% -> $165). + wa_wccc_copay: 165 + +- name: Case 5, single adult at ~62% SMI, $215 copay tier. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + employment_income: 42_000 + spm_units: + spm_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: WA + is_homeless: false + output: + # SMI fraction = 3,500/mo / 5,679.01/mo = 0.616 (above 60% -> $215). + wa_wccc_copay: 215 + +- name: Case 6, homeless household at $90 tier income, copay waived to $0. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + employment_income: 30_000 + spm_units: + spm_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: WA + is_homeless: true + output: + # Homeless waiver overrides bracket; would be $90 without waiver. + wa_wccc_copay: 0 + +- name: Case 7, teen parent in K-12 at $65 tier income, copay waived to $0. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 19 + is_tax_unit_head_or_spouse: true + is_in_k12_school: true + employment_income: 18_000 + spm_units: + spm_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: WA + is_homeless: false + output: + # Teen-parent (HS/HSE under 22) waiver overrides bracket; would be $65 without waiver. + wa_wccc_copay: 0 + +- name: Case 8, zero income, $0 copay tier. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + employment_income: 0 + spm_units: + spm_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: WA + is_homeless: false + output: + # SMI fraction = 0; falls in first bracket (at-or-below 20%) -> $0. + wa_wccc_copay: 0 + +- name: Case 9, single adult just below 20% SMI threshold, $0 tier. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + employment_income: 13_500 + spm_units: + spm_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: WA + is_homeless: false + output: + # Size 1 monthly SMI = 131,054 * 0.52 / 12 = $5,679.007. + # Income $13,500/yr = $1,125/mo. Fraction = 1,125 / 5,679.007 = 0.19810. + # Below 0.2001 threshold -> first bracket -> $0. + wa_wccc_copay: 0 + +- name: Case 10, single adult just above 20% SMI threshold, $65 tier. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + employment_income: 13_700 + spm_units: + spm_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: WA + is_homeless: false + output: + # Income $13,700/yr = $1,141.667/mo. Fraction = 1,141.667 / 5,679.007 = 0.20104. + # At or above 0.2001 threshold and at or below 0.3601 -> $65 tier. + wa_wccc_copay: 65 + +- name: Case 11, single adult just above 36% SMI threshold, $90 tier. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + employment_income: 24_600 + spm_units: + spm_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: WA + is_homeless: false + output: + # Income $24,600/yr = $2,050/mo. Fraction = 2,050 / 5,679.007 = 0.36097. + # Above 0.3601 threshold and at or below 0.5001 -> $90 tier. + wa_wccc_copay: 90 + +- name: Case 12, single adult just above 50% SMI threshold, $165 tier. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + employment_income: 34_100 + spm_units: + spm_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: WA + is_homeless: false + output: + # Income $34,100/yr = $2,841.667/mo. Fraction = 2,841.667 / 5,679.007 = 0.50029. + # Above 0.5001 threshold and at or below 0.6001 -> $165 tier. + wa_wccc_copay: 165 + +- name: Case 13, single adult just above 60% SMI threshold, $215 tier. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + employment_income: 41_000 + spm_units: + spm_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: WA + is_homeless: false + output: + # Income $41,000/yr = $3,416.667/mo. Fraction = 3,416.667 / 5,679.007 = 0.60163. + # Above 0.6001 threshold -> highest bracket -> $215 tier. + wa_wccc_copay: 215 diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_copay_waived.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_copay_waived.yaml new file mode 100644 index 00000000000..64fc9dae5a9 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_copay_waived.yaml @@ -0,0 +1,124 @@ +- name: Case 1, homeless household, copay waived. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: true + output: + wa_wccc_copay_waived: true + +- name: Case 2, teen parent age 19 in K-12, copay waived. + period: 2025-01 + input: + people: + person1: + age: 19 + is_tax_unit_head_or_spouse: true + is_in_k12_school: true + person2: + age: 1 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + wa_wccc_copay_waived: true + +- name: Case 3, parent age 22 in K-12, copay waived (no age cap). + period: 2025-01 + input: + people: + person1: + age: 22 + is_tax_unit_head_or_spouse: true + is_in_k12_school: true + person2: + age: 2 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + wa_wccc_copay_waived: true + +- name: Case 4, parent not in K-12, no waiver. + period: 2025-01 + input: + people: + person1: + age: 25 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + person2: + age: 2 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + wa_wccc_copay_waived: false + +- name: Case 5, regular working parent, no waiver. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + wa_wccc_copay_waived: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_countable_income.yaml new file mode 100644 index 00000000000..6c7fff21d22 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_countable_income.yaml @@ -0,0 +1,92 @@ +- name: Case 1, employment income only. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 24_000 + person2: + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + # Annual 24,000 / 12 = 2,000 per month. + wa_wccc_countable_income: 2_000 + +- name: Case 2, mixed earned and unearned income. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 12_000 + social_security: 6_000 + child_support_received: 2_400 + person2: + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + # (12,000 + 6,000 + 2,400) / 12 = 1,700 per month. + wa_wccc_countable_income: 1_700 + +- name: Case 3, no income. + period: 2025-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: WA + output: + wa_wccc_countable_income: 0 + +- name: Case 4, self-employment income. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + self_employment_income: 36_000 + person2: + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + # 36,000 / 12 = 3,000 per month. + wa_wccc_countable_income: 3_000 diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_eligible.yaml new file mode 100644 index 00000000000..ebb6b579642 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_eligible.yaml @@ -0,0 +1,223 @@ +- name: Case 1, all conditions met via standard path, eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + wa_wccc_income_eligible: true + is_ccdf_asset_eligible: true + wa_wccc_activity_eligible: true + wa_wccc_hgp_eligible: false + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + wa_wccc_eligible: true + +- name: Case 2, income ineligible, not eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + wa_wccc_income_eligible: false + is_ccdf_asset_eligible: true + wa_wccc_activity_eligible: true + wa_wccc_hgp_eligible: false + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + wa_wccc_eligible: false + +- name: Case 3, no eligible child, not eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + person2: + age: 15 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + wa_wccc_income_eligible: true + is_ccdf_asset_eligible: true + wa_wccc_activity_eligible: true + wa_wccc_hgp_eligible: false + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + wa_wccc_eligible: false + +- name: Case 4, asset ineligible, not eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + wa_wccc_income_eligible: true + is_ccdf_asset_eligible: false + wa_wccc_activity_eligible: true + wa_wccc_hgp_eligible: false + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + wa_wccc_eligible: false + +- name: Case 5, activity ineligible, not eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + wa_wccc_income_eligible: true + is_ccdf_asset_eligible: true + wa_wccc_activity_eligible: false + wa_wccc_hgp_eligible: false + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + wa_wccc_eligible: false + +- name: Case 6, HGP path bypasses standard income and asset tests. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + wa_wccc_income_eligible: false + is_ccdf_asset_eligible: false + wa_wccc_activity_eligible: true + wa_wccc_hgp_eligible: true + wa_wccc_countable_income: 1_000 + wa_wccc_smi_limit: 6_000 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + # HGP bypasses income and resources tests; activity still required. + wa_wccc_eligible: true + +- name: Case 7, HGP requires activity test still passes. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + wa_wccc_income_eligible: false + is_ccdf_asset_eligible: false + wa_wccc_activity_eligible: false + wa_wccc_hgp_eligible: true + wa_wccc_countable_income: 1_000 + wa_wccc_smi_limit: 6_000 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + wa_wccc_eligible: false + +- name: Case 8, HGP boundary, income exactly at 85% SMI limit, ineligible (strict less-than). + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + wa_wccc_income_eligible: false + is_ccdf_asset_eligible: false + wa_wccc_activity_eligible: true + wa_wccc_hgp_eligible: true + wa_wccc_countable_income: 6_000 + wa_wccc_smi_limit: 6_000 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + # WAC 110-15-0023(2)(b): "under" 85% SMI is strict less-than. + wa_wccc_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_eligible_child.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_eligible_child.yaml new file mode 100644 index 00000000000..964e3ff872a --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_eligible_child.yaml @@ -0,0 +1,142 @@ +- name: Case 1, child age 5, dependent, eligible. + period: 2025-01 + input: + people: + person1: + age: 5 + is_tax_unit_dependent: true + households: + household: + members: [person1] + state_code: WA + output: + wa_wccc_eligible_child: [true] + +- name: Case 2, child age 12, boundary eligible. + period: 2025-01 + input: + people: + person1: + age: 12 + is_tax_unit_dependent: true + households: + household: + members: [person1] + state_code: WA + output: + wa_wccc_eligible_child: [true] + +- name: Case 3, child age 13, ineligible. + period: 2025-01 + input: + people: + person1: + age: 13 + is_tax_unit_dependent: true + households: + household: + members: [person1] + state_code: WA + output: + wa_wccc_eligible_child: [false] + +- name: Case 4, newborn, dependent, eligible. + period: 2025-01 + input: + people: + person1: + age: 0 + is_tax_unit_dependent: true + households: + household: + members: [person1] + state_code: WA + output: + wa_wccc_eligible_child: [true] + +- name: Case 5, child age 5 but not a dependent, ineligible. + period: 2025-01 + input: + people: + person1: + age: 5 + is_tax_unit_dependent: false + households: + household: + members: [person1] + state_code: WA + output: + wa_wccc_eligible_child: [false] + +- name: Case 6, adult age 30, not eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_dependent: false + households: + household: + members: [person1] + state_code: WA + output: + wa_wccc_eligible_child: [false] + +- name: Case 7, child outside Washington, defined_for filters output. + period: 2025-01 + input: + people: + person1: + age: 5 + is_tax_unit_dependent: true + households: + household: + members: [person1] + state_code: NY + output: + wa_wccc_eligible_child: [false] + +- name: Case 8, age 15 with verified special need, eligible. + period: 2025-01 + input: + people: + person1: + age: 15 + is_tax_unit_dependent: true + is_disabled: true + households: + household: + members: [person1] + state_code: WA + output: + wa_wccc_eligible_child: [true] + +- name: Case 9, age 18 with verified special need, eligible at boundary. + period: 2025-01 + input: + people: + person1: + age: 18 + is_tax_unit_dependent: true + is_disabled: true + households: + household: + members: [person1] + state_code: WA + output: + wa_wccc_eligible_child: [true] + +- name: Case 10, age 19 with verified special need, ineligible above boundary. + period: 2025-01 + input: + people: + person1: + age: 19 + is_tax_unit_dependent: true + is_disabled: true + households: + household: + members: [person1] + state_code: WA + output: + wa_wccc_eligible_child: [false] diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_family_home_age_group.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_family_home_age_group.yaml new file mode 100644 index 00000000000..5a6732ff28d --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_family_home_age_group.yaml @@ -0,0 +1,76 @@ +- name: Case 1, infant 6 months old. + period: 2025-01 + input: + age: 0.5 + state_code: WA + output: + # 6 months < 12 -> INFANT. + wa_wccc_family_home_age_group: INFANT + +- name: Case 2, enhanced toddler at exactly 12 months. + period: 2025-01 + input: + age: 1 + state_code: WA + output: + # 12 months not < 12, but < 18 -> ENHANCED_TODDLER. + wa_wccc_family_home_age_group: ENHANCED_TODDLER + +- name: Case 3, enhanced toddler at 17 months. + period: 2025-01 + input: + age: 1.4 + state_code: WA + output: + # 16.8 months < 18 -> ENHANCED_TODDLER. + wa_wccc_family_home_age_group: ENHANCED_TODDLER + +- name: Case 4, toddler at exactly 18 months (boundary). + period: 2025-01 + input: + age: 1.5 + state_code: WA + output: + # 18 months not < 18, but < 30 -> TODDLER. + wa_wccc_family_home_age_group: TODDLER + +- name: Case 5, toddler at 24 months. + period: 2025-01 + input: + age: 2 + state_code: WA + output: + wa_wccc_family_home_age_group: TODDLER + +- name: Case 6, preschool at 30 months boundary. + period: 2025-01 + input: + age: 2.5 + state_code: WA + output: + # 30 months not < 30 -> PRESCHOOL. + wa_wccc_family_home_age_group: PRESCHOOL + +- name: Case 7, preschool at 4 years. + period: 2025-01 + input: + age: 4 + state_code: WA + output: + wa_wccc_family_home_age_group: PRESCHOOL + +- name: Case 8, school age at 6 years. + period: 2025-01 + input: + age: 6 + state_code: WA + output: + wa_wccc_family_home_age_group: SCHOOL_AGE + +- name: Case 9, school age at 10 years. + period: 2025-01 + input: + age: 10 + state_code: WA + output: + wa_wccc_family_home_age_group: SCHOOL_AGE diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_hgp_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_hgp_eligible.yaml new file mode 100644 index 00000000000..b9eb64ca5a7 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_hgp_eligible.yaml @@ -0,0 +1,37 @@ +- name: Case 1, homeless household, HGP eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + person2: + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: true + output: + wa_wccc_hgp_eligible: true + +- name: Case 2, non-homeless household, not HGP eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + person2: + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + wa_wccc_hgp_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_income_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_income_eligible.yaml new file mode 100644 index 00000000000..8aff739649f --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_income_eligible.yaml @@ -0,0 +1,240 @@ +- name: Case 1, countable income below SMI limit, eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + employment_income: 30_000 + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + snap: 0 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + # Size 2, applicant 60% SMI: 89,116.72 * 0.60 / 12 = $4,455.84/mo limit. + # Income $30,000/yr = $2,500/mo, well below limit. + wa_wccc_income_eligible: true + +- name: Case 2, countable income above SMI limit, ineligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + employment_income: 200_000 + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + snap: 0 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + # Size 2, applicant 60% SMI: $4,455.84/mo limit. + # Income $200,000/yr = $16,667/mo, above limit, no SNAP, not homeless. + wa_wccc_income_eligible: false + +- name: Case 3, SNAP recipient, automatically income eligible regardless of income. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + employment_income: 200_000 + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + snap_reported: 2_400 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + # snap_reported > 0 triggers automatic income eligibility per + # RCW 43.216.802(5). + wa_wccc_income_eligible: true + +- name: Case 4, homeless household above standard income tier, not income eligible (HGP path is in wa_wccc_eligible). + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + employment_income: 80_000 + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + snap: 0 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: true + output: + # Homeless override is enforced in wa_wccc_eligible (HGP path bypasses + # this variable). wa_wccc_income_eligible only checks the standard tier. + # Income $80,000/yr = $6,667/mo > 85% SMI ($6,312/mo size 2). + wa_wccc_income_eligible: false + +- name: Case 5, applicant income just under 60% SMI limit, eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + employment_income: 53_470 + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + snap: 0 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + # Size 2 monthly limit at 60% SMI = 131,054 * 0.68 * 0.60 / 12 = $4,455.836. + # Income $53,470/yr = $4,455.833/mo, $0.003 below limit -> eligible (<=). + wa_wccc_income_eligible: true + +- name: Case 6, applicant income just above 60% SMI limit, ineligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + employment_income: 53_500 + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + snap: 0 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + # Size 2 monthly limit at 60% SMI = $4,455.836. + # Income $53,500/yr = $4,458.333/mo, above limit -> ineligible. + wa_wccc_income_eligible: false + +- name: Case 7, recipient income just under 65% SMI limit, eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: true + employment_income: 57_925 + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + snap: 0 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + # Size 2 monthly limit at 65% SMI = 131,054 * 0.68 * 0.65 / 12 = $4,827.156. + # Income $57,925/yr = $4,827.083/mo, just under limit -> eligible. + wa_wccc_income_eligible: true + +- name: Case 8, recipient income just above 65% SMI limit, ineligible. + period: 2025-01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: true + employment_income: 58_000 + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + snap: 0 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + # Size 2 monthly limit at 65% SMI = $4,827.156. + # Income $58,000/yr = $4,833.333/mo, above limit -> ineligible. + wa_wccc_income_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_max_monthly_reimbursement.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_max_monthly_reimbursement.yaml new file mode 100644 index 00000000000..22ba1fe8118 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_max_monthly_reimbursement.yaml @@ -0,0 +1,251 @@ +- name: Case 1, center provider for Region 1 infant full day, $62.05 * 23. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + wa_wccc_eligible_child: true + wa_wccc_provider_type: CENTER + wa_wccc_center_age_group: INFANT + wa_wccc_family_home_age_group: INFANT + wa_wccc_day_type: FULL_DAY + households: + household: + members: [person1] + state_code: WA + wa_wccc_center_region: REGION_1 + wa_wccc_region: REGION_1 + output: + # Center: 62.05/day * 23 days = 1,427.15. + wa_wccc_max_monthly_reimbursement: [1_427.15] + +- name: Case 2, family home provider for Region 1 infant full day, $49.23 * 22. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + wa_wccc_eligible_child: true + wa_wccc_provider_type: FAMILY_HOME + wa_wccc_center_age_group: INFANT + wa_wccc_family_home_age_group: INFANT + wa_wccc_day_type: FULL_DAY + households: + household: + members: [person1] + state_code: WA + wa_wccc_center_region: REGION_1 + wa_wccc_region: REGION_1 + output: + # Family home: 49.23/day * 22 days = 1,083.06. + wa_wccc_max_monthly_reimbursement: [1_083.06] + +- name: Case 3, in-home relative provider, $4.00 * 230. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + wa_wccc_eligible_child: true + wa_wccc_provider_type: IN_HOME_RELATIVE + wa_wccc_center_age_group: INFANT + wa_wccc_family_home_age_group: INFANT + wa_wccc_day_type: FULL_DAY + households: + household: + members: [person1] + state_code: WA + wa_wccc_center_region: REGION_1 + wa_wccc_region: REGION_1 + output: + # In-home: 4.00/hour * 230 hours = 920. + wa_wccc_max_monthly_reimbursement: [920] + +- name: Case 4, family home partial day for Region 1 infant, $36.92 * 22. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + wa_wccc_eligible_child: true + wa_wccc_provider_type: FAMILY_HOME + wa_wccc_center_age_group: INFANT + wa_wccc_family_home_age_group: INFANT + wa_wccc_day_type: PARTIAL_DAY + households: + household: + members: [person1] + state_code: WA + wa_wccc_center_region: REGION_1 + wa_wccc_region: REGION_1 + output: + # Family home PARTIAL_DAY: 36.92/day * 22 days = 812.24. + wa_wccc_max_monthly_reimbursement: [812.24] + +- name: Case 5, center partial day falls back to half day rate. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + wa_wccc_eligible_child: true + wa_wccc_provider_type: CENTER + wa_wccc_center_age_group: INFANT + wa_wccc_family_home_age_group: INFANT + wa_wccc_day_type: PARTIAL_DAY + households: + household: + members: [person1] + state_code: WA + wa_wccc_center_region: REGION_1 + wa_wccc_region: REGION_1 + output: + # Center PARTIAL_DAY mirrors HALF_DAY: 31.03/day * 23 days = 713.69. + wa_wccc_max_monthly_reimbursement: [713.69] + +- name: Case 6, center explicit half day for Region 1 infant. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + wa_wccc_eligible_child: true + wa_wccc_provider_type: CENTER + wa_wccc_center_age_group: INFANT + wa_wccc_family_home_age_group: INFANT + wa_wccc_day_type: HALF_DAY + households: + household: + members: [person1] + state_code: WA + wa_wccc_center_region: REGION_1 + wa_wccc_region: REGION_1 + output: + # Center HALF_DAY: 31.03/day * 23 days = 713.69. + wa_wccc_max_monthly_reimbursement: [713.69] + +- name: Case 7, center full day for Region 4 (King) toddler. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + wa_wccc_eligible_child: true + wa_wccc_provider_type: CENTER + wa_wccc_center_age_group: TODDLER + wa_wccc_family_home_age_group: TODDLER + wa_wccc_day_type: FULL_DAY + households: + household: + members: [person1] + state_code: WA + wa_wccc_center_region: REGION_4 + wa_wccc_region: REGION_4 + output: + # Center: 101.59/day * 23 days = 2,336.57. + wa_wccc_max_monthly_reimbursement: [2_336.57] + +- name: Case 8, center full day for Region 6 school age. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + wa_wccc_eligible_child: true + wa_wccc_provider_type: CENTER + wa_wccc_center_age_group: SCHOOL_AGE + wa_wccc_family_home_age_group: SCHOOL_AGE + wa_wccc_day_type: FULL_DAY + households: + household: + members: [person1] + state_code: WA + wa_wccc_center_region: REGION_6 + wa_wccc_region: REGION_6 + output: + # Center: 50.23/day * 23 days = 1,155.29. + wa_wccc_max_monthly_reimbursement: [1_155.29] + +- name: Case 9, family home full day for Region 3 enhanced toddler. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + wa_wccc_eligible_child: true + wa_wccc_provider_type: FAMILY_HOME + wa_wccc_center_age_group: TODDLER + wa_wccc_family_home_age_group: ENHANCED_TODDLER + wa_wccc_day_type: FULL_DAY + households: + household: + members: [person1] + state_code: WA + wa_wccc_center_region: REGION_3 + wa_wccc_region: REGION_3 + output: + # Family home: 65.00/day * 22 days = 1,430. + wa_wccc_max_monthly_reimbursement: [1_430] + +- name: Case 10, family home full day for Spokane preschool. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + wa_wccc_eligible_child: true + wa_wccc_provider_type: FAMILY_HOME + wa_wccc_center_age_group: PRESCHOOL + wa_wccc_family_home_age_group: PRESCHOOL + wa_wccc_day_type: FULL_DAY + households: + household: + members: [person1] + state_code: WA + wa_wccc_center_region: SPOKANE + wa_wccc_region: SPOKANE + output: + # Family home: 45.00/day * 22 days = 990. + wa_wccc_max_monthly_reimbursement: [990] + +- name: Case 11, family home full day for Region 1 infant after the 2025-07-01 DCYF rate update. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + wa_wccc_eligible_child: true + wa_wccc_provider_type: FAMILY_HOME + wa_wccc_center_age_group: INFANT + wa_wccc_family_home_age_group: INFANT + wa_wccc_day_type: FULL_DAY + households: + household: + members: [person1] + state_code: WA + wa_wccc_center_region: REGION_1 + wa_wccc_region: REGION_1 + output: + # Family home (post-2025-07-01): 60.00/day * 22 days = 1,320. + wa_wccc_max_monthly_reimbursement: [1_320] + +- name: Case 12, family home explicit half day for Region 1 infant. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + wa_wccc_eligible_child: true + wa_wccc_provider_type: FAMILY_HOME + wa_wccc_center_age_group: INFANT + wa_wccc_family_home_age_group: INFANT + wa_wccc_day_type: HALF_DAY + households: + household: + members: [person1] + state_code: WA + wa_wccc_center_region: REGION_1 + wa_wccc_region: REGION_1 + output: + # Family home HALF_DAY: 24.62/day * 22 days = 541.64. + wa_wccc_max_monthly_reimbursement: [541.64] diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_region.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_region.yaml new file mode 100644 index 00000000000..15e60afb5db --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_region.yaml @@ -0,0 +1,75 @@ +- name: Case 1, Adams County, Region 1. + period: 2025-01 + input: + county_str: ADAMS_COUNTY_WA + state_code: WA + output: + wa_wccc_region: REGION_1 + +- name: Case 2, Whitman County, Region 1. + period: 2025-01 + input: + county_str: WHITMAN_COUNTY_WA + state_code: WA + output: + # Whitman is Region 1 for non-center providers. + wa_wccc_region: REGION_1 + +- name: Case 3, Spokane County, Spokane region. + period: 2025-01 + input: + county_str: SPOKANE_COUNTY_WA + state_code: WA + output: + wa_wccc_region: SPOKANE + +- name: Case 4, Benton County, Region 2. + period: 2025-01 + input: + county_str: BENTON_COUNTY_WA + state_code: WA + output: + # Benton is Region 2 for non-center providers. + wa_wccc_region: REGION_2 + +- name: Case 5, King County, Region 4. + period: 2025-01 + input: + county_str: KING_COUNTY_WA + state_code: WA + output: + wa_wccc_region: REGION_4 + +- name: Case 6, Snohomish County, Region 3. + period: 2025-01 + input: + county_str: SNOHOMISH_COUNTY_WA + state_code: WA + output: + wa_wccc_region: REGION_3 + +- name: Case 7, Pierce County, Region 5. + period: 2025-01 + input: + county_str: PIERCE_COUNTY_WA + state_code: WA + output: + wa_wccc_region: REGION_5 + +- name: Case 8, Clark County, Region 6. + period: 2025-01 + input: + county_str: CLARK_COUNTY_WA + state_code: WA + output: + # Clark is Region 6 for non-center providers. + wa_wccc_region: REGION_6 + +- name: Case 9, Walla Walla County, Region 2. + period: 2025-01 + input: + county_str: WALLA_WALLA_COUNTY_WA + state_code: WA + output: + # Walla Walla is Region 2 for non-center providers. + wa_wccc_region: REGION_2 diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_smi_fraction.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_smi_fraction.yaml new file mode 100644 index 00000000000..c38297262cc --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_smi_fraction.yaml @@ -0,0 +1,69 @@ +- name: Case 1, single adult with $1,000/mo countable income, around 18% SMI. + period: 2025-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + employment_income: 12_000 + spm_units: + spm_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: WA + output: + # WA SMI 2024-10-01 size 1: 131,054 * 0.52 / 12 = $5,679.01/mo. + # Income 12,000/yr = 1,000/mo. Fraction = 1000 / 5679.01 = 0.176. + wa_wccc_smi_fraction: 0.176 + +- name: Case 2, family of 2 with $30,000/yr countable income. + period: 2025-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + employment_income: 30_000 + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + # WA SMI 2024-10-01 size 2: 131,054 * 0.68 / 12 = $7,426.39/mo. + # Income 30,000/yr = 2,500/mo. Fraction = 2500 / 7426.39 = 0.337. + wa_wccc_smi_fraction: 0.337 + +- name: Case 3, zero countable income, fraction is zero. + period: 2025-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 30 + person2: + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + output: + wa_wccc_smi_fraction: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_smi_limit.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_smi_limit.yaml new file mode 100644 index 00000000000..b09824d3b65 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_smi_limit.yaml @@ -0,0 +1,214 @@ +- name: Case 1, applicant family of 3 in 2025-01 uses 2024-10-01 SMI table. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + person2: + age: 28 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + person3: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2, person3] + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: WA + is_homeless: false + output: + # WA SMI 2024-10-01: $131,054. Size 3 adjustment 0.84 = $110,085.36. + # Applicant rate 0.60. Monthly = 110,085.36 * 0.60 / 12 = $5,504.27. + wa_wccc_smi_limit: 5_504.27 + +- name: Case 2, recipient family of 2 in 2025-01. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: true + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + # WA SMI 2024-10-01: $131,054. Size 2 adjustment 0.68 = $89,116.72. + # Recipient rate 0.65. Monthly = 89,116.72 * 0.65 / 12 = $4,827.16. + wa_wccc_smi_limit: 4_827.16 + +- name: Case 3, homeless family of 4 in 2025-01, 85% SMI. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + person2: + age: 28 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + person3: + age: 5 + is_tax_unit_dependent: true + person4: + age: 2 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + households: + household: + members: [person1, person2, person3, person4] + state_code: WA + is_homeless: true + output: + # WA SMI 2024-10-01: $131,054. Size 4 adjustment 1.00 = $131,054. + # Homeless rate 0.85. Monthly = 131,054 * 0.85 / 12 = $9,282.99. + wa_wccc_smi_limit: 9_282.99 + +- name: Case 4, single adult applicant in 2025-01, size 1 SMI limit. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + spm_units: + spm_unit: + members: [person1] + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: WA + is_homeless: false + output: + # WA SMI 2024-10-01: $131,054. Size 1 adjustment 0.52 = $68,148.08. + # Applicant rate 0.60. Monthly = 68,148.08 * 0.60 / 12 = $3,407.40. + wa_wccc_smi_limit: 3_407.40 + +- name: Case 5, large family of 10 applicant in 2025-01, size 10 SMI limit. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + person2: + age: 33 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + person3: + age: 12 + is_tax_unit_dependent: true + person4: + age: 10 + is_tax_unit_dependent: true + person5: + age: 8 + is_tax_unit_dependent: true + person6: + age: 6 + is_tax_unit_dependent: true + person7: + age: 5 + is_tax_unit_dependent: true + person8: + age: 4 + is_tax_unit_dependent: true + person9: + age: 2 + is_tax_unit_dependent: true + person10: + age: 1 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: + [ + person1, + person2, + person3, + person4, + person5, + person6, + person7, + person8, + person9, + person10, + ] + tax_units: + tax_unit: + members: + [ + person1, + person2, + person3, + person4, + person5, + person6, + person7, + person8, + person9, + person10, + ] + households: + household: + members: + [ + person1, + person2, + person3, + person4, + person5, + person6, + person7, + person8, + person9, + person10, + ] + state_code: WA + is_homeless: false + output: + # WA SMI 2024-10-01: $131,054. Size 10: 0.52 + 0.16*5 + 0.03*4 = 1.44. + # Annual = 131,054 * 1.44 = $188,717.76. + # Applicant rate 0.60. Monthly = 188,717.76 * 0.60 / 12 = $9,435.89. + wa_wccc_smi_limit: 9_435.89 diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_smi_rate.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_smi_rate.yaml new file mode 100644 index 00000000000..482e95e9058 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/wa_wccc_smi_rate.yaml @@ -0,0 +1,162 @@ +- name: Case 1, applicant single parent, 60% SMI rate. + period: 2025-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + wa_wccc_smi_rate: 0.6 + +- name: Case 2, currently enrolled recipient, 65% SMI rate. + period: 2025-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: true + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + wa_wccc_smi_rate: 0.65 + +- name: Case 3, homeless household, 85% SMI rate (overrides enrolled). + period: 2025-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: true + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: true + output: + wa_wccc_smi_rate: 0.85 + +- name: Case 4, teen parent age 19 in K-12 school, 85% SMI rate. + period: 2025-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 19 + is_tax_unit_head_or_spouse: true + is_in_k12_school: true + is_wccc_enrolled: false + person2: + age: 1 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + wa_wccc_smi_rate: 0.85 + +- name: Case 5, parent age 22 in K-12, teen-parent rate applies (no age cap). + period: 2025-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 22 + is_tax_unit_head_or_spouse: true + is_in_k12_school: true + is_wccc_enrolled: false + person2: + age: 2 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + wa_wccc_smi_rate: 0.85 + +- name: Case 6, parent in K-12 not head or spouse, applicant rate applies. + period: 2025-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 30 + is_tax_unit_head_or_spouse: true + is_in_k12_school: false + is_wccc_enrolled: false + person2: + age: 16 + is_tax_unit_dependent: true + is_in_k12_school: true + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: WA + is_homeless: false + output: + wa_wccc_smi_rate: 0.6 diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/copay/wa_wccc_copay.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/copay/wa_wccc_copay.py new file mode 100644 index 00000000000..c8e09018718 --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/copay/wa_wccc_copay.py @@ -0,0 +1,18 @@ +from policyengine_us.model_api import * + + +class wa_wccc_copay(Variable): + value_type = float + entity = SPMUnit + label = "Washington WCCC monthly copayment" + unit = USD + definition_period = MONTH + defined_for = StateCode.WA + reference = "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0075" + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.wa.dcyf.wccc.copay + smi_fraction = spm_unit("wa_wccc_smi_fraction", period) + amount = p.amount.calc(smi_fraction) + waived = spm_unit("wa_wccc_copay_waived", period) + return where(waived, 0, amount) diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/copay/wa_wccc_copay_waived.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/copay/wa_wccc_copay_waived.py new file mode 100644 index 00000000000..2ec5d43c20b --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/copay/wa_wccc_copay_waived.py @@ -0,0 +1,30 @@ +from policyengine_us.model_api import * + + +class wa_wccc_copay_waived(Variable): + value_type = bool + entity = SPMUnit + label = "Washington WCCC copayment is waived" + definition_period = MONTH + defined_for = StateCode.WA + reference = ( + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0075", + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0024", + ) + + def formula(spm_unit, period, parameters): + person = spm_unit.members + is_head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) + is_in_school = person("is_in_k12_school", period.this_year) + # WAC 110-15-0075(5)(a) waives the copay for parents attending high + # school. The HSE-certificate path is not modeled at the moment. + is_teen_parent = is_head_or_spouse & is_in_school + any_teen_parent = spm_unit.sum(is_teen_parent) > 0 + # WAC 110-15-0075(5)(c)(i) waives the copay for HGP families. + # WAC 110-15-0075(5)(c)(ii) also waives it for WAC 110-15-0024 + # categorical families (CPS/CWS/specialty courts), which we don't + # track at the moment. + # WAC 110-15-0075(5)(b) waives it for ECE-workforce employees, which + # we don't track at the moment. + is_hgp_eligible = spm_unit("wa_wccc_hgp_eligible", period) + return any_teen_parent | is_hgp_eligible diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/copay/wa_wccc_smi_fraction.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/copay/wa_wccc_smi_fraction.py new file mode 100644 index 00000000000..6d396fad4b6 --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/copay/wa_wccc_smi_fraction.py @@ -0,0 +1,24 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.hhs.hhs_smi import smi + + +class wa_wccc_smi_fraction(Variable): + value_type = float + entity = SPMUnit + label = "Washington WCCC household income as a fraction of State Median Income" + definition_period = MONTH + defined_for = StateCode.WA + reference = "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0075" + + def formula(spm_unit, period, parameters): + year = period.start.year + month = period.start.month + if month >= 10: + instant_str = f"{year}-10-01" + else: + instant_str = f"{year - 1}-10-01" + size = spm_unit("spm_unit_size", period.this_year) + state = spm_unit.household("state_code_str", period.this_year) + monthly_smi = smi(size, state, instant_str, parameters) / MONTHS_IN_YEAR + countable_income = spm_unit("wa_wccc_countable_income", period) + return where(monthly_smi > 0, countable_income / monthly_smi, 0) diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_activity_eligible.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_activity_eligible.py new file mode 100644 index 00000000000..a8f9480dd83 --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_activity_eligible.py @@ -0,0 +1,27 @@ +from policyengine_us.model_api import * + + +class wa_wccc_activity_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "Activity eligible for Washington WCCC" + definition_period = MONTH + defined_for = StateCode.WA + reference = ( + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0005", + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0020", + ) + + def formula(spm_unit, period, parameters): + person = spm_unit.members + is_head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) + has_earnings = person("earned_income", period.this_year) > 0 + is_student = person("is_full_time_student", period.this_year) + # WAC 110-15-0020(2)(b) waives the approved-activity requirement for + # a parent who is medically incapacitated. The household passes if + # every parent has either an approved activity or a waiver. + # We don't track approved-activity hours at the moment; treat any + # earnings or student status as meeting the activity test. + is_disabled = person("is_disabled", period.this_year) + individually_eligible = has_earnings | is_student | is_disabled + return spm_unit.sum(is_head_or_spouse & ~individually_eligible) == 0 diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_eligible.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_eligible.py new file mode 100644 index 00000000000..3999fac8858 --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_eligible.py @@ -0,0 +1,31 @@ +from policyengine_us.model_api import * + + +class wa_wccc_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "Eligible for Washington Working Connections Child Care" + definition_period = MONTH + defined_for = StateCode.WA + reference = ( + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0005", + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0023", + ) + + def formula(spm_unit, period, parameters): + # RCW 43.216.802(7) bars considering the citizenship status of either + # the applicant (parent) or the child, so no immigration check applies. + has_eligible_child = add(spm_unit, period, ["wa_wccc_eligible_child"]) > 0 + income_eligible = spm_unit("wa_wccc_income_eligible", period) + asset_eligible = spm_unit("is_ccdf_asset_eligible", period.this_year) + activity_eligible = spm_unit("wa_wccc_activity_eligible", period) + standard_path = income_eligible & asset_eligible + # WAC 110-15-0023(2)(a): HGP families bypass the asset limit and + # standard income tier. WAC 110-15-0023(2)(b) restricts HGP to + # income strictly under 85% SMI (the smi_limit returns 85% SMI + # when the household is homeless). + is_hgp_eligible = spm_unit("wa_wccc_hgp_eligible", period) + countable_income = spm_unit("wa_wccc_countable_income", period) + income_limit = spm_unit("wa_wccc_smi_limit", period) + hgp_path = is_hgp_eligible & (countable_income < income_limit) + return has_eligible_child & activity_eligible & (standard_path | hgp_path) diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_eligible_child.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_eligible_child.py new file mode 100644 index 00000000000..1af4dfe0891 --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_eligible_child.py @@ -0,0 +1,25 @@ +from policyengine_us.model_api import * + + +class wa_wccc_eligible_child(Variable): + value_type = bool + entity = Person + label = "Eligible child for Washington WCCC" + definition_period = MONTH + defined_for = StateCode.WA + reference = ( + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0005", + "https://app.leg.wa.gov/RCW/default.aspx?cite=43.216.802", + ) + + def formula(person, period, parameters): + p = parameters(period).gov.states.wa.dcyf.wccc.eligibility.age_threshold + age = person("monthly_age", period) + # WAC 110-15-0220(1)(b): children with a verified physical, mental, + # emotional, or behavioral condition qualify up to age 19. The court + # supervision path under RCW 43.216.802(2)(a)(ii) is not modeled at + # the moment. + is_disabled = person("is_disabled", period.this_year) + age_eligible = (age < p.child) | (is_disabled & (age < p.special_needs_child)) + is_dependent = person("is_tax_unit_dependent", period.this_year) + return age_eligible & is_dependent diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_hgp_eligible.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_hgp_eligible.py new file mode 100644 index 00000000000..d7c1369851b --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_hgp_eligible.py @@ -0,0 +1,16 @@ +from policyengine_us.model_api import * + + +class wa_wccc_hgp_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "Washington WCCC Homeless Grace Period eligible" + definition_period = MONTH + defined_for = StateCode.WA + reference = ("https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0023",) + # WAC 110-15-0023 establishes the Homeless Grace Period (HGP), which + # bypasses the asset limit and income tier. WAC 110-15-0024 categorical + # eligibility (CPS/CWS/specialty courts) is not modeled at the moment. + + def formula(spm_unit, period, parameters): + return spm_unit.household("is_homeless", period.this_year) diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_income_eligible.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_income_eligible.py new file mode 100644 index 00000000000..c360f985c25 --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_income_eligible.py @@ -0,0 +1,33 @@ +from policyengine_us.model_api import * + + +class wa_wccc_income_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "Income eligible for Washington WCCC" + definition_period = MONTH + defined_for = StateCode.WA + reference = ( + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0005", + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0023", + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0075", + "https://app.leg.wa.gov/RCW/default.aspx?cite=43.216.802", + ) + + def formula(spm_unit, period, parameters): + countable_income = spm_unit("wa_wccc_countable_income", period) + income_limit = spm_unit("wa_wccc_smi_limit", period) + under_smi_limit = countable_income <= income_limit + # RCW 43.216.802(5): when an applicant or consumer is a member of an + # assistance unit "receiving" basic food benefits under SNAP, the + # department must determine that the income eligibility requirements + # are met. We use snap_reported (an input variable) rather than + # is_snap_eligible to avoid a circular dependency through + # snap_dependent_care_deduction -> child_care_subsidies -> wa_wccc. + # The "eligible for" branch of the statute and SFAP are not modeled + # at the moment. + p = parameters( + period + ).gov.states.wa.dcyf.wccc.eligibility.income.snap_categorical + snap_categorical = p.in_effect & (spm_unit("snap_reported", period) > 0) + return under_smi_limit | snap_categorical diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_smi_limit.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_smi_limit.py new file mode 100644 index 00000000000..411ae221db8 --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_smi_limit.py @@ -0,0 +1,25 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.hhs.hhs_smi import smi + + +class wa_wccc_smi_limit(Variable): + value_type = float + entity = SPMUnit + label = "Washington WCCC monthly income limit" + unit = USD + definition_period = MONTH + defined_for = StateCode.WA + reference = "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0005" + + def formula(spm_unit, period, parameters): + year = period.start.year + month = period.start.month + if month >= 10: + instant_str = f"{year}-10-01" + else: + instant_str = f"{year - 1}-10-01" + size = spm_unit("spm_unit_size", period.this_year) + state = spm_unit.household("state_code_str", period.this_year) + annual_smi = smi(size, state, instant_str, parameters) + rate = spm_unit("wa_wccc_smi_rate", period) + return annual_smi * rate / MONTHS_IN_YEAR diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_smi_rate.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_smi_rate.py new file mode 100644 index 00000000000..136f0558e60 --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/eligibility/wa_wccc_smi_rate.py @@ -0,0 +1,36 @@ +from policyengine_us.model_api import * + + +class wa_wccc_smi_rate(Variable): + value_type = float + entity = SPMUnit + label = "Washington WCCC State Median Income limit rate" + definition_period = MONTH + defined_for = StateCode.WA + reference = ( + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0005", + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0023", + "https://app.leg.wa.gov/RCW/default.aspx?cite=43.216.814", + ) + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.wa.dcyf.wccc.eligibility.income.smi_rate + + person = spm_unit.members + is_head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) + is_in_school = person("is_in_k12_school", period.this_year) + # RCW 43.216.814 imposes the age 21 cap only on the HSE-certificate + # path, which we don't track at the moment; the K-12 path has no + # statutory age cap. + is_teen_parent = is_head_or_spouse & is_in_school + any_teen_parent = spm_unit.sum(is_teen_parent) > 0 + + is_homeless = spm_unit.household("is_homeless", period.this_year) + + any_enrolled = spm_unit.sum(person("is_wccc_enrolled", period)) > 0 + + is_applicant = ~is_homeless & ~any_teen_parent & ~any_enrolled + return select( + [is_homeless, any_teen_parent, any_enrolled, is_applicant], + [p.homeless, p.teen_parent, p.recipient, p.applicant], + ) diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/income/wa_wccc_countable_income.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/income/wa_wccc_countable_income.py new file mode 100644 index 00000000000..eed4db3791b --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/income/wa_wccc_countable_income.py @@ -0,0 +1,17 @@ +from policyengine_us.model_api import * + + +class wa_wccc_countable_income(Variable): + value_type = float + entity = SPMUnit + label = "Washington WCCC countable income" + unit = USD + definition_period = MONTH + defined_for = StateCode.WA + reference = ( + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0060", + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0065", + ) + + adds = "gov.states.wa.dcyf.wccc.sources" + subtracts = ["child_support_expense"] diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/is_wccc_enrolled.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/is_wccc_enrolled.py new file mode 100644 index 00000000000..0ebc406766b --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/is_wccc_enrolled.py @@ -0,0 +1,9 @@ +from policyengine_us.model_api import * + + +class is_wccc_enrolled(Variable): + value_type = bool + entity = Person + label = "Currently enrolled in Washington Working Connections Child Care" + definition_period = MONTH + reference = "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0005" diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_center_age_group.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_center_age_group.py new file mode 100644 index 00000000000..bc05b88f2da --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_center_age_group.py @@ -0,0 +1,37 @@ +from policyengine_us.model_api import * + + +class WAWCCCCenterAgeGroup(Enum): + INFANT = "Infant" + TODDLER = "Toddler" + PRESCHOOL = "Preschool" + SCHOOL_AGE = "School Age" + + +class wa_wccc_center_age_group(Variable): + value_type = Enum + entity = Person + possible_values = WAWCCCCenterAgeGroup + default_value = WAWCCCCenterAgeGroup.SCHOOL_AGE + definition_period = MONTH + defined_for = StateCode.WA + label = "Washington WCCC licensed center age group" + reference = "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200" + + def formula(person, period, parameters): + p = parameters(period).gov.states.wa.dcyf.wccc.rates.age_groups + age_years = person("monthly_age", period) + age_months = age_years * MONTHS_IN_YEAR + return select( + [ + age_months < p.infant_max_months, + age_months < p.toddler_max_months, + age_years < p.preschool_max_years, + ], + [ + WAWCCCCenterAgeGroup.INFANT, + WAWCCCCenterAgeGroup.TODDLER, + WAWCCCCenterAgeGroup.PRESCHOOL, + ], + default=WAWCCCCenterAgeGroup.SCHOOL_AGE, + ) diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_center_region.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_center_region.py new file mode 100644 index 00000000000..cb6b7d3cc10 --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_center_region.py @@ -0,0 +1,27 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.states.wa.dcyf.wccc.payment.wa_wccc_region import ( + WAWCCCRegion, +) + + +class wa_wccc_center_region(Variable): + value_type = Enum + entity = Household + possible_values = WAWCCCRegion + default_value = WAWCCCRegion.REGION_2 + definition_period = MONTH + defined_for = StateCode.WA + label = "Washington WCCC center-rate region with county overrides" + reference = "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200" + + def formula(household, period, parameters): + county = household("county_str", period) + base_region = household("wa_wccc_region", period) + p = parameters(period).gov.states.wa.dcyf.wccc.region + override_to_region_3 = np.isin(county, p.center_override_to_region_3_counties) + override_to_region_6 = np.isin(county, p.center_override_to_region_6_counties) + return select( + [override_to_region_3, override_to_region_6], + [WAWCCCRegion.REGION_3, WAWCCCRegion.REGION_6], + default=base_region, + ) diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_day_type.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_day_type.py new file mode 100644 index 00000000000..730804ba855 --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_day_type.py @@ -0,0 +1,24 @@ +from policyengine_us.model_api import * + + +class WAWCCCDayType(Enum): + HALF_DAY = "Half Day" + PARTIAL_DAY = "Partial Day" + FULL_DAY = "Full Day" + + +class wa_wccc_day_type(Variable): + value_type = Enum + entity = Person + possible_values = WAWCCCDayType + default_value = WAWCCCDayType.FULL_DAY + definition_period = MONTH + defined_for = StateCode.WA + label = "Washington WCCC daily billing unit type" + reference = "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0190" + # Per WAC 110-15-0190(7): FULL_DAY = at least 5 hours of care, HALF_DAY + # = under 5 hours, PARTIAL_DAY = under 5 hours with care before AND + # after school. We assume full-day care at the moment; the variable + # accepts user override. Centers do not have a PARTIAL_DAY rate per + # WAC 110-15-0200; PARTIAL_DAY for centers is treated as HALF_DAY in + # the reimbursement calculation. diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_family_home_age_group.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_family_home_age_group.py new file mode 100644 index 00000000000..0f50a06eaed --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_family_home_age_group.py @@ -0,0 +1,40 @@ +from policyengine_us.model_api import * + + +class WAWCCCFamilyHomeAgeGroup(Enum): + INFANT = "Infant" + ENHANCED_TODDLER = "Enhanced Toddler" + TODDLER = "Toddler" + PRESCHOOL = "Preschool" + SCHOOL_AGE = "School Age" + + +class wa_wccc_family_home_age_group(Variable): + value_type = Enum + entity = Person + possible_values = WAWCCCFamilyHomeAgeGroup + default_value = WAWCCCFamilyHomeAgeGroup.SCHOOL_AGE + definition_period = MONTH + defined_for = StateCode.WA + label = "Washington WCCC licensed family home age group" + reference = "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0205" + + def formula(person, period, parameters): + p = parameters(period).gov.states.wa.dcyf.wccc.rates.age_groups + age_years = person("monthly_age", period) + age_months = age_years * MONTHS_IN_YEAR + return select( + [ + age_months < p.infant_max_months, + age_months < p.enhanced_toddler_max_months, + age_months < p.toddler_max_months, + age_years < p.preschool_max_years, + ], + [ + WAWCCCFamilyHomeAgeGroup.INFANT, + WAWCCCFamilyHomeAgeGroup.ENHANCED_TODDLER, + WAWCCCFamilyHomeAgeGroup.TODDLER, + WAWCCCFamilyHomeAgeGroup.PRESCHOOL, + ], + default=WAWCCCFamilyHomeAgeGroup.SCHOOL_AGE, + ) diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_max_monthly_reimbursement.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_max_monthly_reimbursement.py new file mode 100644 index 00000000000..e115f49df79 --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_max_monthly_reimbursement.py @@ -0,0 +1,49 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.states.wa.dcyf.wccc.payment.wa_wccc_provider_type import ( + WAWCCCProviderType, +) + + +class wa_wccc_max_monthly_reimbursement(Variable): + value_type = float + entity = Person + label = "Washington WCCC maximum monthly reimbursement per child" + unit = USD + definition_period = MONTH + defined_for = "wa_wccc_eligible_child" + reference = ( + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0190", + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200", + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0205", + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0240", + ) + + def formula(person, period, parameters): + rates = parameters(period).gov.states.wa.dcyf.wccc.rates + units = rates.monthly_units + day_type = person("wa_wccc_day_type", period) + + center_region = person.household("wa_wccc_center_region", period) + center_age = person("wa_wccc_center_age_group", period) + center_monthly = ( + rates.center[center_region][center_age][day_type] * units.center_full_days + ) + + family_home_region = person.household("wa_wccc_region", period) + family_home_age = person("wa_wccc_family_home_age_group", period) + family_home_monthly = ( + rates.family_home[family_home_region][family_home_age][day_type] + * units.family_home_full_days + ) + + in_home_monthly = rates.in_home_relative * units.in_home_relative_full_hours + + provider_type = person("wa_wccc_provider_type", period) + return select( + [ + provider_type == WAWCCCProviderType.CENTER, + provider_type == WAWCCCProviderType.FAMILY_HOME, + provider_type == WAWCCCProviderType.IN_HOME_RELATIVE, + ], + [center_monthly, family_home_monthly, in_home_monthly], + ) diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_provider_type.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_provider_type.py new file mode 100644 index 00000000000..bfef4405042 --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_provider_type.py @@ -0,0 +1,22 @@ +from policyengine_us.model_api import * + + +class WAWCCCProviderType(Enum): + FAMILY_HOME = "Licensed Family Home" + IN_HOME_RELATIVE = "License-Exempt In-Home/Relative" + CENTER = "Licensed Center" + + +class wa_wccc_provider_type(Variable): + value_type = Enum + entity = Person + possible_values = WAWCCCProviderType + default_value = WAWCCCProviderType.CENTER + definition_period = MONTH + label = "Washington WCCC child care provider type" + defined_for = "wa_wccc_eligible_child" + reference = ( + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200", + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0205", + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0240", + ) diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_region.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_region.py new file mode 100644 index 00000000000..37d9b9bda53 --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/payment/wa_wccc_region.py @@ -0,0 +1,50 @@ +from policyengine_us.model_api import * + + +class WAWCCCRegion(Enum): + REGION_1 = "Region 1" + SPOKANE = "Spokane" + REGION_2 = "Region 2" + REGION_3 = "Region 3" + REGION_4 = "Region 4" + REGION_5 = "Region 5" + REGION_6 = "Region 6" + + +class wa_wccc_region(Variable): + value_type = Enum + entity = Household + possible_values = WAWCCCRegion + default_value = WAWCCCRegion.REGION_2 + definition_period = MONTH + defined_for = StateCode.WA + label = "Washington WCCC base geographic region" + reference = ( + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200", + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0205", + ) + + def formula(household, period, parameters): + county = household("county_str", period) + p = parameters(period).gov.states.wa.dcyf.wccc.region + return select( + [ + np.isin(county, p.region_1_counties), + np.isin(county, p.spokane_counties), + np.isin(county, p.region_2_counties), + np.isin(county, p.region_3_counties), + np.isin(county, p.region_4_counties), + np.isin(county, p.region_5_counties), + np.isin(county, p.region_6_counties), + ], + [ + WAWCCCRegion.REGION_1, + WAWCCCRegion.SPOKANE, + WAWCCCRegion.REGION_2, + WAWCCCRegion.REGION_3, + WAWCCCRegion.REGION_4, + WAWCCCRegion.REGION_5, + WAWCCCRegion.REGION_6, + ], + default=WAWCCCRegion.REGION_2, + ) diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/wa_child_care_subsidies.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/wa_child_care_subsidies.py new file mode 100644 index 00000000000..674b4371787 --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/wa_child_care_subsidies.py @@ -0,0 +1,11 @@ +from policyengine_us.model_api import * + + +class wa_child_care_subsidies(Variable): + value_type = float + entity = SPMUnit + label = "Washington child care subsidies" + unit = USD + definition_period = YEAR + defined_for = StateCode.WA + adds = ["wa_wccc"] diff --git a/policyengine_us/variables/gov/states/wa/dcyf/wccc/wa_wccc.py b/policyengine_us/variables/gov/states/wa/dcyf/wccc/wa_wccc.py new file mode 100644 index 00000000000..9adf6fb6229 --- /dev/null +++ b/policyengine_us/variables/gov/states/wa/dcyf/wccc/wa_wccc.py @@ -0,0 +1,21 @@ +from policyengine_us.model_api import * + + +class wa_wccc(Variable): + value_type = float + entity = SPMUnit + label = "Washington Working Connections Child Care subsidy" + unit = USD + definition_period = MONTH + defined_for = "wa_wccc_eligible" + reference = ( + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0190", + "https://app.leg.wa.gov/wac/default.aspx?cite=110-15-0200", + ) + + def formula(spm_unit, period, parameters): + copay = spm_unit("wa_wccc_copay", period) + max_reimbursement = add(spm_unit, period, ["wa_wccc_max_monthly_reimbursement"]) + actual_expenses = spm_unit("spm_unit_pre_subsidy_childcare_expenses", period) + uncapped = max_(actual_expenses - copay, 0) + return min_(uncapped, max_reimbursement) diff --git a/policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py b/policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py index 29dfc47c12a..175f3227829 100644 --- a/policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py +++ b/policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py @@ -32,6 +32,8 @@ def formula(spm_unit, period, parameters): "co_ccap_subsidy", "co_state_supplement", "co_oap", + # Washington programs. + "wa_child_care_subsidies", # New Mexico programs. "nm_ssi_state_supplement", # South Carolina programs.