QnA Init Docs — UC_4.15.1: Soft Breach - Daily Loss Limit Hit (LIVE)
Ngày tạo: 2026-08-17 Phiên bản: v1.1 BA phụ trách: Huyen Dinh Trạng thái: ✅ Đã chốt — BA đã phản hồi toàn bộ QnA (2026-08-18)
BA directive (2026-08-18, override toàn bộ QnA dưới đây khi viết SRS): LIVE Soft Lock (UC_4.15.1) có cùng kiến trúc/flow với SIM Soft Lock (UC_4.10.1) — 3-step sequence Flatten → Lock → Reset, overlay behaviour, Auth0/dashboard isolation, rounding (CR-13), fee/commission exclusion... đều giống 100%. Điểm khác biệt DUY NHẤT là công thức tính threshold (LIVE dùng
Market_Loss_When_Stoppedtừ Table A/B thay vì SIM's flat 7.5% × Notional). Khi Architect viết SRS cho UC_4.15.1: bất kỳ phần nào giống SIM thì REFERENCE thẳng tới UC_4.10.1 (anchor link), KHÔNG viết lại nội dung. Chỉ viết riêng phần công thức/threshold khác biệt.
Input gốc do anh cung cấp (bảng Definition/Trigger/Business logic/UI-UX/Endpoints/Zapier flow/Table cho UC_4.15.1) được đối chiếu với UC_4.10.1 (SIM — cùng function, khác environment) và source
zapier_v7_full.txt/v7_full.txt/ QnA đã confirm. Các câu hỏi dưới đây chỉ nêu phần khác biệt LIVE vs SIM hoặc gap trong source — phần nào input đã khớp 100% với SIM/source thì không raise lại.
UC_4.15.1 — Soft Breach: Daily Loss Limit Hit (LIVE)
| 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.15.1-01 | 🔴**[CRITICAL] LIVE có flatten (force-close) open position khi Soft Breach không?** Input LIVE (Definition + Business logic step 3) chỉ nói "shift to Read-Only, cancel all working orders, block new entries" — không có bước flatten position đang mở. Trong khi SIM (UC_4.10.1) flatten TẤT CẢ open position trước khi lock (3-step: Flatten → Lock → Reset). Đây có phải là khác biệt có chủ đích giữa LIVE và SIM (LIVE để position đang mở tiếp tục chạy, chỉ cancel pending order + block order mới), hay input chỉ bị thiếu ý "flatten" khi soạn? | Theo đúng literal wording của input: LIVE Soft BreachKHÔNG flatten open position — chỉ cancel working orders (pending) + block new entry. Position đang mở tiếp tục chạy dưới Mark-to-Market, có thể tự đóng theo TP/SL riêng của nó hoặc tiếp tục cho tới khi trigger Hard Breach (Market_Loss_When_Stopped) hoặc reset_time. | Có flatten positions. LIVE Soft Lock dùng cùng 3-step sequence (Flatten → Lock → Reset) như SIM UC_4.10.1 — không viết lại nội dung, REF thẳng tới UC_4.10.1 §2 Trigger / BR_4.10.1.4. | ✅ Đã chốt |
| QN-4.15.1-02 | 🔴**[BLOCKING gap — Table A/B thiếu data Level 9-16]** Table A (Forex, zapier_v7_full.txt Appendix A) và Table B (Futures, Appendix B) có cột Market_Loss_When_Stopped để trống cho Level 9 đến Level 16 (Trader / Senior Trader 1 / Senior Trader 2) — chỉ có Severance_Pay/Retry_Discount/DTO_Days. Level 1-8 và Level 17-24 đã có đủ số. Vì Definition xác nhận Daily Loss Limit "Applies to all levels including Level 9+", worked example / bảng threshold cho L9-16 cần số thật, không thể tự suy ra. | ⚠️ No safe default — không thể tự bịa số tiền. Đề xuất: viết SRS với worked example đầy đủ cho L1-8 và L17-24 (đã có số), đánh dấu L9-16 là[BLOCKED — pending Table A/B data], không convert ra khỏi scope. | Không cần viết worked-example số cụ thể trong SRS. Chỉ cần define công thức (Daily_Loss_Limit = Market_Loss_When_Stopped × Daily_Loss_Ratio) tham chiếu Table A/B như data source — SRS không phải nơi liệt kê từng số tiền theo level. Gap Level 9-16 thiếu data không block việc viết SRS. | ✅ Đã chốt |
| QN-4.15.1-03 | 🟡 Gateway Futures —wording nào chuẩn? Input (dòng "3rd Party") ghi "Ironbeam FCM Rithmic Gateway (Live DMA)". Nhưng QnA-confirmed doc Stage 2 - Dashboard & Fomula (Settings).csv ghi "Rithmic Live FCM Gateway (Ironbeam)", và RFQ V7 (§2.2 Execution Gateways) ghi "Live FCM Rithmic Gateway" (không kèm "Ironbeam" trong tên gateway — Ironbeam chỉ là FCM cấp sub-account riêng, không phải tên gateway). Cùng nghĩa, khác thứ tự chữ — chuẩn hoá theo nguồn nào? | Dùng wording QnA-confirmed:"Rithmic Live FCM Gateway (Ironbeam)" — theo priority chain QnA (★★★) > Customer supplies (★★★, RFQ chỉ ghi "Live FCM Rithmic Gateway" không có Ironbeam). | Đồng ý assumption | ✅ Đã chốt |
| QN-4.15.1-04 | 🟡 Gateway Forex — input ghi**"MT5 Manager API or TraderEvolution Admin API - Live Sub Account under Forex Omnibus corporate account"**. Source (v7_full.txt) cho thấy đây thực chất là 2 layer riêng: (a) trader có sub-account riêng ST_LIVE_[ID] trên MT5/TraderEvolution, (b) lệnh route qua YourBourse Bridge và settle tại Omnibus corporate account của Stack Trading ở Forex.com/IBKR (layer LP, không phải "nằm dưới" sub-account MT5). Input hiện tại gộp 2 layer thành 1 câu — có cần viết tách rõ 2 layer trong SRS cho chính xác, hay giữ nguyên câu ngắn gọn như input? | Viết tách rõ 2 layer (không đổi business logic, chỉ chính xác hoá kiến trúc): trader sub-accountST_LIVE_[ID] → route qua YourBourse Bridge → settle tại Omnibus corporate account (Forex.com/IBKR). | ok | ✅ Đã chốt |
| QN-4.15.1-05 | 🟡MT5 flatten mechanism cho LIVE — có plugin riêng không? SIM UC_4.10.1 (BR_4.10.1.4) ghi "C++ MT5 Plugin (Sotatek-built) → flattens positions" cho MT5. Research không tìm thấy tên plugin này trong source — plugin flatten thực tế trong source là YourBourse Contest Stop Out (vendor-built, vendor-cài trên MT5 White Label server; Sotatek chỉ build C++ SDK wrapper qua P/Invoke để gọi Manager API, không phải build plugin flatten). Nếu QN-4.15.1-01 xác nhận LIVE Soft Breach không flatten position thì câu hỏi này moot cho UC này — nhưng cần biết: (a) MT5 LIVE 'Disable/Read-Only' đủ để enforce Read-Only mà không cần gọi plugin nào thêm? (b) Có nên sửa luôn label "Sotatek-built" ở UC_4.10.1 (SIM) vì có vẻ ghi sai nguồn? | Nếu QN-4.15.1-01 chốt "không flatten" → câu này moot, chỉ cần "MT5 Manager API 'Disable/Read-Only'" là đủ cho UC_4.15.1, không cần mention plugin flatten. Việc sửa label ở UC_4.10.1 (SIM) đề xuất để riêng, không xử lý trong UC này. | Không moot (QN-4.15.1-01 đã chốt "Có flatten positions"). (a) Không đủ. Theo QnA confirmed STAGE2-019 (Adrian Stack, 2026-07-20 — override RFQ V7): "the MT5 stop-out plugin has configurable failsafes to liquidate forcefully. Sotatek is scoped for building this plugin as a C++ MT5 plugin (not a third-party YourBourse plugin)". Lock (MT5 Manager API 'Disable/Read-Only') và Flatten (C++ MT5 Plugin — Sotatek-built) là 2 cơ chế tách biệt — Disable/Read-Only chỉ chặn order mới, không tự force-close position đang mở. UC_4.15.1 cần viết cả 2 bước, đồng bộ 100% với BR_4.10.1.4 (SIM): "API: MT5 Manager API 'Disable/Read-Only'" + "Flatten: C++ MT5 Plugin (Sotatek-built)". (b) Không sửa — label "Sotatek-built" ở UC_4.10.1 (SIM) đúng theo QnA confirmed, không phải lỗi ghi nguồn. (Source: QnA_STAGE2_DASHBOARD_EVALUATION.md STAGE2-019 ★★★ — thắng RFQ_ Stack Trading Prop Tech V7.pdf §2.2) | ✅ Đã chốt |
| QN-4.15.1-06 | 🟡Auth0/dashboard login account có tách biệt với trading account cho LIVE không? SIM UC_4.10.1 khẳng định rõ: dashboard login KHÔNG bị ảnh hưởng khi Soft Lock (trader vẫn xem được dashboard/chart/P&L). Không tìm thấy câu tương tự ghi riêng cho LIVE trong source — nhưng kiến trúc chung (Auth0 session, endpoint "Set Account State" chỉ tác động execution gateway) là environment-agnostic. Xác nhận statement này áp dụng y hệt cho LIVE? | Có — áp dụng y hệt SIM: Auth0/dashboard session không bị ảnh hưởng, chỉ trading/execution account bị Read-Only. | Có, y hệt — REF thẳng tới UC_4.10.1 §4 Post-conditions, không viết lại. | ✅ Đã chốt |
| QN-4.15.1-07 | 🟢Daily_PnL/Net_P&L của LIVE có loại trừ fee/commission/swap không? SIM đã confirm (QN-4.10.1-03): Net_P&L KHÔNG trừ fee/commission (tính riêng), lấy từ ACCOUNT_METRICS/POSITION_METRICS. Với LIVE (tiền thật), swap/rollover fee có ảnh hưởng thực tế hơn SIM — xác nhận LIVE dùng cùng định nghĩa (không trừ fee vào Net_P&L dùng để check breach) hay LIVE cần cộng thêm swap vào P&L check breach? | Dùng cùng định nghĩa như SIM:Net_P&L/Daily_PnL dùng để check breach không bao gồm fee/commission/swap — các phí này tracked riêng, không ảnh hưởng threshold check. | Tương tự SIM — REF thẳng tới UC_4.10.1 §2 Trigger — Net P&L definition, không viết lại. | ✅ Đã chốt |
| QN-4.15.1-08 | 🟢**[PATTERN] Formula notation — có nên viết qua biến trung gian Daily_Loss_Limit như SIM không?** Input viết trực tiếp Daily_PnL <= Market_loss_when_stopped / 3. SIM UC_4.10.1 viết qua biến trung gian: Daily_Loss_Limit = Absolute_Stop_Loss × Daily_Loss_Ratio (Table C, 1/3) rồi mới Net_P&L <= −Daily_Loss_Limit. Cùng giá trị toán học, chỉ khác cách trình bày (source rõ ràng hơn qua Table C). Có nên viết LIVE theo cùng pattern (Daily_Loss_Limit = Market_Loss_When_Stopped × Daily_Loss_Ratio) để đồng bộ SIM + trace được về Table C, thay vì hard-code "/3"? | Có — viết theo cùng pattern với SIM để đồng bộ format + trace nguồn Table C rõ ràng, giá trị không đổi (1/3 = Daily_Loss_Ratio). | Ok — dùng pattern Daily_Loss_Limit = Market_Loss_When_Stopped × Daily_Loss_Ratio (khác SIM chỉ ở biến Market_Loss_When_Stopped thay cho Absolute_Stop_Loss; Daily_Loss_Ratio = 1/3, Table C, giống SIM 100%). | ✅ Đã chốt |
Changelog
| Date | Version | Updated item | Before | After | Notes |
|---|---|---|---|---|---|
| 2026-08-17 | v1 | Initial creation | — | 8 QnA items | Init Flow Step 1+2 — challenged against UC_4.10.1 (SIM), zapier_v7_full.txt Table A/B/C, v7_full.txt gateway sections, and QnA_STAGE2_SETTINGS_CAREER_VIRAL_EN.md (LUC-FRM-01) / QnA_STAGE2_FAILURE_AND_RECOVERY.md (FR-02) |
| 2026-08-18 | v1.1 | All 8 QnA items — Status column | ⏳ Chờ BA (all) | ✅ Đã chốt (all) | BA (Huyen Dinh) đã trả lời toàn bộ QnA trực tiếp trong chat. BA directive bổ sung: LIVE Soft Lock giống SIM Soft Lock 100% về flow/architecture, chỉ khác công thức threshold (Market_Loss_When_Stopped thay cho Absolute_Stop_Loss) — mọi phần giống SIM khi viết SRS PHẢI reference tới UC_4.10.1, không viết lại nội dung. Đã bổ sung anchor-link REF cho QN-01, 06, 07, 08. |