From 698fd81b850a18042c12cddaaf12dcc45eeb51e5 Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 14 Jan 2026 16:07:30 -0500 Subject: [PATCH 1/4] Initial commit for Illinois Tollway Pass Partnership implementation Starting implementation of Illinois I-PASS Assist program. Documentation and parallel development will follow. Co-Authored-By: Claude Opus 4.5 From 971a10cb583c09047d404dc60a519c1cc3742b0e Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 14 Jan 2026 16:45:36 -0500 Subject: [PATCH 2/4] Add Illinois I-PASS Assist program eligibility - Add I-PASS Assist program parameters for income limits, account minimum, auto-replenishment threshold, and transponder deposit amounts - Add eligibility variables for income-based and categorical eligibility - Add comprehensive YAML tests with unit and integration test cases - Add working_references.md documenting program sources Co-Authored-By: Claude Opus 4.5 --- changelog_entry.yaml | 4 + .../account_opening_minimum/amount.yaml | 13 + .../auto_replenishment_threshold/amount.yaml | 13 + .../ipass_assist/eligibility/fpg_limit.yaml | 13 + .../transponder_deposit/amount.yaml | 13 + .../il_ipass_assist_categorical_eligible.yaml | 306 ++++++++++++ .../il_ipass_assist_eligible.yaml | 395 ++++++++++++++++ .../il_ipass_assist_income_eligible.yaml | 302 ++++++++++++ .../il/tollway/ipass_assist/integration.yaml | 445 ++++++++++++++++++ .../il_ipass_assist_categorical_eligible.py | 20 + .../ipass_assist/il_ipass_assist_eligible.py | 20 + .../il_ipass_assist_income_eligible.py | 22 + sources/working_references.md | 287 +++++++++++ 13 files changed, 1853 insertions(+) create mode 100644 policyengine_us/parameters/gov/states/il/tollway/ipass_assist/account_opening_minimum/amount.yaml create mode 100644 policyengine_us/parameters/gov/states/il/tollway/ipass_assist/auto_replenishment_threshold/amount.yaml create mode 100644 policyengine_us/parameters/gov/states/il/tollway/ipass_assist/eligibility/fpg_limit.yaml create mode 100644 policyengine_us/parameters/gov/states/il/tollway/ipass_assist/transponder_deposit/amount.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_eligible.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_income_eligible.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/integration.yaml create mode 100644 policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.py create mode 100644 policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_eligible.py create mode 100644 policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_income_eligible.py create mode 100644 sources/working_references.md diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..b12a0a80aad 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: minor + changes: + added: + - Illinois I-PASS Assist program eligibility. diff --git a/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/account_opening_minimum/amount.yaml b/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/account_opening_minimum/amount.yaml new file mode 100644 index 00000000000..c4f899823b2 --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/account_opening_minimum/amount.yaml @@ -0,0 +1,13 @@ +description: Illinois requires this amount as the minimum to open an account under the I-PASS Assist program. +values: + 2021-06-23: 4 + +metadata: + unit: currency-USD + period: year + label: Illinois I-PASS Assist account opening minimum + reference: + - title: I-PASS Assist Program - Illinois Tollway + href: https://agency.illinoistollway.com/assist + - title: Illinois Tollway Significantly Expands I-PASS Assist Program + href: https://agency.illinoistollway.com/-/illinois-tollway-significantly-expands-i-pass-assist-program-1 diff --git a/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/auto_replenishment_threshold/amount.yaml b/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/auto_replenishment_threshold/amount.yaml new file mode 100644 index 00000000000..bde50fc021c --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/auto_replenishment_threshold/amount.yaml @@ -0,0 +1,13 @@ +description: Illinois sets this amount as the auto-replenishment minimum under the I-PASS Assist program. +values: + 2021-06-23: 4 + +metadata: + unit: currency-USD + period: year + label: Illinois I-PASS Assist auto-replenishment minimum + reference: + - title: I-PASS Assist Program - Illinois Tollway + href: https://agency.illinoistollway.com/assist + - title: Illinois Tollway Significantly Expands I-PASS Assist Program + href: https://agency.illinoistollway.com/-/illinois-tollway-significantly-expands-i-pass-assist-program-1 diff --git a/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/eligibility/fpg_limit.yaml b/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/eligibility/fpg_limit.yaml new file mode 100644 index 00000000000..4644b3bd49b --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/eligibility/fpg_limit.yaml @@ -0,0 +1,13 @@ +description: Illinois limits income to this share of the federal poverty level under the I-PASS Assist program. +values: + 2021-06-23: 2.5 + +metadata: + unit: /1 + period: year + label: Illinois I-PASS Assist income limit as share of FPL + reference: + - title: I-PASS Assist Program - Illinois Tollway + href: https://agency.illinoistollway.com/assist + - title: Illinois Tollway Significantly Expands I-PASS Assist Program + href: https://agency.illinoistollway.com/-/illinois-tollway-significantly-expands-i-pass-assist-program-1 diff --git a/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/transponder_deposit/amount.yaml b/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/transponder_deposit/amount.yaml new file mode 100644 index 00000000000..d09b82b3e01 --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/transponder_deposit/amount.yaml @@ -0,0 +1,13 @@ +description: Illinois requires this amount as a transponder deposit under the I-PASS Assist program. +values: + 2021-06-23: 0 + +metadata: + unit: currency-USD + period: year + label: Illinois I-PASS Assist transponder deposit + reference: + - title: I-PASS Assist Program - Illinois Tollway + href: https://agency.illinoistollway.com/assist + - title: Illinois Tollway Significantly Expands I-PASS Assist Program + href: https://agency.illinoistollway.com/-/illinois-tollway-significantly-expands-i-pass-assist-program-1 diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.yaml new file mode 100644 index 00000000000..41f556fa0d6 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.yaml @@ -0,0 +1,306 @@ +# Illinois I-PASS Assist categorical eligibility tests +# Categorical eligibility is granted to households receiving: +# - SNAP (Supplemental Nutrition Assistance Program) +# - TANF (Temporary Assistance for Needy Families) +# - AABD (Aid to the Aged, Blind, and Disabled) +# +# Source: https://agency.illinoistollway.com/assist + +- name: Case 1, SNAP recipient is categorically eligible. + period: 2025-01 + input: + people: + person1: + age: 35 + spm_units: + spm_unit: + members: [person1] + is_snap_eligible: true + households: + household: + members: [person1] + state_code: IL + output: + il_ipass_assist_categorical_eligible: true + +- name: Case 2, TANF recipient is categorically eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + person2: + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + il_tanf_eligible: true + households: + household: + members: [person1, person2] + state_code: IL + output: + il_ipass_assist_categorical_eligible: true + +- name: Case 3, AABD recipient is categorically eligible. + period: 2025-01 + input: + people: + person1: + age: 70 + il_aabd_eligible_person: true + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: IL + output: + il_ipass_assist_categorical_eligible: true + +- name: Case 4, no benefit recipient is not categorically eligible. + # Income must be above SNAP limit (~$20,345 at 130% FPL) to have no SNAP benefit + period: 2025-01 + input: + people: + person1: + age: 40 + employment_income: 45_000 # Above both I-PASS (250% FPL) and SNAP (130% FPL) limits + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: IL + output: + il_ipass_assist_categorical_eligible: false + +- name: Case 5, multiple benefits still categorically eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + il_aabd_eligible_person: false + person2: + age: 8 + spm_units: + spm_unit: + members: [person1, person2] + is_snap_eligible: true + il_tanf_eligible: true + households: + household: + members: [person1, person2] + state_code: IL + output: + il_ipass_assist_categorical_eligible: true + +# ============================================================================ +# EDGE CASE TESTS +# ============================================================================ + +- name: Case 6, all three benefits simultaneously. + # Tests OR logic with all pathways active + period: 2025-01 + input: + people: + person1: + age: 75 + il_aabd_eligible_person: true + person2: + age: 35 + person3: + age: 10 + spm_units: + spm_unit: + members: [person1, person2, person3] + is_snap_eligible: true + il_tanf_eligible: true + households: + household: + members: [person1, person2, person3] + state_code: IL + output: + # SNAP=true OR TANF=true OR AABD=true -> all three true + il_ipass_assist_categorical_eligible: true + +- name: Case 7, minimal SNAP benefit amount. + # Tests boundary: snap > 0 with very small benefit + period: 2025-01 + input: + people: + person1: + age: 45 + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1] + snap: 12 # Minimum SNAP benefit is typically small + il_tanf_eligible: false + households: + household: + members: [person1] + state_code: IL + output: + # $12/year SNAP > 0 -> categorically eligible + il_ipass_assist_categorical_eligible: true + +- name: Case 8, income above SNAP limit results in zero SNAP benefit. + # Tests that high income results in no SNAP benefit + # SNAP requires income <= 130% FPL (~$20,345 for 1 person) + period: 2025-01 + input: + people: + person1: + age: 45 + employment_income: 50_000 # Well above SNAP limit + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: IL + output: + # Income $50,000 > 130% FPL -> no SNAP -> NOT categorically eligible + il_ipass_assist_categorical_eligible: false + +- name: Case 9, SNAP only in mixed household. + # Tests that only one benefit type is needed + period: 2025-01 + input: + people: + person1: + age: 50 + il_aabd_eligible_person: false + person2: + age: 48 + il_aabd_eligible_person: false + person3: + age: 22 + il_aabd_eligible_person: false + person4: + age: 16 + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + is_snap_eligible: true + il_tanf_eligible: false + households: + household: + members: [person1, person2, person3, person4] + state_code: IL + output: + # SNAP only -> categorically eligible + il_ipass_assist_categorical_eligible: true + +- name: Case 10, AABD only pathway single person. + # Tests AABD as sole categorical pathway + period: 2025-01 + input: + people: + person1: + age: 68 + il_aabd_eligible_person: true + spm_units: + spm_unit: + members: [person1] + snap: 0 + il_tanf_eligible: false + households: + household: + members: [person1] + state_code: IL + output: + # AABD only -> categorically eligible + il_ipass_assist_categorical_eligible: true + +- name: Case 11, large household with only TANF. + # Tests TANF as sole pathway with larger family + period: 2025-01 + input: + people: + person1: + age: 28 + il_aabd_eligible_person: false + person2: + age: 9 + il_aabd_eligible_person: false + person3: + age: 6 + il_aabd_eligible_person: false + person4: + age: 3 + il_aabd_eligible_person: false + person5: + age: 1 + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5] + is_snap_eligible: false + il_tanf_eligible: true + households: + household: + members: [person1, person2, person3, person4, person5] + state_code: IL + output: + # TANF only -> categorically eligible + il_ipass_assist_categorical_eligible: true + +- name: Case 12, large household with high income has no benefits. + # Tests that larger households with high income have no categorical eligibility + # 6-person SNAP limit at 130% FPL is approximately $39,000 + period: 2025-01 + input: + people: + person1: + age: 45 + employment_income: 60_000 # High income + person2: + age: 43 + employment_income: 40_000 + person3: + age: 20 + person4: + age: 18 + person5: + age: 15 + person6: + age: 12 + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5, person6] + households: + household: + members: [person1, person2, person3, person4, person5, person6] + state_code: IL + output: + # Total income $100,000 well above SNAP limit -> NOT categorically eligible + il_ipass_assist_categorical_eligible: false + +- name: Case 13, elderly person with high income has no benefits. + # Tests that being elderly alone is not sufficient - need actual benefits + # High income means no SNAP, and not receiving AABD + period: 2025-01 + input: + people: + person1: + age: 85 + social_security: 35_000 # High social security income + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: IL + output: + # Income $35,000 > SNAP limit -> no SNAP + # Not receiving AABD -> no AABD + # NOT categorically eligible + il_ipass_assist_categorical_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_eligible.yaml new file mode 100644 index 00000000000..5b4c56be4ce --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_eligible.yaml @@ -0,0 +1,395 @@ +# Illinois I-PASS Assist eligibility tests +# Eligibility requires Illinois residency AND either: +# - Income eligibility (income <= 250% FPL), OR +# - Categorical eligibility (SNAP, TANF, or AABD recipient) +# +# Source: https://agency.illinoistollway.com/assist + +- name: Case 1, income eligible only pathway. + period: 2025-01 + input: + people: + person1: + age: 35 + employment_income: 30_000 # Below 250% FPL ($39,125) + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1] + is_snap_eligible: false + il_tanf_eligible: false + households: + household: + members: [person1] + state_code: IL + output: + il_ipass_assist_income_eligible: true + il_ipass_assist_categorical_eligible: false + il_ipass_assist_eligible: true + +- name: Case 2, categorical eligible only pathway. + period: 2025-01 + input: + people: + person1: + age: 40 + employment_income: 50_000 # Above 250% FPL ($39,125) + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1] + is_snap_eligible: true # SNAP makes categorically eligible + il_tanf_eligible: false + households: + household: + members: [person1] + state_code: IL + output: + il_ipass_assist_income_eligible: false + il_ipass_assist_categorical_eligible: true + il_ipass_assist_eligible: true + +- name: Case 3, both pathways eligible. + period: 2025-01 + input: + people: + person1: + age: 30 + employment_income: 18_000 # Below 250% FPL ($39,125) + il_aabd_eligible_person: false + person2: + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + is_snap_eligible: true + il_tanf_eligible: true + households: + household: + members: [person1, person2] + state_code: IL + output: + il_ipass_assist_income_eligible: true + il_ipass_assist_categorical_eligible: true + il_ipass_assist_eligible: true + +- name: Case 4, not eligible non-IL resident. + period: 2025-01 + input: + people: + person1: + age: 35 + employment_income: 30_000 # Would be income eligible if in IL + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1] + is_snap_eligible: false + il_tanf_eligible: false + households: + household: + members: [person1] + state_code: IN # Indiana, not Illinois + output: + # Not eligible because not IL resident + il_ipass_assist_eligible: false + +- name: Case 5, neither pathway and non-IL resident. + period: 2025-01 + input: + people: + person1: + age: 45 + employment_income: 60_000 # Above 250% FPL + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1] + is_snap_eligible: false + il_tanf_eligible: false + households: + household: + members: [person1] + state_code: WI # Wisconsin, not Illinois + output: + il_ipass_assist_eligible: false + +- name: Case 6, high income IL resident not eligible. + period: 2025-01 + input: + people: + person1: + age: 50 + employment_income: 75_000 # Above 250% FPL ($39,125) + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1] + is_snap_eligible: false + il_tanf_eligible: false + households: + household: + members: [person1] + state_code: IL + output: + il_ipass_assist_income_eligible: false + il_ipass_assist_categorical_eligible: false + il_ipass_assist_eligible: false + +- name: Case 7, elderly low-income person eligible via income pathway. + # Note: AABD requires very low income (similar to SSI) + # A person with high income cannot receive AABD + # This tests a realistic elderly low-income scenario + period: 2025-01 + input: + people: + person1: + age: 72 + social_security: 15_000 # Low social security income + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: IL + output: + # Income $15,000 < $39,125 (250% FPL) -> income eligible + # Low income means SNAP eligible -> categorically eligible + il_ipass_assist_income_eligible: true + il_ipass_assist_categorical_eligible: true + il_ipass_assist_eligible: true + +# ============================================================================ +# EDGE CASE TESTS +# ============================================================================ + +- name: Case 8, zero income results in SNAP benefits. + # With zero income, person is SNAP eligible and receives benefits + period: 2025-01 + input: + people: + person1: + age: 30 + employment_income: 0 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: IL + output: + # Zero income <= any FPL threshold -> income eligible + # Zero income also means SNAP eligible -> categorically eligible + # Overall: eligible via both pathways + il_ipass_assist_income_eligible: true + il_ipass_assist_categorical_eligible: true + il_ipass_assist_eligible: true + +- name: Case 9, income exactly one dollar over with no categorical. + # Tests boundary miss scenario - just barely ineligible + period: 2025-01 + input: + people: + person1: + age: 35 + employment_income: 39_126 # One dollar over 250% FPL ($39,125) + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1] + is_snap_eligible: false + il_tanf_eligible: false + households: + household: + members: [person1] + state_code: IL + output: + # Income $39,126 > $39,125 -> NOT income eligible + # No benefits -> NOT categorically eligible + # Overall: NOT eligible + il_ipass_assist_income_eligible: false + il_ipass_assist_categorical_eligible: false + il_ipass_assist_eligible: false + +- name: Case 10, very high income with categorical rescue. + # Tests that categorical eligibility overrides any income level + period: 2025-01 + input: + people: + person1: + age: 45 + employment_income: 200_000 # Very high income + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1] + is_snap_eligible: true # Categorical eligibility + il_tanf_eligible: false + households: + household: + members: [person1] + state_code: IL + output: + # Very high income -> NOT income eligible + # SNAP -> categorically eligible + # Overall: eligible via categorical pathway + il_ipass_assist_income_eligible: false + il_ipass_assist_categorical_eligible: true + il_ipass_assist_eligible: true + +- name: Case 11, large family exactly at threshold. + # Tests 8-person household at boundary + period: 2025-01 + input: + people: + person1: + age: 45 + employment_income: 61_000 + il_aabd_eligible_person: false + person2: + age: 43 + employment_income: 60_625 + il_aabd_eligible_person: false + person3: + age: 20 + il_aabd_eligible_person: false + person4: + age: 18 + il_aabd_eligible_person: false + person5: + age: 15 + il_aabd_eligible_person: false + person6: + age: 12 + il_aabd_eligible_person: false + person7: + age: 8 + il_aabd_eligible_person: false + person8: + age: 5 + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5, person6, person7, person8] + is_snap_eligible: false + il_tanf_eligible: false + households: + household: + members: [person1, person2, person3, person4, person5, person6, person7, person8] + state_code: IL + output: + # 8-person 250% FPL = $48,650 * 2.5 = $121,625 + # Total income: $61,000 + $60,625 = $121,625 (exactly at threshold) + # No benefits -> NOT categorically eligible + il_ipass_assist_income_eligible: true + il_ipass_assist_categorical_eligible: false + il_ipass_assist_eligible: true + +- name: Case 12, non-IL resident with categorical would-be-eligible. + # Tests that residency requirement applies even to categorical + period: 2025-01 + input: + people: + person1: + age: 72 + il_aabd_eligible_person: true + employment_income: 15_000 + spm_units: + spm_unit: + members: [person1] + is_snap_eligible: true + il_tanf_eligible: false + households: + household: + members: [person1] + state_code: IN # Indiana + output: + # Would be eligible via both pathways if in IL + # But not IL resident -> NOT eligible + il_ipass_assist_eligible: false + +- name: Case 13, multi-generation high-income household not eligible. + # High income household with elderly member but no benefit receipt + # AABD requires very low income - not available to this household + period: 2025-01 + input: + people: + person1: + age: 78 + social_security: 20_000 + person2: + age: 45 + employment_income: 80_000 + person3: + age: 42 + employment_income: 60_000 + person4: + age: 16 + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + households: + household: + members: [person1, person2, person3, person4] + state_code: IL + output: + # 4-person 250% FPL = $80,375 + # Total income: $20,000 + $80,000 + $60,000 = $160,000 > $80,375 + # High income means no SNAP, no AABD + il_ipass_assist_income_eligible: false + il_ipass_assist_categorical_eligible: false + il_ipass_assist_eligible: false + +- name: Case 14, single person at exact threshold with minimal SNAP. + # Tests redundant eligibility - both pathways at edge + period: 2025-01 + input: + people: + person1: + age: 35 + employment_income: 39_125 # Exactly at 250% FPL + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1] + snap: 12 # Minimal SNAP benefit + il_tanf_eligible: false + households: + household: + members: [person1] + state_code: IL + output: + # Income exactly at threshold -> income eligible + # Small SNAP benefit > 0 -> categorical eligible + # Both pathways true + il_ipass_assist_income_eligible: true + il_ipass_assist_categorical_eligible: true + il_ipass_assist_eligible: true + +- name: Case 15, income one dollar over with minimal SNAP. + # Tests categorical rescue when just missing income threshold + period: 2025-01 + input: + people: + person1: + age: 35 + employment_income: 39_126 # One dollar over 250% FPL + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1] + snap: 12 # Minimal SNAP benefit + il_tanf_eligible: false + households: + household: + members: [person1] + state_code: IL + output: + # Income one dollar over -> NOT income eligible + # Small SNAP benefit > 0 -> categorical eligible + # Overall: eligible via categorical + il_ipass_assist_income_eligible: false + il_ipass_assist_categorical_eligible: true + il_ipass_assist_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_income_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_income_eligible.yaml new file mode 100644 index 00000000000..ba59907a159 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_income_eligible.yaml @@ -0,0 +1,302 @@ +# Illinois I-PASS Assist income eligibility tests +# Income limit: 250% of Federal Poverty Guidelines +# +# 2025 FPL for contiguous US (Illinois): +# - 1 person: $15,650 * 2.5 = $39,125 +# - 2 person: $21,150 * 2.5 = $52,875 +# - 3 person: $26,650 * 2.5 = $66,625 +# - 4 person: $32,150 * 2.5 = $80,375 +# - 8 person: $48,650 * 2.5 = $121,625 +# +# Source: https://agency.illinoistollway.com/assist + +- name: Case 1, single person below 250% FPL. + period: 2025-01 + input: + state_code: IL + employment_income: 36_000 # $36,000/year < $39,125 limit + output: + il_ipass_assist_income_eligible: true + +- name: Case 2, single person above 250% FPL. + period: 2025-01 + input: + state_code: IL + employment_income: 48_000 # $48,000/year > $39,125 limit + output: + il_ipass_assist_income_eligible: false + +- name: Case 3, single person at exactly 250% FPL. + period: 2025-01 + input: + state_code: IL + employment_income: 39_125 # Exactly at 250% FPL for 1 person + output: + il_ipass_assist_income_eligible: true + +- name: Case 4, family of 4 below 250% FPL. + period: 2025-01 + input: + people: + person1: + age: 35 + employment_income: 48_000 + person2: + age: 32 + employment_income: 24_000 + person3: + age: 10 + person4: + age: 7 + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + households: + household: + members: [person1, person2, person3, person4] + state_code: IL + output: + # Total income: $72,000/year < $80,375 limit for 4-person household + il_ipass_assist_income_eligible: true + +- name: Case 5, family of 4 above 250% FPL. + period: 2025-01 + input: + people: + person1: + age: 40 + employment_income: 60_000 + person2: + age: 38 + employment_income: 30_000 + person3: + age: 12 + person4: + age: 8 + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + households: + household: + members: [person1, person2, person3, person4] + state_code: IL + output: + # Total income: $90,000/year > $80,375 limit for 4-person household + il_ipass_assist_income_eligible: false + +- name: Case 6, two-person household just below threshold. + period: 2025-01 + input: + people: + person1: + age: 45 + employment_income: 50_000 + person2: + age: 42 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: IL + output: + # Total income: $50,000/year < $52,875 limit for 2-person household + il_ipass_assist_income_eligible: true + +# ============================================================================ +# EDGE CASE TESTS +# ============================================================================ + +- name: Case 7, boundary one dollar above threshold. + # Tests that <= operator works correctly (at threshold+1 should fail) + period: 2025-01 + input: + state_code: IL + employment_income: 39_126 # $39,125 + 1 = one dollar above 250% FPL + output: + # Threshold: $15,650 * 2.5 = $39,125 + # Income $39,126 > $39,125 -> NOT eligible + il_ipass_assist_income_eligible: false + +- name: Case 8, zero income household. + # Tests minimum bound - should always be eligible + period: 2025-01 + input: + state_code: IL + employment_income: 0 + output: + # $0 <= $39,125 -> eligible + il_ipass_assist_income_eligible: true + +- name: Case 9, very large household 8 members at threshold. + # Tests FPG scaling with large household at exact boundary + # 2025 FPL for 8 people: $15,650 + 7 * $5,500 = $54,150 + # 250% FPL = $54,150 * 2.5 = $135,375 + period: 2025-01 + input: + people: + person1: + age: 45 + employment_income: 75_000 + person2: + age: 43 + employment_income: 60_375 # Total = $135,375 (exactly at threshold) + person3: + age: 20 + person4: + age: 18 + person5: + age: 15 + person6: + age: 12 + person7: + age: 8 + person8: + age: 5 + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5, person6, person7, person8] + households: + household: + members: [person1, person2, person3, person4, person5, person6, person7, person8] + state_code: IL + output: + # 8-person 250% FPL = $135,375 + # Total income: $75,000 + $60,375 = $135,375 (exactly at threshold) + il_ipass_assist_income_eligible: true + +- name: Case 10, very large household one dollar over. + # Tests boundary for large household + # 2025 FPL for 8 people: $15,650 + 7 * $5,500 = $54,150 + # 250% FPL = $54,150 * 2.5 = $135,375 + period: 2025-01 + input: + people: + person1: + age: 45 + employment_income: 75_000 + person2: + age: 43 + employment_income: 60_376 # Total = $135,376 (one dollar over) + person3: + age: 20 + person4: + age: 18 + person5: + age: 15 + person6: + age: 12 + person7: + age: 8 + person8: + age: 5 + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5, person6, person7, person8] + households: + household: + members: [person1, person2, person3, person4, person5, person6, person7, person8] + state_code: IL + output: + # 8-person 250% FPL = $135,375 + # Total income: $75,000 + $60,376 = $135,376 > $135,375 + il_ipass_assist_income_eligible: false + +- name: Case 11, single person with non-employment income. + # Tests that net income includes various sources + period: 2025-01 + input: + people: + person1: + age: 68 + social_security: 24_000 + interest_income: 5_000 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: IL + output: + # Total income: $24,000 + $5,000 = $29,000 + # 250% FPL for 1 person: $39,125 + # $29,000 < $39,125 -> eligible + il_ipass_assist_income_eligible: true + +- name: Case 12, two-person at exact threshold. + # Tests boundary for 2-person household + period: 2025-01 + input: + people: + person1: + age: 55 + employment_income: 52_875 # Exactly at 2-person 250% FPL + person2: + age: 52 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: IL + output: + # 2-person 250% FPL = $21,150 * 2.5 = $52,875 + # Income $52,875 <= $52,875 -> eligible + il_ipass_assist_income_eligible: true + +- name: Case 13, two-person one dollar above threshold. + period: 2025-01 + input: + people: + person1: + age: 55 + employment_income: 52_876 # One dollar above 2-person 250% FPL + person2: + age: 52 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: IL + output: + # 2-person 250% FPL = $52,875 + # Income $52,876 > $52,875 -> NOT eligible + il_ipass_assist_income_eligible: false + +- name: Case 14, extremely high income. + # Tests behavior with very large income values + period: 2025-01 + input: + state_code: IL + employment_income: 1_000_000 # $1 million income + output: + # Obviously above 250% FPL ($39,125) + il_ipass_assist_income_eligible: false + +- name: Case 15, three-person at exact threshold. + period: 2025-01 + input: + people: + person1: + age: 40 + employment_income: 66_625 # Exactly at 3-person 250% FPL + person2: + age: 38 + person3: + age: 10 + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: IL + output: + # 3-person 250% FPL = $26,650 * 2.5 = $66,625 + # Income $66,625 <= $66,625 -> eligible + il_ipass_assist_income_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/integration.yaml new file mode 100644 index 00000000000..87f63927a3a --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/integration.yaml @@ -0,0 +1,445 @@ +# Illinois I-PASS Assist integration tests +# Tests comprehensive eligibility scenarios with multiple household members +# +# Eligibility criteria: +# - Illinois residency required +# - Income <= 250% of Federal Poverty Guidelines, OR +# - Categorical eligibility: SNAP, TANF, or AABD recipient +# +# 2025 FPL thresholds at 250%: +# - 1 person: $15,650 * 2.5 = $39,125 +# - 2 person: $21,150 * 2.5 = $52,875 +# - 3 person: $26,650 * 2.5 = $66,625 +# - 4 person: $32,150 * 2.5 = $80,375 +# - 8 person: $48,650 * 2.5 = $121,625 +# +# Source: https://agency.illinoistollway.com/assist + +- name: Case 1, moderate-income single worker. + # Income above SNAP limit but below I-PASS limit + period: 2025-01 + input: + people: + person1: + age: 28 + employment_income: 35_000 # Above SNAP (130% FPL ~$20,345) but below I-PASS (250% FPL $39,125) + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: IL + output: + # Income: $35,000/year + # 250% FPL for 1 person: $39,125 + # $35,000 < $39,125 -> income eligible + # $35,000 > SNAP gross limit -> no SNAP -> NOT categorically eligible + il_ipass_assist_income_eligible: true + il_ipass_assist_categorical_eligible: false + il_ipass_assist_eligible: true + +- name: Case 2, low-income working family with SNAP benefits. + # Income low enough to receive SNAP (< 130% FPL for 4 = ~$41,800) + period: 2025-01 + input: + people: + person1: + age: 32 + employment_income: 24_000 + person2: + age: 30 + employment_income: 12_000 + person3: + age: 8 + person4: + age: 5 + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + households: + household: + members: [person1, person2, person3, person4] + state_code: IL + output: + # Household size: 4 + # Total income: $36,000/year < 130% FPL (~$41,800) -> SNAP eligible + # 250% FPL for 4 persons: $80,375 + # $36,000 < $80,375 -> income eligible + # Low income = SNAP benefits -> categorical eligible + il_ipass_assist_income_eligible: true + il_ipass_assist_categorical_eligible: true + il_ipass_assist_eligible: true + +- name: Case 3, senior citizen on AABD. + period: 2025-01 + input: + people: + person1: + age: 72 + social_security: 18_000 + il_aabd_eligible_person: true + spm_units: + spm_unit: + members: [person1] + is_snap_eligible: false + il_tanf_eligible: false + households: + household: + members: [person1] + state_code: IL + output: + # Income: $18,000/year (Social Security) + # 250% FPL for 1 person: $39,125 + # $18,000 < $39,125 -> income eligible + # Also AABD eligible -> categorical eligible + il_ipass_assist_income_eligible: true + il_ipass_assist_categorical_eligible: true + il_ipass_assist_eligible: true + +- name: Case 4, TANF family near income threshold. + period: 2025-01 + input: + people: + person1: + age: 28 + employment_income: 30_000 + il_aabd_eligible_person: false + person2: + age: 6 + il_aabd_eligible_person: false + person3: + age: 3 + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1, person2, person3] + is_snap_eligible: false + il_tanf_eligible: true + households: + household: + members: [person1, person2, person3] + state_code: IL + output: + # Household size: 3 + # Total income: $30,000/year + # 250% FPL for 3 persons: $66,625 + # $30,000 < $66,625 -> income eligible + # Also TANF eligible -> categorical eligible + il_ipass_assist_income_eligible: true + il_ipass_assist_categorical_eligible: true + il_ipass_assist_eligible: true + +- name: Case 5, middle-income couple just above threshold. + period: 2025-01 + input: + people: + person1: + age: 45 + employment_income: 40_000 + il_aabd_eligible_person: false + person2: + age: 42 + employment_income: 15_000 + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1, person2] + is_snap_eligible: false + il_tanf_eligible: false + households: + household: + members: [person1, person2] + state_code: IL + output: + # Household size: 2 + # Total income: $55,000/year + # 250% FPL for 2 persons: $52,875 + # $55,000 > $52,875 -> NOT income eligible + # No categorical eligibility + il_ipass_assist_income_eligible: false + il_ipass_assist_categorical_eligible: false + il_ipass_assist_eligible: false + +- name: Case 6, high-income family not eligible. + # High income above both I-PASS and SNAP limits + # Note: SNAP requires income <= 130% FPL, so high income = no SNAP + period: 2025-01 + input: + people: + person1: + age: 38 + employment_income: 50_000 + person2: + age: 36 + employment_income: 45_000 + person3: + age: 12 + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: IL + output: + # Household size: 3 + # Total income: $95,000/year + # 250% FPL for 3 persons: $66,625 + # $95,000 > $66,625 -> NOT income eligible + # $95,000 >> SNAP limit (~$34,600) -> no SNAP -> NOT categorical eligible + il_ipass_assist_income_eligible: false + il_ipass_assist_categorical_eligible: false + il_ipass_assist_eligible: false + +- name: Case 7, non-Illinois resident not eligible. + period: 2025-01 + input: + people: + person1: + age: 35 + employment_income: 20_000 # Would qualify on income + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1] + is_snap_eligible: true # Would qualify categorically + il_tanf_eligible: false + households: + household: + members: [person1] + state_code: WI # Wisconsin resident + output: + # Even though income and categorical would qualify, + # residency requirement fails + il_ipass_assist_eligible: false + +# ============================================================================ +# EDGE CASE INTEGRATION TESTS +# ============================================================================ + +- name: Case 8, boundary income exactly at 2-person threshold. + # Tests exact boundary condition for 2-person household + period: 2025-01 + input: + people: + person1: + age: 50 + employment_income: 30_000 + il_aabd_eligible_person: false + person2: + age: 48 + employment_income: 22_875 # Total = $52,875 exactly + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1, person2] + is_snap_eligible: false + il_tanf_eligible: false + households: + household: + members: [person1, person2] + state_code: IL + output: + # Household size: 2 + # Total income: $30,000 + $22,875 = $52,875 + # 250% FPL for 2 persons: $52,875 + # $52,875 <= $52,875 -> income eligible (at boundary) + il_ipass_assist_income_eligible: true + il_ipass_assist_categorical_eligible: false + il_ipass_assist_eligible: true + +- name: Case 9, boundary income one dollar above 2-person threshold. + # Tests exact boundary fail condition + period: 2025-01 + input: + people: + person1: + age: 50 + employment_income: 30_000 + il_aabd_eligible_person: false + person2: + age: 48 + employment_income: 22_876 # Total = $52,876 (one over) + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1, person2] + is_snap_eligible: false + il_tanf_eligible: false + households: + household: + members: [person1, person2] + state_code: IL + output: + # Household size: 2 + # Total income: $30,000 + $22,876 = $52,876 + # 250% FPL for 2 persons: $52,875 + # $52,876 > $52,875 -> NOT income eligible + il_ipass_assist_income_eligible: false + il_ipass_assist_categorical_eligible: false + il_ipass_assist_eligible: false + +- name: Case 10, 8-person household exactly at threshold. + # Tests maximum common household size at exact FPL boundary + period: 2025-01 + input: + people: + person1: + age: 50 + employment_income: 70_000 + il_aabd_eligible_person: false + person2: + age: 48 + employment_income: 51_625 # Total = $121,625 + il_aabd_eligible_person: false + person3: + age: 22 + il_aabd_eligible_person: false + person4: + age: 20 + il_aabd_eligible_person: false + person5: + age: 17 + il_aabd_eligible_person: false + person6: + age: 14 + il_aabd_eligible_person: false + person7: + age: 10 + il_aabd_eligible_person: false + person8: + age: 6 + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5, person6, person7, person8] + is_snap_eligible: false + il_tanf_eligible: false + households: + household: + members: [person1, person2, person3, person4, person5, person6, person7, person8] + state_code: IL + output: + # Household size: 8 + # Total income: $70,000 + $51,625 = $121,625 + # 250% FPL for 8 persons: $48,650 * 2.5 = $121,625 + # $121,625 <= $121,625 -> income eligible + il_ipass_assist_income_eligible: true + il_ipass_assist_categorical_eligible: false + il_ipass_assist_eligible: true + +- name: Case 11, zero income household receives SNAP. + # Tests minimum income bound - zero income means SNAP eligible + period: 2025-01 + input: + people: + person1: + age: 25 + employment_income: 0 + person2: + age: 3 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: IL + output: + # Household size: 2 + # Total income: $0 + # 250% FPL for 2 persons: $52,875 + # $0 <= $52,875 -> income eligible + # $0 income means SNAP eligible -> categorical eligible + il_ipass_assist_income_eligible: true + il_ipass_assist_categorical_eligible: true + il_ipass_assist_eligible: true + +- name: Case 12, low-income family with SNAP benefits. + # Tests household receiving SNAP (categorical eligibility requires low income) + period: 2025-01 + input: + people: + person1: + age: 75 + social_security: 12_000 + person2: + age: 35 + employment_income: 15_000 + person3: + age: 8 + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: IL + output: + # Household size: 3 + # Total income: $12,000 + $15,000 = $27,000 + # 250% FPL for 3 persons: $66,625 + # $27,000 < $66,625 -> income eligible + # $27,000 < SNAP gross limit (~$34,600) -> SNAP benefits -> categorical eligible + il_ipass_assist_income_eligible: true + il_ipass_assist_categorical_eligible: true + il_ipass_assist_eligible: true + +- name: Case 13, mixed income sources near threshold. + # Tests various income types combining to threshold + period: 2025-01 + input: + people: + person1: + age: 65 + social_security: 20_000 + interest_income: 3_000 + il_aabd_eligible_person: false + person2: + age: 63 + employment_income: 15_000 + il_aabd_eligible_person: false + spm_units: + spm_unit: + members: [person1, person2] + is_snap_eligible: false + il_tanf_eligible: false + households: + household: + members: [person1, person2] + state_code: IL + output: + # Household size: 2 + # Total income: $20,000 + $3,000 + $15,000 = $38,000 + # 250% FPL for 2 persons: $52,875 + # $38,000 < $52,875 -> income eligible + il_ipass_assist_income_eligible: true + il_ipass_assist_categorical_eligible: false + il_ipass_assist_eligible: true + +- name: Case 14, income just over threshold with no categorical. + # Tests boundary miss scenario - not eligible on either pathway + # Note: SNAP requires income <= 130% FPL (~$20,345), so $39,200 income = no SNAP + period: 2025-01 + input: + people: + person1: + age: 40 + employment_income: 39_200 # Just over I-PASS threshold and way over SNAP limit + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: IL + output: + # Household size: 1 + # Total income: $39,200 + # 250% FPL for 1 person: $39,125 + # $39,200 > $39,125 -> NOT income eligible + # $39,200 >> SNAP limit (~$20,345) -> no SNAP -> NOT categorical eligible + il_ipass_assist_income_eligible: false + il_ipass_assist_categorical_eligible: false + il_ipass_assist_eligible: false diff --git a/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.py b/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.py new file mode 100644 index 00000000000..2c831debbf0 --- /dev/null +++ b/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.py @@ -0,0 +1,20 @@ +from policyengine_us.model_api import * + + +class il_ipass_assist_categorical_eligible(Variable): + value_type = bool + entity = SPMUnit + definition_period = YEAR + label = "Illinois I-PASS Assist categorically eligible" + reference = ( + "https://agency.illinoistollway.com/assist", + "https://www.dhs.state.il.us/page.aspx?item=150431", + ) + defined_for = StateCode.IL + + def formula(spm_unit, period, parameters): + # Check for actual benefit receipt (snap > 0, il_tanf > 0, il_aabd > 0) + snap_recipient = spm_unit("snap", period) > 0 + tanf_recipient = spm_unit("il_tanf", period) > 0 + aabd_recipient = spm_unit("il_aabd", period) > 0 + return snap_recipient | tanf_recipient | aabd_recipient diff --git a/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_eligible.py b/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_eligible.py new file mode 100644 index 00000000000..58605c9e6cc --- /dev/null +++ b/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_eligible.py @@ -0,0 +1,20 @@ +from policyengine_us.model_api import * + + +class il_ipass_assist_eligible(Variable): + value_type = bool + entity = SPMUnit + definition_period = YEAR + label = "Illinois I-PASS Assist eligible" + reference = ( + "https://agency.illinoistollway.com/assist", + "https://www.dhs.state.il.us/page.aspx?item=150431", + ) + defined_for = StateCode.IL + + def formula(spm_unit, period, parameters): + income_eligible = spm_unit("il_ipass_assist_income_eligible", period) + categorical_eligible = spm_unit( + "il_ipass_assist_categorical_eligible", period + ) + return income_eligible | categorical_eligible diff --git a/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_income_eligible.py b/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_income_eligible.py new file mode 100644 index 00000000000..ef519bfe0ef --- /dev/null +++ b/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_income_eligible.py @@ -0,0 +1,22 @@ +from policyengine_us.model_api import * + + +class il_ipass_assist_income_eligible(Variable): + value_type = bool + entity = SPMUnit + definition_period = YEAR + label = "Illinois I-PASS Assist income eligible" + reference = ( + "https://agency.illinoistollway.com/assist", + "https://www.dhs.state.il.us/page.aspx?item=150431", + ) + defined_for = StateCode.IL + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.il.tollway.ipass_assist.eligibility + fpg = spm_unit("spm_unit_fpg", period) + # Use gross income (market income + social security) for eligibility + market_income = spm_unit("spm_unit_market_income", period) + social_security = add(spm_unit, period, ["social_security"]) + household_income = market_income + social_security + return household_income <= fpg * p.fpg_limit diff --git a/sources/working_references.md b/sources/working_references.md new file mode 100644 index 00000000000..c57e96f9e5b --- /dev/null +++ b/sources/working_references.md @@ -0,0 +1,287 @@ +# Collected Documentation + +## Illinois I-PASS Assist Program Implementation +**Collected**: 2026-01-14 +**Implementation Task**: Implement Illinois I-PASS Assist toll assistance program eligibility and benefits + +--- + +## Official Program Name + +**Federal Program**: N/A (State transportation program, not federally funded) +**State's Official Name**: I-PASS Assist +**Abbreviation**: None (commonly referred to as "I-PASS Assist") +**Administering Agency**: Illinois State Toll Highway Authority (Illinois Tollway) +**Source**: Illinois Tollway official website + +**Variable Prefix**: `il_ipass_assist` + +--- + +## Program Overview + +I-PASS Assist is an equity-focused initiative launched by the Illinois Tollway in June 2021 to support underserved communities by making tollway travel more accessible and affordable. The program helps income-eligible individuals and families access I-PASS benefits with reduced financial barriers. + +**Key Dates:** +- **Original Launch**: 2020 (limited scope, approximately 2,500 accounts) +- **Expanded Program Launch**: June 23, 2021 +- **Current Enrollment**: Over 40,000 active accounts (as of 2024) + +**Source**: [Illinois Tollway Significantly Expands I-PASS Assist Program](https://agency.illinoistollway.com/-/illinois-tollway-significantly-expands-i-pass-assist-program-1) + +--- + +## Regulatory Authority + +### Legal Framework +- **Statute**: Toll Highway Act (605 ILCS 10/) +- **Administrative Rules**: 92 Ill. Admin. Code Part 2520 (State Toll Highway Rules) +- **Program Authority**: Illinois Tollway Board of Directors resolutions + +**Note**: I-PASS Assist is a Board-approved program and is NOT explicitly codified in state statute or administrative code. The program was approved through Board resolutions in April 2021 (incentive approval) and expanded through subsequent Board actions. + +**Sources**: +- [Toll Highway Act (605 ILCS 10/)](https://www.ilga.gov/legislation/ilcs/ilcs3.asp?ActID=1746&ChapterID=45) +- [92 Ill. Admin. Code Part 2520](https://www.law.cornell.edu/regulations/illinois/title-92/part-2520) + +--- + +## Eligibility Requirements + +### Income Eligibility + +**Income Limit**: 250% of Federal Poverty Guidelines (FPL) + +**2025 Income Thresholds (48 Contiguous States)**: + +| Household Size | 100% FPL | 250% FPL (Eligibility Limit) | +|----------------|----------|------------------------------| +| 1 | $15,650 | $39,125 | +| 2 | $21,150 | $52,875 | +| 3 | $26,650 | $66,625 | +| 4 | $32,150 | $80,375 | +| 5 | $37,650 | $94,125 | +| 6 | $43,150 | $107,875 | +| 7 | $48,650 | $121,625 | +| 8 | $54,150 | $135,375 | +| Each additional | +$5,500 | +$13,750 | + +**Note**: The Illinois Tollway website showed 2024 values (e.g., $36,450 for 1 person). The program uses current FPL values, so the parameter should be stored as a rate (2.50) rather than fixed dollar amounts. + +**Source**: [I-PASS Assist Program - Illinois Tollway](https://agency.illinoistollway.com/assist) + +### Implementation Approach for Income Eligibility +- **Value**: 250% of FPL +- **Parameter**: Store as rate (2.50), not dollar amount +- **Why**: Dollar amounts change when HHS updates FPL annually + +### Categorical Eligibility + +Households currently participating in Illinois Department of Human Services (IDHS) cash and food assistance programs automatically qualify. + +**Qualifying Programs** (administered through IDHS): +1. **SNAP** (Supplemental Nutrition Assistance Program) - Explicitly confirmed +2. **TANF** (Temporary Assistance for Needy Families) - Included as "cash assistance" +3. **AABD** (Aid to the Aged, Blind, and Disabled) - Included as "cash assistance" + +**Quote from source**: "To be eligible for enrollment in I-PASS Assist, household income must not exceed 250% of Federal Poverty Guidelines as verified by the Illinois Department of Revenue or qualified by the Illinois Department of Human Services for cash and food assistance programs." + +**Sources**: +- [I-PASS Assist Program - Illinois Tollway](https://agency.illinoistollway.com/assist) +- [IDHS: I-PASS Assist](https://www.dhs.state.il.us/page.aspx?item=150431) + +### Residency Requirement + +**Residency**: Illinois residents only + +**Quote from source**: "This program covers residents of the state of Illinois." + +**Source**: [I-PASS Assist Program - Illinois Tollway](https://agency.illinoistollway.com/assist) + +### Verification Process + +Eligibility is verified through a secure web form in partnership with: +- **Illinois Department of Revenue** (for income verification) +- **Illinois Department of Human Services** (for categorical eligibility through SNAP/TANF/AABD) + +Upon completion of the form, customers receive immediate email notification of eligibility status. + +--- + +## Benefits Provided + +### Standard I-PASS Benefits (All Customers) + +1. **Toll Discount**: 50% off all Illinois Tollway tolls for passenger vehicles + - Applies to: Cars, SUVs, Motorcycles (2-axle passenger vehicles) + - Without I-PASS, customers pay double (Pay Online rate) + +**Source**: [I-PASS Account - Illinois Tollway](https://agency.illinoistollway.com/about-ipass) + +### I-PASS Assist Additional Benefits + +| Benefit | Standard I-PASS | I-PASS Assist | Savings | +|---------|-----------------|---------------|---------| +| Transponder Deposit | $10 | $0 (waived) | $10 | +| Minimum Account Opening | $20 | $4 | $16 | +| Auto-Replenishment Minimum | $10 | $4 | $6 | +| Invoice Fee Dismissal | No | Yes (eligible) | Varies | +| Free Transponder Shipping | No | Yes | Varies | + +**Detailed Benefits**: + +1. **Waived Transponder Deposit** + - Standard: $10 refundable deposit required + - I-PASS Assist: No deposit required + - **Source**: [Illinois Tollway Expands I-PASS Assist](https://agency.illinoistollway.com/-/illinois-tollway-significantly-expands-i-pass-assist-program-1) + +2. **Reduced Account Opening Minimum** + - Standard: $20 minimum prepaid tolls to open account + - I-PASS Assist: $4 minimum prepaid tolls + - **Source**: [I-PASS Assist Program](https://agency.illinoistollway.com/assist) + +3. **Reduced Auto-Replenishment Minimum** + - Standard: $10 minimum replenishment + - I-PASS Assist: $4 minimum replenishment + - **Source**: [I-PASS Assist Program](https://agency.illinoistollway.com/assist) + +4. **Invoice Fee Dismissal** + - I-PASS Assist customers may be eligible to have invoice fees dismissed once enrolled + - Also helps avoid future fees for missed tolls + - **Source**: [I-PASS Assist Program](https://agency.illinoistollway.com/assist) + +5. **Free Transponder Shipping** + - Upon approval, I-PASS transponder shipped free of charge + - Customers must add funds to activate the account + - **Source**: [I-PASS Assist Program](https://agency.illinoistollway.com/assist) + +--- + +## Implementation Notes + +### What CAN Be Simulated + +**Eligibility determination:** +- Income eligibility (income <= 250% FPL) +- Categorical eligibility (SNAP, TANF, AABD participation) +- State residency requirement + +**Benefits eligibility:** +- Whether household qualifies for I-PASS Assist +- Binary eligibility (eligible/not eligible) + +### What CANNOT Be Simulated + +**Monetary benefit calculation is limited because:** +- Toll savings depend on actual tollway usage (which varies) +- The 50% toll discount applies to ALL I-PASS customers, not just I-PASS Assist +- Invoice fee dismissal amounts vary by individual circumstances + +**The primary benefit to simulate is ELIGIBILITY, not a specific dollar benefit amount.** + +### Suggested Variable Structure + +``` +il_ipass_assist/ + eligibility/ + il_ipass_assist_income_eligible.py # Income <= 250% FPL + il_ipass_assist_categorically_eligible.py # SNAP/TANF/AABD recipient + il_ipass_assist_eligible.py # Overall eligibility +``` + +### Suggested Parameters + +```yaml +# parameters/gov/states/il/tollway/ipass_assist/eligibility/fpg_limit.yaml +description: Illinois limits household income to this share of federal poverty guidelines for I-PASS Assist eligibility. +values: + 2021-06-23: 2.50 # 250% FPL + +metadata: + unit: /1 + period: year + label: Illinois I-PASS Assist income limit as share of FPL + reference: + - title: I-PASS Assist Program - Illinois Tollway + href: https://agency.illinoistollway.com/assist +``` + +--- + +## Summary of Key Values for Implementation + +| Parameter | Value | Type | Source | +|-----------|-------|------|--------| +| Income Limit | 250% of FPL | Rate (2.50) | Illinois Tollway | +| Categorical Eligibility | SNAP, TANF, AABD | Boolean | Illinois Tollway | +| Residency | Illinois only | Boolean | Illinois Tollway | +| Effective Date | June 23, 2021 | Date | Press Release | + +--- + +## References for Metadata + +```yaml +# For parameters: +reference: + - title: I-PASS Assist Program - Illinois Tollway + href: https://agency.illinoistollway.com/assist + - title: Illinois Tollway Significantly Expands I-PASS Assist Program + href: https://agency.illinoistollway.com/-/illinois-tollway-significantly-expands-i-pass-assist-program-1 +``` + +```python +# For variables: +reference = ( + "https://agency.illinoistollway.com/assist", + "https://www.dhs.state.il.us/page.aspx?item=150431", +) +``` + +--- + +## PDFs for Future Reference + +The following PDFs contain additional information but could not be fully extracted: + +1. **I-PASS Assist One Pager (2023)** + - URL: https://illinoistollway.com/documents/20184/1344218/2023-011_IPASS+Assist+One+Pager.pdf + - Expected content: Program overview, eligibility requirements, benefits summary + +2. **I-PASS Assist Palm Card (2023)** + - URL: https://illinoistollway.com/documents/20184/1344218/2023_04_I-PASS+Assist_Palm+Card.pdf + - Expected content: Quick reference for program eligibility and application + +3. **2025 HHS Poverty Guidelines** + - URL: https://aspe.hhs.gov/sites/default/files/documents/dd73d4f00d8a819d10b2fdb70d254f7b/detailed-guidelines-2025.pdf + - Expected content: Complete FPL tables for all household sizes and percentages + +--- + +## Additional Sources Consulted + +1. **Illinois Tollway Official Website** + - [I-PASS Assist Program Page](https://agency.illinoistollway.com/assist) + - [I-PASS Account Information](https://agency.illinoistollway.com/about-ipass) + - [Toll Rates](https://agency.illinoistollway.com/toll-rates) + - [Regulations, Rules and Policies](https://agency.illinoistollway.com/about/regulations-rules-policies) + +2. **Illinois Department of Human Services** + - [IDHS I-PASS Assist Page](https://www.dhs.state.il.us/page.aspx?item=150431) + - [IDHS Additional Benefits](https://www.dhs.state.il.us/page.aspx?item=165001) + - [IDHS Cash Assistance Programs](https://www.dhs.state.il.us/page.aspx?item=29719) + +3. **Legal Resources** + - [Toll Highway Act (605 ILCS 10/)](https://www.ilga.gov/legislation/ilcs/ilcs3.asp?ActID=1746&ChapterID=45) + - [92 Ill. Admin. Code Part 2520](https://www.law.cornell.edu/regulations/illinois/title-92/part-2520) + +4. **Press Releases** + - [Illinois Tollway Significantly Expands I-PASS Assist Program (June 2021)](https://agency.illinoistollway.com/-/illinois-tollway-significantly-expands-i-pass-assist-program-1) + - [I-PASS Assist continues to expand relief (2023)](https://agency.illinoistollway.com/-/i-pass-assist-continues-to-expand-relief-for-working-individuals-and-families) + - [Illinois Tollway offers more income-eligible drivers benefits (2022)](https://agency.illinoistollway.com/-/illinois-tollway-offers-more-income-eligible-drivers-cost-saving-benefits-through-i-pass-assist-program) + +5. **Awards and Recognition** + - [IBTTA 2024 President's Award - I-PASS Assist](https://www.ibtta.org/awards/i-pass-assist) + +6. **Federal Poverty Guidelines** + - [HHS ASPE Poverty Guidelines](https://aspe.hhs.gov/topics/poverty-economic-mobility/poverty-guidelines) From 1f8da044967ab28484c89168017ac74040f92237 Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 15 Jan 2026 18:06:11 -0500 Subject: [PATCH 3/4] adjustments --- .../account_opening_minimum/amount.yaml | 13 - .../auto_replenishment_threshold/amount.yaml | 13 - .../ipass_assist/eligibility/fpg_limit.yaml | 2 +- .../transponder_deposit/amount.yaml | 13 - .../il_ipass_assist_categorical_eligible.yaml | 219 ++----------- .../il/tollway/ipass_assist/integration.yaml | 66 ++-- .../il_ipass_assist_categorical_eligible.py | 7 +- .../il_ipass_assist_income_eligible.py | 8 +- sources/working_references.md | 287 ------------------ 9 files changed, 42 insertions(+), 586 deletions(-) delete mode 100644 policyengine_us/parameters/gov/states/il/tollway/ipass_assist/account_opening_minimum/amount.yaml delete mode 100644 policyengine_us/parameters/gov/states/il/tollway/ipass_assist/auto_replenishment_threshold/amount.yaml delete mode 100644 policyengine_us/parameters/gov/states/il/tollway/ipass_assist/transponder_deposit/amount.yaml delete mode 100644 sources/working_references.md diff --git a/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/account_opening_minimum/amount.yaml b/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/account_opening_minimum/amount.yaml deleted file mode 100644 index c4f899823b2..00000000000 --- a/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/account_opening_minimum/amount.yaml +++ /dev/null @@ -1,13 +0,0 @@ -description: Illinois requires this amount as the minimum to open an account under the I-PASS Assist program. -values: - 2021-06-23: 4 - -metadata: - unit: currency-USD - period: year - label: Illinois I-PASS Assist account opening minimum - reference: - - title: I-PASS Assist Program - Illinois Tollway - href: https://agency.illinoistollway.com/assist - - title: Illinois Tollway Significantly Expands I-PASS Assist Program - href: https://agency.illinoistollway.com/-/illinois-tollway-significantly-expands-i-pass-assist-program-1 diff --git a/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/auto_replenishment_threshold/amount.yaml b/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/auto_replenishment_threshold/amount.yaml deleted file mode 100644 index bde50fc021c..00000000000 --- a/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/auto_replenishment_threshold/amount.yaml +++ /dev/null @@ -1,13 +0,0 @@ -description: Illinois sets this amount as the auto-replenishment minimum under the I-PASS Assist program. -values: - 2021-06-23: 4 - -metadata: - unit: currency-USD - period: year - label: Illinois I-PASS Assist auto-replenishment minimum - reference: - - title: I-PASS Assist Program - Illinois Tollway - href: https://agency.illinoistollway.com/assist - - title: Illinois Tollway Significantly Expands I-PASS Assist Program - href: https://agency.illinoistollway.com/-/illinois-tollway-significantly-expands-i-pass-assist-program-1 diff --git a/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/eligibility/fpg_limit.yaml b/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/eligibility/fpg_limit.yaml index 4644b3bd49b..32f93469899 100644 --- a/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/eligibility/fpg_limit.yaml +++ b/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/eligibility/fpg_limit.yaml @@ -1,6 +1,6 @@ description: Illinois limits income to this share of the federal poverty level under the I-PASS Assist program. values: - 2021-06-23: 2.5 + 2021-01-01: 2.5 metadata: unit: /1 diff --git a/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/transponder_deposit/amount.yaml b/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/transponder_deposit/amount.yaml deleted file mode 100644 index d09b82b3e01..00000000000 --- a/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/transponder_deposit/amount.yaml +++ /dev/null @@ -1,13 +0,0 @@ -description: Illinois requires this amount as a transponder deposit under the I-PASS Assist program. -values: - 2021-06-23: 0 - -metadata: - unit: currency-USD - period: year - label: Illinois I-PASS Assist transponder deposit - reference: - - title: I-PASS Assist Program - Illinois Tollway - href: https://agency.illinoistollway.com/assist - - title: Illinois Tollway Significantly Expands I-PASS Assist Program - href: https://agency.illinoistollway.com/-/illinois-tollway-significantly-expands-i-pass-assist-program-1 diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.yaml index 41f556fa0d6..21d5ac46837 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.yaml @@ -1,10 +1,8 @@ # Illinois I-PASS Assist categorical eligibility tests -# Categorical eligibility is granted to households receiving: -# - SNAP (Supplemental Nutrition Assistance Program) -# - TANF (Temporary Assistance for Needy Families) -# - AABD (Aid to the Aged, Blind, and Disabled) +# Categorical eligibility is granted to households receiving SNAP. # -# Source: https://agency.illinoistollway.com/assist +# Per IL DHS: "Customers getting SNAP may be eligible for I-PASS Assist" +# Source: https://www.dhs.state.il.us/page.aspx?item=150431 - name: Case 1, SNAP recipient is categorically eligible. period: 2025-01 @@ -23,50 +21,13 @@ output: il_ipass_assist_categorical_eligible: true -- name: Case 2, TANF recipient is categorically eligible. - period: 2025-01 - input: - people: - person1: - age: 30 - person2: - age: 5 - spm_units: - spm_unit: - members: [person1, person2] - il_tanf_eligible: true - households: - household: - members: [person1, person2] - state_code: IL - output: - il_ipass_assist_categorical_eligible: true - -- name: Case 3, AABD recipient is categorically eligible. - period: 2025-01 - input: - people: - person1: - age: 70 - il_aabd_eligible_person: true - spm_units: - spm_unit: - members: [person1] - households: - household: - members: [person1] - state_code: IL - output: - il_ipass_assist_categorical_eligible: true - -- name: Case 4, no benefit recipient is not categorically eligible. - # Income must be above SNAP limit (~$20,345 at 130% FPL) to have no SNAP benefit +- name: Case 2, no SNAP means not categorically eligible. period: 2025-01 input: people: person1: age: 40 - employment_income: 45_000 # Above both I-PASS (250% FPL) and SNAP (130% FPL) limits + employment_income: 45_000 # Above SNAP income limit spm_units: spm_unit: members: [person1] @@ -77,69 +38,17 @@ output: il_ipass_assist_categorical_eligible: false -- name: Case 5, multiple benefits still categorically eligible. - period: 2025-01 - input: - people: - person1: - age: 30 - il_aabd_eligible_person: false - person2: - age: 8 - spm_units: - spm_unit: - members: [person1, person2] - is_snap_eligible: true - il_tanf_eligible: true - households: - household: - members: [person1, person2] - state_code: IL - output: - il_ipass_assist_categorical_eligible: true - -# ============================================================================ -# EDGE CASE TESTS -# ============================================================================ - -- name: Case 6, all three benefits simultaneously. - # Tests OR logic with all pathways active - period: 2025-01 - input: - people: - person1: - age: 75 - il_aabd_eligible_person: true - person2: - age: 35 - person3: - age: 10 - spm_units: - spm_unit: - members: [person1, person2, person3] - is_snap_eligible: true - il_tanf_eligible: true - households: - household: - members: [person1, person2, person3] - state_code: IL - output: - # SNAP=true OR TANF=true OR AABD=true -> all three true - il_ipass_assist_categorical_eligible: true - -- name: Case 7, minimal SNAP benefit amount. +- name: Case 3, minimal SNAP benefit amount. # Tests boundary: snap > 0 with very small benefit period: 2025-01 input: people: person1: age: 45 - il_aabd_eligible_person: false spm_units: spm_unit: members: [person1] - snap: 12 # Minimum SNAP benefit is typically small - il_tanf_eligible: false + snap: 12 # Minimum SNAP benefit households: household: members: [person1] @@ -148,119 +57,33 @@ # $12/year SNAP > 0 -> categorically eligible il_ipass_assist_categorical_eligible: true -- name: Case 8, income above SNAP limit results in zero SNAP benefit. - # Tests that high income results in no SNAP benefit - # SNAP requires income <= 130% FPL (~$20,345 for 1 person) - period: 2025-01 - input: - people: - person1: - age: 45 - employment_income: 50_000 # Well above SNAP limit - spm_units: - spm_unit: - members: [person1] - households: - household: - members: [person1] - state_code: IL - output: - # Income $50,000 > 130% FPL -> no SNAP -> NOT categorically eligible - il_ipass_assist_categorical_eligible: false - -- name: Case 9, SNAP only in mixed household. - # Tests that only one benefit type is needed +- name: Case 4, family with SNAP is categorically eligible. period: 2025-01 input: people: person1: - age: 50 - il_aabd_eligible_person: false + age: 30 person2: - age: 48 - il_aabd_eligible_person: false - person3: - age: 22 - il_aabd_eligible_person: false - person4: - age: 16 - il_aabd_eligible_person: false + age: 8 spm_units: spm_unit: - members: [person1, person2, person3, person4] + members: [person1, person2] is_snap_eligible: true - il_tanf_eligible: false households: household: - members: [person1, person2, person3, person4] - state_code: IL - output: - # SNAP only -> categorically eligible - il_ipass_assist_categorical_eligible: true - -- name: Case 10, AABD only pathway single person. - # Tests AABD as sole categorical pathway - period: 2025-01 - input: - people: - person1: - age: 68 - il_aabd_eligible_person: true - spm_units: - spm_unit: - members: [person1] - snap: 0 - il_tanf_eligible: false - households: - household: - members: [person1] - state_code: IL - output: - # AABD only -> categorically eligible - il_ipass_assist_categorical_eligible: true - -- name: Case 11, large household with only TANF. - # Tests TANF as sole pathway with larger family - period: 2025-01 - input: - people: - person1: - age: 28 - il_aabd_eligible_person: false - person2: - age: 9 - il_aabd_eligible_person: false - person3: - age: 6 - il_aabd_eligible_person: false - person4: - age: 3 - il_aabd_eligible_person: false - person5: - age: 1 - il_aabd_eligible_person: false - spm_units: - spm_unit: - members: [person1, person2, person3, person4, person5] - is_snap_eligible: false - il_tanf_eligible: true - households: - household: - members: [person1, person2, person3, person4, person5] + members: [person1, person2] state_code: IL output: - # TANF only -> categorically eligible il_ipass_assist_categorical_eligible: true -- name: Case 12, large household with high income has no benefits. - # Tests that larger households with high income have no categorical eligibility +- name: Case 5, large household with high income has no SNAP. # 6-person SNAP limit at 130% FPL is approximately $39,000 period: 2025-01 input: people: person1: age: 45 - employment_income: 60_000 # High income + employment_income: 60_000 person2: age: 43 employment_income: 40_000 @@ -283,15 +106,13 @@ # Total income $100,000 well above SNAP limit -> NOT categorically eligible il_ipass_assist_categorical_eligible: false -- name: Case 13, elderly person with high income has no benefits. - # Tests that being elderly alone is not sufficient - need actual benefits - # High income means no SNAP, and not receiving AABD +- name: Case 6, zero income household gets SNAP. period: 2025-01 input: people: person1: - age: 85 - social_security: 35_000 # High social security income + age: 30 + employment_income: 0 spm_units: spm_unit: members: [person1] @@ -300,7 +121,5 @@ members: [person1] state_code: IL output: - # Income $35,000 > SNAP limit -> no SNAP - # Not receiving AABD -> no AABD - # NOT categorically eligible - il_ipass_assist_categorical_eligible: false + # Zero income -> receives SNAP -> categorically eligible + il_ipass_assist_categorical_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/integration.yaml index 87f63927a3a..87ffe9a499f 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/integration.yaml @@ -4,7 +4,7 @@ # Eligibility criteria: # - Illinois residency required # - Income <= 250% of Federal Poverty Guidelines, OR -# - Categorical eligibility: SNAP, TANF, or AABD recipient +# - Categorical eligibility: SNAP recipient # # 2025 FPL thresholds at 250%: # - 1 person: $15,650 * 2.5 = $39,125 @@ -71,63 +71,55 @@ il_ipass_assist_categorical_eligible: true il_ipass_assist_eligible: true -- name: Case 3, senior citizen on AABD. +- name: Case 3, senior citizen with low income gets SNAP. period: 2025-01 input: people: person1: age: 72 - social_security: 18_000 - il_aabd_eligible_person: true + social_security: 12_000 spm_units: spm_unit: members: [person1] - is_snap_eligible: false - il_tanf_eligible: false households: household: members: [person1] state_code: IL output: - # Income: $18,000/year (Social Security) + # Income: $12,000/year (Social Security) # 250% FPL for 1 person: $39,125 - # $18,000 < $39,125 -> income eligible - # Also AABD eligible -> categorical eligible + # $12,000 < $39,125 -> income eligible + # $12,000 < SNAP limit -> SNAP benefits -> categorical eligible il_ipass_assist_income_eligible: true il_ipass_assist_categorical_eligible: true il_ipass_assist_eligible: true -- name: Case 4, TANF family near income threshold. +- name: Case 4, family near income threshold without SNAP. period: 2025-01 input: people: person1: age: 28 - employment_income: 30_000 - il_aabd_eligible_person: false + employment_income: 50_000 person2: age: 6 - il_aabd_eligible_person: false person3: age: 3 - il_aabd_eligible_person: false spm_units: spm_unit: members: [person1, person2, person3] - is_snap_eligible: false - il_tanf_eligible: true households: household: members: [person1, person2, person3] state_code: IL output: # Household size: 3 - # Total income: $30,000/year + # Total income: $50,000/year # 250% FPL for 3 persons: $66,625 - # $30,000 < $66,625 -> income eligible - # Also TANF eligible -> categorical eligible + # $50,000 < $66,625 -> income eligible + # $50,000 > SNAP limit (~$34,600) -> no SNAP -> NOT categorical eligible il_ipass_assist_income_eligible: true - il_ipass_assist_categorical_eligible: true + il_ipass_assist_categorical_eligible: false il_ipass_assist_eligible: true - name: Case 5, middle-income couple just above threshold. @@ -137,16 +129,12 @@ person1: age: 45 employment_income: 40_000 - il_aabd_eligible_person: false person2: age: 42 employment_income: 15_000 - il_aabd_eligible_person: false spm_units: spm_unit: members: [person1, person2] - is_snap_eligible: false - il_tanf_eligible: false households: household: members: [person1, person2] @@ -156,7 +144,7 @@ # Total income: $55,000/year # 250% FPL for 2 persons: $52,875 # $55,000 > $52,875 -> NOT income eligible - # No categorical eligibility + # $55,000 > SNAP limit -> no SNAP -> NOT categorical eligible il_ipass_assist_income_eligible: false il_ipass_assist_categorical_eligible: false il_ipass_assist_eligible: false @@ -199,12 +187,10 @@ person1: age: 35 employment_income: 20_000 # Would qualify on income - il_aabd_eligible_person: false spm_units: spm_unit: members: [person1] is_snap_eligible: true # Would qualify categorically - il_tanf_eligible: false households: household: members: [person1] @@ -226,16 +212,12 @@ person1: age: 50 employment_income: 30_000 - il_aabd_eligible_person: false person2: age: 48 employment_income: 22_875 # Total = $52,875 exactly - il_aabd_eligible_person: false spm_units: spm_unit: members: [person1, person2] - is_snap_eligible: false - il_tanf_eligible: false households: household: members: [person1, person2] @@ -245,6 +227,7 @@ # Total income: $30,000 + $22,875 = $52,875 # 250% FPL for 2 persons: $52,875 # $52,875 <= $52,875 -> income eligible (at boundary) + # $52,875 > SNAP limit -> no SNAP il_ipass_assist_income_eligible: true il_ipass_assist_categorical_eligible: false il_ipass_assist_eligible: true @@ -257,16 +240,12 @@ person1: age: 50 employment_income: 30_000 - il_aabd_eligible_person: false person2: age: 48 employment_income: 22_876 # Total = $52,876 (one over) - il_aabd_eligible_person: false spm_units: spm_unit: members: [person1, person2] - is_snap_eligible: false - il_tanf_eligible: false households: household: members: [person1, person2] @@ -276,6 +255,7 @@ # Total income: $30,000 + $22,876 = $52,876 # 250% FPL for 2 persons: $52,875 # $52,876 > $52,875 -> NOT income eligible + # $52,876 > SNAP limit -> no SNAP il_ipass_assist_income_eligible: false il_ipass_assist_categorical_eligible: false il_ipass_assist_eligible: false @@ -288,34 +268,24 @@ person1: age: 50 employment_income: 70_000 - il_aabd_eligible_person: false person2: age: 48 employment_income: 51_625 # Total = $121,625 - il_aabd_eligible_person: false person3: age: 22 - il_aabd_eligible_person: false person4: age: 20 - il_aabd_eligible_person: false person5: age: 17 - il_aabd_eligible_person: false person6: age: 14 - il_aabd_eligible_person: false person7: age: 10 - il_aabd_eligible_person: false person8: age: 6 - il_aabd_eligible_person: false spm_units: spm_unit: members: [person1, person2, person3, person4, person5, person6, person7, person8] - is_snap_eligible: false - il_tanf_eligible: false households: household: members: [person1, person2, person3, person4, person5, person6, person7, person8] @@ -325,6 +295,7 @@ # Total income: $70,000 + $51,625 = $121,625 # 250% FPL for 8 persons: $48,650 * 2.5 = $121,625 # $121,625 <= $121,625 -> income eligible + # High income -> no SNAP il_ipass_assist_income_eligible: true il_ipass_assist_categorical_eligible: false il_ipass_assist_eligible: true @@ -395,16 +366,12 @@ age: 65 social_security: 20_000 interest_income: 3_000 - il_aabd_eligible_person: false person2: age: 63 employment_income: 15_000 - il_aabd_eligible_person: false spm_units: spm_unit: members: [person1, person2] - is_snap_eligible: false - il_tanf_eligible: false households: household: members: [person1, person2] @@ -414,6 +381,7 @@ # Total income: $20,000 + $3,000 + $15,000 = $38,000 # 250% FPL for 2 persons: $52,875 # $38,000 < $52,875 -> income eligible + # $38,000 > SNAP limit (~$27,400) -> no SNAP il_ipass_assist_income_eligible: true il_ipass_assist_categorical_eligible: false il_ipass_assist_eligible: true diff --git a/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.py b/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.py index 2c831debbf0..ec9af827218 100644 --- a/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.py +++ b/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.py @@ -13,8 +13,5 @@ class il_ipass_assist_categorical_eligible(Variable): defined_for = StateCode.IL def formula(spm_unit, period, parameters): - # Check for actual benefit receipt (snap > 0, il_tanf > 0, il_aabd > 0) - snap_recipient = spm_unit("snap", period) > 0 - tanf_recipient = spm_unit("il_tanf", period) > 0 - aabd_recipient = spm_unit("il_aabd", period) > 0 - return snap_recipient | tanf_recipient | aabd_recipient + # Per IL DHS: "Customers getting SNAP may be eligible for I-PASS Assist" + return spm_unit("snap", period) > 0 diff --git a/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_income_eligible.py b/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_income_eligible.py index ef519bfe0ef..0e7dc03dde0 100644 --- a/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_income_eligible.py +++ b/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_income_eligible.py @@ -15,8 +15,6 @@ class il_ipass_assist_income_eligible(Variable): def formula(spm_unit, period, parameters): p = parameters(period).gov.states.il.tollway.ipass_assist.eligibility fpg = spm_unit("spm_unit_fpg", period) - # Use gross income (market income + social security) for eligibility - market_income = spm_unit("spm_unit_market_income", period) - social_security = add(spm_unit, period, ["social_security"]) - household_income = market_income + social_security - return household_income <= fpg * p.fpg_limit + # Income verified by Illinois Department of Revenue + gross_income = add(spm_unit, period, ["irs_gross_income"]) + return gross_income <= fpg * p.fpg_limit diff --git a/sources/working_references.md b/sources/working_references.md deleted file mode 100644 index c57e96f9e5b..00000000000 --- a/sources/working_references.md +++ /dev/null @@ -1,287 +0,0 @@ -# Collected Documentation - -## Illinois I-PASS Assist Program Implementation -**Collected**: 2026-01-14 -**Implementation Task**: Implement Illinois I-PASS Assist toll assistance program eligibility and benefits - ---- - -## Official Program Name - -**Federal Program**: N/A (State transportation program, not federally funded) -**State's Official Name**: I-PASS Assist -**Abbreviation**: None (commonly referred to as "I-PASS Assist") -**Administering Agency**: Illinois State Toll Highway Authority (Illinois Tollway) -**Source**: Illinois Tollway official website - -**Variable Prefix**: `il_ipass_assist` - ---- - -## Program Overview - -I-PASS Assist is an equity-focused initiative launched by the Illinois Tollway in June 2021 to support underserved communities by making tollway travel more accessible and affordable. The program helps income-eligible individuals and families access I-PASS benefits with reduced financial barriers. - -**Key Dates:** -- **Original Launch**: 2020 (limited scope, approximately 2,500 accounts) -- **Expanded Program Launch**: June 23, 2021 -- **Current Enrollment**: Over 40,000 active accounts (as of 2024) - -**Source**: [Illinois Tollway Significantly Expands I-PASS Assist Program](https://agency.illinoistollway.com/-/illinois-tollway-significantly-expands-i-pass-assist-program-1) - ---- - -## Regulatory Authority - -### Legal Framework -- **Statute**: Toll Highway Act (605 ILCS 10/) -- **Administrative Rules**: 92 Ill. Admin. Code Part 2520 (State Toll Highway Rules) -- **Program Authority**: Illinois Tollway Board of Directors resolutions - -**Note**: I-PASS Assist is a Board-approved program and is NOT explicitly codified in state statute or administrative code. The program was approved through Board resolutions in April 2021 (incentive approval) and expanded through subsequent Board actions. - -**Sources**: -- [Toll Highway Act (605 ILCS 10/)](https://www.ilga.gov/legislation/ilcs/ilcs3.asp?ActID=1746&ChapterID=45) -- [92 Ill. Admin. Code Part 2520](https://www.law.cornell.edu/regulations/illinois/title-92/part-2520) - ---- - -## Eligibility Requirements - -### Income Eligibility - -**Income Limit**: 250% of Federal Poverty Guidelines (FPL) - -**2025 Income Thresholds (48 Contiguous States)**: - -| Household Size | 100% FPL | 250% FPL (Eligibility Limit) | -|----------------|----------|------------------------------| -| 1 | $15,650 | $39,125 | -| 2 | $21,150 | $52,875 | -| 3 | $26,650 | $66,625 | -| 4 | $32,150 | $80,375 | -| 5 | $37,650 | $94,125 | -| 6 | $43,150 | $107,875 | -| 7 | $48,650 | $121,625 | -| 8 | $54,150 | $135,375 | -| Each additional | +$5,500 | +$13,750 | - -**Note**: The Illinois Tollway website showed 2024 values (e.g., $36,450 for 1 person). The program uses current FPL values, so the parameter should be stored as a rate (2.50) rather than fixed dollar amounts. - -**Source**: [I-PASS Assist Program - Illinois Tollway](https://agency.illinoistollway.com/assist) - -### Implementation Approach for Income Eligibility -- **Value**: 250% of FPL -- **Parameter**: Store as rate (2.50), not dollar amount -- **Why**: Dollar amounts change when HHS updates FPL annually - -### Categorical Eligibility - -Households currently participating in Illinois Department of Human Services (IDHS) cash and food assistance programs automatically qualify. - -**Qualifying Programs** (administered through IDHS): -1. **SNAP** (Supplemental Nutrition Assistance Program) - Explicitly confirmed -2. **TANF** (Temporary Assistance for Needy Families) - Included as "cash assistance" -3. **AABD** (Aid to the Aged, Blind, and Disabled) - Included as "cash assistance" - -**Quote from source**: "To be eligible for enrollment in I-PASS Assist, household income must not exceed 250% of Federal Poverty Guidelines as verified by the Illinois Department of Revenue or qualified by the Illinois Department of Human Services for cash and food assistance programs." - -**Sources**: -- [I-PASS Assist Program - Illinois Tollway](https://agency.illinoistollway.com/assist) -- [IDHS: I-PASS Assist](https://www.dhs.state.il.us/page.aspx?item=150431) - -### Residency Requirement - -**Residency**: Illinois residents only - -**Quote from source**: "This program covers residents of the state of Illinois." - -**Source**: [I-PASS Assist Program - Illinois Tollway](https://agency.illinoistollway.com/assist) - -### Verification Process - -Eligibility is verified through a secure web form in partnership with: -- **Illinois Department of Revenue** (for income verification) -- **Illinois Department of Human Services** (for categorical eligibility through SNAP/TANF/AABD) - -Upon completion of the form, customers receive immediate email notification of eligibility status. - ---- - -## Benefits Provided - -### Standard I-PASS Benefits (All Customers) - -1. **Toll Discount**: 50% off all Illinois Tollway tolls for passenger vehicles - - Applies to: Cars, SUVs, Motorcycles (2-axle passenger vehicles) - - Without I-PASS, customers pay double (Pay Online rate) - -**Source**: [I-PASS Account - Illinois Tollway](https://agency.illinoistollway.com/about-ipass) - -### I-PASS Assist Additional Benefits - -| Benefit | Standard I-PASS | I-PASS Assist | Savings | -|---------|-----------------|---------------|---------| -| Transponder Deposit | $10 | $0 (waived) | $10 | -| Minimum Account Opening | $20 | $4 | $16 | -| Auto-Replenishment Minimum | $10 | $4 | $6 | -| Invoice Fee Dismissal | No | Yes (eligible) | Varies | -| Free Transponder Shipping | No | Yes | Varies | - -**Detailed Benefits**: - -1. **Waived Transponder Deposit** - - Standard: $10 refundable deposit required - - I-PASS Assist: No deposit required - - **Source**: [Illinois Tollway Expands I-PASS Assist](https://agency.illinoistollway.com/-/illinois-tollway-significantly-expands-i-pass-assist-program-1) - -2. **Reduced Account Opening Minimum** - - Standard: $20 minimum prepaid tolls to open account - - I-PASS Assist: $4 minimum prepaid tolls - - **Source**: [I-PASS Assist Program](https://agency.illinoistollway.com/assist) - -3. **Reduced Auto-Replenishment Minimum** - - Standard: $10 minimum replenishment - - I-PASS Assist: $4 minimum replenishment - - **Source**: [I-PASS Assist Program](https://agency.illinoistollway.com/assist) - -4. **Invoice Fee Dismissal** - - I-PASS Assist customers may be eligible to have invoice fees dismissed once enrolled - - Also helps avoid future fees for missed tolls - - **Source**: [I-PASS Assist Program](https://agency.illinoistollway.com/assist) - -5. **Free Transponder Shipping** - - Upon approval, I-PASS transponder shipped free of charge - - Customers must add funds to activate the account - - **Source**: [I-PASS Assist Program](https://agency.illinoistollway.com/assist) - ---- - -## Implementation Notes - -### What CAN Be Simulated - -**Eligibility determination:** -- Income eligibility (income <= 250% FPL) -- Categorical eligibility (SNAP, TANF, AABD participation) -- State residency requirement - -**Benefits eligibility:** -- Whether household qualifies for I-PASS Assist -- Binary eligibility (eligible/not eligible) - -### What CANNOT Be Simulated - -**Monetary benefit calculation is limited because:** -- Toll savings depend on actual tollway usage (which varies) -- The 50% toll discount applies to ALL I-PASS customers, not just I-PASS Assist -- Invoice fee dismissal amounts vary by individual circumstances - -**The primary benefit to simulate is ELIGIBILITY, not a specific dollar benefit amount.** - -### Suggested Variable Structure - -``` -il_ipass_assist/ - eligibility/ - il_ipass_assist_income_eligible.py # Income <= 250% FPL - il_ipass_assist_categorically_eligible.py # SNAP/TANF/AABD recipient - il_ipass_assist_eligible.py # Overall eligibility -``` - -### Suggested Parameters - -```yaml -# parameters/gov/states/il/tollway/ipass_assist/eligibility/fpg_limit.yaml -description: Illinois limits household income to this share of federal poverty guidelines for I-PASS Assist eligibility. -values: - 2021-06-23: 2.50 # 250% FPL - -metadata: - unit: /1 - period: year - label: Illinois I-PASS Assist income limit as share of FPL - reference: - - title: I-PASS Assist Program - Illinois Tollway - href: https://agency.illinoistollway.com/assist -``` - ---- - -## Summary of Key Values for Implementation - -| Parameter | Value | Type | Source | -|-----------|-------|------|--------| -| Income Limit | 250% of FPL | Rate (2.50) | Illinois Tollway | -| Categorical Eligibility | SNAP, TANF, AABD | Boolean | Illinois Tollway | -| Residency | Illinois only | Boolean | Illinois Tollway | -| Effective Date | June 23, 2021 | Date | Press Release | - ---- - -## References for Metadata - -```yaml -# For parameters: -reference: - - title: I-PASS Assist Program - Illinois Tollway - href: https://agency.illinoistollway.com/assist - - title: Illinois Tollway Significantly Expands I-PASS Assist Program - href: https://agency.illinoistollway.com/-/illinois-tollway-significantly-expands-i-pass-assist-program-1 -``` - -```python -# For variables: -reference = ( - "https://agency.illinoistollway.com/assist", - "https://www.dhs.state.il.us/page.aspx?item=150431", -) -``` - ---- - -## PDFs for Future Reference - -The following PDFs contain additional information but could not be fully extracted: - -1. **I-PASS Assist One Pager (2023)** - - URL: https://illinoistollway.com/documents/20184/1344218/2023-011_IPASS+Assist+One+Pager.pdf - - Expected content: Program overview, eligibility requirements, benefits summary - -2. **I-PASS Assist Palm Card (2023)** - - URL: https://illinoistollway.com/documents/20184/1344218/2023_04_I-PASS+Assist_Palm+Card.pdf - - Expected content: Quick reference for program eligibility and application - -3. **2025 HHS Poverty Guidelines** - - URL: https://aspe.hhs.gov/sites/default/files/documents/dd73d4f00d8a819d10b2fdb70d254f7b/detailed-guidelines-2025.pdf - - Expected content: Complete FPL tables for all household sizes and percentages - ---- - -## Additional Sources Consulted - -1. **Illinois Tollway Official Website** - - [I-PASS Assist Program Page](https://agency.illinoistollway.com/assist) - - [I-PASS Account Information](https://agency.illinoistollway.com/about-ipass) - - [Toll Rates](https://agency.illinoistollway.com/toll-rates) - - [Regulations, Rules and Policies](https://agency.illinoistollway.com/about/regulations-rules-policies) - -2. **Illinois Department of Human Services** - - [IDHS I-PASS Assist Page](https://www.dhs.state.il.us/page.aspx?item=150431) - - [IDHS Additional Benefits](https://www.dhs.state.il.us/page.aspx?item=165001) - - [IDHS Cash Assistance Programs](https://www.dhs.state.il.us/page.aspx?item=29719) - -3. **Legal Resources** - - [Toll Highway Act (605 ILCS 10/)](https://www.ilga.gov/legislation/ilcs/ilcs3.asp?ActID=1746&ChapterID=45) - - [92 Ill. Admin. Code Part 2520](https://www.law.cornell.edu/regulations/illinois/title-92/part-2520) - -4. **Press Releases** - - [Illinois Tollway Significantly Expands I-PASS Assist Program (June 2021)](https://agency.illinoistollway.com/-/illinois-tollway-significantly-expands-i-pass-assist-program-1) - - [I-PASS Assist continues to expand relief (2023)](https://agency.illinoistollway.com/-/i-pass-assist-continues-to-expand-relief-for-working-individuals-and-families) - - [Illinois Tollway offers more income-eligible drivers benefits (2022)](https://agency.illinoistollway.com/-/illinois-tollway-offers-more-income-eligible-drivers-cost-saving-benefits-through-i-pass-assist-program) - -5. **Awards and Recognition** - - [IBTTA 2024 President's Award - I-PASS Assist](https://www.ibtta.org/awards/i-pass-assist) - -6. **Federal Poverty Guidelines** - - [HHS ASPE Poverty Guidelines](https://aspe.hhs.gov/topics/poverty-economic-mobility/poverty-guidelines) From 907c5e918d09adf2cdeb6d76a9db34420f1b75f7 Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 15 Jan 2026 18:24:10 -0500 Subject: [PATCH 4/4] minor --- .../ipass_assist/eligibility/fpg_limit.yaml | 4 +- .../il_ipass_assist_categorical_eligible.yaml | 123 +----- .../il_ipass_assist_eligible.yaml | 384 +----------------- .../il/tollway/ipass_assist/integration.yaml | 381 ++--------------- .../il_ipass_assist_categorical_eligible.py | 4 +- .../ipass_assist/il_ipass_assist_eligible.py | 4 +- .../il_ipass_assist_income_eligible.py | 4 +- 7 files changed, 60 insertions(+), 844 deletions(-) diff --git a/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/eligibility/fpg_limit.yaml b/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/eligibility/fpg_limit.yaml index 32f93469899..fc98f557557 100644 --- a/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/eligibility/fpg_limit.yaml +++ b/policyengine_us/parameters/gov/states/il/tollway/ipass_assist/eligibility/fpg_limit.yaml @@ -7,7 +7,7 @@ metadata: period: year label: Illinois I-PASS Assist income limit as share of FPL reference: - - title: I-PASS Assist Program - Illinois Tollway + - title: Illinois Tollway I-PASS Assist - 250% of Federal Poverty Guidelines href: https://agency.illinoistollway.com/assist - - title: Illinois Tollway Significantly Expands I-PASS Assist Program + - title: Illinois Tollway Expansion Announcement (June 2021) - 250% FPG threshold href: https://agency.illinoistollway.com/-/illinois-tollway-significantly-expands-i-pass-assist-program-1 diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.yaml index 21d5ac46837..88d02b0a1df 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.yaml @@ -1,125 +1,20 @@ # Illinois I-PASS Assist categorical eligibility tests -# Categorical eligibility is granted to households receiving SNAP. +# Formula: snap > 0 # -# Per IL DHS: "Customers getting SNAP may be eligible for I-PASS Assist" # Source: https://www.dhs.state.il.us/page.aspx?item=150431 -- name: Case 1, SNAP recipient is categorically eligible. - period: 2025-01 +- name: Case 1, has SNAP. + period: 2025 input: - people: - person1: - age: 35 - spm_units: - spm_unit: - members: [person1] - is_snap_eligible: true - households: - household: - members: [person1] - state_code: IL + state_code: IL + snap: 1 output: il_ipass_assist_categorical_eligible: true -- name: Case 2, no SNAP means not categorically eligible. - period: 2025-01 +- name: Case 2, no SNAP. + period: 2025 input: - people: - person1: - age: 40 - employment_income: 45_000 # Above SNAP income limit - spm_units: - spm_unit: - members: [person1] - households: - household: - members: [person1] - state_code: IL + state_code: IL + snap: 0 output: il_ipass_assist_categorical_eligible: false - -- name: Case 3, minimal SNAP benefit amount. - # Tests boundary: snap > 0 with very small benefit - period: 2025-01 - input: - people: - person1: - age: 45 - spm_units: - spm_unit: - members: [person1] - snap: 12 # Minimum SNAP benefit - households: - household: - members: [person1] - state_code: IL - output: - # $12/year SNAP > 0 -> categorically eligible - il_ipass_assist_categorical_eligible: true - -- name: Case 4, family with SNAP is categorically eligible. - period: 2025-01 - input: - people: - person1: - age: 30 - person2: - age: 8 - spm_units: - spm_unit: - members: [person1, person2] - is_snap_eligible: true - households: - household: - members: [person1, person2] - state_code: IL - output: - il_ipass_assist_categorical_eligible: true - -- name: Case 5, large household with high income has no SNAP. - # 6-person SNAP limit at 130% FPL is approximately $39,000 - period: 2025-01 - input: - people: - person1: - age: 45 - employment_income: 60_000 - person2: - age: 43 - employment_income: 40_000 - person3: - age: 20 - person4: - age: 18 - person5: - age: 15 - person6: - age: 12 - spm_units: - spm_unit: - members: [person1, person2, person3, person4, person5, person6] - households: - household: - members: [person1, person2, person3, person4, person5, person6] - state_code: IL - output: - # Total income $100,000 well above SNAP limit -> NOT categorically eligible - il_ipass_assist_categorical_eligible: false - -- name: Case 6, zero income household gets SNAP. - period: 2025-01 - input: - people: - person1: - age: 30 - employment_income: 0 - spm_units: - spm_unit: - members: [person1] - households: - household: - members: [person1] - state_code: IL - output: - # Zero income -> receives SNAP -> categorically eligible - il_ipass_assist_categorical_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_eligible.yaml index 5b4c56be4ce..6f724269def 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/il_ipass_assist_eligible.yaml @@ -1,395 +1,49 @@ -# Illinois I-PASS Assist eligibility tests -# Eligibility requires Illinois residency AND either: -# - Income eligibility (income <= 250% FPL), OR -# - Categorical eligibility (SNAP, TANF, or AABD recipient) +# Illinois I-PASS Assist eligibility unit tests +# Formula: (income_eligible | categorical_eligible) with defined_for = StateCode.IL # # Source: https://agency.illinoistollway.com/assist -- name: Case 1, income eligible only pathway. - period: 2025-01 +- name: Case 1, income eligible only. + period: 2025 input: - people: - person1: - age: 35 - employment_income: 30_000 # Below 250% FPL ($39,125) - il_aabd_eligible_person: false - spm_units: - spm_unit: - members: [person1] - is_snap_eligible: false - il_tanf_eligible: false - households: - household: - members: [person1] - state_code: IL - output: + state_code: IL il_ipass_assist_income_eligible: true il_ipass_assist_categorical_eligible: false + output: il_ipass_assist_eligible: true -- name: Case 2, categorical eligible only pathway. - period: 2025-01 +- name: Case 2, categorical eligible only. + period: 2025 input: - people: - person1: - age: 40 - employment_income: 50_000 # Above 250% FPL ($39,125) - il_aabd_eligible_person: false - spm_units: - spm_unit: - members: [person1] - is_snap_eligible: true # SNAP makes categorically eligible - il_tanf_eligible: false - households: - household: - members: [person1] - state_code: IL - output: + state_code: IL il_ipass_assist_income_eligible: false il_ipass_assist_categorical_eligible: true - il_ipass_assist_eligible: true - -- name: Case 3, both pathways eligible. - period: 2025-01 - input: - people: - person1: - age: 30 - employment_income: 18_000 # Below 250% FPL ($39,125) - il_aabd_eligible_person: false - person2: - age: 5 - spm_units: - spm_unit: - members: [person1, person2] - is_snap_eligible: true - il_tanf_eligible: true - households: - household: - members: [person1, person2] - state_code: IL output: - il_ipass_assist_income_eligible: true - il_ipass_assist_categorical_eligible: true il_ipass_assist_eligible: true -- name: Case 4, not eligible non-IL resident. - period: 2025-01 - input: - people: - person1: - age: 35 - employment_income: 30_000 # Would be income eligible if in IL - il_aabd_eligible_person: false - spm_units: - spm_unit: - members: [person1] - is_snap_eligible: false - il_tanf_eligible: false - households: - household: - members: [person1] - state_code: IN # Indiana, not Illinois - output: - # Not eligible because not IL resident - il_ipass_assist_eligible: false - -- name: Case 5, neither pathway and non-IL resident. - period: 2025-01 - input: - people: - person1: - age: 45 - employment_income: 60_000 # Above 250% FPL - il_aabd_eligible_person: false - spm_units: - spm_unit: - members: [person1] - is_snap_eligible: false - il_tanf_eligible: false - households: - household: - members: [person1] - state_code: WI # Wisconsin, not Illinois - output: - il_ipass_assist_eligible: false - -- name: Case 6, high income IL resident not eligible. - period: 2025-01 - input: - people: - person1: - age: 50 - employment_income: 75_000 # Above 250% FPL ($39,125) - il_aabd_eligible_person: false - spm_units: - spm_unit: - members: [person1] - is_snap_eligible: false - il_tanf_eligible: false - households: - household: - members: [person1] - state_code: IL - output: - il_ipass_assist_income_eligible: false - il_ipass_assist_categorical_eligible: false - il_ipass_assist_eligible: false - -- name: Case 7, elderly low-income person eligible via income pathway. - # Note: AABD requires very low income (similar to SSI) - # A person with high income cannot receive AABD - # This tests a realistic elderly low-income scenario - period: 2025-01 +- name: Case 3, both pathways. + period: 2025 input: - people: - person1: - age: 72 - social_security: 15_000 # Low social security income - spm_units: - spm_unit: - members: [person1] - households: - household: - members: [person1] - state_code: IL - output: - # Income $15,000 < $39,125 (250% FPL) -> income eligible - # Low income means SNAP eligible -> categorically eligible + state_code: IL il_ipass_assist_income_eligible: true il_ipass_assist_categorical_eligible: true - il_ipass_assist_eligible: true - -# ============================================================================ -# EDGE CASE TESTS -# ============================================================================ - -- name: Case 8, zero income results in SNAP benefits. - # With zero income, person is SNAP eligible and receives benefits - period: 2025-01 - input: - people: - person1: - age: 30 - employment_income: 0 - spm_units: - spm_unit: - members: [person1] - households: - household: - members: [person1] - state_code: IL output: - # Zero income <= any FPL threshold -> income eligible - # Zero income also means SNAP eligible -> categorically eligible - # Overall: eligible via both pathways - il_ipass_assist_income_eligible: true - il_ipass_assist_categorical_eligible: true il_ipass_assist_eligible: true -- name: Case 9, income exactly one dollar over with no categorical. - # Tests boundary miss scenario - just barely ineligible - period: 2025-01 +- name: Case 4, neither pathway. + period: 2025 input: - people: - person1: - age: 35 - employment_income: 39_126 # One dollar over 250% FPL ($39,125) - il_aabd_eligible_person: false - spm_units: - spm_unit: - members: [person1] - is_snap_eligible: false - il_tanf_eligible: false - households: - household: - members: [person1] - state_code: IL - output: - # Income $39,126 > $39,125 -> NOT income eligible - # No benefits -> NOT categorically eligible - # Overall: NOT eligible + state_code: IL il_ipass_assist_income_eligible: false il_ipass_assist_categorical_eligible: false - il_ipass_assist_eligible: false - -- name: Case 10, very high income with categorical rescue. - # Tests that categorical eligibility overrides any income level - period: 2025-01 - input: - people: - person1: - age: 45 - employment_income: 200_000 # Very high income - il_aabd_eligible_person: false - spm_units: - spm_unit: - members: [person1] - is_snap_eligible: true # Categorical eligibility - il_tanf_eligible: false - households: - household: - members: [person1] - state_code: IL - output: - # Very high income -> NOT income eligible - # SNAP -> categorically eligible - # Overall: eligible via categorical pathway - il_ipass_assist_income_eligible: false - il_ipass_assist_categorical_eligible: true - il_ipass_assist_eligible: true - -- name: Case 11, large family exactly at threshold. - # Tests 8-person household at boundary - period: 2025-01 - input: - people: - person1: - age: 45 - employment_income: 61_000 - il_aabd_eligible_person: false - person2: - age: 43 - employment_income: 60_625 - il_aabd_eligible_person: false - person3: - age: 20 - il_aabd_eligible_person: false - person4: - age: 18 - il_aabd_eligible_person: false - person5: - age: 15 - il_aabd_eligible_person: false - person6: - age: 12 - il_aabd_eligible_person: false - person7: - age: 8 - il_aabd_eligible_person: false - person8: - age: 5 - il_aabd_eligible_person: false - spm_units: - spm_unit: - members: [person1, person2, person3, person4, person5, person6, person7, person8] - is_snap_eligible: false - il_tanf_eligible: false - households: - household: - members: [person1, person2, person3, person4, person5, person6, person7, person8] - state_code: IL - output: - # 8-person 250% FPL = $48,650 * 2.5 = $121,625 - # Total income: $61,000 + $60,625 = $121,625 (exactly at threshold) - # No benefits -> NOT categorically eligible - il_ipass_assist_income_eligible: true - il_ipass_assist_categorical_eligible: false - il_ipass_assist_eligible: true - -- name: Case 12, non-IL resident with categorical would-be-eligible. - # Tests that residency requirement applies even to categorical - period: 2025-01 - input: - people: - person1: - age: 72 - il_aabd_eligible_person: true - employment_income: 15_000 - spm_units: - spm_unit: - members: [person1] - is_snap_eligible: true - il_tanf_eligible: false - households: - household: - members: [person1] - state_code: IN # Indiana output: - # Would be eligible via both pathways if in IL - # But not IL resident -> NOT eligible il_ipass_assist_eligible: false -- name: Case 13, multi-generation high-income household not eligible. - # High income household with elderly member but no benefit receipt - # AABD requires very low income - not available to this household - period: 2025-01 +- name: Case 5, non-IL resident. + period: 2025 input: - people: - person1: - age: 78 - social_security: 20_000 - person2: - age: 45 - employment_income: 80_000 - person3: - age: 42 - employment_income: 60_000 - person4: - age: 16 - spm_units: - spm_unit: - members: [person1, person2, person3, person4] - households: - household: - members: [person1, person2, person3, person4] - state_code: IL - output: - # 4-person 250% FPL = $80,375 - # Total income: $20,000 + $80,000 + $60,000 = $160,000 > $80,375 - # High income means no SNAP, no AABD - il_ipass_assist_income_eligible: false - il_ipass_assist_categorical_eligible: false - il_ipass_assist_eligible: false - -- name: Case 14, single person at exact threshold with minimal SNAP. - # Tests redundant eligibility - both pathways at edge - period: 2025-01 - input: - people: - person1: - age: 35 - employment_income: 39_125 # Exactly at 250% FPL - il_aabd_eligible_person: false - spm_units: - spm_unit: - members: [person1] - snap: 12 # Minimal SNAP benefit - il_tanf_eligible: false - households: - household: - members: [person1] - state_code: IL - output: - # Income exactly at threshold -> income eligible - # Small SNAP benefit > 0 -> categorical eligible - # Both pathways true + state_code: WI il_ipass_assist_income_eligible: true il_ipass_assist_categorical_eligible: true - il_ipass_assist_eligible: true - -- name: Case 15, income one dollar over with minimal SNAP. - # Tests categorical rescue when just missing income threshold - period: 2025-01 - input: - people: - person1: - age: 35 - employment_income: 39_126 # One dollar over 250% FPL - il_aabd_eligible_person: false - spm_units: - spm_unit: - members: [person1] - snap: 12 # Minimal SNAP benefit - il_tanf_eligible: false - households: - household: - members: [person1] - state_code: IL output: - # Income one dollar over -> NOT income eligible - # Small SNAP benefit > 0 -> categorical eligible - # Overall: eligible via categorical - il_ipass_assist_income_eligible: false - il_ipass_assist_categorical_eligible: true - il_ipass_assist_eligible: true + il_ipass_assist_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/integration.yaml index 87ffe9a499f..5b51e11212c 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/il/tollway/ipass_assist/integration.yaml @@ -1,47 +1,25 @@ # Illinois I-PASS Assist integration tests -# Tests comprehensive eligibility scenarios with multiple household members +# End-to-end scenarios testing full calculation chain # -# Eligibility criteria: -# - Illinois residency required -# - Income <= 250% of Federal Poverty Guidelines, OR -# - Categorical eligibility: SNAP recipient -# -# 2025 FPL thresholds at 250%: -# - 1 person: $15,650 * 2.5 = $39,125 -# - 2 person: $21,150 * 2.5 = $52,875 -# - 3 person: $26,650 * 2.5 = $66,625 -# - 4 person: $32,150 * 2.5 = $80,375 -# - 8 person: $48,650 * 2.5 = $121,625 +# Eligibility: IL resident AND (income <= 250% FPL OR SNAP recipient) # # Source: https://agency.illinoistollway.com/assist -- name: Case 1, moderate-income single worker. - # Income above SNAP limit but below I-PASS limit - period: 2025-01 +- name: Case 1, moderate income worker eligible via income. + period: 2025 input: - people: - person1: - age: 28 - employment_income: 35_000 # Above SNAP (130% FPL ~$20,345) but below I-PASS (250% FPL $39,125) - spm_units: - spm_unit: - members: [person1] - households: - household: - members: [person1] - state_code: IL + state_code: IL + employment_income: 35_000 output: - # Income: $35,000/year - # 250% FPL for 1 person: $39,125 + # 1-person 250% FPL = $39,125 # $35,000 < $39,125 -> income eligible - # $35,000 > SNAP gross limit -> no SNAP -> NOT categorically eligible + # $35,000 > SNAP limit -> no SNAP il_ipass_assist_income_eligible: true il_ipass_assist_categorical_eligible: false il_ipass_assist_eligible: true -- name: Case 2, low-income working family with SNAP benefits. - # Income low enough to receive SNAP (< 130% FPL for 4 = ~$41,800) - period: 2025-01 +- name: Case 2, low income family eligible via both pathways. + period: 2025 input: people: person1: @@ -49,7 +27,6 @@ employment_income: 24_000 person2: age: 30 - employment_income: 12_000 person3: age: 8 person4: @@ -62,187 +39,23 @@ members: [person1, person2, person3, person4] state_code: IL output: - # Household size: 4 - # Total income: $36,000/year < 130% FPL (~$41,800) -> SNAP eligible - # 250% FPL for 4 persons: $80,375 - # $36,000 < $80,375 -> income eligible - # Low income = SNAP benefits -> categorical eligible - il_ipass_assist_income_eligible: true - il_ipass_assist_categorical_eligible: true - il_ipass_assist_eligible: true - -- name: Case 3, senior citizen with low income gets SNAP. - period: 2025-01 - input: - people: - person1: - age: 72 - social_security: 12_000 - spm_units: - spm_unit: - members: [person1] - households: - household: - members: [person1] - state_code: IL - output: - # Income: $12,000/year (Social Security) - # 250% FPL for 1 person: $39,125 - # $12,000 < $39,125 -> income eligible - # $12,000 < SNAP limit -> SNAP benefits -> categorical eligible + # 4-person 250% FPL = $80,375 + # $24,000 < $80,375 -> income eligible + # $24,000 < SNAP limit -> gets SNAP -> categorical eligible il_ipass_assist_income_eligible: true il_ipass_assist_categorical_eligible: true il_ipass_assist_eligible: true -- name: Case 4, family near income threshold without SNAP. - period: 2025-01 - input: - people: - person1: - age: 28 - employment_income: 50_000 - person2: - age: 6 - person3: - age: 3 - spm_units: - spm_unit: - members: [person1, person2, person3] - households: - household: - members: [person1, person2, person3] - state_code: IL - output: - # Household size: 3 - # Total income: $50,000/year - # 250% FPL for 3 persons: $66,625 - # $50,000 < $66,625 -> income eligible - # $50,000 > SNAP limit (~$34,600) -> no SNAP -> NOT categorical eligible - il_ipass_assist_income_eligible: true - il_ipass_assist_categorical_eligible: false - il_ipass_assist_eligible: true - -- name: Case 5, middle-income couple just above threshold. - period: 2025-01 +- name: Case 3, high income not eligible. + period: 2025 input: people: person1: age: 45 - employment_income: 40_000 + employment_income: 60_000 person2: age: 42 - employment_income: 15_000 - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: IL - output: - # Household size: 2 - # Total income: $55,000/year - # 250% FPL for 2 persons: $52,875 - # $55,000 > $52,875 -> NOT income eligible - # $55,000 > SNAP limit -> no SNAP -> NOT categorical eligible - il_ipass_assist_income_eligible: false - il_ipass_assist_categorical_eligible: false - il_ipass_assist_eligible: false - -- name: Case 6, high-income family not eligible. - # High income above both I-PASS and SNAP limits - # Note: SNAP requires income <= 130% FPL, so high income = no SNAP - period: 2025-01 - input: - people: - person1: - age: 38 - employment_income: 50_000 - person2: - age: 36 - employment_income: 45_000 - person3: - age: 12 - spm_units: - spm_unit: - members: [person1, person2, person3] - households: - household: - members: [person1, person2, person3] - state_code: IL - output: - # Household size: 3 - # Total income: $95,000/year - # 250% FPL for 3 persons: $66,625 - # $95,000 > $66,625 -> NOT income eligible - # $95,000 >> SNAP limit (~$34,600) -> no SNAP -> NOT categorical eligible - il_ipass_assist_income_eligible: false - il_ipass_assist_categorical_eligible: false - il_ipass_assist_eligible: false - -- name: Case 7, non-Illinois resident not eligible. - period: 2025-01 - input: - people: - person1: - age: 35 - employment_income: 20_000 # Would qualify on income - spm_units: - spm_unit: - members: [person1] - is_snap_eligible: true # Would qualify categorically - households: - household: - members: [person1] - state_code: WI # Wisconsin resident - output: - # Even though income and categorical would qualify, - # residency requirement fails - il_ipass_assist_eligible: false - -# ============================================================================ -# EDGE CASE INTEGRATION TESTS -# ============================================================================ - -- name: Case 8, boundary income exactly at 2-person threshold. - # Tests exact boundary condition for 2-person household - period: 2025-01 - input: - people: - person1: - age: 50 - employment_income: 30_000 - person2: - age: 48 - employment_income: 22_875 # Total = $52,875 exactly - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: IL - output: - # Household size: 2 - # Total income: $30,000 + $22,875 = $52,875 - # 250% FPL for 2 persons: $52,875 - # $52,875 <= $52,875 -> income eligible (at boundary) - # $52,875 > SNAP limit -> no SNAP - il_ipass_assist_income_eligible: true - il_ipass_assist_categorical_eligible: false - il_ipass_assist_eligible: true - -- name: Case 9, boundary income one dollar above 2-person threshold. - # Tests exact boundary fail condition - period: 2025-01 - input: - people: - person1: - age: 50 - employment_income: 30_000 - person2: - age: 48 - employment_income: 22_876 # Total = $52,876 (one over) + employment_income: 40_000 spm_units: spm_unit: members: [person1, person2] @@ -251,163 +64,17 @@ members: [person1, person2] state_code: IL output: - # Household size: 2 - # Total income: $30,000 + $22,876 = $52,876 - # 250% FPL for 2 persons: $52,875 - # $52,876 > $52,875 -> NOT income eligible - # $52,876 > SNAP limit -> no SNAP + # 2-person 250% FPL = $52,875 + # $100,000 > $52,875 -> NOT income eligible + # $100,000 > SNAP limit -> no SNAP il_ipass_assist_income_eligible: false il_ipass_assist_categorical_eligible: false il_ipass_assist_eligible: false -- name: Case 10, 8-person household exactly at threshold. - # Tests maximum common household size at exact FPL boundary - period: 2025-01 - input: - people: - person1: - age: 50 - employment_income: 70_000 - person2: - age: 48 - employment_income: 51_625 # Total = $121,625 - person3: - age: 22 - person4: - age: 20 - person5: - age: 17 - person6: - age: 14 - person7: - age: 10 - person8: - age: 6 - spm_units: - spm_unit: - members: [person1, person2, person3, person4, person5, person6, person7, person8] - households: - household: - members: [person1, person2, person3, person4, person5, person6, person7, person8] - state_code: IL - output: - # Household size: 8 - # Total income: $70,000 + $51,625 = $121,625 - # 250% FPL for 8 persons: $48,650 * 2.5 = $121,625 - # $121,625 <= $121,625 -> income eligible - # High income -> no SNAP - il_ipass_assist_income_eligible: true - il_ipass_assist_categorical_eligible: false - il_ipass_assist_eligible: true - -- name: Case 11, zero income household receives SNAP. - # Tests minimum income bound - zero income means SNAP eligible - period: 2025-01 - input: - people: - person1: - age: 25 - employment_income: 0 - person2: - age: 3 - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: IL - output: - # Household size: 2 - # Total income: $0 - # 250% FPL for 2 persons: $52,875 - # $0 <= $52,875 -> income eligible - # $0 income means SNAP eligible -> categorical eligible - il_ipass_assist_income_eligible: true - il_ipass_assist_categorical_eligible: true - il_ipass_assist_eligible: true - -- name: Case 12, low-income family with SNAP benefits. - # Tests household receiving SNAP (categorical eligibility requires low income) - period: 2025-01 - input: - people: - person1: - age: 75 - social_security: 12_000 - person2: - age: 35 - employment_income: 15_000 - person3: - age: 8 - spm_units: - spm_unit: - members: [person1, person2, person3] - households: - household: - members: [person1, person2, person3] - state_code: IL - output: - # Household size: 3 - # Total income: $12,000 + $15,000 = $27,000 - # 250% FPL for 3 persons: $66,625 - # $27,000 < $66,625 -> income eligible - # $27,000 < SNAP gross limit (~$34,600) -> SNAP benefits -> categorical eligible - il_ipass_assist_income_eligible: true - il_ipass_assist_categorical_eligible: true - il_ipass_assist_eligible: true - -- name: Case 13, mixed income sources near threshold. - # Tests various income types combining to threshold - period: 2025-01 - input: - people: - person1: - age: 65 - social_security: 20_000 - interest_income: 3_000 - person2: - age: 63 - employment_income: 15_000 - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: IL - output: - # Household size: 2 - # Total income: $20,000 + $3,000 + $15,000 = $38,000 - # 250% FPL for 2 persons: $52,875 - # $38,000 < $52,875 -> income eligible - # $38,000 > SNAP limit (~$27,400) -> no SNAP - il_ipass_assist_income_eligible: true - il_ipass_assist_categorical_eligible: false - il_ipass_assist_eligible: true - -- name: Case 14, income just over threshold with no categorical. - # Tests boundary miss scenario - not eligible on either pathway - # Note: SNAP requires income <= 130% FPL (~$20,345), so $39,200 income = no SNAP - period: 2025-01 +- name: Case 4, non-IL resident not eligible. + period: 2025 input: - people: - person1: - age: 40 - employment_income: 39_200 # Just over I-PASS threshold and way over SNAP limit - spm_units: - spm_unit: - members: [person1] - households: - household: - members: [person1] - state_code: IL + state_code: WI + employment_income: 20_000 output: - # Household size: 1 - # Total income: $39,200 - # 250% FPL for 1 person: $39,125 - # $39,200 > $39,125 -> NOT income eligible - # $39,200 >> SNAP limit (~$20,345) -> no SNAP -> NOT categorical eligible - il_ipass_assist_income_eligible: false - il_ipass_assist_categorical_eligible: false il_ipass_assist_eligible: false diff --git a/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.py b/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.py index ec9af827218..2054c40e370 100644 --- a/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.py +++ b/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_categorical_eligible.py @@ -6,10 +6,10 @@ class il_ipass_assist_categorical_eligible(Variable): entity = SPMUnit definition_period = YEAR label = "Illinois I-PASS Assist categorically eligible" - reference = ( + reference = [ "https://agency.illinoistollway.com/assist", "https://www.dhs.state.il.us/page.aspx?item=150431", - ) + ] defined_for = StateCode.IL def formula(spm_unit, period, parameters): diff --git a/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_eligible.py b/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_eligible.py index 58605c9e6cc..31d95da76e1 100644 --- a/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_eligible.py +++ b/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_eligible.py @@ -6,10 +6,10 @@ class il_ipass_assist_eligible(Variable): entity = SPMUnit definition_period = YEAR label = "Illinois I-PASS Assist eligible" - reference = ( + reference = [ "https://agency.illinoistollway.com/assist", "https://www.dhs.state.il.us/page.aspx?item=150431", - ) + ] defined_for = StateCode.IL def formula(spm_unit, period, parameters): diff --git a/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_income_eligible.py b/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_income_eligible.py index 0e7dc03dde0..60b27458568 100644 --- a/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_income_eligible.py +++ b/policyengine_us/variables/gov/states/il/tollway/ipass_assist/il_ipass_assist_income_eligible.py @@ -6,10 +6,10 @@ class il_ipass_assist_income_eligible(Variable): entity = SPMUnit definition_period = YEAR label = "Illinois I-PASS Assist income eligible" - reference = ( + reference = [ "https://agency.illinoistollway.com/assist", "https://www.dhs.state.il.us/page.aspx?item=150431", - ) + ] defined_for = StateCode.IL def formula(spm_unit, period, parameters):