Context
PolicyEngine-US now models federal/state cost attribution for Medicaid and CHIP via medicaid_federal_cost / medicaid_state_cost / chip_federal_cost / chip_state_cost, plus cross-program aggregates federal_benefit_cost / state_benefit_cost. See PolicyEngine/policyengine-us#8075 and #8076.
Today, policyengine_api/endpoints/economy/compare.py::budgetary_impact returns a single scalar:
budgetary_impact = tax_revenue_impact - benefit_spending_impact
This conflates federal and state fiscal effects. A reform that shifts cost between federal and state (e.g., Medicaid expansion rollback, OBBBA SNAP state-match, FMAP changes) currently shows as a single number that doesn't answer the policy question "what does this cost the federal government vs. states?"
Proposed change
Extend budgetary_impact to return:
{
"budgetary_impact": <total>,
"federal_budgetary_impact": <tax_revenue_change - federal_benefit_spending_change>,
"state_budgetary_impact": <state_supplement_change - state_benefit_spending_change>,
...existing keys...
}
Where:
federal_benefit_spending_change comes from aggregating federal_benefit_cost across the microsim (baseline vs. reform)
state_benefit_spending_change from state_benefit_cost
- Tax revenue is overwhelmingly federal (federal income tax, payroll tax); state income taxes attributed to states. If the economy-summary payload already splits
tax_revenue by level, use that; otherwise add per-level aggregates to the economy summary.
Why this matters
CBO-style reform scoring, state budget impact analysis, and any comparative advocacy depend on separating federal and state fiscal effects. The per-program microsim work is done in PE-US; this is the API-layer surface to expose it.
Related
Context
PolicyEngine-US now models federal/state cost attribution for Medicaid and CHIP via
medicaid_federal_cost/medicaid_state_cost/chip_federal_cost/chip_state_cost, plus cross-program aggregatesfederal_benefit_cost/state_benefit_cost. See PolicyEngine/policyengine-us#8075 and #8076.Today,
policyengine_api/endpoints/economy/compare.py::budgetary_impactreturns a single scalar:This conflates federal and state fiscal effects. A reform that shifts cost between federal and state (e.g., Medicaid expansion rollback, OBBBA SNAP state-match, FMAP changes) currently shows as a single number that doesn't answer the policy question "what does this cost the federal government vs. states?"
Proposed change
Extend
budgetary_impactto return:{ "budgetary_impact": <total>, "federal_budgetary_impact": <tax_revenue_change - federal_benefit_spending_change>, "state_budgetary_impact": <state_supplement_change - state_benefit_spending_change>, ...existing keys... }Where:
federal_benefit_spending_changecomes from aggregatingfederal_benefit_costacross the microsim (baseline vs. reform)state_benefit_spending_changefromstate_benefit_costtax_revenueby level, use that; otherwise add per-level aggregates to the economy summary.Why this matters
CBO-style reform scoring, state budget impact analysis, and any comparative advocacy depend on separating federal and state fiscal effects. The per-program microsim work is done in PE-US; this is the API-layer surface to expose it.
Related