PolicyEngine / PolicyEngine/policyengine-us

commodity_supplemental_food_program pays every computed-eligible person — no take-up gate exists; same phantom class as #9192

Open
#9,260 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

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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.