Appearance
Redesign Tab Tư vấn (Commission → Advisory Fee)
Version: 1.0 Date: 23/03/2026 Author: PO/BA Type: Enhancement Complexity: M Module: ecommerce
Changelog
| Version | Date | Author | Thay đổi |
|---|---|---|---|
| 1.0 | 23/03/2026 | PO/BA | Initial — redesign UX tab Hoa hồng thành Tư vấn |
| 1.1 | 07/04/2026 | PO/BA | Loại bỏ trạng thái "Chờ duyệt" — codebase confirm commission tự động vào wallet khi thanh toán, không có bước duyệt. Xóa FR-004d, cập nhật FR-001/002/006. Luôn hiện group header (bỏ adaptive ẩn khi 1 lần TT). Xóa nút "Bỏ filter" trong card — toggle click card là đủ. |
Hướng dẫn đọc (RACI)
| Audience | Doc sections | Trách nhiệm |
|---|---|---|
| PO/BA | Z, A, B | Approve requirements, UX flows |
| Tech Lead | Z, A, C | Approve architecture, review dev spec |
| FE Dev | B, C (C1-C6) | Implement UI |
| BE Dev | C (C1-C12) | Implement backend |
| QA | A (A5), D (D4 = traceability) | Write + execute test cases |
Executive Summary (TL;DR)
Redesign tab "Hoa hồng" trong chi tiết đơn hàng thành tab "Tư vấn" với giao diện mới gồm Summary Bar + Summary Cards + Flat Transaction List. Đổi thuật ngữ toàn bộ UI từ "Hoa hồng" sang "Tư vấn" (advisory fee) cho đúng bản chất nghiệp vụ. Áp dụng cho cả 3 loại đơn hàng: dịch vụ, mỹ phẩm, nạp tiền.
Milestones
| Milestone | Target | Owner | Điều kiện |
|---|---|---|---|
| PRD + Spec approved | T+2 ngày | PO | - |
| FE Implementation | T+5 ngày | FE Dev | Spec approved |
| QA Testing | T+7 ngày | QA | FE deploy staging |
| Go-Live | T+8 ngày | Tech Lead | QA pass |
Trạng thái Sign-off
| Domain | Người | Status |
|---|---|---|
| Business | PO | Pending |
| Tech | Tech Lead | Pending |
| QA | QA Lead | Pending |
Pending Decisions
| PD | Question | Options / Assumption | Owner | Deadline | Status | Resolution |
|---|---|---|---|---|---|---|
| PD-001 | Backend thu hồi: khi nào dev xong? Có cần API mới? | A) Dùng API hiện có B) API mới. Khuyến nghị: A | Tech Lead | 30/03/2026 | Open | - |
| PD-002 | Notification template đổi "hoa hồng" -> "tư vấn"? | Đã resolved -> DEC-007 | PO | - | Resolved | -> DEC-007 |
Backlog Phase 2 (Out-of-scope)
| # | Tính năng | Lý do defer |
|---|---|---|
| 1 | Customer commission (affiliate/referral) trong tab Tư vấn | Giữ logic cũ, redesign riêng nếu cần |
| 2 | Notification template migration "hoa hồng" -> "tư vấn" | Tách task riêng, ship sau 1 sprint (DEC-007) |
| 3 | Backend: nhập số tiền thu hồi cụ thể khi duyệt hoàn tiền | Đang phát triển, đánh dấu [PLANNED] trong spec |
Z) Decision Log
| ID | Category | Quyết định | Lý do (Option A vs B) | Ngày | Status |
|---|---|---|---|---|---|
| DEC-001 | UX | Layout: Summary Bar + Summary Cards + Flat Transaction List | A) Layout mới (chọn) — sếp nhìn 2 giây hiểu. B) Fix grouping bảng cũ — chỉ fix 1 vấn đề, còn thuật ngữ vẫn mơ hồ | 23/03/2026 | Locked |
| DEC-002 | UX | Card chỉ hiện 2 số: Phân bổ / Đã nhận + trạng thái 1 dòng | A) 2 số (chọn) — gọn, đủ info. B) 4 số (Phân bổ/Đã chi/Thu hồi/Đã nhận) — quá nhiều, nhầm lẫn | 23/03/2026 | Locked |
| DEC-003 | UX | Bảng adaptive: sub-section theo context. Group header luôn hiện (v1.1: bỏ adaptive ẩn group header, mỗi NV có mã GD riêng nên cần group header để hiện mã TT) | A) Luôn hiện group header (chọn v1.1) — mỗi NV có transaction_request riêng với mã GD riêng, group header hiện mã TT giúp user biết thuộc cùng 1 lần thanh toán. B) Ẩn khi 1 lần TT (v1.0) — nhiều mã GD khác nhau gây confuse | 07/04/2026 | Locked |
| DEC-004 | Business | Đổi thuật ngữ: Hoa hồng -> Tư vấn (chỉ UI labels, không đổi DB/API) | A) UI only (chọn) — effort thấp, không breaking change. B) Đổi cả DB/API — effort cao, risk cao, lợi ích thấp | 23/03/2026 | Locked |
| DEC-005 | UX | Empty state: hiện cards (phân bổ) + bảng trống "Chưa có giao dịch" | A) Hiện cards + bảng trống (chọn) — POS có thể cấu hình phân bổ trước khi thanh toán. B) Ẩn tab khi chưa có data — mất khả năng cấu hình sớm | 23/03/2026 | Locked |
| DEC-006 | Technical | Thu hồi đánh dấu [PLANNED], mô tả UI đầy đủ nhưng note backend đang phát triển | A) PLANNED tag (chọn) — PRD hoàn chỉnh, dev có spec sẵn. B) Không đề cập — PRD thiếu, phải viết lại sau | 23/03/2026 | Locked |
| DEC-007 | Business | Notification template đổi "hoa hồng" -> "tư vấn" — tách task riêng, ship sau 1 sprint | A) Tách riêng (chọn) — giảm risk, không delay UI. B) Gộp cùng — tăng scope, cần QA notification riêng | 23/03/2026 | Locked |
| DEC-008 | Business | Report module label "Báo cáo hoa hồng" -> "Báo cáo tư vấn" — đổi cùng đợt | A) Đổi cùng (chọn) — chỉ i18n, zero risk. B) Defer — inconsistent UX | 23/03/2026 | Locked |
A) PRD
A1) Blueprint
| Field | Value |
|---|---|
| Feature | Redesign Tab Tư vấn (Commission -> Advisory Fee) |
| Type | Enhancement |
| Platform | Web Admin (diva-admin) — Admin, POS, CRM |
| Module ảnh hưởng | FE: ecommerce (OrderCommissions, OrderCommissionTable, OrderCommissionItem), report (i18n). BE: không đổi logic |
A2) Context
As-Is
- Tab "Hoa hồng" trong chi tiết đơn hàng hiển thị 2 bảng:
- Bảng 1 "Mã thanh toán": Nested expandable table, group theo
invoiceCode x userId. Cùng 1 mã thanh toán lặp N lần (1 dòng/NV). Expand ra bảng con chỉ có 1 dòng, thông tin gần giống dòng cha. Nested header lặp lại mỗi expand. - Bảng 2 "Thông tin hoa hồng": Matrix table NV x Dịch vụ với cột "Cấu hình / Thực nhận" — thuật ngữ mơ hồ.
- Bảng 1 "Mã thanh toán": Nested expandable table, group theo
- Thuật ngữ "Hoa hồng" không đúng bản chất — đây là tiền tư vấn dịch vụ.
- 100% Manager được hỏi không hiểu tab này -> bỏ qua không kiểm soát.
To-Be
- Tab đổi tên thành "Tư vấn" với 3 section rõ ràng:
- Summary Bar: Tổng quan đơn hàng (Phân bổ / Đã chi / Thu hồi / Đã nhận)
- Summary Cards: Tổng quan per NV (Phân bổ / Đã nhận + trạng thái + expand dịch vụ)
- Flat Transaction List: Lịch sử giao dịch (group by mã thanh toán, không nested)
- Thuật ngữ mới nhất quán: Phân bổ, Đã nhận, Chi tư vấn, Thu hồi.
- Tooltip giải thích cho mỗi thuật ngữ.
A3) Goals & Success Metrics
| Goal | Metric | Target |
|---|---|---|
| Manager hiểu tab trong < 5 giây | User test: hỏi "NV A nhận bao nhiêu?" | 90% trả lời đúng trong 5 giây |
| Giảm câu hỏi hỗ trợ về tab này | Số lượng ticket/câu hỏi về HH | Giảm 80% sau 1 tháng |
| Không làm mất tính năng hiện có | Feature parity check | 100% chức năng cũ vẫn hoạt động |
A4) Personas
| Persona | Vai trò | JTBD | Frequency |
|---|---|---|---|
| Manager/Admin | Xem báo cáo, kiểm soát chi phí | "Tôi muốn biết nhanh ai nhận bao nhiêu tư vấn, đã chi chưa" | Hàng ngày |
| POS Staff | Nhập commission khi tạo đơn | "Tôi muốn cấu hình tư vấn cho NV nhanh, không nhầm" | Mỗi đơn hàng |
| CRM Staff | Xem commission đơn hàng CRM | "Tôi muốn kiểm tra NV nhận đúng số tiền tư vấn" | Hàng tuần |
A5) Functional Requirements
FR-001: Summary Bar tổng quan đơn hàng (Ref: DEC-001, DEC-004)
Priority: Must | SCR: SCR-01
AC:
- [ ] Hiển thị 4 chỉ số: Phân bổ | Đã chi | Thu hồi | Đã nhận với giá trị VND format
X.XXXđ - [ ] Mỗi chỉ số có icon
?bên cạnh — hover hiện tooltip giải thích (xem B9 Tooltip Dictionary) - [ ] Khi
Phân bổ > Đã chi→ hiện dòng context: "(icon) {X}đ chờ thanh toán đợt tiếp theo" - [ ] Khi
Phân bổ == Đã nhậnvà không có thu hồi → hiện "(icon) Đã chi đủ" - [ ] VD: Phân bổ = 40.000đ, Đã chi = 30.000đ, Thu hồi = 3.000đ → Đã nhận = 27.000đ + context "10.000đ chờ thanh toán đợt tiếp theo"
FR-002: Summary Cards per NV (Ref: DEC-001, DEC-002)
Priority: Must | SCR: SCR-01
AC:
- [ ] Mỗi NV 1 card hiển thị: Avatar + Tên + Role + Phân bổ (VND) + Đã nhận (VND)
- [ ] Trạng thái 1 dòng theo quy tắc:
- Đã nhận == Phân bổ → "(icon) Đã chi đủ"
- Đã nhận < Phân bổ, không thu hồi → "(icon) Còn {X}đ"
- Có thu hồi → "(icon) Thu hồi {X}đ"
- Đã nhận == 0 và có thu hồi → "(icon) Đã thu hồi hết"
- [ ] "Phân bổ" và "Đã nhận" có icon
?với tooltip - [ ] Click "> Chi tiết" → expand breakdown theo dịch vụ: table
DV | Phân bổ - [ ] Cards sort theo Phân bổ giảm dần
- [ ] Scale: max 5 cards/hàng, wrap xuống hàng mới khi > 5 NV
FR-003: Click card filter bảng dưới (Ref: DEC-001)
Priority: Should | SCR: SCR-01
AC:
- [ ] Click card NV → filter Lịch sử giao dịch chỉ hiện giao dịch của NV đó
- [ ] Card được click có visual highlight (border/background khác)
- [ ] Click lại card đang active → bỏ filter (toggle)
- [ ] Filter là client-side (JavaScript filter trên data đã fetch)
- [ ] Group headers bị ẩn nếu group đó không có giao dịch của NV được filter
FR-004a: Flat Transaction List — 1 lần TT, không thu hồi (Ref: DEC-001, DEC-003)
Priority: Must | SCR: SCR-02
AC:
- [ ] Luôn hiện group header dạng divider:
-- #MaTT . DD/MM/YYYY -- (icon) Đã chi . X.XXXđ -- - [ ] 5 cột:
# | Mã GD | Nhân viên | Số tiền | Thời gian - [ ] Không hiện cột "Hành động" và "Trạng thái" (tất cả là Chi tư vấn + Thành công)
- [ ] Số tiền hiện
+X.XXXđmàu xanh - [ ] Sort theo thời gian DESC (mới nhất trên)
FR-004b: Flat Transaction List — nhiều lần TT, không thu hồi (Ref: DEC-001, DEC-003)
Priority: Must | SCR: SCR-02
AC:
- [ ] Hiện group header dạng divider (giống FR-004a)
- [ ] Vẫn 5 cột như FR-004a
- [ ] Group sort theo thời gian DESC (lần TT mới nhất trên)
FR-004c: Flat Transaction List — có thu hồi [PLANNED] (Ref: DEC-003, DEC-006)
Priority: Must | SCR: SCR-02
AC:
- [ ] Group bị ảnh hưởng tách 2 sub-section: "Chi tư vấn" (subtotal) và "Thu hồi" (subtotal)
- [ ] Sub-section "Chi tư vấn": các dòng +X.XXXđ màu xanh
- [ ] Sub-section "Thu hồi": các dòng -X.XXXđ màu đỏ + sub-text "bởi:
{Admin name}" - [ ] Group header trạng thái theo tỷ lệ thu hồi:
- 0% → "(icon) Đã chi"
- 1-99% → "(icon) Thu hồi {X}%" (X = Sum thu hồi / Sum chi tư vấn * 100, làm tròn)
- 100% → "(icon) Đã hoàn tiền"
- [ ] Group header số tiền = Sum chi - Sum thu hồi
- [ ] [PLANNED] — UI sẵn sàng, backend thu hồi đang phát triển
FR-005: Search (Ref: DEC-003)
Priority: Should | SCR: SCR-02
AC:
- [ ] Placeholder: "Tìm theo mã thanh toán, mã giao dịch, tên nhân viên..."
- [ ] Debounce 300ms, nút clear
- [ ] Client-side filter trên data đã fetch
- [ ] Match: invoice.code (mã TT) HOẶC transaction_request.code (mã GD) HOẶC user.display_name (tên NV)
FR-006: Dropdown filter (Ref: DEC-003)
Priority: Should | SCR: SCR-02
AC:
- [ ] Dropdown bên cạnh search: "Tất cả" | "Chi tư vấn" | "Thu hồi"
- [ ] "Chi tư vấn" → filter
behavior_id = 'transaction_commission' - [ ] "Thu hồi" → filter
behavior_id = 'refund_commission' - [ ] Client-side filter
FR-007: Đổi thuật ngữ UI (Ref: DEC-004, DEC-008)
Priority: Must | SCR: All
AC:
- [ ] Tab label: "Hoa hồng" → "Tư vấn" (i18n vi.ts + 2 hardcode files)
- [ ] Section title: "THÔNG TIN HOA HỒNG" → "PHÂN BỔ TƯ VẤN"
- [ ] Nút: "Thêm người nhận HH" / "Cấu hình hoa hồng" → "Cấu hình tư vấn"
- [ ] Message: "người nhận hoa hồng" → "người tư vấn"
- [ ] Report label: "Báo cáo hoa hồng" → "Báo cáo tư vấn" (report/i18n/vi.ts)
- [ ] Route URL path giữ nguyên (không breaking change)
- [ ] Backend constants, DB columns, GraphQL fields: KHÔNG ĐỔI
FR-008: Nút "Cấu hình tư vấn" (Ref: DEC-004)
Priority: Must | SCR: SCR-01
AC:
- [ ] Giữ vị trí hiện tại (bên cạnh section title)
- [ ] Đổi label theo FR-007
- [ ] Logic permission giữ nguyên: canEditCommission (IT/HR unlimited, POS time-limited, CRM role+time)
- [ ] Click → mở dialog cấu hình như hiện tại (ServiceOrderCommissionCreate / CosmeticOrderCommissionCreate / PrepaidOrderCommissionCreate)
FR-009: Empty state (Ref: DEC-005)
Priority: Must | SCR: SCR-01, SCR-02
AC:
- [ ] Khi chưa có invoice (đơn mới tạo):
- Summary Bar: Phân bổ = {X}đ (từ order_commission), Đã chi = 0đ, Thu hồi = 0đ, Đã nhận = 0đ
- Summary Cards: hiện cards với Phân bổ = {X}đ, Đã nhận = 0đ, trạng thái "(icon) Còn {X}đ"
- Transaction List: hiện "Chưa có giao dịch"
- [ ] Khi chưa cấu hình commission (order_commission rỗng):
- Summary Bar: tất cả = 0đ
- Summary Cards: không hiện card nào
- Transaction List: "Chưa có giao dịch"
- Hiện nút "Cấu hình tư vấn" nổi bật
FR-010: Loading state (Ref: DEC-003)
Priority: Should | SCR: SCR-01, SCR-02
AC:
- [ ] Summary Bar + Cards: skeleton loading (placeholder animated)
- [ ] Transaction List: spinner (giữ nguyên pattern hiện tại)
- [ ] Loading độc lập: cards có thể load xong trước bảng
FR-011: Sort order (Ref: DEC-003)
Priority: Must | SCR: SCR-01, SCR-02
AC:
- [ ] Summary Cards: sort theo Phân bổ DESC (NV được phân bổ nhiều nhất lên trước)
- [ ] Transaction List: groups sort theo thời gian DESC, trong mỗi group transactions sort theo thời gian DESC
FR-012: Format tiền (Ref: DEC-004)
Priority: Must | SCR: All
AC:
- [ ] Summary Bar, Cards:
X.XXXđ(không dấu +/-) - [ ] Transaction List — Chi tư vấn:
+X.XXXđmàu xanh (positive) - [ ] Transaction List — Thu hồi:
-X.XXXđmàu đỏ (negative) - [ ] Group header, Sub-section total:
X.XXXđ(không dấu +/-) - [ ] Dấu phân cách hàng nghìn: dấu chấm (VD: 10.000đ, 1.500.000đ)
FR-013: Tooltip giải thích thuật ngữ (Ref: DEC-004)
Priority: Must | SCR: SCR-01, SCR-02
AC:
- [ ] Icon
?(hoặc icon info) bên cạnh các thuật ngữ: Phân bổ, Đã chi, Thu hồi, Đã nhận, Chi tư vấn - [ ] Hover icon → hiện tooltip với nội dung theo B9 Tooltip Dictionary
- [ ] Tooltip đóng khi di chuột ra ngoài
- [ ] Style nhất quán với tooltip pattern hiện có trong hệ thống (nếu có)
A6) Assumptions
| ID | Assumption | Owner xác nhận |
|---|---|---|
| ASM-001 | Permission logic (canEditCommission) giữ nguyên, không thay đổi | Tech Lead |
| ASM-002 | GraphQL queries hiện có (ServiceOrderDetail + TransactionsOfOrder) đủ data, không cần API mới | Tech Lead |
| ASM-003 | 3 loại đơn hàng (service/cosmetic/prepaid) dùng chung UI redesign, chỉ khác commission form | PO |
| ASM-004 | Backend thu hồi (nhập số tiền cụ thể) sẽ có API tương thích với UI đã thiết kế | Tech Lead |
A7) Risks
| ID | Risk | Impact | Probability | Mitigation |
|---|---|---|---|---|
| RSK-001 | Backend thu hồi chưa sẵn sàng khi FE deploy | Trung bình | Cao | Đánh dấu [PLANNED], UI sẵn sàng nhưng data thu hồi = 0 cho đến khi BE xong |
| RSK-002 | GraphQL query hiện có thiếu field cần thiết | Trung bình | Thấp | Phase 3 discovery đã confirm 2 query đủ data. Fallback: thêm computed field trong Hasura |
| RSK-003 | User quen thuật ngữ cũ "hoa hồng", không hiểu "tư vấn" | Thấp | Trung bình | Tooltip giải thích (FR-013), thông báo nội bộ trước khi deploy |
A8) Metrics (Post-launch)
| Metric | Cách đo | Target | Khi nào đo |
|---|---|---|---|
| User comprehension | User test: hỏi Manager xem tab, trả lời 3 câu hỏi | 90% đúng | T+7 ngày |
| Support tickets | Đếm ticket liên quan "hoa hồng" / "tư vấn" | Giảm 80% | T+30 ngày |
| Tab usage | Analytics: số lần vào tab Tư vấn | Tăng 20% | T+30 ngày |
A9) Glossary
| Thuật ngữ (VI) | Thuật ngữ (EN) | Định nghĩa | Phân biệt với |
|---|---|---|---|
| Tư vấn | Advisory fee | Khoản tiền NV nhận được từ việc tư vấn dịch vụ cho khách | != Hoa hồng (commission % — thuật ngữ cũ) |
| Phân bổ | Allocation | Số tiền tư vấn được gán cho NV từ đơn hàng (từ order_commission) | != Đã nhận (chưa chắc đã chi) |
| Đã chi | Disbursed | Tổng tiền đã chuyển vào wallet NV (từ invoice_commission với status completed) | != Phân bổ (phân bổ là cấu hình, đã chi là thực tế) |
| Đã nhận | Received (net) | Số tiền NV thực tế giữ = Đã chi - Thu hồi | != Đã chi (có thể bị thu hồi 1 phần) |
| Thu hồi | Revoke / Clawback | Rút lại tiền tư vấn đã chi (do hoàn đơn, sửa sai) | != Đã chi |
| Chi tư vấn | Disburse advisory | Hành động chuyển tiền tư vấn vào wallet NV (behavior_id = transaction_commission) | != Thu hồi |
| Cấu hình tư vấn | Configure advisory | Gán số tiền / % tư vấn cho NV trên 1 đơn hàng | != Phân bổ (cấu hình là hành động, phân bổ là kết quả) |
Non-goals
- Không đổi DB schema (table names, column names, GraphQL field names)
- Không đổi backend commission calculation logic
- Không redesign customer commission (affiliate/referral)
- Không đổi commission setting (role_commission master data)
- Không đổi commission report module (chỉ đổi label i18n)
- Không đổi notification template (tách task riêng — DEC-007)
A10) Business Formulas
FORMULA-001: Phân bổ (Allocation)
- Mô tả: Tổng số tiền tư vấn được gán cho 1 NV trên 1 đơn hàng
- Công thức:
phan_bo = SUM(order_commission.amount)WHEREuser_id = {NV}ANDorder_id = {đơn} - Biến số:
order_commission.amount: số tiền cấu hình (VND hoặc %) — nguồn:ecommerce.order_commission.amountorder_commission.unit: đơn vị —commission_percenthoặccommission_vnd
- Đơn vị: VND
- Ví dụ: NV A được cấu hình 10.000đ cho DV "BTX thiết kế" → Phân bổ = 10.000đ
- Edge cases:
- Chưa cấu hình commission → Phân bổ = 0
- Unit = percent: hiển thị "10%" trong card chi tiết, nhưng Phân bổ tổng = SUM VND tương đương
FORMULA-002: Đã chi (Disbursed)
- Mô tả: Tổng tiền tư vấn đã chuyển vào wallet NV từ đơn hàng này
- Công thức:
da_chi = SUM(invoice_commission.amount)WHEREuser_id = {NV}ANDorder_id = {đơn}ANDinvoice_status = 'invoice_completed' - Biến số:
invoice_commission.amount: số tiền commission đã tính (luôn VND) — nguồn:ecommerce.invoice_commission.amountinvoice_commission.invoice_status: trạng thái invoice — nguồn:ecommerce.invoice_commission.invoice_status
- Đơn vị: VND
- Ví dụ: Đơn hàng có 2 lần thanh toán. Lần 1: 100.000đ x 10% = 10.000đ (completed). Lần 2: 50.000đ x 10% = 5.000đ (completed) → Đã chi = 15.000đ
- Edge cases:
- Invoice chưa completed → không tính vào Đã chi
- Đơn mới tạo chưa có invoice → Đã chi = 0
FORMULA-003: Thu hồi (Revoked) [PLANNED]
- Mô tả: Tổng tiền tư vấn bị rút lại do hoàn đơn
- Công thức:
thu_hoi = SUM(transaction_request.amount)WHEREbehavior_id = 'refund_commission'ANDorder_id = {đơn}ANDuser_id = {NV} - Biến số:
transaction_request.amount: số tiền thu hồi — nguồn:wallet.transaction_request.amounttransaction_request.behavior_id: loại giao dịch — filter =refund_commission
- Đơn vị: VND
- Ví dụ: NV A đã nhận 15.000đ, hoàn 1 lần TT → thu hồi 5.000đ
- Edge cases:
- Chưa có hoàn tiền → Thu hồi = 0
- [PLANNED] Khi duyệt hoàn tiền, nhập số tiền cụ thể. Nếu không nhập → không trừ
FORMULA-004: Đã nhận (Net Received)
- Mô tả: Số tiền NV thực tế giữ sau khi trừ thu hồi
- Công thức:
da_nhan = da_chi - thu_hoi - Biến số:
da_chi: FORMULA-002thu_hoi: FORMULA-003
- Đơn vị: VND
- Ví dụ: Đã chi = 15.000đ, Thu hồi = 5.000đ → Đã nhận = 10.000đ
- Edge cases:
- Thu hồi > Đã chi → Đã nhận = số âm (hiện màu đỏ, trường hợp bất thường)
- Chưa có thu hồi → Đã nhận = Đã chi
FORMULA-005: Tỷ lệ thu hồi group (Group Revoke Ratio)
- Mô tả: Tỷ lệ thu hồi trong 1 lần thanh toán (group)
- Công thức:
ratio = (SUM_thu_hoi_group / SUM_chi_tv_group) * 100 - Biến số:
SUM_thu_hoi_group: tổng thu hồi trong group (cùng invoice_id)SUM_chi_tv_group: tổng chi tư vấn trong group (cùng invoice_id)
- Đơn vị: % (làm tròn số nguyên)
- Ví dụ: Chi tư vấn group = 10.000đ, Thu hồi = 3.000đ → 30%
- Edge cases:
- SUM_chi_tv_group = 0 → không hiện tỷ lệ (hiện "–")
- ratio = 100% → hiện "(icon) Đã hoàn tiền"
RACI
| Deliverable | PO | TL | FE Dev | BE Dev | QA |
|---|---|---|---|---|---|
| PRD (file này) | 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 |