diff --git a/changelog.d/fix-9984-nh-fanf-recipient-disregard.fixed.md b/changelog.d/fix-9984-nh-fanf-recipient-disregard.fixed.md new file mode 100644 index 00000000000..2f629fff621 --- /dev/null +++ b/changelog.d/fix-9984-nh-fanf-recipient-disregard.fixed.md @@ -0,0 +1 @@ +Use the 50% earned income disregard for New Hampshire FANF recipients from September 2022 onward, per He-W 654.13(e) and FAM 603.01, instead of the 75% Cliff Effect pilot rate, which applied only to pilot participants who started or moved to full-time work. diff --git a/policyengine_us/parameters/gov/states/nh/dhhs/fanf/income/earned_income_disregard/recipient_rate.yaml b/policyengine_us/parameters/gov/states/nh/dhhs/fanf/income/earned_income_disregard/recipient_rate.yaml index 54a48f9b3aa..11546fe3e0f 100644 --- a/policyengine_us/parameters/gov/states/nh/dhhs/fanf/income/earned_income_disregard/recipient_rate.yaml +++ b/policyengine_us/parameters/gov/states/nh/dhhs/fanf/income/earned_income_disregard/recipient_rate.yaml @@ -1,17 +1,22 @@ description: New Hampshire excludes this share of earnings from countable income for recipients under the Financial Assistance to Needy Families program. - +# The Cliff Effect Initiative's 75% (and 100% for high-demand jobs) earned +# income disregard was a two-year pilot (October 2022 - September 2024) for +# participants who started or moved to full-time work. It did not amend +# He-W 654.13(e), which keeps the 50% rate for recipients, and it is not +# modeled here. values: 1997-02-01: 0.5 - 2022-09-01: 0.75 metadata: unit: /1 period: month label: New Hampshire FANF recipient earned income disregard rate reference: + - title: N.H. Admin. Rules He-W 654.13(e) - Earned Income Disregard for FANF + href: https://gc.nh.gov/rules/state_agencies/he-w600.html - title: FAM 603.01 - Earned Income Disregards (EID) + href: https://www.dhhs.nh.gov/fam_htm/html/603_01_earned_income_disregards_eid_fam.htm + - title: FAM 603.01 - Earned Income Disregards (EID), SR 97-03 href: https://www.dhhs.nh.gov/famar_htm/html/603_01_earned_income_disregards_eid_sr_97-03_02_97_fam_a.htm - title: SR 97-03 Dated 02/97 - TANF Implementation href: https://www.dhhs.nh.gov/sr_htm/html/sr_97-03_dated_02_97.htm - - title: New Hampshire TANF State Plan - Cliff Effect Initiative - href: https://www.dhhs.nh.gov/sites/g/files/ehbemt476/files/documents2/tanf-state-plan.pdf#page=29 diff --git a/policyengine_us/tests/policy/baseline/gov/states/nh/dhhs/fanf/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/nh/dhhs/fanf/integration.yaml index 1d517455639..b477338aa81 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/nh/dhhs/fanf/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/nh/dhhs/fanf/integration.yaml @@ -1,8 +1,8 @@ # Integration tests for NH FANF (Financial Assistance to Needy Families) # Tests the complete benefit calculation pipeline with real-world scenarios # Note: Tests default to applicant status (20% earned income disregard) -# Recipients get 75% disregard per Cliff Effect Initiative (Sept 2022) -# Sources: RSA 167:77-g; FAM 601; FAM 603; SR 97-03; BFA SR 22-28 +# Recipients get a 50% disregard per He-W 654.13(e) +# Sources: RSA 167:77-g; He-W 654.13; FAM 601; FAM 603; SR 97-03; BFA SR 22-28 - name: Case 1, single parent with one child, no income, maximum benefit. period: 2024-01 @@ -158,7 +158,7 @@ # 1,560 - 840 = 720 nh_fanf: 720 -- name: Case 7, recipient with 75 percent earned income disregard. +- name: Case 7, recipient with 50 percent earned income disregard. period: 2024-01 input: people: @@ -177,12 +177,12 @@ members: [person1, person2] state_code: NH output: - # Recipient: 1,000 * 0.25 = 250 - nh_fanf_countable_earned_income: 250 - nh_fanf_countable_income: 250 + # Recipient: 1,000 * 0.50 = 500 + nh_fanf_countable_earned_income: 500 + nh_fanf_countable_income: 500 nh_fanf_eligible: true - # 1,022 - 250 = 772 - nh_fanf: 772 + # 1,022 - 500 = 522 + nh_fanf: 522 - name: Case 8, recipient with higher resource limit. period: 2024-01 @@ -227,15 +227,15 @@ members: [person1, person2] state_code: NH output: - # Recipient: 2,000 * 0.25 = 500 + # Recipient: 2,000 * 0.50 = 1,000 # Child care: $200 - # Countable: 500 - 200 = 300 + # Countable: 1,000 - 200 = 800 nh_fanf_child_care_deduction: 200 - nh_fanf_countable_earned_income: 300 - nh_fanf_countable_income: 300 + nh_fanf_countable_earned_income: 800 + nh_fanf_countable_income: 800 nh_fanf_eligible: true - # 1,022 - 300 = 722 - nh_fanf: 722 + # 1,022 - 800 = 222 + nh_fanf: 222 - name: Case 10, large 8-person household. period: 2024-01 @@ -327,9 +327,9 @@ state_code: NH output: nh_fanf_payment_standard: 1_291 - # Recipient: 200 * 0.25 = 50 + # Recipient: 200 * 0.50 = 100 # Child care (part-time): 2 * $100 = $200 - # Countable: max(50 - 200, 0) = 0 + # Countable: max(100 - 200, 0) = 0 nh_fanf_child_care_deduction: 200 nh_fanf_countable_earned_income: 0 nh_fanf_countable_income: 0 @@ -410,9 +410,65 @@ members: [person1, person2] state_code: NH output: - # Recipient: 1,000 * 0.25 = 250 (75% disregard) - nh_fanf_countable_earned_income: 250 - nh_fanf_countable_income: 250 + # Recipient: 1,000 * 0.50 = 500 (50% disregard) + nh_fanf_countable_earned_income: 500 + nh_fanf_countable_income: 500 nh_fanf_eligible: true - # 1,022 - 250 = 772 (vs 222 for applicant - $550 more benefit!) - nh_fanf: 772 + # 1,022 - 500 = 522 (vs 222 for applicant: $300 more benefit) + nh_fanf: 522 + +- name: Case 16, recipient family of three in 2025, 50 percent disregard. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income_before_lsr: 18_000 # $1,500/month + person2: + age: 5 + person3: + age: 2 + spm_units: + spm_unit: + members: [person1, person2, person3] + is_tanf_enrolled: true + households: + household: + members: [person1, person2, person3] + state_code: NH + output: + # 60% x $26,650 (2025 FPG for 3) / 12 = $1,332.50 + nh_fanf_payment_standard: 1_332.50 + # He-W 654.13(e): 1,500 * 0.50 = 750 + nh_fanf_countable_earned_income: 750 + nh_fanf_income_eligible: true + # 1,332.50 - 750 = 582.50 + nh_fanf: 582.50 + +- name: Case 17, recipient with countable earnings above the payment standard is ineligible. + period: 2025-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income_before_lsr: 32_400 # $2,700/month + person2: + age: 5 + person3: + age: 2 + spm_units: + spm_unit: + members: [person1, person2, person3] + is_tanf_enrolled: true + households: + household: + members: [person1, person2, person3] + state_code: NH + output: + nh_fanf_payment_standard: 1_332.50 + # 2,700 * 0.50 = 1,350 > 1,332.50 + nh_fanf_countable_earned_income: 1_350 + nh_fanf_income_eligible: false + nh_fanf: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/nh/dhhs/fanf/nh_fanf_countable_earned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/nh/dhhs/fanf/nh_fanf_countable_earned_income.yaml index 5fd10457415..1da373d59aa 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/nh/dhhs/fanf/nh_fanf_countable_earned_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/nh/dhhs/fanf/nh_fanf_countable_earned_income.yaml @@ -1,9 +1,11 @@ # Tests for NH FANF countable earned income # NH applies different earned income disregard rates: # - Applicants: 20% disregard (keep 80%) -# - Recipients: 75% disregard (keep 25%) as of Sept 2022 Cliff Effect Initiative +# - Recipients: 50% disregard (keep 50%), He-W 654.13(e) +# (the Cliff Effect Initiative's 75% disregard was a pilot for a subgroup and +# is not modeled) # Child care deduction is also applied to earned income -# Source: SR 97-03; FAM 603.01; BFA SR 22-28 +# Source: He-W 654.13; SR 97-03; FAM 603.01; BFA SR 22-28 - name: Case 1, zero earned income. period: 2024-01 @@ -22,15 +24,15 @@ # Applicant: 1,000 * (1 - 0.20) = 800 nh_fanf_countable_earned_income: 800 -- name: Case 3, recipient with earned income, 75 percent disregard. +- name: Case 3, recipient with earned income, 50 percent disregard. period: 2024-01 input: state_code: NH is_tanf_enrolled: true tanf_gross_earned_income: 1_000 output: - # Recipient: 1,000 * (1 - 0.75) = 250 - nh_fanf_countable_earned_income: 250 + # Recipient: 1,000 * (1 - 0.50) = 500 + nh_fanf_countable_earned_income: 500 - name: Case 4, applicant with child care deduction. period: 2024-01 @@ -75,10 +77,10 @@ members: [person1, person2] state_code: NH output: - # Recipient: 2,000 * (1 - 0.75) = 500 + # Recipient: 2,000 * (1 - 0.50) = 1,000 # Child care: $200 - # Countable: 500 - 200 = 300 - nh_fanf_countable_earned_income: 300 + # Countable: 1,000 - 200 = 800 + nh_fanf_countable_earned_income: 800 - name: Case 6, child care deduction exceeds income, capped at zero. period: 2024-01 @@ -99,9 +101,9 @@ members: [person1, person2] state_code: NH output: - # Recipient: 200 * (1 - 0.75) = 50 + # Recipient: 200 * (1 - 0.50) = 100 # Child care (part-time): $100 - # Countable: max(50 - 100, 0) = 0 + # Countable: max(100 - 100, 0) = 0 nh_fanf_countable_earned_income: 0 - name: Case 7, child care deduction exactly equals after-disregard income. @@ -110,7 +112,7 @@ people: person1: age: 30 - employment_income_before_lsr: 9_600 # $800/month gross + employment_income_before_lsr: 4_800 # $400/month gross (full-time) person2: age: 3 spm_units: @@ -123,7 +125,7 @@ members: [person1, person2] state_code: NH output: - # Recipient: 800 * (1 - 0.75) = 200 + # Recipient: 400 * (1 - 0.50) = 200 # Child care (full-time, under 6): $200 # Countable: 200 - 200 = 0 nh_fanf_countable_earned_income: 0 diff --git a/policyengine_us/variables/gov/states/nh/dhhs/fanf/income/nh_fanf_countable_earned_income.py b/policyengine_us/variables/gov/states/nh/dhhs/fanf/income/nh_fanf_countable_earned_income.py index 3d17be6d325..a20b79b75db 100644 --- a/policyengine_us/variables/gov/states/nh/dhhs/fanf/income/nh_fanf_countable_earned_income.py +++ b/policyengine_us/variables/gov/states/nh/dhhs/fanf/income/nh_fanf_countable_earned_income.py @@ -8,6 +8,7 @@ class nh_fanf_countable_earned_income(Variable): unit = USD definition_period = MONTH reference = ( + "https://gc.nh.gov/rules/state_agencies/he-w600.html", "https://www.dhhs.nh.gov/famar_htm/html/603_01_earned_income_disregards_eid_sr_97-03_02_97_fam_a.htm", "https://www.dhhs.nh.gov/sr_htm/html/sr_97-03_dated_02_97.htm", "https://www.dhhs.nh.gov/sites/g/files/ehbemt476/files/documents2/tanf-state-plan.pdf#page=29", @@ -16,10 +17,12 @@ class nh_fanf_countable_earned_income(Variable): def formula(spm_unit, period, parameters): # NH has different disregard rates for applicants (20%) vs recipients - # Recipients: 50% (1997) → 75% (Sept 2022 Cliff Effect Initiative) - # Note: A 100% disregard exists for high-demand jobs (per NH Workforce - # Innovation Opportunities Act board) with medical benefits offered, - # but this is not implemented due to lack of job classification data. + # (50%), per He-W 654.13(b) and (e). + # Note: The Cliff Effect Initiative's two-year pilot (October 2022 to + # September 2024) gave a 75% disregard to participants who started or + # moved to full-time work, and 100% for high-demand jobs with medical + # benefits. It is not implemented, because the inputs do not identify + # the pilot group or the job classification. p = parameters(period).gov.states.nh.dhhs.fanf.income.earned_income_disregard gross_earned = add(spm_unit, period, ["tanf_gross_earned_income"]) is_enrolled = spm_unit("is_tanf_enrolled", period)