Skip to content

Categorical-eligibility parameter lists omit receives_ssi and receives_tanf #9251

Description

@hua7450

Summary

Same defect as #9247, for the other two reported-receipt flags. Categorical-eligibility parameter lists reference the modeled amounts (ssi, tanf) but omit the reported-receipt bare inputs (receives_ssi, receives_tanf). A household that reports receiving SSI or TANF but whose modeled amount is $0 is dropped from categorical eligibility in seven programs.

Companion to #9247 / #9248 (SNAP and WIC). Should be a separate PR.

Mechanism

  • receives_ssi (variables/gov/ssa/ssi/receives_ssi.py) is a bare input: bool, Person, MONTH, no formula.
  • receives_tanf (variables/gov/hhs/tanf/cash/receives_tanf.py) is a bare input: bool, SPMUnit, MONTH, no formula.

Note the entities are flipped relative to the SNAP/WIC pair (receives_snap is SPMUnit, receives_wic is Person).

The Python side is already well covered — roughly 50 formulas OR the two arms, including meets_snap_categorical_eligibility, is_head_start_categorically_eligible, the Medicaid category variables, and most state TANF/SSP/CCAP eligibility variables. The gap is confined to parameter-driven lists.

Lists needing a receipt flag

Parameter list Line Has Add Consumer
gov/usda/school_meals/categorical_eligibility.yaml 6 tanf receives_tanf meets_school_meal_categorical_eligibility (bool, SPMUnit, YEAR, adds)
gov/fcc/lifeline/categorical_eligibility.yaml 6 ssi receives_ssi is_lifeline_eligible, is_acp_eligible (add(spm_unit, ...))
gov/fcc/lifeline/tribal_categorical_eligibility.yaml 6 tanf receives_tanf is_lifeline_eligible, is_acp_eligible (tribal branch)
gov/ed/pell_grant/efc/simplified/benefits.yaml 6, 9 tanf, ssi both pell_grant_simplified_formula_applies (add(tax_unit, ...) > 0)
gov/states/tx/dart/qualifying_programs.yaml 9 tanf receives_tanf tx_dart_reduced_fare_program_eligible (bool, Person, adds)
gov/states/il/dceo/ihwap/eligibility/categorical_eligibility.yaml 5 ssi receives_ssi il_ihwap_categorically_eligible (bool, SPMUnit, YEAR, adds)
gov/states/dc/dhs/power/disqualifying_benefits.yaml 5 ssi receives_ssi dc_power_has_disqualifying_benefits (bool, SPMUnit, YEAR, adds)

DC POWER runs the opposite direction

disqualifying_benefits is a disqualifying list, so the missing flag makes the model too generous — a household reporting SSI is not disqualified from POWER. Same one-line fix, opposite sign, and worth calling out in review so nobody reads it as a widening.

Check before adding receives_tanf

is_tanf_enrolled is defined as return spm_unit("receives_tanf", period). Any list that already carries is_tanf_enrolled (or a state equivalent such as is_tanf_non_cash_eligible) is already covered, and adding receives_tanf there would be redundant. Verify per list.

Already correct — no change needed

  • gov/usda/snap/categorical_eligibility.yaml — the consumer meets_snap_categorical_eligibility has a formula that ORs both arms explicitly, including the all-members SSI rule (spm_unit.all(receives_ssi)) and spm_unit("receives_tanf", period).
  • gov/states/ma/dot/mbta/.../applicable_programs.yaml — uses the MA-specific ma_eaedc and ma_tafdc rather than tanf. Whether those need their own receipt flags is a separate question.

Out of scope

Lists that sum SSI/TANF as dollars, where a bool would add $1 of phantom income — the HUD, SNAP, school meals, and WIC income-source lists, the many state CCAP/CCDF countable-income lists, gov/states/mo/tax/income/credits/property_tax/public_assistance_types.yaml (unit currency-USD), and the household_benefits / cbo_means_tested_transfers reporting aggregates.

Tasks

  • Add receives_ssi to four lists and receives_tanf to four, minus any already covered by is_tanf_enrolled
  • Tests for the reported-receipt-with-$0-modeled-amount path in each program, including the DC POWER disqualification case
  • Check whether any partner contract test covers the affected programs

Metadata

Metadata

Assignees

No one assigned

    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