PolicyEngine / PolicyEngine/policyengine-us

Decide whether SNAP BBCE limits should follow per-state published chart conventions

Open
#9,255 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
162
Forks
212
Avg merge
3d 3h
Merged PRs (30d)
97

Description

## Summary

`tanf_non_cash_gross_income_limit` returns the exact percentage of the monthly poverty guideline. States publish their BBCE standards as whole dollars, so the model differs from a published chart by up to about $2.

Split out of #9243, which fixes the state-specific poverty-guideline update months. That PR briefly encoded per-state rounding and then removed it — see its "Rounding" section.

## Why the model does not round today

7 CFR 273.9(a)(3) directs that the federal gross and net income standards be divided by 12 and rounded up, and `meets_snap_gross_income_test` implements that. It does not reach the BBCE limit: categorically eligible households under 7 CFR 273.2(j)(2) are exempt from the §273.9 standards, and the BBCE threshold is the income limit of the state's own TANF-funded non-cash benefit. FNS caps it at 200% FPL but prescribes no derivation. Any rounding rule we adopt is therefore a claim about a state's published chart, not about a regulation.

## What states actually publish (one person, 2025 guidelines, 200%)

Exact computation: 15,650 / 12 x 2 = $2,608.33.

| State | Published | Consistent with |
|---|---|---|
| WA | $2,660 (Apr 2026, 2026 guidelines) | exact; the 2026 guideline divides evenly |
| CA, CO, DC | $2,610 | 200% of the whole-dollar guideline ($1,305) |
| AZ | $2,610 (from Mar 2026) | same |
| MA | $2,608 | nearest |
| VA | $2,608 | down |
| IL | $2,608 at 200%, $2,152 at 165% | nearest, both tiers |
| TX | $2,152 at 165% | nearest |
| ME, CT, LA, MN, NH, NJ, OR, VT | $2,609 and equivalents | up |

Two derivations are in play. Most states round the computed limit. California, Colorado, DC, and Arizona instead apply the percentage to the guideline already rounded to a whole dollar -- $1,305 x 2 = $2,610 -- which no rounding of $2,608.33 can reach, so it needs its own step rather than another rounding mode. That is plausibly them reusing the FNS-published 100% net standard, which §273.9(a)(3) rounds up.

## Options

1. **Leave as is.** Claims nothing unverified; never matches a chart exactly.
2. **Per-state conventions.** Conceptually right, since the rounding genuinely is state discretion. Requires a verified chart per state and re-verification as charts are republished. An earlier draft of #9243 implemented this with `rounded_up` / `whole_dollar` / `rounded_down` state lists plus an `fpg_rounded_first_states` list applied before the percentage; that approach worked and can be recovered from the PR history.
3. **One uniform rule.** Simplest, but no rule fits every state, and borrowing §273.9(a)(3)'s round-up would apply a regulation that expressly does not govern this path.

## Evidence needed before option 2

Per-state published charts, at more than one household size (a single size cannot distinguish nearest from up when the cents happen to agree), and the years each convention covers. The figures above are evidenced for FY2026 only.

## Why it may be worth doing

Negligible for the microsimulation: a dollar changes eligibility only for a household whose monthly income lands inside a $1 window. It matters for API partners reconciling PolicyEngine against state charts household by household, where each $1 gap costs a support round-trip. Partner demand is the main argument for option 2.

Contributor guide

Open the contributing guide

Research direction

Start with the tanf_non_cash_gross_income_limit and meets_snap_gross_income_test entry points, then review the Rounding section and history of PR #9243. Gather published charts across states, household sizes, and years before choosing whether to leave the model unchanged or encode conventions. Done means a documented, evidence-backed decision with its scope and verification requirements.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.