Initial commit - production deployment
This commit is contained in:
440
services/demo_session/scripts/README.md
Normal file
440
services/demo_session/scripts/README.md
Normal file
@@ -0,0 +1,440 @@
|
||||
# Dashboard Demo Seed Scripts
|
||||
|
||||
Comprehensive demo data seeding scripts for the JTBD-aligned dashboard.
|
||||
|
||||
## 🎯 Purpose
|
||||
|
||||
These scripts create realistic demo data to showcase all dashboard features and user flows:
|
||||
|
||||
- **Time-based Action Queue** (URGENT/TODAY/WEEK grouping)
|
||||
- **AI Prevented Issues** (showcasing AI value)
|
||||
- **Execution Progress Tracking** (production/deliveries/approvals)
|
||||
- **Stock Receipt Modal** workflows
|
||||
- **Health Status** tri-state checklist
|
||||
- **All Alert Types** with full enrichment
|
||||
|
||||
## 📋 Available Scripts
|
||||
|
||||
### 1. `seed_dashboard_comprehensive.py` ⭐ **RECOMMENDED**
|
||||
|
||||
**Comprehensive dashboard demo covering ALL scenarios**
|
||||
|
||||
**What it seeds:**
|
||||
- 🔴 **URGENT** actions (<6h deadline): 3 alerts
|
||||
- PO approval escalation (72h aged, 2h deadline)
|
||||
- Delivery overdue (4h late, supplier contact needed)
|
||||
- Batch at risk (missing ingredients, 5h window)
|
||||
|
||||
- 🟡 **TODAY** actions (<24h deadline): 3 alerts
|
||||
- PO approval needed (dairy products, 20h deadline)
|
||||
- Delivery arriving soon (8h, prep required)
|
||||
- Low stock warning (yeast, order today recommended)
|
||||
|
||||
- 🟢 **THIS WEEK** actions (<7d deadline): 2 alerts
|
||||
- Weekend demand surge prediction
|
||||
- Stock receipt incomplete (2 days old)
|
||||
|
||||
- ✅ **AI PREVENTED ISSUES**: 3 alerts
|
||||
- Prevented stockout (PO created, €250 saved)
|
||||
- Prevented waste (production adjusted, €120 saved)
|
||||
- Prevented delay (batches rescheduled, €85 saved)
|
||||
|
||||
**Expected Dashboard State:**
|
||||
```
|
||||
Health Status: YELLOW (actions needed)
|
||||
├─ ⚡ AI Handled: 3 issues (€455 saved)
|
||||
└─ ⚠️ Needs You: 8 actions
|
||||
|
||||
Action Queue: 8 total actions
|
||||
├─ 🔴 URGENT: 3
|
||||
├─ 🟡 TODAY: 3
|
||||
└─ 🟢 WEEK: 2
|
||||
|
||||
AI Impact: €455 in prevented costs
|
||||
```
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
# Quick start
|
||||
python services/demo_session/scripts/seed_dashboard_comprehensive.py
|
||||
|
||||
# With custom tenant
|
||||
DEMO_TENANT_ID=your-tenant-id python services/demo_session/scripts/seed_dashboard_comprehensive.py
|
||||
|
||||
# With custom RabbitMQ
|
||||
RABBITMQ_URL=amqp://user:pass@host:5672/ python services/demo_session/scripts/seed_dashboard_comprehensive.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. `seed_enriched_alert_demo.py`
|
||||
|
||||
**Legacy enriched alert demo** (basic scenarios)
|
||||
|
||||
Seeds 5 basic alert types with automatic enrichment:
|
||||
- Low stock (AI handled)
|
||||
- Supplier delay (critical)
|
||||
- Waste trend (standard)
|
||||
- Forecast anomaly (info)
|
||||
- Equipment maintenance (medium)
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
python services/demo_session/scripts/seed_enriched_alert_demo.py
|
||||
```
|
||||
|
||||
**Note:** For full dashboard testing, use `seed_dashboard_comprehensive.py` instead.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
### Prerequisites
|
||||
|
||||
1. **RabbitMQ running:**
|
||||
```bash
|
||||
kubectl get pods | grep rabbitmq
|
||||
# Should show: rabbitmq-0 1/1 Running
|
||||
```
|
||||
|
||||
2. **Alert Processor service running:**
|
||||
```bash
|
||||
kubectl get pods -l app.kubernetes.io/name=alert-processor-service
|
||||
# Should show: alert-processor-service-xxx 1/1 Running
|
||||
```
|
||||
|
||||
3. **Python dependencies:**
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### Running the Demo
|
||||
|
||||
```bash
|
||||
# 1. Navigate to project root
|
||||
cd /path/to/bakery-ia
|
||||
|
||||
# 2. Load environment variables (if needed)
|
||||
source .env
|
||||
|
||||
# 3. Run comprehensive dashboard seeder
|
||||
python services/demo_session/scripts/seed_dashboard_comprehensive.py
|
||||
```
|
||||
|
||||
### Expected Output
|
||||
|
||||
```
|
||||
================================================================================
|
||||
🚀 SEEDING COMPREHENSIVE DASHBOARD DEMO DATA
|
||||
================================================================================
|
||||
|
||||
📋 Configuration:
|
||||
Tenant ID: demo-tenant-bakery-ia
|
||||
RabbitMQ: amqp://guest:guest@localhost:5672/
|
||||
|
||||
📊 Dashboard Scenarios to Seed:
|
||||
🔴 URGENT actions (<6h): 3
|
||||
🟡 TODAY actions (<24h): 3
|
||||
🟢 WEEK actions (<7d): 2
|
||||
✅ AI Prevented Issues: 3
|
||||
📦 Total Alerts: 11
|
||||
|
||||
📤 Publishing Alerts:
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
1. ✅ [🔴 URGENT] URGENT: PO Approval Needed - Yeast Supplier
|
||||
2. ✅ [🔴 URGENT] Delivery Overdue: Flour Delivery
|
||||
3. ✅ [🔴 URGENT] Batch At Risk: Missing Ingredients
|
||||
4. ✅ [🟡 TODAY] PO Approval: Butter & Dairy Products
|
||||
5. ✅ [🟡 TODAY] Delivery Arriving in 8 Hours: Sugar & Ingredients
|
||||
6. ✅ [🟡 TODAY] Low Stock: Fresh Yeast
|
||||
7. ✅ [🟢 WEEK] Weekend Demand Surge Predicted
|
||||
8. ✅ [🟢 WEEK] Stock Receipt Pending: Flour Delivery
|
||||
9. ✅ [✅ PREVENTED] ✅ AI Prevented Stockout: Flour
|
||||
10. ✅ [✅ PREVENTED] ✅ AI Prevented Waste: Reduced Monday Production
|
||||
11. ✅ [✅ PREVENTED] ✅ AI Prevented Delay: Rescheduled Conflicting Batches
|
||||
|
||||
✅ Published 11/11 alerts successfully
|
||||
|
||||
================================================================================
|
||||
🎉 DASHBOARD DEMO SEEDED SUCCESSFULLY!
|
||||
================================================================================
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Verification
|
||||
|
||||
### 1. Check Alert Processing
|
||||
|
||||
```bash
|
||||
# View alert-processor logs (real-time)
|
||||
kubectl logs -f deployment/alert-processor-service | grep 'enriched_alert'
|
||||
|
||||
# Should see:
|
||||
# alert_enriched alert_id=xxx type_class=action_needed priority_score=92
|
||||
# alert_enriched alert_id=xxx type_class=prevented_issue priority_score=35
|
||||
```
|
||||
|
||||
### 2. Access Dashboard
|
||||
|
||||
```bash
|
||||
# Port forward if needed
|
||||
kubectl port-forward svc/frontend-service 3000:3000
|
||||
|
||||
# Open browser
|
||||
open http://localhost:3000/dashboard
|
||||
```
|
||||
|
||||
### 3. Verify Dashboard Sections
|
||||
|
||||
**✅ Health Status Card:**
|
||||
- Should show YELLOW status
|
||||
- Tri-state checklist items visible
|
||||
- AI prevented issues badge showing "3 issues prevented"
|
||||
|
||||
**✅ Action Queue Card:**
|
||||
- 🔴 URGENT section with 3 items (2h countdown visible)
|
||||
- 🟡 TODAY section with 3 items
|
||||
- 🟢 THIS WEEK section with 2 items
|
||||
|
||||
**✅ Orchestration Summary:**
|
||||
- "User Needed: 8" in yellow (clickable)
|
||||
- "AI Prevented: 3 issues" in green badge
|
||||
|
||||
**✅ AI Impact Card:**
|
||||
- Shows €455 total savings
|
||||
- Lists 3 prevented issues
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Testing Scenarios
|
||||
|
||||
### Scenario 1: Urgent Action with Countdown
|
||||
|
||||
**Test:** PO Approval Escalation (2h deadline)
|
||||
|
||||
1. Navigate to dashboard
|
||||
2. Find "URGENT: PO Approval Needed - Yeast Supplier" in 🔴 URGENT section
|
||||
3. Verify countdown timer shows ~2 hours
|
||||
4. Click "Approve" button
|
||||
5. Verify alert moves to resolved/archived
|
||||
|
||||
**Expected Smart Actions:**
|
||||
- ✅ Approve PO (primary, green)
|
||||
- ⚙️ Modify PO (secondary)
|
||||
- ❌ Reject PO (danger, red)
|
||||
|
||||
---
|
||||
|
||||
### Scenario 2: Stock Receipt Modal
|
||||
|
||||
**Test:** Mark Delivery as Received
|
||||
|
||||
1. Find "Delivery Arriving in 8 Hours" in 🟡 TODAY section
|
||||
2. Click "Mark as Received" button
|
||||
3. **Stock Receipt Modal should open:**
|
||||
- Shows PO details (supplier, items)
|
||||
- Lot input fields for each line item
|
||||
- Quantity validation (lots must sum to actual)
|
||||
- Mandatory expiration dates
|
||||
4. Fill in lot details:
|
||||
- Lot number (e.g., "LOT-2024-089")
|
||||
- Quantity per lot
|
||||
- Expiration date (required)
|
||||
- Warehouse location
|
||||
5. Click "Confirm Receipt"
|
||||
6. Verify inventory is updated
|
||||
|
||||
**Expected Validation:**
|
||||
- ❌ Error if lot quantities don't sum to actual quantity
|
||||
- ❌ Error if expiration date missing
|
||||
- ✅ Success toast on confirmation
|
||||
|
||||
---
|
||||
|
||||
### Scenario 3: AI Prevented Issue Showcase
|
||||
|
||||
**Test:** View AI Value Proposition
|
||||
|
||||
1. Find "✅ AI Prevented Stockout: Flour" in alert list
|
||||
2. Verify prevented issue badge (⚡ lightning bolt)
|
||||
3. Click to expand reasoning
|
||||
4. **Should show:**
|
||||
- AI action taken: "Purchase order created automatically"
|
||||
- Savings: €250
|
||||
- Reasoning: "Detected stock would run out in 1.8 days..."
|
||||
- Business impact: "Secured 4 production batches"
|
||||
|
||||
5. Navigate to Orchestration Summary Card
|
||||
6. Verify "AI Prevented: 3 issues" badge shows €455 total
|
||||
|
||||
---
|
||||
|
||||
### Scenario 4: Call Supplier (External Action)
|
||||
|
||||
**Test:** Supplier contact integration
|
||||
|
||||
1. Find "Delivery Overdue: Flour Delivery" in 🔴 URGENT section
|
||||
2. Click "Call Supplier" button
|
||||
3. **Expected behavior:**
|
||||
- Phone dialer opens with +34-555-5678
|
||||
- OR clipboard copies phone number
|
||||
- Toast notification confirms action
|
||||
|
||||
**Metadata displayed:**
|
||||
- Supplier: Harinera San José
|
||||
- Phone: +34-555-5678
|
||||
- Email: pedidos@harinerasj.es
|
||||
- Hours overdue: 4
|
||||
|
||||
---
|
||||
|
||||
### Scenario 5: Navigation to Linked Pages
|
||||
|
||||
**Test:** Smart action navigation
|
||||
|
||||
1. Find "Batch At Risk: Missing Ingredients" in 🔴 URGENT
|
||||
2. Click "View Production" button
|
||||
3. **Should navigate to:** `/production?batch_id=batch-chocolate-cake-evening`
|
||||
4. Production page shows batch details
|
||||
5. Missing ingredients highlighted
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Troubleshooting
|
||||
|
||||
### Issue: Alerts not appearing in dashboard
|
||||
|
||||
**Check:**
|
||||
```bash
|
||||
# 1. Verify RabbitMQ is running
|
||||
kubectl get pods | grep rabbitmq
|
||||
|
||||
# 2. Check alert-processor logs
|
||||
kubectl logs deployment/alert-processor-service --tail=100
|
||||
|
||||
# 3. Verify alerts.exchange exists
|
||||
# (Check RabbitMQ management UI: localhost:15672)
|
||||
|
||||
# 4. Check for errors in seeder output
|
||||
python services/demo_session/scripts/seed_dashboard_comprehensive.py 2>&1 | grep ERROR
|
||||
```
|
||||
|
||||
**Common Fixes:**
|
||||
- Restart alert-processor: `kubectl rollout restart deployment/alert-processor-service`
|
||||
- Re-run seeder with debug: `python -u services/demo_session/scripts/seed_dashboard_comprehensive.py`
|
||||
- Check RabbitMQ queue: `raw_alerts_queue` should have consumers
|
||||
|
||||
---
|
||||
|
||||
### Issue: Countdown timer not working
|
||||
|
||||
**Check:**
|
||||
```bash
|
||||
# Verify urgency_context.auto_action_countdown_seconds is set
|
||||
# Should be in alert metadata
|
||||
```
|
||||
|
||||
**Fix:** Re-run seeder to ensure urgency_context is populated
|
||||
|
||||
---
|
||||
|
||||
### Issue: Stock Receipt Modal not opening
|
||||
|
||||
**Check:**
|
||||
```bash
|
||||
# 1. Verify modal component is imported in DashboardPage
|
||||
grep -r "StockReceiptModal" frontend/src/pages/app/DashboardPage.tsx
|
||||
|
||||
# 2. Check browser console for errors
|
||||
# Look for: "delivery:mark-received event not handled"
|
||||
|
||||
# 3. Verify smartActionHandlers.ts is loaded
|
||||
```
|
||||
|
||||
**Fix:** Ensure event listener is registered in DashboardPage.tsx
|
||||
|
||||
---
|
||||
|
||||
## 📊 Data Reference
|
||||
|
||||
### Alert Type Classes
|
||||
|
||||
- `action_needed` - Requires user decision (yellow)
|
||||
- `prevented_issue` - AI already handled (blue/green)
|
||||
- `trend_warning` - Proactive insight (info)
|
||||
- `escalation` - Time-sensitive with countdown (red)
|
||||
- `information` - Pure informational (gray)
|
||||
|
||||
### Priority Levels
|
||||
|
||||
- `critical` (90-100) - Needs decision in 2 hours
|
||||
- `important` (70-89) - Needs decision today
|
||||
- `standard` (50-69) - Review when convenient
|
||||
- `info` (0-49) - For awareness
|
||||
|
||||
### Time Groups
|
||||
|
||||
- 🔴 **URGENT** - Deadline <6 hours
|
||||
- 🟡 **TODAY** - Deadline <24 hours
|
||||
- 🟢 **THIS WEEK** - Deadline <7 days
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Resetting Demo Data
|
||||
|
||||
To clear all demo alerts and start fresh:
|
||||
|
||||
```bash
|
||||
# 1. Delete all alerts for demo tenant
|
||||
# (This requires admin access to alert-processor DB)
|
||||
|
||||
# 2. Or restart alert-processor (clears in-memory cache)
|
||||
kubectl rollout restart deployment/alert-processor-service
|
||||
|
||||
# 3. Re-run seeder
|
||||
python services/demo_session/scripts/seed_dashboard_comprehensive.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 Notes
|
||||
|
||||
- **Automatic Enrichment:** All alerts are automatically enriched by alert-processor service
|
||||
- **Priority Scoring:** Multi-factor algorithm considers urgency, impact, user agency
|
||||
- **Smart Actions:** Dynamically generated based on alert type and context
|
||||
- **Real-time Updates:** Dashboard subscribes to SSE for live alert updates
|
||||
- **i18n Support:** All alerts support EN/ES/EU languages
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Next Steps
|
||||
|
||||
After seeding:
|
||||
|
||||
1. **Test all smart actions** (approve, reject, call, navigate, etc.)
|
||||
2. **Verify performance** (<500ms dashboard load time)
|
||||
3. **Test responsive design** (mobile, tablet, desktop)
|
||||
4. **Check translations** (switch language in UI)
|
||||
5. **Test SSE updates** (create new alert, see real-time update)
|
||||
|
||||
---
|
||||
|
||||
## 🤝 Contributing
|
||||
|
||||
To add new demo scenarios:
|
||||
|
||||
1. Edit `seed_dashboard_comprehensive.py`
|
||||
2. Add new alert to appropriate function (`create_urgent_actions()`, etc.)
|
||||
3. Include full metadata for enrichment
|
||||
4. Test enrichment output
|
||||
5. Update this README with new scenario
|
||||
|
||||
---
|
||||
|
||||
## 📚 Related Documentation
|
||||
|
||||
- [Alert Type Schemas](../../../shared/schemas/alert_types.py)
|
||||
- [Dashboard Service API](../../../services/orchestrator/app/api/dashboard.py)
|
||||
- [Smart Action Handlers](../../../frontend/src/utils/smartActionHandlers.ts)
|
||||
- [JTBD Implementation Status](../../../docs/JTBD-IMPLEMENTATION-STATUS.md)
|
||||
Reference in New Issue
Block a user