Add Vermont Child Care Assistance Program (CCAP)#7769
Add Vermont Child Care Assistance Program (CCAP)#7769MaxGhenis merged 15 commits intoPolicyEngine:mainfrom
Conversation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Closes PolicyEngine#7768 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #7769 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 19 13 -6
Lines 297 201 -96
=========================================
- Hits 297 201 -96
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
…d test name Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…into vt-ccap # Conflicts: # policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py
- Backdate rates to 2023-07-02 (Act 76 simplified rate structure) - Add Jan 1, 2024 registered home rates before Jun 30 differential reduction - Fix FPL limit: 350% from 2009, 400% from Apr 7 2024, 575% from Oct 6 2024 - Backdate family share scale to 2009 with pre-April bracket at 150% FPL - Add preschool age boundary change to 72 months at 2025-07-13 - Fix #page= references on 8 variable files - Add pre-Oct-2024 income eligibility tests for 350% FPL limit - Run make format Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Replace 3 separate age_group files (infant_max, toddler_max, preschool_max) with single age_group/months.yaml bracket parameter using .calc() - Replace 2 separate care_schedule files (part_time_max, full_time_max) with single care_schedule/hours.yaml bracket parameter using .calc() - Simplify both variables to return p.xxx.calc() directly (Enum index mapping) - Add Jane Smith and Honey Child Care test cases from Understanding Payments PDF - Both PDF examples match exactly: $337/wk and $193/wk respectively Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Program Review: Vermont CCFAP (PR #7769)Source Documents
Critical (Must Fix)
Should Address
Suggestions
PDF Audit SummaryNote: The PDF audit agents (pdf-rules, pdf-rates) could not read repo files due to a branch mismatch. The reference validator successfully compared all repo values against the PDFs and serves as the authoritative audit result.
Validation Summary
Review Severity: COMMENTThe implementation is high quality with no value mismatches and thorough test coverage (113+ cases). The three critical findings are all reference/documentation issues (wrong page anchor, missing page anchors, uncorroborated historical values) rather than logic or value errors. The program logic correctly implements Vermont CCFAP regulations, Act 76 expansion, and current income guidelines. The benefit formula reproduces official state examples (Jane Smith, Honey Child Care) exactly. Next StepsTo auto-fix issues: |
- Fix page anchor in vt_ccfap_eligible.py (#page=4 → #page=6) - Add #page=13 to Act 76 href in family_share/scale.yaml - Update statute ref to 33 V.S.A. Section 3512(a)(2) in fpl_limit.yaml - Correct 350% FPL date from 2009-02-09 to 2021-10-01 (Act 45) - Add date suffix "(July 2, 2023)" to Act 76 rate refs in both rate files - Add activity test failure test case in vt_ccfap_eligible.yaml - Add defensive division guard in vt_ccfap_family_share.py Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… document payment regime - Remove formula from vt_ccfap_provider_type — now a pure input variable (LICENSED_CENTER or REGISTERED_HOME). Eliminates silent misclassification of legally-exempt/informal care (LE_GC/LE_STD/LE_ENH) as registered home, since VT's published rate schedules only cover licensed centers and registered family child care homes. - Add vt_ccfap_meets_activity_test with formula deriving service need from household data: employment, self-employment, college enrollment, or disability (adult or child). Falls back to meets_ccdf_activity_test for non-derivable needs (seeking employment, parental leave, etc.). - Document post-2023-12-16 payment regime in vt_ccfap.py: VT pays the state rate regardless of provider charges per CCFAP Understanding Payments guide. - Update all test files to use vt_ccfap_provider_type directly instead of childcare_provider_type_group. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Summary
Implements the Vermont Child Care Financial Assistance Program (CCFAP) in PolicyEngine, covering eligibility determination, income testing, rate lookups, family share calculation, and benefit computation.
Closes #7768
Regulatory Authority
Income Eligibility Tests
is_ccdf_asset_eligible(dcf.vermont.gov/benefits/ccfap)is_ccdf_immigration_eligible_child(45 CFR 98.20)Income Deductions & Exemptions
16 income exclusion categories per CCFAP Regulations Section II B 2. Implementation uses an inclusion-list approach (
income/sources.yaml) listing 12 counted income sources. Excluded income types are implicitly omitted.Income Standards
Using 2025 Federal Poverty Guidelines at 575% FPL (maximum eligibility threshold):
Family Share (Copayment)
Current (Oct 6, 2024): $0/wk at ≤175% FPL, $50-$425/wk at 175-575% FPL in $25 increments per 25% FPL step.
Pre-April 2024: $0/wk at ≤150% FPL, $25-$200/wk at 150-350% FPL. Source: Jan 2024 Legislative Report p15
Benefit Calculation
Formula (Understanding Payments Guide):
Verified against PDF examples:
Rate History
Rates are backdated to July 2, 2023 (Act 76 simplified rate structure). Source: Rate Increase Per Act 76 (July 2, 2023)
Age group boundary change: Preschool upper limit moves from 60 months to 72 months ("3 up to 6 years old") effective Jul 13, 2025. Source: Capped Rates Important Definitions
Requirements Coverage
defined_for = StateCode.VTstate_code: VTis_ccdf_immigration_eligible_child(reused)vt_ccfap_eligible_child.yamlage_group/months.yamlvt_ccfap_eligible_childvt_ccfap_eligible_child.yaml(10 cases)vt_ccfap_meets_activity_testvt_ccfap_eligible.yamlCase 12is_ccdf_asset_eligible(reused)vt_ccfap_eligible.yamlincome/fpl_limit.yamlvt_ccfap_income_eligiblevt_ccfap_income_eligible.yaml(11 cases)income/sources.yaml(12 sources)vt_ccfap_countable_incomeage_group/months.yaml(bracket)vt_ccfap_age_groupvt_ccfap_age_group.yaml(7 cases)care_schedule/hours.yaml(bracket)vt_ccfap_care_schedulevt_ccfap_care_schedule.yaml(11 cases)vt_ccfap_provider_typevt_ccfap_provider_type.yaml(2 cases)rates/licensed_center.yaml,rates/registered_home.yamlvt_ccfap_state_ratevt_ccfap_state_rate.yaml(24 cases)family_share/scale.yamlvt_ccfap_family_sharevt_ccfap_family_share.yaml(14 cases)vt_ccfapvt_ccfap.yaml(10 cases),integration.yaml(13 cases)vt_reach_up_eligible(reused)receives_or_needs_protective_services(reused)is_in_foster_care(reused)income/fpl_limit.yaml(3.5→4.0→5.75)vt_ccfap_income_eligibleCoverage: 18/18 in-scope requirements implemented (100%)
Not Modeled
receives_adoption_subsidyvariable availableFiles Added
Files Added
Totals: 9 parameter files, 13 variable files, 10 test files (32 files)
Test plan