Skip to content

v1.3 — 23/03/2026

Thay đổiSectionẢnh hưởng
Cập nhật tên → "Báo cáo doanh số cá nhân"FilesAll
Timeline +1 ngày FE (tab container + redirect)TimelineFE
Thêm FE Hub + Redirect vào RACIRACIFE
Thêm verify redirect vào Deploy ChecklistDeploy ChecklistFE

Delivery Index — Báo cáo doanh số cá nhân

FieldValue
FeatureBáo cáo doanh số cá nhân (Hub 3 tabs: Doanh số theo ngày + Doanh thu ĐH + Tiền tour)
Version1.3
Date2026-03-23
ComplexityM

Files

#FileAudience
1PRDPO, Tech Lead, All
2UI SpecFE Dev, UI/UX
3Dev SpecBE Dev, FE Dev, Tech Lead
4QA Test PlanQA
5Design Doc v1.0Reference (Mode A output)
6Design Doc v1.1 — Refund & ClawbackReference (truy thu + drill-down)

RACI

DeliverablePOTLFE DevBE DevQA
PRDACIII
UI SpecCIRII
Dev SpecIACRI
QA Test PlanCIIIR
Migration SQL + Indexes (ecommerce + project)IARI
Migration SQL (wallet — clawback)IARI
Hasura Metadata (ecommerce + project + wallet)IAR
FE Page + Components + PopupIIRI
FE Hub (tab container) + Redirect routes + Ẩn cards cũIIRI

Timeline

MilestoneTargetOwnerPhụ thuộc
1. BE — Indexes migration (ecommerce)T+1 ngàyBE Dev
2. BE — SQL functions + Hasura (ecommerce + project)T+3 ngàyBE DevSau indexes
3. BE — SQL function clawback + Hasura (wallet)T+4 ngàyBE DevSong song hoặc sau step 2
4. FE — Tab container + import 2 báo cáo cũ + redirect + ẩn cardsT+5 ngàyFE DevSong song với BE
5. FE — pnpm codegen + Pivot table + FilterT+7 ngàyFE DevSau BE deploy
6. FE — Drill-down popupT+9 ngàyFE DevSau table hoạt động
7. FE — Export ExcelT+10 ngàyFE DevSau popup hoạt động
8. QA TestingT+11-12 ngàyQASau FE deploy
9. Go-LiveT+13 ngàyTLQA pass

Open Items

IDItemOwnerDeadlineStatus
ASM-002Verify order_commission_user.invoice_id NOT NULL cho data gần đâyTLTrước deployOpen
ASM-003Verify indexes đã tồn tại trên invoice.paid_atTLTrước deployOpen
PERF-001Chạy EXPLAIN ANALYZE sau deploy để verify query plan (3 functions)BE DevNgay sau deployOpen
PD-001Xác nhận transaction_request.code auto-generate cho refund_commissionBE DevTrước FE popupOpen

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_user có data: SELECT count(*) FROM order_commission_user WHERE invoice_id IS NOT NULL
  • [ ] Verify bảng project_task_assignee có 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 codegen pass (không có type errors)
  • [ ] Report module accessible tại /r/reports/
  • [ ] Verify MonthPickerWithButton import path: src/modules/salary/components/MonthPickerWithButton.tsx
  • [ ] Test accounts với quyền xem report có sẵn trên test env

Deploy Checklist

#StepOwnerVerify
1Deploy indexes migration (ecommerce)BE Dev\di idx_ocu_* shows indexes
2Deploy commission function (ecommerce)BE DevSELECT * FROM search_employee_daily_commission('2026-03-01', '2026-03-31') LIMIT 5
3Deploy tour function (project)BE DevSELECT * FROM search_employee_daily_tour_income('2026-03-01', '2026-03-31') LIMIT 5
4Deploy clawback function (wallet)BE DevSELECT * FROM search_employee_daily_commission_clawback('2026-03-01', '2026-03-31') LIMIT 5
5Apply Hasura metadata (ecommerce + project + wallet)BE DevGraphQL queries work in Hasura console
6FE codegen + deployFE DevPage accessible, data loads, popup works
6aVerify tabs hoạt độngFE Dev3 tabs switch đúng, import components render OK
6bVerify redirect route cũFE Dev/r/reports/employee_revenue_report_group → tab revenue, /r/reports/tour_income_report_group → tab tour
6cVerify cards cũ ẩnFE DevTrang Reports không hiển thị 2 cards cũ
7EXPLAIN ANALYZE all 3 functionsBE DevNo sequential scan on large tables
8QA smoke testQATC-001-01, TC-003-05, TC-004-06, TC-008-01 pass