diff --git a/changelog.d/in-tanf-maximum-benefit.fixed.md b/changelog.d/in-tanf-maximum-benefit.fixed.md new file mode 100644 index 00000000000..31181cd37fc --- /dev/null +++ b/changelog.d/in-tanf-maximum-benefit.fixed.md @@ -0,0 +1 @@ +Correct Indiana TANF benefit payments to use the IC 12-14-2-5 maximum benefit and add the post-2025 gross/net income eligibility screens. diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/amount_of_assistance/additional_member_amount.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/amount_of_assistance/additional_member_amount.yaml new file mode 100644 index 00000000000..aafed0669d3 --- /dev/null +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/amount_of_assistance/additional_member_amount.yaml @@ -0,0 +1,15 @@ +description: Indiana provides this additional amount for each assistance unit member above the maximum benefit table size under the Temporary Assistance for Needy Families program. + +values: + 1997-10-01: 0 + 2024-07-01: 104 + +metadata: + unit: currency-USD + period: month + label: Indiana TANF maximum benefit additional member amount + reference: + - title: IC 12-14-2-5 (amount of assistance; payment made; maximum amounts) + href: https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-5 + - title: FSSA DFR - About TANF + href: https://www.in.gov/fssa/dfr/tanf-cash-assistance/about-tanf/ diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/amount_of_assistance/amount.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/amount_of_assistance/amount.yaml new file mode 100644 index 00000000000..bff77a35a50 --- /dev/null +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/amount_of_assistance/amount.yaml @@ -0,0 +1,62 @@ +description: Indiana provides this amount as the maximum benefit under the Temporary Assistance for Needy Families program. + +1: + 1997-10-01: 139 + 2023-07-01: 155 + 2024-07-01: 248 +2: + 1997-10-01: 229 + 2023-07-01: 255 + 2024-07-01: 409 +3: + 1997-10-01: 288 + 2023-07-01: 320 + 2024-07-01: 513 +4: + 1997-10-01: 346 + 2023-07-01: 385 + 2024-07-01: 617 +5: + 1997-10-01: 405 + 2023-07-01: 450 + 2024-07-01: 721 +6: + 1997-10-01: 463 + 2023-07-01: 515 + 2024-07-01: 825 +7: + 1997-10-01: 522 + 2023-07-01: 580 + 2024-07-01: 929 +8: + 1997-10-01: 580 + 2023-07-01: 645 + 2024-07-01: 1_033 +9: + 1997-10-01: 639 + 2023-07-01: 710 + 2024-07-01: 1_137 +10: + 1997-10-01: 697 + 2023-07-01: 775 + 2024-07-01: 1_241 + +metadata: + unit: currency-USD + period: month + breakdown: + - range(1, 11) + breakdown_labels: + - Assistance unit size + label: Indiana TANF maximum benefit amount + reference: + - title: IC 12-14-2-5 (amount of assistance; payment made; maximum amounts) + href: https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-5 + - title: 470 IAC 10.3-4-3(a)(1) (corroborates pre-2024 amounts equal to standard of need) + href: https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-3 + - title: FSSA SNAP/TANF Transmittal 2024 (Section 3050.10.00, maximum benefits effective 7/1/2024) + href: https://www.in.gov/fssa/dfr/files/SNAP-TANF-Transmittal2024.pdf + - title: FSSA SNAP/TANF Program Policy Manual, Section 3050.10.00 + href: https://www.in.gov/fssa/dfr/files/3000.pdf#page=7 + - title: CBPP TANF benefit levels (corroborates 2023-07-01 increase) + href: https://www.cbpp.org/research/income-security/continued-increases-in-tanf-benefit-levels-are-critical-to-helping diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/amount_of_assistance/max_table_size.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/amount_of_assistance/max_table_size.yaml new file mode 100644 index 00000000000..3e825112811 --- /dev/null +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/amount_of_assistance/max_table_size.yaml @@ -0,0 +1,14 @@ +description: Indiana sets this as the largest assistance unit size in the maximum benefit table under the Temporary Assistance for Needy Families program. + +values: + 1997-10-01: 10 + +metadata: + unit: person + period: year + label: Indiana TANF maximum benefit table size + reference: + - title: IC 12-14-2-5 (amount of assistance; payment made; maximum amounts) + href: https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-5 + - 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/parameters/gov/states/in/fssa/tanf/eligibility/initial/gross_income/fpg_rate.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/eligibility/initial/gross_income/fpg_rate.yaml new file mode 100644 index 00000000000..af7c2c4119d --- /dev/null +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/eligibility/initial/gross_income/fpg_rate.yaml @@ -0,0 +1,16 @@ +description: Indiana limits initial applicants' gross income to this share of the federal poverty guideline under the Temporary Assistance for Needy Families program. + +values: + 1997-10-01: .inf # No gross income screen before 2025-07-01 (standard of need governs) + 2025-07-01: 0.35 + 2027-07-01: 0.5 + +metadata: + unit: /1 + period: month + label: Indiana TANF initial eligibility gross income FPG rate + reference: + - title: IC 12-14-1-1.7(b)-(c) (35% FPL through June 30, 2027; 50% FPL after) + href: https://iga.in.gov/laws/2025/ic/titles/12/#12-14-1-1.7 + - title: FSSA DFR Chapter 3000, Section 3010.15.00 (gross income standard) + href: https://www.in.gov/fssa/dfr/files/3000.pdf#page=4 diff --git a/policyengine_us/parameters/gov/states/in/fssa/tanf/eligibility/initial/net_income/maximum_grant_rate.yaml b/policyengine_us/parameters/gov/states/in/fssa/tanf/eligibility/initial/net_income/maximum_grant_rate.yaml new file mode 100644 index 00000000000..212e7685308 --- /dev/null +++ b/policyengine_us/parameters/gov/states/in/fssa/tanf/eligibility/initial/net_income/maximum_grant_rate.yaml @@ -0,0 +1,13 @@ +description: Indiana limits initial applicants' countable net income to this share of the maximum benefit under the Temporary Assistance for Needy Families program. + +values: + 1997-10-01: 0 # Standard of need governs initial net income before 2025-07-01 + 2025-07-01: 1 + +metadata: + unit: /1 + period: month + label: Indiana TANF initial eligibility net income maximum benefit rate + reference: + - title: FSSA DFR Chapter 3000, Section 3010.15.00 (net income standard equal to the maximum grant) + href: https://www.in.gov/fssa/dfr/files/3000.pdf#page=4 diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/benefit/in_tanf_maximum_benefit.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/benefit/in_tanf_maximum_benefit.yaml new file mode 100644 index 00000000000..9d0ae738263 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/benefit/in_tanf_maximum_benefit.yaml @@ -0,0 +1,79 @@ +# Tests for in_tanf_maximum_benefit (amount of assistance, IC 12-14-2-5) +# Maximum benefit by assistance unit size across the 2023 and 2024 increases. + +- name: Family of 2 pre-2023 amount + period: 2022-01 + absolute_error_margin: 0.1 + input: + spm_unit_size: 2 + state_code: IN + output: + in_tanf_maximum_benefit: 229 + +- name: Family of 2 January 2024 still pre-July-2024 amount + period: 2024-01 + absolute_error_margin: 0.1 + input: + spm_unit_size: 2 + state_code: IN + output: + in_tanf_maximum_benefit: 255 + # 2023-07-01 amount; the 2024-07-01 increase is not yet effective + +- name: Family of 2 January 2025 increased amount + period: 2025-01 + absolute_error_margin: 0.1 + input: + spm_unit_size: 2 + state_code: IN + output: + in_tanf_maximum_benefit: 409 + # 2024-07-01 amount (IC 12-14-2-5) + +- name: Family of 2 January 2026 amount + period: 2026-01 + absolute_error_margin: 0.1 + input: + spm_unit_size: 2 + state_code: IN + output: + in_tanf_maximum_benefit: 409 + +- name: Family of 3 January 2025 amount + period: 2025-01 + absolute_error_margin: 0.1 + input: + spm_unit_size: 3 + state_code: IN + output: + in_tanf_maximum_benefit: 513 + +- name: Family of 10 January 2025 amount + period: 2025-01 + absolute_error_margin: 0.1 + input: + spm_unit_size: 10 + state_code: IN + output: + in_tanf_maximum_benefit: 1_241 + +- name: Family of 11 January 2025 adds one additional member increment + period: 2025-01 + absolute_error_margin: 0.1 + input: + spm_unit_size: 11 + state_code: IN + output: + in_tanf_maximum_benefit: 1_345 + # Size-10 amount ($1,241) + $104 for the 11th member + +- name: Family of 11 January 2024 has no additional member increment + period: 2024-01 + absolute_error_margin: 0.1 + input: + spm_unit_size: 11 + state_code: IN + output: + in_tanf_maximum_benefit: 775 + # Before 2024-07-01 the additional member amount is $0, so size 11 is + # capped at the size-10 standard-of-need amount ($775) 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 5e216aaa486..2ce04de13a3 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 @@ -138,7 +138,7 @@ period: 2024-01 input: in_tanf_eligible: true - in_tanf_payment_standard: 320 + in_tanf_maximum_benefit: 320 in_tanf_countable_income_for_payment: 319 state_code: IN output: @@ -164,4 +164,4 @@ state_code: IN output: in_tanf: 255 - # Capped at payment standard for family of 2 ($255), not inflated + # Capped at the maximum benefit for family of 2 ($255), not inflated 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 84703243a4a..ca7b7ca3303 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 @@ -164,3 +164,148 @@ in_tanf_countable_income_for_eligibility: 586.7 in_tanf_countable_income_eligible: true # Countable ($586.70) < 100% FPL for 3 (~$1,988/mo) -> eligible + +# Post-2025 initial eligibility (IC 12-14-1-1.7; FSSA 3010.15.00). +# Initial applicants must have countable net income below the maximum grant +# and gross income at or below 35% FPG (50% from 2027-07-01). For Indiana the +# net (maximum grant) standard binds before the looser 35% FPG gross screen. + +- name: Applicant family of 3 just below the maximum grant net standard in 2026 + period: 2026-01 + input: + people: + person1: + age: 30 + tanf_gross_unearned_income: 512 + person2: + age: 10 + person3: + age: 8 + 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_income_for_eligibility: 512 + in_tanf_countable_income_eligible: true + # Net ($512) < maximum grant ($513); gross ($512) <= 35% FPG ($777) -> eligible + +- name: Applicant family of 3 at the maximum grant net standard in 2026 + period: 2026-01 + input: + people: + person1: + age: 30 + tanf_gross_unearned_income: 513 + person2: + age: 10 + person3: + age: 8 + 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_income_for_eligibility: 513 + in_tanf_countable_income_eligible: false + # Net ($513) >= maximum grant ($513) -> not eligible (strict less-than) + +- name: Applicant family of 3 below the maximum grant net standard in 2028 + period: 2028-01 + input: + people: + person1: + age: 30 + tanf_gross_unearned_income: 500 + person2: + age: 10 + person3: + age: 8 + 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_income_eligible: true + # Net ($500) < maximum grant ($513); gross ($500) <= 50% FPG ($1,165) -> eligible + +- name: Applicant family of 3 high earner fails both 2026 screens + period: 2026-01 + input: + people: + person1: + age: 30 + tanf_gross_earned_income: 3_000 + person2: + age: 10 + person3: + age: 8 + 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_income_eligible: false + # Net ($2,910 = $3,000 - $90) >= maximum grant and gross ($3,000) > 35% FPG + +- name: Enrolled family of 3 below 100% FPG in 2026 remains eligible + period: 2026-01 + input: + people: + person1: + age: 30 + tanf_gross_unearned_income: 2_000 + person2: + age: 10 + person3: + age: 8 + 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_income_eligible: true + # Enrolled: countable ($2,000) < 100% FPG for 3 ($2,220.83) -> eligible + +- name: Enrolled family of 3 above 100% FPG in 2026 loses eligibility + period: 2026-01 + input: + people: + person1: + age: 30 + tanf_gross_unearned_income: 2_300 + person2: + age: 10 + person3: + age: 8 + 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_income_eligible: false + # Enrolled: countable ($2,300) >= 100% FPG for 3 ($2,220.83) -> not eligible diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/eligibility/in_tanf_payment_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/eligibility/in_tanf_payment_eligible.yaml index 939290a0d4f..0ccb073e152 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/eligibility/in_tanf_payment_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/eligibility/in_tanf_payment_eligible.yaml @@ -1,6 +1,6 @@ # Tests for in_tanf_payment_eligible # Uses payment disregards: 75% earned income (only 25% counts) -# Compares to payment standard +# Compares to the maximum benefit (IC 12-14-2-5) - name: Family of 3 with zero countable income - eligible period: 2024-01 @@ -10,9 +10,9 @@ state_code: IN output: in_tanf_payment_eligible: true - # Countable income ($0) < standard of need ($320) → eligible + # Countable income ($0) < maximum benefit ($320) → eligible -- name: Family of 3 with income below standard of need - eligible +- name: Family of 3 with income below maximum benefit - eligible period: 2024-01 input: spm_unit_size: 3 @@ -20,9 +20,9 @@ state_code: IN output: in_tanf_payment_eligible: true - # Countable income ($300) < standard of need ($320) → eligible + # Countable income ($300) < maximum benefit ($320) → eligible -- name: Family of 3 with income at standard of need - not eligible +- name: Family of 3 with income at maximum benefit - not eligible period: 2024-01 input: spm_unit_size: 3 @@ -30,9 +30,9 @@ state_code: IN output: in_tanf_payment_eligible: false - # Countable income ($320) >= standard of need ($320) → not eligible + # Countable income ($320) >= maximum benefit ($320) → not eligible -- name: Family of 3 with income above standard of need - not eligible +- name: Family of 3 with income above maximum benefit - not eligible period: 2024-01 input: spm_unit_size: 3 @@ -40,9 +40,9 @@ state_code: IN output: in_tanf_payment_eligible: false - # Countable income ($400) > standard of need ($320) → not eligible + # Countable income ($400) > maximum benefit ($320) → not eligible -- name: Family of 1 below standard of need - eligible +- name: Family of 1 below maximum benefit - eligible period: 2024-01 input: spm_unit_size: 1 @@ -50,9 +50,9 @@ state_code: IN output: in_tanf_payment_eligible: true - # Countable income ($150) < standard of need ($155) → eligible + # Countable income ($150) < maximum benefit ($155) → eligible -- name: Family of 2 below standard of need - eligible +- name: Family of 2 below maximum benefit - eligible period: 2024-01 input: spm_unit_size: 2 @@ -60,4 +60,25 @@ state_code: IN output: in_tanf_payment_eligible: true - # Countable income ($250) < standard of need ($255) → eligible + # Countable income ($250) < maximum benefit ($255) → eligible + +- name: Family of 3 with income above old standard of need now eligible in 2025 + period: 2025-01 + input: + spm_unit_size: 3 + in_tanf_countable_income_for_payment: 400 + state_code: IN + output: + in_tanf_payment_eligible: true + # Countable income ($400) < 2024-07-01 maximum benefit ($513) → eligible, + # whereas $400 exceeded the standard of need ($320) + +- name: Family of 3 with income at 2025 maximum benefit - not eligible + period: 2025-01 + input: + spm_unit_size: 3 + in_tanf_countable_income_for_payment: 513 + state_code: IN + output: + in_tanf_payment_eligible: false + # Countable income ($513) >= maximum benefit ($513) → not eligible diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/in_tanf.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/in_tanf.yaml index 49adcce45bd..3dcf459c415 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/in_tanf.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/in_tanf.yaml @@ -2,7 +2,7 @@ period: 2024-01 input: in_tanf_eligible: true - in_tanf_payment_standard: 513 + in_tanf_maximum_benefit: 513 in_tanf_countable_income_for_payment: 0 state_code: IN output: @@ -13,7 +13,7 @@ period: 2024-01 input: in_tanf_eligible: true - in_tanf_payment_standard: 513 + in_tanf_maximum_benefit: 513 in_tanf_countable_income_for_payment: 200 state_code: IN output: @@ -24,7 +24,7 @@ period: 2024-01 input: in_tanf_eligible: true - in_tanf_payment_standard: 409 + in_tanf_maximum_benefit: 409 in_tanf_countable_income_for_payment: 100 state_code: IN output: @@ -35,30 +35,95 @@ period: 2024-01 input: in_tanf_eligible: false - in_tanf_payment_standard: 513 + in_tanf_maximum_benefit: 513 in_tanf_countable_income_for_payment: 100 state_code: IN output: in_tanf: 0 -- name: Family with countable income equal to payment standard +- name: Family with countable income equal to maximum benefit period: 2024-01 input: in_tanf_eligible: true - in_tanf_payment_standard: 513 + in_tanf_maximum_benefit: 513 in_tanf_countable_income_for_payment: 513 state_code: IN output: in_tanf: 0 # Max benefit ($513) - countable income ($513) = $0 -- name: Family with countable income exceeding payment standard +- name: Family with countable income exceeding maximum benefit period: 2024-01 input: in_tanf_eligible: true - in_tanf_payment_standard: 513 + in_tanf_maximum_benefit: 513 in_tanf_countable_income_for_payment: 600 state_code: IN output: in_tanf: 0 # max(513 - 600, 0) = 0 + +- name: Family of two, adult and child, no income, no SSI, January 2026. + period: 2026-01 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 30 + employment_income: 0 + ssi: 0 + person2: + age: 5 + employment_income: 0 + ssi: 0 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: IN + output: + in_tanf: 409 + # 2024-07-01 maximum benefit for a family of 2 (IC 12-14-2-5) + +- name: Family of two, no income, January 2024 still pays pre-July-2024 amount. + period: 2024-01 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 30 + person2: + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: IN + output: + in_tanf: 255 + # January 2024 is before the 2024-07-01 increase, so the maximum benefit + # is still the 2023-07-01 amount ($255) for a family of 2. + +- name: Family of two, no income, January 2025 pays the increased amount. + period: 2025-01 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 30 + person2: + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: IN + output: + in_tanf: 409 + # 2024-07-01 maximum benefit for a family of 2 ($409) diff --git a/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/income/in_tanf_gross_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/income/in_tanf_gross_income.yaml new file mode 100644 index 00000000000..6f6d0f1d630 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/in/fssa/tanf/income/in_tanf_gross_income.yaml @@ -0,0 +1,94 @@ +# Tests for in_tanf_gross_income +# Sum of gross earned and gross unearned income (no disregards), used by the +# post-2025 initial gross income screen. + +- name: No income + period: 2024-01 + input: + people: + person1: + tanf_gross_earned_income: 0 + tanf_gross_unearned_income: 0 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: IN + output: + in_tanf_gross_income: 0 + +- name: Earned income only + period: 2024-01 + input: + people: + person1: + tanf_gross_earned_income: 400 + tanf_gross_unearned_income: 0 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: IN + output: + in_tanf_gross_income: 400 + # Gross income has no disregards applied + +- name: Unearned income only + period: 2024-01 + input: + people: + person1: + tanf_gross_earned_income: 0 + tanf_gross_unearned_income: 300 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: IN + output: + in_tanf_gross_income: 300 + +- name: Both earned and unearned income + period: 2024-01 + input: + people: + person1: + tanf_gross_earned_income: 500 + tanf_gross_unearned_income: 200 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: IN + output: + in_tanf_gross_income: 700 + # $500 earned + $200 unearned = $700 + +- name: Multiple people in unit + period: 2024-01 + input: + people: + person1: + tanf_gross_earned_income: 200 + person2: + tanf_gross_unearned_income: 100 + person3: + age: 8 + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: IN + output: + in_tanf_gross_income: 300 + # $200 (person1 earned) + $100 (person2 unearned) = $300 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 7757ddda307..9d5dbf85f0e 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 @@ -366,3 +366,68 @@ in_tanf_eligible: true in_tanf: 145 # $320 - $175 = $145 + +- name: Case 11, family of 3 no income receives 2024-07-01 maximum benefit in 2026. + period: 2026-01 + input: + people: + person1: + age: 30 + person2: + age: 10 + 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 + in_tanf_payment_standard: 320 + # Standard of need (eligibility table) is unchanged + in_tanf_maximum_benefit: 513 + # Family of 3 maximum benefit (IC 12-14-2-5, effective 2024-07-01) + in_tanf_countable_income_for_payment: 0 + in_tanf_countable_income_eligible: true + in_tanf_payment_eligible: true + in_tanf_eligible: true + in_tanf: 513 + # Maximum benefit ($513) - countable income ($0) = $513 + +- name: Case 12, applicant income above old standard of need now receives a benefit in 2026. + period: 2026-01 + input: + people: + person1: + age: 30 + tanf_gross_unearned_income: 400 + person2: + age: 10 + 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 + in_tanf_maximum_benefit: 513 + in_tanf_countable_income_for_payment: 400 + in_tanf_countable_income_for_eligibility: 400 + in_tanf_countable_income_eligible: true + # Net ($400) < maximum grant ($513); gross ($400) <= 35% FPG -> eligible + in_tanf_payment_eligible: true + # $400 < maximum benefit ($513); above the old standard of need ($320) + in_tanf_eligible: true + in_tanf: 113 + # Maximum benefit ($513) - countable income ($400) = $113 diff --git a/policyengine_us/variables/gov/states/in/fssa/tanf/eligibility/in_tanf_countable_income_eligible.py b/policyengine_us/variables/gov/states/in/fssa/tanf/eligibility/in_tanf_countable_income_eligible.py index 88ffa64028b..2456549bfa6 100644 --- a/policyengine_us/variables/gov/states/in/fssa/tanf/eligibility/in_tanf_countable_income_eligible.py +++ b/policyengine_us/variables/gov/states/in/fssa/tanf/eligibility/in_tanf_countable_income_eligible.py @@ -9,21 +9,35 @@ class in_tanf_countable_income_eligible(Variable): reference = ( "https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-1", "https://iga.in.gov/laws/2025/ic/titles/12/#12-14-1-1.7", + "https://www.in.gov/fssa/dfr/files/3000.pdf#page=4", + "https://www.in.gov/fssa/dfr/files/3000.pdf#page=5", ) defined_for = StateCode.IN def formula(spm_unit, period, parameters): - # Initial: standard of need; Continuing: FPL * rate - p = parameters(period).gov.states["in"].fssa.tanf + p = parameters(period).gov.states["in"].fssa.tanf.eligibility countable = spm_unit("in_tanf_countable_income_for_eligibility", period) - is_enrolled = spm_unit("is_tanf_enrolled", period) - fpg = spm_unit("tanf_fpg", period) - continuing_threshold = fpg * p.eligibility.continuing.fpg_rate - threshold = where( - is_enrolled, - continuing_threshold, - spm_unit("in_tanf_payment_standard", period), + # Continuing/enrolled recipients: countable net income below 100% FPG + # (470 IAC 10.3-4-1; FSSA 3010.15.05). + continuing_eligible = countable < fpg * p.continuing.fpg_rate + + # Initial applicants. The net income standard is the standard of need + # before 2025-07-01 (maximum grant rate of 0) and the maximum grant + # from 2025-07-01 (FSSA 3010.15.00). From 2025-07-01 there is also a + # gross income screen at 35% FPG, rising to 50% after June 30, 2027 + # (IC 12-14-1-1.7); before then the screen is inactive (infinite rate). + standard_of_need = spm_unit("in_tanf_payment_standard", period) + maximum_grant = spm_unit("in_tanf_maximum_benefit", period) + grant_rate = p.initial.net_income.maximum_grant_rate + net_threshold = where( + grant_rate > 0, maximum_grant * grant_rate, standard_of_need ) - return countable < threshold + gross_income = spm_unit("in_tanf_gross_income", period) + initial_eligible = (countable < net_threshold) & ( + gross_income <= fpg * p.initial.gross_income.fpg_rate + ) + + is_enrolled = spm_unit("is_tanf_enrolled", period) + return where(is_enrolled, continuing_eligible, initial_eligible) diff --git a/policyengine_us/variables/gov/states/in/fssa/tanf/eligibility/in_tanf_payment_eligible.py b/policyengine_us/variables/gov/states/in/fssa/tanf/eligibility/in_tanf_payment_eligible.py index 273a61a33c5..e18c2de0162 100644 --- a/policyengine_us/variables/gov/states/in/fssa/tanf/eligibility/in_tanf_payment_eligible.py +++ b/policyengine_us/variables/gov/states/in/fssa/tanf/eligibility/in_tanf_payment_eligible.py @@ -7,12 +7,12 @@ class in_tanf_payment_eligible(Variable): label = "Indiana TANF payment eligible" definition_period = MONTH reference = ( - "https://iar.iga.in.gov/code/2026/470/10.3#470-10.3-4-3", "https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-5", + "https://www.in.gov/fssa/dfr/files/3000.pdf#page=7", ) defined_for = StateCode.IN def formula(spm_unit, period, parameters): countable = spm_unit("in_tanf_countable_income_for_payment", period) - payment_standard = spm_unit("in_tanf_payment_standard", period) - return countable < payment_standard + maximum_benefit = spm_unit("in_tanf_maximum_benefit", period) + return countable < maximum_benefit diff --git a/policyengine_us/variables/gov/states/in/fssa/tanf/in_tanf.py b/policyengine_us/variables/gov/states/in/fssa/tanf/in_tanf.py index 55df3dda1f9..15692230c87 100644 --- a/policyengine_us/variables/gov/states/in/fssa/tanf/in_tanf.py +++ b/policyengine_us/variables/gov/states/in/fssa/tanf/in_tanf.py @@ -14,7 +14,9 @@ class in_tanf(Variable): defined_for = "in_tanf_eligible" def formula(spm_unit, period, parameters): - payment_standard = spm_unit("in_tanf_payment_standard", period) + maximum_benefit = spm_unit("in_tanf_maximum_benefit", period) countable_income = spm_unit("in_tanf_countable_income_for_payment", period) - benefit = max_(payment_standard - countable_income, 0) - return min_(benefit, payment_standard) + benefit = max_(maximum_benefit - countable_income, 0) + # Cap at the maximum benefit so negative countable income cannot + # inflate the grant above the maximum. + return min_(benefit, maximum_benefit) diff --git a/policyengine_us/variables/gov/states/in/fssa/tanf/in_tanf_maximum_benefit.py b/policyengine_us/variables/gov/states/in/fssa/tanf/in_tanf_maximum_benefit.py new file mode 100644 index 00000000000..b18232f15f5 --- /dev/null +++ b/policyengine_us/variables/gov/states/in/fssa/tanf/in_tanf_maximum_benefit.py @@ -0,0 +1,22 @@ +from policyengine_us.model_api import * + + +class in_tanf_maximum_benefit(Variable): + value_type = float + entity = SPMUnit + label = "Indiana TANF maximum benefit amount" + unit = USD + definition_period = MONTH + reference = ( + "https://iga.in.gov/laws/2025/ic/titles/12/#12-14-2-5", + "https://www.in.gov/fssa/dfr/files/SNAP-TANF-Transmittal2024.pdf", + "https://www.in.gov/fssa/dfr/files/3000.pdf#page=7", + ) + defined_for = StateCode.IN + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states["in"].fssa.tanf.amount_of_assistance + size = spm_unit("spm_unit_size", period.this_year) + capped_size = min_(size, p.max_table_size) + additional_members = max_(size - p.max_table_size, 0) + return p.amount[capped_size] + additional_members * p.additional_member_amount diff --git a/policyengine_us/variables/gov/states/in/fssa/tanf/in_tanf_payment_standard.py b/policyengine_us/variables/gov/states/in/fssa/tanf/in_tanf_payment_standard.py index 61f745d799d..0d54def2b36 100644 --- a/policyengine_us/variables/gov/states/in/fssa/tanf/in_tanf_payment_standard.py +++ b/policyengine_us/variables/gov/states/in/fssa/tanf/in_tanf_payment_standard.py @@ -15,5 +15,6 @@ class in_tanf_payment_standard(Variable): def formula(spm_unit, period, parameters): p = parameters(period).gov.states["in"].fssa.tanf.standard_of_need - capped_size = min_(spm_unit("spm_unit_size", period), p.max_unit_size) + size = spm_unit("spm_unit_size", period.this_year) + capped_size = min_(size, p.max_unit_size) return p.amount[capped_size] diff --git a/policyengine_us/variables/gov/states/in/fssa/tanf/income/in_tanf_gross_income.py b/policyengine_us/variables/gov/states/in/fssa/tanf/income/in_tanf_gross_income.py new file mode 100644 index 00000000000..282d3e4e129 --- /dev/null +++ b/policyengine_us/variables/gov/states/in/fssa/tanf/income/in_tanf_gross_income.py @@ -0,0 +1,13 @@ +from policyengine_us.model_api import * + + +class in_tanf_gross_income(Variable): + value_type = float + entity = SPMUnit + label = "Indiana TANF gross income" + unit = USD + definition_period = MONTH + reference = "https://iga.in.gov/laws/2025/ic/titles/12/#12-14-1-1.7" + defined_for = StateCode.IN + + adds = ["tanf_gross_earned_income", "tanf_gross_unearned_income"]