{
 "generated": "2026-09-10",
 "project": "Trường Số",
 "prd": "Draft v1 10/09/2026",
 "fixtures": [
  {
   "key": "Tenant BIG",
   "description": "Seeded tenant \"Big Center\": branches A (Quận 1, code Q1), B (Thủ Đức, code TD), C (Gò Vấp, code GV); timezone Asia/Ho_Chi_Minh; locale vi default."
  },
  {
   "key": "Tenant EMPTY",
   "description": "Seeded tenant \"Empty Center\": one branch, zero students, zero classes, zero invoices; owner account only."
  },
  {
   "key": "U-OWNER",
   "description": "owner role, scope all, member of all branches; email owner@bigcenter.test."
  },
  {
   "key": "U-BM-A",
   "description": "branch_manager role, branch A only."
  },
  {
   "key": "U-ADM",
   "description": "admissions role, scope own; assigned to leads L1, L4."
  },
  {
   "key": "U-ACAD-A",
   "description": "academic_admin role, branch A only."
  },
  {
   "key": "U-ACC",
   "description": "accountant role, all branches."
  },
  {
   "key": "U-TEACH",
   "description": "teacher role; main teacher of class C1 (branch A) and C3 (branch B); staff record T1."
  },
  {
   "key": "U-TEACH2",
   "description": "teacher role; staff record T2; no classes; used as substitute."
  },
  {
   "key": "U-VIEWER",
   "description": "viewer role; read-only."
  },
  {
   "key": "G1",
   "description": "Guardian \"Trần Thị Hoa\", phone 0901234567, mother of S1 (branch A) and S2 (branch B); Zalo consent granted; payer and primary contact for both."
  },
  {
   "key": "G2",
   "description": "Guardian \"Lê Văn Nam\", phone 0912000002, father of S6; NO Zalo consent, has email nam@test.vn."
  },
  {
   "key": "L1",
   "description": "Open lead \"Phạm Thu Hà\" phone 0987000001, stage Tiềm năng, assigned U-ADM, prospect learner \"Phạm Minh\" birth year 2018, level Starters."
  },
  {
   "key": "L2",
   "description": "Won lead phone 0987000002 already converted once (prospect key p1 converted to S9); second prospect p2 not converted."
  },
  {
   "key": "L3",
   "description": "Lead phone 0987000003 marked do-not-call with reason \"Khách yêu cầu\"."
  },
  {
   "key": "L4",
   "description": "Lead phone 0987000004 with call logged callback_requested at yesterday 15:00 (overdue), assigned U-ADM."
  },
  {
   "key": "S1",
   "description": "Student \"Nguyễn An\", code HV-000123, age 8, Active in C1, package FP3 with 5 sessions remaining, expiry in 3 months; flagged note \"Dị ứng đậu phộng\"."
  },
  {
   "key": "S2",
   "description": "Student \"Nguyễn Bình\", HV-000124, Active in C3 (branch B), monthly plan."
  },
  {
   "key": "S3",
   "description": "Student \"Trần Chi\", HV-000125, Waiting (Chờ xếp lớp), branch A, level Movers."
  },
  {
   "key": "S4",
   "description": "Student \"Lê Dũng\", HV-000126, Paused since 10 days ago, expected return in 20 days, was in C1."
  },
  {
   "key": "S5",
   "description": "Student \"Hoàng Em\", HV-000127, Withdrawn 30 days ago, reason \"chuyển nhà\"."
  },
  {
   "key": "S6",
   "description": "Student \"Phan Giang\", HV-000128, Active in C1, package with 2 sessions remaining (low balance)."
  },
  {
   "key": "S7",
   "description": "Student \"Vũ Hạnh\", HV-000129, Active in C2, invoice INV-3 overdue 45 days, 3,000,000 remaining."
  },
  {
   "key": "S8",
   "description": "Adult learner \"Đỗ Khoa\", HV-000130, age 20, self as contact, phone 0933000008."
  },
  {
   "key": "C1",
   "description": "Class \"Movers 2A\", code MOV-2609-01, branch A, T3/T5 18:00-19:30, room P.201, teacher T1, capacity 12, 11 enrolled, trial seats 2, allow_trial true, 48 planned sessions, 20 held."
  },
  {
   "key": "C2",
   "description": "Class \"Starters 1B\", code STA-2609-01, branch A, full 12/12, waiting list 1."
  },
  {
   "key": "C3",
   "description": "Class \"Movers 1C\", branch B, teacher T1, T2/T4 17:00-18:30."
  },
  {
   "key": "C4",
   "description": "Class \"Flyers 3\", branch A, scheduled, start date 14 days ahead, 0 enrolled."
  },
  {
   "key": "C5",
   "description": "Class \"Starters 0Z\", branch A, completed 60 days ago."
  },
  {
   "key": "ROOMS",
   "description": "Branch A rooms: P.201 (cap 12), P.202 (cap 8), \"Trực tuyến\" virtual. Branch B: B.101."
  },
  {
   "key": "SES-TODAY",
   "description": "C1 session today 18:00-19:30, planned, no sheet."
  },
  {
   "key": "SES-YEST",
   "description": "C1 session yesterday 18:00-19:30, ended, no sheet (unmarked)."
  },
  {
   "key": "SES-PAST",
   "description": "C1 session 7 days ago, held, sheet saved by T1 (10 present, 1 late 10 min, 1 absent S6)."
  },
  {
   "key": "SES-B",
   "description": "C3 session tomorrow 17:00-18:30 at branch B, teacher T1."
  },
  {
   "key": "FP1",
   "description": "Fee plan one_time \"Movers 2 trọn khoá\" 48 buổi 9,600,000 VND, VAT 0, on course \"Movers 2\"."
  },
  {
   "key": "FP2",
   "description": "Fee plan monthly \"Theo tháng\" 1,200,000 VND/month."
  },
  {
   "key": "FP3",
   "description": "Fee plan session_package \"Gói 24 buổi\" 6,000,000 VND, validity 6 months."
  },
  {
   "key": "MAT1",
   "description": "Material \"Sách Family and Friends 2\" 180,000 VND, VAT 5%."
  },
  {
   "key": "INV-1",
   "description": "Invoice for S1, FP1, total 9,600,000, unpaid, due in 7 days, payment_code TS1A0001, bank account BA1."
  },
  {
   "key": "INV-2",
   "description": "Invoice for S2, 1,200,000, partial (paid 500,000), due in 3 days."
  },
  {
   "key": "INV-3",
   "description": "Invoice for S7, 3,000,000, unpaid, due 45 days ago (overdue bucket 31-60)."
  },
  {
   "key": "INV-4",
   "description": "Invoice for S1 (materials), 180,000, paid in cash, receipt PT-Q1-202609-0001."
  },
  {
   "key": "INV-5",
   "description": "Invoice for S3 with 20% discount created by U-ADM, status Chờ duyệt (pending_approval)."
  },
  {
   "key": "BA1",
   "description": "Branch A bank account \"Vietcombank 0123456789\" SePay-linked, active. CD-A: branch A cash drawer."
  },
  {
   "key": "ZALO",
   "description": "Zalo OA stub connected; templates attendance_absent, attendance_late, invoice_created, receipt, fee_reminder approved; schedule_change template status Chờ duyệt."
  },
  {
   "key": "SEPAY",
   "description": "SePay webhook stub: POST /api/stub/sepay with {amount, description, sepay_transaction_id}."
  }
 ],
 "totals": {
  "cases": 544,
  "flows": 14,
  "regression_cases": 177,
  "by_module": {
   "00-overview-and-architecture": 33,
   "01-admissions-crm": 74,
   "02-students-sis": 61,
   "03-classes-and-scheduling": 55,
   "04-attendance": 57,
   "05-tuition-and-finance": 67,
   "06-teachers-and-staff": 17,
   "07-parent-communication": 35,
   "08-inventory": 14,
   "09-reports-and-dashboards": 27,
   "10-settings-and-administration": 39,
   "11-data-model-and-api": 27,
   "12-non-functional": 38
  },
  "by_type": {
   "functional": 310,
   "regression": 8,
   "ui-ux": 28,
   "security": 65,
   "i18n": 22,
   "negative": 50,
   "edge": 36,
   "flow": 20,
   "a11y": 12,
   "perf": 7
  },
  "by_priority": {
   "P1": 293,
   "P2": 113,
   "P0": 143,
   "P3": 9
  },
  "by_phase": {
   "P1": 488,
   "P2": 66,
   "P1/P2": 4
  }
 },
 "result_status_values": [
  "not_run",
  "pass",
  "fail",
  "blocked",
  "skipped",
  "na"
 ]
}