Test Scenarios · BQ-Calibrated
8 kịch bản end-to-end chạy trên seed snapshot đã hiệu chỉnh từ BigQuery
boxme-cloud.boxme_insights(Q1 2026 actuals). Mỗi kịch bản dài ~5–10 phút, mở rộng từ bộ scenarios.md hiện có.Pre-condition cho toàn bộ:
bashcd wfp-v2 && npm run seed && npm run dev # mở http://localhost:5173Snapshot phải có 6 kho × 12 khách × ~16k history × 162 config.
| # | Tên | Vai trò | Thời gian | Reference data |
|---|---|---|---|---|
| S1 | Tết closure & recovery | Planner | 8 phút | monthly:2 = 0.83, Tết 16-18/2 |
| S2 | Calibrated MEGA 11.11 | Planner + KAM | 10 phút | event:MEGA_SALE = 3.8, history 4 ngày MEGA |
| S3 | C-Store top-customer cycle | KAM + Ops | 7 phút | c_cstore_vn avg 3,741/ngày |
| S4 | B2B carton workflow | KAM + WH | 6 phút | c_unicorn_b2b, 271 đơn Q1 |
| S5 | Spillover HCM-TP → HCM-TT | Ops | 5 phút | Spillover ratio 0.7 |
| S6 | UPH override per-customer | Config admin | 6 phút | KEY customers có UPH override |
| S7 | Low-confidence flag cho 12.12 | Forecast lead | 5 phút | sample_size=4 < threshold 5 |
| S8 | Báo cáo kho khớp BQ Q1 2026 | Ops manager | 8 phút | Total Q1 = 6.58M đơn |
S1 — Tết closure & recovery
Mục tiêu: Hệ thống xử lý đúng kho VN đóng cửa 3-5 ngày Tết, sau đó recover.
| Bước | Hành động | Expected |
|---|---|---|
| 1 | Mở "Cấu hình → Tham số → Tháng" | Bảng 12 tháng hiển thị T2 = 0.83 (badge "calibrated from BQ Q1 2026") |
| 2 | Forecast page → chọn wh_vn_hcm_01 + c_cstore_vn + date 2026-02-17 | forecast_qty < 800 (Tết closure), confidence không low |
| 3 | Tăng date lên 2026-02-23 (1 tuần sau Tết) | forecast_qty về mức ~2,000–4,000 (recovery) |
| 4 | Mở Planner cho 2026-02-17 wh_vn_hcm_01 | Tổng workload < 50 giờ, headcount required ≈ 1-2 |
| 5 | Kiểm tra calendar UI | Ngày 16/2, 17/2, 18/2 hiển thị label "Tết Bính Ngọ — Mùng X" |
✅ Pass = bước 1-5 đều đúng.
S2 — Calibrated MEGA 11.11
Mục tiêu: Forecast 11.11 sinh đỉnh tải, low_confidence flag bật do sample size < 5.
| Bước | Hành động | Expected |
|---|---|---|
| 1 | "Cấu hình → Tham số → Sự kiện" | MEGA_SALE = 3.8 (calibrated) |
| 2 | Forecast wh_vn_hcm_03 × c_unicorn × 2026-11-11 | forecast_qty ∈ [8000, 150000], is_low_confidence = true |
| 3 | Đọc tooltip "low confidence" | Hiển thị "sample_size=4 < 5 ngưỡng" |
| 4 | KAM gửi override submitted_qty = 12000 cho ngày 11.11 | Status NEW, ghi audit |
| 5 | Ops "Accept" override | Forecast cập nhật, audit trail có entry |
| 6 | Planner ngày 11.11 | Total hours ≈ qty / UPH_eff, spillover hiển thị 30-40% sang ca tiếp |
✅ Pass = forecast > NORMAL × 3, low_confidence flag bật.
S3 — C-Store top-customer cycle
Mục tiêu: Top customer (theo NMV Q1 2026) hiển thị full chu kỳ KAM submit → review → planner.
Customer ref: c_cstore_vn (seller_id 367719, net_sale_q1 = 369B VND, avg 3,741 đơn/ngày).
| Bước | Hành động | Expected |
|---|---|---|
| 1 | Customer list page → chọn c_cstore_vn | Tier KEY, product_mix FMCG 60% + COSMETIC 30% + OTHER 10% |
| 2 | "View forecasts" → tuần này | Daily ~2,500–4,500 đơn ở wh_vn_hcm_01 (primary) |
| 3 | "View spillover" | ~1,100 đơn/ngày spread sang HCM-02/HCM-03/HN |
| 4 | KAM submit override cho ngày 25 (PAYDAY) | qty = 4500, status NEW |
| 5 | Ops accept | Forecast tăng lên 4500, planner ca sáng/chiều cập nhật |
✅ Pass = customer profile, forecast cycle, audit log đều đúng.
S4 — B2B carton workflow
Mục tiêu: Customer B2B (~10 đơn/ngày, value cao) không bị nhầm như B2C.
Customer ref: c_unicorn_b2b (seller_id 396395, 271 đơn Q1, 135B VND nmv).
| Bước | Hành động | Expected |
|---|---|---|
| 1 | Customer page c_unicorn_b2b | Tier KEY, channels=['B2B'], note "B2B carton" |
| 2 | Forecast 2026-07-15 (MID_MONTH) | forecast_qty ∈ [0, 30] đơn |
| 3 | UPH lookup cho FMCG × STANDARD | < UPH cho c_unicorn (B2C) khoảng 30% |
| 4 | Planner page | Total hours ≈ vài giờ (không phải vài trăm) |
✅ Pass = qty < 30, UPH override thấp hơn B2C.
S5 — Spillover HCM-TP → HCM-TT
Mục tiêu: Khi BMVN_HCM_TP (primary) full capacity, system spillover sang BMVN_HCM_TT đúng tỷ lệ.
| Bước | Hành động | Expected |
|---|---|---|
| 1 | Pick ngày 2026-03-10 (peak HCM_TP = 89,748 đơn) | Daily snapshot khớp BQ ±5% |
| 2 | Planner wh_vn_hcm_01 ngày 2026-03-10 | Capacity 16k, workload > capacity → spillover badge |
| 3 | Switch sang wh_vn_hcm_02 (TT) | Workload tăng do spillover (~30%) |
| 4 | Check spillover ratio (config) | 0.7 (constant), 30% còn lại split đều sang VN khác |
✅ Pass = spillover hiển thị cả 2 chiều.
S6 — UPH override per-customer
Mục tiêu: KEY customer có UPH calibrated khác DEFAULT, planner áp dụng đúng.
| Bước | Hành động | Expected |
|---|---|---|
| 1 | "Cấu hình → Định mức" filter wh_vn_hcm_01 | 4 PK type × 5 product group × (1 DEFAULT + N KEY) rows |
| 2 | Sửa UPH c_cstore_vn × FMCG × STANDARD từ 88 → 100 | New ConfigValue version=2, old version=1 (is_current=false) |
| 3 | Re-run forecast c_cstore_vn | wlu_per_order_minutes giảm ~12%, total hours giảm tương ứng |
| 4 | Mở audit log | Hiện entry "ConfigValue updated", actor, before/after |
✅ Pass = UPH update propagate vào forecast realtime.
S7 — Low-confidence flag cho 12.12
Mục tiêu: Khi sample size < 5, system bật cờ low confidence để KAM/Ops biết tin cậy thấp.
| Bước | Hành động | Expected |
|---|---|---|
| 1 | Forecast wh_vn_hcm_03 × c_unicorn × 2026-12-12 | forecast_qty ∈ [8000, 140000], is_low_confidence = true |
| 2 | Tooltip / banner low_confidence | "Chỉ có 4 ngày MEGA trong history" |
| 3 | Submit override hoặc skip — both should be valid actions | UI cho phép cả 2 |
| 4 | Sau khi thêm 1 ngày MEGA giả (history import) → re-forecast | low_confidence chuyển false (sample size = 5) |
✅ Pass = flag hiển thị + actionable.
S8 — Báo cáo kho khớp BQ Q1 2026
Mục tiêu: Báo cáo kho hiển thị tổng số khớp BigQuery Q1 2026 (sanity check).
| Bước | Hành động | Expected |
|---|---|---|
| 1 | "Báo cáo kho" → range 2026-01-01..2026-03-31 → all VN | Total ≈ 3.72M đơn (BQ Q1 VN: 3,720,659) ±5% |
| 2 | Filter wh_vn_hcm_01 only | ~1.18M đơn (BQ BMVN_HCM_TP) |
| 3 | Filter c_cstore_vn × Q1 | ~325k đơn (BQ seller 367719) |
| 4 | Top customer leaderboard | C-Store #1, Skinetiq #2, Judydoll #3 (match BQ Q2) |
| 5 | Filter PH | ~1.68M (BMPH_PDC) |
✅ Pass = 3 con số tổng (Q1 VN, HCM-TP, C-Store) lệch BQ < 5%.