Skip to content

Conversation

@hua7450
Copy link
Collaborator

@hua7450 hua7450 commented Dec 15, 2025

Summary

Fixes #6778

Implements the Illinois Prevention Initiative (PI) program, administered by the Illinois State Board of Education (ISBE). PI provides early, continuous, and comprehensive child development and family support services to expectant parents and families with children birth to age 3.

Regulatory Authority

Program Overview

Aspect Prevention Initiative (PI)
Target Expectant parents & families with children birth to age 3
Services Home visiting, developmental screenings, family support
Funding/Child (FY2024) $13,383 (center-based)
Funding/Child (FY2025) $13,379 (center-based)
Minimum Score 50 points

Eligibility Model

Based on the ISBE Prevention Initiative Eligibility Form, PI uses a weighted point system:

Basic Eligibility

  • Child under 3 years OR pregnant woman
  • Family income ≤ 400% FPL

Weighted Priority Score

PI assigns points based on risk factors. Minimum score to be enrolled is 50 points.

Highest Priority Factors (50 points each)

Factor # Factor Modeled Variable
1 Homeless (McKinney-Vento) is_homeless
2 Youth in Care (foster care) is_in_foster_care
3 Early Intervention (EI) or developmental delay has_developmental_delay
4 Income ≤ 50% FPL and/or TANF il_pi_is_deep_poverty
5 Non-English speaking home is_non_english_speaking_home

Note on Factor 3: The form specifies "Child enrolled in Early Intervention (EI) or the child has been identified through implementation of a research-based child developmental screening tool as having a potential developmental delay." We use has_developmental_delay as a proxy since EI enrollment data is not available.

Other Priority Factors (25 points each)

Factor # Factor Modeled Variable
6 Income ≤ 100% FPL il_pi_is_low_income
7 Parent didn't complete high school parent_has_less_than_high_school_education
8 Child/parent born outside US is_born_outside_us
9 Siblings in EI or Special Education Requires new input variable
10 Active Duty Military family military_basic_pay > 0
11 Parent currently age 21 or younger il_pi_is_young_parent_family
12 History of low student achievement Requires new input variable
13 History of child abuse or neglect Requires new input variable
14 History of domestic violence Requires new input variable
15 Substance abuse history/needs treatment Requires new input variable
16 Tobacco use in home Requires new input variable
17 Chronic or terminal illness Requires new input variable
18 Household has developmental delay/disability il_pi_has_developmental_delay
19 Mental illness/depression/PTSD Requires new input variable
20 Death in immediate family Requires new input variable
21 Non-parent caregiver raising child Requires new input variable
22 Low birth weight/NICU stay Requires new input variable
23 Parent incarcerated/history of incarceration Requires new input variable
24 High mobility/transience Requires new input variable
25 Child experienced trauma Requires new input variable
26 Prenatal diagnosis detected Requires new input variable
27 High lead levels Requires new input variable
28 Geriatric pregnancy (age 40+) il_pi_has_geriatric_pregnancy
29-30 Program specific N/A Community-defined factors

Lower Priority Factors (10 points each)

Factor # Factor Modeled Variable
31 Receiving services from another agency Requires new input variable
32 Socially or geographically isolated Requires new input variable
33 Teen parent at birth of first child il_isbe_was_teen_parent_at_first_birth
34 One delay on screening tool Requires new input variable
35 Single parent Derived from is_tax_unit_head_or_spouse
36 Poverty (≤ 200% FPL) il_pi_is_poverty
37 Other health issue Requires new input variable
38-39 Program specific N/A Community-defined factors

Summary of Modeled Factors

Category Total Factors Modeled Coverage
Highest Priority (50 pts) 5 5 100%
Other Priority (25 pts) 25 8 32%
Lower Priority (10 pts) 9 4 44%
Total 39 17 44%

Note: Public benefits (SNAP, WIC, Medicaid, CCAP) are listed on the eligibility form for income verification purposes only - they do not award points. Only TANF receipt awards points as part of Factor 4.

Eligibility Formula

PI Eligible = Demographic Eligible AND Income Eligible AND Risk Eligible

Where:
  Demographic Eligible = Child under 3 OR Pregnant
  Income Eligible = Family income ≤ 400% FPL
  Risk Eligible = Priority Score ≥ 50 points

Income Definition

Shared with PFA/PFAE via il_isbe_countable_income. Per ISBE guidelines, countable income includes:

  • Earnings from work (gross, before deductions)
  • Child support, alimony
  • Pensions, retirement, Social Security
  • Workers' comp, unemployment, SSI, VA benefits, disability

