Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Round SNAP net income to the nearest dollar per 7 CFR 273.10(e)(1)(ii)(A), and round 30 percent of net income up to the next dollar in the expected food contribution per 7 CFR 273.10(e)(2)(ii)(A)(1).
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,33 @@
output:
meets_tanf_non_cash_net_income_test: true

- name: California household with 100% FPG income would barely meet the net income test.
- name: California household with net income exactly at the standard meets the net income test.
period: 2022
input:
snap_net_income_fpg_ratio: 1
snap_fpg: 12_000
snap_net_income: 12_000
output:
# Monthly standard is ceil(1.0 x 1,000) = 1,000; net income of 1,000
# per month is exactly at it.
meets_tanf_non_cash_net_income_test: true

- name: California household with 101% FPG income would fail the net income test.
- name: California household with net income above the standard fails the net income test.
period: 2022
input:
snap_net_income_fpg_ratio: 1.01
snap_fpg: 12_000
snap_net_income: 12_120
output:
# Net income of 1,010 per month exceeds the 1,000 standard.
meets_tanf_non_cash_net_income_test: false

- name: California household at the rounded-up whole-dollar standard meets the net income test.
period: 2022
input:
# Monthly poverty guideline of 2,220.83 yields a whole-dollar standard
# of ceil(2,220.83) = 2,221, so a rounded net income of exactly 2,221
# still passes; a raw ratio comparison (2,221 / 2,220.83 > 1) would
# wrongly deny this household.
snap_fpg: 26_650
snap_net_income: 26_652
output:
meets_tanf_non_cash_net_income_test: true
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
is_snap_eligible: true
# 1-person allotment on the compliant worker's income; strictly below
# the ~4,466 the unit receives when both members comply.
snap: 1_487.17
snap: 1_477.57

- name: Case 2, over-income household newly qualifies when the earner fails the time limit and income is prorated.
period: 2026
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
output:
snap_unit_size: 3
snap_earned_income: 2_000
snap: 367.7
snap: 367

- name: Case 2, refugee earner is prorated after OBBBA.
period: 2026-01
Expand Down Expand Up @@ -55,7 +55,7 @@
# Counted share: 2 eligible / 3 household members.
# $2,000 x 2/3 = $1,333.33
snap_earned_income: 1_333.33
snap: 288.9
snap: 288

- name: Case 3, undocumented earner in a prorating state.
period: 2026-01
Expand All @@ -81,7 +81,7 @@
output:
snap_unit_size: 2
snap_earned_income: 1_333.33
snap: 288.9
snap: 288

- name: Case 4, undocumented earner in a count-all state.
period: 2026-01
Expand All @@ -108,7 +108,7 @@
snap_unit_size: 2
# Massachusetts counts all of the undocumented member's income.
snap_earned_income: 2_000
snap: 194.4
snap: 194

- name: Case 5, undocumented earner in a hybrid gross-test state.
period: 2026-01
Expand Down Expand Up @@ -136,7 +136,7 @@
# Net side prorated, gross test counts the full income.
snap_earned_income: 1_333.33
snap_gross_test_income: 2_000
snap: 288.9
snap: 288

- name: Case 6, prorated member's shares of shelter and dependent care expenses are not deductible.
period: 2026-01
Expand Down Expand Up @@ -201,7 +201,7 @@
snap_earned_income: 1_000
# The ineligible student's dividend income is excluded entirely.
snap_unearned_income: 0
snap: 120.7
snap: 120

- name: Case 8, California delays OBBBA so refugees remain eligible in January 2026.
period: 2026-01
Expand All @@ -228,7 +228,7 @@
snap_unit_size: 3
snap_income_counted_share: [1, 1, 1]
snap_earned_income: 2_000
snap: 225.2
snap: 225

- name: Case 9, household with no eligible members receives nothing.
period: 2026-01
Expand Down Expand Up @@ -277,8 +277,8 @@
# excluded under 7 CFR 273.9(c)(7).
snap_earned_income: 2_000
# Net income: $2,000 - $400 earned income deduction - $209 standard
# deduction = $1,391; benefit: $546 - 0.3 x $1,391 = $128.70.
snap: 128.7
# deduction = $1,391; benefit: $546 - $418 (30% of $1,391 rounded up) = $128.
snap: 128

- name: Case 11, prorated member's self-employment income is prorated like employment income.
period: 2026-01
Expand All @@ -305,7 +305,7 @@
snap_unit_size: 2
# $2,000 monthly self-employment income x 2/3, mirroring Case 3.
snap_earned_income: 1_333.33
snap: 288.9
snap: 288

