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
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_snapis SPMUnit,receives_wicis 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
gov/usda/school_meals/categorical_eligibility.yamltanfreceives_tanfmeets_school_meal_categorical_eligibility(bool, SPMUnit, YEAR,adds)gov/fcc/lifeline/categorical_eligibility.yamlssireceives_ssiis_lifeline_eligible,is_acp_eligible(add(spm_unit, ...))gov/fcc/lifeline/tribal_categorical_eligibility.yamltanfreceives_tanfis_lifeline_eligible,is_acp_eligible(tribal branch)gov/ed/pell_grant/efc/simplified/benefits.yamltanf,ssipell_grant_simplified_formula_applies(add(tax_unit, ...) > 0)gov/states/tx/dart/qualifying_programs.yamltanfreceives_tanftx_dart_reduced_fare_program_eligible(bool, Person,adds)gov/states/il/dceo/ihwap/eligibility/categorical_eligibility.yamlssireceives_ssiil_ihwap_categorically_eligible(bool, SPMUnit, YEAR,adds)gov/states/dc/dhs/power/disqualifying_benefits.yamlssireceives_ssidc_power_has_disqualifying_benefits(bool, SPMUnit, YEAR,adds)DC POWER runs the opposite direction
disqualifying_benefitsis 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_tanfis_tanf_enrolledis defined asreturn spm_unit("receives_tanf", period). Any list that already carriesis_tanf_enrolled(or a state equivalent such asis_tanf_non_cash_eligible) is already covered, and addingreceives_tanfthere would be redundant. Verify per list.Already correct — no change needed
gov/usda/snap/categorical_eligibility.yaml— the consumermeets_snap_categorical_eligibilityhas a formula that ORs both arms explicitly, including the all-members SSI rule (spm_unit.all(receives_ssi)) andspm_unit("receives_tanf", period).gov/states/ma/dot/mbta/.../applicable_programs.yaml— uses the MA-specificma_eaedcandma_tafdcrather thantanf. 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(unitcurrency-USD), and thehousehold_benefits/cbo_means_tested_transfersreporting aggregates.Tasks
receives_ssito four lists andreceives_tanfto four, minus any already covered byis_tanf_enrolled