Skip to content

Add Connecticut CCAP (Care 4 Kids)#7778

Open
hua7450 wants to merge 9 commits intoPolicyEngine:mainfrom
hua7450:ct-ccap
Open

Add Connecticut CCAP (Care 4 Kids)#7778
hua7450 wants to merge 9 commits intoPolicyEngine:mainfrom
hua7450:ct-ccap

Conversation

@hua7450
Copy link
Collaborator

@hua7450 hua7450 commented Mar 13, 2026

Summary

Implements Connecticut Care 4 Kids (C4K) child care subsidy program in PolicyEngine.

Closes #7777

C4K is Connecticut's CCDF-funded child care assistance program, administered by the Office of Early Childhood (OEC). This implementation covers the complete benefit calculation pipeline: child eligibility, two-tier income eligibility (initial vs. continuing), countable income with exclusions and deductions, sliding-scale family fee, multi-dimensional payment rate lookup (5 regions x 4 provider types x 3 age groups x 4 care levels), special needs supplements, accreditation bonuses, and final subsidy computation. Two rate periods are modeled: Jan-Jun 2025 and Jul 2025-Jun 2026 (11% increase). Reuses existing federal CCDF infrastructure for asset eligibility, immigration eligibility, SMI standards, and enrollment status.

Regulatory Authority

Income Eligibility Tests

Initial Application: < 60% SMI

New applicants must have gross countable income below 60% of State Median Income for their family size.

  • Source: CGA 2023-R-0249; RCSA 17b-749-05(a)
  • Effective Oct 1, 2023 (raised from 50% SMI)
  • Uses is_enrolled_in_ccdf to distinguish new applicants from continuing recipients

Continuing Recipients: < 85% SMI

Active recipients at redetermination must have income below 85% of SMI.

  • Source: C4K-POL-24-01; Governor announcement Oct 2024
  • Effective Oct 1, 2024 (raised from 65% SMI)

SMI Standards

Uses federal hhs_smi variable which computes State Median Income by state and family size from HHS-published figures.

  • FY 2024-2025: 100% SMI for family of 4 = $145,853
  • Source: C4K-POL-24-01

Income Deductions & Exemptions

Countable Income (RCSA 17b-749-05(b))

Gross earnings of all parents/adult family members + unearned income of ALL family members. Implemented via sources.yaml parameter list with 11 income types:

  • Earned: employment_income, self_employment_income, farm_income
  • Unearned: social_security, pension_income, unemployment_compensation, workers_compensation, alimony_income, rental_income, veterans_benefits, disability_benefits

Excluded Income (RCSA 17b-749-05(b)(2))

22+ income types excluded by omission from the sources list:

  • TFA cash benefits, SNAP, EITC payments
  • Child support received
  • Student grants/loans/scholarships
  • Earnings of minor children (non-parents)
  • Interest/dividends under $600/year, lump sum under $600/year, cash gifts under $1,200/year
  • Tax refunds, disaster assistance, government rental subsidies, energy assistance, and others

Deductions (RCSA 17b-749-05(c))

  • Self-employment business expenses: self_employment_income is already net of IRS standard deductions
  • Child support paid: child_support_expense subtracted via deductions.yaml parameter

Income Standards

SMI-based thresholds by family size (FY 2024-2025, source: C4K-POL-24-01):

Family Size 60% SMI (Initial) 85% SMI (Continuing) 100% SMI
1 $45,505 $64,467 $75,843
2 $59,507 $84,303 $99,180
3 $73,509 $104,139 $122,516
4 $87,511 $123,975 $145,853
5 $101,512 $143,811 $169,189
6 $115,514 $163,647 $192,525
7 $118,139 $167,366 $196,901
8 $120,765 $171,085 $201,277

Benefit Calculation

Formula

subsidy = max(approved_monthly_cost - family_fee, 0)

Where:

  1. Weekly payment rate = lookup by [region][provider_type][care_level][age_group] (240 rate cells per period)
  2. Monthly approved cost = weekly_rate x WEEKS_IN_YEAR / 12 (annualized, then monthly)
  3. Special needs supplement = +15% if child has special needs (RCSA 17b-749-13)
  4. Accreditation bonus = +5% if provider is accredited (RCSA 17b-749-13; CGA 2020-R-0274)
  5. Family fee = gross_countable_income x fee_percentage (from SMI bracket sliding scale)
  6. Subsidy = max(approved_cost - family_fee, 0)

Family Fee Sliding Scale

Pre-January 2025 (source: RCSA 17b-749-13(f)):

