PolicyEngine / PolicyEngine/policyengine-us
commodity_supplemental_food_program pays every computed-eligible person — no take-up gate exists; same phantom class as #9192
- Dominant language
- Python
- Stars
- 162
- Forks
- 212
- Avg merge
- 3d 3h
- Merged PRs (30d)
- 97
Description
Surfaced during the #9192 design review (see #9259 for the Head Start fix this parallels).
## Mechanism (verified on current main)
- `commodity_supplemental_food_program` is `defined_for = "commodity_supplemental_food_program_eligible"` with `adds = ["gov.usda.csfp.amount"]` — **there is no take-up flag at all**, so every computed-eligible person receives the per-slot amount on every dataset. Unlike the Head Start/CHIP/WIC class, there is not even a column a data package could seed.
- `gov.usda.csfp.amount` is per-slot cost ÷ actual participation: $531 for 2024 (= $389,000,000 / 731,933 participants, per the parameter's own comments and FNS references).
- Eligibility is age ≥ 60 with income ≤ the FPG limit (WIC-style income), county-restricted only in KS/MO/MA (default county-eligible elsewhere) — a population in the millions, against 731,933 actual national slots, and CSFP is a **caseload-assigned** program (states receive fixed slot allocations), so computed eligibility can never approximate participation.
- `commodity_supplemental_food_program` is in the 2024 bracket of `gov.household.household_benefits`, so the overstated aggregate flows into `household_net_income` exactly like the pre-#9259 Head Start values did.
The certified-data audit behind #9192 did not measure CSFP, so the aggregate overstatement is unquantified here; the mechanism guarantees it is a large multiple of the $389M actual program.
## Options
1. Add a `takes_up_commodity_supplemental_food_program_if_eligible` flag (data-seedable, consistent with the other in-kind programs) — though caseload assignment makes person-level take-up semantics awkward.
2. Move it into the `household_head_start_benefits`-style gated-wrapper treatment (or a future in-kind wrapper) so it stays out of `household_net_income` by default.
3. Both: gate now, add the flag when a defensible participation source exists.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Contributor guide
Research direction
Start by locating the commodity_supplemental_food_program definition and the 2024 gov.household.household_benefits bracket, then compare their treatment with the Head Start, CHIP, and WIC cases referenced in the issue. A maintainer must first choose between a take-up flag, a gated wrapper, or both; done means CSFP no longer pays every computed-eligible person and its household_net_income treatment matches that decision.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100