Skip to content

Categorical-eligibility parameter lists omit receives_snap and receives_wic #9247

Description

@hua7450

Summary

Parameter-driven categorical-eligibility lists reference the modeled benefit amount (snap, wic) but omit the reported-receipt inputs (receives_snap, receives_wic). Formulas that hardcode the check consistently OR the two arms; the parameter lists do not. Households that report receiving SNAP or WIC but whose modeled amount is $0 are therefore dropped from categorical eligibility in those programs.

Mechanism

  • receives_snap (variables/gov/usda/snap/receives_snap.py) is a bare input: bool, SPMUnit, MONTH, no formula — "reported to receive SNAP".
  • snap (variables/gov/usda/snap/snap.py) is the modeled allotment, defined_for = "takes_up_snap_if_eligible".
  • Same split for WIC: receives_wic is a bare input (bool, Person, MONTH); wic is defined_for = "takes_up_wic_if_eligible".

So snap == 0 / wic == 0 for a reporting household whenever the takeup draw is negative, income lands just over the limit, or member composition makes it ineligible. Formulas like is_head_start_categorically_eligible.py:26-31, meets_wic_categorical_eligibility.py:16-17, and medicaid_community_engagement_pass_through_eligible.py:31-32 handle this by ORing snap > 0 with receives_snap. The parameter lists carry only the amount variable.

Precedent for putting a receipt flag in a parameter list already exists: receives_medicaid appears in parameters/gov/aca/qualifying_non_marketplace_health_coverage.yaml:6 and parameters/gov/hhs/chip/disqualifying_health_coverage.yaml:7.

Lists needing receives_snap

File Line Consumer Aggregation
parameters/gov/usda/school_meals/categorical_eligibility.yaml 5 meets_school_meal_categorical_eligibility adds =, SPMUnit
parameters/gov/fcc/lifeline/categorical_eligibility.yaml 5 is_lifeline_eligible, is_acp_eligible add(spm_unit, ...)
parameters/gov/states/ma/dot/mbta/income_eligible_reduced_fares/applicable_programs.yaml 6 ma_mbta_enrolled_in_applicable_programs adds =
parameters/gov/states/ca/cpuc/care/eligibility/categorical.yaml 6 ca_care_categorically_eligible add(household, ...) > 0
parameters/gov/states/tx/dart/qualifying_programs.yaml 8 tx_dart_reduced_fare_program_eligible adds =, Person
parameters/gov/ed/pell_grant/efc/simplified/benefits.yaml 4 pell_grant_simplified_formula_applies add(tax_unit, ...) > 0

Lists needing receives_wic

File Line Consumer Aggregation
parameters/gov/fcc/acp/categorical_eligibility.yaml 11 is_acp_eligible add(spm_unit, period, [program])
parameters/gov/states/ca/cpuc/care/eligibility/categorical.yaml 5 ca_care_categorically_eligible add(household, ...) > 0
parameters/gov/states/tx/dart/qualifying_programs.yaml 7 tx_dart_reduced_fare_program_eligible adds =, Person
parameters/gov/ed/pell_grant/efc/simplified/benefits.yaml 7 pell_grant_simplified_formula_applies add(tax_unit, ...) > 0

Entity aggregation was checked for each: receives_wic is Person-entity and every consumer aggregates person → SPMUnit / Household / TaxUnit, so the sums compose correctly. All consumers are YEAR-defined while both receipt flags are MONTH, so add over a year sums up to 12 monthly bools; every consumer either thresholds with > 0 or casts into a bool variable, so the result is correct in all cases.

The tx_dart_reduced_fare_program_eligible.py docstring already describes the list as "(SNAP, Medicaid, Medicare, CHIP, TANF, WIC, etc.)", indicating receipt was the intent.

Out of scope — do not change

These lists sum dollars, so adding a bool would contribute $1 of phantom income:

  • parameters/gov/states/ca/cpuc/income_sources.yaml:31-32 (SNAP and WIC as counted income for CARE/FERA)
  • parameters/gov/local/ca/la/dwp/ez_save/income_sources.yaml:20 (SNAP)
  • parameters/gov/states/ma/tax/income/credits/senior_circuit_breaker/income/disallowed_deductions.yaml:8,12 (consumed by ma_scb_total_income)

Reporting aggregates (gov/household/household_benefits.yaml, cbo_means_tested_transfers.yaml, spm_unit_benefits.py) are also out of scope — traced their consumers and no program income test reads them.

Impact

Adding the receipt arm expands categorical eligibility counts in microsimulation for school meals, Lifeline/ACP, CA CARE, MA MBTA, TX DART, and the Pell simplified-EFC formula. Partner contract tests under tests/policy/baseline/partners/** may move; any change to those expected outputs needs partner sign-off before it lands.

Tasks

  • Add receives_snap to the six lists above
  • Add receives_wic to the four lists above
  • YAML tests covering the reported-receipt-with-$0-modeled-amount case for each affected program
  • Assess microsim impact and check whether partner contract tests move

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions