refactor: Unify database migrations into single initial schemas

Consolidated incremental migrations into single unified initial schema files for both procurement and production services. This simplifies database setup and eliminates migration chain complexity.

Changes:
- Procurement: Merged 3 migrations into 001_unified_initial_schema.py
  - Initial schema (20251015_1229)
  - Add supplier_price_list_id (20251030_0737)
  - Add JTBD reasoning fields (20251107)

- Production: Merged 3 migrations into 001_unified_initial_schema.py
  - Initial schema (20251015_1231)
  - Add waste tracking fields (20251023_0900)
  - Add JTBD reasoning fields (20251107)

All new fields (reasoning, consequence, reasoning_data, waste_defect_type, is_ai_assisted, supplier_price_list_id) are now included in the initial schemas from the start.

Updated model files to use deferred() for reasoning fields to prevent breaking queries when running against existing databases.
This commit is contained in:
Claude
2025-11-07 17:35:38 +00:00
parent 436622dc9a
commit 392bfb186f
10 changed files with 398 additions and 469 deletions

View File

@@ -7,6 +7,7 @@ Production models for the production service
from sqlalchemy import Column, String, Integer, Float, DateTime, Boolean, Text, JSON, Enum as SQLEnum
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import deferred
from sqlalchemy.sql import func
from datetime import datetime, timezone
from typing import Dict, Any, Optional
@@ -133,8 +134,9 @@ class ProductionBatch(Base):
cancellation_reason = Column(String(255), nullable=True)
# JTBD Dashboard: Reasoning and context for user transparency
reasoning = Column(Text, nullable=True) # Why this batch was scheduled (e.g., "Based on wedding order #1234")
reasoning_data = Column(JSON, nullable=True) # Structured reasoning data
# Deferred loading to prevent breaking queries when columns don't exist yet
reasoning = deferred(Column(Text, nullable=True)) # Why this batch was scheduled (e.g., "Based on wedding order #1234")
reasoning_data = deferred(Column(JSON, nullable=True)) # Structured reasoning data
# reasoning_data structure: {
# "trigger": "forecast" | "order" | "inventory" | "manual",
# "forecast_id": "uuid",