Excluded: SNAP, FDPIR, WIC, TANF, federal education benefits, foster payments

Benefit Amounts

Program FY2024 FY2025 Source
PI (center-based) $13,383 $13,379 Smart Start Press Releases

Calculations:

  • FY2024: $9.39M ÷ 702 children = $13,383
  • FY2025: $6.85M ÷ 512 children = $13,379

New/Updated Variables

PI-Specific Variables

Variable Entity Description
il_pi Person PI benefit amount
il_pi_eligible Person Full PI eligibility
il_pi_demographic_eligible Person Child under 3 or pregnant
il_pi_basic_eligible Person Demographic + income eligible
il_pi_risk_eligible Person Priority score ≥ 50
il_pi_priority_score Person Total weighted priority score
il_pi_highest_priority_score Person Score from 50-pt factors
il_pi_other_priority_score Person Score from 25-pt factors
il_pi_lower_priority_score Person Score from 10-pt factors
il_pi_is_deep_poverty Person Income ≤ 50% FPL or receives TANF
il_pi_is_low_income Person Income ≤ 100% FPL
il_pi_is_poverty Person Income ≤ 200% FPL
il_pi_is_young_parent_family SPMUnit Any parent ≤ 21 in household
il_pi_has_developmental_delay SPMUnit Household has disability/developmental delay
il_pi_has_geriatric_pregnancy SPMUnit Pregnant woman age 40+

Shared ISBE Variables

Variable Entity Description
il_isbe_income_eligible Person Income ≤ 400% FPL (shared with PFA/PFAE)
il_isbe_countable_income SPMUnit Countable income for ISBE programs
il_isbe_was_teen_parent_at_first_birth SPMUnit Was teen at first child's birth

New Demographic Input Variables

Variable Entity Description
is_non_english_speaking_home Household Primary language not English
has_developmental_delay Person Has a developmental delay
parent_has_less_than_high_school_education Household Parent didn't complete HS
is_born_outside_us Person Born outside the US
has_no_prior_formal_early_learning Person No prior formal early learning

Parameters

Parameter Value Description
gov.states.il.isbe.pi.benefit.amount $13,383 (2024), $13,379 (2025) Per-child funding (center-based)
gov.states.il.isbe.pi.eligibility.age_threshold.child 3 Max age for child eligibility
gov.states.il.isbe.pi.eligibility.age_threshold.young_parent 21 Max age for young parent factor
gov.states.il.isbe.pi.eligibility.risk_factors.minimum_score 50 Minimum score for enrollment
gov.states.il.isbe.pi.eligibility.priority.geriatric_pregnancy_age 40 Age threshold for geriatric pregnancy
gov.states.il.isbe.pi.eligibility.income.deep_poverty_rate 0.5 50% FPL threshold
gov.states.il.isbe.pi.eligibility.income.low_income_rate 1.0 100% FPL threshold
gov.states.il.isbe.pi.eligibility.income.poverty_rate 2.0 200% FPL threshold

Test Coverage

  • Unit tests for each variable with formula
  • Integration tests with realistic family scenarios
  • Priority score calculation tests with multiple factor combinations
  • Boundary tests including 45-point ineligible case and age 21 threshold
  • 57 total test cases

🤖 Generated with Claude Code

@codecov
Copy link

codecov bot commented Dec 15, 2025

Codecov Report

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

Additional details and impacted files
@@             Coverage Diff             @@
##             main     #6983      +/-   ##
===========================================
+ Coverage   98.21%   100.00%   +1.78%     
===========================================
  Files           7        15       +8     
  Lines         112       213     +101     
  Branches        1         0       -1     
===========================================
+ Hits          110       213     +103     
+ Misses          1         0       -1     
+ Partials        1         0       -1     
Flag Coverage Δ
unittests 100.00% <100.00%> (+1.78%) ⬆️

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 hua7450 marked this pull request as ready for review December 19, 2025 17:15
@PavelMakarchuk
Copy link
Collaborator

PR Review: Illinois Prevention Initiative (PI)

🟡 Overall Assessment: APPROVE with Suggestions

This is a well-structured early childhood program (birth to age 3) with a sophisticated 3-tier weighted point system. All CI checks pass. The implementation correctly models the ISBE Prevention Initiative Eligibility Form's priority scoring, though there are a few areas that should be addressed.


🟢 Strengths

