UC 8.2.8
Flow 11 - Waitlist Processor: khi Pod Leader có suất trống, giữ chỗ và mời trader phù hợp nhất trong waitlist xác nhận qua email Klaviyo trong 48 giờ
| Field | Value |
|---|---|
| BA in Charge | Anh Hoang |
| Date Created | 2026-10-12 |
| Version | v1.12 |
| Document References | Zapier Integration V7.pdf (§Flow 10 Step 4–5, §Flow 11, §Flow 12, §Flow 15A, §Flow 15B, §3.3 Table E — naming reference only, Pod_Leader_Registry is native PostgreSQL, not a live Zapier Table) · RFQ_ Stack Trading Prop Tech V7.pdf (§Process Waitlist Queue, §4.4 #11) · CR-20260818-001 (Flow 7 — Pod Impact & Dispersal) · QnA from clients — STAGE 6: Pod System Flow 10 → 11 (POD-WAIT-02/03/05/07/08/15/16/17/18/21, POD-PLAN-11) · QnA_init_docs.md (A-10, A-19…A-21, N-01…N-09) · Common Rules CR-08, CR-18 |
UC_8.2.8 — Flow 11: Waitlist Processor
🇻🇳 Section này viết bằng tiếng Việt để BA review. Mọi ID, anchor, tên field/API và text hiển thị cho user giữ nguyên tiếng Anh.
1. Overview
| Field | Content |
|---|---|
| ID | UC_8.2.8 |
| Use Case | Flow 11: Waitlist Processor |
| Description | UC này xử lý hàng chờ vào pod. Khi một Pod Leader có chỗ trống, hệ thống chọn trader phù hợp nhất trong hàng chờ, giữ chỗ cho trader đó và gửi email mời. Trader xác nhận trong 48 giờ thì được vào pod. Không xác nhận thì trader bị loại khỏi hàng chờ, và chỗ trống được mời cho người kế tiếp. |
| Phạm vi | UC này gồm việc mời trader trong waitlist khi có suất trống và vòng đời status pod của trader. Không gồm việc vào waitlist lần đầu và bước gán pod (UC_8.2.1). |
| Zapier Flow | Flow 11 (Waitlist Processor) |
| Zapier Table | Pod_Leader_Registry (bảng PostgreSQL của Middleware: Asset_Class, Trading_Style, Max_Capacity, Current_Count, Status) |
| API | Process Waitlist Queue API (POST /process-waitlist-queue) · Klaviyo API (payload Pod_Spot_Available_Confirm) · Klaviyo webhook callback khi trader bấm link |
| Cron Job task | Không có |
| 3rd Party | Zapier, Klaviyo |
2. Trigger
- Một Pod Leader
Activecó thêm suất trống. Có 4 sự kiện tạo ra suất trống (BR_8.2.8.1). Flow nào tạo ra suất trống thì flow đó kích hoạt Zap Flow 11 ngay sau đó.
3. Pre-conditions
- Leader đang hoạt động bình thường (
StatuslàActive). - Leader còn suất trống, tức là số mentee hiện có (
Current_Count) nhỏ hơn số mentee tối đa (Max_Capacity). VD: leader cóMax_Capacitylà 10 vàCurrent_Countlà 9 thì còn 1 suất. - Waitlist có ít nhất 1 trader, xếp theo
Join_Datelà thời điểm trader vào waitlist (BR_8.2.8.2).
4. Post-conditions
- Trader xác nhận hợp lệ: trader vào pod của leader, status pod là
Assigned. - Trader không bấm link trong 48 giờ: status pod của trader thành
Waitlist_Ghost;Current_Countcủa leader giảm 1 để trả lại suất đã giữ; suất đó được mời cho người kế tiếp. - Không có trader phù hợp: suất để trống, không ai được mời.
5. Basic Flow
5.1 Kiểm tra waitlist (Flow 11 — Trigger, Check)
Stage 1 — Zap bắt đầu
- Trigger: Khi một flow khác vừa tạo ra suất trống cho một leader
Active, flow đó kích hoạt Zap Flow 11 ngay sau đó cho đúng leader đó (BR_8.2.8.1). VD: Flow 4 vừa cho 1 mentee lên Level 7 và rời pod, thì Flow 4 kích hoạt Zap Flow 11 cho leader của mentee đó. Zap nhận tín hiệu bằng cách nào và kèm dữ liệu gì chưa chốt (§8 #6). - Check: Zap kiểm tra waitlist có ai đang chờ không. Ai được tính là đang ở waitlist xem BR_8.2.8.2. Hệ thống không dùng bộ đếm
Pod_Waitlist_Count, nên Zap kiểm tra bằng cách nào chưa chốt (§8 #6). Waitlist không có ai, hoặc Zap lỗi, thì xem E_8.2.8.1, E_8.2.8.2.
5.2 Chọn trader và giữ chỗ (Process Waitlist Queue API)
Zapier Flow 11 không có dòng riêng cho việc gọi API này. API nằm ở RFQ V7 và trả trader để Zapier gửi email mời, nên được đặt giữa bước Check và bước Engagement Check. Các bước 4 đến 7 chạy bên trong API; API chỉ trả kết quả sau khi làm xong.
Stage 2 — Chọn trader
-
Zap gọi
Process Waitlist Queue API(POST /process-waitlist-queue) để Middleware chọn trader cho leader. Mỗi suất trống gọi 1 lần. VD: 3 mentee rời pod cùng lúc thì Zap gọi API 3 lần và nhận về 3 trader khác nhau.Input field Value leader_idLeader_IDcủa leader vừa có suất trống. RFQ V7 ghi trường này là không bắt buộc, nhưng Flow 11 luôn truyền vì waitlist được xét theo đúng leader vừa có suất. Không truyền thì xử lý thế nào chưa chốt (§8 #8) -
Middleware khoá dòng của leader trong
Pod_Leader_Registry. Trong lúc lần gọi này đang xử lý, các lần gọi khác phải chờ (BR_8.2.8.7). Leader không tồn tại, không cònActivehoặc đã hết suất thì xem E_8.2.8.3. -
Middleware chọn 1 trader theo BR_8.2.8.3, chỉ xét trader có status pod
Waitlist. Middleware bỏ qua trader đangInactive_Holdvà trader có tài khoản giao dịch đang bị khoá (Locked) do DTO hoặc Hiatus. Middleware khoá dòng của trader được chọn. Nếu trader đó đang bị một lần gọi khác khoá thì Middleware bỏ qua và xét người kế tiếp, để các lần gọi cùng lúc không chọn trùng 1 trader. VD: 2 lần gọi chạy cùng lúc cho 2 suất; lần thứ nhất đã khoá trader A nên lần thứ hai bỏ qua A và chọn trader B. Không có ai phù hợp thì xem E_8.2.8.4.
Stage 3 — Giữ chỗ
-
Middleware giữ chỗ ngay cho trader vừa chọn, ghi cùng lúc 3 thay đổi:
- Tăng
Current_Countcủa leader thêm 1. - Đổi status pod của trader từ
WaitlistsangPending_Pod_Confirmation(BR_8.2.8.4). - Lưu thời điểm gửi lời mời, dùng để tính hạn 48 giờ của link xác nhận.
Ghi lỗi thì xem E_8.2.8.5.
- Tăng
-
Middleware trả
200 OKcho Zapier:Output field Value next_candidate_idUUID của trader vừa được chọn và giữ chỗ queue_positionVị trí của trader trong waitlist theo Join_Datetại lúc được chọn. Chỉ dùng nội bộ để ghi log, không hiển thị cho traderZapier gọi trùng hoặc gọi dư đều an toàn (BR_8.2.8.7).
-
Vì suất đã được tính vào
Current_Count, Flow 10 không thấy suất này khi ghép pod cho trader mới đăng ký. Nhờ vậy trader được mời không bao giờ bấm link hợp lệ rồi bị báo hết chỗ.
5.3 Gửi lời mời (Flow 11 — Engagement Check)
Stage 4 — Gửi email qua Klaviyo
-
Sau khi giữ chỗ xong, payload
Pod_Spot_Available_Confirmđược gửi tới Klaviyo API để Klaviyo soạn email mời. Sau bước này Zap Flow 11 kết thúc. Middleware hay Zapier là bên gửi chưa chốt (§8 #7). Sotatek dựng dữ liệu gửi sang Klaviyo, không soạn nội dung email.Input field Value user_idUUID của trader được mời Email trader Địa chỉ để Klaviyo gửi lời mời Link xác nhận Link có sẵn user_idlàm tham số, để khi trader bấm thì hệ thống biết ai bấm. Link chỉ dùng được 1 lần và hết hạn sau 48 giờ. Trader không cần đăng nhập khi bấm. Link trỏ về trang nào chưa chốt (§8 #2)Hạn xác nhận Thời điểm gửi lời mời cộng 48 giờ, theo giờ UTC (CR-08), để email ghi rõ hạn. VD: gửi lúc 10:00 UTC ngày 15 thì hạn là 10:00 UTC ngày 17 -
Mỗi lần mời chỉ gửi email 1 lần. Zapier gọi lại
Process Waitlist Queue APIthì trader đã được mời không nhận lời mời lần nữa, vì status pod đã chuyển sangPending_Pod_Confirmation. Email này dùng để lọc ra trader còn quan tâm (BR_8.2.8.6). Gửi sang Klaviyo lỗi thì xem E_8.2.8.6.
5.4 Trader bấm link (Flow 11 — Wait)
Các bước 13 và 14, cùng §5.6, chạy bên trong endpoint nhận Klaviyo webhook callback; endpoint chỉ trả kết quả sau khi làm xong.
Stage 5 — Nhận lần bấm
-
Klaviyo gửi email cho trader và theo dõi trader có bấm link không.
-
Khi trader bấm link, Klaviyo gửi Klaviyo webhook callback (
POST) về Middleware. Nguồn không đặt tên endpoint này; tên, đường dẫn và tên trường trả về do BE chốt trong OpenAPI spec. Trader thấy trang gì sau khi bấm chưa chốt (§8 #2).Input field Value user_idBắt buộc. Lấy từ tham số trên link xác nhận Input sai hoặc
user_idkhông tồn tại thì xem E_8.2.8.7.
Stage 6 — Kiểm tra lại
- Middleware khoá dòng của trader trong
Users, để các lần bấm khác của cùng trader phải chờ. - Middleware kiểm tra lại trader và leader theo BR_8.2.8.5, vì từ lúc mời tới lúc bấm có thể đã gần 48 giờ trôi qua. Đạt cả 2 kiểm tra thì sang §5.6. VD: trader được mời lúc 10:00 ngày 15 và bấm link lúc 09:00 ngày 17; trong lúc đó leader bị
Suspended, nên Middleware ghép trader sang leader khác (E_8.2.8.12). Trường hợp suất bị người khác lấy mất không thể xảy ra, vì suất đã được giữ từ lúc gửi lời mời. Các trường hợp không đạt xem E_8.2.8.8 đến E_8.2.8.13.
5.5 Trader không bấm link trong 48 giờ (Flow 11 — IF No Click)
Stage 7 — Đánh Ghost
- Trader không bấm link trong 48 giờ thì Klaviyo loại trader và báo cho hệ thống để mời người kế tiếp. Klaviyo báo về Middleware bằng cách nào, Middleware nhận ở đâu, và cách đếm đủ 48 giờ, đều chưa chốt; UC này chưa có cron job (§8 #1).
- Trader bị loại khỏi waitlist. Status pod của trader thành
Waitlist_Ghost. "Ghost" là trader đã được mời nhưng không phản hồi. Từ đây hệ thống xử lý trader như người chưa có pod: thẻ My POD hiện nút [Join a POD]. Muốn vào pod lại, trader bấm nút này và gửi lại form Style theo Flow 10, được ghép như người mới; nếu phải vào waitlist thì đứng cuối hàng (Ref: UC_8.2.1 BR_8.2.1.1). Current_Countcủa leader giảm 1 để trả lại suất đã giữ cho trader này.- Việc giảm
Current_Countkích hoạt lại Zap Flow 11 cho leader này, quay về bước 1, để mời người kế tiếp. Cách kích hoạt chưa chốt (§8 #6).
5.6 Trader vào pod (Flow 11 — Assign)
Stage 8 — Gán pod
-
Middleware chạy bước gán pod của Flow 10 ngay trong endpoint nhận Klaviyo webhook callback (UC_8.2.1 §5.4). Khác biệt duy nhất: Middleware không tăng
Current_Countlần nữa, vì đã tăng lúc giữ chỗ ở bước 6. Status pod của trader thànhAssigned. Mọi thay đổi ở bước 14 (nhánh từ chối hoặc ghép lại) và ở bước này được ghi xuống database cùng nhau; lỗi giữa chừng thì huỷ toàn bộ. -
Middleware trả
200 OKkèm kết quả xử lý, là 1 trong các trường hợp:- Trader đã vào pod của leader đã giữ chỗ.
- Leader cũ không còn
Active, trader đã được ghép sang leader khác. - Trader về
Waitlist. - Trader bị từ chối vì không còn đủ điều kiện.
- Lời mời đã quá 48 giờ, không ghi gì.
- Bỏ qua và không ghi gì, vì không có lời mời đang chờ.
Tên trường chứa kết quả do BE chốt. Bấm trùng thì xem E_8.2.8.14.
-
Chỉ sau khi ghi xong, Middleware mới làm tiếp 2 việc:
- Gửi sự kiện
Pod_Assignment_Confirmationsang Klaviyo để Klaviyo email cho trader (Ref: UC_8.2.1 API_8.2.1.3). - Tự gán role
Pod Membertrên Discord cho trader, theo cách xử lý củaAPI Manage Discord Role(POST /manage-discord-role), không đi qua Zap (Ref: UC_8.2.1 API_8.2.1.2).
Gửi email hoặc gán role lỗi thì xem E_8.2.8.15.
- Gửi sự kiện
-
Thẻ My POD trên dashboard của trader chuyển từ Pending sang Matched (Ref: UC_4.14.2 BR_4.14.2.13 sự kiện 4).
5.7 Cập nhật waitlist (Flow 11 — Decrement)
- Hệ thống không dùng bộ đếm
Pod_Waitlist_Countghi trong RFQ V7, nên bước này không ghi gì thêm. Waitlist là các trader có status podWaitlist, xếp theoJoin_Date; BE tự quyết cách lưu. Trader rời waitlist khi status pod đổi, VD thànhAssignedở bước 19 hoặcWaitlist_Ghostở bước 16. Danh sách đầy đủ xem BR_8.2.8.2.
6. Exceptional Flows
| Exception ID | Exception | Condition | System Handling / Fallback |
|---|---|---|---|
| E_8.2.8.1 | Waitlist không có ai | Bước Check không thấy trader nào đang chờ. | Zap dừng, không mời ai. |
| E_8.2.8.2 | Zap lỗi | Một bước của Zap Flow 11 bị lỗi. | Zapier tự chạy lại bước đó theo chế độ của gói đang dùng. Vẫn lỗi thì Zapier gửi "Zap Error" (ghi tên Zap và bước lỗi) vào kênh Slack Operations. Sotatek chỉ cấu hình tính năng có sẵn này, không viết xử lý lỗi riêng. |
| E_8.2.8.3 | Leader không hợp lệ hoặc hết suất (Ref: BR_8.2.8.7) | leader_id không tồn tại, leader không còn Active, hoặc Current_Count đã bằng hoặc lớn hơn Max_Capacity. | Middleware trả 200 OK với next_candidate_id là null, không ghi gì. Zapier không bị báo lỗi. Zap dừng, suất để trống. |
| E_8.2.8.4 | Không có trader phù hợp | Waitlist không có ai, hoặc không có trader nào cùng Asset_Class với leader. | Middleware trả 200 OK với next_candidate_id là null, không ghi gì. Zap dừng, suất để trống. |
| E_8.2.8.5 | Lỗi khi giữ chỗ | Ghi lỗi giữa chừng ở bước 6, hoặc lỗi hệ thống (database lỗi, hết thời gian chờ). | Middleware huỷ cả 3 thay đổi, nên không bao giờ có trường hợp Current_Count đã tăng mà trader vẫn ở Waitlist. Lỗi hệ thống thì Middleware trả 500; Zapier nhận lỗi và chạy lại theo E_8.2.8.2. |
| E_8.2.8.6 | Gửi sang Klaviyo lỗi sau khi đã giữ chỗ | Payload Pod_Spot_Available_Confirm không gửi được. | Cách xử lý chưa chốt (§8 #5). |
| E_8.2.8.7 | Callback không hợp lệ | Thiếu user_id hoặc sai định dạng; hoặc user_id không tồn tại. | Thiếu hoặc sai định dạng thì Middleware trả 400 và không ghi gì. Không tồn tại thì Middleware trả 200 OK, bỏ qua, Klaviyo không bị báo lỗi. |
| E_8.2.8.8 | Không có lời mời đang chờ (Ref: BR_8.2.8.7, CR-18) | Status pod của trader không còn là Pending_Pod_Confirmation: trader bấm link lần 2, Klaviyo gửi trùng cho cùng 1 lần bấm, hoặc trader không có lời mời nào. | Middleware bỏ qua, trả 200 OK và không ghi gì. |
| E_8.2.8.9 | Lời mời đã quá 48 giờ | Trader bấm link sau 48 giờ kể từ lúc gửi lời mời. | Lời mời đã hết hạn và bị chặn. Middleware trả 200 OK và không ghi gì. VD: lời mời gửi lúc 10:00 ngày 15, trader bấm lúc 11:00 ngày 17 (giờ thứ 49). Lúc này trader đã bị đánh Ghost (§5.5): Current_Count đã giảm và người kế tiếp đã được mời. |
| E_8.2.8.10 | Trader được mời bị Flow 12 quét trúng khi đang chờ bấm | Trader đang Pending_Pod_Confirmation thì bị cron Flow 12 (Zombie Protocol) quét trúng vì 30 ngày không tạo lệnh. | Xử lý như trader không bấm link (§5.5), ngay lúc Flow 12 chạy: status pod thành Waitlist_Ghost (không đặt Inactive_Hold) và trader rời waitlist. Current_Count của leader đã giữ chỗ giảm 1 lần duy nhất để trả lại suất, rồi Zap Flow 11 được kích hoạt lại cho leader đó để mời người kế tiếp. Trader bấm link sau đó thì xử lý theo E_8.2.8.8. VD: trader A được mời lúc 10:00 ngày 15, cron Flow 12 sáng ngày 16 quét trúng A. A thành Waitlist_Ghost ngay, suất được mời cho người kế tiếp; chiều ngày 16 A bấm link thì hệ thống bỏ qua. |
| E_8.2.8.11 | Trader không còn đủ điều kiện (từ chối) (Ref: BR_8.2.8.5) | Kiểm tra 1 không đạt. | Current_Count của leader đã giữ chỗ giảm 1 để trả lại suất. Middleware kích hoạt lại Zap Flow 11 cho leader đó để mời người kế tiếp. Middleware từ chối trader và trả 200 OK; trader thấy thông báo This invitation is no longer valid. Status pod của trader thành null (không thuộc pod nào) và trader rời waitlist. |
| E_8.2.8.12 | Leader không còn Active (ghép lại) (Ref: BR_8.2.8.5) | Kiểm tra 2 không đạt: pod của leader đã bị rã qua Flow 15A hoặc Flow 15C. | Middleware ghép trader sang leader khác theo UC_8.2.1 BR_8.2.1.2. Có leader phù hợp còn suất thì Middleware chạy đầy đủ UC_8.2.1 §5.4, gồm cả tăng Current_Count của leader mới; status pod thành Assigned. Không có leader phù hợp thì status pod về Waitlist và trader đứng cuối hàng: Join_Date được ghi lại là thời điểm trader về waitlist. VD: trader A bấm link lúc 09:00 ngày 17 và về waitlist; trader B đã vào hàng từ ngày 16 thì B đứng trước A. Cả 2 trường hợp đều trả 200 OK. |
| E_8.2.8.13 | Lỗi hệ thống khi xử lý callback | Database lỗi hoặc hết thời gian chờ. | Middleware trả 500, huỷ toàn bộ thay đổi và không ghi gì. |
| E_8.2.8.14 | Bấm trùng sau khi đã vào pod (Ref: CR-18) | Trader bấm lại, hoặc Klaviyo báo trùng. | Lần đầu Middleware đổi status pod từ Pending_Pod_Confirmation sang Assigned. Các lần sau Middleware thấy status đã đổi nên bỏ qua, trả 200 OK và không ghi gì. |
| E_8.2.8.15 | Gửi email hoặc gán role lỗi sau khi đã gán pod | Bước 21 lỗi. | Middleware vẫn trả 200 OK. Trader vẫn ở trong pod, việc vào pod không bị huỷ. Cách xử lý tiếp xem UC_8.2.1 A-05. |
7. Business Rules
| BR_ID | Rule Description |
|---|---|
| BR_8.2.8.1 | Sự kiện kích hoạt Flow 11: xem chi tiết tại §7.1. |
| BR_8.2.8.2 | Waitlist — ai vào, đứng ở đâu: xem chi tiết tại §7.2. |
| BR_8.2.8.3 | Chọn trader cho suất trống: xem chi tiết tại §7.3. |
| BR_8.2.8.4 | Status pod của trader: xem chi tiết tại §7.4. |
| BR_8.2.8.5 | Kiểm tra lại khi trader bấm link: Middleware kiểm tra 2 điều kiện:- Kiểm tra 1: trader còn đủ điều kiện, tức status tài khoản không phải Failed (trader SIM bị Hard Breach hoặc Resign) hoặc Terminated (trader LIVE bị Hard Breach hoặc Resign), và Current_Level nhỏ hơn 7. Không đạt thì từ chối (E_8.2.8.11).- Kiểm tra 2: leader đã giữ chỗ vẫn Active, tức pod chưa bị rã qua Flow 15A hoặc Flow 15C. Không đạt thì Middleware chạy bước ghép pod của Flow 10 cho trader (E_8.2.8.12).Đạt cả 2 thì trader vào pod (§5.6). |
| BR_8.2.8.6 | Ba email Klaviyo của Pod: xem chi tiết tại §7.5. |
| BR_8.2.8.7 | Khoá dữ liệu và xử lý gọi trùng (áp dụng cho Process Waitlist Queue API và endpoint nhận Klaviyo webhook callback):- Đường dẫn và định dạng chi tiết của 2 endpoint do Sotatek chốt trong OpenAPI spec của Middleware. UC này chỉ chốt input, output và cách xử lý.- Lời gọi không đủ điều kiện xử lý: Middleware trả 200 OK, bỏ qua và không ghi gì (CR-18). VD: user_id không tồn tại, hoặc trader không còn ở Pending_Pod_Confirmation.- Mọi thời điểm ghi database theo chuẩn CR-08 (giờ UTC, ISO 8601, chính xác tới mili giây).- Bắt buộc khoá dòng khi chọn trader và khi giữ chỗ, để các lần gọi cùng lúc không chọn trùng 1 trader.- Chỉ Middleware được ghi Current_Count (Ref: UC_8.2.1 BR_8.2.1.5).- Zapier gọi trùng hoặc gọi dư Process Waitlist Queue API đều an toàn: mỗi lần gọi chỉ lấp suất thực sự còn trống lúc Middleware khoá dòng leader; leader đã hết suất thì trả next_candidate_id là null và không ghi gì, nên Current_Count không bao giờ vượt Max_Capacity; trader đã được mời không bị mời lại vì status pod đã rời Waitlist. VD: leader còn 1 suất nhưng Zapier gọi 2 lần. Lần 1 chọn trader A và tăng Current_Count lên bằng Max_Capacity; lần 2 thấy đã hết suất nên trả null. |
7.1 BR_8.2.8.1 — Sự kiện kích hoạt Flow 11
Flow 11 chạy mỗi khi một leader Active có thêm suất trống. Flow nào gây ra sự kiện thì flow đó gọi Flow 11 ngay sau đó.
| # | Sự kiện | Nguồn |
|---|---|---|
| 1 | Current_Count giảm, tức một mentee rời pod hoặc suất đang giữ cho trader được mời được trả lại:- Mentee lên Level 7 nên tự rời pod (Flow 4, UC_8.1.1 Stage 2 bước 3)- Mentee bị Terminated (trader LIVE bị Hard Breach hoặc Resign), xử lý ở bước Pod Impact & Dispersal (Flow 7, UC_4.17.2 BR_4.17.2.10)- Mentee 30 ngày không giao dịch nên chuyển sang Inactive_Hold (Flow 12)- Operations chuyển mentee sang pod khác qua POST /admin-pod-reassignment, nên pod cũ có thêm suất (UC_8.2.9)- Trader được mời không bấm link trong 48 giờ (§5.5)- Trader được mời bấm link nhưng bị từ chối (E_8.2.8.11)- Trader được mời bị Flow 12 quét trúng khi đang chờ bấm link (E_8.2.8.10) | Flow 4, Flow 7, Flow 12, Flow 15A và UC này |
| 2 | Leader mới: một Pod Leader mới được thêm vào Pod_Leader_Registry với Status là Active. Flow 11 lấp ngay các suất của pod mới | Flow 15B (UC_8.2.10) |
| 3 | Tăng Max_Capacity: Operations tăng số mentee tối đa của một leader Active. Flow 11 lấp phần suất tăng thêm. VD: tăng từ 8 lên 10 thì có thêm 2 suất để mời | Operations |
| 4 | Leader hoạt động lại: leader đang Suspended được chuyển về Active và vẫn còn suất trống | — |
- Chỉ xét leader
Active. Khi leader bịSuspendedhoặcTerminated, cả pod bị rã qua Flow 15A (mentee được ghép sang leader khác hoặc vào waitlist). Flow 11 không mời ai vào pod của leader đó. - Giảm
Max_Capacitykhông phải sự kiện kích hoạt Flow 11. Giảm xuống thấp hơn số mentee đang có thì hệ thống không đẩy mentee nào ra. VD: pod có 10 mentee, Operations giảmMax_Capacitytừ 10 xuống 8 thì cả 10 mentee vẫn ở lại. Flow 11 chỉ mời người mới khi số mentee tự giảm xuống dướiMax_Capacity; VD pod trên giảm dần còn 7 mentee thì mới có 1 suất để mời. Không cần code thêm, vì điều kiện "Current_Countnhỏ hơnMax_Capacity" đã tự chặn.
7.2 BR_8.2.8.2 — Waitlist: ai vào, đứng ở đâu
Waitlist là hàng chờ có thứ tự: trader có Join_Date sớm hơn thì đứng trước (Ref: CR-08). VD: trader A vào waitlist ngày 10, trader B vào ngày 12 thì A đứng trước B.
| Cách vào waitlist | Vị trí trong hàng | UC sở hữu |
|---|---|---|
Trader gửi form Style nhưng không còn leader nào cùng Asset_Class còn suất | Cuối hàng | UC_8.2.1 §5.5 |
Leader bị Suspended hoặc Terminated, và Flow 15A không ghép được trader sang leader khác | Cuối hàng, tính từ lúc trader vào waitlist | UC_8.2.9 |
Trader đang chờ trong waitlist thì bị Inactive_Hold, sau đó kích hoạt lại tài khoản | Giữ Join_Date gốc, tức về lại vị trí cũ | Flow 12 |
Trader đang ở pod thì bị Inactive_Hold, sau đó kích hoạt lại tài khoản; bước ghép pod của Flow 10 không tìm được leader cùng Asset_Class còn suất | Cuối hàng. Join_Date là thời điểm trader vào waitlist | Flow 12 · UC_8.2.1 |
Trader bấm link nhưng leader không còn Active và không ghép được sang leader khác | Cuối hàng. Join_Date là thời điểm trader về waitlist | UC này (E_8.2.8.12) |
Join_Datelà ngày vào waitlist, khác vớipod_join_datelà ngày vào pod. Vào waitlist không đổipod_join_date, vàpod_join_datekhông được dùng để xếp hàng.- Trader đang chờ thì bị
Inactive_Hold(30 ngày không giao dịch, Zombie Protocol của Flow 12): trader vẫn giữ bản ghi vàJoin_Date, nhưng bị bỏ qua khi chọn người. Khi trader bấm Reactivate (Flow 12), status pod vềWaitlistvà trader đứng đúng vị trí cũ. - Trader đang ở pod thì bị
Inactive_Hold, sau đó kích hoạt lại: hệ thống chạy lại bước ghép pod của Flow 10 như với người mới (UC_8.2.1 BR_8.2.1.2). Hệ thống không ưu tiên pod cũ; trader chỉ về lại pod cũ khi bước ghép tình cờ chọn đúng leader đó. Không có leader cùngAsset_Classcòn suất thì trader vào waitlist, đứng cuối hàng. VD: mentee A thuộc pod của leader X, bịInactive_Holdnên suất được mời cho trader B. A kích hoạt lại; leader Y cùngAsset_Classcó ít mentee hơn thì A vào pod của Y, không chờ suất ở pod X. - Trader đang chờ bấm link (
Pending_Pod_Confirmation) thì bị Flow 12 quét trúng: xử lý như không bấm link, status pod thànhWaitlist_Ghost(E_8.2.8.10). - Trader đang chờ mà tài khoản giao dịch bị khoá (Locked) do DTO hoặc Hiatus: trader vẫn giữ
Join_Datenhưng bị bỏ qua khi chọn người, và được xét lại khi tài khoản vềActive. - Trader rời waitlist khi: status pod thành
Assigned(đã vào pod); status pod thànhWaitlist_Ghost(không bấm link trong 48 giờ, hoặc bị Flow 12 quét trúng khi đang chờ bấm link); status pod thànhnull(bị từ chối lúc bấm link, E_8.2.8.11); tài khoản giao dịch thànhFailed(trader SIM bị Hard Breach hoặc Resign) hoặcTerminated(trader LIVE bị Hard Breach hoặc Resign); hoặc trader lên Level 7 trở lên (thành Alumni). - Email
Pod_Waitlist_Notificationgửi 1 lần mỗi khi trader vào waitlist qua Flow 10, Flow 15A hoặc Flow 12. Không gửi email định kỳ báo vị trí. - Waitlist không có hạn. Chờ bao lâu cũng được, waitlist dài không kéo theo xử lý tự động nào; Operations tự lo bổ sung Pod Leader.
- Dashboard không hiển thị vị trí trong hàng hay thời gian chờ ước tính (Ref: UC_4.14.2 BR_4.14.2.5).
7.3 BR_8.2.8.3 — Chọn trader cho suất trống
Middleware không xét chung cả waitlist mà xét riêng cho leader vừa có suất trống. Chỉ xét trader có status pod Waitlist; bỏ qua trader Inactive_Hold và trader có tài khoản giao dịch đang Locked do DTO hoặc Hiatus.
| Thứ tự | Tiêu chí | Quy tắc |
|---|---|---|
| 1 | Asset_Class | Bắt buộc cùng loại với leader, giống UC_8.2.1 BR_8.2.1.2. Không gán trader Forex cho leader Futures, kể cả khi trader đó chờ lâu nhất |
| 2 | Trading Style | Ưu tiên trader có Style nằm trong danh sách Style của leader. Không ai khớp Style thì vẫn chọn trader cùng Asset_Class |
| 3 | Join_Date | Trong cùng một nhóm, trader vào waitlist sớm hơn được chọn |
VD: một leader Futures vừa có 1 suất, danh sách Style của leader có Scalping. Waitlist có 3 trader:
- Trader A chơi Forex, vào ngày 1: bị loại vì khác
Asset_Class. - Trader B chơi Futures, Style Swing, vào ngày 2.
- Trader C chơi Futures, Style Scalping, vào ngày 5.
Middleware chọn C. B vào sớm hơn, nhưng C khớp Style của leader nên được ưu tiên.
Asset_Classđọc từ bảngUsers. Trading Style đọc từ profile trader đã lưu ở Flow 10.- Nhiều lần chọn chạy cùng lúc thì mỗi lần phải chọn một trader khác nhau, không được chọn trùng (BR_8.2.8.7).
7.4 BR_8.2.8.4 — Status pod của trader
- Status pod lưu ở cột riêng (VD
pod_status), tách khỏi cột status tài khoản giao dịchusers.status, để hai loại status không ghi đè lên nhau. - Trader được tính là đang ở waitlist khi status pod là
Waitlist,Inactive_HoldhoặcPending_Pod_Confirmation.
| Status | Nghĩa | Đặt bởi |
|---|---|---|
null | Trader không thuộc pod nào và không ở waitlist: chưa từng tham gia pod, hoặc đã rời pod hay rời waitlist vì tài khoản thành Failed (trader SIM bị Hard Breach hoặc Resign) hoặc Terminated (trader LIVE bị Hard Breach hoặc Resign), vì lên Level 7, hoặc vì bị từ chối lúc bấm link | Mặc định khi chưa tham gia · Flow 7 · Flow 4 · E_8.2.8.11 |
Waitlist | Trader đang xếp hàng chờ | UC_8.2.1 §5.5, Flow 15A, Flow 12 và E_8.2.8.12 |
Pending_Pod_Confirmation | Trader đã được mời, suất đang được giữ, hệ thống chờ trader bấm link | Bước 6 |
Assigned | Trader đã vào pod: ghép thẳng ở Flow 10, hoặc vào pod sau khi bấm link xác nhận | UC_8.2.1 §5.4 và bước 19 |
Waitlist_Ghost | Trader bị loại khỏi waitlist vì không bấm link trong 48 giờ, hoặc bị Flow 12 quét trúng khi đang chờ bấm link. Hệ thống xử lý như trader chưa có pod: thẻ My POD hiện nút [Join a POD], trader được gửi lại form Style | Bước 16 · E_8.2.8.10 |
Inactive_Hold | Trader 30 ngày không giao dịch. Nếu đang ở pod thì trả lại suất; nếu đang chờ trong waitlist thì vẫn giữ chỗ trong hàng. Không áp cho trader đang Pending_Pod_Confirmation (E_8.2.8.10) | Flow 12 |
7.5 BR_8.2.8.6 — Ba email Klaviyo của Pod
Pod_Spot_Available_Confirm dùng để lọc ra trader còn quan tâm: chỉ trader bấm link mới được vào pod, nhờ vậy hệ thống không đưa người đã không còn hoạt động vào pod của leader. Nội dung email do Klaviyo hoặc khách quản lý.
| Gửi khi | UC sở hữu | |
|---|---|---|
Pod_Waitlist_Notification | Trader vào waitlist | UC_8.2.1, UC_8.2.9 và Flow 12 |
Pod_Spot_Available_Confirm | Có suất trống dành cho trader. Email này chỉ có ở Flow 11 | UC này (bước 9) |
Pod_Assignment_Confirmation | Trader đã vào pod: chỉ sau khi trader bấm link xác nhận, hoặc khi trader được ghép ngay ở Flow 10. Email có thông tin leader và quyền vào Discord | UC_8.2.1 |
8. Open Items
Chi tiết: QnA_init_docs.md.
| # | Câu hỏi | ID |
|---|---|---|
| 1 | IF No Click: Klaviyo loại trader và báo hệ thống (Zapier V7 Flow 11). Báo về Middleware bằng cách nào, Middleware nhận ở đâu? | N-01 |
| 2 | Trader bấm link thì thấy trang gì, ở đâu, nội dung từng trường hợp (kể cả link hết hạn)? | N-02 |
| 3 | Thẻ My POD hiển thị gì cho Pending_Pod_Confirmation? | N-03 |
| 4 | Operations tăng Max_Capacity hoặc đổi leader về Active bằng công cụ gì để Flow 11 được gọi? | N-08 |
| 5 | Gửi lời mời sang Klaviyo lỗi thì trader không nhận email nhưng vẫn bị đánh Ghost | N-09 |
| 6 | Khi có suất trống, cái gì báo cho Zap Flow 11 chạy, truyền những gì; bước Check Pod_Waitlist > 0 kiểm tra bằng cách nào khi không còn bộ đếm? | A-19 |
| 7 | Ai gửi Pod_Spot_Available_Confirm sang Klaviyo: Middleware ngay sau khi giữ chỗ, hay Zapier sau khi nhận next_candidate_id? | A-20 |
| 8 | Process Waitlist Queue API không nhận leader_id (V7 ghi Optional) thì chọn trader theo tiêu chí nào? | A-21 |
9. Phân chia trách nhiệm
| Hạng mục | Sotatek build | Stack Trading Ops | Bên thứ 3 tự chạy |
|---|---|---|---|
| Gọi Flow 11 khi có suất trống (4 sự kiện) | ✅ | ❓ Công cụ cho sự kiện 3, 4 | — |
| Zap Flow 11 (kiểm tra waitlist, gọi endpoint mỗi suất 1 lần) | ✅ | — | Zapier |
| Chọn trader, khoá dữ liệu, giữ chỗ | ✅ | — | — |
Gửi Pod_Spot_Available_Confirm và link xác nhận 1 lần, hạn 48 giờ | ✅ | — | — |
| Gửi email mời, theo dõi bấm link | — | — | ✅ Klaviyo |
| Kiểm tra lại khi bấm; vào pod, từ chối hoặc ghép lại | ✅ | — | — |
Tăng Max_Capacity, bổ sung Pod Leader khi waitlist dài | — | ✅ | — |
Changelog
| Date | Version | Updated item | Before | After | Notes |
|---|---|---|---|---|---|
| 2026-10-12 | v1 | Initial document | — | — | Bản tiếng Việt để BA re-check trước khi chuyển tiếng Anh. Viết lại từ đầu theo template UC_8.1.1 (bản 2026-10-09/12 đã xoá). Nguồn chính: QnA POD-WAIT-01…21 (round 1–3), POD-JOIN-06/09/17; BA chốt trong QnA_init_docs (A-01 → A-18, C-01 → C-05). Spec V7 bị thay thế: Flow 11 chạy cho 4 sự kiện tạo suất trống, không chỉ khi Current_Count giảm (POD-WAIT-18); giữ chỗ bằng tăng Current_Count + Pending_Pod_Confirmation (POD-WAIT-03); không bấm → Waitlist_Ghost (POD-WAIT-05); Zombie giữ Join_Date gốc thay vì cuối hàng (POD-WAIT-20 thay POD-WAIT-13) — khách đã sửa email SES-30 thành "you will resume your position on the waitlist." |
| 2026-10-12 | v1.1 | Thêm mục API & Cron | Endpoint chỉ được nhắc 1 dòng trong BR_8.2.8.7; endpoint nhận báo bấm link chưa có spec | Mục API & Cron: Zap Flow 11, spec đầy đủ POST /process-waitlist-queue, sự kiện Pod_Spot_Available_Confirm, endpoint xác nhận suất (input, output, xử lý, lỗi, gọi trùng). Basic Flow trỏ tới từng API; BR_8.2.8.7 rút các dòng API. Thêm Hạng mục mở #11 (cách kích hoạt Zap Flow 11), #12 (bên gửi sự kiện Klaviyo) | leader_id bắt buộc (V7 ghi Optional — POD-WAIT-02 chốt xét theo leader vừa trống chỗ). Do BA định nghĩa theo RFQ_ Stack Trading Prop Tech V7.pdf §4.4 #11, #19: mã lỗi 400/401/500; next_candidate_id/queue_position = null khi không chọn được ai; giá trị result của endpoint xác nhận (Confirmed, Reassigned, Requeued, Rejected, Expired, Skipped); lưu thời điểm gửi lời mời để tính hạn 48 giờ; biến tối thiểu user_id, email, confirm_url, expires_at; tên endpoint xác nhận để Sotatek chốt trong OpenAPI spec |
| 2026-10-12 | v1.2 | Basic Flow — mô tả lời gọi API | Bước gọi API chỉ gắn "(Ref: API_x)", không rõ bên gọi / bên nhận / kết quả; endpoint xác nhận suất chưa có tên | Mỗi bước gọi giữa các hệ thống ghi dạng [Bên gọi → Bên nhận] tên API + input chính → kết quả; rẽ nhánh Stage 2 theo next_candidate_id (có giá trị / null), Stage 4 theo result (Confirmed / Reassigned / Requeued / Rejected / Expired / Skipped); ghi rõ bước nào chạy bên trong POST /process-waitlist-queue và endpoint nhận Klaviyo callback. Đặt tên chức năng endpoint nhận Klaviyo callback cho endpoint xác nhận suất (API_8.2.8.4, bảng tóm tắt, BR_8.2.8.7) | API_8.2.8.2 bước 7 và API_8.2.8.4 bước 7 chỉnh cho khớp Basic Flow (bên gửi sự kiện Klaviyo trỏ Hạng mục mở #12; gán role do Middleware tự làm, không qua Zap) |
| 2026-10-13 | v1.3 | Tên endpoint xác nhận suất | Confirm Pod Spot (tên tự đặt) | Klaviyo callback — cách gọi theo Zapier Integration V7.pdf Flow 11, POD-WAIT-08 | — |
| 2026-10-13 | v1.4 | Dùng tên API gốc; bỏ tên tự đặt | Tiêu đề / bảng tóm tắt API: Zap Flow 11, POST /process-waitlist-queue, Sự kiện Pod_Spot_Available_Confirm, Klaviyo callback. Biến tự đặt confirm_url, expires_at, email; trường result và giá trị Confirmed / Reassigned / Requeued / Rejected / Expired / Skipped | Tên gốc: Flow 11: Waitlist Processor, Process Waitlist Queue API (POST /process-waitlist-queue), Flow 11 — Engagement Check (payload Pod_Spot_Available_Confirm), Flow 11 — Wait (Klaviyo webhook callback), Flow 11 — Assign, API Manage Discord Role (POST /manage-discord-role). Biến / kết quả mô tả bằng lời (link xác nhận, hạn xác nhận, email trader, kết quả xử lý; nhánh rẽ ghi "bỏ qua / từ chối / hết hạn, trả 200 OK"); tên do BE chốt trong OpenAPI spec. Cột Trường đổi thành Nội dung | Chỉ giữ tên có trong nguồn: leader_id, next_candidate_id, queue_position (V7 Process Waitlist Queue), user_id (POD-WAIT-08). Không đổi nghiệp vụ |
| 2026-10-13 | v1.5 | Basic Flow Stage 1, Stage 5; Process Waitlist Queue API input | Bỏ bước Check; ghi "Klaviyo không báo khi trader không bấm"; leader_id bắt buộc; Zap nhận thêm "số suất trống" | Khôi phục Check (Is Pod_Waitlist > 0) và IF No Click (Klaviyo loại trader, báo hệ thống) đúng Zapier Integration V7.pdf Flow 11; leader_id Optional theo RFQ V7 (Hạng mục mở #13, A-21); bỏ "số suất trống" | Đối chiếu client sheet Flow 11 |
| 2026-10-13 | v1.6 | Status trader sau khi xác nhận suất (Post-conditions, Stage 4, BR_8.2.8.4, BR_8.2.8.7, API_8.2.8.4) | Active_Pod_Member | Assigned | Khách chốt 2026-10-13 (POD-WAIT-22): Assigned và Active_Pod_Member là một — dùng Assigned |
| 2026-10-14 | v1.7 | Toàn UC — viết lại theo khuôn UC_8.1.x | Có bảng "Giải thích thuật ngữ" ở đầu. Basic Flow 5 Stage (Có suất trống · Chọn trader · Giữ chỗ và gửi lời mời · Bấm link · Không bấm), mỗi bước trỏ sang mục API. Mục "API & Cron" riêng với 4 mục API_8.2.8.1 Zap Flow 11: Waitlist Processor, API_8.2.8.2 Process Waitlist Queue API (POST /process-waitlist-queue), API_8.2.8.3 payload Pod_Spot_Available_Confirm gửi Klaviyo, API_8.2.8.4 Klaviyo webhook callback — mỗi mục có bảng input / output / xử lý / lỗi / gọi trùng. BR_8.2.8.7 "Thông tin kỹ thuật cho dev". Phân chia trách nhiệm đứng trước Hạng mục mở | Bỏ bảng thuật ngữ (giải thích ngay câu dùng lần đầu). Basic Flow 5 Stage: (1) Có suất trống, kích hoạt Zap Flow 11 — kèm xử lý lỗi Zap · (2) Chọn trader và giữ chỗ — input leader_id, khoá dòng, các nhánh null / 401 / 500, output next_candidate_id + queue_position · (3) Gửi lời mời qua Klaviyo — bảng biến payload · (4) Trader bấm link — input user_id, các nhánh 401 / 400 / bỏ qua / hết hạn / từ chối / ghép lại / 500, kết quả xử lý · (5) Ghost. Bỏ mục "API & Cron" và anchor API_8.2.8.1–4. Còn 3 API đúng như nguồn: Process Waitlist Queue API (POST /process-waitlist-queue) — RFQ V7 §Process Waitlist Queue; Klaviyo API (nhận payload Pod_Spot_Available_Confirm) — Zapier V7 §Flow 11 Engagement Check; Klaviyo webhook callback upon user click — Zapier V7 §Flow 11 Wait, POD-WAIT-08. Zap Flow 11: Waitlist Processor là bước Zapier, không đánh số API. BR_8.2.8.7 đổi tên "Xác thực, khoá dữ liệu và xử lý gọi trùng" — nhận quy định chung của mục API cũ (HMAC/JWS, OpenAPI spec, CR-18, CR-08) và phần gọi trùng / bấm trùng; bỏ dòng Process Waitlist Queue API (đã nằm trong Stage 2). Open Items đứng trước Phân chia trách nhiệm | Theo yêu cầu BA: mô tả và thứ tự như UC_8.1.1 / UC_8.1.2. Nội dung nghiệp vụ và BR ID giữ nguyên. Sửa số API cho khớp nguồn: Zapier Integration V7.pdf §Flow 11 (Trigger · Check · Engagement Check · Wait · IF No Click · Assign) và RFQ_ Stack Trading Prop Tech V7.pdf §Process Waitlist Queue — Zap Flow 11 không phải API |
| 2026-10-14 | v1.8 | Cron Job task tách khỏi API | Overview chỉ có 3rd Party | Thêm dòng API (3 API) và Cron Job task (Không có) | Theo yêu cầu BA: Cron Job task là tác vụ nền chạy theo lịch, khác API; phải ghi rõ "Cron Job task" như API ghi rõ "API". Nguồn: RFQ_ Stack Trading Prop Tech V7.pdf §3.3 Background Workers (Cron Jobs). |
| 2026-10-17 | v1.9 | "Table E" reference renamed in header Zapier Table row and Document References | Pod_Leader_Registry was referred to as "Table E — Pod_Leader_Registry", implying it is sourced from a live Zapier Table | Renamed to Pod_Leader_Registry (native PostgreSQL table) — Pod_Leader_Registry is built natively in PostgreSQL as the single source of truth, not a live Zapier Table; "Table E" retained in Document References only as a naming/cross-reference convention to the original RFQ section | Client confirmation 2026-10-17 — PostgreSQL-only build instruction for Pod_Leader_Registry, restating POD-JOIN-02 |
| 2026-10-22 | v1.10 | Stage 2 bước 3 · Stage 4 bước 2 · Stage 5 bước 1 · BR_8.2.8.1, BR_8.2.8.2, BR_8.2.8.3, BR_8.2.8.4 · Open Items | Giảm Max_Capacity chưa có rule · trader Locked trong waitlist chưa có rule · rời waitlist khi terminate / Level 7: Open Items #9 · Waitlist_Ghost hiển thị gì, gửi lại form: Open Items #3, #10 | Giảm Max_Capacity không đẩy mentee ra, chờ tự giảm · trader Locked (DTO / Hiatus) bị bỏ qua khi chọn, giữ Join_Date · status pod là cột riêng, tách users.status; 3 status đang ở waitlist; rời waitlist khi Assigned / Waitlist_Ghost / Failed / Terminated (gồm resign) / Level 7+ · bấm sau 48 giờ bị chặn · Waitlist_Ghost xử lý như Unassigned: [Join a POD], gửi lại form Flow 10 · Open Items còn 11 (đánh số lại) | Khách trả lời 2026-10-22: A-10, N-02 (ca hết hạn), N-03 (phần Waitlist_Ghost), UC_8.2.1 A-02 (xác nhận). Giảm Max_Capacity: câu hỏi thêm cho sự kiện 3 |
| 2026-10-22 | v1.10 | Basic Flow · Business Rules · Document References — kiểm tra chữ ký webhook | Bước kiểm tra chữ ký (HMAC/JWS), sai → 401 (RFQ V7 §4.4 #19) | Bỏ toàn bộ bước kiểm tra chữ ký và các dòng 401 | BA chốt 2026-10-22: yêu cầu bảo mật chung, khách không nói riêng cho flow này |
| 2026-10-22 | v1.10 | Stage 1 bước 2 · Stage 2 bước 3 · Stage 3 bước 1 · Stage 4 bước 1, 2, 3 · Stage 5 (IF No Click, bước 1) · BR_8.2.8.1 · BR_8.2.8.7 | Một số câu gộp nhiều ý trong 1 dòng | Tách thành các ý riêng (sub-bullet) | Viết lại cho dễ hiểu, không đổi nghiệp vụ |
| 2026-10-22 | v1.10 | Post-conditions · Stage 2 bước 5 · Stage 3 bước 1 · Stage 4 bước 2 · Stage 5 bước 2 · BR_8.2.8.2 · BR_8.2.8.7 | Một số câu viết tắt / mơ hồ | Diễn giải rõ nghĩa | Viết lại cho dễ hiểu, không đổi nghiệp vụ |
| 2026-10-22 | v1.10 | Toàn UC — Basic Flow, Business Rules | Văn phong ký hiệu, rút gọn, khó đọc | Viết lại bằng câu đầy đủ, kèm VD | Theo mẫu BA duyệt 2026-10-22, không đổi nghiệp vụ |
| 2026-10-22 | v1.10 | Basic Flow · Business Rules — cấu trúc lại theo flow gốc | Basic Flow tự sắp xếp, tách rời Business Rules | Mỗi bước trích nguyên văn flow khách + bổ sung, edge case; BR ngắn gộp vào flow (giữ anchor), BR dài được trỏ từ flow | Theo mẫu UC_8.2.2, không đổi nghiệp vụ |
| 2026-10-29 | v1.11 | Toàn UC — cấu trúc lại theo khuôn UC_1.8.7 (giống UC_8.2.1 v1.12) | Mỗi bước trích nguyên văn flow gốc của khách (Trigger, Check, Process Waitlist Queue, Engagement Check, Wait, IF No Click, Assign, Decrement); đoạn "3 điểm khác nguồn"; edge case nằm dưới từng bước; BR_8.2.8.5, BR_8.2.8.6, BR_8.2.8.7 nằm trong flow; bước đánh số lại từ 1 ở mỗi phần; mã QnA trong thân doc | Bỏ dòng trích nguyên văn và đoạn "điểm khác nguồn" (4 sự kiện kích hoạt ở BR_8.2.8.1, giữ chỗ ngay ở bước 6, vị trí bước gọi API ghi ở câu dẫn §5.2). Mục đánh số 1 đến 9; §5 chia 5.1 đến 5.7 theo bước của Flow 11; bước đánh số liên tục 1 đến 23. Edge case gom vào bảng §6 (E_8.2.8.1 đến E_8.2.8.15). BR gom vào bảng §7; BR_8.2.8.5, BR_8.2.8.7 nằm trong bảng; BR_8.2.8.1 đến BR_8.2.8.4 và BR_8.2.8.6 ở §7.1 đến §7.5. Mọi BR đều được refer từ bước hoặc exception liên quan. Mã QnA chỉ giữ ở Document References, Open Items và Changelog. Giữ nguyên anchor BR_8.2.8.1 đến BR_8.2.8.7, UC_8.2.8-1 đến UC_8.2.8-5, UC_8.2.8-BR, UC_8.2.8-OI, UC_8.2.8-RACI; 11 Open Items giữ nguyên | BA yêu cầu viết dễ hiểu như UC_1.8.7, không đổi nghiệp vụ |
| 2026-10-29 | v1.11 | §1 Overview — Description | Mô tả chi tiết các bước, tên API, field và nhánh xử lý | Chỉ ghi tổng quan: UC dùng để làm gì và nội dung chính, bằng câu thường; chi tiết xem §5 | BA yêu cầu Description chỉ ghi tổng quan, không đổi nghiệp vụ |
| 2026-10-29 | v1.11 | Các chỗ ghi status tài khoản Terminated / Failed | Ghi status không kèm nguyên nhân, hoặc ghi "resign hoặc bị terminate", "Resigned hoặc Terminated" | Ghi kèm nguyên nhân: Terminated là trader LIVE bị Hard Breach hoặc Resign; Failed là trader SIM bị Hard Breach hoặc Resign. Không có status Resigned riêng | BA yêu cầu 2026-10-29, để biết status xuất hiện khi nào |
| 2026-11-09 | v1.12 | E_8.2.8.11 · BR_8.2.8.2 · BR_8.2.8.4 | Status pod của trader bị từ chối lúc bấm link: chưa chốt (Open Items #6) | Status pod thành null (không thuộc pod nào), trader rời waitlist. BR_8.2.8.4 thêm dòng null: chưa từng tham gia, hoặc đã rời pod / waitlist vì Failed / Terminated, lên Level 7, bị từ chối lúc bấm link | BA chốt 2026-11-09 (N-07) |
| 2026-11-09 | v1.12 | E_8.2.8.10 · BR_8.2.8.1 sự kiện 1 · BR_8.2.8.2 · BR_8.2.8.4 | Trader đang Pending_Pod_Confirmation bị Inactive_Hold: chưa chốt (Open Items #6) | Xử lý như không bấm link ngay lúc Flow 12 chạy: status pod thành Waitlist_Ghost (không đặt Inactive_Hold), Current_Count giảm 1 lần duy nhất, kích hoạt lại Zap Flow 11; bấm link sau đó theo E_8.2.8.8 | BA chốt 2026-11-09 (N-07) |
| 2026-11-09 | v1.12 | E_8.2.8.12 · BR_8.2.8.2 | Bấm link nhưng leader không còn Active và không ghép được: trader về Waitlist đầu hàng (Open Items #4) | Trader về Waitlist cuối hàng, Join_Date là thời điểm trader về waitlist | BA chốt 2026-11-09 (N-05). Khác câu trả lời POD-WAIT-19 của khách (đầu hàng) |
| 2026-11-09 | v1.12 | BR_8.2.8.2 | Trader Inactive_Hold kích hoạt lại khi pod cũ đầy → giữ Join_Date gốc (không phân biệt trader đang ở pod hay đang chờ); Join_Date của trader đang ở pod chưa chốt (Open Items #5) | Tách 2 trường hợp: trader đang chờ → về Waitlist, giữ Join_Date gốc; trader đang ở pod → chạy lại bước ghép pod của Flow 10, không ưu tiên pod cũ, không có leader còn suất thì vào cuối hàng với Join_Date là thời điểm vào waitlist. Join_Date (ngày vào waitlist) khác pod_join_date (ngày vào pod) | BA chốt 2026-11-09 (N-06). Khớp UC_4.17.1 bước 55 |
| 2026-11-09 | v1.12 | §8 Open Items | 11 hạng mục | Đóng #4 (N-05), #5 (N-06), #6 (N-07); còn 8 hạng mục, đánh số lại (#7→#4 … #11→#8) và cập nhật các chỗ trỏ tới | — |