1. **Fix "Sin Plan" (No Production Planned)**:
- Updated BASE_REFERENCE_DATE from Nov 25 to Nov 27 to match current date
- Production batches were being filtered out because they were dated for Nov 25
- The get_todays_batches() method filters for batches scheduled TODAY
2. **Fix "Ver razonamiento" Button Not Opening Modal**:
- Changed handleOpenReasoning() to always emit 'reasoning:show' event
- Previous logic tried to navigate to PO/batch detail pages instead
- Now keeps user on dashboard and shows reasoning modal inline
- Passes all metadata (action_id, po_id, batch_id, reasoning) in event
This ensures production progress shows correctly and users can view
AI reasoning without leaving the dashboard.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Update BASE_REFERENCE_DATE from January 15, 2025 to November 25, 2025
to ensure demo data appears recent and relevant.
This fixes the "11 meses" (11 months) display issue in GlanceableHealthHero
where lastOrchestrationRun was showing an 11-month-old timestamp.
The BASE_REFERENCE_DATE is used by all demo seeding scripts to calculate
relative dates. With the updated reference date, the most recent
orchestration runs will show as "hace 2 días" or similar instead of
"hace 11 meses".
Impact:
- All demo seed data timestamps will be relative to Nov 25, 2025
- Dashboard will show "Last run: 2 days ago" instead of "11 months ago"
- Expiration dates, delivery dates, and other temporal data remain
properly offset from the new reference
Fixes: Issue #6 - "11 meses" data bug
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Convert pipe-separated reasoning codes to structured JSON format for:
- Safety stock calculator (statistical calculations, errors)
- Price forecaster (procurement recommendations, volatility)
- Order optimization (EOQ, tier pricing)
This enables i18n translation of internal calculation reasoning
and provides structured data for frontend AI insights display.
Benefits:
- Consistent with PO/Batch reasoning_data format
- Frontend can translate using same i18n infrastructure
- Structured parameters enable rich UI visualization
- No legacy string parsing needed
Changes:
- safety_stock_calculator.py: Replace reasoning str with reasoning_data dict
- price_forecaster.py: Convert recommendation reasoning to structured format
- optimization.py: Update EOQ and tier pricing to use reasoning_data
Part of complete i18n implementation for AI insights.
This commit removes the last hardcoded English text from reasoning fields
across all backend services, completing the i18n implementation.
Changes by service:
Safety Stock Calculator (safety_stock_calculator.py):
- CALC:STATISTICAL_Z_SCORE - Statistical calculation with Z-score
- CALC:ADVANCED_VARIABILITY - Advanced formula with demand and lead time variability
- CALC:FIXED_PERCENTAGE - Fixed percentage of lead time demand
- All calculation methods now use structured codes with pipe-separated parameters
Price Forecaster (price_forecaster.py):
- PRICE_FORECAST:DECREASE_EXPECTED - Price expected to decrease
- PRICE_FORECAST:INCREASE_EXPECTED - Price expected to increase
- PRICE_FORECAST:HIGH_VOLATILITY - High price volatility detected
- PRICE_FORECAST:BELOW_AVERAGE - Current price below average (buy opportunity)
- PRICE_FORECAST:STABLE - Price stable, normal schedule
- All forecasts include relevant parameters (change_pct, days, etc.)
Optimization Utils (shared/utils/optimization.py):
- EOQ:BASE - Economic Order Quantity base calculation
- EOQ:MOQ_APPLIED - Minimum order quantity constraint applied
- EOQ:MAX_APPLIED - Maximum order quantity constraint applied
- TIER_PRICING:CURRENT_TIER - Current tier pricing
- TIER_PRICING:UPGRADED - Upgraded to higher tier for savings
- All optimizations include calculation parameters
Format: All codes use pattern "CATEGORY:TYPE|param1=value|param2=value"
This allows frontend to parse and translate with parameters while maintaining
technical accuracy for logging and debugging.
Frontend can now translate ALL reasoning codes across the entire system.