Income % of SMI Fee % of Gross Income
< 20% SMI 2%
20% to < 30% SMI 4%
30% to < 40% SMI 6%
40% to < 50% SMI 8%
50% to 85% SMI 10%

Effective January 1, 2025 (source: C4K-POL-24-02):

Income % of SMI Fee % of Gross Income
< 20% SMI 0% (waived)
20% to < 40% SMI 3%
40% to < 60% SMI 5%
60% to 85% SMI 7%

Rules: Families with only unearned income have no fee. Fee allocated to youngest child first.

Payment Rate Structure

5 regions x 4 provider types x 3 age groups x 4 care levels = 240 rate cells per period.

Care Levels: Full-Time Plus (51-65 hrs/wk), Full-Time (35-50), Half-Time (16-34), Quarter-Time (1-15)

Provider Types: Centers/Group Homes/School Programs, Licensed Family Child Care Homes, Unlicensed Relative Care, Recreational Programs (Summer)

Age Groups: Infant/Toddler, Pre-School, School-Age

Regions (county-to-region approximation): Eastern, North Central, Northwest, South Central, Southwest

Rate Periods:

Example weekly rates (Jul 2025, Centers, Full-Time Plus):

Age Group Eastern North Central Northwest South Central Southwest
Infant/Toddler $424 $559 $475 $549 $696
Pre-School $339 $372 $366 $384 $447
School-Age $238 $262 $275 $302 $314

Supplements

  • Special needs: +15% on payment rate
  • Accreditation bonus: +5% on payment rate
  • Both are multiplicative and can stack

Requirements Coverage

