QnA Init Docs — UC_4.8.1: PnL Gauge (SIM Overview)
Ngày tạo: 2026-08-08 Ngày BA review: 2026-08-10 Phiên bản: v1 BA phụ trách: Trang Nguyen Trạng thái: ✅ BA đã trả lời toàn bộ QN-4.8.1-01→04 — sẵn sàng cho Step 3 (Architect viết SRS)
Carried-forward context (đã confirm ở dashboard_common/UC_4.1.1-4.1.5/QnA_init_docs.md, KHÔNG hỏi lại)
- A-06: PnL Gauge (SIM = UC_4.8.1, LIVE = UC_4.11.2) thuộc module Overview, KHÔNG thuộc Global Shell — dial có 4 trạng thái (Starting point / Drawdown defense enabled / Breached-Account Disabled / Level Up) là đúng, chỉ phần "cấp global header" bị bác. (Source:
docs/BA/UC_4.1-4.17/dashboard_common/UC_4.1.1-4.1.5/QnA_init_docs.md)
Nguồn
RFQ_ Website and Dashboard Implementation V7.pdf§Part C (dòng 572-575 bản extractdashboard_v7_full.txt): "PnL Gauge: A prominent, streaming account balance and PnL dial requiring explicit frontend state management for four distinct visual states: Starting point, Drawdown defense enabled, Breached (Account Disabled), and Level Up."- Cùng file, dòng 837-839: trong "Passing Associate Track" Shadow Mode, ghi chú "PnL Gauge is active since it shows them the timer" — gauge vẫn hoạt động ở ReadOnly Mode.
RFQ_ Stack Trading Prop Tech V7.pdf§3.2 (v7_full.txt): eventACCOUNT_METRICS(dòng 394-398, streaming balance/equity/open_pnl/realized_pnl, throttle 1000ms), eventLEVEL_STOP_BREACH(dòng 451-465), eventLEVEL_PROMOTION(dòng 439-444).RFQ_ Stack Trading Prop Tech V7.pdf§Reference Data Endpoints — "Current Level Detail" (dòng 642-651): trả vềNotional, dùng để "populate the dashboard header, 'Next Level' progress bars, and the PnL Gauge defense state".
WBS UC_4.8.1 có description sẵn ("Compact profit and loss visualisation: current equity vs starting balance with a mini equity curve sparkline showing PnL over time") khớp với nguồn trên.
| ID | Câu hỏi | Giả định (BA/QC đề xuất) | BA chốt (ưu tiên cao nhất) | Trạng thái |
|---|---|---|---|---|
| QN-4.8.1-01 | [SCOPE — 🔴 CRITICAL] Trạng thái "Drawdown defense enabled" có thể xảy ra trên SIM không? Defense Protocol (Table F, 48h cooling-off) theo toàn bộ nguồn đã đọc chỉ áp dụng Level 9+. SIM chỉ có 1 tier duy nhất (Level 0 — evaluation, pass/fail nhị phân, không có khái niệm "lên level" trong lúc còn ở SIM). WBS module Failure & Recovery của SIM (category STAGE 2.1. DASHBOARD SIM) chỉ có 4 UC: UC_4.9.1 (Soft Breach), UC_4.9.2 (Hard Breach), UC_4.9.3 (Sim Reset), UC_4.9.4 (Time Extension) — KHÔNG có UC "Defense Protocol" nào cho SIM (trong khi LIVE có hẳn UC_4.14.4 "Scenario C: Defense Protocol"). Vậy trạng thái thứ 2 của gauge có bao giờ trigger được trên SIM không? | Đề xuất: trạng thái "Drawdown defense enabled" không bao giờ trigger trên SIM (Defense Protocol chỉ tồn tại ở LIVE, UC_4.14.4). SRS UC_4.8.1 vẫn liệt kê đủ 4 state theo nguồn (để đúng structure), nhưng ghi rõ note: "State này N/A cho SIM — chỉ áp dụng khi user đã ở LIVE (xem UC_4.14.4)". | Đúng như đề xuất — trạng thái "Drawdown defense enabled" không bao giờ trigger trên SIM (Defense Protocol chỉ tồn tại ở LIVE, UC_4.14.4). SRS UC_4.8.1 vẫn liệt kê đủ 4 state theo nguồn, kèm note rõ: "State này N/A cho SIM — chỉ áp dụng khi user đã ở LIVE (xem UC_4.14.4)". | ✅ Đã chốt |
| QN-4.8.1-02 | [Chung với dashboard_common/UC_4.2.3/QnA_init_docs.md A-10] Mini equity curve sparkline dùng chung endpoint GET /equity-curve với Equity Curve full (UC_4.2.3), hay 2 nguồn dữ liệu riêng? BA chỉ cần trả lời 1 lần, áp dụng cho cả UC_4.8.1 và UC_4.2.3. | Dùng chung 1 endpoint GET /equity-curve?timeframe=, PnL Gauge gọi cố định timeframe=1D để render bản rút gọn — tránh duplicate logic tính toán 2 nơi. | BA: "Áp dụng cho cả 2" — xác nhận dùng chung 1 endpoint GET /equity-curve?timeframe= cho cả UC_4.8.1 và UC_4.2.3, PnL Gauge gọi cố định timeframe=1D. (Đồng bộ với A-10 đã ghi trong dashboard_common/UC_4.2.1-4.2.5/QnA_init_docs.md, và đã được viết sẵn vào UC_4.2.3 §BR_4.2.3.1.) | ✅ Đã chốt |
| QN-4.8.1-03 | Field "starting balance" — ACCOUNT_METRICS chỉ có balance/equity/open_pnl/realized_pnl hiện tại, không có field "giá trị vốn cấp ban đầu" để so sánh (dial cần "current equity vs starting balance"). Field nào là nguồn baseline? | Dùng Notional (từ endpoint Current Level Detail) làm baseline "starting point" cho dial — đây là giá trị vốn cấp cho tier/level hiện tại, không đổi trong suốt phiên. | Đã chốt — BA cung cấp công thức đầy đủ (2026-08-10): On load, frontend gọi GET /current-level-detail, payload trả về Target/Stop của user. Left End (Minimum) = Hard Stop Loss threshold (Market_Loss_When_Stopped, vd Stop = $1,250 → đầu trái dial = -$1,250). Right End (Maximum) = Profit Target (Profit_Target, vd Target = $1,875 → đầu phải dial = +$1,875). Kim chỉ (needle) = Current Net PnL trực tiếp (Unrealized + Realized), lắng nghe WebSocket ACCOUNT_METRICS (tính bằng equity trừ allocated_capital ban đầu — tương đương Notional). Giá trị hiển thị dưới kim = Current Net PnL dạng USD live, đúng bằng tổng P&L đã đóng + đang mở. → Vậy baseline dial KHÔNG phải 1 điểm mốc tĩnh đơn lẻ để so sánh, mà là dial 2 đầu (Stop ↔ Target) với kim chạy theo Net PnL — thay thế hoàn toàn hướng đề xuất ban đầu (chỉ dùng Notional làm 1 điểm mốc). | ✅ Đã chốt |
| QN-4.8.1-04 | Transition animation giữa 4 state — nguồn không mô tả hiệu ứng chuyển đổi (vd Breach xảy ra đột ngột ngay từ Starting point, chưa qua Drawdown defense). | [ASSUMPTION] Chuyển state tức thời (không cần animation transition phức tạp) khi nhận WS event tương ứng — chỉ riêng "Level Up" có cinematic riêng (cross-ref UC Level-Up Cinematic, LIVE UC_4.15.1 — SIM tương đương chưa xác nhận có tồn tại không, vì SIM evaluation "Level Up" = pass challenge, chuyển sang luồng Live Onboarding, không rõ có cinematic riêng cho SIM hay chỉ có ở LIVE). | KHÁC đề xuất ban đầu — BA: "giữa các state sẽ có motion chuyển đổi." Xác nhận CÓ transition animation giữa các state (không phải instant/tức thời như đề xuất ban đầu). Chi tiết animation cụ thể (duration, easing) không thuộc phạm vi functional spec — SRS chỉ ghi nhận hành vi "có transition motion khi chuyển state", không mô tả chi tiết thị giác. | ✅ Đã chốt (KHÁC đề xuất ban đầu) |
| QN-4.8.1-05 | Cross-ref backend flow — không phải câu hỏi cần trả lời riêng, chỉ ghi nhận: trạng thái "Breached (Account Disabled)" trùng trigger (LEVEL_STOP_BREACH) với luồng backend đã được document chi tiết ở dashboard_sim/UC_4.9.2/QnA_init_docs.md (Hard Breach - Level Stop). Khi viết SRS, UC_4.8.1 chỉ mô tả hành vi hiển thị của gauge ở state này (dial khóa đáy, overlay), KHÔNG lặp lại toàn bộ backend flow (Atomic Kill Switch, Frosted Glass toàn trang) — phần đó thuộc UC_4.9.2, dùng Markdown link tham chiếu. | — (ghi chú kỹ thuật cho Architect, không cần BA chốt) | — | ✅ Đã resolve qua research |
| QN-4.8.1-06 | [ROUND 2, 2026-08-16 — trigger từ review UC_4.12.2 LIVE] State label (right) — "Est. Bonus $[amount]" và "Promotion: Level [N]" lấy từ đâu, và có tooltip không? BR_4.8.1.4 trước đó đánh dấu [ASSUMPTION, pending confirmation] do ACCOUNT_METRICS/Current Level Detail không có field bonus. | — (câu hỏi mở, chưa có đề xuất cụ thể — cần BA/BE xác nhận nguồn field) | BA confirm: [N] = next level (current level + 1); [amount] = Bonus_Paid_To_Trader của level đó — cả hai lấy trực tiếp từ Table A (Forex)/Table B (Futures) theo asset class của trader, cho level kế tiếp. Không có tooltip hiển thị thêm ở field này. Áp dụng đồng thời cho SIM (UC_4.8.1) và LIVE (UC_4.12.2). | ✅ Confirmed — gỡ bỏ [ASSUMPTION] khỏi BR_4.8.1.4 |
Ghi chú Phase 2.2 — WBS Cross-UC Consistency Check
- CR Conflict Check: Đã đọc
References/CR/_CR_INDEX.md— không có CR nào tham chiếu trực tiếp PnL Gauge/module Overview SIM. - Same-category consistency (
STAGE 2.1. DASHBOARD SIM): Sibling UC: UC_4.7.1-4.7.5 (Global Shell), UC_4.9.1-4.9.4 (Failure & Recovery — cross-ref QN-4.8.1-01/05 ở trên). - Cross-folder dependency: UC_4.2.3 (Equity Curve, dashboard_common) ↔ UC_4.8.1 (mini sparkline) — xem QN-4.8.1-02.
- Orphan-UC check: UC_4.8.1 xác nhận tồn tại trong WBS qua
node script/parse_wbs.js --compact, categorySTAGE 2.1. DASHBOARD SIM, moduleOverview.
Ghi chú Phase 2.5 — Impact Analysis
Không có state-changing action trực tiếp trên widget PnL Gauge (read-only display, cập nhật qua WebSocket/REST). Các state-changing action liên quan (flatten position khi Hard Breach, purchase reset) đã được cover ở UC_4.9.2/UC_4.9.3.
Changelog
| Date | Version | Updated item | Before | After | Notes |
|---|---|---|---|---|---|
| 2026-08-08 | v1 | Initial creation | — | 5 QnA items | Init Flow Step 1+2 |
| 2026-08-10 | v1.1 | BA review — trả lời QN-4.8.1-01/02/04 | 3 mục ⏳ Chờ BA | 3 mục ✅ Đã chốt (QN-04 khác đề xuất ban đầu — có transition animation). QN-4.8.1-03 vẫn 🟡 cần làm rõ thêm (BA hỏi ngược "tại sao cần dữ liệu này") | BA (Trang Nguyen) trả lời trực tiếp qua chat 2026-08-10 |
| 2026-08-10 | v1.2 | BA cung cấp công thức đầy đủ cho QN-4.8.1-03 | 🟡 Cần làm rõ thêm | ✅ Đã chốt — dial 2 đầu (Hard Stop Market_Loss_When_Stopped ↔ Profit Target Profit_Target), kim = Net PnL live qua ACCOUNT_METRICS, thay thế hoàn toàn hướng đề xuất ban đầu (Notional làm 1 điểm mốc) | BA (Trang Nguyen) trả lời trực tiếp qua chat 2026-08-10 — UC_4.8.1 đã sẵn sàng 100% cho Step 3 |
| 2026-08-16 | v1.3 | BA review round 2 (trigger từ UC_4.12.2 LIVE review) — chốt QN-4.8.1-06 | BR_4.8.1.4 [ASSUMPTION, pending confirmation] cho nguồn bonus/next-level | ✅ Confirmed — next-level/bonus lookup trực tiếp Table A/B theo asset class, không tooltip; [ASSUMPTION] gỡ bỏ khỏi BR_4.8.1.4 và Screen Description dòng 5 | BA (Trang Nguyen) trả lời trực tiếp 2026-08-16 |