Skip to content

Expose federal vs. state budgetary impact in compare.py #3481

@MaxGhenis

Description

@MaxGhenis

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

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