Skip to content

Implement Arkansas School Readiness Assistance (SRA / formerly CCAP)#8324

Draft
hua7450 wants to merge 2 commits into
PolicyEngine:mainfrom
hua7450:ar-ccap
Draft

Implement Arkansas School Readiness Assistance (SRA / formerly CCAP)#8324
hua7450 wants to merge 2 commits into
PolicyEngine:mainfrom
hua7450:ar-ccap

Conversation

@hua7450
Copy link
Copy Markdown
Collaborator

@hua7450 hua7450 commented May 15, 2026

Summary

Implements Arkansas's School Readiness Assistance (SRA) program (formerly CCAP, transferred from AR DHS to AR Department of Education / Office of Early Childhood in June 2025; SRA-era rates effective Nov 1, 2025). Covers both Low-Income (LI) and Employment-Sponsored Subsidy (ESS) eligibility tracks with the full four-dimensional provider rate table (zone × age × care type × full-time/part-time).

Closes #8323.

Regulatory Authority

Program Overview

  • Administration: AR Department of Education, Office of Early Childhood (OEC). DCCECE transferred from AR DHS to ADE in June 2025.
  • Effective date modeled: 2025-10-01 onwards. CCAP-era (pre-2025-10-01) deferred to a follow-up PR — the structures differ materially (QRIS-based copay vs income-tier × age-group copay, county Rate Cap vs two-zone flat rates).
  • Eligibility tracks modeled: Low-Income (LI) and Employment-Sponsored Subsidy (ESS, 24-month window after TEA exit).

Eligibility

Requirement Source How Modeled
Child under 13 FSU Manual §4.1 / Title 16 Div 22 Rule 8 §3.1.4 is_ar_sra_age_eligible, param eligibility/child_age_limit=13
Child US citizen / qualified alien / refugee FSU §4.1.1 Reuses federal is_ccdf_immigration_eligible_child
Family income ≤ 85% SMI CCDF Plan §2.2.4 is_ar_sra_income_eligible, param eligibility/income_smi_rate=0.85
Assets ≤ $1,000,000 CCDF Plan §2.2.6 is_ar_sra_asset_eligible (delegates to is_ccdf_asset_eligible); see Verification TODO
Family resides in Arkansas FSU §4.1.3 defined_for = StateCode.AR + ar_sra_zone state guard
LI: all adults active ≥ 30 hr/wk FSU §4.1 + R&R Nov 2025 is_ar_sra_li_activity_eligible, param activity_hours_li=30
ESS Yr1: ≥ 20 hr/wk FSU §4.1 / R&R is_ar_sra_ess_eligible, params activity_hours_ess_year_1=20, ess_year_1_window_months=12
ESS Yr2: ≥ 25 hr/wk FSU §4.1 / R&R params activity_hours_ess_year_2=25, ess_window_months=24

Benefit Calculation

The state pays a daily rate by zone × age category × care type × full-time/part-time, scaled by an income-tier state share. The family's daily copay equals base_rate × (1 − state_share). The total monthly subsidy is summed across eligible children as min(pre_subsidy_childcare_expenses − copay, max_monthly_state_payment).

  • Zones (2): Benton/Washington Counties (Northwest AR) vs Statewide.
  • Age categories (4): Infant / Toddler / Preschool / School-Aged.
  • Care types (5): Regular / Night-Weekend / Special Needs Level 1 (SN1) / SN2 / SN3.
  • Time (2): Full-Time / Part-Time.
  • Income tiers (4): ≤40% SMI (no-copay floor for non-school-aged), >40-60% SMI, >60-75% SMI, >75-85% SMI.
  • School-aged exception: state share at ≤40% SMI is 80% (not 100%), so school-aged children always have a copay.

ESS Track Modeling

Mirrors the California stage-3 pattern using two bare-input variables on the SPM unit:

  • was_tea_recipient (YEAR, bool, default False)
  • months_since_tea_exit (MONTH, int, default 0)

ESS Year 1 = months_since_tea_exit ∈ [1, 12]; ESS Year 2 = (12, 24]. Activity-hour thresholds and the 24-month window are parameter-driven.

Not Modeled (by design)

What Source Why Excluded
ESS lifetime limits (60 mo LI / 24 mo ESS) FSU §5.4 PE doesn't simulate cumulative enrollment history
Provider 15% charge-above policy CCDF Plan §3.1.2(e) Provider-side, doesn't reduce family copay
Quality Enhancement Payment OEC QEP Chart Nov 2025 Paid to provider only; doesn't affect family copay
Absentee day allowance (12-16 days/trimester) R&R Nov 2025 rule 10 Provider invoice detail; not benefit-level
Disabled-child age extension above 13 Undocumented in AR sources No regulatory citation available
SSN requirement (each child) FSU §4.1.4 Administrative requirement, not eligibility-determining in PE
Pre-2025-10-01 CCAP era Out of scope; era toggle leaves it disabled. Different rate/copay structure deferred to follow-up PR

Verification TODO