REQ Description Param Variable Test
REQ-001 CT residency defined_for=StateCode.CT all vars all tests use state_code: CT
REQ-003 Child age <13/<19 special needs age_threshold/child.yaml, special_needs_child.yaml ct_c4k_eligible_child ct_c4k_eligible_child.yaml (9 cases)
REQ-004 Immigration eligibility reuses federal ct_c4k_eligible_child (reuses is_ccdf_immigration_eligible_child) ct_c4k_eligible_child.yaml cases 1,7
REQ-006 Child is dependent reuses federal ct_c4k_eligible_child (reuses is_tax_unit_dependent) ct_c4k_eligible_child.yaml case 6
REQ-007 Initial income <60% SMI income/initial_limit_smi.yaml ct_c4k_income_eligible ct_c4k_income_eligible.yaml cases 1-2,5
REQ-008 Continuing income <85% SMI income/continuing_limit_smi.yaml ct_c4k_income_eligible ct_c4k_income_eligible.yaml cases 3-4,6
REQ-009 85% SMI reporting threshold covered by REQ-008 covered by REQ-008 covered by REQ-008
REQ-010 Countable = gross earnings + unearned income/sources.yaml (11 types) ct_c4k_countable_income ct_c4k_countable_income.yaml (5 cases)
REQ-011 22+ excluded income types omitted from sources.yaml ct_c4k_countable_income ct_c4k_countable_income.yaml case 5
REQ-012 Self-employment IRS deductions sources.yaml includes self_employment_income (net) ct_c4k_countable_income ct_c4k_countable_income.yaml case 4
REQ-013 Child support paid deducted income/deductions.yaml ct_c4k_countable_income ct_c4k_countable_income.yaml case 3
REQ-014 SMI by family size reuses federal hhs_smi ct_c4k_income_eligible ct_c4k_income_eligible.yaml cases 5-6
REQ-015 Pre-2025 family fee scale family_fee/rate.yaml (2020-01-01 brackets) ct_c4k_family_fee pre-2025 brackets in param
REQ-016 Post-2025 family fee scale (7% cap) family_fee/rate.yaml (2025-01-01 brackets) ct_c4k_family_fee ct_c4k_family_fee.yaml (6 cases)
REQ-017 Fee rules (unearned-only exempt) -- ct_c4k_family_fee (has_earned_income check) ct_c4k_family_fee.yaml case 5
REQ-019 Rates: 5 regions x 4 providers x 3 ages x 4 levels rate/**/*.yaml (16 files) ct_c4k_payment_rate ct_c4k_payment_rate.yaml (9 cases)
REQ-020 Rate periods Jan-Jun 2025, Jul 2025+ rate files with 2025-01-01 and 2025-07-01 entries ct_c4k_payment_rate ct_c4k_payment_rate.yaml cases 1-2,5
REQ-021 Town-to-region (county approx) region/*.yaml (5 files) ct_c4k_region ct_c4k_region.yaml (8 cases, all 8 CT counties)
REQ-022 Weekly-to-monthly conversion code uses WEEKS_IN_YEAR/12 (52/12=4.33) ct_c4k_payment_rate integration tests
REQ-023 Care levels FTP/FT/HT/QT care_level.yaml ct_c4k_care_level ct_c4k_care_level.yaml (8 cases)
REQ-025 Special needs +15% special_needs_supplement.yaml ct_c4k_payment_rate ct_c4k_payment_rate.yaml cases 6,8
REQ-026 Accreditation +5% accreditation_bonus.yaml ct_c4k_payment_rate + ct_c4k_provider_accredited ct_c4k_payment_rate.yaml cases 7-8
REQ-027 Subsidy = max(cost - fee, 0) -- ct_c4k ct_c4k.yaml (3 cases) + integration.yaml (7 cases)
REQ-028 Asset test (federal CCDF $1M) reuses federal ct_c4k_eligible (reuses is_ccdf_asset_eligible) ct_c4k_eligible.yaml case 4
REQ-030 TFA categorical eligibility -- ct_c4k_eligible (uses ct_tfa_eligible) ct_c4k_eligible.yaml case 6

Coverage: 24/25 fully covered, 1/25 partial (REQ-022: weekly-to-monthly uses 52/12=4.333 vs. specified 4.3 -- ~0.8% discrepancy)

Not Modeled

REQ Description Reason
REQ-002 Activity test (employed/self-employed/JFES/teen parent) Not simulatable -- work/activity status is a bare input (meets_ccdf_activity_test)
REQ-005 Child support cooperation requirement Administrative requirement, not simulatable
REQ-018 Fee set at application until redetermination Temporal administrative process, not simulatable in a static model
REQ-024 Max care hours 12/day, 65/wk, 280/month Enforcement rule; rate schedule already stops at 65 hrs/wk
REQ-029 Priority groups PG1-PG6 Wait list management, administrative process

hua7450 and others added 2 commits March 13, 2026 09:07
Closes PolicyEngine#7777

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…yEngine#7777)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@codecov
Copy link

codecov bot commented Mar 13, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (19ec305) to head (f5011d4).
⚠️ Report is 47 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##              main     #7778    +/-   ##
==========================================
  Coverage   100.00%   100.00%            
==========================================
  Files            3        13    +10     
  Lines           33       212   +179     
==========================================
+ Hits            33       212   +179     
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

hua7450 and others added 7 commits March 13, 2026 10:51
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add Jan 2024 and Jul 2024 rate data to all 16 C4K payment rate
parameter files (center, family, relative, recreational × 4 care
levels). Fixes microsimulation crash for 2024 where rate parameter
lookups failed with empty vectorial nodes. Remove lessons/agent-lessons.md
which duplicates local memory.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Change all C4K variables to definition_period = MONTH (except aggregator)
- Fix care_level bracket amounts to match Enum indices directly (remove - 1 hack)
- Fix 2 swapped values in family/quarter_time.yaml (NC/NW School-Age 2024-07-01)
- Remove spurious 2025-01-01 entries that were artifacts of the swap
- Remove unnecessary index.yaml files
- Add comment noting county approximation limitation for C4K regions
  (C4K uses towns, not counties; PolicyEngine lacks town-level geography)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ncome

- Consolidate 16 rate files into 4 with care_level Enum breakdown
- Simplify ct_c4k_payment_rate.py from 100+ lines to ~20 lines
- Fix care_level bracket amounts to match Enum indices (remove -1 hack)
- Fix 2 swapped values in family quarter-time (NC/NW School-Age Jul 2024)
- Change all C4K variables to MONTH definition_period
- Update ct_c4k.py formula for monthly computation
- Cap ct_c4k_countable_income at 0 (child_support_expense can exceed income)
- Add county approximation comment for C4K regions (towns vs counties)
- Remove index.yaml files and sources/working_references.md
- Update all test files for MONTH periods with correct monthly values
- All 122 tests pass

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix is_disabled YEAR→MONTH period bug in ct_c4k_payment_rate.py
- Add C4K-POL-24-02 reference for 2025 family fee schedule
- Specify RCSA 17b-749-13 subsections: (d)(1) accreditation, (c)(11) special needs
- Add 45 CFR 98.21(b) federal CCDF reference for 85% SMI continuing limit
- Add Jul 2025 and pre-2025 rate period tests
- Add pre-2025 family fee bracket test (4% at 25% SMI)
- Add age group boundary tests (ages 3, 5, 6)
- Remove redundant eligible_child test case

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@hua7450 hua7450 marked this pull request as ready for review March 18, 2026 15:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add Connecticut Child Care Assistance Program (CCAP)

1 participant