diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..bf79e9338c6 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,6 @@ +- bump: patch + changes: + added: + - Add historical TANF parameter data for DE, MO, RI, SD (pre-2018 values). + - Add PA TANF Work Expense Reimbursement (WER) for 2009-2020 era. + - Add PA TANF work expense mechanism toggle (uses_deduction parameter). diff --git a/policyengine_us/parameters/gov/states/de/dhss/tanf/benefit/deficit_rate.yaml b/policyengine_us/parameters/gov/states/de/dhss/tanf/benefit/deficit_rate.yaml index 955f70aa6c1..c0262a642a6 100644 --- a/policyengine_us/parameters/gov/states/de/dhss/tanf/benefit/deficit_rate.yaml +++ b/policyengine_us/parameters/gov/states/de/dhss/tanf/benefit/deficit_rate.yaml @@ -1,7 +1,7 @@ description: Delaware uses this share of the deficit to calculate the grant remainder under the Temporary Assistance for Needy Families program. values: - 2024-10-01: 0.5 + 2011-10-01: 0.5 metadata: unit: /1 @@ -10,5 +10,7 @@ metadata: reference: - title: 16 Del. Admin. Code SS 4000-4008.1.1 Step 3 TANF GRANT COMPUTATION href: https://www.law.cornell.edu/regulations/delaware/16-Del-Admin-Code-SS-4000-4008 + - title: Delaware TANF State Plan 2011 - Exhibit 1 and Exhibit 2 + href: https://dhss.delaware.gov/wp-content/uploads/sites/11/dss/pdf/tanf_ffy2012_stateplan.pdf#page=7 - title: Delaware TANF State Plan 2017 - Exhibit 1 and Exhibit 2 href: https://dhss.delaware.gov/wp-content/uploads/sites/11/dss/pdf/detanfstateplan2017.pdf#page=7 diff --git a/policyengine_us/parameters/gov/states/mo/dss/tanf/minimum_payment.yaml b/policyengine_us/parameters/gov/states/mo/dss/tanf/minimum_payment.yaml index 758787a62b2..546e356614e 100644 --- a/policyengine_us/parameters/gov/states/mo/dss/tanf/minimum_payment.yaml +++ b/policyengine_us/parameters/gov/states/mo/dss/tanf/minimum_payment.yaml @@ -1,7 +1,8 @@ description: Missouri does not issue TANF payments below this amount. values: - 2024-01-01: 10 + # Rule originated April 22, 1948 with AFDC; carried forward to TANF + 2002-01-01: 10 metadata: unit: currency-USD diff --git a/policyengine_us/parameters/gov/states/pa/dhs/tanf/income/deductions/work_expense/additional.yaml b/policyengine_us/parameters/gov/states/pa/dhs/tanf/income/deductions/work_expense/additional.yaml deleted file mode 100644 index 70ba7de905e..00000000000 --- a/policyengine_us/parameters/gov/states/pa/dhs/tanf/income/deductions/work_expense/additional.yaml +++ /dev/null @@ -1,15 +0,0 @@ -description: Pennsylvania deducts this additional amount for work expenses under the Temporary Assistance for Needy Families program. -# Administrative policy effective September 2020. Not codified in PA Code; documented in state plan and handbook. - -values: - 2020-09-26: 200 - -metadata: - unit: currency-USD - period: month - label: Pennsylvania TANF additional work expense deduction - reference: - - title: PA DHS TANF State Plan 2024 - href: https://www.pa.gov/content/dam/copapwp-pagov/en/dhs/documents/services/assistance/documents/tanf/tanf-state-plan-effective-october-1-2024.pdf#page=13 - - title: PA DHS Cash Assistance Handbook Section 168.22, Work Expense Deduction - href: http://services.dpw.state.pa.us/oimpolicymanuals/cash/index.htm#t=160_Income_Deductions%2F160_2_TANF_Earned_Income_Deductions.htm%23160.21_TANF_Earned_Income_Disregard diff --git a/policyengine_us/parameters/gov/states/pa/dhs/tanf/income/work_expense/deduction.yaml b/policyengine_us/parameters/gov/states/pa/dhs/tanf/income/work_expense/deduction.yaml new file mode 100644 index 00000000000..46c93b7f746 --- /dev/null +++ b/policyengine_us/parameters/gov/states/pa/dhs/tanf/income/work_expense/deduction.yaml @@ -0,0 +1,16 @@ +description: Pennsylvania deducts this amount from countable earned income for work expenses under the Temporary Assistance for Needy Families program. +# Work Expense Deduction (WED) - applied after 50% earned income disregard +# Replaced the Work Expense Reimbursement (WER) in September 2020 + +values: + 2020-10-01: 200 + +metadata: + unit: currency-USD + period: month + label: Pennsylvania TANF work expense deduction amount + reference: + - title: PA DHS TANF State Plan 2024 + href: https://www.pa.gov/content/dam/copapwp-pagov/en/dhs/documents/services/assistance/documents/tanf/tanf-state-plan-effective-october-1-2024.pdf#page=13 + - title: PA DHS Cash Assistance Handbook Section 160.22, Work Expense Deduction + href: http://services.dpw.state.pa.us/oimpolicymanuals/cash/index.htm#t=160_Income_Deductions%2F160_2_TANF_Earned_Income_Deductions.htm diff --git a/policyengine_us/parameters/gov/states/pa/dhs/tanf/income/work_expense/reimbursement.yaml b/policyengine_us/parameters/gov/states/pa/dhs/tanf/income/work_expense/reimbursement.yaml new file mode 100644 index 00000000000..c7ed5455ad3 --- /dev/null +++ b/policyengine_us/parameters/gov/states/pa/dhs/tanf/income/work_expense/reimbursement.yaml @@ -0,0 +1,14 @@ +description: Pennsylvania provides this amount as a work expense reimbursement under the Temporary Assistance for Needy Families program. +# Work Expense Reimbursement (WER) - flat bonus added to TANF grant +# Active March 2009 to September 2020, then replaced by Work Expense Deduction (WED) + +values: + 2009-04-01: 50 + +metadata: + unit: currency-USD + period: month + label: Pennsylvania TANF work expense reimbursement amount + reference: + - title: PA DHS Cash Assistance Handbook Section 137.4, Work Expense Reimbursement + href: http://services.dpw.state.pa.us/oimpolicymanuals/cash/137_Cash_Initiatives/137.4_Work_Expense_Reimbursement.htm diff --git a/policyengine_us/parameters/gov/states/pa/dhs/tanf/income/work_expense/uses_deduction.yaml b/policyengine_us/parameters/gov/states/pa/dhs/tanf/income/work_expense/uses_deduction.yaml new file mode 100644 index 00000000000..6a2ea22315e --- /dev/null +++ b/policyengine_us/parameters/gov/states/pa/dhs/tanf/income/work_expense/uses_deduction.yaml @@ -0,0 +1,17 @@ +description: Pennsylvania uses a work expense deduction (true) or reimbursement (false) under the Temporary Assistance for Needy Families program. +# Before 2020: Work Expense Reimbursement (WER) - $50/month added to benefit +# After 2020: Work Expense Deduction (WED) - $200/month deducted from income + +values: + 2009-04-01: false + 2020-10-01: true + +metadata: + unit: bool + period: month + label: Pennsylvania TANF uses work expense deduction + reference: + - title: PA DHS Cash Assistance Handbook Section 137.4, Work Expense Reimbursement + href: http://services.dpw.state.pa.us/oimpolicymanuals/cash/137_Cash_Initiatives/137.4_Work_Expense_Reimbursement.htm + - title: PA DHS TANF State Plan 2024, Work Expense Deduction + href: https://www.pa.gov/content/dam/copapwp-pagov/en/dhs/documents/services/assistance/documents/tanf/tanf-state-plan-effective-october-1-2024.pdf#page=13 diff --git a/policyengine_us/parameters/gov/states/ri/dhs/works/income/dependent_care/amount.yaml b/policyengine_us/parameters/gov/states/ri/dhs/works/income/dependent_care/amount.yaml index fdaaecf3968..4039add258c 100644 --- a/policyengine_us/parameters/gov/states/ri/dhs/works/income/dependent_care/amount.yaml +++ b/policyengine_us/parameters/gov/states/ri/dhs/works/income/dependent_care/amount.yaml @@ -9,15 +9,18 @@ metadata: reference: - title: 218-RICR-20-00-2.15.5(B)(2) Dependent Care Deduction href: https://www.law.cornell.edu/regulations/rhode-island/218-RICR-20-00-2.15 + - title: R.I. Gen. Laws Chapter 40-5.2 - Rhode Island Works Act of 2008 + href: http://webserver.rilin.state.ri.us/Statutes/TITLE40/40-5.2/INDEX.htm - title: Rhode Island Works Program Eligibility href: https://dhs.ri.gov/programs-and-services/ri-works-program/eligibility-how-apply brackets: + # Rhode Island Works established July 1, 2008; amounts based on federal SNAP limits - threshold: - 2019-01-01: 0 + 2008-07-01: 0 amount: - 2019-01-01: 200 + 2008-07-01: 200 - threshold: - 2019-01-01: 2 + 2008-07-01: 2 amount: - 2019-01-01: 175 + 2008-07-01: 175 diff --git a/policyengine_us/parameters/gov/states/sd/dss/tanf/payment_standard/max_table_size.yaml b/policyengine_us/parameters/gov/states/sd/dss/tanf/payment_standard/max_table_size.yaml index 483a8786b77..25a730106bc 100644 --- a/policyengine_us/parameters/gov/states/sd/dss/tanf/payment_standard/max_table_size.yaml +++ b/policyengine_us/parameters/gov/states/sd/dss/tanf/payment_standard/max_table_size.yaml @@ -1,12 +1,14 @@ description: South Dakota uses this amount as the maximum family size in the payment standard table under the Temporary Assistance for Needy Families program. values: - 2023-07-01: 12 + 2016-09-01: 12 metadata: unit: person period: month label: South Dakota TANF maximum table family size reference: + - title: ARSD 67:10:05:03 - Payment Standards (2016) + href: https://sdlegislature.gov/api/Rules/Archived/10994.pdf#page=1 - title: ARSD 67:10:05:03 - Payment Standards href: https://sdlegislature.gov/Rules/Administrative/67:10:05:03 diff --git a/policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/income/pa_tanf_earned_income_after_deductions_person.yaml b/policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/income/pa_tanf_earned_income_after_deductions_person.yaml index f390aa7555d..3f4cad77ca4 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/income/pa_tanf_earned_income_after_deductions_person.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/income/pa_tanf_earned_income_after_deductions_person.yaml @@ -79,3 +79,46 @@ # Step 1: $250 × 50% = $125 (EID: keep 50%) # Step 2: $125 - $200 = -$75, clipped to 0 (WED) pa_tanf_earned_income_after_deductions_person: 0 + +# Work Expense Reimbursement (WER) era tests - before Sept 2020 +# In WER era, no $200 WED deduction is applied + +- name: Case 8, WER era, low earnings, enrolled recipient, no WED. + period: 2019-01 + input: + employment_income_before_lsr: 12_000 + is_tanf_enrolled: true + state_code: PA + output: + # Monthly: $12,000/12 = $1,000 + # Step 1: $1,000 × 50% = $500 (EID: keep 50%) + # Step 2: No WED in WER era (pre-2020) + # Countable: $500 + pa_tanf_earned_income_after_deductions_person: 500 + +- name: Case 9, WER era, high earnings, enrolled recipient, no WED. + period: 2019-01 + input: + employment_income_before_lsr: 36_000 + is_tanf_enrolled: true + state_code: PA + output: + # Monthly: $36,000/12 = $3,000 + # Step 1: $3,000 × 50% = $1,500 (EID: keep 50%) + # Step 2: No WED in WER era (pre-2020) + # Countable: $1,500 + pa_tanf_earned_income_after_deductions_person: 1_500 + +- name: Case 10, WER era, deductions would have zeroed income in WED era. + period: 2019-01 + input: + employment_income_before_lsr: 2_400 + is_tanf_enrolled: true + state_code: PA + output: + # Monthly: $2,400/12 = $200 + # Step 1: $200 × 50% = $100 (EID: keep 50%) + # Step 2: No WED in WER era + # In WED era this would be: $100 - $200 = 0 + # In WER era: $100 (no deduction) + pa_tanf_earned_income_after_deductions_person: 100 diff --git a/policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/integration.yaml index 0c77b4b143f..3104d91b042 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/integration.yaml @@ -384,3 +384,101 @@ pa_tanf_maximum_benefit: 403 pa_tanf_countable_income: 550 pa_tanf: 0 + +# Work Expense Reimbursement (WER) era integration tests - before Sept 2020 +# WER: $50 bonus added to benefit (not income deduction) +# WED: $200 deducted from income (not bonus) + +- name: Case 14, WER era, family with earned income gets $50 bonus. + period: 2019-01 + input: + people: + person1: + age: 35 + employment_income_before_lsr: 6_960 + person2: + age: 8 + person3: + age: 5 + spm_units: + spm_unit: + members: [person1, person2, person3] + is_tanf_enrolled: true + households: + household: + members: [person1, person2, person3] + state_code: PA + output: + # Family of 3: FSA = $403/month (same as 2024) + # Person1 monthly: $6,960/12 = $580 + # WER era: Only 50% EID applied, no $200 WED + # $580 × 50% = $290 countable + # Base benefit: $403 - $290 = $113 + # WER bonus: +$50 (family has earned income) + # Total benefit: $113 + $50 = $163 + pa_tanf_maximum_benefit: 403 + pa_tanf_countable_income: 290 + pa_tanf: 163 + +- name: Case 15, WER era vs WED era comparison, same family. + period: 2024-01 + input: + people: + person1: + age: 35 + employment_income_before_lsr: 6_960 + person2: + age: 8 + person3: + age: 5 + spm_units: + spm_unit: + members: [person1, person2, person3] + is_tanf_enrolled: true + households: + household: + members: [person1, person2, person3] + state_code: PA + output: + # Same family as Case 14 but in WED era (2024) + # Family of 3: FSA = $403/month + # Person1 monthly: $6,960/12 = $580 + # WED era: 50% EID + $200 WED deduction + # $580 × 50% = $290; $290 - $200 = $90 countable + # Benefit: $403 - $90 = $313 + # No WER bonus in WED era + # WED era benefit ($313) > WER era benefit ($163) by $150 + pa_tanf_maximum_benefit: 403 + pa_tanf_countable_income: 90 + pa_tanf: 313 + +- name: Case 16, WER era, no earned income, no bonus. + period: 2019-01 + input: + people: + person1: + age: 45 + employment_income_before_lsr: 0 + social_security: 2_400 + person2: + age: 10 + person3: + age: 7 + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: PA + output: + # Family of 3: FSA = $403/month + # No earned income, only unearned (SS) + # Unearned monthly: $2,400/12 = $200 + # No EID/WED for unearned income + # Countable: $200 + # Benefit: $403 - $200 = $203 + # No WER bonus (no earned income) + pa_tanf_maximum_benefit: 403 + pa_tanf_countable_income: 200 + pa_tanf: 203 diff --git a/policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/pa_tanf.yaml b/policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/pa_tanf.yaml index ce2ed0f377a..9d40feb12d4 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/pa_tanf.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/pa_tanf.yaml @@ -51,3 +51,75 @@ pa_tanf_eligible: true output: pa_tanf: 636 + +# Work Expense Reimbursement (WER) era tests - before Sept 2020 +# WER adds $50 bonus to benefit for families with earned income + +- name: Case 7, WER era, family with earned income gets $50 bonus. + period: 2019-01 + input: + people: + person1: + age: 30 + tanf_gross_earned_income: 500 + spm_units: + spm_unit: + members: [person1] + pa_tanf_maximum_benefit: 316 + pa_tanf_countable_income: 100 + pa_tanf_eligible: true + households: + household: + members: [person1] + state_code: PA + output: + # Base grant: $316 - $100 = $216 + # WER bonus: $50 (family has earned income) + # Total: $216 + $50 = $266 + pa_tanf: 266 + +- name: Case 8, WER era, family without earned income, no bonus. + period: 2019-01 + input: + people: + person1: + age: 30 + tanf_gross_earned_income: 0 + spm_units: + spm_unit: + members: [person1] + pa_tanf_maximum_benefit: 316 + pa_tanf_countable_income: 100 + pa_tanf_eligible: true + households: + household: + members: [person1] + state_code: PA + output: + # Base grant: $316 - $100 = $216 + # No WER bonus (no earned income) + # Total: $216 + pa_tanf: 216 + +- name: Case 9, WED era, family with earned income, no bonus. + period: 2024-01 + input: + people: + person1: + age: 30 + tanf_gross_earned_income: 500 + spm_units: + spm_unit: + members: [person1] + pa_tanf_maximum_benefit: 316 + pa_tanf_countable_income: 100 + pa_tanf_eligible: true + households: + household: + members: [person1] + state_code: PA + output: + # Base grant: $316 - $100 = $216 + # No WER bonus in WED era (2024) + # Total: $216 + pa_tanf: 216 diff --git a/policyengine_us/variables/gov/states/pa/dhs/tanf/income/pa_tanf_earned_income_after_deductions_person.py b/policyengine_us/variables/gov/states/pa/dhs/tanf/income/pa_tanf_earned_income_after_deductions_person.py index 1814259ff44..82f22f30b1a 100644 --- a/policyengine_us/variables/gov/states/pa/dhs/tanf/income/pa_tanf_earned_income_after_deductions_person.py +++ b/policyengine_us/variables/gov/states/pa/dhs/tanf/income/pa_tanf_earned_income_after_deductions_person.py @@ -14,14 +14,25 @@ class pa_tanf_earned_income_after_deductions_person(Variable): ) def formula(person, period, parameters): - p = parameters(period).gov.states.pa.dhs.tanf.income.deductions + p = parameters(period).gov.states.pa.dhs.tanf.income gross_earned = person("tanf_gross_earned_income", period) disregard_eligible = person.spm_unit( "pa_tanf_disregard_eligible", period ) - after_eid = gross_earned * (1 - p.earned_income_disregard.percentage) - after_wed = max_(after_eid - p.work_expense.additional, 0) + # Apply 50% earned income disregard + after_eid = gross_earned * ( + 1 - p.deductions.earned_income_disregard.percentage + ) + + # Apply Work Expense Deduction (WED) only when in effect (post-2020) + # Before 2020, Work Expense Reimbursement (WER) was used instead (added to benefit) + wed_amount = where( + p.work_expense.uses_deduction, + p.work_expense.deduction, + 0, + ) + after_wed = max_(after_eid - wed_amount, 0) return where(disregard_eligible, after_wed, gross_earned) diff --git a/policyengine_us/variables/gov/states/pa/dhs/tanf/pa_tanf.py b/policyengine_us/variables/gov/states/pa/dhs/tanf/pa_tanf.py index 0b00b0aa03a..3ca14aa5904 100644 --- a/policyengine_us/variables/gov/states/pa/dhs/tanf/pa_tanf.py +++ b/policyengine_us/variables/gov/states/pa/dhs/tanf/pa_tanf.py @@ -9,11 +9,28 @@ class pa_tanf(Variable): definition_period = MONTH defined_for = "pa_tanf_eligible" reference = ( - "https://www.pa.gov/agencies/dhs/resources/cash-assistance/tanf" + "https://www.pa.gov/agencies/dhs/resources/cash-assistance/tanf", + "http://services.dpw.state.pa.us/oimpolicymanuals/cash/137_Cash_Initiatives/137.4_Work_Expense_Reimbursement.htm", ) def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.pa.dhs.tanf.income.work_expense + maximum_benefit = spm_unit("pa_tanf_maximum_benefit", period) countable_income = spm_unit("pa_tanf_countable_income", period) + base_grant = max_(maximum_benefit - countable_income, 0) + + # Work Expense Reimbursement (WER): $50/month bonus for families with earned income + # Active 2009-2020, before Work Expense Deduction (WED) replaced it + gross_earned_income = add( + spm_unit, period, ["tanf_gross_earned_income"] + ) + has_earned_income = gross_earned_income > 0 + uses_wer = p.uses_deduction == False + wer_amount = where( + uses_wer & has_earned_income, + p.reimbursement, + 0, + ) - return max_(maximum_benefit - countable_income, 0) + return base_grant + wer_amount