- name: Case 12, prorated member's self-employment loss does not offset other members' income.
period: 2026-01
Expand Down Expand Up @@ -338,8 +338,8 @@
# member's $2,000 monthly income counts in full.
snap_earned_income: 2_000
# Net income: $2,000 - $400 earned income deduction - $209 standard
# deduction = $1,391; benefit: $546 - 0.3 x $1,391 = $128.70.
snap: 128.7
# deduction = $1,391; benefit: $546 - $418 (30% of $1,391 rounded up) = $128.
snap: 128

- name: Case 13, excluded elderly member does not confer the gross income test exemption.
period: 2026-01
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
- name: SNAP net income subtracts deductions
period: 2020
input:
snap_gross_income: 2
snap_deductions: 1
# Use amounts divisible by 12 so the monthly values are whole dollars
# and unaffected by the 7 CFR 273.10(e)(1)(ii)(A) rounding.
snap_gross_income: 24
snap_deductions: 12
output:
snap_net_income: 1
snap_net_income: 12
Original file line number Diff line number Diff line change
Expand Up @@ -90,14 +90,19 @@
snap_net_income: 154
# Step 5 — Family’s Expected Contribution Toward Food:
# 30 percent of the household’s net income ($154) is about $46.
snap_expected_contribution: 154 * 0.3
# (Model note, not CBPP: 7 CFR 273.10(e)(2)(ii)(A)(1) rounds the 30%
# up to the next dollar, so the model returns ceil(46.20) = 47.)
snap_expected_contribution: 47
# Step 6 — SNAP Benefit:
# The maximum benefit in 2022 for a family of three is $658.
# The maximum benefit minus the household contribution ($658 minus $46)
# equals about $612.
snap_max_allotment: 658
# The family’s monthly SNAP benefit is $612.
snap_normal_allotment: 612
# (Model note, not CBPP: with the rounded expected contribution of $47,
# the model returns 658 - 47 = 611; the ~$1 divergence from CBPP's
# arithmetic is the expected effect of the regulatory rounding rule.)
snap_normal_allotment: 611

- name: Test for exclude child income, same as case 1 but adding income to one child.
period: 2022-01
Expand Down
17 changes: 10 additions & 7 deletions policyengine_us/tests/policy/baseline/gov/usda/snap/snap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@

- name: North Carolina 2025, yearly integration test
period: 2025
absolute_error_margin: 0.3
absolute_error_margin: 0.01
input:
people:
person1:
Expand All @@ -58,7 +58,8 @@
# due to higher federal poverty guidelines
snap_self_employment_income_after_expense_deduction: 0
snap_self_employment_expense_deduction: 0
snap: 71.75
# Three months at the FY2026 minimum allotment of $24 (Oct-Dec).
snap: 72

- name: Self-employment income deduction integration test
period: 2025
Expand Down Expand Up @@ -87,8 +88,10 @@
snap_deductions: 0
snap_earned_income: 5_000
snap_gross_income: 5_000
snap_net_income: 5_000
snap: 2_024.40
# Monthly net income of 416.67 rounds to 417 per
# 7 CFR 273.10(e)(1)(ii)(A), so the annual value is 12 x 417.
snap_net_income: 5_004
snap: 2_010

- name: Counterfactual test, self-employment income deduction allowed
period: 2025
Expand Down Expand Up @@ -196,7 +199,7 @@
snap_income_counted_share: [1, 0.5]
snap_earned_income: 500
snap_gross_income: 500
snap: 230.40
snap: 230

- name: Case 7, income of an adult sanctioned under the general work requirements is counted in full.
period: 2024-01
Expand Down Expand Up @@ -237,8 +240,8 @@
snap_earned_income: 1_000
snap_gross_income: 1_000
# Net income: $1,000 - $200 earned income deduction - $198 standard
# deduction = $602; benefit: $291 - 0.3 x $602 = $110.40.
snap: 110.40
# deduction = $602; benefit: $291 - $181 (30% of $602 rounded up) = $110.
snap: 110