Implementation Quality:

  • Excellent 3-tier point structure (50/25/10 points) matching the ISBE form
  • Proper use of adds attribute for aggregating priority scores
  • Correct entity hierarchy (Person, SPMUnit, Household)
  • Proper entity attribute access patterns (spm_unit.any(), spm_unit.sum())
  • Good reuse of shared ISBE infrastructure (il_isbe_income_eligible, il_isbe_countable_income)
  • Clear documentation of modeled vs unmodeled factors (17 of 39 factors = 44%)

Reference Quality:

  • Core statutory references verified (105 ILCS 5/2-3.89, 23 Ill. Adm. Code 235.10)
  • Age under 3 properly supported by both statute and regulation
  • Benefit amounts correctly derived from Smart Start press releases

Test Coverage:

  • 69 test cases as documented
  • Age boundaries (0, 1, 2, 3) well tested
  • Geriatric pregnancy boundary (age 40) tested
  • Good integration tests with realistic family scenarios

🟡 Should Address

1. Hard-Coded Point Values

The tier point values (50, 25, 10) are hard-coded in formulas instead of parameterized:

File Line Value
il_pi_highest_priority_score.py 37 * 50
il_pi_other_priority_score.py 52 * 25
il_pi_lower_priority_score.py 36 * 10

Consider creating parameters:

  • gov.states.il.isbe.pi.eligibility.priority.points.highest: 50
  • gov.states.il.isbe.pi.eligibility.priority.points.other: 25
  • gov.states.il.isbe.pi.eligibility.priority.points.lower: 10

2. Missing defined_for on SPMUnit Variables

Two SPMUnit-level variables are missing defined_for = StateCode.IL:

  • il_pi_has_developmental_delay.py
  • il_pi_has_geriatric_pregnancy.py

3. Missing Unit Test File

The variable il_pi_priority_score (which aggregates the three component scores) has no dedicated unit test file. While tested in integration, a il_pi_priority_score.yaml would strengthen coverage.

4. Parameter Metadata Inconsistency

geriatric_pregnancy_age.yaml uses 0000-01-01 as effective date, while other parameters use 2015-01-01. Also missing period: year in metadata.


🟢 Suggestions (Optional)

1. Missing Score Boundary Tests

The 50-point threshold is critical but lacks precise boundary tests:

  • Score = 45 (below threshold) - not tested
  • Score = 49 (one below) - not tested

Note: Given the point values (10, 25, 50), achieving exactly 49 points is mathematically impossible, but 45 is achievable (10+10+25).

2. TANF Path Not Tested

The il_pi_is_deep_poverty variable has an OR condition (income ≤ 50% FPL OR receives TANF), but no test covers the TANF path specifically.

3. Income Boundary Tests

All FPL threshold tests use values "clearly" above or below thresholds. Consider adding exact boundary tests.

4. Young Parent Age Boundary

The age 21 threshold is not tested (formula uses <= 21, so 21 should qualify).


📊 Validation Summary

Check Result
CI Status ✅ All checks pass
Hard-coded Values 🟡 Point values (50, 25, 10)
Reference Quality ✅ Core statutes verified
Vectorization ✅ Patterns work correctly
Entity/Period Usage 🟡 2 missing defined_for
Test Coverage 🟡 Good, minor gaps

📝 Notes

Program Structure (Well Documented):

  • Demographic: Child under 3 OR pregnant woman
  • Income: ≤ 400% FPL (shared with PFA/PFAE)
  • Risk: Priority score ≥ 50 points
    • Highest (50 pts): homeless, foster care, developmental delay, deep poverty, non-English home
    • Other (25 pts): 7 modeled factors including young parent, geriatric pregnancy
    • Lower (10 pts): teen parent, single parent, 200% FPL poverty

Known Limitation (Well Documented):
17 of 39 factors (44%) are modeled. The remaining factors require new input variables (sibling in EI, abuse history, etc.) which is appropriately documented.

Relationship to PR #6982:
This PR shares ISBE infrastructure with PFA/PFAE (income calculation, teen parent detection). If both PRs are merged, ensure no conflicts in the shared files.


Verdict: APPROVE with Suggestions - Ready for merge after addressing the defined_for attributes. The hard-coded point values and test gaps are recommended improvements but not blocking.

🤖 Generated with Claude Code

@PavelMakarchuk
Copy link
Collaborator

@hua7450 can you implement suggestions above

@PavelMakarchuk PavelMakarchuk merged commit 0f8628b into PolicyEngine:main Dec 21, 2025
10 checks passed
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.

Early Childhood Prevention Initiative (PI)

2 participants