Skip to content

Add household impact analysis endpoints #76

@anth-volk

Description

@anth-volk

Summary

Extend the Simulation/Report architecture to support household-level impact analysis, allowing users to run household simulations and compare baseline vs reform scenarios.

Dependencies

Scope

Model Changes

Simulation model:

  • Add SimulationType enum (HOUSEHOLD, ECONOMY)
  • Add simulation_type field with default 'economy'
  • Make dataset_id nullable (was required)
  • Add household_id FK to households
  • Add household_result JSONB column for storing calculation output

Report model:

  • Add report_type field (household_single, household_comparison, economy_single, economy_comparison)

New Endpoints

  • POST /analysis/household-impact - Run household impact analysis
    • If policy_id is None: single run under current law
    • If policy_id is set: comparison (baseline vs reform)
  • GET /analysis/household-impact/{report_id} - Get household impact results

Impact Computation

Support all entity types for both countries:

  • UK: person, benunit, household
  • US: person, tax_unit, spm_unit, family, marital_unit, household

Database

  • Migration: 20260203000002_simulation_household_support.sql

Key Features

  • Deterministic UUIDs for deduplication/caching
  • Reuses existing _calculate_household_uk() and _calculate_household_us() functions
  • Stores results in household_result JSONB on Simulation (not Dataset)

Acceptance Criteria

  • SimulationType enum and simulation_type field added
  • household_id and household_result fields added to Simulation
  • report_type field added to Report
  • POST endpoint creates correct records (single and comparison)
  • GET endpoint returns results with computed impact
  • Deduplication working (same params = same IDs)
  • Tests passing
  • Migration applied successfully

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