# Acceptance-criteria integration tests for issue #8862 (person-level SNAP work
# requirements). Period 2024-01 is pre-HR1 (ABAWD band 18-52, dependent-child
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# Categorical eligibility above the issuance-table maximum.
# FY2026 (2025-10-01) contiguous-US values: max allotment 2 persons $546,
# 3 persons $785; standard deduction 1-3 persons $209; earned income
# deduction 20%; minimum allotment round(8% x $298) = $24 for 1-2 persons only.
# The reported TANF grant ($100/month) confers categorical eligibility and is
# counted as unearned income.
- name: Categorically eligible 2-person household above the income limit receives the minimum allotment
period: 2026-01
absolute_error_margin: 0.1
input:
people:
parent:
age: 35
employment_income: 60_000
weekly_hours_worked_before_lsr: 40
child:
age: 8
spm_units:
spm_unit:
members: [parent, child]
tanf: 1_200
housing_cost: 0
tax_units:
tax_unit:
members: [parent, child]
households:
household:
members: [parent, child]
state_code: MO
output:
meets_snap_categorical_eligibility: true
meets_snap_gross_income_test: false
is_snap_eligible: true
# Gross 5,000 + 100 = 5,100; net 5,100 - 1,000 (20%) - 209 = 3,891;
# 546 - 30% x 3,891 < 0, floored to the minimum allotment.
snap_net_income: 3_891
snap_min_allotment: 24
snap_normal_allotment: 24
snap: 24

- name: Categorically eligible 3-person household above the issuance-table maximum receives zero
period: 2026-01
absolute_error_margin: 0.1
input:
people:
parent:
age: 35
employment_income: 60_000
weekly_hours_worked_before_lsr: 40
child1:
age: 8
child2:
age: 4
spm_units:
spm_unit:
members: [parent, child1, child2]
tanf: 1_200
housing_cost: 0
tax_units:
tax_unit:
members: [parent, child1, child2]
households:
household:
members: [parent, child1, child2]
state_code: MO
output:
meets_snap_categorical_eligibility: true
meets_snap_gross_income_test: false
# Still flagged eligible: PE does not convert a zero-benefit 3+ unit
# into a denial (7 CFR 273.10(e)(2)(iii)).
is_snap_eligible: true
# Net income 3,891; 785 - 30% x 3,891 < 0 and no minimum allotment
# applies to households of 3 or more.
snap_net_income: 3_891
snap_min_allotment: 0
snap_normal_allotment: 0
snap: 0

- name: Categorically eligible 3-person household just under the issuance-table maximum receives a small allotment
period: 2026-01
absolute_error_margin: 0.1
input:
people:
parent:
age: 35
employment_income: 40_500
weekly_hours_worked_before_lsr: 40
child1:
age: 8
child2:
age: 4
spm_units:
spm_unit:
members: [parent, child1, child2]
tanf: 1_200
housing_cost: 0
tax_units:
tax_unit:
members: [parent, child1, child2]
households:
household:
members: [parent, child1, child2]
state_code: MO
output:
meets_snap_categorical_eligibility: true
meets_snap_gross_income_test: false
is_snap_eligible: true
# Gross 3,375 + 100 = 3,475; net 3,475 - 675 - 209 = 2,591;
# 30% = 777.30, rounded up to 778 (7 CFR 273.10(e)(2)(ii)(A)(1)); 785 - 778 = 7.
snap_net_income: 2_591
snap_expected_contribution: 778
snap_normal_allotment: 7
snap: 7
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
- name: Family of 4, no member(s) with disabilities, income of 24k/year (Standard Test)
period: 2022
absolute_error_margin: 0.01 # Floating point issue.
input:
people:
person_1:
Expand All @@ -26,11 +25,11 @@
household:
state_group: CONTIGUOUS_US
output:
snap_expected_contribution: (833 * 0.3) * 12
# 30% of the $833 rounded net income is $249.90, rounded up to $250.
snap_expected_contribution: 250 * 12

- name: Family of 4, member(s) with disabilities, income of 24k/year (Standard Test)
period: 2022
absolute_error_margin: 0.01 # Floating point issue.
input:
people:
person_1:
Expand All @@ -57,4 +56,6 @@
household:
state_group: CONTIGUOUS_US
output:
snap_expected_contribution: (428 * 0.3) * 12 # Net income is rounded down each month
# Net income of $428.50 rounds half-up to $429 each month; 30% is
# $128.70, rounded up to $129.
snap_expected_contribution: 129 * 12
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,9 @@
household:
state_group: CONTIGUOUS_US
output:
snap_net_income: 428.5 * 12
# Monthly net income of 428.50 rounds up to 429 per
# 7 CFR 273.10(e)(1)(ii)(A).
snap_net_income: 429 * 12

- name: SNAP child support deduction integration test
period: 2024
Expand Down
Loading
Loading