Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/fix-9984-nh-fanf-recipient-disregard.fixed.md
Original file line number Diff line number Diff line change
@@ -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.
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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:
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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.
Expand All @@ -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:
Expand All @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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)
Expand Down
Loading