From a3391a768beffc6c9d894096c5d758ef0a20805b Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 25 Mar 2026 13:25:06 -0400 Subject: [PATCH 1/8] Initial commit for Delaware CCAP implementation Closes #7863 Co-Authored-By: Claude Opus 4.6 (1M context) From 276831aa4d4ec30f41a6cdece2782117c0433721 Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 25 Mar 2026 13:25:55 -0400 Subject: [PATCH 2/8] Add changelog for Delaware CCAP Co-Authored-By: Claude Opus 4.6 (1M context) --- changelog.d/de-ccap.added.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/de-ccap.added.md diff --git a/changelog.d/de-ccap.added.md b/changelog.d/de-ccap.added.md new file mode 100644 index 00000000000..d65818d9763 --- /dev/null +++ b/changelog.d/de-ccap.added.md @@ -0,0 +1 @@ +Add Delaware CCAP (Child Care Assistance Program). From a575abc11cac51946ae0dc31f10ffb1abdfbad30 Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 25 Mar 2026 14:41:04 -0400 Subject: [PATCH 3/8] Implement Delaware Purchase of Care (POC) child care subsidy Closes #7863 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../hhs/ccdf/child_care_subsidy_programs.yaml | 1 + .../gov/states/de/dss/poc/age_group.yaml | 29 ++ .../de/dss/poc/age_threshold/child.yaml | 11 + .../dss/poc/age_threshold/disabled_child.yaml | 13 + .../dss/poc/copay/excess_burden_fpl_rate.yaml | 13 + .../gov/states/de/dss/poc/copay/rate.yaml | 14 + .../de/dss/poc/copay/waiver_fpl_rate.yaml | 14 + .../de/dss/poc/full_time_hours_per_day.yaml | 12 + .../poc/income/countable_income/sources.yaml | 35 ++ .../income/fpl_rate/initial_eligibility.yaml | 13 + .../poc/income/fpl_rate/redetermination.yaml | 13 + .../states/de/dss/poc/income/smi_rate.yaml | 13 + .../gov/states/de/dss/poc/rates/center.yaml | 28 + .../states/de/dss/poc/rates/family_home.yaml | 28 + .../rates/special_needs_rate_increase.yaml | 12 + .../gov/states/de/dss/poc/de_poc.yaml | 227 +++++++++ .../de/dss/poc/de_poc_activity_eligible.yaml | 106 ++++ .../states/de/dss/poc/de_poc_age_group.yaml | 140 +++++ .../gov/states/de/dss/poc/de_poc_copay.yaml | 113 +++++ .../states/de/dss/poc/de_poc_eligible.yaml | 134 +++++ .../de/dss/poc/de_poc_eligible_child.yaml | 192 +++++++ .../de/dss/poc/de_poc_income_eligible.yaml | 150 ++++++ .../poc/de_poc_maximum_weekly_benefit.yaml | 228 +++++++++ .../gov/states/de/dss/poc/integration.yaml | 478 ++++++++++++++++++ .../de/dss/poc/de_child_care_subsidies.py | 11 + .../variables/gov/states/de/dss/poc/de_poc.py | 28 + .../gov/states/de/dss/poc/de_poc_age_group.py | 36 ++ .../gov/states/de/dss/poc/de_poc_copay.py | 21 + .../de/dss/poc/de_poc_countable_income.py | 13 + .../gov/states/de/dss/poc/de_poc_enrolled.py | 9 + .../dss/poc/de_poc_maximum_weekly_benefit.py | 32 ++ .../states/de/dss/poc/de_poc_provider_type.py | 19 + .../eligibility/de_poc_activity_eligible.py | 20 + .../de/dss/poc/eligibility/de_poc_eligible.py | 17 + .../poc/eligibility/de_poc_eligible_child.py | 24 + .../poc/eligibility/de_poc_income_eligible.py | 28 + sources/working_references.md | 252 +++++++++ 37 files changed, 2527 insertions(+) create mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/age_group.yaml create mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/age_threshold/child.yaml create mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/age_threshold/disabled_child.yaml create mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/copay/excess_burden_fpl_rate.yaml create mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/copay/rate.yaml create mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/copay/waiver_fpl_rate.yaml create mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/full_time_hours_per_day.yaml create mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/income/countable_income/sources.yaml create mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml create mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml create mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/income/smi_rate.yaml create mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/rates/center.yaml create mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/rates/family_home.yaml create mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/rates/special_needs_rate_increase.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_activity_eligible.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_age_group.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_copay.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_eligible.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_eligible_child.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_income_eligible.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_maximum_weekly_benefit.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/integration.yaml create mode 100644 policyengine_us/variables/gov/states/de/dss/poc/de_child_care_subsidies.py create mode 100644 policyengine_us/variables/gov/states/de/dss/poc/de_poc.py create mode 100644 policyengine_us/variables/gov/states/de/dss/poc/de_poc_age_group.py create mode 100644 policyengine_us/variables/gov/states/de/dss/poc/de_poc_copay.py create mode 100644 policyengine_us/variables/gov/states/de/dss/poc/de_poc_countable_income.py create mode 100644 policyengine_us/variables/gov/states/de/dss/poc/de_poc_enrolled.py create mode 100644 policyengine_us/variables/gov/states/de/dss/poc/de_poc_maximum_weekly_benefit.py create mode 100644 policyengine_us/variables/gov/states/de/dss/poc/de_poc_provider_type.py create mode 100644 policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_activity_eligible.py create mode 100644 policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_eligible.py create mode 100644 policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_eligible_child.py create mode 100644 policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_income_eligible.py create mode 100644 sources/working_references.md 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 7a253af1f86..da9cf834ebc 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 @@ -3,6 +3,7 @@ values: 2021-01-01: - ca_child_care_subsidies # California Child Care - co_child_care_subsidies # Colorado Child Care Assistance Program + - de_child_care_subsidies # Delaware Purchase of Care - ma_child_care_subsidies # Massachusetts Child Care Financial Assistance - me_child_care_subsidies # Maine Child Care Affordability Program - ne_child_care_subsidies # Nebraska Child Care Subsidy diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/age_group.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/age_group.yaml new file mode 100644 index 00000000000..5bd17851793 --- /dev/null +++ b/policyengine_us/parameters/gov/states/de/dss/poc/age_group.yaml @@ -0,0 +1,29 @@ +description: Delaware determines the child care age group based on age under the Purchase of Care program. + +brackets: + - threshold: + 2024-01-01: 0 + amount: + 2024-01-01: 0 # INFANT + - threshold: + 2024-01-01: 1 + amount: + 2024-01-01: 1 # TODDLER + - threshold: + 2024-01-01: 2 + amount: + 2024-01-01: 2 # PRESCHOOL + - threshold: + 2024-01-01: 6 + amount: + 2024-01-01: 3 # SCHOOL_AGE (FT/PT determined by hours) + +metadata: + type: single_amount + threshold_unit: year + amount_unit: /1 + period: year + label: Delaware Purchase of Care child care age group + reference: + - title: Delaware DSS POC Billing Guidance - Rate Table Age Groups + href: https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=2 diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/age_threshold/child.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/age_threshold/child.yaml new file mode 100644 index 00000000000..f1bd020c289 --- /dev/null +++ b/policyengine_us/parameters/gov/states/de/dss/poc/age_threshold/child.yaml @@ -0,0 +1,11 @@ +description: Delaware limits the Purchase of Care program to children younger than this age. +values: + 2025-10-01: 13 + +metadata: + unit: year + period: year + label: Delaware Purchase of Care child age threshold + reference: + - title: 16 Del. Admin. Code 11003, Section 11003.3 + href: https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11003.shtml diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/age_threshold/disabled_child.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/age_threshold/disabled_child.yaml new file mode 100644 index 00000000000..5df1547617f --- /dev/null +++ b/policyengine_us/parameters/gov/states/de/dss/poc/age_threshold/disabled_child.yaml @@ -0,0 +1,13 @@ +description: Delaware limits the Purchase of Care program to disabled children younger than this age. +values: + 2025-10-01: 19 + +metadata: + unit: year + period: year + label: Delaware Purchase of Care disabled child age threshold + reference: + - title: 16 Del. Admin. Code 11003, Section 11003.3 + href: https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11003.shtml + - title: Delaware DSS Provider Handbook, Section C - Eligibility Requirements + href: https://www.dhss.delaware.gov/dhss/dss/files/pocprovhndbk.pdf#page=14 diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/copay/excess_burden_fpl_rate.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/copay/excess_burden_fpl_rate.yaml new file mode 100644 index 00000000000..c511c164eda --- /dev/null +++ b/policyengine_us/parameters/gov/states/de/dss/poc/copay/excess_burden_fpl_rate.yaml @@ -0,0 +1,13 @@ +description: Delaware waives the copayment for families below this share of the federal poverty level due to excessive financial burden under the Purchase of Care program. +values: + 2025-10-01: 0.4 + +metadata: + unit: /1 + period: year + label: Delaware Purchase of Care excessive burden copayment waiver FPL rate + reference: + - title: 16 Del. Admin. Code 11004, Section 11004.7.1 + href: https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11004.shtml + - title: Delaware DSS Child Care Services - Income Eligibility Table + href: https://dhss.delaware.gov/dss/childcr/ diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/copay/rate.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/copay/rate.yaml new file mode 100644 index 00000000000..d3ebad39038 --- /dev/null +++ b/policyengine_us/parameters/gov/states/de/dss/poc/copay/rate.yaml @@ -0,0 +1,14 @@ +description: Delaware sets this share as the copayment rate under the Purchase of Care program. +values: + # Effective July 1, 2024 + 2024-01-01: 0.07 + +metadata: + unit: /1 + period: year + label: Delaware Purchase of Care copayment rate + reference: + - title: 16 Del. Admin. Code 11004, Section 11004.7 + href: https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11004.shtml + - title: Delaware DSS POC Billing Guidance - Copayment + href: https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=3 diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/copay/waiver_fpl_rate.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/copay/waiver_fpl_rate.yaml new file mode 100644 index 00000000000..84833c8879c --- /dev/null +++ b/policyengine_us/parameters/gov/states/de/dss/poc/copay/waiver_fpl_rate.yaml @@ -0,0 +1,14 @@ +description: Delaware waives the copayment for families at or below this share of the federal poverty level under the Purchase of Care program. +values: + # Effective July 1, 2024 + 2024-01-01: 1.5 + +metadata: + unit: /1 + period: year + label: Delaware Purchase of Care copayment waiver FPL rate + reference: + - title: Delaware DSS POC Billing Guidance - Copayment Waiver + href: https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=3 + - title: Delaware DSS Child Care Services - Income Eligibility Table + href: https://dhss.delaware.gov/dss/childcr/ diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/full_time_hours_per_day.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/full_time_hours_per_day.yaml new file mode 100644 index 00000000000..735d6a7b637 --- /dev/null +++ b/policyengine_us/parameters/gov/states/de/dss/poc/full_time_hours_per_day.yaml @@ -0,0 +1,12 @@ +description: Delaware sets this amount as the minimum daily hours for full-time child care authorization under the Purchase of Care program. +values: + # Effective July 1, 2024 + 2024-01-01: 4 + +metadata: + unit: hour + period: year + label: Delaware Purchase of Care full-time minimum daily hours + reference: + - title: Delaware DSS Provider Handbook, Section D - Authorization Types + href: https://www.dhss.delaware.gov/dhss/dss/files/pocprovhndbk.pdf#page=24 diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/income/countable_income/sources.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/income/countable_income/sources.yaml new file mode 100644 index 00000000000..69ac065a086 --- /dev/null +++ b/policyengine_us/parameters/gov/states/de/dss/poc/income/countable_income/sources.yaml @@ -0,0 +1,35 @@ +description: Delaware counts these income sources under the Purchase of Care program. +values: + 2025-10-01: + - employment_income + - self_employment_income + - social_security_retirement + - social_security_disability + - social_security_survivors + - ssi + - dividend_income + - interest_income + - rental_income + - pension_income + - veterans_benefits + - military_retirement_pay + - unemployment_compensation + - workers_compensation + - alimony_income + - child_support_received + # The following are counted per DSSM 11003.9.1(4) but have no + # matching variables: + # - adoption_subsidy + # - strike_benefits + # - royalties + # - foster_care_payments (when child is in the assistance unit) + +metadata: + unit: list + period: year + label: Delaware Purchase of Care countable income sources + reference: + - title: 16 Del. Admin. Code 11003, Section 11003.9.1(4) + href: https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11003.shtml + - title: 24 Del. Reg. 704, Section 11003.9.1(4) + href: https://regulations.delaware.gov/register/january2021/final/24%20DE%20Reg%20704%2001-01-21.htm diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml new file mode 100644 index 00000000000..44cfeb1f2a9 --- /dev/null +++ b/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml @@ -0,0 +1,13 @@ +description: Delaware limits the Purchase of Care program to new applicants with income at or below this share of the federal poverty level. +values: + 2025-10-01: 1.85 + +metadata: + unit: /1 + period: year + label: Delaware Purchase of Care initial eligibility FPL rate + reference: + - title: 16 Del. Admin. Code 11003, Section 11003.9.1(4.B) + href: https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11003.shtml + - title: Delaware DSS Child Care Services - Income Eligibility Table + href: https://dhss.delaware.gov/dss/childcr/ diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml new file mode 100644 index 00000000000..d44220a9c56 --- /dev/null +++ b/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml @@ -0,0 +1,13 @@ +description: Delaware limits the Purchase of Care program to enrolled families with income at or below this share of the federal poverty level at redetermination. +values: + 2025-10-01: 2 + +metadata: + unit: /1 + period: year + label: Delaware Purchase of Care redetermination FPL rate + reference: + - title: 16 Del. Admin. Code 11004, Section 11004.13 + href: https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11004.shtml + - title: Delaware DSS Child Care Services - Income Eligibility Table + href: https://dhss.delaware.gov/dss/childcr/ diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/income/smi_rate.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/income/smi_rate.yaml new file mode 100644 index 00000000000..b7f845b1b0c --- /dev/null +++ b/policyengine_us/parameters/gov/states/de/dss/poc/income/smi_rate.yaml @@ -0,0 +1,13 @@ +description: Delaware limits the Purchase of Care program to families with income at or below this share of the state median income. +values: + 2025-10-01: 0.85 + +metadata: + unit: /1 + period: year + label: Delaware Purchase of Care state median income rate + reference: + - title: 45 CFR 98.20(a)(2)(i) + href: https://www.ecfr.gov/current/title-45/section-98.20 + - title: Delaware DSS Child Care Services - Income Eligibility Table + href: https://dhss.delaware.gov/dss/childcr/ diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/rates/center.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/rates/center.yaml new file mode 100644 index 00000000000..c90dad43ef4 --- /dev/null +++ b/policyengine_us/parameters/gov/states/de/dss/poc/rates/center.yaml @@ -0,0 +1,28 @@ +description: Delaware provides these weekly reimbursement rates for child care centers under the Purchase of Care program. +metadata: + period: week + unit: currency-USD + label: Delaware Purchase of Care center weekly rates + breakdown: + - de_poc_age_group + reference: + - title: Delaware DSS POC Billing Guidance - Statewide Rates + href: https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=2 + - title: Delaware DSS Child Care Services - Provider Rates + href: https://dhss.delaware.gov/dss/childcr/ + +# Effective July 1, 2024 +INFANT: + 2024-01-01: 325 + +TODDLER: + 2024-01-01: 290 + +PRESCHOOL: + 2024-01-01: 255 + +SCHOOL_AGE_FULL_TIME: + 2024-01-01: 190 + +SCHOOL_AGE_PART_TIME: + 2024-01-01: 135 diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/rates/family_home.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/rates/family_home.yaml new file mode 100644 index 00000000000..f944ecf7fc3 --- /dev/null +++ b/policyengine_us/parameters/gov/states/de/dss/poc/rates/family_home.yaml @@ -0,0 +1,28 @@ +description: Delaware provides these weekly reimbursement rates for family home child care under the Purchase of Care program. +metadata: + period: week + unit: currency-USD + label: Delaware Purchase of Care family home weekly rates + breakdown: + - de_poc_age_group + reference: + - title: Delaware DSS POC Billing Guidance - Statewide Rates + href: https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=2 + - title: Delaware DSS Child Care Services - Provider Rates + href: https://dhss.delaware.gov/dss/childcr/ + +# Effective July 1, 2024 +INFANT: + 2024-01-01: 222.5 + +TODDLER: + 2024-01-01: 200 + +PRESCHOOL: + 2024-01-01: 200 + +SCHOOL_AGE_FULL_TIME: + 2024-01-01: 160 + +SCHOOL_AGE_PART_TIME: + 2024-01-01: 100 diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/rates/special_needs_rate_increase.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/rates/special_needs_rate_increase.yaml new file mode 100644 index 00000000000..663679ae250 --- /dev/null +++ b/policyengine_us/parameters/gov/states/de/dss/poc/rates/special_needs_rate_increase.yaml @@ -0,0 +1,12 @@ +description: Delaware provides this additional rate increase for special needs children under the Purchase of Care program. +values: + # Effective July 1, 2024 + 2024-01-01: 0.05 + +metadata: + unit: /1 + period: year + label: Delaware Purchase of Care special needs rate increase + reference: + - title: Delaware DSS POC Billing Guidance - Special Needs Rates + href: https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=2 diff --git a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc.yaml b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc.yaml new file mode 100644 index 00000000000..344ab0603b0 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc.yaml @@ -0,0 +1,227 @@ +# de_poc: SPMUnit, float, MONTH +# Benefit = min(actual_expenses - copay, max_reimbursement), floored at 0 +# max_reimbursement = sum of weekly rates for eligible children * 52 / 12 + +- name: Case 1, basic eligible family with center care. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 36_000 + immigration_status: CITIZEN + person2: + age: 4 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 8 + de_poc_provider_type: CENTER + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 12_000 + households: + household: + members: [person1, person2] + state_code: DE + output: + # Copay: 36_000 / 21_150 = 1.7021 > 1.5 -> 7% copay + # Annual copay = 36_000 * 0.07 = 2_520 + # Max weekly = $255 (center preschool), annual = 255 * 52 = 13_260 + # Uncapped = max(12_000 - 2_520, 0) = 9_480 + # Annual benefit = min(9_480, 13_260) = 9_480 + # Monthly = 9_480 / 12 = 790 + de_poc: 790 + +- name: Case 2, ineligible family gets zero. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 48_000 + immigration_status: CITIZEN + person2: + age: 4 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 8 + de_poc_provider_type: CENTER + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 12_000 + households: + household: + members: [person1, person2] + state_code: DE + output: + # Income 48_000 / 12 = 4_000 > 185% FPL of 3_260.63 -> ineligible + de_poc: 0 + +- name: Case 3, benefit capped at max reimbursement. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 20_000 + immigration_status: CITIZEN + person2: + age: 0 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 8 + de_poc_provider_type: CENTER + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 25_000 + households: + household: + members: [person1, person2] + state_code: DE + output: + # FPL ratio = 20_000 / 21_150 = 0.9456 <= 1.5 -> copay waived + # Max weekly = $325 (center infant), annual = 325 * 52 = 16_900 + # Uncapped = max(25_000 - 0, 0) = 25_000 + # Annual benefit = min(25_000, 16_900) = 16_900 + # Monthly = 16_900 / 12 = 1_408.33 + de_poc: 1_408.33 + +- name: Case 4, zero childcare expenses gives zero benefit. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 24_000 + immigration_status: CITIZEN + person2: + age: 4 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 8 + de_poc_provider_type: CENTER + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 0 + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc: 0 + +- name: Case 5, copay exceeds expenses gives zero benefit. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 36_000 + immigration_status: CITIZEN + person2: + age: 10 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 3 + de_poc_provider_type: FAMILY_HOME + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 2_000 + households: + household: + members: [person1, person2] + state_code: DE + output: + # Annual copay = 36_000 * 0.07 = 2_520 + # Uncapped = max(2_000 - 2_520, 0) = 0 + de_poc: 0 + +- name: Case 6, negative income does not inflate benefit. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 1_200 + self_employment_income: -60_000_000 + immigration_status: CITIZEN + person2: + age: 4 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 8 + de_poc_provider_type: CENTER + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 10_000 + households: + household: + members: [person1, person2] + state_code: DE + output: + # Negative income -> copay 0 (waived below 150% FPL) + # Max weekly = $255 (center preschool), annual = 255 * 52 = 13_260 + # Uncapped = max(10_000 - 0, 0) = 10_000 + # Annual benefit = min(10_000, 13_260) = 10_000 + # Monthly = 10_000 / 12 = 833.33 + # Benefit capped at max, not inflated by negative income + de_poc: 833.33 + +- name: Case 7, non-DE household gets zero. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 24_000 + immigration_status: CITIZEN + person2: + age: 4 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 8 + de_poc_provider_type: CENTER + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 12_000 + households: + household: + members: [person1, person2] + state_code: PA + output: + de_poc: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_activity_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_activity_eligible.yaml new file mode 100644 index 00000000000..a7e1d4d538f --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_activity_eligible.yaml @@ -0,0 +1,106 @@ +# de_poc_activity_eligible: SPMUnit, bool, MONTH +# At least one parent/caretaker must be in an approved activity: +# employment (employment_income > 0) OR full-time student +# DE does not specify minimum work hours - any employment qualifies + +- name: Case 1, employed parent is activity eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + employment_income: 24_000 + person2: + age: 4 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_activity_eligible: true + +- name: Case 2, full-time student parent is activity eligible. + period: 2025-01 + input: + people: + person1: + age: 25 + is_full_time_student: true + person2: + age: 2 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_activity_eligible: true + +- name: Case 3, unemployed non-student parent is not activity eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + employment_income: 0 + is_full_time_student: false + person2: + age: 4 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_activity_eligible: false + +- name: Case 4, two-parent family where one parent works. + period: 2025-01 + input: + people: + person1: + age: 35 + employment_income: 30_000 + is_full_time_student: false + person2: + age: 33 + employment_income: 0 + is_full_time_student: false + person3: + age: 3 + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: DE + output: + # At least one parent has employment_income > 0 + de_poc_activity_eligible: true + +- name: Case 5, self-employed parent counts as activity eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + self_employment_income: 18_000 + person2: + age: 4 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_activity_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_age_group.yaml b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_age_group.yaml new file mode 100644 index 00000000000..8c5b7e7174e --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_age_group.yaml @@ -0,0 +1,140 @@ +# de_poc_age_group: Person, Enum, MONTH +# Maps child age and hours to age group for rate lookup: +# age < 1 -> INFANT +# age < 2 -> TODDLER +# age < 6 -> PRESCHOOL +# age >= 6, hours/day >= 4 -> SCHOOL_AGE_FULL_TIME +# age >= 6, hours/day < 4 -> SCHOOL_AGE_PART_TIME + +- name: Case 1, infant age 0. + period: 2025-01 + input: + people: + person1: + age: 30 + person2: + age: 0 + childcare_hours_per_day: 8 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_age_group: [SCHOOL_AGE_PART_TIME, INFANT] + +- name: Case 2, toddler age 1. + period: 2025-01 + input: + people: + person1: + age: 30 + person2: + age: 1 + childcare_hours_per_day: 8 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_age_group: [SCHOOL_AGE_PART_TIME, TODDLER] + +- name: Case 3, preschool age 3. + period: 2025-01 + input: + people: + person1: + age: 30 + person2: + age: 3 + childcare_hours_per_day: 8 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_age_group: [SCHOOL_AGE_PART_TIME, PRESCHOOL] + +- name: Case 4, preschool age 5 at upper boundary. + period: 2025-01 + input: + people: + person1: + age: 30 + person2: + age: 5 + childcare_hours_per_day: 8 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_age_group: [SCHOOL_AGE_PART_TIME, PRESCHOOL] + +- name: Case 5, school age full-time at 4 or more hours per day. + period: 2025-01 + input: + people: + person1: + age: 30 + person2: + age: 7 + childcare_hours_per_day: 6 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_age_group: [SCHOOL_AGE_PART_TIME, SCHOOL_AGE_FULL_TIME] + +- name: Case 6, school age part-time at fewer than 4 hours per day. + period: 2025-01 + input: + people: + person1: + age: 30 + person2: + age: 8 + childcare_hours_per_day: 3 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_age_group: [SCHOOL_AGE_PART_TIME, SCHOOL_AGE_PART_TIME] + +- name: Case 7, school age at exactly 4 hours per day is full-time. + period: 2025-01 + input: + people: + person1: + age: 30 + person2: + age: 6 + childcare_hours_per_day: 4 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_age_group: [SCHOOL_AGE_PART_TIME, SCHOOL_AGE_FULL_TIME] diff --git a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_copay.yaml b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_copay.yaml new file mode 100644 index 00000000000..eb83c397806 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_copay.yaml @@ -0,0 +1,113 @@ +# de_poc_copay: SPMUnit, float, MONTH +# Copay = 7% of gross monthly income per family +# Waived at/below 150% FPL (waiver_fpl_rate = 1.5) +# Also waived below 40% FPL (excess burden), but 40% < 150% so 150% covers it +# +# 2025 FPG family of 2: 21_150/yr +# 150% FPL family of 2: 21_150 * 1.5 = 31_725/yr = 2_643.75/mo + +- name: Case 1, income above 150% FPL pays 7% copay. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 36_000 + person2: + age: 4 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + # Monthly income: 36_000 / 12 = 3_000 + # FPL ratio = 36_000 / 21_150 = 1.7021 > 1.5 -> copay applies + # Copay = 3_000 * 0.07 = 210 + de_poc_copay: 210 + +- name: Case 2, income at 150% FPL has waived copay. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 31_725 + person2: + age: 4 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + # FPL ratio = 31_725 / 21_150 = 1.5 -> at threshold, waived + de_poc_copay: 0 + +- name: Case 3, income below 150% FPL has waived copay. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 24_000 + person2: + age: 4 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + # FPL ratio = 24_000 / 21_150 = 1.1348 <= 1.5 -> waived + de_poc_copay: 0 + +- name: Case 4, zero income has zero copay. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + person2: + age: 4 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_copay: 0 + +- name: Case 5, income below 40% FPL has excess burden waiver. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 6_000 + person2: + age: 4 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + # FPL ratio = 6_000 / 21_150 = 0.2837 < 0.40 -> excess burden waiver + # Also < 1.5 so covered by both waivers + de_poc_copay: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_eligible.yaml new file mode 100644 index 00000000000..ed3876c6250 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_eligible.yaml @@ -0,0 +1,134 @@ +# de_poc_eligible: SPMUnit, bool, MONTH +# Eligible if: has at least one eligible child AND income eligible +# AND asset eligible AND activity eligible + +- name: Case 1, basic eligible family. + period: 2025-01 + input: + people: + person1: + age: 30 + employment_income: 24_000 + immigration_status: CITIZEN + person2: + age: 4 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_eligible: true + +- name: Case 2, income too high for new applicant. + period: 2025-01 + input: + people: + person1: + age: 30 + employment_income: 48_000 + immigration_status: CITIZEN + person2: + age: 4 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + # 48_000 / 12 = 4_000 > 185% FPL of 3_260.63 + de_poc_eligible: false + +- name: Case 3, no eligible children. + period: 2025-01 + input: + people: + person1: + age: 30 + employment_income: 24_000 + immigration_status: CITIZEN + person2: + age: 14 + is_tax_unit_dependent: true + immigration_status: CITIZEN + is_disabled: false + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + # Child age 14, not disabled -> ineligible child + de_poc_eligible: false + +- name: Case 4, no activity eligible parent. + period: 2025-01 + input: + people: + person1: + age: 30 + employment_income: 0 + is_full_time_student: false + immigration_status: CITIZEN + person2: + age: 4 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_eligible: false + +- name: Case 5, enrolled family within 200% FPL. + period: 2025-01 + input: + people: + person1: + age: 30 + employment_income: 42_000 + immigration_status: CITIZEN + person2: + age: 4 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + de_poc_enrolled: true + households: + household: + members: [person1, person2] + state_code: DE + output: + # 42_000 / 12 = 3_500 <= 200% FPL 3_525 -> eligible + de_poc_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_eligible_child.yaml b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_eligible_child.yaml new file mode 100644 index 00000000000..ec4c480e320 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_eligible_child.yaml @@ -0,0 +1,192 @@ +# de_poc_eligible_child: Person, bool, MONTH +# Eligible if: (age < 13) OR (disabled AND age < 19), +# AND is_tax_unit_dependent, AND is_ccdf_immigration_eligible_child +# Parameters: age_threshold.child = 13, age_threshold.disabled_child = 19 + +- name: Case 1, young child who is a dependent citizen. + period: 2025-01 + input: + people: + person1: + age: 30 + person2: + age: 4 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_eligible_child: [false, true] + +- name: Case 2, child at age boundary of 12. + period: 2025-01 + input: + people: + person1: + age: 35 + person2: + age: 12 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_eligible_child: [false, true] + +- name: Case 3, child at age 13 without disability is ineligible. + period: 2025-01 + input: + people: + person1: + age: 40 + person2: + age: 13 + is_tax_unit_dependent: true + immigration_status: CITIZEN + is_disabled: false + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_eligible_child: [false, false] + +- name: Case 4, disabled child age 15 is eligible. + period: 2025-01 + input: + people: + person1: + age: 45 + person2: + age: 15 + is_tax_unit_dependent: true + immigration_status: CITIZEN + is_disabled: true + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_eligible_child: [false, true] + +- name: Case 5, disabled child at age 18 is eligible. + period: 2025-01 + input: + people: + person1: + age: 50 + person2: + age: 18 + is_tax_unit_dependent: true + immigration_status: CITIZEN + is_disabled: true + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_eligible_child: [false, true] + +- name: Case 6, disabled child at age 19 is ineligible. + period: 2025-01 + input: + people: + person1: + age: 50 + person2: + age: 19 + is_tax_unit_dependent: true + immigration_status: CITIZEN + is_disabled: true + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_eligible_child: [false, false] + +- name: Case 7, child who is not a dependent is ineligible. + period: 2025-01 + input: + people: + person1: + age: 35 + person2: + age: 5 + is_tax_unit_dependent: false + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_eligible_child: [false, false] + +- name: Case 8, non-DE household child gets false. + period: 2025-01 + input: + people: + person1: + age: 30 + person2: + age: 4 + is_tax_unit_dependent: true + immigration_status: CITIZEN + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: PA + output: + de_poc_eligible_child: [false, false] diff --git a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_income_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_income_eligible.yaml new file mode 100644 index 00000000000..42c54d76945 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_income_eligible.yaml @@ -0,0 +1,150 @@ +# de_poc_income_eligible: SPMUnit, bool, MONTH +# Income eligible if countable_income <= min(fpl_threshold, 85% SMI) +# New applicants: 185% FPL; Enrolled: 200% FPL; Hard cap: 85% SMI +# +# 2025 FPG (Contiguous US): first_person = 15_650, additional = 5_500 +# Family of 2: 21_150/yr +# Family of 4: 32_150/yr +# +# SMI for DE (4-person, 2024-10-01): 120_963 +# Size adjustments: first=0.52, 2nd-6th=0.16 +# Family of 2 SMI: 120_963 * 0.68 = 82_254.84 +# Family of 4 SMI: 120_963 * 1.00 = 120_963.00 +# +# 85% SMI: +# Family of 2: 82_254.84 * 0.85 = 69_916.61 +# Family of 4: 120_963 * 0.85 = 102_818.55 + +- name: Case 1, new applicant below 185% FPL. + period: 2025-01 + input: + people: + person1: + age: 30 + employment_income: 36_000 + person2: + age: 4 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + # Monthly income: 36_000 / 12 = 3_000 + # 185% FPL family of 2: 21_150 * 1.85 / 12 = 3_260.63 + # 85% SMI family of 2: 69_916.61 / 12 = 5_826.38 + # Limit = min(3_260.63, 5_826.38) = 3_260.63 + # 3_000 <= 3_260.63 -> eligible + de_poc_income_eligible: true + +- name: Case 2, new applicant above 185% FPL. + period: 2025-01 + input: + people: + person1: + age: 30 + employment_income: 42_000 + person2: + age: 4 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + # Monthly income: 42_000 / 12 = 3_500 + # 185% FPL family of 2: 3_260.63 + # 3_500 > 3_260.63 -> ineligible (not enrolled) + de_poc_income_eligible: false + +- name: Case 3, enrolled family below 200% FPL. + period: 2025-01 + input: + people: + person1: + age: 30 + employment_income: 42_000 + person2: + age: 4 + spm_units: + spm_unit: + members: [person1, person2] + de_poc_enrolled: true + households: + household: + members: [person1, person2] + state_code: DE + output: + # Monthly income: 42_000 / 12 = 3_500 + # 200% FPL family of 2: 21_150 * 2.0 / 12 = 3_525.00 + # 85% SMI family of 2: 5_826.38 + # Limit = min(3_525.00, 5_826.38) = 3_525.00 + # 3_500 <= 3_525.00 -> eligible + de_poc_income_eligible: true + +- name: Case 4, enrolled family above 200% FPL. + period: 2025-01 + input: + people: + person1: + age: 30 + employment_income: 48_000 + person2: + age: 4 + spm_units: + spm_unit: + members: [person1, person2] + de_poc_enrolled: true + households: + household: + members: [person1, person2] + state_code: DE + output: + # Monthly income: 48_000 / 12 = 4_000 + # 200% FPL family of 2: 3_525.00 + # 4_000 > 3_525.00 -> ineligible + de_poc_income_eligible: false + +- name: Case 5, income at exact 185% FPL threshold for new applicant. + period: 2025-01 + input: + people: + person1: + age: 30 + employment_income: 39_127.50 + person2: + age: 4 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + # Monthly income: 39_127.50 / 12 = 3_260.625 + # 185% FPL family of 2: 21_150 * 1.85 / 12 = 3_260.625 + # At threshold -> eligible (<=) + de_poc_income_eligible: true + +- name: Case 6, zero income is eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + person2: + age: 4 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + de_poc_income_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_maximum_weekly_benefit.yaml b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_maximum_weekly_benefit.yaml new file mode 100644 index 00000000000..17c16fa25d0 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_maximum_weekly_benefit.yaml @@ -0,0 +1,228 @@ +# de_poc_maximum_weekly_benefit: Person, float, MONTH +# Looks up weekly rate from rate table by provider type and age group +# For disabled children, applies 5% special needs rate increase +# +# Weekly rates (2024): +# Center: INFANT=$325, TODDLER=$290, PRESCHOOL=$255, +# SCHOOL_AGE_FT=$190, SCHOOL_AGE_PT=$135 +# Family Home: INFANT=$222.50, TODDLER=$200, PRESCHOOL=$200, +# SCHOOL_AGE_FT=$160, SCHOOL_AGE_PT=$100 + +- name: Case 1, center infant rate. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + person2: + age: 0 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 8 + de_poc_provider_type: CENTER + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + # Center INFANT weekly rate = $325.00 + de_poc_maximum_weekly_benefit: [0, 325] + +- name: Case 2, family home toddler rate. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + person2: + age: 1 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 8 + de_poc_provider_type: FAMILY_HOME + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + # Family Home TODDLER weekly rate = $200.00 + de_poc_maximum_weekly_benefit: [0, 200] + +- name: Case 3, center preschool rate. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + person2: + age: 4 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 8 + de_poc_provider_type: CENTER + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + # Center PRESCHOOL weekly rate = $255.00 + de_poc_maximum_weekly_benefit: [0, 255] + +- name: Case 4, center school age full-time rate. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 6 + de_poc_provider_type: CENTER + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + # Center SCHOOL_AGE_FULL_TIME weekly rate = $190.00 + de_poc_maximum_weekly_benefit: [0, 190] + +- name: Case 5, family home school age part-time rate. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + person2: + age: 10 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 3 + de_poc_provider_type: FAMILY_HOME + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + # Family Home SCHOOL_AGE_PART_TIME weekly rate = $100.00 + de_poc_maximum_weekly_benefit: [0, 100] + +- name: Case 6, disabled child gets 5% special needs rate increase. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + person2: + age: 0 + is_tax_unit_dependent: true + immigration_status: CITIZEN + is_disabled: true + childcare_hours_per_day: 8 + de_poc_provider_type: CENTER + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + # Center INFANT = $325 * 1.05 = $341.25 + de_poc_maximum_weekly_benefit: [0, 341.25] + +- name: Case 7, disabled child family home preschool with special needs increase. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + person2: + age: 3 + is_tax_unit_dependent: true + immigration_status: CITIZEN + is_disabled: true + childcare_hours_per_day: 8 + de_poc_provider_type: FAMILY_HOME + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + # Family Home PRESCHOOL = $200 * 1.05 = $210.00 + de_poc_maximum_weekly_benefit: [0, 210] + +- name: Case 8, ineligible child gets zero weekly benefit. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + person2: + age: 14 + is_tax_unit_dependent: true + immigration_status: CITIZEN + is_disabled: false + childcare_hours_per_day: 6 + de_poc_provider_type: CENTER + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: DE + output: + # Age 14, not disabled -> not eligible child -> 0 + de_poc_maximum_weekly_benefit: [0, 0] diff --git a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/integration.yaml new file mode 100644 index 00000000000..452001f4610 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/integration.yaml @@ -0,0 +1,478 @@ +# DE POC Integration Tests +# +# 2025 FPG (Contiguous US): +# first_person = 15_650, additional = 5_500 +# Family of 2: 21_150 +# Family of 3: 26_650 +# Family of 4: 32_150 +# +# DE SMI (4-person, 2024-10-01): 120_963 +# Size adjustments: first=0.52, 2nd-6th=0.16 +# Family of 2: 120_963 * 0.68 = 82_254.84 +# 85% SMI family of 2: 82_254.84 * 0.85 = 69_916.61 +# +# Weekly rates: +# Center: INFANT=$325, TODDLER=$290, PRESCHOOL=$255, +# SA_FT=$190, SA_PT=$135 +# Family Home: INFANT=$222.50, TODDLER=$200, PRESCHOOL=$200, +# SA_FT=$160, SA_PT=$100 +# Special needs: base * 1.05 + +- name: Case 1, basic eligible new applicant with center care. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 36_000 + immigration_status: CITIZEN + person2: + age: 4 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 8 + de_poc_provider_type: CENTER + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 12_000 + households: + household: + members: [person1, person2] + state_code: DE + output: + # === Child Eligibility === + # person2: age 4 < 13, dependent, citizen -> eligible + de_poc_eligible_child: [false, true] + + # === Age Group === + # person1: age 30, no childcare hours -> SCHOOL_AGE_PART_TIME + # person2: age 4, hours/day 8 -> PRESCHOOL + de_poc_age_group: [SCHOOL_AGE_PART_TIME, PRESCHOOL] + + # === Income Eligibility === + # FPG family of 2: 21_150 + # Monthly income: 36_000 / 12 = 3_000 + # 185% FPL: 21_150 * 1.85 / 12 = 3_260.63 + # 85% SMI: 69_916.61 / 12 = 5_826.38 + # Limit = min(3_260.63, 5_826.38) = 3_260.63 + # 3_000 <= 3_260.63 -> eligible + de_poc_income_eligible: true + + # === Asset Eligibility === + # Default assets = 0 <= CCDF limit -> eligible + is_ccdf_asset_eligible: true + + # === Activity Eligibility === + # employment_income 36_000 > 0 -> active + de_poc_activity_eligible: true + + # === Overall Eligibility === + de_poc_eligible: true + + # === Copay === + # FPL ratio = 36_000 / 21_150 = 1.7021 > 1.5 -> copay applies + # Annual copay = 36_000 * 0.07 = 2_520 + # Monthly copay = 2_520 / 12 = 210 + de_poc_copay: 210 + + # === Weekly Rate === + # Center PRESCHOOL = $255/week + de_poc_maximum_weekly_benefit: [0, 255] + + # === Benefit === + # Max annual reimbursement = 255 * 52 = 13_260 + # Uncapped = max(12_000 - 2_520, 0) = 9_480 + # Annual benefit = min(9_480, 13_260) = 9_480 + # Monthly = 9_480 / 12 = 790 + de_poc: 790 + +- name: Case 2, low income family with waived copay and family home care. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 28 + employment_income: 18_000 + immigration_status: CITIZEN + person2: + age: 1 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 8 + de_poc_provider_type: FAMILY_HOME + person3: + age: 4 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 8 + de_poc_provider_type: FAMILY_HOME + tax_units: + tax_unit: + members: [person1, person2, person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + spm_unit_pre_subsidy_childcare_expenses: 18_000 + households: + household: + members: [person1, person2, person3] + state_code: DE + output: + # === Child Eligibility === + de_poc_eligible_child: [false, true, true] + + # === Age Groups === + # person1: age 28, no childcare hours -> SCHOOL_AGE_PART_TIME + # person2: age 1 -> TODDLER; person3: age 4 -> PRESCHOOL + de_poc_age_group: [SCHOOL_AGE_PART_TIME, TODDLER, PRESCHOOL] + + # === Income Eligibility === + # FPG family of 3: 26_650 + # Monthly income: 18_000 / 12 = 1_500 + # 185% FPL: 26_650 * 1.85 / 12 = 4_100.21 + # 1_500 <= 4_100.21 -> eligible + de_poc_income_eligible: true + + is_ccdf_asset_eligible: true + de_poc_activity_eligible: true + de_poc_eligible: true + + # === Copay === + # FPL ratio = 18_000 / 26_650 = 0.6754 <= 1.5 -> waived + de_poc_copay: 0 + + # === Weekly Rates === + # person2: Family Home TODDLER = $200 + # person3: Family Home PRESCHOOL = $200 + de_poc_maximum_weekly_benefit: [0, 200, 200] + + # === Benefit === + # Max annual = (200 + 200) * 52 = 20_800 + # Uncapped = max(18_000 - 0, 0) = 18_000 + # Annual benefit = min(18_000, 20_800) = 18_000 + # Monthly = 18_000 / 12 = 1_500 + de_poc: 1_500 + +- name: Case 3, enrolled family between 185% and 200% FPL. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + employment_income: 42_000 + immigration_status: CITIZEN + person2: + age: 0 + is_tax_unit_dependent: true + immigration_status: LEGAL_PERMANENT_RESIDENT + childcare_hours_per_day: 8 + de_poc_provider_type: CENTER + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + de_poc_enrolled: true + spm_unit_pre_subsidy_childcare_expenses: 15_000 + households: + household: + members: [person1, person2] + state_code: DE + output: + # === Child Eligibility === + # person2: age 0 < 13, dependent, LPR -> immigration eligible + de_poc_eligible_child: [false, true] + + # === Age Group === + # person1: age 35, no childcare hours -> SCHOOL_AGE_PART_TIME + # person2: age 0 -> INFANT + de_poc_age_group: [SCHOOL_AGE_PART_TIME, INFANT] + + # === Income Eligibility === + # FPG family of 2: 21_150 + # Monthly income: 42_000 / 12 = 3_500 + # NOT enrolled: 185% FPL = 3_260.63 -> would fail + # IS enrolled: 200% FPL = 21_150 * 2.0 / 12 = 3_525 + # 85% SMI: 5_826.38 + # Limit = min(3_525, 5_826.38) = 3_525 + # 3_500 <= 3_525 -> eligible + de_poc_income_eligible: true + + is_ccdf_asset_eligible: true + de_poc_activity_eligible: true + de_poc_eligible: true + + # === Copay === + # FPL ratio = 42_000 / 21_150 = 1.9858 > 1.5 -> 7% copay + # Annual copay = 42_000 * 0.07 = 2_940 + # Monthly copay = 2_940 / 12 = 245 + de_poc_copay: 245 + + # === Weekly Rate === + # Center INFANT = $325 + de_poc_maximum_weekly_benefit: [0, 325] + + # === Benefit === + # Max annual = 325 * 52 = 16_900 + # Uncapped = max(15_000 - 2_940, 0) = 12_060 + # Annual benefit = min(12_060, 16_900) = 12_060 + # Monthly = 12_060 / 12 = 1_005 + de_poc: 1_005 + +- name: Case 4, disabled teenager in family home care with special needs rate. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 45 + employment_income: 30_000 + immigration_status: CITIZEN + person2: + age: 15 + is_tax_unit_dependent: true + immigration_status: CITIZEN + is_disabled: true + childcare_hours_per_day: 6 + de_poc_provider_type: FAMILY_HOME + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 8_000 + households: + household: + members: [person1, person2] + state_code: DE + output: + # === Child Eligibility === + # person2: age 15 < 19 (disabled threshold), dependent, citizen -> eligible + de_poc_eligible_child: [false, true] + + # === Age Group === + # person1: age 45, no childcare hours -> SCHOOL_AGE_PART_TIME + # person2: age 15 >= 6, hours/day 6 >= 4 -> SCHOOL_AGE_FULL_TIME + de_poc_age_group: [SCHOOL_AGE_PART_TIME, SCHOOL_AGE_FULL_TIME] + + # === Income Eligibility === + # FPG family of 2: 21_150 + # Monthly income: 30_000 / 12 = 2_500 + # 185% FPL: 3_260.63 + # 2_500 <= 3_260.63 -> eligible + de_poc_income_eligible: true + + is_ccdf_asset_eligible: true + de_poc_activity_eligible: true + de_poc_eligible: true + + # === Copay === + # FPL ratio = 30_000 / 21_150 = 1.4184 <= 1.5 -> waived + de_poc_copay: 0 + + # === Weekly Rate === + # Family Home SCHOOL_AGE_FT = $160 * 1.05 (special needs) = $168 + de_poc_maximum_weekly_benefit: [0, 168] + + # === Benefit === + # Max annual = 168 * 52 = 8_736 + # Uncapped = max(8_000 - 0, 0) = 8_000 + # Annual benefit = min(8_000, 8_736) = 8_000 + # Monthly = 8_000 / 12 = 666.67 + de_poc: 666.67 + +- name: Case 5, two children with different provider types and age groups. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 32 + employment_income: 30_000 + immigration_status: CITIZEN + person2: + age: 0 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 8 + de_poc_provider_type: CENTER + person3: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 3 + de_poc_provider_type: FAMILY_HOME + tax_units: + tax_unit: + members: [person1, person2, person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + spm_unit_pre_subsidy_childcare_expenses: 16_000 + households: + household: + members: [person1, person2, person3] + state_code: DE + output: + # === Child Eligibility === + de_poc_eligible_child: [false, true, true] + + # === Age Groups === + # person1: age 32, no childcare hours -> SCHOOL_AGE_PART_TIME + # person2: age 0 -> INFANT + # person3: age 8 >= 6, hours/day 3 < 4 -> SCHOOL_AGE_PART_TIME + de_poc_age_group: [SCHOOL_AGE_PART_TIME, INFANT, SCHOOL_AGE_PART_TIME] + + # === Income Eligibility === + # FPG family of 3: 26_650 + # Monthly income: 30_000 / 12 = 2_500 + # 185% FPL: 26_650 * 1.85 / 12 = 4_100.21 + # 2_500 <= 4_100.21 -> eligible + de_poc_income_eligible: true + + is_ccdf_asset_eligible: true + de_poc_activity_eligible: true + de_poc_eligible: true + + # === Copay === + # FPL ratio = 30_000 / 26_650 = 1.1257 <= 1.5 -> waived + de_poc_copay: 0 + + # === Weekly Rates === + # person2: Center INFANT = $325 + # person3: Family Home SCHOOL_AGE_PT = $100 + de_poc_maximum_weekly_benefit: [0, 325, 100] + + # === Benefit === + # Max annual = (325 + 100) * 52 = 22_100 + # Uncapped = max(16_000 - 0, 0) = 16_000 + # Annual benefit = min(16_000, 22_100) = 16_000 + # Monthly = 16_000 / 12 = 1_333.33 + de_poc: 1_333.33 + +- name: Case 6, enrolled family just above 185% FPL but within 200% FPL. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 40_000 + immigration_status: CITIZEN + person2: + age: 30 + employment_income: 0 + is_full_time_student: true + immigration_status: CITIZEN + person3: + age: 3 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 8 + de_poc_provider_type: CENTER + person4: + age: 1 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 8 + de_poc_provider_type: CENTER + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + de_poc_enrolled: true + spm_unit_pre_subsidy_childcare_expenses: 30_000 + households: + household: + members: [person1, person2, person3, person4] + state_code: DE + output: + # === Child Eligibility === + de_poc_eligible_child: [false, false, true, true] + + # === Age Groups === + # person1: age 30, no childcare hours -> SCHOOL_AGE_PART_TIME + # person2: age 30, no childcare hours -> SCHOOL_AGE_PART_TIME + # person3: age 3 -> PRESCHOOL + # person4: age 1 -> TODDLER + de_poc_age_group: [SCHOOL_AGE_PART_TIME, SCHOOL_AGE_PART_TIME, PRESCHOOL, TODDLER] + + # === Income Eligibility === + # FPG family of 4: 32_150 + # Monthly income: 40_000 / 12 = 3_333.33 + # Enrolled: 200% FPL = 32_150 * 2.0 / 12 = 5_358.33 + # 85% SMI family of 4: 120_963 * 0.85 / 12 = 8_568.21 + # Limit = min(5_358.33, 8_568.21) = 5_358.33 + # 3_333.33 <= 5_358.33 -> eligible + de_poc_income_eligible: true + + is_ccdf_asset_eligible: true + # person1 has employment_income > 0 OR person2 is student + de_poc_activity_eligible: true + de_poc_eligible: true + + # === Copay === + # FPL ratio = 40_000 / 32_150 = 1.2442 <= 1.5 -> waived + de_poc_copay: 0 + + # === Weekly Rates === + # person3: Center PRESCHOOL = $255 + # person4: Center TODDLER = $290 + de_poc_maximum_weekly_benefit: [0, 0, 255, 290] + + # === Benefit === + # Max annual = (255 + 290) * 52 = 28_340 + # Uncapped = max(30_000 - 0, 0) = 30_000 + # Annual benefit = min(30_000, 28_340) = 28_340 + # Monthly = 28_340 / 12 = 2_361.67 + de_poc: 2_361.67 + +- name: Case 7, new applicant above 185% FPL is ineligible while enrolled would be eligible. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + employment_income: 40_000 + immigration_status: CITIZEN + person2: + age: 2 + is_tax_unit_dependent: true + immigration_status: CITIZEN + childcare_hours_per_day: 8 + de_poc_provider_type: CENTER + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 12_000 + households: + household: + members: [person1, person2] + state_code: DE + output: + # === Income Eligibility === + # FPG family of 2: 21_150 + # Monthly income: 40_000 / 12 = 3_333.33 + # New applicant: 185% FPL = 21_150 * 1.85 / 12 = 3_260.63 + # 3_333.33 > 3_260.63 -> INELIGIBLE as new applicant + de_poc_income_eligible: false + + de_poc_eligible: false + + # Benefit = 0 due to ineligibility + de_poc: 0 diff --git a/policyengine_us/variables/gov/states/de/dss/poc/de_child_care_subsidies.py b/policyengine_us/variables/gov/states/de/dss/poc/de_child_care_subsidies.py new file mode 100644 index 00000000000..407f1e68a26 --- /dev/null +++ b/policyengine_us/variables/gov/states/de/dss/poc/de_child_care_subsidies.py @@ -0,0 +1,11 @@ +from policyengine_us.model_api import * + + +class de_child_care_subsidies(Variable): + value_type = float + entity = SPMUnit + label = "Delaware child care subsidies" + unit = USD + definition_period = YEAR + defined_for = StateCode.DE + adds = ["de_poc"] diff --git a/policyengine_us/variables/gov/states/de/dss/poc/de_poc.py b/policyengine_us/variables/gov/states/de/dss/poc/de_poc.py new file mode 100644 index 00000000000..6efee3c3b04 --- /dev/null +++ b/policyengine_us/variables/gov/states/de/dss/poc/de_poc.py @@ -0,0 +1,28 @@ +from policyengine_us.model_api import * + + +class de_poc(Variable): + value_type = float + entity = SPMUnit + unit = USD + label = "Delaware Purchase of Care benefit amount" + definition_period = MONTH + defined_for = "de_poc_eligible" + reference = ( + "https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11004.shtml", + "https://www.dhss.delaware.gov/dhss/dss/childcare.html", + ) + + def formula(spm_unit, period, parameters): + copay = spm_unit("de_poc_copay", period) + maximum_weekly_benefit = add( + spm_unit, period, ["de_poc_maximum_weekly_benefit"] + ) + maximum_monthly_benefit = maximum_weekly_benefit * ( + WEEKS_IN_YEAR / MONTHS_IN_YEAR + ) + pre_subsidy_childcare_expenses = spm_unit( + "spm_unit_pre_subsidy_childcare_expenses", period + ) + uncapped = max_(pre_subsidy_childcare_expenses - copay, 0) + return min_(uncapped, maximum_monthly_benefit) diff --git a/policyengine_us/variables/gov/states/de/dss/poc/de_poc_age_group.py b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_age_group.py new file mode 100644 index 00000000000..85340c50ee5 --- /dev/null +++ b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_age_group.py @@ -0,0 +1,36 @@ +from policyengine_us.model_api import * + + +class DEPOCAgeGroup(Enum): + INFANT = "Infant" + TODDLER = "Toddler" + PRESCHOOL = "Preschool" + SCHOOL_AGE_FULL_TIME = "School Age Full-time" + SCHOOL_AGE_PART_TIME = "School Age Part-time" + + +class de_poc_age_group(Variable): + value_type = Enum + entity = Person + possible_values = DEPOCAgeGroup + default_value = DEPOCAgeGroup.PRESCHOOL + definition_period = MONTH + label = "Delaware Purchase of Care child care age group" + defined_for = StateCode.DE + reference = ( + "https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=2" + ) + + def formula(person, period, parameters): + p = parameters(period).gov.states.de.dss.poc + age = person("age", period.this_year) + base_group = p.age_group.calc(age) + hours_per_day = person("childcare_hours_per_day", period.this_year) + is_school_age_part_time = (base_group == 3) & ( + hours_per_day < p.full_time_hours_per_day + ) + return where( + is_school_age_part_time, + DEPOCAgeGroup.SCHOOL_AGE_PART_TIME, + base_group, + ) diff --git a/policyengine_us/variables/gov/states/de/dss/poc/de_poc_copay.py b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_copay.py new file mode 100644 index 00000000000..9b43cbf951f --- /dev/null +++ b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_copay.py @@ -0,0 +1,21 @@ +from policyengine_us.model_api import * + + +class de_poc_copay(Variable): + value_type = float + entity = SPMUnit + unit = USD + label = "Delaware Purchase of Care family copayment" + definition_period = MONTH + defined_for = StateCode.DE + reference = ( + "https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11004.shtml", + "https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=3", + ) + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.de.dss.poc.copay + countable_income = spm_unit("de_poc_countable_income", period) + fpg = spm_unit("spm_unit_fpg", period) + fpl_ratio = where(fpg > 0, countable_income / fpg, 0) + return where(fpl_ratio <= p.waiver_fpl_rate, 0, countable_income * p.rate) diff --git a/policyengine_us/variables/gov/states/de/dss/poc/de_poc_countable_income.py b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_countable_income.py new file mode 100644 index 00000000000..95de3028355 --- /dev/null +++ b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_countable_income.py @@ -0,0 +1,13 @@ +from policyengine_us.model_api import * + + +class de_poc_countable_income(Variable): + value_type = float + entity = SPMUnit + label = "Delaware Purchase of Care countable income" + definition_period = MONTH + unit = USD + defined_for = StateCode.DE + reference = "https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11003.shtml" + + adds = "gov.states.de.dss.poc.income.countable_income.sources" diff --git a/policyengine_us/variables/gov/states/de/dss/poc/de_poc_enrolled.py b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_enrolled.py new file mode 100644 index 00000000000..4476ef0af37 --- /dev/null +++ b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_enrolled.py @@ -0,0 +1,9 @@ +from policyengine_us.model_api import * + + +class de_poc_enrolled(Variable): + value_type = bool + entity = SPMUnit + definition_period = MONTH + label = "Whether the family is currently enrolled in Delaware Purchase of Care" + defined_for = StateCode.DE diff --git a/policyengine_us/variables/gov/states/de/dss/poc/de_poc_maximum_weekly_benefit.py b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_maximum_weekly_benefit.py new file mode 100644 index 00000000000..e2ae0abdeee --- /dev/null +++ b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_maximum_weekly_benefit.py @@ -0,0 +1,32 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.states.de.dss.poc.de_poc_provider_type import ( + DEPOCProviderType, +) + + +class de_poc_maximum_weekly_benefit(Variable): + value_type = float + entity = Person + unit = USD + label = "Delaware Purchase of Care maximum weekly benefit per child" + definition_period = MONTH + defined_for = "de_poc_eligible_child" + reference = ( + "https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=2", + "https://www.dhss.delaware.gov/dhss/dss/childcare.html", + ) + + def formula(person, period, parameters): + p = parameters(period).gov.states.de.dss.poc.rates + provider_type = person("de_poc_provider_type", period) + age_group = person("de_poc_age_group", period) + base_rate = where( + provider_type == DEPOCProviderType.CENTER, + p.center[age_group], + p.family_home[age_group], + ) + return where( + person("is_disabled", period.this_year), + base_rate * (1 + p.special_needs_rate_increase), + base_rate, + ) diff --git a/policyengine_us/variables/gov/states/de/dss/poc/de_poc_provider_type.py b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_provider_type.py new file mode 100644 index 00000000000..2dfc2b57cda --- /dev/null +++ b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_provider_type.py @@ -0,0 +1,19 @@ +from policyengine_us.model_api import * + + +class DEPOCProviderType(Enum): + FAMILY_HOME = "Family Home" + CENTER = "Center" + + +class de_poc_provider_type(Variable): + value_type = Enum + entity = Person + possible_values = DEPOCProviderType + default_value = DEPOCProviderType.CENTER + definition_period = MONTH + label = "Delaware Purchase of Care child care provider type" + defined_for = StateCode.DE + reference = ( + "https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=2" + ) diff --git a/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_activity_eligible.py b/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_activity_eligible.py new file mode 100644 index 00000000000..df16cdb4099 --- /dev/null +++ b/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_activity_eligible.py @@ -0,0 +1,20 @@ +from policyengine_us.model_api import * + + +class de_poc_activity_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "Eligible for Delaware Purchase of Care based on activity requirements" + definition_period = MONTH + defined_for = StateCode.DE + reference = "https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11003.shtml" + + 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_employment = (person("employment_income", period) > 0) | ( + person("self_employment_income", period) > 0 + ) + is_student = person("is_full_time_student", period.this_year) + individually_eligible = has_employment | is_student + return spm_unit.any(is_head_or_spouse & individually_eligible) diff --git a/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_eligible.py b/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_eligible.py new file mode 100644 index 00000000000..7619720a5fc --- /dev/null +++ b/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_eligible.py @@ -0,0 +1,17 @@ +from policyengine_us.model_api import * + + +class de_poc_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "Eligible for Delaware Purchase of Care" + definition_period = MONTH + defined_for = StateCode.DE + reference = "https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11003.shtml" + + def formula(spm_unit, period, parameters): + has_eligible_child = add(spm_unit, period, ["de_poc_eligible_child"]) > 0 + income_eligible = spm_unit("de_poc_income_eligible", period) + asset_eligible = spm_unit("is_ccdf_asset_eligible", period.this_year) + activity_eligible = spm_unit("de_poc_activity_eligible", period) + return has_eligible_child & income_eligible & asset_eligible & activity_eligible diff --git a/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_eligible_child.py b/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_eligible_child.py new file mode 100644 index 00000000000..280214b1d2b --- /dev/null +++ b/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_eligible_child.py @@ -0,0 +1,24 @@ +from policyengine_us.model_api import * + + +class de_poc_eligible_child(Variable): + value_type = bool + entity = Person + label = "Eligible child for Delaware Purchase of Care" + definition_period = MONTH + defined_for = StateCode.DE + reference = ( + "https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11003.shtml", + "https://www.dhss.delaware.gov/dhss/dss/files/pocprovhndbk.pdf#page=14", + ) + + def formula(person, period, parameters): + p = parameters(period).gov.states.de.dss.poc.age_threshold + age = person("age", period.this_year) + is_disabled = person("is_disabled", period.this_year) + age_eligible = where(is_disabled, age < p.disabled_child, age < p.child) + is_dependent = person("is_tax_unit_dependent", period.this_year) + immigration_eligible = person( + "is_ccdf_immigration_eligible_child", period.this_year + ) + return age_eligible & is_dependent & immigration_eligible diff --git a/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_income_eligible.py b/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_income_eligible.py new file mode 100644 index 00000000000..3215cb6fa58 --- /dev/null +++ b/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_income_eligible.py @@ -0,0 +1,28 @@ +from policyengine_us.model_api import * + + +class de_poc_income_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "Eligible for Delaware Purchase of Care based on income" + definition_period = MONTH + defined_for = StateCode.DE + reference = ( + "https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11003.shtml", + "https://www.dhss.delaware.gov/dhss/dss/childcare.html", + ) + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.de.dss.poc.income + countable_income = spm_unit("de_poc_countable_income", period) + fpg = spm_unit("spm_unit_fpg", period) + smi = spm_unit("hhs_smi", period) + enrolled = spm_unit("de_poc_enrolled", period) + fpl_limit = where( + enrolled, + fpg * p.fpl_rate.redetermination, + fpg * p.fpl_rate.initial_eligibility, + ) + smi_limit = smi * p.smi_rate + income_limit = min_(fpl_limit, smi_limit) + return countable_income <= income_limit diff --git a/sources/working_references.md b/sources/working_references.md new file mode 100644 index 00000000000..adc0a1fb75f --- /dev/null +++ b/sources/working_references.md @@ -0,0 +1,252 @@ +# Delaware Purchase of Care (POC) - Child Care Assistance Program + +## Working References + +### Primary Regulatory Sources + +1. **16 Del. Admin. Code 11000-11004 - Applying for Child Care Assistance** + - URL: https://www.law.cornell.edu/regulations/delaware/16-Del-Admin-Code-SS-11000-11004 + - Contains: Income eligibility thresholds, copayment rules (7% cap, waiver conditions), activity requirements, income calculation rules, excluded income categories, phase-out rules, authorization periods, priority categories + - Note: Regulation text still references 185% FPL initial threshold, but the DSS eligibility page (source 18) now shows 200% FPL initial, 300% FPL at redetermination, 85% SMI hard cap + - Key sections: 11004.3.1 (priority categories), 11004.7 (copayment), 11004.7.1 (excessive financial burden), 11004.9.5 (12-month authorization), 11004.11 (temporary changes), 11004.13 (phase-out) + +2. **16 Del. Admin. Code 11000-11003 - Determining Technical Eligibility for Child Care Assistance** + - URL: https://www.law.cornell.edu/regulations/delaware/16-Del-Admin-Code-SS-11000-11003 + - Contains: Activity requirements (employment, education, training, protective services), child age limits (under 13, 13-18 with special needs), residency requirements, citizenship/non-citizen rules, family composition rules + - Key sections: 11003.6.2 (DFS referral bypass), 11003.9.1 (income calculation), 11003.9.3 (family size) + +3. **16 Del. Admin. Code 11000-11006 - Subsidized Child Care Provider Policy** + - URL: https://www.law.cornell.edu/regulations/delaware/16-Del-Admin-Code-SS-11000-11006 + - Contains: Provider eligibility, payment structure, absent day policy (10 days/month), holiday reimbursement, fee collection rules + - Key sections: 11006.1 (provider eligibility), 11006.4 (payment), 11006.4.1 (absent days), 11006.4.2 (fee collection), 11006.5.1 (direct deposit) + +4. **24 DE Reg 704 (January 2021) - Final Regulation Amendment** + - URL: https://archive.regulations.delaware.gov/register/january2021/final/24%20DE%20Reg%20704%2001-01-21.htm + - Contains: 185% FPL eligibility cap (Section 11003.9.1(4.B)), DFS referral exemption (11003.6.2), copayment waiver conditions (70% FPL gross test, 40% FPL net test), income averaging (3-6 months), self-employment rules, 20 income exclusion categories + - Note: The regulations.delaware.gov site renders only CSS on fetch - the Cornell LII mirror has the readable text + +### Federal CCDF Sources + +5. **CCDF Family Income Eligibility Levels by State (January 2025)** + - URL: https://acf.gov/sites/default/files/documents/occ/CCDF-Family-Income-Eligibility-Levels-by-State.pdf#page=1 + - Delaware data: 46% of SMI for family of 3 ($3,833/month), 46% of SMI for family of 4 ($4,625/month) + - Downloaded to: /tmp/de-ccdf-income-levels.pdf + +6. **CCDF Provider Payment Rates by State (January 2025)** + - URL: https://acf.gov/sites/default/files/documents/occ/CCDF-Provider-Payment-Rates-by-State.pdf#page=2 + - Delaware data: 50% of market rate across all age groups (infant center, infant family, toddler center, toddler family, preschool center, preschool family) + - Base weekly infant rates: $325 (center), $223 (family child care) - both at 50% of providers receiving base rate + - Downloaded to: /tmp/de-ccdf-rates.pdf + +7. **Delaware FFY 2025-2027 CCDF Plan Appendix (Lead Agency Implementation Plan)** + - URL: https://acf.gov/sites/default/files/documents/occ/DE-Accepted-ACF118-CCDF-FFY-2025-2027-Appendix.pdf + - Plan approved: 2024-11-09 + - Key non-compliance areas: 12-month eligibility continuity, copay cap at 7% (implemented July 1, 2024), prospective/enrollment-based payment (waiver through April 30, 2026) + - Policy reference: DSSM 11004.9.5 (12-month authorization), DSSM 11004.11 (temporary changes - 90 day job search) + - Downloaded to: /tmp/de-ccdf-plan-appendix.pdf + +### State Program Documents + +8. **Purchase of Care Billing Guidance for June 2024 (My Child DE)** + - URL: https://www.mychildde.org/purchase-of-care-billing-guidance-for-june-2024/ + - Contains: FY2025 reimbursement rate tables by age group and provider type (effective July 1, 2024) + - Rate table: + | Age Group | Family Home Daily | Family Home Weekly | Center Daily | Center Weekly | + |-----------|-------------------|-------------------|--------------|---------------| + | Infant (0) | $44.50 | $222.50 | $65.00 | $325.00 | + | Toddler (1) | $40.00 | $200.00 | $58.00 | $290.00 | + | Preschool (2-5) | $40.00 | $200.00 | $51.00 | $255.00 | + | School Age Full-time (6+) | $32.00 | $160.00 | $38.00 | $190.00 | + | School Age Part-time (6+) | $20.00 | $100.00 | $27.00 | $135.00 | + - **Special Needs Rate table** (from DSS child care page screenshot, rates effective July 1, 2024 - June 30, 2027): + | Age Group | Family Home Daily | Family Home Weekly | Center Daily | Center Weekly | + |-----------|-------------------|-------------------|--------------|---------------| + | Infant Special Need (0) | $46.73 | $233.63 | $68.25 | $341.25 | + | Toddler Special Need (1) | $43.25 | $216.25 | $60.90 | $304.50 | + | Preschool Special Need (2-5) | $43.25 | $216.25 | $55.69 | $278.45 | + | School Age Special Need (6+) FT | $33.60 | $168.00 | $39.90 | $199.50 | + | School Age Special Need (6+) PT | $21.00 | $105.00 | $28.35 | $141.75 | + - Copay cap: 7% of income; families at/below 150% FPL: no copayment + - Absent days: up to 10 per month reimbursed + - Uniform reimbursement at state rate regardless of private rate + +9. **Purchase of Care 101 Fact Sheet (May 2019, IPA/University of Delaware)** + - URL: https://mychildde.org/wp-content/uploads/purchase-of-care-2019.pdf#page=1 + - Contains: 185% FPL income eligibility table by family size (2019 values) + - Income table (185% FPL): + | Family Size | Gross Monthly Income | + |-------------|---------------------| + | 1 | $1,872 | + | 2 | $2,538 | + | 3 | $3,204 | + | 4 | $3,870 | + | 5 | $4,536 | + | 6 | $5,202 | + | 7 | $5,868 | + | 8 | $6,534 | + | 9 | $7,232 | + | 10 | $7,930 | + - Children: birth through age 12 + - As of March 2019: 15,035 children subsidized; 65% ages birth to 5 + - Provider reimbursement (2018): ~59% of 75th percentile market rate + - Downloaded to: /tmp/de-poc-101.pdf + +10. **Purchase of Care Brochure (Revised May 2017)** + - URL: https://laborfiles.delaware.gov/main/det/one-stop/DSS%20Brochure%20Child%20Care%205-2017.pdf + - Contains: Program overview, eligibility summary (200% FPL), care types (POC, POC Plus, Self-Arranged Care, Relative Care), application process, DSS office locations + - Application: Delaware ASSIST at assist.dhss.delaware.gov or local DSS offices + - Required documents: proof of income (4 pay stubs weekly/2 bi-weekly for past 30 days), proof of employment, school/training schedule, proof of medical necessity + - Downloaded to: /tmp/de-poc-brochure.pdf + +11. **Purchase of Care Provider Handbook (January 2023)** + - URL: https://dhss.delaware.gov/wp-content/uploads/sites/11/dss/pdf/PurchaseofCareProviderHandbook_FINAL1_25_2023.pdf + - Downloaded to: /tmp/de-ccap-poc-handbook.pdf (119 pages), text at /tmp/de-ccap-poc-handbook.txt + - Screenshots: /tmp/de-ccap-handbook-page-001.png through -010.png (1200 DPI) + - **Section C - Client Eligibility** (handbook pp.14-25): + - Children: under 13, or 13-18 if physically/mentally incapable of self-care (medical professional determination) + - Special needs children: under 19 years of age, physically or mentally incapable of self-care + - DFS-referred children: exempt from financial criteria AND citizenship requirements + - TWP participants: must be financially eligible but exempt from special need documentation + - Activity requirements: TANF E&T, TANF TWP, employment, approved education/training, DFS protective services, special need + - Application processed within 2 business days; filing date = start date for assistance + - Must verify last 30 days of earned/unearned income + - Presumptive child care may open pending verifications (DSSM 11004.8) + - 30 days to provide verifications (child care starts on filing date); 30-60 days = starts on date received; >60 days = must reapply + - **Section D - Rates and Child Care Types** (handbook pp.24-25): + - Authorization types: Part-time (0-4 hrs), Full-time (4-10 hrs), Time and a half (10-14 hrs), Part-time with Extended Care (school-age) + - Rates based on: provider geographic location, ages of children, hours of care + - Rates set from Delaware Local Child Care Market Rate Survey results + - **Section E - Reimbursement, Copayments, POC Plus** (handbook pp.26-37): + - Copayment is per family (not per child), based on family income and family size + - Copayment will not increase during 12-month eligibility period + - Copayment amount shown on authorization notice and in PSS + - When child uses 2 providers, copayment usually assigned to youngest child + - POC Plus (POC+): provider charges client the difference between DSS rate and private rate + - Example: $250/wk private - $200/wk DSS rate = $50/wk POC+ fee to client + - Absent days: paid absent days per month = number of authorized days per week, up to max 5 days/month (handbook version; updated to 10/month effective July 2024) + - 7 standard national holidays reimbursed (New Year's, Memorial Day, Independence Day, Labor Day, Thanksgiving, Christmas, Juneteenth); provider may substitute 1+ holidays + - Allowable fees to POC families: copayment, POC+ fees, late pick-up fees, field trip fees, returned check fees + - Providers CANNOT charge: registration fees, key FOBs, credit card fees, additional rates for authorized hours, place-holding fees, or any other unapproved fees + - **Legal Authority** (handbook p.10): + - State: Title 31, Part I, Chapter 3, Subchapter VII, Delaware Code - Section 391 + - Federal: Title XX Social Security Act, 7 CFR 273.7 (SNAP E&T child care), CCDBG as amended by PRWORA 1996 + +12. **Explaining Purchase of Care in Delaware (Vision Coalition, December 2020)** + - URL: https://visioncoalitionde.org/wp-content/uploads/2020/12/Purchase-of-Care-1-pager-12.9.20-update.pdf + - Contains: Program overview, funding breakdown ($41M federal + $47M state = $85M total), 22,000+ children ages 0-12 covered + - Downloaded to: /tmp/de-poc-one-pager.pdf + +### Policy Analysis Sources + +13. **Delaware Adopts Some New Federal Child Care Rules (RODE:L, 2024)** + - URL: https://rodelde.org/new-federal-child-care-rules-for-delaware/ + - Contains: June 2024 policy changes, copayment cap (7% from 9%), absent days (10 from 5 per month), 150% FPL copayment waiver, proposed 200% FPL eligibility, rate increase commitment to 75th percentile + - Impact: 8,000 of 12,000 children/families affected; most below 150% FPL will have no copayment + +14. **2024 Delaware Local Child Care Market Rate Survey (May 2024)** + - URL: https://www.dhss.delaware.gov/wp-content/uploads/sites/11/dss/pdf/2024DelawareChildCareMarketRateSurvey.pdf + - Downloaded to: /tmp/de-ccap-market-rate.pdf, text at /tmp/de-ccap-market-rate.txt + - Screenshots: /tmp/de-ccap-market-rate-page-01.png through -10.png (1200 DPI) + - Overall 38% price increase from 2021 to 2024; center avg +39%, FCC avg +36% + - **75th Percentile Daily Rates - Family Child Care (Table 2)**: + | Region | Infant | Toddler | Preschool | SA <4hr | SA >=4hr | + |--------|--------|---------|-----------|--------|---------| + | Kent & Sussex | $50.00 | $45.00 | $40.00 | $20.00 | $37.50 | + | New Castle | $50.00 | $50.00 | $47.00 | $24.00 | $40.00 | + | Statewide | $50.00 | $48.75 | $45.00 | $21.50 | $40.00 | + - **75th Percentile Daily Rates - Centers (Table 3)**: + | Region | Infant | Toddler | Preschool | SA <4hr | SA >=4hr | + |--------|--------|---------|-----------|--------|---------| + | Kent & Sussex | $62.38 | $57.00 | $50.00 | $30.00 | $42.50 | + | New Castle | $75.00 | $68.76 | $60.40 | $33.95 | $55.56 | + | Statewide | $72.00 | $65.00 | $58.05 | $32.20 | $54.40 | + - **Odd-hour FCC statewide**: $10/hour at 75th percentile (Table 4) + - **Special needs**: 57% of providers serve children with special needs; 71% report no additional costs; avg additional cost when reported: 10-11% + - Survey methodology: census of ~900 licensed providers, 436 completed; FCC median enrollment 6 children (median 4 subsidized); center avg enrollment 73 children + +### Delaware Code + +15. **Delaware Code Title 31 Chapter 3 Subchapter IV - Child Placement** + - URL: https://www.delcode.delaware.gov/title31/c003/sc04/index.html + - Contains: Kinship Care Program (Section 356) - related caregiver eligibility, 200% FPL income limit + - Note: This is for kinship/placement care, not the POC subsidy program directly + +### Application Portal + +16. **Delaware ASSIST** + - URL: https://assist.dhss.delaware.gov + - Online application portal for DSS benefits including Purchase of Care + +### Additional Resources + +17. **My Child DE - Financial Assistance** + - URL: https://mychildde.org/families/financial-assistance/ + - Contains: Program descriptions, links to POC handbook, POC 101, and economic analysis + - Contact: 1-800-734-2388 + +18. **Delaware DSS - Child Care Services (Eligibility Page)** + - URL: https://dhss.delaware.gov/dss/childcr/ + - Downloaded to: /tmp/de-ccap-childcr.html + - **CRITICAL SOURCE**: Contains the current "CHILD CARE INCOME ELIGIBILITY LIMITS & SLIDING FEE SCALE" table + - Note: Initial eligibility is described as 185% FPL in body text, but the table header says "Max Gross Monthly Income (200% FPL)" - this reflects the policy change where initial eligibility moved to 200% FPL + - Income thresholds at redetermination: 300% FPL; during authorization: 85% SMI + - **Complete Income Eligibility Table** (from page, current as of 2025): + | Family Size | 200% FPL | 300% FPL (Redet.) | 85% SMI (Auth.) | <40% FPL (Excess Burden) | <=150% FPL (Waived Copay) | 7% Copay Range | Phase-Out Range | + |-------------|----------|-------------------|-----------------|--------------------------|--------------------------|----------------|----------------| + | 1 | $2,610 | $3,915 | $4,645 | $522 | $1,958 | $1,959-$3,915 | $2,611-$3,915 | + | 2 | $3,526 | $5,289 | $6,074 | $705 | $2,556 | $2,646-$5,289 | $3,527-$5,289 | + | 3 | $4,442 | $6,663 | $7,503 | $888 | $3,332 | $3,333-$6,663 | $4,443-$6,663 | + | 4 | $5,360 | $8,040 | $8,932 | $1,072 | $4,020 | $4,021-$8,040 | $5,361-$8,040 | + | 5 | $6,276 | $9,414 | $10,361 | $1,255 | $4,707 | $4,708-$9,414 | $6,277-$9,414 | + | 6 | $7,192 | $10,788 | $11,790 | $1,438 | $5,394 | $5,395-$10,788 | $7,193-$10,788 | + | 7 | $8,110 | $12,165 | $12,058 | $1,622 | $6,083 | $6,084-$12,165 | $8,111-$12,165 | + | 8 | $9,026 | $13,539 | $12,326 | $1,805 | $6,770 | $6,771-$13,539 | $9,027-$13,539 | + | 9 | $9,944 | $14,916 | $12,594 | $1,989 | $7,458 | $7,459-$14,916 | $9,945-$14,916 | + | 10 | $10,862 | $16,293 | $12,862 | $2,172 | $8,147 | $8,148-$16,293 | $10,863-$16,293 | + | 11 | $11,780 | $17,670 | $13,130 | $2,356 | $8,835 | $8,836-$17,670 | $11,781-$17,670 | + | 12 | $12,698 | $19,047 | $13,398 | $2,540 | $9,524 | $9,525-$19,047 | $12,699-$19,047 | + - **Eligibility rules from page text**: + - Initial eligibility: gross monthly income <= 185% FPL (body text says 185%, table header shows 200%) + - At yearly redetermination: if income between 185%-200% FPL, graduated phase-out for 12 months + - Case closes: income exceeds 85% of SMI OR no longer has need for care + - **Table period**: "PURCHASE OF CARE (POC) PROGRAM OCTOBER 1, 2025 - SEPTEMBER 30, 2026" (per user-provided PDF) + - **Provider rate image**: FY2025 POC rates image at `/wp-content/uploads/sites/11/2025/10/FY2024_POC_Rates_7-1-2024-300x162-1.png` + - **Additional links from page**: + - Form 611 (Child Care Medical Certification): `/wp-content/uploads/sites/11/dss/pdf/Form611_ChildCareMedicalCertification_2024-05_Revised.pdf` + - 2024 Market Rate Survey, 2021 MRS, 2024 Cost of Care Study, Center/FCC Cost Estimation Tools + +19. **Delaware DSS - FPL Income Limits** + - URL: https://dhss.delaware.gov/dss/fpl/ + - Downloaded to: /tmp/de-ccap-fpl.html + - Title: "2023-2024 Countable Income Limits" + - **100% FPL Table** (by family size, monthly gross income): + | Family Size | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | + |---|---|---|---|---|---|---|---|---|---|---| + | Income | $1,215 | $1,644 | $2,072 | $2,500 | $2,929 | $3,357 | $3,785 | $4,214 | $4,643 | $5,072 | + - Also has 130%, 165%, 185%, 200% FPL tables (all with same format by family size) + - Note: These are 2023-2024 values; the child care eligibility page table (source 18) appears to use 2025 FPL values + +20. **DSS Child Care Page - User-Provided PDF (March 2025)** + - URL: https://dhss.delaware.gov/dss/childcr/ + - Downloaded to: /tmp/de-ccap-user-doc-1.pdf (8 pages), text at /tmp/de-ccap-user-doc-1.txt + - Screenshots: /tmp/de-ccap-user-doc-1-page-1.png through -8.png + - Captured: 2026-03-25 at 1:40 PM + - **Key new content - Complete POC Rate Table** (page 6 screenshot, "Purchase of Care Rates July 1, 2024 - June 30, 2027"): + - Statewide rates, both regular and special needs + - Rates period: July 1, 2024 through June 30, 2027 (3-year period) + - Regular rates match source 8 (POC Billing Guidance) + - Special needs rates extracted and added to source 8 + - **Eligibility table period**: "PURCHASE OF CARE (POC) PROGRAM OCTOBER 1, 2025 - SEPTEMBER 30, 2026" + - **Income table**: Same values as HTML source 18, extends to family size 18 + - **Additional family sizes 13-18** (from text, not in HTML extraction): + | Family Size | 200% FPL | 300% FPL (Redet.) | 85% SMI (Auth.) | <40% FPL | <=150% FPL | 7% Copay Range | Phase-Out Range | + |-------------|----------|-------------------|-----------------|----------|------------|----------------|----------------| + | 13 | $13,616 | $20,424 | $13,666 | $2,723 | $10,212 | $10,213-$20,424 | $13,617-$20,424 | + | 14 | $14,534 | $21,801 | $13,934 | $2,907 | $10,901 | $10,902-$21,801 | $14,535-$21,801 | + | 15 | $15,452 | $23,178 | $14,202 | $3,090 | $11,589 | $11,590-$23,178 | $15,453-$23,178 | + | 16 | $16,370 | $24,555 | $14,470 | $3,274 | $12,278 | $12,279-$24,555 | $16,371-$24,555 | + | 17 | $17,288 | $25,932 | $14,738 | $3,458 | $12,966 | $12,967-$25,932 | $17,289-$25,932 | + | 18 | $18,206 | $27,309 | $15,006 | $3,641 | $13,655 | $13,656-$27,309 | $18,207-$27,309 | + - Confirms body text still says "185% FPL" for initial eligibility while table uses 200% FPL + - Confirms graduated phase-out text: "between 185% and 200% of the FPL at their yearly redetermination" + - Confirms hard cap: "gross monthly income exceeds 85% of the SMI" From 29dd2d7cfd601ed659ed9cb09b29f2bf2ab5ab07 Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 25 Mar 2026 14:42:03 -0400 Subject: [PATCH 4/8] Update changelog to match program name: Delaware Purchase of Care (POC) Co-Authored-By: Claude Opus 4.6 (1M context) --- changelog.d/de-ccap.added.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.d/de-ccap.added.md b/changelog.d/de-ccap.added.md index d65818d9763..15eb0d22ad2 100644 --- a/changelog.d/de-ccap.added.md +++ b/changelog.d/de-ccap.added.md @@ -1 +1 @@ -Add Delaware CCAP (Child Care Assistance Program). +Add Delaware Purchase of Care (POC) child care subsidy. From 1f5f1dd97f11018575dedd12a89fd63a7530d9b3 Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 25 Mar 2026 15:21:36 -0400 Subject: [PATCH 5/8] Review-fix round 1: fix FPL rates, special needs rates, broken URLs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix initial eligibility FPL: 185% → 200% (verified by table dollar amounts) - Fix redetermination FPL: 200% → 300% (verified by table dollar amounts) - Replace broken pocbillingguidance.pdf URLs (404) with dhss.delaware.gov/dss/childcr/ - Replace broken pocprovhndbk.pdf URLs (999) with WordPress URL - Replace uniform 5% special needs rate with per-category absolute rates - Update affected test expected values and comments Co-Authored-By: Claude Opus 4.6 (1M context) --- .../gov/states/de/dss/poc/age_group.yaml | 4 +- .../dss/poc/age_threshold/disabled_child.yaml | 2 +- .../gov/states/de/dss/poc/copay/rate.yaml | 4 +- .../de/dss/poc/copay/waiver_fpl_rate.yaml | 4 +- .../de/dss/poc/full_time_hours_per_day.yaml | 2 +- .../income/fpl_rate/initial_eligibility.yaml | 2 +- .../poc/income/fpl_rate/redetermination.yaml | 2 +- .../gov/states/de/dss/poc/rates/center.yaml | 4 +- .../states/de/dss/poc/rates/family_home.yaml | 4 +- .../dss/poc/rates/special_needs/center.yaml | 26 +++++ .../poc/rates/special_needs/family_home.yaml | 26 +++++ .../rates/special_needs_rate_increase.yaml | 12 --- .../gov/states/de/dss/poc/de_poc.yaml | 2 +- .../states/de/dss/poc/de_poc_eligible.yaml | 9 +- .../de/dss/poc/de_poc_income_eligible.yaml | 50 +++++----- .../poc/de_poc_maximum_weekly_benefit.yaml | 12 +-- .../gov/states/de/dss/poc/integration.yaml | 96 ++++++++++--------- .../variables/gov/states/de/dss/poc/de_poc.py | 2 +- .../gov/states/de/dss/poc/de_poc_age_group.py | 4 +- .../gov/states/de/dss/poc/de_poc_copay.py | 2 +- .../dss/poc/de_poc_maximum_weekly_benefit.py | 15 +-- .../states/de/dss/poc/de_poc_provider_type.py | 4 +- .../poc/eligibility/de_poc_eligible_child.py | 2 +- .../poc/eligibility/de_poc_income_eligible.py | 2 +- 24 files changed, 171 insertions(+), 121 deletions(-) create mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/rates/special_needs/center.yaml create mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/rates/special_needs/family_home.yaml delete mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/rates/special_needs_rate_increase.yaml diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/age_group.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/age_group.yaml index 5bd17851793..d688495e136 100644 --- a/policyengine_us/parameters/gov/states/de/dss/poc/age_group.yaml +++ b/policyengine_us/parameters/gov/states/de/dss/poc/age_group.yaml @@ -25,5 +25,5 @@ metadata: period: year label: Delaware Purchase of Care child care age group reference: - - title: Delaware DSS POC Billing Guidance - Rate Table Age Groups - href: https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=2 + - title: Delaware DSS Child Care Services - Rate Table Age Groups + href: https://dhss.delaware.gov/dss/childcr/ diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/age_threshold/disabled_child.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/age_threshold/disabled_child.yaml index 5df1547617f..8ff8f41513f 100644 --- a/policyengine_us/parameters/gov/states/de/dss/poc/age_threshold/disabled_child.yaml +++ b/policyengine_us/parameters/gov/states/de/dss/poc/age_threshold/disabled_child.yaml @@ -10,4 +10,4 @@ metadata: - title: 16 Del. Admin. Code 11003, Section 11003.3 href: https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11003.shtml - title: Delaware DSS Provider Handbook, Section C - Eligibility Requirements - href: https://www.dhss.delaware.gov/dhss/dss/files/pocprovhndbk.pdf#page=14 + href: https://dhss.delaware.gov/wp-content/uploads/sites/11/dss/pdf/PurchaseofCareProviderHandbook_FINAL1_25_2023.pdf#page=14 diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/copay/rate.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/copay/rate.yaml index d3ebad39038..9a873cf6b85 100644 --- a/policyengine_us/parameters/gov/states/de/dss/poc/copay/rate.yaml +++ b/policyengine_us/parameters/gov/states/de/dss/poc/copay/rate.yaml @@ -10,5 +10,5 @@ metadata: reference: - title: 16 Del. Admin. Code 11004, Section 11004.7 href: https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11004.shtml - - title: Delaware DSS POC Billing Guidance - Copayment - href: https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=3 + - title: Delaware DSS Child Care Services - Copayment + href: https://dhss.delaware.gov/dss/childcr/ diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/copay/waiver_fpl_rate.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/copay/waiver_fpl_rate.yaml index 84833c8879c..8ad83fe9eb6 100644 --- a/policyengine_us/parameters/gov/states/de/dss/poc/copay/waiver_fpl_rate.yaml +++ b/policyengine_us/parameters/gov/states/de/dss/poc/copay/waiver_fpl_rate.yaml @@ -8,7 +8,7 @@ metadata: period: year label: Delaware Purchase of Care copayment waiver FPL rate reference: - - title: Delaware DSS POC Billing Guidance - Copayment Waiver - href: https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=3 + - title: Delaware DSS Child Care Services - Copayment Waiver + href: https://dhss.delaware.gov/dss/childcr/ - title: Delaware DSS Child Care Services - Income Eligibility Table href: https://dhss.delaware.gov/dss/childcr/ diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/full_time_hours_per_day.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/full_time_hours_per_day.yaml index 735d6a7b637..4c7bdaa3649 100644 --- a/policyengine_us/parameters/gov/states/de/dss/poc/full_time_hours_per_day.yaml +++ b/policyengine_us/parameters/gov/states/de/dss/poc/full_time_hours_per_day.yaml @@ -9,4 +9,4 @@ metadata: label: Delaware Purchase of Care full-time minimum daily hours reference: - title: Delaware DSS Provider Handbook, Section D - Authorization Types - href: https://www.dhss.delaware.gov/dhss/dss/files/pocprovhndbk.pdf#page=24 + href: https://dhss.delaware.gov/wp-content/uploads/sites/11/dss/pdf/PurchaseofCareProviderHandbook_FINAL1_25_2023.pdf#page=24 diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml index 44cfeb1f2a9..4c328e54b1c 100644 --- a/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml +++ b/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml @@ -1,6 +1,6 @@ description: Delaware limits the Purchase of Care program to new applicants with income at or below this share of the federal poverty level. values: - 2025-10-01: 1.85 + 2025-10-01: 2 metadata: unit: /1 diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml index d44220a9c56..03033b4c500 100644 --- a/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml +++ b/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml @@ -1,6 +1,6 @@ description: Delaware limits the Purchase of Care program to enrolled families with income at or below this share of the federal poverty level at redetermination. values: - 2025-10-01: 2 + 2025-10-01: 3 metadata: unit: /1 diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/rates/center.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/rates/center.yaml index c90dad43ef4..5ae556ff640 100644 --- a/policyengine_us/parameters/gov/states/de/dss/poc/rates/center.yaml +++ b/policyengine_us/parameters/gov/states/de/dss/poc/rates/center.yaml @@ -6,8 +6,8 @@ metadata: breakdown: - de_poc_age_group reference: - - title: Delaware DSS POC Billing Guidance - Statewide Rates - href: https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=2 + - title: Delaware DSS Child Care Services - Statewide Rates + href: https://dhss.delaware.gov/dss/childcr/ - title: Delaware DSS Child Care Services - Provider Rates href: https://dhss.delaware.gov/dss/childcr/ diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/rates/family_home.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/rates/family_home.yaml index f944ecf7fc3..3f930770e0e 100644 --- a/policyengine_us/parameters/gov/states/de/dss/poc/rates/family_home.yaml +++ b/policyengine_us/parameters/gov/states/de/dss/poc/rates/family_home.yaml @@ -6,8 +6,8 @@ metadata: breakdown: - de_poc_age_group reference: - - title: Delaware DSS POC Billing Guidance - Statewide Rates - href: https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=2 + - title: Delaware DSS Child Care Services - Statewide Rates + href: https://dhss.delaware.gov/dss/childcr/ - title: Delaware DSS Child Care Services - Provider Rates href: https://dhss.delaware.gov/dss/childcr/ diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/rates/special_needs/center.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/rates/special_needs/center.yaml new file mode 100644 index 00000000000..0379f770cd1 --- /dev/null +++ b/policyengine_us/parameters/gov/states/de/dss/poc/rates/special_needs/center.yaml @@ -0,0 +1,26 @@ +description: Delaware provides these weekly reimbursement rates for special needs children at child care centers under the Purchase of Care program. +metadata: + period: week + unit: currency-USD + label: Delaware Purchase of Care special needs center weekly rates + breakdown: + - de_poc_age_group + reference: + - title: Delaware DSS Child Care Services - Special Needs Rates + href: https://dhss.delaware.gov/dss/childcr/ + +# Effective July 1, 2024 +INFANT: + 2024-01-01: 341.25 + +TODDLER: + 2024-01-01: 304.5 + +PRESCHOOL: + 2024-01-01: 278.25 + +SCHOOL_AGE_FULL_TIME: + 2024-01-01: 199.5 + +SCHOOL_AGE_PART_TIME: + 2024-01-01: 141.75 diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/rates/special_needs/family_home.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/rates/special_needs/family_home.yaml new file mode 100644 index 00000000000..c161cc202cf --- /dev/null +++ b/policyengine_us/parameters/gov/states/de/dss/poc/rates/special_needs/family_home.yaml @@ -0,0 +1,26 @@ +description: Delaware provides these weekly reimbursement rates for special needs children at family home child care under the Purchase of Care program. +metadata: + period: week + unit: currency-USD + label: Delaware Purchase of Care special needs family home weekly rates + breakdown: + - de_poc_age_group + reference: + - title: Delaware DSS Child Care Services - Special Needs Rates + href: https://dhss.delaware.gov/dss/childcr/ + +# Effective July 1, 2024 +INFANT: + 2024-01-01: 233.63 + +TODDLER: + 2024-01-01: 216.25 + +PRESCHOOL: + 2024-01-01: 216.25 + +SCHOOL_AGE_FULL_TIME: + 2024-01-01: 168 + +SCHOOL_AGE_PART_TIME: + 2024-01-01: 105 diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/rates/special_needs_rate_increase.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/rates/special_needs_rate_increase.yaml deleted file mode 100644 index 663679ae250..00000000000 --- a/policyengine_us/parameters/gov/states/de/dss/poc/rates/special_needs_rate_increase.yaml +++ /dev/null @@ -1,12 +0,0 @@ -description: Delaware provides this additional rate increase for special needs children under the Purchase of Care program. -values: - # Effective July 1, 2024 - 2024-01-01: 0.05 - -metadata: - unit: /1 - period: year - label: Delaware Purchase of Care special needs rate increase - reference: - - title: Delaware DSS POC Billing Guidance - Special Needs Rates - href: https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=2 diff --git a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc.yaml b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc.yaml index 344ab0603b0..395d74fede0 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc.yaml @@ -64,7 +64,7 @@ members: [person1, person2] state_code: DE output: - # Income 48_000 / 12 = 4_000 > 185% FPL of 3_260.63 -> ineligible + # Income 48_000 / 12 = 4_000 > 200% FPL of 3_525.00 -> ineligible de_poc: 0 - name: Case 3, benefit capped at max reimbursement. diff --git a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_eligible.yaml index ed3876c6250..f1675e776cc 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_eligible.yaml @@ -50,7 +50,7 @@ members: [person1, person2] state_code: DE output: - # 48_000 / 12 = 4_000 > 185% FPL of 3_260.63 + # 48_000 / 12 = 4_000 > 200% FPL of 3_525 de_poc_eligible: false - name: Case 3, no eligible children. @@ -106,13 +106,13 @@ output: de_poc_eligible: false -- name: Case 5, enrolled family within 200% FPL. +- name: Case 5, enrolled family within 300% FPL but above 200% FPL. period: 2025-01 input: people: person1: age: 30 - employment_income: 42_000 + employment_income: 50_000 immigration_status: CITIZEN person2: age: 4 @@ -130,5 +130,6 @@ members: [person1, person2] state_code: DE output: - # 42_000 / 12 = 3_500 <= 200% FPL 3_525 -> eligible + # 50_000 / 12 = 4_166.67 > 200% FPL 3_525 but <= 300% FPL 5_287.50 + # Enrolled -> uses 300% threshold -> eligible de_poc_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_income_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_income_eligible.yaml index 42c54d76945..446c53062f6 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_income_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_income_eligible.yaml @@ -1,6 +1,6 @@ # de_poc_income_eligible: SPMUnit, bool, MONTH # Income eligible if countable_income <= min(fpl_threshold, 85% SMI) -# New applicants: 185% FPL; Enrolled: 200% FPL; Hard cap: 85% SMI +# New applicants: 200% FPL; Enrolled: 300% FPL; Hard cap: 85% SMI # # 2025 FPG (Contiguous US): first_person = 15_650, additional = 5_500 # Family of 2: 21_150/yr @@ -15,7 +15,7 @@ # Family of 2: 82_254.84 * 0.85 = 69_916.61 # Family of 4: 120_963 * 0.85 = 102_818.55 -- name: Case 1, new applicant below 185% FPL. +- name: Case 1, new applicant below 200% FPL. period: 2025-01 input: people: @@ -33,19 +33,19 @@ state_code: DE output: # Monthly income: 36_000 / 12 = 3_000 - # 185% FPL family of 2: 21_150 * 1.85 / 12 = 3_260.63 + # 200% FPL family of 2: 21_150 * 2.0 / 12 = 3_525.00 # 85% SMI family of 2: 69_916.61 / 12 = 5_826.38 - # Limit = min(3_260.63, 5_826.38) = 3_260.63 - # 3_000 <= 3_260.63 -> eligible + # Limit = min(3_525.00, 5_826.38) = 3_525.00 + # 3_000 <= 3_525.00 -> eligible de_poc_income_eligible: true -- name: Case 2, new applicant above 185% FPL. +- name: Case 2, new applicant above 200% FPL. period: 2025-01 input: people: person1: age: 30 - employment_income: 42_000 + employment_income: 48_000 person2: age: 4 spm_units: @@ -56,18 +56,18 @@ members: [person1, person2] state_code: DE output: - # Monthly income: 42_000 / 12 = 3_500 - # 185% FPL family of 2: 3_260.63 - # 3_500 > 3_260.63 -> ineligible (not enrolled) + # Monthly income: 48_000 / 12 = 4_000 + # 200% FPL family of 2: 21_150 * 2.0 / 12 = 3_525.00 + # 4_000 > 3_525.00 -> ineligible (not enrolled) de_poc_income_eligible: false -- name: Case 3, enrolled family below 200% FPL. +- name: Case 3, enrolled family below 300% FPL. period: 2025-01 input: people: person1: age: 30 - employment_income: 42_000 + employment_income: 60_000 person2: age: 4 spm_units: @@ -79,20 +79,20 @@ members: [person1, person2] state_code: DE output: - # Monthly income: 42_000 / 12 = 3_500 - # 200% FPL family of 2: 21_150 * 2.0 / 12 = 3_525.00 + # Monthly income: 60_000 / 12 = 5_000 + # 300% FPL family of 2: 21_150 * 3.0 / 12 = 5_287.50 # 85% SMI family of 2: 5_826.38 - # Limit = min(3_525.00, 5_826.38) = 3_525.00 - # 3_500 <= 3_525.00 -> eligible + # Limit = min(5_287.50, 5_826.38) = 5_287.50 + # 5_000 <= 5_287.50 -> eligible de_poc_income_eligible: true -- name: Case 4, enrolled family above 200% FPL. +- name: Case 4, enrolled family above 300% FPL. period: 2025-01 input: people: person1: age: 30 - employment_income: 48_000 + employment_income: 66_000 person2: age: 4 spm_units: @@ -104,18 +104,18 @@ members: [person1, person2] state_code: DE output: - # Monthly income: 48_000 / 12 = 4_000 - # 200% FPL family of 2: 3_525.00 - # 4_000 > 3_525.00 -> ineligible + # Monthly income: 66_000 / 12 = 5_500 + # 300% FPL family of 2: 21_150 * 3.0 / 12 = 5_287.50 + # 5_500 > 5_287.50 -> ineligible de_poc_income_eligible: false -- name: Case 5, income at exact 185% FPL threshold for new applicant. +- name: Case 5, income at exact 200% FPL threshold for new applicant. period: 2025-01 input: people: person1: age: 30 - employment_income: 39_127.50 + employment_income: 42_300 person2: age: 4 spm_units: @@ -126,8 +126,8 @@ members: [person1, person2] state_code: DE output: - # Monthly income: 39_127.50 / 12 = 3_260.625 - # 185% FPL family of 2: 21_150 * 1.85 / 12 = 3_260.625 + # Monthly income: 42_300 / 12 = 3_525.00 + # 200% FPL family of 2: 21_150 * 2.0 / 12 = 3_525.00 # At threshold -> eligible (<=) de_poc_income_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_maximum_weekly_benefit.yaml b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_maximum_weekly_benefit.yaml index 17c16fa25d0..c39c4a0bb39 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_maximum_weekly_benefit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/de_poc_maximum_weekly_benefit.yaml @@ -1,6 +1,6 @@ # de_poc_maximum_weekly_benefit: Person, float, MONTH # Looks up weekly rate from rate table by provider type and age group -# For disabled children, applies 5% special needs rate increase +# For disabled children, uses special needs rate table # # Weekly rates (2024): # Center: INFANT=$325, TODDLER=$290, PRESCHOOL=$255, @@ -143,7 +143,7 @@ # Family Home SCHOOL_AGE_PART_TIME weekly rate = $100.00 de_poc_maximum_weekly_benefit: [0, 100] -- name: Case 6, disabled child gets 5% special needs rate increase. +- name: Case 6, disabled child gets special needs rate. period: 2025-01 absolute_error_margin: 0.01 input: @@ -168,10 +168,10 @@ members: [person1, person2] state_code: DE output: - # Center INFANT = $325 * 1.05 = $341.25 + # Center INFANT special needs = $341.25 de_poc_maximum_weekly_benefit: [0, 341.25] -- name: Case 7, disabled child family home preschool with special needs increase. +- name: Case 7, disabled child family home preschool with special needs rate. period: 2025-01 absolute_error_margin: 0.01 input: @@ -196,8 +196,8 @@ members: [person1, person2] state_code: DE output: - # Family Home PRESCHOOL = $200 * 1.05 = $210.00 - de_poc_maximum_weekly_benefit: [0, 210] + # Family Home PRESCHOOL special needs = $216.25 + de_poc_maximum_weekly_benefit: [0, 216.25] - name: Case 8, ineligible child gets zero weekly benefit. period: 2025-01 diff --git a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/integration.yaml index 452001f4610..71a68715203 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/de/dss/poc/integration.yaml @@ -11,12 +11,19 @@ # Family of 2: 120_963 * 0.68 = 82_254.84 # 85% SMI family of 2: 82_254.84 * 0.85 = 69_916.61 # +# Income thresholds: +# Initial eligibility: 200% FPL +# Redetermination (enrolled): 300% FPL +# # Weekly rates: # Center: INFANT=$325, TODDLER=$290, PRESCHOOL=$255, # SA_FT=$190, SA_PT=$135 # Family Home: INFANT=$222.50, TODDLER=$200, PRESCHOOL=$200, # SA_FT=$160, SA_PT=$100 -# Special needs: base * 1.05 +# Special needs (center): INFANT=$341.25, TODDLER=$304.50, +# PRESCHOOL=$278.25, SA_FT=$199.50, SA_PT=$141.75 +# Special needs (family home): INFANT=$233.63, TODDLER=$216.25, +# PRESCHOOL=$216.25, SA_FT=$168, SA_PT=$105 - name: Case 1, basic eligible new applicant with center care. period: 2025-01 @@ -57,10 +64,10 @@ # === Income Eligibility === # FPG family of 2: 21_150 # Monthly income: 36_000 / 12 = 3_000 - # 185% FPL: 21_150 * 1.85 / 12 = 3_260.63 + # 200% FPL: 21_150 * 2.0 / 12 = 3_525 # 85% SMI: 69_916.61 / 12 = 5_826.38 - # Limit = min(3_260.63, 5_826.38) = 3_260.63 - # 3_000 <= 3_260.63 -> eligible + # Limit = min(3_525, 5_826.38) = 3_525 + # 3_000 <= 3_525 -> eligible de_poc_income_eligible: true # === Asset Eligibility === @@ -135,8 +142,8 @@ # === Income Eligibility === # FPG family of 3: 26_650 # Monthly income: 18_000 / 12 = 1_500 - # 185% FPL: 26_650 * 1.85 / 12 = 4_100.21 - # 1_500 <= 4_100.21 -> eligible + # 200% FPL: 26_650 * 2.0 / 12 = 4_441.67 + # 1_500 <= 4_441.67 -> eligible de_poc_income_eligible: true is_ccdf_asset_eligible: true @@ -159,14 +166,14 @@ # Monthly = 18_000 / 12 = 1_500 de_poc: 1_500 -- name: Case 3, enrolled family between 185% and 200% FPL. +- name: Case 3, enrolled family between 200% and 300% FPL. period: 2025-01 absolute_error_margin: 0.01 input: people: person1: age: 35 - employment_income: 42_000 + employment_income: 50_000 immigration_status: CITIZEN person2: age: 0 @@ -198,12 +205,12 @@ # === Income Eligibility === # FPG family of 2: 21_150 - # Monthly income: 42_000 / 12 = 3_500 - # NOT enrolled: 185% FPL = 3_260.63 -> would fail - # IS enrolled: 200% FPL = 21_150 * 2.0 / 12 = 3_525 + # Monthly income: 50_000 / 12 = 4_166.67 + # NOT enrolled: 200% FPL = 21_150 * 2.0 / 12 = 3_525 -> would fail + # IS enrolled: 300% FPL = 21_150 * 3.0 / 12 = 5_287.50 # 85% SMI: 5_826.38 - # Limit = min(3_525, 5_826.38) = 3_525 - # 3_500 <= 3_525 -> eligible + # Limit = min(5_287.50, 5_826.38) = 5_287.50 + # 4_166.67 <= 5_287.50 -> eligible de_poc_income_eligible: true is_ccdf_asset_eligible: true @@ -211,10 +218,10 @@ de_poc_eligible: true # === Copay === - # FPL ratio = 42_000 / 21_150 = 1.9858 > 1.5 -> 7% copay - # Annual copay = 42_000 * 0.07 = 2_940 - # Monthly copay = 2_940 / 12 = 245 - de_poc_copay: 245 + # FPL ratio = 50_000 / 21_150 = 2.3641 > 1.5 -> 7% copay + # Annual copay = 50_000 * 0.07 = 3_500 + # Monthly copay = 3_500 / 12 = 291.67 + de_poc_copay: 291.67 # === Weekly Rate === # Center INFANT = $325 @@ -222,10 +229,10 @@ # === Benefit === # Max annual = 325 * 52 = 16_900 - # Uncapped = max(15_000 - 2_940, 0) = 12_060 - # Annual benefit = min(12_060, 16_900) = 12_060 - # Monthly = 12_060 / 12 = 1_005 - de_poc: 1_005 + # Uncapped = max(15_000 - 3_500, 0) = 11_500 + # Annual benefit = min(11_500, 16_900) = 11_500 + # Monthly = 11_500 / 12 = 958.33 + de_poc: 958.33 - name: Case 4, disabled teenager in family home care with special needs rate. period: 2025-01 @@ -267,8 +274,8 @@ # === Income Eligibility === # FPG family of 2: 21_150 # Monthly income: 30_000 / 12 = 2_500 - # 185% FPL: 3_260.63 - # 2_500 <= 3_260.63 -> eligible + # 200% FPL: 21_150 * 2.0 / 12 = 3_525 + # 2_500 <= 3_525 -> eligible de_poc_income_eligible: true is_ccdf_asset_eligible: true @@ -280,7 +287,7 @@ de_poc_copay: 0 # === Weekly Rate === - # Family Home SCHOOL_AGE_FT = $160 * 1.05 (special needs) = $168 + # Family Home SCHOOL_AGE_FT special needs = $168 de_poc_maximum_weekly_benefit: [0, 168] # === Benefit === @@ -335,8 +342,8 @@ # === Income Eligibility === # FPG family of 3: 26_650 # Monthly income: 30_000 / 12 = 2_500 - # 185% FPL: 26_650 * 1.85 / 12 = 4_100.21 - # 2_500 <= 4_100.21 -> eligible + # 200% FPL: 26_650 * 2.0 / 12 = 4_441.67 + # 2_500 <= 4_441.67 -> eligible de_poc_income_eligible: true is_ccdf_asset_eligible: true @@ -359,14 +366,14 @@ # Monthly = 16_000 / 12 = 1_333.33 de_poc: 1_333.33 -- name: Case 6, enrolled family just above 185% FPL but within 200% FPL. +- name: Case 6, enrolled family just above 200% FPL but within 300% FPL. period: 2025-01 absolute_error_margin: 0.01 input: people: person1: age: 30 - employment_income: 40_000 + employment_income: 66_000 immigration_status: CITIZEN person2: age: 30 @@ -410,11 +417,12 @@ # === Income Eligibility === # FPG family of 4: 32_150 - # Monthly income: 40_000 / 12 = 3_333.33 - # Enrolled: 200% FPL = 32_150 * 2.0 / 12 = 5_358.33 + # Monthly income: 66_000 / 12 = 5_500 + # NOT enrolled: 200% FPL = 32_150 * 2.0 / 12 = 5_358.33 -> would fail + # Enrolled: 300% FPL = 32_150 * 3.0 / 12 = 8_037.50 # 85% SMI family of 4: 120_963 * 0.85 / 12 = 8_568.21 - # Limit = min(5_358.33, 8_568.21) = 5_358.33 - # 3_333.33 <= 5_358.33 -> eligible + # Limit = min(8_037.50, 8_568.21) = 8_037.50 + # 5_500 <= 8_037.50 -> eligible de_poc_income_eligible: true is_ccdf_asset_eligible: true @@ -423,8 +431,10 @@ de_poc_eligible: true # === Copay === - # FPL ratio = 40_000 / 32_150 = 1.2442 <= 1.5 -> waived - de_poc_copay: 0 + # FPL ratio = 66_000 / 32_150 = 2.0529 > 1.5 -> 7% copay + # Annual copay = 66_000 * 0.07 = 4_620 + # Monthly copay = 4_620 / 12 = 385 + de_poc_copay: 385 # === Weekly Rates === # person3: Center PRESCHOOL = $255 @@ -433,19 +443,19 @@ # === Benefit === # Max annual = (255 + 290) * 52 = 28_340 - # Uncapped = max(30_000 - 0, 0) = 30_000 - # Annual benefit = min(30_000, 28_340) = 28_340 - # Monthly = 28_340 / 12 = 2_361.67 - de_poc: 2_361.67 + # Uncapped = max(30_000 - 4_620, 0) = 25_380 + # Annual benefit = min(25_380, 28_340) = 25_380 + # Monthly = 25_380 / 12 = 2_115 + de_poc: 2_115 -- name: Case 7, new applicant above 185% FPL is ineligible while enrolled would be eligible. +- name: Case 7, new applicant above 200% FPL is ineligible while enrolled would be eligible. period: 2025-01 absolute_error_margin: 0.01 input: people: person1: age: 35 - employment_income: 40_000 + employment_income: 44_000 immigration_status: CITIZEN person2: age: 2 @@ -467,9 +477,9 @@ output: # === Income Eligibility === # FPG family of 2: 21_150 - # Monthly income: 40_000 / 12 = 3_333.33 - # New applicant: 185% FPL = 21_150 * 1.85 / 12 = 3_260.63 - # 3_333.33 > 3_260.63 -> INELIGIBLE as new applicant + # Monthly income: 44_000 / 12 = 3_666.67 + # New applicant: 200% FPL = 21_150 * 2.0 / 12 = 3_525 + # 3_666.67 > 3_525 -> INELIGIBLE as new applicant de_poc_income_eligible: false de_poc_eligible: false diff --git a/policyengine_us/variables/gov/states/de/dss/poc/de_poc.py b/policyengine_us/variables/gov/states/de/dss/poc/de_poc.py index 6efee3c3b04..397267f8913 100644 --- a/policyengine_us/variables/gov/states/de/dss/poc/de_poc.py +++ b/policyengine_us/variables/gov/states/de/dss/poc/de_poc.py @@ -10,7 +10,7 @@ class de_poc(Variable): defined_for = "de_poc_eligible" reference = ( "https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11004.shtml", - "https://www.dhss.delaware.gov/dhss/dss/childcare.html", + "https://dhss.delaware.gov/dss/childcr/", ) def formula(spm_unit, period, parameters): diff --git a/policyengine_us/variables/gov/states/de/dss/poc/de_poc_age_group.py b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_age_group.py index 85340c50ee5..f21a11021f7 100644 --- a/policyengine_us/variables/gov/states/de/dss/poc/de_poc_age_group.py +++ b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_age_group.py @@ -17,9 +17,7 @@ class de_poc_age_group(Variable): definition_period = MONTH label = "Delaware Purchase of Care child care age group" defined_for = StateCode.DE - reference = ( - "https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=2" - ) + reference = "https://dhss.delaware.gov/dss/childcr/" def formula(person, period, parameters): p = parameters(period).gov.states.de.dss.poc diff --git a/policyengine_us/variables/gov/states/de/dss/poc/de_poc_copay.py b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_copay.py index 9b43cbf951f..07d77f5dd52 100644 --- a/policyengine_us/variables/gov/states/de/dss/poc/de_poc_copay.py +++ b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_copay.py @@ -10,7 +10,7 @@ class de_poc_copay(Variable): defined_for = StateCode.DE reference = ( "https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11004.shtml", - "https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=3", + "https://dhss.delaware.gov/dss/childcr/", ) def formula(spm_unit, period, parameters): diff --git a/policyengine_us/variables/gov/states/de/dss/poc/de_poc_maximum_weekly_benefit.py b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_maximum_weekly_benefit.py index e2ae0abdeee..b31561ed6c7 100644 --- a/policyengine_us/variables/gov/states/de/dss/poc/de_poc_maximum_weekly_benefit.py +++ b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_maximum_weekly_benefit.py @@ -11,22 +11,25 @@ class de_poc_maximum_weekly_benefit(Variable): label = "Delaware Purchase of Care maximum weekly benefit per child" definition_period = MONTH defined_for = "de_poc_eligible_child" - reference = ( - "https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=2", - "https://www.dhss.delaware.gov/dhss/dss/childcare.html", - ) + reference = ("https://dhss.delaware.gov/dss/childcr/",) def formula(person, period, parameters): p = parameters(period).gov.states.de.dss.poc.rates provider_type = person("de_poc_provider_type", period) age_group = person("de_poc_age_group", period) + is_center = provider_type == DEPOCProviderType.CENTER base_rate = where( - provider_type == DEPOCProviderType.CENTER, + is_center, p.center[age_group], p.family_home[age_group], ) + special_needs_rate = where( + is_center, + p.special_needs.center[age_group], + p.special_needs.family_home[age_group], + ) return where( person("is_disabled", period.this_year), - base_rate * (1 + p.special_needs_rate_increase), + special_needs_rate, base_rate, ) diff --git a/policyengine_us/variables/gov/states/de/dss/poc/de_poc_provider_type.py b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_provider_type.py index 2dfc2b57cda..830c7f875de 100644 --- a/policyengine_us/variables/gov/states/de/dss/poc/de_poc_provider_type.py +++ b/policyengine_us/variables/gov/states/de/dss/poc/de_poc_provider_type.py @@ -14,6 +14,4 @@ class de_poc_provider_type(Variable): definition_period = MONTH label = "Delaware Purchase of Care child care provider type" defined_for = StateCode.DE - reference = ( - "https://www.dhss.delaware.gov/dhss/dss/files/pocbillingguidance.pdf#page=2" - ) + reference = "https://dhss.delaware.gov/dss/childcr/" diff --git a/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_eligible_child.py b/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_eligible_child.py index 280214b1d2b..e26a1185459 100644 --- a/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_eligible_child.py +++ b/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_eligible_child.py @@ -9,7 +9,7 @@ class de_poc_eligible_child(Variable): defined_for = StateCode.DE reference = ( "https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11003.shtml", - "https://www.dhss.delaware.gov/dhss/dss/files/pocprovhndbk.pdf#page=14", + "https://dhss.delaware.gov/wp-content/uploads/sites/11/dss/pdf/PurchaseofCareProviderHandbook_FINAL1_25_2023.pdf#page=14", ) def formula(person, period, parameters): diff --git a/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_income_eligible.py b/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_income_eligible.py index 3215cb6fa58..8c2897852d8 100644 --- a/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_income_eligible.py +++ b/policyengine_us/variables/gov/states/de/dss/poc/eligibility/de_poc_income_eligible.py @@ -9,7 +9,7 @@ class de_poc_income_eligible(Variable): defined_for = StateCode.DE reference = ( "https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11003.shtml", - "https://www.dhss.delaware.gov/dhss/dss/childcare.html", + "https://dhss.delaware.gov/dss/childcr/", ) def formula(spm_unit, period, parameters): From 40d16750bf5a3073cca0b7593f8f8af896a47873 Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 25 Mar 2026 15:33:28 -0400 Subject: [PATCH 6/8] Add pre-Oct-2025 FPL rates for Delaware POC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - initial_eligibility: 185% FPL (2024) → 200% FPL (Oct 2025) - redetermination: 200% FPL (2024) → 300% FPL (Oct 2025) Co-Authored-By: Claude Opus 4.6 (1M context) --- .../states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml | 3 +++ .../gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml index 4c328e54b1c..bf6a0d7ce39 100644 --- a/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml +++ b/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml @@ -1,5 +1,8 @@ description: Delaware limits the Purchase of Care program to new applicants with income at or below this share of the federal poverty level. values: + # Effective July 1, 2024 + 2024-01-01: 1.85 + # Updated for FY2026 per DSS eligibility table (Oct 2025-Sep 2026) 2025-10-01: 2 metadata: diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml index 03033b4c500..e6f65aca8c6 100644 --- a/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml +++ b/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml @@ -1,5 +1,8 @@ description: Delaware limits the Purchase of Care program to enrolled families with income at or below this share of the federal poverty level at redetermination. values: + # Effective July 1, 2024 + 2024-01-01: 2 + # Updated for FY2026 per DSS eligibility table (Oct 2025-Sep 2026) 2025-10-01: 3 metadata: From a7aa7b010157cf729eea03ec7381b291b3a13d19 Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 25 Mar 2026 15:35:12 -0400 Subject: [PATCH 7/8] Remove unused excess_burden_fpl_rate parameter The 40% FPL excess financial burden copay waiver requires net income after shelter/utility deductions, which are not modeled. The 150% FPL gross income waiver already covers all families below that threshold. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../de/dss/poc/copay/excess_burden_fpl_rate.yaml | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 policyengine_us/parameters/gov/states/de/dss/poc/copay/excess_burden_fpl_rate.yaml diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/copay/excess_burden_fpl_rate.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/copay/excess_burden_fpl_rate.yaml deleted file mode 100644 index c511c164eda..00000000000 --- a/policyengine_us/parameters/gov/states/de/dss/poc/copay/excess_burden_fpl_rate.yaml +++ /dev/null @@ -1,13 +0,0 @@ -description: Delaware waives the copayment for families below this share of the federal poverty level due to excessive financial burden under the Purchase of Care program. -values: - 2025-10-01: 0.4 - -metadata: - unit: /1 - period: year - label: Delaware Purchase of Care excessive burden copayment waiver FPL rate - reference: - - title: 16 Del. Admin. Code 11004, Section 11004.7.1 - href: https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11004.shtml - - title: Delaware DSS Child Care Services - Income Eligibility Table - href: https://dhss.delaware.gov/dss/childcr/ From 91068c5fadb6ae81b0a29868c5ec0ef5b2edacfb Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 25 Mar 2026 15:48:18 -0400 Subject: [PATCH 8/8] Add SB 325 reference for FPL threshold increases SB 325 (FY2025 Operating Budget) authorized POC eligibility expansion to 200% FPL. The 300% FPL redetermination threshold is from the current DSS eligibility table. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml | 2 ++ .../gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml index bf6a0d7ce39..93d05ac7b91 100644 --- a/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml +++ b/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/initial_eligibility.yaml @@ -14,3 +14,5 @@ metadata: href: https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11003.shtml - title: Delaware DSS Child Care Services - Income Eligibility Table href: https://dhss.delaware.gov/dss/childcr/ + - title: SB 325 (152nd GA) - FY2025 Operating Budget, POC expansion to 200% FPL + href: https://legis.delaware.gov/BillDetail/141569 diff --git a/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml b/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml index e6f65aca8c6..789534f85d6 100644 --- a/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml +++ b/policyengine_us/parameters/gov/states/de/dss/poc/income/fpl_rate/redetermination.yaml @@ -14,3 +14,5 @@ metadata: href: https://regulations.delaware.gov/AdminCode/title16/Department%20of%20Health%20and%20Social%20Services/Division%20of%20Social%20Services/11004.shtml - title: Delaware DSS Child Care Services - Income Eligibility Table href: https://dhss.delaware.gov/dss/childcr/ + - title: SB 325 (152nd GA) - FY2025 Operating Budget, POC eligibility expansion + href: https://legis.delaware.gov/BillDetail/141569