Policy Impact Simulator

Methodology & limitations

Back to simulator

Purpose

This project is an educational portfolio demo. It combines a small FastAPI service with a static Next.js UI to show how policy levers can be translated into stylized fiscal and distributional outputs. It does not replicate official Congressional Budget Office, Joint Committee on Taxation, or Treasury revenue estimates.

Model structure

The engine uses versioned baseline magnitudes (receipt shares, GDP scale, stylized quintile tables) loaded from CSVs on the API side. Each request applies your lever deltas to those baselines using transparent formulas implemented in Python (see apps/api/model/scoring.py). Outputs include undiscounted 10-year-style aggregates, a simple GDP level path proxy, and illustrative shares across income quintiles.

Data & vintage

Baseline figures are rounded illustrations informed by public BEA, BLS, and CBO-style ranges. The authoritative notes and intent for each table live in the API repository at apps/api/data/SOURCES.md. Refresh the CSVs when you change coefficients or magnitudes, and bump the model/data version strings so results stay traceable.

Presets

Named presets (TCJA sunset, "Platinum Card" scenario, etc.) are JSON bundles of lever defaults with copy in apps/web/public/presets/scenarios.json and matching bodies from GET /simulate/presets. They are for transparency and UX—not endorsements of any policy.

Known limitations

  • No microsimulation tax calculator or full behavioral response.
  • Distributional splits scale off static shares; they are illustrative, not microdata-based.
  • Regulatory impacts use a single index lever, not rule-level analysis.
  • Tariff and luxury levers are stylized proxies for exploration.