The following values are flagged as undocumented in AR sources (peer-state defaults) or as open ambiguities. Please verify against authoritative AR sources before merging:

  1. Age-category month boundaries (rates/age_category_months.yaml): Infant 0-17 mo, Toddler 18-35 mo, Preschool 36-71 mo, School-Aged 72+ mo. AR sources are silent on the month boundaries; values follow peer-state convention. Parameter-driven so a future correction is a single-file change.
  2. FT vs PT threshold (rates/full_time_hours_threshold.yaml=30): 30 hr/wk is a common peer-state default; AR sources do not specify the FT/PT cutoff explicitly.
  3. No-copay threshold parameter is orphan (rates/no_copay_smi_threshold.yaml=0.40): the threshold is currently encoded only as the LE_40 enum boundary in ar_sra_income_tier.py. Either wire the parameter into the formula or remove the file.
  4. Asset-limit parameter is orphan (eligibility/asset_limit.yaml=1_000_000): is_ar_sra_asset_eligible delegates to the federal is_ccdf_asset_eligible reading gov.hhs.ccdf.asset_limit. If that federal limit ≠ $1M the AR-specific $1M threshold per CCDF Plan §2.2.6 is not actually enforced. Add direct test coverage and either wire the AR param into a state-specific check or document that the federal CCDF limit governs.
  5. REQ-021 care-type dimension untested: rates table populates all 5 care types but tests only cover REGULAR — add cases for NIGHT_WEEKEND, SN1, SN2, SN3.
  6. LI activity threshold ambiguity: R&R Nov 2025 says 30 hr/wk (modeled value); the "Am I Eligible" leaflet says 20 hr/wk. R&R treated as authoritative; flagged for re-verification with OEC FAQ.
  7. No-copay-threshold ambiguity: the Nov 2025 rate sheet uses 40% SMI as the 100% state-pay tier (for ages younger than school-age); a separate family letter says "at or below federal poverty level." Modeled per the rate sheet; flagged for re-verification.
  8. ESS Yr1/Yr2 boundary literal: is_ar_sra_ess_eligible.py:22 uses literal 12 for the year-1/year-2 cutoff. Move into the existing ess_year_1_window_months parameter so it's not a magic number in the formula.
  9. Page-anchor gaps for R&R citations: 7 files cite R_&_R__Nov_2025_(English)_(1)_OEC.pdf (2 pages) without #page=XX — add anchors before merge.

Files Added

policyengine_us/parameters/gov/states/ar/ade/oec/sra/
├── in_effect.yaml
├── eligibility/
│   ├── activity_hours_ess_year_1.yaml
│   ├── activity_hours_ess_year_2.yaml
│   ├── activity_hours_li.yaml
│   ├── asset_limit.yaml
│   ├── child_age_limit.yaml
│   ├── ess_window_months.yaml
│   ├── ess_year_1_window_months.yaml
│   └── income_smi_rate.yaml
├── income/
│   ├── excluded_sources.yaml
│   └── sources.yaml
└── rates/
    ├── age_category_months.yaml
    ├── base_rate.yaml
    ├── full_time_hours_threshold.yaml
    ├── no_copay_smi_threshold.yaml
    ├── partial_subsidy_smi_threshold.yaml
    └── state_share_by_tier.yaml

policyengine_us/variables/gov/states/ar/ade/oec/sra/
├── ar_child_care_subsidies.py
├── ar_sra.py
├── ar_sra_age_category.py
├── ar_sra_care_type.py
├── ar_sra_income_tier.py
├── ar_sra_time_category.py
├── ar_sra_zone.py
├── months_since_tea_exit.py
├── was_tea_recipient.py
├── eligibility/
│   ├── is_ar_sra_age_eligible.py
│   ├── is_ar_sra_asset_eligible.py
│   ├── is_ar_sra_child_eligible.py
│   ├── is_ar_sra_eligible.py
│   ├── is_ar_sra_ess_eligible.py
│   ├── is_ar_sra_income_eligible.py
│   └── is_ar_sra_li_activity_eligible.py
├── income/
│   └── ar_sra_countable_income.py
└── rates/
    ├── ar_sra_daily_base_rate.py
    ├── ar_sra_daily_copay.py
    ├── ar_sra_daily_state_payment.py
    └── ar_sra_state_share.py

policyengine_us/tests/policy/baseline/gov/states/ar/ade/oec/sra/
├── integration.yaml
├── eligibility/
│   ├── ar_sra_age_eligible.yaml
│   ├── ar_sra_asset_eligible.yaml
│   ├── ar_sra_child_eligible.yaml
│   ├── ar_sra_eligible.yaml
│   ├── ar_sra_ess_eligible.yaml
│   ├── ar_sra_in_effect.yaml
│   ├── ar_sra_income_eligible.yaml
│   └── ar_sra_li_activity_eligible.yaml
├── income/
│   └── ar_sra_countable_income.yaml
└── rates/
    ├── ar_sra_age_category.yaml
    ├── ar_sra_daily_base_rate.yaml
    ├── ar_sra_daily_copay.yaml
    ├── ar_sra_daily_state_payment.yaml
    ├── ar_sra_income_tier.yaml
    ├── ar_sra_state_share.yaml
    ├── ar_sra_time_category.yaml
    └── ar_sra_zone.yaml

Test Plan

  • 83 AR SRA tests pass locally: policyengine-core test policyengine_us/tests/policy/baseline/gov/states/ar/ade/oec/sra -c policyengine_us
  • CI passes
  • Verification TODO items above resolved (especially items 3-5 which represent real gaps, not just ambiguities)

@hua7450 hua7450 changed the title Implement Arkansas Child Care Assistance Program (CCAP) Implement Arkansas School Readiness Assistance (SRA / formerly CCAP) May 15, 2026
@codecov
Copy link
Copy Markdown

codecov Bot commented May 15, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (8cb60e7) to head (375eba7).
⚠️ Report is 23 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##              main     #8324    +/-   ##
==========================================
  Coverage   100.00%   100.00%            
==========================================
  Files            3        21    +18     
  Lines           63       316   +253     
  Branches         0         1     +1     
==========================================
+ Hits            63       316   +253     
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.

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.

Implement Arkansas Child Care Assistance Program (CCAP)

1 participant