Skip to content

Add Connecticut CCAP (Care 4 Kids)#7778

Draft
hua7450 wants to merge 6 commits intoPolicyEngine:mainfrom
hua7450:ct-ccap
Draft

Add Connecticut CCAP (Care 4 Kids)#7778
hua7450 wants to merge 6 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

Files Added

policyengine_us/
  parameters/gov/states/ct/oec/c4k/
    index.yaml
    age_threshold/
      child.yaml                          # Age <13 threshold
      special_needs_child.yaml            # Age <19 for special needs
      age_group.yaml                      # Age group boundaries (infant/preschool/school-age)
    income/
      initial_limit_smi.yaml              # 60% SMI (with historical 50%)
      continuing_limit_smi.yaml           # 85% SMI (with historical 65%)
      sources.yaml                        # 11 countable income types
      deductions.yaml                     # child_support_expense
    family_fee/
      rate.yaml                           # Sliding scale: pre-2025 (2-10%) and post-2025 (0-7%)
    rate/
      index.yaml
      center/
        full_time_plus.yaml               # 5 regions x 3 age groups, 2 periods
        full_time.yaml
        half_time.yaml
        quarter_time.yaml
      family/
        full_time_plus.yaml
        full_time.yaml
        half_time.yaml
        quarter_time.yaml
      relative/
        full_time_plus.yaml
        full_time.yaml
        half_time.yaml
        quarter_time.yaml
      recreational/
        full_time_plus.yaml
        full_time.yaml
        half_time.yaml
        quarter_time.yaml
    region/
      eastern.yaml                        # County-to-region mapping
      north_central.yaml
      northwest.yaml
      south_central.yaml
      southwest.yaml
    special_needs_supplement.yaml          # 15%
    accreditation_bonus.yaml              # 5%
    care_level.yaml                       # Hour thresholds for FTP/FT/HT/QT
  variables/gov/states/ct/oec/c4k/
    ct_c4k.py                             # Final subsidy calculation (SPMUnit)
    ct_c4k_countable_income.py            # Gross countable income (SPMUnit)
    ct_c4k_family_fee.py                  # Sliding-scale family fee (SPMUnit)
    ct_c4k_payment_rate.py                # Rate lookup with supplements (Person)
    ct_c4k_care_level.py                  # Care level enum from hours/week (Person)
    ct_c4k_age_group.py                   # Age group enum (Person)
    ct_c4k_region.py                      # Region enum from county (Household)
    ct_c4k_provider_type.py               # Provider type enum (Person, input)
    ct_c4k_provider_accredited.py         # Accreditation flag (Person, input)
    ct_child_care_subsidies.py            # Adds C4K to child_care_subsidies aggregator
    eligibility/
      ct_c4k_eligible.py                  # Overall eligibility (SPMUnit)
      ct_c4k_eligible_child.py            # Child eligibility (Person)
      ct_c4k_income_eligible.py           # Two-tier income eligibility (SPMUnit)
  tests/policy/baseline/gov/states/ct/oec/c4k/
    ct_c4k.yaml                           # 3 subsidy calculation cases
    ct_c4k_eligible.yaml                  # Overall eligibility cases
    ct_c4k_eligible_child.yaml            # 9 child eligibility cases
    ct_c4k_income_eligible.yaml           # Income eligibility cases
    ct_c4k_countable_income.yaml          # 5 income calculation cases
    ct_c4k_family_fee.yaml                # 6 family fee cases
    ct_c4k_payment_rate.yaml              # 9 payment rate cases
    ct_c4k_care_level.yaml                # 8 care level cases
    ct_c4k_age_group.yaml                 # Age group cases
    ct_c4k_region.yaml                    # 8 region mapping cases (all CT counties)
    integration.yaml                      # 7 end-to-end integration cases

Totals: 34 parameter files + 13 variable files + 11 test files = 58 files

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 (4bf7a1e).
⚠️ Report is 8 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       231   +198     
==========================================
+ Hits            33       231   +198     
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 4 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>
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