From 5c11af1d29a9a917caa94b60976458d753876972 Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 26 Feb 2026 13:57:23 -0500 Subject: [PATCH 1/8] Initial commit for Indiana TANF parameter backdating Starting comprehensive backdating of Indiana TANF parameters to program inception. Documentation and parallel development will follow. Co-Authored-By: Claude Opus 4.6 From 30e13712827f70bbc2b0defb4dce22b7d8db8def Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 26 Feb 2026 14:38:52 -0500 Subject: [PATCH 2/8] Backdate Indiana TANF parameters to 1997 program inception Add 1997-10-01 entries for all 10 TANF parameter files reflecting frozen AFDC-era values. Key value change: while-receiving resource limit was $1,500 pre-SEA 265, now $10,000. Add 36 historical, boundary, and edge case tests. All 103 tests pass. Ref #7498 Co-Authored-By: Claude Opus 4.6 --- .../tanf/eligibility/continuing/fpg_rate.yaml | 1 + .../benefit/earned_income_disregard/rate.yaml | 1 + .../earned_income_disregard/rate.yaml | 1 + .../eligibility/flat_disregard/amount.yaml | 1 + .../deductions/work_expense/amount.yaml | 1 + .../limit/at_application/amount.yaml | 1 + .../limit/while_receiving/amount.yaml | 3 + .../resources/vehicle_exemption/amount.yaml | 1 + .../in/fssa/tanf/standard_of_need/amount.yaml | 14 + .../tanf/standard_of_need/max_unit_size.yaml | 1 + .../in_tanf_payment_standard_historical.yaml | 108 ++++++ .../gov/states/in/fssa/tanf/edge_cases.yaml | 144 +++++++ .../in/fssa/tanf/integration_historical.yaml | 107 ++++++ ...in_tanf_resources_eligible_historical.yaml | 58 +++ sources/working_references.md | 357 ++++++++++++++++++ 15 files changed, 799 insertions(+) create mode 100644 policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/benefit/in_tanf_payment_standard_historical.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/edge_cases.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration_historical.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/resources/in_tanf_resources_eligible_historical.yaml create mode 100644 sources/working_references.md diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/eligibility/continuing/fpg_rate.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/eligibility/continuing/fpg_rate.yaml index d567c1b88c6..b8ce8df8aa8 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/eligibility/continuing/fpg_rate.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/eligibility/continuing/fpg_rate.yaml @@ -1,6 +1,7 @@ description: Indiana uses this multiplier of the federal poverty guideline for continuing eligibility under the Temporary Assistance for Needy Families program. values: + 1997-10-01: 1 2023-07-01: 1 metadata: diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/benefit/earned_income_disregard/rate.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/benefit/earned_income_disregard/rate.yaml index 46cd8cb4c89..23fcb496a7e 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/benefit/earned_income_disregard/rate.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/benefit/earned_income_disregard/rate.yaml @@ -1,6 +1,7 @@ description: Indiana excludes this share of earned income when calculating benefits under the Temporary Assistance for Needy Families program. values: + 1997-10-01: 0.75 2023-07-01: 0.75 metadata: diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/earned_income_disregard/rate.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/earned_income_disregard/rate.yaml index ed09c6ed7da..32ebe215474 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/earned_income_disregard/rate.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/earned_income_disregard/rate.yaml @@ -1,6 +1,7 @@ description: Indiana excludes this share of earned income when determining eligibility under the Temporary Assistance for Needy Families program. values: + 1997-10-01: 0.33 2023-07-01: 0.33 metadata: diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/flat_disregard/amount.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/flat_disregard/amount.yaml index 202290bbaca..6c8541fbf9c 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/flat_disregard/amount.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/flat_disregard/amount.yaml @@ -1,6 +1,7 @@ description: Indiana deducts this amount from earned income when determining eligibility under the Temporary Assistance for Needy Families program. values: + 1997-10-01: 30 2023-07-01: 30 metadata: diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/work_expense/amount.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/work_expense/amount.yaml index a917a2db707..7f4b1e7c867 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/work_expense/amount.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/work_expense/amount.yaml @@ -1,6 +1,7 @@ description: Indiana deducts this amount from gross earned income as work-related expenses under the Temporary Assistance for Needy Families program. values: + 1997-10-01: 90 2023-07-01: 90 metadata: diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/limit/at_application/amount.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/limit/at_application/amount.yaml index 72170a781a0..7944d3f00a1 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/limit/at_application/amount.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/limit/at_application/amount.yaml @@ -1,6 +1,7 @@ description: Indiana limits resources to this amount when applying for the Temporary Assistance for Needy Families program. values: + 1997-10-01: 1_000 2023-07-01: 1_000 metadata: diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/limit/while_receiving/amount.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/limit/while_receiving/amount.yaml index 72a58354fe9..e276e8a2df6 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/limit/while_receiving/amount.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/limit/while_receiving/amount.yaml @@ -1,6 +1,7 @@ description: Indiana limits resources to this amount while receiving the Temporary Assistance for Needy Families program. values: + 1997-10-01: 1_500 2023-07-01: 10_000 metadata: @@ -10,3 +11,5 @@ metadata: reference: - title: IC 12-14-1-1(b) href: https://iga.in.gov/laws/2025/ic/titles/12/#12-14-1-1 + - title: WIOA State Plan Portal, Indiana PY 2020-2023 (pre-SEA 265 value) + href: https://wioaplans.dol.gov/node/67731 diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/vehicle_exemption/amount.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/vehicle_exemption/amount.yaml index d455bcbcd2d..1f8635bc41d 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/vehicle_exemption/amount.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/vehicle_exemption/amount.yaml @@ -1,6 +1,7 @@ description: Indiana excludes this amount of vehicle equity from countable resources under the Temporary Assistance for Needy Families program. values: + 1997-10-01: 20_000 2023-07-01: 20_000 metadata: diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/amount.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/amount.yaml index 41e71620a2b..f5af53402b6 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/amount.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/amount.yaml @@ -1,24 +1,34 @@ description: Indiana provides this amount as the standard of need under the Temporary Assistance for Needy Families program. 1: + 1997-10-01: 139 2023-07-01: 155 2: + 1997-10-01: 229 2023-07-01: 255 3: + 1997-10-01: 288 2023-07-01: 320 4: + 1997-10-01: 346 2023-07-01: 385 5: + 1997-10-01: 405 2023-07-01: 450 6: + 1997-10-01: 463 2023-07-01: 515 7: + 1997-10-01: 522 2023-07-01: 580 8: + 1997-10-01: 580 2023-07-01: 645 9: + 1997-10-01: 639 2023-07-01: 710 10: + 1997-10-01: 697 2023-07-01: 775 metadata: @@ -34,3 +44,7 @@ metadata: href: https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-3 - title: IC 12-14-2-5 href: https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-5 + - title: Indiana DCS Assistance for Unlicensed Relative Placements (pre-2023 values) + href: https://www.in.gov/dcs/files/16.2%20Assistance%20for%20Unlicensed%20Relative%20Placements.pdf#page=7 + - title: 1997 Green Book, Section 7 (AFDC/TANF benefit tables) + href: https://www.govinfo.gov/content/pkg/GPO-CPRT-105WPRT37945/html/GPO-CPRT-105WPRT37945-2-7.htm diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/max_unit_size.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/max_unit_size.yaml index ba29895fdb6..56fbc974c7a 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/max_unit_size.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/max_unit_size.yaml @@ -1,6 +1,7 @@ description: Indiana sets this as the maximum unit size for standard of need lookup under the Temporary Assistance for Needy Families program. values: + 1997-10-01: 10 2023-07-01: 10 metadata: diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/benefit/in_tanf_payment_standard_historical.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/benefit/in_tanf_payment_standard_historical.yaml new file mode 100644 index 00000000000..eeea1318130 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/benefit/in_tanf_payment_standard_historical.yaml @@ -0,0 +1,108 @@ +# Historical payment standard tests (pre-SEA 265 era) +# Benefits were frozen at 1988 AFDC levels from 1997-10-01 through 2023-06-30 + +- name: Pre-reform payment standard for family of 1 + period: 2020-01 + input: + spm_unit_size: 1 + state_code: IN + output: + in_tanf_payment_standard: 139 + +- name: Pre-reform payment standard for family of 2 + period: 2020-01 + input: + spm_unit_size: 2 + state_code: IN + output: + in_tanf_payment_standard: 229 + +- name: Pre-reform payment standard for family of 3 + period: 2020-01 + input: + spm_unit_size: 3 + state_code: IN + output: + in_tanf_payment_standard: 288 + +- name: Pre-reform payment standard for family of 4 + period: 2020-01 + input: + spm_unit_size: 4 + state_code: IN + output: + in_tanf_payment_standard: 346 + +- name: Pre-reform payment standard for family of 5 + period: 2020-01 + input: + spm_unit_size: 5 + state_code: IN + output: + in_tanf_payment_standard: 405 + +- name: Pre-reform payment standard for family of 6 + period: 2020-01 + input: + spm_unit_size: 6 + state_code: IN + output: + in_tanf_payment_standard: 463 + +- name: Pre-reform payment standard for family of 7 + period: 2020-01 + input: + spm_unit_size: 7 + state_code: IN + output: + in_tanf_payment_standard: 522 + +- name: Pre-reform payment standard for family of 8 + period: 2020-01 + input: + spm_unit_size: 8 + state_code: IN + output: + in_tanf_payment_standard: 580 + +- name: Pre-reform payment standard for family of 9 + period: 2020-01 + input: + spm_unit_size: 9 + state_code: IN + output: + in_tanf_payment_standard: 639 + +- name: Pre-reform payment standard for family of 10 + period: 2020-01 + input: + spm_unit_size: 10 + state_code: IN + output: + in_tanf_payment_standard: 697 + +# Transition boundary tests + +- name: Pre-reform January 2023 still uses old values + period: 2023-01 + input: + spm_unit_size: 3 + state_code: IN + output: + in_tanf_payment_standard: 288 + +- name: Post-reform January 2024 uses new values + period: 2024-01 + input: + spm_unit_size: 3 + state_code: IN + output: + in_tanf_payment_standard: 320 + +- name: Pre-reform era at program inception (1998) + period: 1998-01 + input: + spm_unit_size: 3 + state_code: IN + output: + in_tanf_payment_standard: 288 diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/edge_cases.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/edge_cases.yaml new file mode 100644 index 00000000000..6279f1514da --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/edge_cases.yaml @@ -0,0 +1,144 @@ +# Indiana TANF edge case tests + +# Edge case: Earner at exactly $90 (work expense disregard boundary) +- name: Earner at exactly $90 - all income disregarded for eligibility + period: 2024-01 + input: + people: + person1: + tanf_gross_earned_income: 90 + person2: + age: 10 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: IN + output: + in_tanf_countable_earned_income_for_eligibility: [0, 0] + # $90 - $90 = $0; $0 - $30 = $0; $0 * 0.67 = $0 + in_tanf_countable_earned_income: [22.5, 22.5] + # $90 * 0.25 = $22.50 + +# Edge case: Earner at exactly $120 ($90 + $30 disregard boundary) +- name: Earner at exactly $120 - flat disregard exactly zeros remainder + period: 2024-01 + input: + people: + person1: + tanf_gross_earned_income: 120 + person2: + age: 10 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: IN + output: + in_tanf_countable_earned_income_for_eligibility: [0, 0] + # $120 - $90 = $30; $30 - $30 = $0; $0 * 0.67 = $0 + +# Edge case: Family of 8 (max pre-reform) vs family of 9 +- name: Family of 8 gets size-8 standard pre-reform + period: 2020-01 + input: + spm_unit_size: 8 + state_code: IN + output: + in_tanf_payment_standard: 580 + +- name: Family of 9 gets size-9 standard pre-reform + period: 2020-01 + input: + spm_unit_size: 9 + state_code: IN + output: + in_tanf_payment_standard: 639 + +# Edge case: Family of 10 post-reform gets size-10 value +- name: Family of 10 gets size-10 standard post-reform + period: 2024-01 + input: + spm_unit_size: 10 + state_code: IN + output: + in_tanf_payment_standard: 775 + +# Edge case: Family of 12 capped at max unit size post-reform +- name: Family of 12 capped at size-10 post-reform + period: 2024-01 + input: + spm_unit_size: 12 + state_code: IN + output: + in_tanf_payment_standard: 775 + +# Edge case: Income just below eligibility threshold +- name: Income just below standard of need threshold + period: 2024-01 + input: + in_tanf_countable_income_for_eligibility: 319 + in_tanf_payment_standard: 320 + is_tanf_enrolled: false + state_code: IN + output: + in_tanf_countable_income_eligible: true + # $319 < $320 = true + +# Edge case: Income at exactly the threshold +- name: Income at exactly standard of need threshold + period: 2024-01 + input: + in_tanf_countable_income_for_eligibility: 320 + in_tanf_payment_standard: 320 + is_tanf_enrolled: false + state_code: IN + output: + in_tanf_countable_income_eligible: false + # $320 < $320 = false (strict less-than) + +# Edge case: Resources at exactly the application limit +- name: Resources at exactly $1,000 application limit + period: 2024-01 + input: + state_code: IN + in_tanf_countable_resources: 1_000 + is_tanf_enrolled: false + output: + in_tanf_resources_eligible: true + # $1,000 <= $1,000 = true + +# Edge case: Resources $1 over application limit +- name: Resources $1 over application limit + period: 2024-01 + input: + state_code: IN + in_tanf_countable_resources: 1_001 + is_tanf_enrolled: false + output: + in_tanf_resources_eligible: false + +# Edge case: Resources at exactly enrolled limit +- name: Resources at exactly $10,000 enrolled limit + period: 2024-01 + input: + state_code: IN + in_tanf_countable_resources: 10_000 + is_tanf_enrolled: true + output: + in_tanf_resources_eligible: true + +# Edge case: Benefit equals exactly $1 (near-zero benefit) +- name: Benefit of exactly $1 + period: 2024-01 + input: + in_tanf_eligible: true + in_tanf_payment_standard: 320 + in_tanf_countable_income_for_payment: 319 + state_code: IN + output: + in_tanf: 1 diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration_historical.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration_historical.yaml new file mode 100644 index 00000000000..ee928258536 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration_historical.yaml @@ -0,0 +1,107 @@ +# Historical integration tests (pre-SEA 265 era) +# Tests the full benefit calculation pipeline with 1997-2023 parameter values + +- name: Pre-reform family of 3 with no income receives $288 + period: 2020-01 + input: + people: + person1: + age: 30 + tanf_gross_earned_income: 0 + tanf_gross_unearned_income: 0 + person2: + age: 10 + person3: + age: 8 + spm_units: + spm_unit: + members: [person1, person2, person3] + spm_unit_cash_assets: 500 + households: + household: + members: [person1, person2, person3] + state_code: IN + output: + in_tanf_payment_standard: [288, 288, 288] + in_tanf_countable_income_for_payment: [0, 0, 0] + in_tanf_countable_income_eligible: [true, true, true] + in_tanf_payment_eligible: [true, true, true] + in_tanf: [288, 288, 288] + +- name: Pre-reform family of 3 with earned income + period: 2020-01 + input: + people: + person1: + age: 28 + tanf_gross_earned_income: 200 + person2: + age: 5 + person3: + age: 3 + spm_units: + spm_unit: + members: [person1, person2, person3] + spm_unit_cash_assets: 800 + households: + household: + members: [person1, person2, person3] + state_code: IN + output: + in_tanf_payment_standard: [288, 288, 288] + in_tanf_countable_earned_income: [50, 50, 50] + # $200 * 0.25 = $50 + in_tanf_countable_income_for_payment: [50, 50, 50] + in_tanf_countable_earned_income_for_eligibility: [53.6, 53.6, 53.6] + # $200 - $90 = $110 -> $110 - $30 = $80 -> $80 * 0.67 = $53.60 + in_tanf_countable_income_for_eligibility: [53.6, 53.6, 53.6] + in_tanf_countable_income_eligible: [true, true, true] + in_tanf_payment_eligible: [true, true, true] + in_tanf: [238, 238, 238] + # $288 - $50 = $238 + +- name: Pre-reform January 2023 family of 3 gets old benefit + period: 2023-01 + input: + people: + person1: + age: 30 + tanf_gross_earned_income: 0 + person2: + age: 10 + person3: + age: 8 + spm_units: + spm_unit: + members: [person1, person2, person3] + spm_unit_cash_assets: 500 + households: + household: + members: [person1, person2, person3] + state_code: IN + output: + in_tanf_payment_standard: [288, 288, 288] + in_tanf: [288, 288, 288] + +- name: Post-reform January 2024 family of 3 gets new benefit + period: 2024-01 + input: + people: + person1: + age: 30 + tanf_gross_earned_income: 0 + person2: + age: 10 + person3: + age: 8 + spm_units: + spm_unit: + members: [person1, person2, person3] + spm_unit_cash_assets: 500 + households: + household: + members: [person1, person2, person3] + state_code: IN + output: + in_tanf_payment_standard: [320, 320, 320] + in_tanf: [320, 320, 320] diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/resources/in_tanf_resources_eligible_historical.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/resources/in_tanf_resources_eligible_historical.yaml new file mode 100644 index 00000000000..6ca3216ddab --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/resources/in_tanf_resources_eligible_historical.yaml @@ -0,0 +1,58 @@ +# Historical resource eligibility tests (pre-SEA 265) +# While-receiving limit was $1,500 before July 2023, changed to $10,000 + +- name: Pre-reform enrolled family at $1,400 passes (under $1,500 limit) + period: 2020-01 + input: + state_code: IN + in_tanf_countable_resources: 1_400 + is_tanf_enrolled: true + output: + in_tanf_resources_eligible: true + +- name: Pre-reform enrolled family at $1,500 passes (at $1,500 limit) + period: 2020-01 + input: + state_code: IN + in_tanf_countable_resources: 1_500 + is_tanf_enrolled: true + output: + in_tanf_resources_eligible: true + +- name: Pre-reform enrolled family at $1,501 fails (over $1,500 limit) + period: 2020-01 + input: + state_code: IN + in_tanf_countable_resources: 1_501 + is_tanf_enrolled: true + output: + in_tanf_resources_eligible: false + +- name: Pre-reform applicant at $999 passes (under $1,000 limit) + period: 2020-01 + input: + state_code: IN + in_tanf_countable_resources: 999 + is_tanf_enrolled: false + output: + in_tanf_resources_eligible: true + +# Transition boundary tests + +- name: Pre-reform 2023 enrolled at $5,000 fails (old $1,500 limit) + period: 2023-01 + input: + state_code: IN + in_tanf_countable_resources: 5_000 + is_tanf_enrolled: true + output: + in_tanf_resources_eligible: false + +- name: Post-reform 2024 enrolled at $5,000 passes (new $10,000 limit) + period: 2024-01 + input: + state_code: IN + in_tanf_countable_resources: 5_000 + is_tanf_enrolled: true + output: + in_tanf_resources_eligible: true diff --git a/sources/working_references.md b/sources/working_references.md new file mode 100644 index 00000000000..1694d315332 --- /dev/null +++ b/sources/working_references.md @@ -0,0 +1,357 @@ +# Indiana TANF Historical Sources — Working References + +## Summary of Key Historical Finding + +**Indiana's TANF benefit amounts (standard of need) were frozen at 1988 AFDC levels from program inception (1997) until July 1, 2023**, when SEA 265 took effect. This means the standard of need schedule was unchanged for ~35 years. The 1997 Green Book confirms the 1997 values match the pre-2023 values exactly. + +--- + +## 1. Standard of Need (Benefit Amounts by Family Size) + +### Era 1: 1988–2023-06-30 (AFDC-era frozen values) + +These values were set in 1988 under AFDC and carried forward unchanged into TANF (1997) through June 30, 2023. + +**Assistance Groups with Adults and Children:** + +| Family Size | Monthly Amount | +|-------------|---------------| +| 1 | $139 | +| 2 | $229 | +| 3 | $288 | +| 4 | $346 | +| 5 | $405 | +| 6 | $463 | +| 7 | $522 | +| 8 | $580 | +| 9 | $637 | +| 10 | $695 | + +**Sources:** +- 1997 Green Book (GPO-CPRT-105WPRT37945): Confirms $139/$229/$288/$346/$405/$463 for family sizes 1-6 as of January 1997 + - https://www.govinfo.gov/content/pkg/GPO-CPRT-105WPRT37945/html/GPO-CPRT-105WPRT37945-2-7.htm +- Issue #6665 references: 2001 Indiana Program Budget Book confirms "$288 for family of three" + - https://www.in.gov/sba/files/2001_Indiana_Program_Budget_Book_Narratives.pdf#page=64 +- Indiana DCS "Assistance for Unlicensed Relative Placements" (2016 version) + - https://www.in.gov/dcs/files/16.2%20Assistance%20for%20Unlicensed%20Relative%20Placements.pdf#page=7 +- Indiana DCS "Assistance for Unlicensed Relative Placements" (2019 archived version) + - https://www.in.gov/dcs/files/16.02-Assistance-for-Unlicensed-Relative-Placements.docx-ARCHIVED-8-28-2020-v5.pdf#page=7 +- WIOA State Plan Portal (PY 2020-2023) confirms $139.50/$229.50/$288/$346/$405.50/$463/$522.50/$580 per month + - https://wioaplans.dol.gov/node/67731 +- Multiple news sources confirm benefits "unchanged since 1988" / "first increase since TANF's creation" + +**RESOLVED — DCS PDF Verification (page 7 of both PDFs):** +Both DCS PDFs (2016 current and 2019 archived) show identical round-number values. The WIOA State Plan half-dollar amounts ($139.50, $229.50, etc.) are incorrect/approximate — the authoritative DCS documents show $139.00, $229.00, etc. + +**Sizes 9-10:** Not shown in DCS PDFs (table goes to size 8 only). Pattern analysis: increments are +$90, +$59, then +$58 per additional member (sizes 3-8). Extrapolating: size 9 = $638, size 10 = $696. However, the 1997 Green Book only covers sizes 1-6, and the DCS table covers sizes 1-8. Sizes 9-10 remain unverified for the pre-2023 era — may not have been defined (max unit size may have been 8). + +**DCS PDF also shows Gross Income Limits (pre-2023):** + +| Family Size | Gross Income Limit | +|-------------|-------------------| +| 1 | $286.75 | +| 2 | $471.75 | +| 3 | $592.00 | +| 4 | $712.25 | +| 5 | $832.50 | +| 6 | $952.75 | +| 7 | $1,073.00 | +| 8 | $1,193.25 | + +**DCS PDF also shows Children-Only amounts:** + +| Family Size | Children Only | +|-------------|--------------| +| 1 | $139.00 | +| 2 | $198.00 | +| 3 | $256.00 | +| 4 | $315.00 | +| 5 | $373.00 | +| 6 | $432.00 | +| 7 | $490.00 | +| 8 | $549.00 | + +### Era 2: 2023-07-01–present (SEA 265 values) + +These values took effect July 1, 2023, per SEA 265 (Senate Enrolled Act 265, signed May 22, 2023). + +| Family Size | Monthly Amount | +|-------------|---------------| +| 1 | $155 | +| 2 | $255 | +| 3 | $320 | +| 4 | $385 | +| 5 | $450 | +| 6 | $515 | +| 7 | $580 | +| 8 | $645 | +| 9 | $710 | +| 10 | $775 | + +**Sources:** +- Indiana FSSA DFR "About TANF" page (current): Shows Gross Income / Net Income tables + - https://www.in.gov/fssa/dfr/tanf-cash-assistance/about-tanf/ +- 470 IAC 10.3-4-3(a)(1): Standard of need schedule + - https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-3 +- IC 12-14-2-5: Statutory authority for standard of need + - https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-5 +- SEA 265 bill page: + - https://iga.in.gov/legislative/2023/bills/senate/265/details + +**Pattern:** $155, +$100, then +$65 per additional member (sizes 3-10). + +--- + +## 2. Earned Income Disregards + +### For Eligibility Determination + +**Current (2023-07-01–present):** +- Work expense deduction: $90 (from gross earnings) +- Flat disregard: $30 +- Earned income disregard rate: 33% (one-third of remaining after $30 deduction) + +**Source:** 470 IAC 10.3-4-4(c)(1) and (c)(2) +- https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-4 + +**Historical context:** The "$30 and 1/3" disregard is an inherited AFDC-era policy. Per the WIOA State Plan (PY 2020-2023): +- $90 work expense disregard +- $30 and 1/3 disregard for four consecutive months following work expense deduction +- $30 disregard for eight-month period thereafter +- Source: https://wioaplans.dol.gov/node/67731 + +**NOTE:** The current codebase has a flat $30 disregard and 33% rate without the time-limited phaseout. This may be an intentional simplification or may need review. + +### For Benefit Calculation + +**Current (2023-07-01–present):** +- Earned income disregard rate: 75% (i.e., only 25% of gross earnings counted) + +**Source:** 470 IAC 10.3-4-4(d)(1) +- https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-4 +- WIOA State Plan confirms: "75% of earned income is disregarded; 25% of gross earnings and 100% of non-exempt unearned income applied to benefit calculation" + +**Historical:** This 75% disregard for benefit calculation appears to be longstanding. Need to verify if it changed with SEA 265. + +--- + +## 3. Resource Limits + +### At Application +- **Amount:** $1,000 +- **Source:** 470 IAC 10.3-4-2 (references IC 12-14-1-1(a) implicitly) + - https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-2 + - Cornell LII: https://www.law.cornell.edu/regulations/indiana/470-IAC-10.3-4-2 + +### While Receiving +- **Amount:** $10,000 +- **Source:** IC 12-14-1-1(b) — "does not cease to qualify...so long as the resources...are valued at not more than ten thousand dollars ($10,000)" + - https://iga.in.gov/laws/2025/ic/titles/12/#12-14-1-1 + - LawServer: https://www.lawserver.com/law/state/indiana/in-code/indiana_code_12-14-1-1 + - Last amended by P.L.103-2023 (SEA 265) + +**Historical:** The $1,000 at-application limit appears to be longstanding (AFDC-era). The $10,000 while-receiving limit was enacted or modified by SEA 265 (P.L.103-2023). The WIOA State Plan (PY 2020-2023) mentions $1,000 initial and $1,500 ongoing — suggesting the while-receiving limit was $1,500 before SEA 265 changed it to $10,000. + +--- + +## 4. Vehicle Exemption + +- **Amount:** $20,000 total equity value for all motor vehicles +- **Source:** IC 12-14-2-1(b)(2) — referenced in 470 IAC 10.3-4-2 + - https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-1 + - Cornell LII confirms: "Each applicant group will be allowed an exclusion of $20,000 of total equity value in motor vehicles" + +**Historical:** Need to verify when $20,000 amount was set. May have been changed by SEA 265 or earlier legislation. + +--- + +## 5. Continuing Eligibility FPG Rate + +- **Current rate:** 100% of Federal Poverty Guidelines (for continuing eligibility) +- **Source:** 470 IAC 10.3-4-1 + - https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-1 + +**Historical:** Per SEA 265, the income eligibility threshold is being phased in: +- Pre-SEA 265: ~16-17% FPL (grossly restricted) +- SEA 265 phase-in to 35% FPL, then to 50% FPL by end of 2027 +- First eligibility increase: July 2025 +- Full increase: ~2027-2028 +- The FSSA "About TANF" page shows gross income limit of 35% FPL currently +- Continuing eligibility: 100% FPG (for those already receiving) + +**NOTE:** The codebase currently has `fpg_rate` = 1 (100%) for continuing eligibility starting 2023-07-01. This represents the continuing eligibility threshold, not the initial eligibility gross income test. + +--- + +## 6. Gross Income Test + +**Current (from FSSA About TANF page):** + +| Family Size | Gross Income Limit | Net Income Limit | +|-------------|-------------------|-----------------| +| 1 | $457 | $248 | +| 2 | $618 | $409 | +| 3 | $778 | $513 | +| 4 | $938 | $617 | +| 5 | $1,099 | $721 | +| 6 | $1,259 | $825 | +| 7 | $1,420 | $929 | +| 8 | $1,580 | $1,033 | +| 9 | $1,740 | $1,137 | +| 10 | $1,901 | $1,241 | +| Each Additional | +$161 | +$104 | + +**Source:** https://www.in.gov/fssa/dfr/tanf-cash-assistance/about-tanf/ + +**Analysis:** The gross income limit appears to be approximately 35% of FPL (consistent with the current phase of SEA 265). The net income limits appear to be approximately 160% of the standard of need amounts (e.g., $513 / $320 = 1.603 for family of 3). + +--- + +## 7. Major Legislative History + +| Date | Event | Source | +|------|-------|--------| +| 1988 | Indiana sets AFDC benefit schedule (standard of need) in statute | Multiple news sources | +| 1997-10-01 | Indiana TANF program begins, carrying forward AFDC benefit levels | Federal welfare reform (PRWORA 1996) | +| 1997-2023 | Benefit levels frozen at 1988 AFDC amounts | CBPP, news articles | +| 2023-05-22 | SEA 265 signed by Governor | https://www.indianasenaterepublicans.com/ford-bill-expanding-tanf-eligibility-in-indiana-signed-by-governor | +| 2023-07-01 | SEA 265 benefit increases take effect (standard of need raised) | 470 IAC 10.3-4-3, FSSA About TANF page | +| 2023-07-01 | Resource limit while receiving raised to $10,000 | IC 12-14-1-1(b), P.L.103-2023 | +| 2023-07-01 | Family benefit cap repealed | SEA 265 | +| 2025-07-01 | First eligibility threshold increase (to 35% FPL) | SEA 265 phase-in | +| ~2027 | Full eligibility threshold increase (to 50% FPL) | SEA 265 phase-in | + +--- + +## 8. Regulatory Authority Sources + +### Indiana Code (IC) +- **IC 12-14-1-1**: TANF eligibility, resource limits + - https://iga.in.gov/laws/2025/ic/titles/12/#12-14-1-1 +- **IC 12-14-2-1**: Property/vehicle exemptions + - https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-1 +- **IC 12-14-2-5**: Standard of need schedule + - https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-5 + +### Indiana Administrative Code (470 IAC) +- **470 IAC 10.3**: TANF Assistance Program (full article) + - https://iar.iga.in.gov/latestArticle/470/10.3 + - Justia: https://regulations.justia.com/states/indiana/title-470/article-10-3/ +- **470 IAC 10.3-4-1**: Continuing eligibility FPG rate +- **470 IAC 10.3-4-2**: Real and personal property (resource limits) + - Cornell LII: https://www.law.cornell.edu/regulations/indiana/470-IAC-10.3-4-2 +- **470 IAC 10.3-4-3**: Standard of need amounts +- **470 IAC 10.3-4-4**: Income deductions/disregards + +### Legislation +- **SEA 265 (2023)**: First TANF increase in 30+ years + - Bill page: https://iga.in.gov/legislative/2023/bills/senate/265/details + +### State Plan Documents +- **Indiana TANF State Plan Amendment** + - https://www.in.gov/fssa/dfr/files/TANF_Indiana_State_Plan_amendment.pdf +- **Indiana TANF State Plan Renewal** (effective 1/1/2023) + - https://www.in.gov/fssa/dfr/files/Indiana-TANF-State-Plan_Renewal.pdf + +### Policy Manuals +- **FSSA DFR Policy Manual** (main page) + - https://www.in.gov/fssa/dfr/forms-documents-and-tools/policy-manual/ +- **Chapter 3400**: Financial eligibility criteria + - https://www.in.gov/fssa/dfr/files/3400.pdf +- **Chapter 2800**: Income + - https://www.in.gov/fssa/dfr/files/2800.pdf +- **Policy Manual Transmittals** (2023, 2024) + - https://www.in.gov/fssa/dfr/forms-documents-and-tools/policy-manual/program-policy-manual-transmittals/ + +### Cross-Reference/Verification Sources +- **1997 Green Book** (GPO): AFDC/TANF benefit tables by state (January 1997) + - https://www.govinfo.gov/content/pkg/GPO-CPRT-105WPRT37945/html/GPO-CPRT-105WPRT37945-2-7.htm +- **2004 Green Book** (GPO): TANF benefit tables + - https://www.govinfo.gov/content/pkg/GPO-CPRT-108WPRT108-6/html/GPO-CPRT-108WPRT108-6-2-7.htm +- **Urban Institute Welfare Rules Database**: Historical TANF policies 1996-2023 + - https://wrd.urban.org/ + - Databook (2013): https://wrd.urban.org/sites/default/files/documents/2023-09/Welfare%20Rules%20Databook%202013.pdf + - Databook (2021): https://www.urban.org/sites/default/files/2023-08/Welfare%20Rules%20Databook%20State%20TANF%20Policies%20as%20of%20July%202021.pdf + - Graphical Overview (2023): https://www.urban.org/sites/default/files/2025-05/Graphical-Overview-of-State-and-Territory-TANF-Policies-as-of-July-2023.pdf +- **WIOA State Plan Portal (PY 2020-2023)**: Indiana TANF details + - https://wioaplans.dol.gov/node/67731 +- **NCCP TANF Profile (Indiana)**: 2024 benefit comparison + - https://www.nccp.org/wp-content/uploads/2024/08/TANF-profile-Indiana.pdf +- **NCCP 50-State Comparison**: 2024 TANF benefit amounts + - https://www.nccp.org/wp-content/uploads/2024/11/TANF-Benefit-Amounts-2024-FINAL.pdf +- **CBPP**: TANF benefit level analysis + - https://www.cbpp.org/research/income-security/continued-increases-in-tanf-benefit-levels-are-critical-to-helping +- **INCAP Report**: Indiana TANF history and analysis + - https://institute.incap.org/assets/docs/Reports/TANF%20Report_Final.pdf +- **INCAP Fact Sheet (2021)**: TANF and SB 233 + - https://institute.incap.org/assets/docs/Fact-Sheets/FactSheet-2021-TANFandSB233.pdf +- **2001 Indiana Budget Book**: Confirms $288 for family of 3 + - https://www.in.gov/sba/files/2001_Indiana_Program_Budget_Book_Narratives.pdf#page=64 +- **Indiana DCS Documents** (issue #6665 references): + - 2016 version: https://www.in.gov/dcs/files/16.2%20Assistance%20for%20Unlicensed%20Relative%20Placements.pdf#page=7 + - 2019 archived: https://www.in.gov/dcs/files/16.02-Assistance-for-Unlicensed-Relative-Placements.docx-ARCHIVED-8-28-2020-v5.pdf#page=7 + - 2016 archived (v3): https://www.in.gov/dcs/files/16.2-Assistance-for-Unlicensed-Relative-Placements-Archive-10-31-2016-v3.pdf +- **2010 FSSA Fact Sheet**: Statewide TANF data + - https://www.in.gov/fssa/dfr/files/INFact_Sheet_Statewide_2010-01.pdf + +### News Coverage (for timeline verification) +- Indiana Capital Chronicle (Jan 2023): "Senate committee passes first TANF increase in over 30 years" + - https://indianacapitalchronicle.com/2023/01/24/senator-committee-passes-first-tanf-increase-in-over-30-years/ +- WFYI (Jan 2023): "Indiana Senate passes bill with 'modest' increases to TANF eligibility limit, payments" + - https://www.wfyi.org/news/articles/indiana-senate-passes-bill-with-modest-increases-to-tanf-eligibility-limit-payments +- WFYI (Apr 2023): "Indiana set to expand access to temporary government help" + - https://www.wfyi.org/news/articles/indiana-set-to-expand-access-to-temporary-government-help-for-low-income-people--eventually +- Indiana Public Radio (Jun 2023): "Congress' debt deal may hinder new Indiana law" + - https://indianapublicradio.org/news/2023/06/congress-debt-deal-may-hinder-a-new-indiana-law-to-extend-tanf-benefits-to-thousands-of-families/ + +--- + +## 9. Implementation Plan for Backdating + +### Parameters That Need Historical Entries + +Given that benefits were frozen from 1988 through June 30, 2023, each parameter needs ONE historical entry backdated to program inception: + +1. **standard_of_need/amount.yaml**: Add 1997-10-01 entries with the AFDC-era values (sizes 1-10) +2. **income/deductions/benefit/earned_income_disregard/rate.yaml**: Add 1997-10-01 entry (verify if 75% is unchanged) +3. **income/deductions/eligibility/earned_income_disregard/rate.yaml**: Add 1997-10-01 entry (verify if 33% is unchanged) +4. **income/deductions/eligibility/flat_disregard/amount.yaml**: Add 1997-10-01 entry (verify if $30 is unchanged) +5. **income/deductions/work_expense/amount.yaml**: Add 1997-10-01 entry (verify if $90 is unchanged) +6. **resources/limit/at_application/amount.yaml**: Add 1997-10-01 entry ($1,000 — longstanding) +7. **resources/limit/while_receiving/amount.yaml**: Add 1997-10-01 entry with OLD value (likely $1,500 per WIOA State Plan) — then 2023-07-01 = $10,000 +8. **resources/vehicle_exemption/amount.yaml**: Need to verify if $20,000 was always the amount or changed +9. **eligibility/continuing/fpg_rate.yaml**: Need to verify historical value + +### Open Questions (Need Verification from Prep Agent PDF Renders) + +1. **Exact pre-2023 standard of need for sizes 7-10**: Green Book only goes to size 6. DCS PDFs may have full table. +2. **Half-dollar amounts**: WIOA shows $139.50, $229.50, etc. vs Green Book showing $139, $229. Which is correct? +3. **While-receiving resource limit history**: Was it $1,500 before SEA 265 changed it to $10,000? +4. **Vehicle exemption history**: Was $20,000 always the amount? +5. **Earned income disregard history**: Were the rates (75% benefit, 33% eligibility, $30 flat, $90 work expense) unchanged since program inception? +6. **FPG rate history**: The current 100% FPG for continuing eligibility — was this always the case? +7. **Children-only groups**: Different benefit schedule exists (see WIOA data). Not currently modeled in codebase — may not need backdating but should document. + +--- + +## 10. Children-Only Assistance Groups (Reference Only) + +Per WIOA State Plan (PY 2020-2023), Indiana has a separate benefit schedule for children-only groups: + +| Children | Monthly Amount | +|----------|---------------| +| 1 | $139.50 | +| 2 | $198.00 | +| 3 | $256.50 | +| 4 | $315.00 | +| 5 | $373.50 | +| 6 | $432.00 | +| 7 | $490.50 | +| 8 | $549.00 | + +This is NOT currently implemented in the codebase. Documenting for completeness. + +--- + +*Last updated: 2026-02-26* +*Status: Research complete, pending prep agent PDF verification* From feadaa92c36e37a6cd9a9e2415633eb8326df9ba Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 26 Feb 2026 14:54:28 -0500 Subject: [PATCH 3/8] Add changelog fragment for Indiana TANF backdating Co-Authored-By: Claude Opus 4.6 --- changelog.d/backdate-in-tanf.added.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/backdate-in-tanf.added.md diff --git a/changelog.d/backdate-in-tanf.added.md b/changelog.d/backdate-in-tanf.added.md new file mode 100644 index 00000000000..6f2462ed2d7 --- /dev/null +++ b/changelog.d/backdate-in-tanf.added.md @@ -0,0 +1 @@ +Backdate Indiana TANF parameters to 1997 program inception. From f96143e4b02fe092ac0a67a0b344719314efae3d Mon Sep 17 00:00:00 2001 From: Ziming Date: Sat, 28 Feb 2026 23:11:19 -0500 Subject: [PATCH 4/8] add partial months disregard to formula --- changelog.d/backdate-in-tanf.added.md | 2 +- .../tanf/eligibility/continuing/fpg_rate.yaml | 5 +- .../benefit/earned_income_disregard/rate.yaml | 3 +- .../earned_income_disregard/months.yaml | 14 + .../earned_income_disregard/rate.yaml | 3 +- .../eligibility/flat_disregard/amount.yaml | 3 +- .../deductions/work_expense/amount.yaml | 3 +- .../limit/at_application/amount.yaml | 5 +- .../limit/while_receiving/amount.yaml | 10 +- .../resources/vehicle_exemption/amount.yaml | 10 +- .../in/fssa/tanf/standard_of_need/amount.yaml | 4 +- .../tanf/standard_of_need/max_unit_size.yaml | 3 +- .../gov/states/in/fssa/tanf/edge_cases.yaml | 1 + .../in_tanf_countable_income_eligible.yaml | 16 +- ...untable_earned_income_for_eligibility.yaml | 173 +++++++-- .../gov/states/in/fssa/tanf/integration.yaml | 126 ++++++- .../in/fssa/tanf/integration_historical.yaml | 1 + ...in_tanf_resources_eligible_historical.yaml | 4 +- ...countable_earned_income_for_eligibility.py | 26 +- sources/working_references.md | 357 ------------------ 20 files changed, 349 insertions(+), 420 deletions(-) create mode 100644 policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/earned_income_disregard/months.yaml delete mode 100644 sources/working_references.md diff --git a/changelog.d/backdate-in-tanf.added.md b/changelog.d/backdate-in-tanf.added.md index 6f2462ed2d7..6289b704d6f 100644 --- a/changelog.d/backdate-in-tanf.added.md +++ b/changelog.d/backdate-in-tanf.added.md @@ -1 +1 @@ -Backdate Indiana TANF parameters to 1997 program inception. +Backdate Indiana TANF parameters to 1997 program inception. Differentiate applicant vs. recipient income deductions with 4-month earned income disregard limit. diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/eligibility/continuing/fpg_rate.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/eligibility/continuing/fpg_rate.yaml index b8ce8df8aa8..2c6d1d3aeaf 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/eligibility/continuing/fpg_rate.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/eligibility/continuing/fpg_rate.yaml @@ -2,12 +2,13 @@ description: Indiana uses this multiplier of the federal poverty guideline for c values: 1997-10-01: 1 - 2023-07-01: 1 metadata: unit: /1 period: month label: Indiana TANF continuing eligibility FPG rate reference: - - title: 470 IAC 10.3-4-1 + - title: 470 IAC 10.3-4-1 (net income at or below 100% FPG) href: https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-1 + - title: FSSA DFR Chapter 3000, Section 3010.15.05 (100% FPG continuing eligibility) + href: https://www.in.gov/fssa/dfr/files/3000.pdf#page=5 diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/benefit/earned_income_disregard/rate.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/benefit/earned_income_disregard/rate.yaml index 23fcb496a7e..3cc6ecdef90 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/benefit/earned_income_disregard/rate.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/benefit/earned_income_disregard/rate.yaml @@ -2,7 +2,6 @@ description: Indiana excludes this share of earned income when calculating benef values: 1997-10-01: 0.75 - 2023-07-01: 0.75 metadata: unit: /1 @@ -11,3 +10,5 @@ metadata: reference: - title: 470 IAC 10.3-4-4(d)(1) href: https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-4 + - title: FSSA DFR Chapter 3400, Section 3450.35.05 (75% earned income disregard) + href: https://www.in.gov/fssa/dfr/files/3400.pdf#page=41 diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/earned_income_disregard/months.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/earned_income_disregard/months.yaml new file mode 100644 index 00000000000..7f2dd6b73ba --- /dev/null +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/earned_income_disregard/months.yaml @@ -0,0 +1,14 @@ +description: Indiana applies the earned income disregard for this number of months under the Temporary Assistance for Needy Families program. + +values: + 1997-10-01: 4 + +metadata: + unit: month + period: month + label: Indiana TANF eligibility earned income disregard months + reference: + - title: 470 IAC 10.3-4-4(c)(2) + href: https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-4 + - title: FSSA DFR Chapter 3400, Section 3450.25.00 ($30 and 1/3 disregard) + href: https://www.in.gov/fssa/dfr/files/3400.pdf#page=38 diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/earned_income_disregard/rate.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/earned_income_disregard/rate.yaml index 32ebe215474..626c7bc21ef 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/earned_income_disregard/rate.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/earned_income_disregard/rate.yaml @@ -2,7 +2,6 @@ description: Indiana excludes this share of earned income when determining eligi values: 1997-10-01: 0.33 - 2023-07-01: 0.33 metadata: unit: /1 @@ -11,3 +10,5 @@ metadata: reference: - title: 470 IAC 10.3-4-4(c)(2) href: https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-4 + - title: FSSA DFR Chapter 3400, Section 3450.25.00 ($30 and 1/3 disregard) + href: https://www.in.gov/fssa/dfr/files/3400.pdf#page=38 diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/flat_disregard/amount.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/flat_disregard/amount.yaml index 6c8541fbf9c..bb5114e7789 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/flat_disregard/amount.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/eligibility/flat_disregard/amount.yaml @@ -2,7 +2,6 @@ description: Indiana deducts this amount from earned income when determining eli values: 1997-10-01: 30 - 2023-07-01: 30 metadata: unit: currency-USD @@ -11,3 +10,5 @@ metadata: reference: - title: 470 IAC 10.3-4-4(c)(2) href: https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-4 + - title: FSSA DFR Chapter 3400, Section 3450.25.00 ($30 and 1/3 disregard) + href: https://www.in.gov/fssa/dfr/files/3400.pdf#page=38 diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/work_expense/amount.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/work_expense/amount.yaml index 7f4b1e7c867..b3478490ccc 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/work_expense/amount.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/income/deductions/work_expense/amount.yaml @@ -2,7 +2,6 @@ description: Indiana deducts this amount from gross earned income as work-relate values: 1997-10-01: 90 - 2023-07-01: 90 metadata: unit: currency-USD @@ -11,3 +10,5 @@ metadata: reference: - title: 470 IAC 10.3-4-4(c)(1) href: https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-4 + - title: FSSA DFR Chapter 3400, Section 3450.20.00 ($90 work expense disregard) + href: https://www.in.gov/fssa/dfr/files/3400.pdf#page=38 diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/limit/at_application/amount.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/limit/at_application/amount.yaml index 7944d3f00a1..5d3c0ee30a5 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/limit/at_application/amount.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/limit/at_application/amount.yaml @@ -2,12 +2,13 @@ description: Indiana limits resources to this amount when applying for the Tempo values: 1997-10-01: 1_000 - 2023-07-01: 1_000 metadata: unit: currency-USD period: month label: Indiana TANF resource limit at application amount reference: - - title: 470 IAC 10.3-4-2 + - title: 470 IAC 10.3-4-2(1) href: https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-2 + - title: FSSA DFR Chapter 3000, Section 3005.10.00 (resource limits) + href: https://www.in.gov/fssa/dfr/files/3000.pdf#page=2 diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/limit/while_receiving/amount.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/limit/while_receiving/amount.yaml index e276e8a2df6..2040275ab2a 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/limit/while_receiving/amount.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/limit/while_receiving/amount.yaml @@ -2,14 +2,16 @@ description: Indiana limits resources to this amount while receiving the Tempora values: 1997-10-01: 1_500 - 2023-07-01: 10_000 + 2022-07-01: 10_000 metadata: unit: currency-USD period: month label: Indiana TANF resource limit while receiving amount reference: - - title: IC 12-14-1-1(b) + - title: IC 12-14-1-1(b), as amended by P.L.83-2022, SEC.2 href: https://iga.in.gov/laws/2025/ic/titles/12/#12-14-1-1 - - title: WIOA State Plan Portal, Indiana PY 2020-2023 (pre-SEA 265 value) - href: https://wioaplans.dol.gov/node/67731 + - title: FSSA DFR Chapter 3000, Section 3005.10.00 (resource limits effective 7/1/2022) + href: https://www.in.gov/fssa/dfr/files/3000.pdf#page=2 + - title: Urban Institute Welfare Rules Database, Table L8 ($1,500 recipient limit as of July 1998) + href: https://wrd.urban.org/sites/default/files/documents/2023-09/311111-The-Welfare-Rules-Databook-State-Policies-as-of-July--.PDF#page=160 diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/vehicle_exemption/amount.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/vehicle_exemption/amount.yaml index 1f8635bc41d..d5df76ec39a 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/vehicle_exemption/amount.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/vehicle_exemption/amount.yaml @@ -1,8 +1,10 @@ description: Indiana excludes this amount of vehicle equity from countable resources under the Temporary Assistance for Needy Families program. values: - 1997-10-01: 20_000 - 2023-07-01: 20_000 + 1997-10-01: 1_000 + 1999-07-01: 5_000 + 2021-07-01: 10_000 + 2022-07-01: 20_000 metadata: unit: currency-USD @@ -11,3 +13,7 @@ metadata: reference: - title: IC 12-14-2-1(b)(2) href: https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-1 + - title: FSSA DFR Chapter 2600, Section 2615.60.15 ($10,000 until 6/30/2022, $20,000 effective 7/1/2022) + href: https://www.in.gov/fssa/dfr/files/2600.pdf + - title: Urban Institute Welfare Rules Database, Table L9 ($1,000 at inception, $5,000 from July 1999, $10,000 from July 2021) + href: https://wrd.urban.org/welfare-rules-databook diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/amount.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/amount.yaml index f5af53402b6..abd59de2ecc 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/amount.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/amount.yaml @@ -37,7 +37,7 @@ metadata: breakdown: - range(1, 11) breakdown_labels: - - Household size + - Assistance unit size label: Indiana TANF standard of need amount reference: - title: 470 IAC 10.3-4-3(a)(1) @@ -46,5 +46,3 @@ metadata: href: https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-5 - title: Indiana DCS Assistance for Unlicensed Relative Placements (pre-2023 values) href: https://www.in.gov/dcs/files/16.2%20Assistance%20for%20Unlicensed%20Relative%20Placements.pdf#page=7 - - title: 1997 Green Book, Section 7 (AFDC/TANF benefit tables) - href: https://www.govinfo.gov/content/pkg/GPO-CPRT-105WPRT37945/html/GPO-CPRT-105WPRT37945-2-7.htm diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/max_unit_size.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/max_unit_size.yaml index 56fbc974c7a..267136bd61e 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/max_unit_size.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/max_unit_size.yaml @@ -2,12 +2,11 @@ description: Indiana sets this as the maximum unit size for standard of need loo values: 1997-10-01: 10 - 2023-07-01: 10 metadata: unit: person period: year label: Indiana TANF standard of need max unit size reference: - - title: 470 IAC 10.3-4-3 + - title: 470 IAC 10.3-4-3(a)(1) href: https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-3 diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/edge_cases.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/edge_cases.yaml index 6279f1514da..3e9567f98a1 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/edge_cases.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/edge_cases.yaml @@ -34,6 +34,7 @@ spm_units: spm_unit: members: [person1, person2] + is_tanf_enrolled: true households: household: members: [person1, person2] diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/eligibility/in_tanf_countable_income_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/eligibility/in_tanf_countable_income_eligible.yaml index 8b51f3580fb..93eaa23add0 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/eligibility/in_tanf_countable_income_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/eligibility/in_tanf_countable_income_eligible.yaml @@ -39,6 +39,7 @@ spm_units: spm_unit: members: [person1, person2, person3] + is_tanf_enrolled: true households: household: members: [person1, person2, person3] @@ -52,7 +53,7 @@ in_tanf_countable_income_eligible: [true, true, true] # Countable ($120.60) < standard of need ($320) → eligible -- name: Family of 3 with moderate earned income - not eligible +- name: Applicant family of 3 with moderate earned income - not eligible period: 2024-01 input: people: @@ -66,18 +67,17 @@ spm_units: spm_unit: members: [person1, person2, person3] + is_tanf_enrolled: false households: household: members: [person1, person2, person3] state_code: IN output: - in_tanf_countable_earned_income_for_eligibility: [321.6, 321.6, 321.6] - # $600 - $90 = $510 - # $510 - $30 = $480 - # $480 * 0.67 = $321.60 - in_tanf_countable_income_for_eligibility: [321.6, 321.6, 321.6] + in_tanf_countable_earned_income_for_eligibility: [510, 510, 510] + # Applicant: $600 - $90 = $510 ($90 work expense only) + in_tanf_countable_income_for_eligibility: [510, 510, 510] in_tanf_countable_income_eligible: [false, false, false] - # Countable ($321.60) >= standard of need ($320) → not eligible + # Applicant threshold = standard of need ($320); $510 >= $320 → not eligible - name: Family of 2 with earned income at threshold - not eligible period: 2024-01 @@ -91,6 +91,7 @@ spm_units: spm_unit: members: [person1, person2] + is_tanf_enrolled: true households: household: members: [person1, person2] @@ -119,6 +120,7 @@ spm_units: spm_unit: members: [person1, person2, person3] + is_tanf_enrolled: true households: household: members: [person1, person2, person3] diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.yaml index df24ab0de97..f238d5cfaee 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.yaml @@ -1,58 +1,65 @@ # Tests for in_tanf_countable_earned_income_for_eligibility -# Applies: $90/earner (per person), then $30 + 1/3 per unit +# Enrolled (months 1-4): $90/earner + $30 flat + 1/3 disregard +# Enrolled (months 5-12): $90/earner + $30 flat only +# Applicant (not enrolled): $90/earner only -- name: Family of 3 with 1 earner - gets $90 work expense disregard +# --- Continuing recipients (enrolled, January = month 1, phase 1) --- + +- name: Case 1, enrolled family of 3 with 1 earner. period: 2024-01 + absolute_error_margin: 0.1 input: people: - parent1: + person1: tanf_gross_earned_income: 400 - parent2: + person2: tanf_gross_earned_income: 0 - child: + person3: age: 10 spm_units: spm_unit: - members: [parent1, parent2, child] + members: [person1, person2, person3] + is_tanf_enrolled: true households: household: - members: [parent1, parent2, child] + members: [person1, person2, person3] state_code: IN output: in_tanf_countable_earned_income_for_eligibility: [187.6, 187.6, 187.6] - # 1 earner: $400 - $90 = $310 - # Unit total: $310 + # $400 - $90 = $310 # $310 - $30 = $280 # $280 * 0.67 = $187.60 -- name: Family of 3 with 2 earners - each gets $90 (total $180 disregard) +- name: Case 2, enrolled family of 3 with 2 earners. period: 2024-01 + absolute_error_margin: 0.1 input: people: - parent1: + person1: tanf_gross_earned_income: 200 - parent2: + person2: tanf_gross_earned_income: 200 - child: + person3: age: 10 spm_units: spm_unit: - members: [parent1, parent2, child] + members: [person1, person2, person3] + is_tanf_enrolled: true households: household: - members: [parent1, parent2, child] + members: [person1, person2, person3] state_code: IN output: in_tanf_countable_earned_income_for_eligibility: [127.3, 127.3, 127.3] - # Parent1: $200 - $90 = $110 - # Parent2: $200 - $90 = $110 - # Unit total: $220 (vs $310 if only 1 earner had $400) + # Person1: $200 - $90 = $110 + # Person2: $200 - $90 = $110 + # Unit total: $220 # $220 - $30 = $190 # $190 * 0.67 = $127.30 - # Key: 2 earners = $180 disregard, 1 earner = $90 disregard -- name: Single earner with low income +- name: Case 3, enrolled single earner with low income. period: 2024-01 + absolute_error_margin: 0.1 input: people: person1: @@ -62,6 +69,7 @@ spm_units: spm_unit: members: [person1, person2] + is_tanf_enrolled: true households: household: members: [person1, person2] @@ -72,8 +80,9 @@ # $210 - $30 = $180 # $180 * 0.67 = $120.60 -- name: Earner below work expense disregard +- name: Case 4, enrolled earner below work expense disregard. period: 2024-01 + absolute_error_margin: 0.1 input: people: person1: @@ -83,6 +92,7 @@ spm_units: spm_unit: members: [person1, person2] + is_tanf_enrolled: true households: household: members: [person1, person2] @@ -90,11 +100,10 @@ output: in_tanf_countable_earned_income_for_eligibility: [0, 0] # $50 - $90 = max(0, -40) = $0 - # $0 - $30 = max(0, -30) = $0 - # $0 * 0.67 = $0 -- name: Zero income +- name: Case 5, enrolled with zero income. period: 2024-01 + absolute_error_margin: 0.1 input: people: person1: @@ -104,9 +113,125 @@ spm_units: spm_unit: members: [person1, person2] + is_tanf_enrolled: true + households: + household: + members: [person1, person2] + state_code: IN + output: + in_tanf_countable_earned_income_for_eligibility: [0, 0] + +# --- Applicants (not enrolled, $90 work expense only) --- + +- name: Case 6, applicant with 1 earner. + period: 2024-01 + absolute_error_margin: 0.1 + input: + people: + person1: + tanf_gross_earned_income: 400 + person2: + age: 10 + spm_units: + spm_unit: + members: [person1, person2] + is_tanf_enrolled: false + households: + household: + members: [person1, person2] + state_code: IN + output: + in_tanf_countable_earned_income_for_eligibility: [310, 310] + # $400 - $90 = $310 (no $30 or 1/3 for applicants) + +- name: Case 7, applicant with low income. + period: 2024-01 + absolute_error_margin: 0.1 + input: + people: + person1: + tanf_gross_earned_income: 300 + person2: + age: 10 + spm_units: + spm_unit: + members: [person1, person2] + is_tanf_enrolled: false + households: + household: + members: [person1, person2] + state_code: IN + output: + in_tanf_countable_earned_income_for_eligibility: [210, 210] + # $300 - $90 = $210 + +- name: Case 8, applicant below work expense. + period: 2024-01 + absolute_error_margin: 0.1 + input: + people: + person1: + tanf_gross_earned_income: 50 + person2: + age: 10 + spm_units: + spm_unit: + members: [person1, person2] + is_tanf_enrolled: false households: household: members: [person1, person2] state_code: IN output: in_tanf_countable_earned_income_for_eligibility: [0, 0] + # $50 - $90 = max(0, -40) = $0 + +# --- YEAR period (exercises both calendar month paths) --- + +- name: Case 9, enrolled over full year. + period: 2024 + absolute_error_margin: 0.1 + input: + people: + person1: + tanf_gross_earned_income: 4_800 + person2: + age: 10 + spm_units: + spm_unit: + members: [person1, person2] + is_tanf_enrolled: true + households: + household: + members: [person1, person2] + state_code: IN + output: + in_tanf_countable_earned_income_for_eligibility: [2_990.4, 2_990.4] + # Monthly gross: $4,800 / 12 = $400 + # $400 - $90 = $310, then $310 - $30 = $280 + # Months 1-4 (phase 1): $280 * 0.67 = $187.60 x 4 = $750.40 + # Months 5-12 (phase 2): $280 x 8 = $2,240.00 + # Annual total: $750.40 + $2,240.00 = $2,990.40 + +- name: Case 10, applicant over full year. + period: 2024 + absolute_error_margin: 0.1 + input: + people: + person1: + tanf_gross_earned_income: 4_800 + person2: + age: 10 + spm_units: + spm_unit: + members: [person1, person2] + is_tanf_enrolled: false + households: + household: + members: [person1, person2] + state_code: IN + output: + in_tanf_countable_earned_income_for_eligibility: [3_720, 3_720] + # Monthly gross: $4,800 / 12 = $400 + # All 12 months: $400 - $90 = $310 + # Annual total: $310 x 12 = $3,720 diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration.yaml index fa34c564035..25c2105ede0 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration.yaml @@ -49,6 +49,7 @@ spm_units: spm_unit: members: [person1, person2] + is_tanf_enrolled: true spm_unit_cash_assets: 800 households: household: @@ -85,6 +86,7 @@ spm_units: spm_unit: members: [person1, person2] + is_tanf_enrolled: true spm_unit_cash_assets: 700 households: household: @@ -109,7 +111,7 @@ in_tanf: [80, 80] # Max benefit ($255) - countable income ($175) = $80 -- name: Case 4 - High earner exceeds eligibility threshold +- name: Case 4 - Applicant high earner exceeds eligibility threshold period: 2024-01 input: people: @@ -123,6 +125,7 @@ spm_units: spm_unit: members: [person1, person2, person3] + is_tanf_enrolled: false spm_unit_cash_assets: 900 households: household: @@ -130,14 +133,14 @@ state_code: IN output: spm_unit_size: [3, 3, 3] - in_tanf_countable_earned_income_for_eligibility: [321.6, 321.6, 321.6] - # $600 - $90 = $510 → $510 - $30 = $480 → $480 * 0.67 = $321.60 - in_tanf_countable_income_for_eligibility: [321.6, 321.6, 321.6] + in_tanf_countable_earned_income_for_eligibility: [510, 510, 510] + # Applicant: $600 - $90 = $510 ($90 work expense only) + in_tanf_countable_income_for_eligibility: [510, 510, 510] in_tanf_countable_earned_income: [150, 150, 150] # $600 × 0.25 = $150 in_tanf_countable_income_for_payment: [150, 150, 150] in_tanf_countable_income_eligible: [false, false, false] - # Countable for elig ($321.60) >= standard of need ($320) → NOT eligible + # Applicant threshold = standard of need ($320); $510 >= $320 → NOT eligible in_tanf_payment_eligible: [true, true, true] # Countable for benefit ($150) < standard of need ($320) → eligible in_tanf_payment_standard: [320, 320, 320] @@ -161,6 +164,7 @@ spm_units: spm_unit: members: [person1, person2, person3, person4] + is_tanf_enrolled: true spm_unit_cash_assets: 1_500 households: household: @@ -199,6 +203,7 @@ spm_units: spm_unit: members: [person1, person2, person3] + is_tanf_enrolled: true spm_unit_cash_assets: 500 households: household: @@ -247,3 +252,114 @@ in_tanf_eligible: false # Single adult with no children → not demographically eligible in_tanf: 0 + +- name: Case 8, enrolled family with 2018 historical parameters. + period: 2018 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 30 + tanf_gross_earned_income: 3_600 + person2: + age: 10 + person3: + age: 8 + spm_units: + spm_unit: + members: [person1, person2, person3] + is_tanf_enrolled: true + spm_unit_cash_assets: 500 + households: + household: + members: [person1, person2, person3] + state_code: IN + output: + in_tanf_countable_earned_income_for_eligibility: [1_922.4, 1_922.4, 1_922.4] + # Monthly gross: $3,600 / 12 = $300 + # Months 1-4 (phase 1): ($300-$90-$30)*0.67 = $120.60 x 4 = $482.40 + # Months 5-12 (phase 2): $300-$90-$30 = $180 x 8 = $1,440 + # Annual: $482.40 + $1,440 = $1,922.40 + in_tanf_countable_income_for_eligibility: [1_922.4, 1_922.4, 1_922.4] + in_tanf_countable_earned_income: [900, 900, 900] + # $300 x 0.25 = $75/month x 12 = $900 + in_tanf_countable_income_for_payment: [900, 900, 900] + in_tanf_payment_standard: [3_456, 3_456, 3_456] + # Family of 3, 2018 (pre-2023): $288/month x 12 = $3,456 + in_tanf: [2_556, 2_556, 2_556] + # ($288 - $75) x 12 = $213 x 12 = $2,556 + +- name: Case 9, applicant with earned income. + period: 2024-01 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 28 + tanf_gross_earned_income: 200 + person2: + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + is_tanf_enrolled: false + spm_unit_cash_assets: 800 + households: + household: + members: [person1, person2] + state_code: IN + output: + spm_unit_size: [2, 2] + in_tanf_countable_earned_income_for_eligibility: [110, 110] + # Applicant: $200 - $90 = $110 ($90 work expense only) + in_tanf_countable_income_for_eligibility: [110, 110] + in_tanf_countable_earned_income: [50, 50] + # $200 x 0.25 = $50 + in_tanf_countable_income_for_payment: [50, 50] + in_tanf_countable_income_eligible: [true, true] + # Applicant threshold = standard of need ($255); $110 < $255 → eligible + in_tanf_payment_eligible: [true, true] + in_tanf_payment_standard: [255, 255] + in_tanf_eligible: [true, true] + in_tanf: [205, 205] + # $255 - $50 = $205 + +- name: Case 10, applicant with mixed income near threshold. + period: 2024-01 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 35 + tanf_gross_earned_income: 300 + person2: + age: 12 + tanf_gross_unearned_income: 100 + person3: + age: 8 + spm_units: + spm_unit: + members: [person1, person2, person3] + is_tanf_enrolled: false + spm_unit_cash_assets: 500 + households: + household: + members: [person1, person2, person3] + state_code: IN + output: + spm_unit_size: [3, 3, 3] + in_tanf_countable_earned_income_for_eligibility: [210, 210, 210] + # Applicant: $300 - $90 = $210 ($90 work expense only) + in_tanf_countable_income_for_eligibility: [310, 310, 310] + # $210 (earned) + $100 (unearned) = $310 + in_tanf_countable_earned_income: [75, 75, 75] + # $300 x 0.25 = $75 + in_tanf_countable_income_for_payment: [175, 175, 175] + # $75 + $100 = $175 + in_tanf_countable_income_eligible: [true, true, true] + # Applicant threshold = standard of need ($320); $310 < $320 → eligible + in_tanf_payment_eligible: [true, true, true] + in_tanf_payment_standard: [320, 320, 320] + in_tanf_eligible: [true, true, true] + in_tanf: [145, 145, 145] + # $320 - $175 = $145 diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration_historical.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration_historical.yaml index ee928258536..e25d5ec2b0c 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration_historical.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration_historical.yaml @@ -42,6 +42,7 @@ spm_units: spm_unit: members: [person1, person2, person3] + is_tanf_enrolled: true spm_unit_cash_assets: 800 households: household: diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/resources/in_tanf_resources_eligible_historical.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/resources/in_tanf_resources_eligible_historical.yaml index 6ca3216ddab..48605cc4970 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/resources/in_tanf_resources_eligible_historical.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/resources/in_tanf_resources_eligible_historical.yaml @@ -39,8 +39,8 @@ # Transition boundary tests -- name: Pre-reform 2023 enrolled at $5,000 fails (old $1,500 limit) - period: 2023-01 +- name: Pre-reform 2021 enrolled at $5,000 fails (old $1,500 limit) + period: 2021-01 input: state_code: IN in_tanf_countable_resources: 5_000 diff --git a/policyengine_us/variables/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.py b/policyengine_us/variables/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.py index f6a7d0beac4..074d307c620 100644 --- a/policyengine_us/variables/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.py +++ b/policyengine_us/variables/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.py @@ -16,18 +16,34 @@ class in_tanf_countable_earned_income_for_eligibility(Variable): defined_for = StateCode.IN def formula(spm_unit, period, parameters): - # NOTE: The $30 and 1/3 disregard only applies for the first 4 months - # of continuing eligibility. This simplified implementation always - # applies the $30 and 1/3 disregard. + # NOTE: Uses calendar month as proxy for benefit duration. + # Actual policy tracks cumulative months since enrollment. p = parameters(period).gov.states["in"].fssa.tanf.income.deductions person = spm_unit.members gross_earned = person("tanf_gross_earned_income", period) - # $90 per earner, then $30 + 1/3 per unit (470 IAC 10.3-4-4(c)) + # $90 per earner (470 IAC 10.3-4-4(c)) after_work_expense = spm_unit.sum( max_(gross_earned - p.work_expense.amount, 0) ) + + is_enrolled = spm_unit("is_tanf_enrolled", period) + month = period.start.month + + # Enrolled: $30 flat in both phases (months 1-12) after_flat = max_( after_work_expense - p.eligibility.flat_disregard.amount, 0 ) - return after_flat * (1 - p.eligibility.earned_income_disregard.rate) + + # 1/3 disregard only in first phase (months 1-4) + in_one_third_phase = ( + month <= p.eligibility.earned_income_disregard.months + ) + with_one_third = after_flat * ( + 1 - p.eligibility.earned_income_disregard.rate + ) + enrolled_countable = where( + in_one_third_phase, with_one_third, after_flat + ) + + return where(is_enrolled, enrolled_countable, after_work_expense) diff --git a/sources/working_references.md b/sources/working_references.md deleted file mode 100644 index 1694d315332..00000000000 --- a/sources/working_references.md +++ /dev/null @@ -1,357 +0,0 @@ -# Indiana TANF Historical Sources — Working References - -## Summary of Key Historical Finding - -**Indiana's TANF benefit amounts (standard of need) were frozen at 1988 AFDC levels from program inception (1997) until July 1, 2023**, when SEA 265 took effect. This means the standard of need schedule was unchanged for ~35 years. The 1997 Green Book confirms the 1997 values match the pre-2023 values exactly. - ---- - -## 1. Standard of Need (Benefit Amounts by Family Size) - -### Era 1: 1988–2023-06-30 (AFDC-era frozen values) - -These values were set in 1988 under AFDC and carried forward unchanged into TANF (1997) through June 30, 2023. - -**Assistance Groups with Adults and Children:** - -| Family Size | Monthly Amount | -|-------------|---------------| -| 1 | $139 | -| 2 | $229 | -| 3 | $288 | -| 4 | $346 | -| 5 | $405 | -| 6 | $463 | -| 7 | $522 | -| 8 | $580 | -| 9 | $637 | -| 10 | $695 | - -**Sources:** -- 1997 Green Book (GPO-CPRT-105WPRT37945): Confirms $139/$229/$288/$346/$405/$463 for family sizes 1-6 as of January 1997 - - https://www.govinfo.gov/content/pkg/GPO-CPRT-105WPRT37945/html/GPO-CPRT-105WPRT37945-2-7.htm -- Issue #6665 references: 2001 Indiana Program Budget Book confirms "$288 for family of three" - - https://www.in.gov/sba/files/2001_Indiana_Program_Budget_Book_Narratives.pdf#page=64 -- Indiana DCS "Assistance for Unlicensed Relative Placements" (2016 version) - - https://www.in.gov/dcs/files/16.2%20Assistance%20for%20Unlicensed%20Relative%20Placements.pdf#page=7 -- Indiana DCS "Assistance for Unlicensed Relative Placements" (2019 archived version) - - https://www.in.gov/dcs/files/16.02-Assistance-for-Unlicensed-Relative-Placements.docx-ARCHIVED-8-28-2020-v5.pdf#page=7 -- WIOA State Plan Portal (PY 2020-2023) confirms $139.50/$229.50/$288/$346/$405.50/$463/$522.50/$580 per month - - https://wioaplans.dol.gov/node/67731 -- Multiple news sources confirm benefits "unchanged since 1988" / "first increase since TANF's creation" - -**RESOLVED — DCS PDF Verification (page 7 of both PDFs):** -Both DCS PDFs (2016 current and 2019 archived) show identical round-number values. The WIOA State Plan half-dollar amounts ($139.50, $229.50, etc.) are incorrect/approximate — the authoritative DCS documents show $139.00, $229.00, etc. - -**Sizes 9-10:** Not shown in DCS PDFs (table goes to size 8 only). Pattern analysis: increments are +$90, +$59, then +$58 per additional member (sizes 3-8). Extrapolating: size 9 = $638, size 10 = $696. However, the 1997 Green Book only covers sizes 1-6, and the DCS table covers sizes 1-8. Sizes 9-10 remain unverified for the pre-2023 era — may not have been defined (max unit size may have been 8). - -**DCS PDF also shows Gross Income Limits (pre-2023):** - -| Family Size | Gross Income Limit | -|-------------|-------------------| -| 1 | $286.75 | -| 2 | $471.75 | -| 3 | $592.00 | -| 4 | $712.25 | -| 5 | $832.50 | -| 6 | $952.75 | -| 7 | $1,073.00 | -| 8 | $1,193.25 | - -**DCS PDF also shows Children-Only amounts:** - -| Family Size | Children Only | -|-------------|--------------| -| 1 | $139.00 | -| 2 | $198.00 | -| 3 | $256.00 | -| 4 | $315.00 | -| 5 | $373.00 | -| 6 | $432.00 | -| 7 | $490.00 | -| 8 | $549.00 | - -### Era 2: 2023-07-01–present (SEA 265 values) - -These values took effect July 1, 2023, per SEA 265 (Senate Enrolled Act 265, signed May 22, 2023). - -| Family Size | Monthly Amount | -|-------------|---------------| -| 1 | $155 | -| 2 | $255 | -| 3 | $320 | -| 4 | $385 | -| 5 | $450 | -| 6 | $515 | -| 7 | $580 | -| 8 | $645 | -| 9 | $710 | -| 10 | $775 | - -**Sources:** -- Indiana FSSA DFR "About TANF" page (current): Shows Gross Income / Net Income tables - - https://www.in.gov/fssa/dfr/tanf-cash-assistance/about-tanf/ -- 470 IAC 10.3-4-3(a)(1): Standard of need schedule - - https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-3 -- IC 12-14-2-5: Statutory authority for standard of need - - https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-5 -- SEA 265 bill page: - - https://iga.in.gov/legislative/2023/bills/senate/265/details - -**Pattern:** $155, +$100, then +$65 per additional member (sizes 3-10). - ---- - -## 2. Earned Income Disregards - -### For Eligibility Determination - -**Current (2023-07-01–present):** -- Work expense deduction: $90 (from gross earnings) -- Flat disregard: $30 -- Earned income disregard rate: 33% (one-third of remaining after $30 deduction) - -**Source:** 470 IAC 10.3-4-4(c)(1) and (c)(2) -- https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-4 - -**Historical context:** The "$30 and 1/3" disregard is an inherited AFDC-era policy. Per the WIOA State Plan (PY 2020-2023): -- $90 work expense disregard -- $30 and 1/3 disregard for four consecutive months following work expense deduction -- $30 disregard for eight-month period thereafter -- Source: https://wioaplans.dol.gov/node/67731 - -**NOTE:** The current codebase has a flat $30 disregard and 33% rate without the time-limited phaseout. This may be an intentional simplification or may need review. - -### For Benefit Calculation - -**Current (2023-07-01–present):** -- Earned income disregard rate: 75% (i.e., only 25% of gross earnings counted) - -**Source:** 470 IAC 10.3-4-4(d)(1) -- https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-4 -- WIOA State Plan confirms: "75% of earned income is disregarded; 25% of gross earnings and 100% of non-exempt unearned income applied to benefit calculation" - -**Historical:** This 75% disregard for benefit calculation appears to be longstanding. Need to verify if it changed with SEA 265. - ---- - -## 3. Resource Limits - -### At Application -- **Amount:** $1,000 -- **Source:** 470 IAC 10.3-4-2 (references IC 12-14-1-1(a) implicitly) - - https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-2 - - Cornell LII: https://www.law.cornell.edu/regulations/indiana/470-IAC-10.3-4-2 - -### While Receiving -- **Amount:** $10,000 -- **Source:** IC 12-14-1-1(b) — "does not cease to qualify...so long as the resources...are valued at not more than ten thousand dollars ($10,000)" - - https://iga.in.gov/laws/2025/ic/titles/12/#12-14-1-1 - - LawServer: https://www.lawserver.com/law/state/indiana/in-code/indiana_code_12-14-1-1 - - Last amended by P.L.103-2023 (SEA 265) - -**Historical:** The $1,000 at-application limit appears to be longstanding (AFDC-era). The $10,000 while-receiving limit was enacted or modified by SEA 265 (P.L.103-2023). The WIOA State Plan (PY 2020-2023) mentions $1,000 initial and $1,500 ongoing — suggesting the while-receiving limit was $1,500 before SEA 265 changed it to $10,000. - ---- - -## 4. Vehicle Exemption - -- **Amount:** $20,000 total equity value for all motor vehicles -- **Source:** IC 12-14-2-1(b)(2) — referenced in 470 IAC 10.3-4-2 - - https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-1 - - Cornell LII confirms: "Each applicant group will be allowed an exclusion of $20,000 of total equity value in motor vehicles" - -**Historical:** Need to verify when $20,000 amount was set. May have been changed by SEA 265 or earlier legislation. - ---- - -## 5. Continuing Eligibility FPG Rate - -- **Current rate:** 100% of Federal Poverty Guidelines (for continuing eligibility) -- **Source:** 470 IAC 10.3-4-1 - - https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-1 - -**Historical:** Per SEA 265, the income eligibility threshold is being phased in: -- Pre-SEA 265: ~16-17% FPL (grossly restricted) -- SEA 265 phase-in to 35% FPL, then to 50% FPL by end of 2027 -- First eligibility increase: July 2025 -- Full increase: ~2027-2028 -- The FSSA "About TANF" page shows gross income limit of 35% FPL currently -- Continuing eligibility: 100% FPG (for those already receiving) - -**NOTE:** The codebase currently has `fpg_rate` = 1 (100%) for continuing eligibility starting 2023-07-01. This represents the continuing eligibility threshold, not the initial eligibility gross income test. - ---- - -## 6. Gross Income Test - -**Current (from FSSA About TANF page):** - -| Family Size | Gross Income Limit | Net Income Limit | -|-------------|-------------------|-----------------| -| 1 | $457 | $248 | -| 2 | $618 | $409 | -| 3 | $778 | $513 | -| 4 | $938 | $617 | -| 5 | $1,099 | $721 | -| 6 | $1,259 | $825 | -| 7 | $1,420 | $929 | -| 8 | $1,580 | $1,033 | -| 9 | $1,740 | $1,137 | -| 10 | $1,901 | $1,241 | -| Each Additional | +$161 | +$104 | - -**Source:** https://www.in.gov/fssa/dfr/tanf-cash-assistance/about-tanf/ - -**Analysis:** The gross income limit appears to be approximately 35% of FPL (consistent with the current phase of SEA 265). The net income limits appear to be approximately 160% of the standard of need amounts (e.g., $513 / $320 = 1.603 for family of 3). - ---- - -## 7. Major Legislative History - -| Date | Event | Source | -|------|-------|--------| -| 1988 | Indiana sets AFDC benefit schedule (standard of need) in statute | Multiple news sources | -| 1997-10-01 | Indiana TANF program begins, carrying forward AFDC benefit levels | Federal welfare reform (PRWORA 1996) | -| 1997-2023 | Benefit levels frozen at 1988 AFDC amounts | CBPP, news articles | -| 2023-05-22 | SEA 265 signed by Governor | https://www.indianasenaterepublicans.com/ford-bill-expanding-tanf-eligibility-in-indiana-signed-by-governor | -| 2023-07-01 | SEA 265 benefit increases take effect (standard of need raised) | 470 IAC 10.3-4-3, FSSA About TANF page | -| 2023-07-01 | Resource limit while receiving raised to $10,000 | IC 12-14-1-1(b), P.L.103-2023 | -| 2023-07-01 | Family benefit cap repealed | SEA 265 | -| 2025-07-01 | First eligibility threshold increase (to 35% FPL) | SEA 265 phase-in | -| ~2027 | Full eligibility threshold increase (to 50% FPL) | SEA 265 phase-in | - ---- - -## 8. Regulatory Authority Sources - -### Indiana Code (IC) -- **IC 12-14-1-1**: TANF eligibility, resource limits - - https://iga.in.gov/laws/2025/ic/titles/12/#12-14-1-1 -- **IC 12-14-2-1**: Property/vehicle exemptions - - https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-1 -- **IC 12-14-2-5**: Standard of need schedule - - https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-5 - -### Indiana Administrative Code (470 IAC) -- **470 IAC 10.3**: TANF Assistance Program (full article) - - https://iar.iga.in.gov/latestArticle/470/10.3 - - Justia: https://regulations.justia.com/states/indiana/title-470/article-10-3/ -- **470 IAC 10.3-4-1**: Continuing eligibility FPG rate -- **470 IAC 10.3-4-2**: Real and personal property (resource limits) - - Cornell LII: https://www.law.cornell.edu/regulations/indiana/470-IAC-10.3-4-2 -- **470 IAC 10.3-4-3**: Standard of need amounts -- **470 IAC 10.3-4-4**: Income deductions/disregards - -### Legislation -- **SEA 265 (2023)**: First TANF increase in 30+ years - - Bill page: https://iga.in.gov/legislative/2023/bills/senate/265/details - -### State Plan Documents -- **Indiana TANF State Plan Amendment** - - https://www.in.gov/fssa/dfr/files/TANF_Indiana_State_Plan_amendment.pdf -- **Indiana TANF State Plan Renewal** (effective 1/1/2023) - - https://www.in.gov/fssa/dfr/files/Indiana-TANF-State-Plan_Renewal.pdf - -### Policy Manuals -- **FSSA DFR Policy Manual** (main page) - - https://www.in.gov/fssa/dfr/forms-documents-and-tools/policy-manual/ -- **Chapter 3400**: Financial eligibility criteria - - https://www.in.gov/fssa/dfr/files/3400.pdf -- **Chapter 2800**: Income - - https://www.in.gov/fssa/dfr/files/2800.pdf -- **Policy Manual Transmittals** (2023, 2024) - - https://www.in.gov/fssa/dfr/forms-documents-and-tools/policy-manual/program-policy-manual-transmittals/ - -### Cross-Reference/Verification Sources -- **1997 Green Book** (GPO): AFDC/TANF benefit tables by state (January 1997) - - https://www.govinfo.gov/content/pkg/GPO-CPRT-105WPRT37945/html/GPO-CPRT-105WPRT37945-2-7.htm -- **2004 Green Book** (GPO): TANF benefit tables - - https://www.govinfo.gov/content/pkg/GPO-CPRT-108WPRT108-6/html/GPO-CPRT-108WPRT108-6-2-7.htm -- **Urban Institute Welfare Rules Database**: Historical TANF policies 1996-2023 - - https://wrd.urban.org/ - - Databook (2013): https://wrd.urban.org/sites/default/files/documents/2023-09/Welfare%20Rules%20Databook%202013.pdf - - Databook (2021): https://www.urban.org/sites/default/files/2023-08/Welfare%20Rules%20Databook%20State%20TANF%20Policies%20as%20of%20July%202021.pdf - - Graphical Overview (2023): https://www.urban.org/sites/default/files/2025-05/Graphical-Overview-of-State-and-Territory-TANF-Policies-as-of-July-2023.pdf -- **WIOA State Plan Portal (PY 2020-2023)**: Indiana TANF details - - https://wioaplans.dol.gov/node/67731 -- **NCCP TANF Profile (Indiana)**: 2024 benefit comparison - - https://www.nccp.org/wp-content/uploads/2024/08/TANF-profile-Indiana.pdf -- **NCCP 50-State Comparison**: 2024 TANF benefit amounts - - https://www.nccp.org/wp-content/uploads/2024/11/TANF-Benefit-Amounts-2024-FINAL.pdf -- **CBPP**: TANF benefit level analysis - - https://www.cbpp.org/research/income-security/continued-increases-in-tanf-benefit-levels-are-critical-to-helping -- **INCAP Report**: Indiana TANF history and analysis - - https://institute.incap.org/assets/docs/Reports/TANF%20Report_Final.pdf -- **INCAP Fact Sheet (2021)**: TANF and SB 233 - - https://institute.incap.org/assets/docs/Fact-Sheets/FactSheet-2021-TANFandSB233.pdf -- **2001 Indiana Budget Book**: Confirms $288 for family of 3 - - https://www.in.gov/sba/files/2001_Indiana_Program_Budget_Book_Narratives.pdf#page=64 -- **Indiana DCS Documents** (issue #6665 references): - - 2016 version: https://www.in.gov/dcs/files/16.2%20Assistance%20for%20Unlicensed%20Relative%20Placements.pdf#page=7 - - 2019 archived: https://www.in.gov/dcs/files/16.02-Assistance-for-Unlicensed-Relative-Placements.docx-ARCHIVED-8-28-2020-v5.pdf#page=7 - - 2016 archived (v3): https://www.in.gov/dcs/files/16.2-Assistance-for-Unlicensed-Relative-Placements-Archive-10-31-2016-v3.pdf -- **2010 FSSA Fact Sheet**: Statewide TANF data - - https://www.in.gov/fssa/dfr/files/INFact_Sheet_Statewide_2010-01.pdf - -### News Coverage (for timeline verification) -- Indiana Capital Chronicle (Jan 2023): "Senate committee passes first TANF increase in over 30 years" - - https://indianacapitalchronicle.com/2023/01/24/senator-committee-passes-first-tanf-increase-in-over-30-years/ -- WFYI (Jan 2023): "Indiana Senate passes bill with 'modest' increases to TANF eligibility limit, payments" - - https://www.wfyi.org/news/articles/indiana-senate-passes-bill-with-modest-increases-to-tanf-eligibility-limit-payments -- WFYI (Apr 2023): "Indiana set to expand access to temporary government help" - - https://www.wfyi.org/news/articles/indiana-set-to-expand-access-to-temporary-government-help-for-low-income-people--eventually -- Indiana Public Radio (Jun 2023): "Congress' debt deal may hinder new Indiana law" - - https://indianapublicradio.org/news/2023/06/congress-debt-deal-may-hinder-a-new-indiana-law-to-extend-tanf-benefits-to-thousands-of-families/ - ---- - -## 9. Implementation Plan for Backdating - -### Parameters That Need Historical Entries - -Given that benefits were frozen from 1988 through June 30, 2023, each parameter needs ONE historical entry backdated to program inception: - -1. **standard_of_need/amount.yaml**: Add 1997-10-01 entries with the AFDC-era values (sizes 1-10) -2. **income/deductions/benefit/earned_income_disregard/rate.yaml**: Add 1997-10-01 entry (verify if 75% is unchanged) -3. **income/deductions/eligibility/earned_income_disregard/rate.yaml**: Add 1997-10-01 entry (verify if 33% is unchanged) -4. **income/deductions/eligibility/flat_disregard/amount.yaml**: Add 1997-10-01 entry (verify if $30 is unchanged) -5. **income/deductions/work_expense/amount.yaml**: Add 1997-10-01 entry (verify if $90 is unchanged) -6. **resources/limit/at_application/amount.yaml**: Add 1997-10-01 entry ($1,000 — longstanding) -7. **resources/limit/while_receiving/amount.yaml**: Add 1997-10-01 entry with OLD value (likely $1,500 per WIOA State Plan) — then 2023-07-01 = $10,000 -8. **resources/vehicle_exemption/amount.yaml**: Need to verify if $20,000 was always the amount or changed -9. **eligibility/continuing/fpg_rate.yaml**: Need to verify historical value - -### Open Questions (Need Verification from Prep Agent PDF Renders) - -1. **Exact pre-2023 standard of need for sizes 7-10**: Green Book only goes to size 6. DCS PDFs may have full table. -2. **Half-dollar amounts**: WIOA shows $139.50, $229.50, etc. vs Green Book showing $139, $229. Which is correct? -3. **While-receiving resource limit history**: Was it $1,500 before SEA 265 changed it to $10,000? -4. **Vehicle exemption history**: Was $20,000 always the amount? -5. **Earned income disregard history**: Were the rates (75% benefit, 33% eligibility, $30 flat, $90 work expense) unchanged since program inception? -6. **FPG rate history**: The current 100% FPG for continuing eligibility — was this always the case? -7. **Children-only groups**: Different benefit schedule exists (see WIOA data). Not currently modeled in codebase — may not need backdating but should document. - ---- - -## 10. Children-Only Assistance Groups (Reference Only) - -Per WIOA State Plan (PY 2020-2023), Indiana has a separate benefit schedule for children-only groups: - -| Children | Monthly Amount | -|----------|---------------| -| 1 | $139.50 | -| 2 | $198.00 | -| 3 | $256.50 | -| 4 | $315.00 | -| 5 | $373.50 | -| 6 | $432.00 | -| 7 | $490.50 | -| 8 | $549.00 | - -This is NOT currently implemented in the codebase. Documenting for completeness. - ---- - -*Last updated: 2026-02-26* -*Status: Research complete, pending prep agent PDF verification* From 8cbc44e011d032f79df4e42e14386e18ad750cd5 Mon Sep 17 00:00:00 2001 From: Ziming Date: Sat, 28 Feb 2026 23:24:37 -0500 Subject: [PATCH 5/8] fix --- .../in_tanf_countable_income_eligible.yaml | 11 ++---- ...untable_earned_income_for_eligibility.yaml | 37 ++++++++++++++++--- .../gov/states/in/fssa/tanf/integration.yaml | 11 +++--- ...countable_earned_income_for_eligibility.py | 16 ++++---- 4 files changed, 49 insertions(+), 26 deletions(-) diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/eligibility/in_tanf_countable_income_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/eligibility/in_tanf_countable_income_eligible.yaml index 93eaa23add0..61191ed767c 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/eligibility/in_tanf_countable_income_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/eligibility/in_tanf_countable_income_eligible.yaml @@ -126,13 +126,10 @@ members: [person1, person2, person3] state_code: IN output: - in_tanf_countable_earned_income_for_eligibility: [127.3, 127.3, 127.3] - # Person1: $200 - $90 = $110 - # Person2: $200 - $90 = $110 - # Unit total: $220 - # $220 - $30 = $190 - # $190 * 0.67 = $127.30 - in_tanf_countable_income_for_eligibility: [127.3, 127.3, 127.3] + in_tanf_countable_earned_income_for_eligibility: [107.2, 107.2, 107.2] + # Per earner: ($200-$90-$30)*0.67 = $80*0.67 = $53.60 + # Unit total: $53.60 + $53.60 = $107.20 + in_tanf_countable_income_for_eligibility: [107.2, 107.2, 107.2] in_tanf_countable_income_eligible: [true, true, true] # Countable ($127.30) < standard of need ($320) → eligible diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.yaml index f238d5cfaee..9d984ef8fa6 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.yaml @@ -50,12 +50,9 @@ members: [person1, person2, person3] state_code: IN output: - in_tanf_countable_earned_income_for_eligibility: [127.3, 127.3, 127.3] - # Person1: $200 - $90 = $110 - # Person2: $200 - $90 = $110 - # Unit total: $220 - # $220 - $30 = $190 - # $190 * 0.67 = $127.30 + in_tanf_countable_earned_income_for_eligibility: [107.2, 107.2, 107.2] + # Per earner: ($200-$90-$30)*0.67 = $80*0.67 = $53.60 + # Unit total: $53.60 + $53.60 = $107.20 - name: Case 3, enrolled single earner with low income. period: 2024-01 @@ -121,6 +118,34 @@ output: in_tanf_countable_earned_income_for_eligibility: [0, 0] +# --- Per-earner deductions (all three disregards apply per individual) --- + +- name: Case 5b, enrolled 2 earners vs 1 earner with same total. + period: 2024-01 + absolute_error_margin: 0.1 + input: + people: + person1: + tanf_gross_earned_income: 200 + person2: + tanf_gross_earned_income: 200 + person3: + age: 10 + spm_units: + spm_unit: + members: [person1, person2, person3] + is_tanf_enrolled: true + households: + household: + members: [person1, person2, person3] + state_code: IN + output: + in_tanf_countable_earned_income_for_eligibility: [107.2, 107.2, 107.2] + # Per earner: ($200-$90-$30)*0.67 = $80*0.67 = $53.60 + # Unit total: $53.60 + $53.60 = $107.20 + # Compare Case 1 (1 earner at $400): ($400-$90-$30)*0.67 = $187.60 + # 2 earners get $60 more in deductions ($30 each vs $30 once) + # --- Applicants (not enrolled, $90 work expense only) --- - name: Case 6, applicant with 1 earner. diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration.yaml index 25c2105ede0..11c6d3eeb27 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration.yaml @@ -211,16 +211,15 @@ state_code: IN output: spm_unit_size: [3, 3, 3] - in_tanf_countable_earned_income_for_eligibility: [127.3, 127.3, 127.3] - # Person1: $200 - $90 = $110 - # Person2: $200 - $90 = $110 - # Unit total: $220 - $30 = $190 → $190 * 0.67 = $127.30 - in_tanf_countable_income_for_eligibility: [127.3, 127.3, 127.3] + in_tanf_countable_earned_income_for_eligibility: [107.2, 107.2, 107.2] + # Per earner: ($200-$90-$30)*0.67 = $80*0.67 = $53.60 + # Unit total: $53.60 + $53.60 = $107.20 + in_tanf_countable_income_for_eligibility: [107.2, 107.2, 107.2] in_tanf_countable_earned_income: [100, 100, 100] # ($200 + $200) × 0.25 = $100 in_tanf_countable_income_for_payment: [100, 100, 100] in_tanf_countable_income_eligible: [true, true, true] - # Countable for elig ($127.30) < standard of need ($320) → eligible + # Countable for elig ($107.20) < FPG for 3 → eligible in_tanf_payment_eligible: [true, true, true] # Countable for benefit ($100) < standard of need ($320) → eligible in_tanf_payment_standard: [320, 320, 320] diff --git a/policyengine_us/variables/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.py b/policyengine_us/variables/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.py index 074d307c620..5689808f59e 100644 --- a/policyengine_us/variables/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.py +++ b/policyengine_us/variables/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.py @@ -18,24 +18,23 @@ class in_tanf_countable_earned_income_for_eligibility(Variable): def formula(spm_unit, period, parameters): # NOTE: Uses calendar month as proxy for benefit duration. # Actual policy tracks cumulative months since enrollment. + # All deductions are per earner per 470 IAC 10.3-4-4(c). p = parameters(period).gov.states["in"].fssa.tanf.income.deductions person = spm_unit.members gross_earned = person("tanf_gross_earned_income", period) - # $90 per earner (470 IAC 10.3-4-4(c)) - after_work_expense = spm_unit.sum( - max_(gross_earned - p.work_expense.amount, 0) - ) + # (c)(1): $90 per earner + after_work_expense = max_(gross_earned - p.work_expense.amount, 0) is_enrolled = spm_unit("is_tanf_enrolled", period) month = period.start.month - # Enrolled: $30 flat in both phases (months 1-12) + # (c)(2): $30 per earner (enrolled, months 1-12) after_flat = max_( after_work_expense - p.eligibility.flat_disregard.amount, 0 ) - # 1/3 disregard only in first phase (months 1-4) + # (c)(3): 1/3 per earner (enrolled, months 1-4 only) in_one_third_phase = ( month <= p.eligibility.earned_income_disregard.months ) @@ -46,4 +45,7 @@ def formula(spm_unit, period, parameters): in_one_third_phase, with_one_third, after_flat ) - return where(is_enrolled, enrolled_countable, after_work_expense) + # Sum per-earner results to unit level + return spm_unit.sum( + where(is_enrolled, enrolled_countable, after_work_expense) + ) From 7787f9425bcb74bda184539880528085031cff1c Mon Sep 17 00:00:00 2001 From: Ziming Date: Sat, 28 Feb 2026 23:38:51 -0500 Subject: [PATCH 6/8] fix --- .../resources/vehicle_exemption/amount.yaml | 2 +- .../in/fssa/tanf/standard_of_need/amount.yaml | 4 ++-- .../benefit/in_tanf_payment_standard.yaml | 24 +++++++++++++++++++ .../gov/states/in/fssa/tanf/edge_cases.yaml | 2 +- .../in_tanf_countable_income_eligible.yaml | 10 ++++---- ...untable_earned_income_for_eligibility.yaml | 2 +- .../gov/states/in/fssa/tanf/integration.yaml | 6 ++--- 7 files changed, 37 insertions(+), 13 deletions(-) diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/vehicle_exemption/amount.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/vehicle_exemption/amount.yaml index d5df76ec39a..58b483fcd3d 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/vehicle_exemption/amount.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/resources/vehicle_exemption/amount.yaml @@ -14,6 +14,6 @@ metadata: - title: IC 12-14-2-1(b)(2) href: https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-1 - title: FSSA DFR Chapter 2600, Section 2615.60.15 ($10,000 until 6/30/2022, $20,000 effective 7/1/2022) - href: https://www.in.gov/fssa/dfr/files/2600.pdf + href: https://www.in.gov/fssa/dfr/files/2600.pdf#page=30 - title: Urban Institute Welfare Rules Database, Table L9 ($1,000 at inception, $5,000 from July 1999, $10,000 from July 2021) href: https://wrd.urban.org/welfare-rules-databook diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/amount.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/amount.yaml index abd59de2ecc..bfab15af01f 100644 --- a/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/amount.yaml +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/standard_of_need/amount.yaml @@ -42,7 +42,7 @@ metadata: reference: - title: 470 IAC 10.3-4-3(a)(1) href: https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-3 - - title: IC 12-14-2-5 + - title: IC 12-14-2-5 (amount of assistance; standard of need) href: https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-5 - - title: Indiana DCS Assistance for Unlicensed Relative Placements (pre-2023 values) + - title: Indiana DCS Unlicensed Relative Placements, Table 3 (corroborates pre-2023 standard of need values) href: https://www.in.gov/dcs/files/16.2%20Assistance%20for%20Unlicensed%20Relative%20Placements.pdf#page=7 diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/benefit/in_tanf_payment_standard.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/benefit/in_tanf_payment_standard.yaml index 93c2c7a849f..05a56b20385 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/benefit/in_tanf_payment_standard.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/benefit/in_tanf_payment_standard.yaml @@ -49,6 +49,30 @@ output: in_tanf_payment_standard: 515 +- name: Payment standard for family of 7 + period: 2024-01 + input: + spm_unit_size: 7 + state_code: IN + output: + in_tanf_payment_standard: 580 + +- name: Payment standard for family of 8 + period: 2024-01 + input: + spm_unit_size: 8 + state_code: IN + output: + in_tanf_payment_standard: 645 + +- name: Payment standard for family of 9 + period: 2024-01 + input: + spm_unit_size: 9 + state_code: IN + output: + in_tanf_payment_standard: 710 + - name: Payment standard for family of 10 period: 2024-01 input: diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/edge_cases.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/edge_cases.yaml index 3e9567f98a1..d3a36661274 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/edge_cases.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/edge_cases.yaml @@ -18,7 +18,7 @@ state_code: IN output: in_tanf_countable_earned_income_for_eligibility: [0, 0] - # $90 - $90 = $0; $0 - $30 = $0; $0 * 0.67 = $0 + # Applicant (not enrolled): $90 - $90 = $0 in_tanf_countable_earned_income: [22.5, 22.5] # $90 * 0.25 = $22.50 diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/eligibility/in_tanf_countable_income_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/eligibility/in_tanf_countable_income_eligible.yaml index 61191ed767c..1981c761495 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/eligibility/in_tanf_countable_income_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/eligibility/in_tanf_countable_income_eligible.yaml @@ -1,5 +1,5 @@ # Tests for in_tanf_countable_income_eligible -# Uses eligibility disregards: $90/earner, $30/unit, 1/3 of remainder +# Uses eligibility disregards: $90/earner, $30/earner, 1/3 of remainder # Compares to standard of need (initial) or FPL (continuing) - name: Family of 3 with zero income - eligible @@ -47,11 +47,11 @@ output: in_tanf_countable_earned_income_for_eligibility: [120.6, 120.6, 120.6] # $300 - $90 (work expense) = $210 - # $210 - $30 (unit disregard) = $180 + # $210 - $30 (flat disregard) = $180 # $180 * (1 - 0.33) = $120.60 in_tanf_countable_income_for_eligibility: [120.6, 120.6, 120.6] in_tanf_countable_income_eligible: [true, true, true] - # Countable ($120.60) < standard of need ($320) → eligible + # Enrolled: countable ($120.60) < 100% FPL for 3 → eligible - name: Applicant family of 3 with moderate earned income - not eligible period: 2024-01 @@ -103,7 +103,7 @@ # $380 * 0.67 = $254.60 in_tanf_countable_income_for_eligibility: [254.6, 254.6] in_tanf_countable_income_eligible: [true, true] - # Countable ($254.60) < standard of need ($255) → eligible + # Enrolled: countable ($254.60) < 100% FPL for 2 → eligible - name: Two earners - each gets $90 disregard period: 2024-01 @@ -131,7 +131,7 @@ # Unit total: $53.60 + $53.60 = $107.20 in_tanf_countable_income_for_eligibility: [107.2, 107.2, 107.2] in_tanf_countable_income_eligible: [true, true, true] - # Countable ($127.30) < standard of need ($320) → eligible + # Enrolled: countable ($107.20) < 100% FPL for 3 → eligible - name: Continuing eligibility uses FPL threshold period: 2024-01 diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.yaml index 9d984ef8fa6..5e48502169a 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.yaml @@ -144,7 +144,7 @@ # Per earner: ($200-$90-$30)*0.67 = $80*0.67 = $53.60 # Unit total: $53.60 + $53.60 = $107.20 # Compare Case 1 (1 earner at $400): ($400-$90-$30)*0.67 = $187.60 - # 2 earners get $60 more in deductions ($30 each vs $30 once) + # 2 earners get more deductions ($90+$30 each = $240 total vs $120 for 1 earner) # --- Applicants (not enrolled, $90 work expense only) --- diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration.yaml index 11c6d3eeb27..d10029f4651 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/integration.yaml @@ -64,7 +64,7 @@ # $200 × 0.25 (75% disregard) = $50 in_tanf_countable_income_for_payment: [50, 50] in_tanf_countable_income_eligible: [true, true] - # Countable for elig ($53.60) < standard of need ($255) → eligible + # Enrolled: countable for elig ($53.60) < 100% FPL for 2 → eligible in_tanf_payment_eligible: [true, true] # Countable for benefit ($50) < standard of need ($255) → eligible in_tanf_payment_standard: [255, 255] @@ -103,7 +103,7 @@ in_tanf_countable_income_for_payment: [175, 175] # $75 (earned) + $100 (unearned) = $175 in_tanf_countable_income_eligible: [true, true] - # Countable for elig ($220.60) < standard of need ($255) → eligible + # Enrolled: countable for elig ($220.60) < 100% FPL for 2 → eligible in_tanf_payment_eligible: [true, true] # Countable for benefit ($175) < standard of need ($255) → eligible in_tanf_payment_standard: [255, 255] @@ -179,7 +179,7 @@ # $300 × 0.25 = $75 in_tanf_countable_income_for_payment: [75, 75, 75, 75] in_tanf_countable_income_eligible: [true, true, true, true] - # Countable for elig ($120.60) < standard of need ($385) → eligible + # Enrolled: countable for elig ($120.60) < 100% FPL for 4 → eligible in_tanf_payment_eligible: [true, true, true, true] # Countable for benefit ($75) < standard of need ($385) → eligible in_tanf_payment_standard: [385, 385, 385, 385] From 366022d2bd873fb264adc927f913b750950b3c20 Mon Sep 17 00:00:00 2001 From: Ziming Date: Sun, 1 Mar 2026 01:06:21 -0500 Subject: [PATCH 7/8] minor --- ...f_countable_earned_income_for_eligibility.py | 2 +- uv.lock | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/policyengine_us/variables/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.py b/policyengine_us/variables/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.py index 5689808f59e..7650df229ad 100644 --- a/policyengine_us/variables/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.py +++ b/policyengine_us/variables/gov/states/in/fssa/tanf/income/in_tanf_countable_earned_income_for_eligibility.py @@ -26,7 +26,7 @@ def formula(spm_unit, period, parameters): # (c)(1): $90 per earner after_work_expense = max_(gross_earned - p.work_expense.amount, 0) - is_enrolled = spm_unit("is_tanf_enrolled", period) + is_enrolled = person.spm_unit("is_tanf_enrolled", period) month = period.start.month # (c)(2): $30 per earner (enrolled, months 1-12) diff --git a/uv.lock b/uv.lock index 78da74f0c1e..5a2108d77bb 100644 --- a/uv.lock +++ b/uv.lock @@ -1547,7 +1547,7 @@ wheels = [ [[package]] name = "policyengine-us" -version = "1.586.0" +version = "1.589.1" source = { editable = "." } dependencies = [ { name = "microdf-python" }, @@ -1564,6 +1564,7 @@ dev = [ { name = "furo" }, { name = "jupyter-book" }, { name = "setuptools" }, + { name = "towncrier" }, ] [package.metadata] @@ -1577,6 +1578,7 @@ requires-dist = [ { name = "pandas", specifier = ">=2.0" }, { name = "policyengine-core", specifier = ">=3.23.5" }, { name = "setuptools", marker = "extra == 'dev'", specifier = ">=80.9.0" }, + { name = "towncrier", marker = "extra == 'dev'", specifier = ">=24.8.0" }, { name = "tqdm", specifier = ">=4.67.1" }, ] provides-extras = ["dev"] @@ -2329,6 +2331,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/50/49/8dc3fd90902f70084bd2cd059d576ddb4f8bb44c2c7c0e33a11422acb17e/tornado-6.5.4-cp39-abi3-win_arm64.whl", hash = "sha256:053e6e16701eb6cbe641f308f4c1a9541f91b6261991160391bfc342e8a551a1", size = 445910, upload-time = "2025-12-15T19:21:02.571Z" }, ] +[[package]] +name = "towncrier" +version = "25.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "jinja2" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c2/eb/5bf25a34123698d3bbab39c5bc5375f8f8bcbcc5a136964ade66935b8b9d/towncrier-25.8.0.tar.gz", hash = "sha256:eef16d29f831ad57abb3ae32a0565739866219f1ebfbdd297d32894eb9940eb1", size = 76322, upload-time = "2025-08-30T11:41:55.393Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/06/8ba22ec32c74ac1be3baa26116e3c28bc0e76a5387476921d20b6fdade11/towncrier-25.8.0-py3-none-any.whl", hash = "sha256:b953d133d98f9aeae9084b56a3563fd2519dfc6ec33f61c9cd2c61ff243fb513", size = 65101, upload-time = "2025-08-30T11:41:53.644Z" }, +] + [[package]] name = "tqdm" version = "4.67.1" From c1ad5cd5bffd78e44396272891786f4a3ce871cb Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Thu, 5 Mar 2026 02:28:28 +0100 Subject: [PATCH 8/8] Backdate federal TANF income sources to 1997-07-01, improve references and labels Co-Authored-By: Claude Opus 4.6 --- .../backdate-federal-tanf-income-sources.changed.md | 1 + .../gov/hhs/tanf/cash/income/sources/earned.yaml | 11 ++++++----- .../gov/hhs/tanf/cash/income/sources/unearned.yaml | 11 ++++++----- 3 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 changelog.d/backdate-federal-tanf-income-sources.changed.md diff --git a/changelog.d/backdate-federal-tanf-income-sources.changed.md b/changelog.d/backdate-federal-tanf-income-sources.changed.md new file mode 100644 index 00000000000..c27fd47b2d6 --- /dev/null +++ b/changelog.d/backdate-federal-tanf-income-sources.changed.md @@ -0,0 +1 @@ +Backdate federal TANF earned and unearned income source parameters to 1997-07-01. diff --git a/policyengine_us/parameters/gov/hhs/tanf/cash/income/sources/earned.yaml b/policyengine_us/parameters/gov/hhs/tanf/cash/income/sources/earned.yaml index bf90b78cae1..0b6de8ae6a4 100644 --- a/policyengine_us/parameters/gov/hhs/tanf/cash/income/sources/earned.yaml +++ b/policyengine_us/parameters/gov/hhs/tanf/cash/income/sources/earned.yaml @@ -1,13 +1,14 @@ description: The Department of Health and Human Services counts these income sources as earned income under the Temporary Assistance for Needy Families program. values: - 2020-01-01: + 1997-07-01: - employment_income_before_lsr - self_employment_income_before_lsr metadata: unit: list period: year - label: TANF earned income sources + label: Federal TANF earned income sources reference: - - title: 42 U.S.C. § 602 - Eligible States; State plan - href: https://www.law.cornell.edu/uscode/text/42/602 - # TANF gives states flexibility to define earned income in their state plans. This list serves as a general baseline that states may override with their own definitions. + - title: 42 U.S.C. 601-619 — TANF block grant (enacted August 22, 1996; effective July 1, 1997) + href: https://www.law.cornell.edu/uscode/text/42/chapter-7/subchapter-IV/part-A + # TANF gives states flexibility to define earned income in their state plans. + # This list serves as a general baseline that states may override with their own definitions. diff --git a/policyengine_us/parameters/gov/hhs/tanf/cash/income/sources/unearned.yaml b/policyengine_us/parameters/gov/hhs/tanf/cash/income/sources/unearned.yaml index 505a0e29a7b..78e1df173f5 100644 --- a/policyengine_us/parameters/gov/hhs/tanf/cash/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/hhs/tanf/cash/income/sources/unearned.yaml @@ -1,6 +1,6 @@ description: The Department of Health and Human Services counts these income sources as unearned income under the Temporary Assistance for Needy Families program. values: - 2020-01-01: + 1997-07-01: - veterans_benefits - rental_income - child_support_received @@ -16,8 +16,9 @@ values: metadata: unit: list period: year - label: TANF unearned income sources + label: Federal TANF unearned income sources reference: - - title: 42 U.S.C. § 602 - Eligible States; State plan - href: https://www.law.cornell.edu/uscode/text/42/602 - # TANF gives states flexibility to define unearned income in their state plans. This list serves as a general baseline that states may override with their own definitions. + - title: 42 U.S.C. 601-619 — TANF block grant (enacted August 22, 1996; effective July 1, 1997) + href: https://www.law.cornell.edu/uscode/text/42/chapter-7/subchapter-IV/part-A + # TANF gives states flexibility to define unearned income in their state plans. + # This list serves as a general baseline that states may override with their own definitions.