Skip to content

Test Scenarios · MVP

Quick Reference — 8 kịch bản theo user journey. Mỗi kịch bản = 1 câu chuyện thực tế, đa-vai trò. Pass = tất cả bước ✅.

Cách dùng: mỗi tester chạy 1 scenario từ đầu đến cuối, không skip bước, ghi ✅/❌ vào cột "Result".


Scenario 1 · KAM L'Oréal báo đợt Mid-Month 15/06

Persona involved: KAM → AM → Planner → WH Manager → Auditor Mục tiêu: verify happy path end-to-end của 1 adjustment thông thường (Δ < 30%)

#VaiBướcExpectedResult
1KAMLogin kam.loreal@demo.boxmeSidebar có "Gửi điều chỉnh"
2KAMVào /planner/override-import, form 1 dòng: cust=LOREAL_VN, wh=HCM_01, date=today+5, qty=5500, event=MID_MONTHPreview OK
3KAMSubmitToast OK, state=NEW
4KAMLogout
5AMLogin am.fmcg@demo.boxme, vào /planner/forecast/reviewThấy row mới ở NEW
6AMBấm "Đã xem"State → SEEN, audit row
7PlannerLogin planner@demo.boxme, mở reviewRow ở SEEN, Δ% < 30%
8PlannerBấm "Duyệt"State → ACCEPTED, audit 2 row
9WHLogin wh.hcm@demo.boxme, vào /planner/forecast/warehouse, chọn HCM_01, date=today+5WLU_minutes phản ánh qty mới
10AuditorLogin auditor@demo.boxme, mở Audit Timeline của adjustmentThấy đủ chuỗi: SUBMIT → SEEN → ACCEPTED

Pass criteria: 10/10 ✅, audit timeline đầy đủ.


Scenario 2 · KAM Shopee Mega Sale 11.11 — Δ > 30%

Mục tiêu: verify guardrail Δ > 30% bắt buộc note + Planner phải có dẫn chứng

#VaiBướcExpectedResult
1KAMSubmit SHOPEE_VN × HCM_01 × 11/11 × qty=25000 × event=MEGA_SALE KHÔNG noteSubmit fail, yêu cầu note
2KAMSubmit lại có note "11.11 megasale, KAM ước dựa lịch sử 10.10"OK
3PlannerMở review, thấy Δ = +180% so P85, cell màu 🔴Cảnh báo rõ ràng
4PlannerBấm "Duyệt" mà không noteUI block, hiện input note bắt buộc
5PlannerNhập note "11.11, baseline 10.10 +120%, add 50% buffer KOL" → DuyệtOK
6AuditorAudit log có note đầy đủ + Δ% snapshotOK

Scenario 3 · Planner sửa số KAM gửi

#VaiBướcExpectedResult
1KAMSubmit qty=10000NEW
2PlannerBấm "Sửa & duyệt" → qty=8000 + note "Buffer KAM hơi cao, giữ 8000"ACCEPTED, audited_qty=8000
3AuditorAudit log có row QTY_EDIT với before.qty=10000, after.qty=8000, reason="..."Đủ
4WHĐọc warehouse report ngày đóWLU tính theo 8000 (không phải 10000)

Scenario 4 · Planner reject + KAM resubmit

#VaiBướcExpectedResult
1KAMSubmit qty=50000 (vô lý) + note "Test"NEW
2PlannerBấm "Từ chối" + note "Số quá cao, không có dẫn chứng"REJECTED, audited_qty=baseline
3KAMLịch sử gửi: thấy row REJECTED + lý do
4KAMTạo adjustment mới cùng (cust,wh,date) với qty=15000 + dẫn chứngNEW
5PlannerMở review, thấy row mớiOK
6PlannerVerify forecast hiển thị KAM-qty mới nhất, không phải số cũOK

Scenario 5 · Admin sửa monthly multiplier

#VaiBướcExpectedResult
1AdminLogin, vào /admin/config/thamso tab Mùa12 row T1-T12
2AdminT11 đang = 1.4, sửa thành 1.6, LưuToast OK, audit row CONFIG_CHANGE
3AdminBấm "Rerun nightly"Job chạy < 2'
4PlannerRefresh /planner/forecast, xem ngày trong T11Forecast tăng (≈ ×1.14 so trước)
5AuditorAudit log có before=1.4, after=1.6, actor=adminOK

Scenario 6 · WH Manager lên ca cho ngày sale

Mục tiêu: verify report đủ thông tin để planner ca

#VaiBướcExpectedResult
1WHLogin, vào /planner/forecast/warehouse, chọn kho + range=14dBảng hiện
2WHTìm ngày có event=MEGA_SALEHeadcount tăng đáng kể
3WHClick ngày → bóc PK breakdownSB+MIX+HVY = 100%
4WHExport ExcelFile mở, 2 sheet
5WHVerify công thức 1 cell: headcount = ceil(WLU / 480)Đúng

Scenario 7 · Import lịch sử + impact lên baseline

#VaiBướcExpectedResult
1AdminVào /admin/history-import, download templateOK
2AdminĐiền 30 dòng valid cho 1 cặp (cust, wh) mới chưa có data
3AdminUpload + preview30 dòng, ngày min/max đúng
4AdminConfirm NhậpAudit row IMPORT_HISTORICAL
5AdminBấm "Rerun"
6PlannerMở forecast cho cặp đóBaseline có giá trị (không null)
7PlannerSample_size column ≈ 30OK
8PlannerNếu n < 10 → cờ fallback_usedTest với cặp khác có < 10d

Scenario 8 · Auditor quarter-end report

Mục tiêu: verify auditor có thể truy vết & build báo cáo quý

#VaiBướcExpectedResult
1AuditorLogin, xem có thể đọc mọi trang forecastOK (read-only)
2AuditorThử bấm nút "Duyệt" trên reviewDisabled / hidden
3AuditorChạy SQL trên Supabase: count audit_log by action, monthCó data, không có gap > 5'
4AuditorTìm decisions Δ > 30% không có reasonList = 0 (mong đợi)
5AuditorThử UPDATE audit_log SET reason='...'RLS từ chối
6AuditorThử DELETE FROM audit_log WHERE ...RLS từ chối
7AuditorBuild báo cáo quý theo templateOK

Tổng kết Scenarios

#ScenarioPass?BugsSeverity
1KAM L'Oréal Mid-Month happy path
2Shopee Mega Sale Δ > 30% guardrail
3Planner sửa số
4Reject + resubmit
5Admin sửa multiplier
6WH lên ca ngày sale
7Import lịch sử
8Auditor quarter-end

Verdict:

  • [ ] 8/8 scenarios pass
  • [ ] 0 P0 bug
  • [ ] ≤ 3 P1 bug (workaround có)

Sau khi hoàn thành

  1. Tổng hợp Checklist + Scenarios → report tổng
  2. Gửi report cho:
    • Product Lead → approve release
    • Eng Lead → fix bugs còn lại
    • Data Lead → verify forecast accuracy trên dataset thật