Fixed two critical issues preventing forecast data from being cloned:
1. **Missing batch_name field**: The fixture uses `batch_id` but the
PredictionBatch model requires `batch_name` (NOT NULL constraint).
Added field mapping to handle batch_id -> batch_name conversion.
2. **UUID type mismatch**: The fixture's `product_id` is a string but
the Forecast model expects `inventory_product_id` as UUID type.
Added conversion from string to UUID.
3. **Field mappings added**:
- batch_id -> batch_name
- total_forecasts -> total_products
- created_at -> requested_at (fallback)
- Calculated completed_products from status
These fixes enable the forecasting service to successfully clone all
28 forecasts from the fixture file, unlocking demand forecasting
AI insights in demo sessions.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Root Causes Fixed:
1. BatchForecastResponse schema mismatch in forecasting service
- Changed 'batch_id' to 'id' (required field name)
- Changed 'products_processed' to 'total_products'
- Changed 'success' to 'status' with "completed" value
- Changed 'message' to 'error_message'
- Added all required fields: batch_name, completed_products, failed_products,
requested_at, completed_at, processing_time_ms, forecasts
- This was causing "11 validation errors for BatchForecastResponse"
which made the forecast service return None, triggering saga failure
2. Missing pandas dependency in orchestrator service
- Added pandas==2.2.2 and numpy==1.26.4 to requirements.txt
- Fixes "No module named 'pandas'" warning when loading AI enhancement
These issues prevented the orchestrator from completing Step 3 (generate_forecasts)
in the daily workflow, causing the entire saga to fail and compensate.