Appearance
v1.3 — 23/03/2026
| Thay đổi | Section | Ảnh hưởng |
|---|---|---|
| Cập nhật tên → "Báo cáo doanh số cá nhân" | Files | All |
| Timeline +1 ngày FE (tab container + redirect) | Timeline | FE |
| Thêm FE Hub + Redirect vào RACI | RACI | FE |
| Thêm verify redirect vào Deploy Checklist | Deploy Checklist | FE |
Delivery Index — Báo cáo doanh số cá nhân
| Field | Value |
|---|---|
| Feature | Báo cáo doanh số cá nhân (Hub 3 tabs: Doanh số theo ngày + Doanh thu ĐH + Tiền tour) |
| Version | 1.3 |
| Date | 2026-03-23 |
| Complexity | M |
Files
| # | File | Audience |
|---|---|---|
| 1 | PRD | PO, Tech Lead, All |
| 2 | UI Spec | FE Dev, UI/UX |
| 3 | Dev Spec | BE Dev, FE Dev, Tech Lead |
| 4 | QA Test Plan | QA |
| 5 | Design Doc v1.0 | Reference (Mode A output) |
| 6 | Design Doc v1.1 — Refund & Clawback | Reference (truy thu + drill-down) |
RACI
| Deliverable | PO | TL | FE Dev | BE Dev | QA |
|---|---|---|---|---|---|
| PRD | A | C | I | I | I |
| UI Spec | C | I | R | I | I |
| Dev Spec | I | A | C | R | I |
| QA Test Plan | C | I | I | I | R |
| Migration SQL + Indexes (ecommerce + project) | I | A | — | R | I |
| Migration SQL (wallet — clawback) | I | A | — | R | I |
| Hasura Metadata (ecommerce + project + wallet) | I | A | — | R | — |
| FE Page + Components + Popup | I | I | R | — | I |
| FE Hub (tab container) + Redirect routes + Ẩn cards cũ | I | I | R | — | I |
Timeline
| Milestone | Target | Owner | Phụ thuộc |
|---|---|---|---|
| 1. BE — Indexes migration (ecommerce) | T+1 ngày | BE Dev | — |
| 2. BE — SQL functions + Hasura (ecommerce + project) | T+3 ngày | BE Dev | Sau indexes |
| 3. BE — SQL function clawback + Hasura (wallet) | T+4 ngày | BE Dev | Song song hoặc sau step 2 |
| 4. FE — Tab container + import 2 báo cáo cũ + redirect + ẩn cards | T+5 ngày | FE Dev | Song song với BE |
5. FE — pnpm codegen + Pivot table + Filter | T+7 ngày | FE Dev | Sau BE deploy |
| 6. FE — Drill-down popup | T+9 ngày | FE Dev | Sau table hoạt động |
| 7. FE — Export Excel | T+10 ngày | FE Dev | Sau popup hoạt động |
| 8. QA Testing | T+11-12 ngày | QA | Sau FE deploy |
| 9. Go-Live | T+13 ngày | TL | QA pass |
Open Items
| ID | Item | Owner | Deadline | Status |
|---|---|---|---|---|
| ASM-002 | Verify order_commission_user.invoice_id NOT NULL cho data gần đây | TL | Trước deploy | Open |
| ASM-003 | Verify indexes đã tồn tại trên invoice.paid_at | TL | Trước deploy | Open |
| PERF-001 | Chạy EXPLAIN ANALYZE sau deploy để verify query plan (3 functions) | BE Dev | Ngay sau deploy | Open |
| PD-001 | Xác nhận transaction_request.code auto-generate cho refund_commission | BE Dev | Trước FE popup | Open |
Day 0 Verification (Dev chạy trước khi code)
BE Dev
- [ ]
go test ./...pass trên main - [ ] Hasura console accessible, metadata version khớp
- [ ] Verify bảng
order_commission_usercó data:SELECT count(*) FROM order_commission_user WHERE invoice_id IS NOT NULL - [ ] Verify bảng
project_task_assigneecó data tour:SELECT count(*) FROM project_task_assignee WHERE tour_money > 0 - [ ] Latest migration ecommerce =
1773200000000, project =1769755237009, wallet = verify latest - [ ] Verify wallet DB tables:
SELECT count(*) FROM transaction t JOIN transaction_request tr ON tr.id = t.request_id WHERE tr.behavior_id = 'refund_commission' AND tr.status = 'S'
FE Dev
- [ ]
pnpm codegenpass (không có type errors) - [ ] Report module accessible tại
/r/reports/ - [ ] Verify
MonthPickerWithButtonimport path:src/modules/salary/components/MonthPickerWithButton.tsx - [ ] Test accounts với quyền xem report có sẵn trên test env
Deploy Checklist
| # | Step | Owner | Verify |
|---|---|---|---|
| 1 | Deploy indexes migration (ecommerce) | BE Dev | \di idx_ocu_* shows indexes |
| 2 | Deploy commission function (ecommerce) | BE Dev | SELECT * FROM search_employee_daily_commission('2026-03-01', '2026-03-31') LIMIT 5 |
| 3 | Deploy tour function (project) | BE Dev | SELECT * FROM search_employee_daily_tour_income('2026-03-01', '2026-03-31') LIMIT 5 |
| 4 | Deploy clawback function (wallet) | BE Dev | SELECT * FROM search_employee_daily_commission_clawback('2026-03-01', '2026-03-31') LIMIT 5 |
| 5 | Apply Hasura metadata (ecommerce + project + wallet) | BE Dev | GraphQL queries work in Hasura console |
| 6 | FE codegen + deploy | FE Dev | Page accessible, data loads, popup works |
| 6a | Verify tabs hoạt động | FE Dev | 3 tabs switch đúng, import components render OK |
| 6b | Verify redirect route cũ | FE Dev | /r/reports/employee_revenue_report_group → tab revenue, /r/reports/tour_income_report_group → tab tour |
| 6c | Verify cards cũ ẩn | FE Dev | Trang Reports không hiển thị 2 cards cũ |
| 7 | EXPLAIN ANALYZE all 3 functions | BE Dev | No sequential scan on large tables |
| 8 | QA smoke test | QA | TC-001-01, TC-003-05, TC-004-06, TC-008-01 pass |