Skip to content

Gate R1 — Tổng hợp Feature Inventory (SAPP Works tools) ​

Tác giả: lane ba/ (AI) · Ngày: 2026-09-30 · Mode: B – As-built · Commit: e77c47aDành cho: BA/owner duyệt Gate R1 trước khi lập danh sách User Story. Nguồn: 7 inventory dưới đây, dựng bằng đọc source — chưa gọi thử API hay chạy màn nào. Các kết luận "có thể crash / có thể lỗi" là suy ra từ code, cần chạy thử để xác nhận. Kiểm chứng: 622/622 trích dẫn file:dòng trong bảng trỏ tới file và dòng có thật; mẫu ngẫu nhiên 10 trích dẫn đối chiếu nội dung — khớp.

1. Bảng số liệu ​

NhómInventoryEntry pointHành độngRuleDrift⚠️ ObservedCâu hỏi
Nền tảng dùng chungplatform222148101316
HubSpot (sapp.001–004)hubspot12112810813
SAPP-20603 eContract (005/012/013)20603912293512
SAPP-24395 (006/007)24395121738121617
SAPP-23954 (008/009)23954812339817
SAPP-26878 (010) — 14 flow, 223 bước2687827127+3411615
SAPP-26297 (011) — 9 luồng, 78 case262971725336915
Tổng107225+2436165105

2. Phát hiện xuyên nhóm (quan trọng nhất) ​

#Phát hiệnNhómBằng chứng tiêu biểu
X-1Toàn bộ 259 route /api/v1/sapp/* là @Public() — không cần đăng nhập, không permission, không system API key, kể cả route ghi prod (Ops passthrough: tạo user/lớp/đơn/giao dịch, confirm giao dịch, xoá lịch, resync SAP; HubSpot duplicate pipeline; eContract retry; 23954 refresh). API doc sapp.md:14 chỉ nói "3 route public tạm thời".tất cảbe/apps/api/src/sapp/*.controller.ts (đếm 2026-09-30)
X-2Khoá tool chỉ có ở giao diện. BE không kiểm tra tool đang tắt/khoá; trạng thái mở khoá nằm trong sessionStorage; route verify mã bí mật public, không giới hạn tần suất.nền tảnginventory platform §5
X-3"Staging" HubSpot = portal prod — cố ý theo comment trong code (không có portal staging riêng). Hệ quả: tab "Staging" của 24395 ghi deal/contact vào prod; email trùng → contact học viên thật bị cập nhật đè.nền tảng, HubSpot, 24395be/libs/constants/src/lib/hubspot/hubspot.constants.ts:19-26
X-4Thao tác ghi PRODUCTION đang có: eContract Retry (UPDATE retry = 0 trên DB econtract prod → cron gọi EFY/FPT thật); 23954 refresh cap_nhat_owner (ghi rỗng rồi ghi lại, không batch, không rollback); HubSpot Duplicate pipeline trên prod; 24395 qua "staging"; 26878 — chặn prod chỉ ở FE, BE vẫn có route prod.20603, 23954, HubSpot, 24395, 26878từng inventory §6
X-5Chốt chặn prod có thật: Ops SQL runner không có key/route prod, không nhận SQL thô; manual-scan & sign-callback từ chối prod; thêm option property chỉ chạy dev; 26297 không có route prod.nền tảng, 26297inventory platform §5
X-6Trạng thái nằm trên Redis, không có bảng DB: lịch sử refresh 23954 (TTL 7 ngày, gia hạn mỗi lần ghi), run 26878 (30 ngày, tối đa 50 run/flow/env), session bulk product 24395.23954, 26878, 24395từng inventory §4
X-7Nghi lỗi FE (suy từ code, chưa chạy): 24395 bước 3 có thể luôn báo "0/0" và mất session; so mã lỗi hết hạn session sai kiểu; 26878 nút "Lịch sử" có thể crash ở flow phase 2; 26297 ô để trống bị bỏ khỏi payload → không xoá được property HubSpot (case 5.1, 5.7, 6.3).24395, 26878, 26297từng inventory §5
X-8Drift lớn với API doc / runbook: 61 chỗ. Tiêu biểu: số route public; 26878 doc nói có lưu trigger/sourceRunId/sourceFlow nhưng code bỏ mất; route assign-class-code chưa có trong doc; runbook ghi mọi flow phase 2 trả lại mã lớp nhưng code chỉ US-01 (rủi ro cạn pool mã lớp staging); 23954 doc nói thiếu token ném 12001 nhưng code trả 201.tất cảtừng inventory §7
X-9Code chết / lệch giả định: SecretGate (khoá cứng) không tool nào dùng; hubspot-property-field.tsx không dùng trong 4 tool HubSpot; 4 tool HubSpot đi qua service HubSpot riêng (be/libs/modules/src/lib/hubspot/), không qua service SAPP. app/ không có màn SAPP.nền tảng, HubSpotinventory platform, hubspot

3. Câu hỏi cho BA — đã gộp trùng ​

Câu chặn bước sau (cần trả lời trước khi viết FS; chưa trả lời → FS ghi Assumption/OQ):

IDCâu hỏiGộp từ
G-01Ai dùng cụm tool /works/sapp? (chỉ owner / đội QA SAPP / đội Ops SAPP…) — cần để viết Role trong mọi US.platform Q-04, hubspot Q-01, 20603 Q-04, 26878 Q-05, 26297 Q-01
G-02259 route @Public() (gồm ghi prod) là cố ý hay nợ bảo mật? FS sẽ ghi đúng hiện trạng; câu trả lời quyết định ghi là "thiết kế" hay ⚠️ Observed + đưa vào Handover cho BE.platform Q-01, hubspot Q-02, 20603 Q-01, 23954 Q-02, 24395 Q-02, 26878 Q-02, 26297 Q-03
G-03Các thao tác ghi prod (X-4) là cố ý? Đặc biệt: HubSpot Duplicate pipeline trên prod; 23954 refresh trên prod không batch/rollback; eContract retry reset nhiều flow FAIL khác tên cùng lúc.hubspot Q-03, 23954 Q-03/Q-08/Q-09, 20603 Q-02
G-04"Staging" ghi vào HubSpot prod — có chấp nhận ghi đè contact học viên thật khi trùng email?platform Q-02, 24395 Q-02/Q-05
G-05Mục đích nghiệp vụ mỗi nhóm (vd 23954: automation nào được kích hoạt lại khi refresh cap_nhat_owner; 24395: ý nghĩa 14 deal case). BRD tóm tắt cần câu này.23954 Q-01, 24395 Q-01
G-06Các nghi lỗi X-7 là bug hay cố ý? (và có muốn AI chạy thử để xác nhận — cần dev server + môi trường dev)24395 Q-09/Q-13, 26878 Q-04, 26297 Q-02, 23954 Q-10
G-0726878: mất trigger/sourceRunId/sourceFlow trong log re-sync; "deal có sẵn" tự đánh dấu xong các bước còn lại (kể cả bước Ops phase 2); phase 2 có chính thức lưu history không; flow phase 2 ngoài US-01 trả mã lớp thế nào.26878 Q-01/Q-03/Q-06/Q-07
G-08Hiện trạng bị chặn: 26878 US-09 (sign-callback chờ SAPP); 26297 luồng 4–6 chưa chạy được — FS mô tả là "đã triển khai, chưa chạy được"?26878 Q-08, 26297 Q-09
G-09Cấu hình môi trường: SAPP_BASE_API_URL (bulk product 24395) đang trỏ môi trường nào, đã từng ghi prod chưa; trên DB prod tool nào đang tắt/ẩn/khoá; migration sapp.011 đã chạy ở đâu.24395 Q-04, platform Q-03, 26297 Q-10
G-10Có FS/đặc tả gốc của các ticket (vd 26878 US-01…US-09) để đối chiếu AC/BR không? (Lưu ý: dự án này không tra Jira/Confluence — BA đưa file vào working/raw-inputs/ nếu có.)26878 Q-13

Câu không chặn (≈75 câu còn lại): giữ trong §8 của từng inventory; FS sẽ ghi thành Open Question.

4. Đề xuất cho bước sau (Recommendation, chờ BA) ​

  • Viết FS as-built mô tả đúng hiện trạng kể cả các rủi ro trên; rủi ro nào BA xác nhận "không cố ý" → gom vào Handover cho BE/FE (Bước 12) thay vì im lặng.
  • Danh sách US dự kiến (R2) sẽ trình sau khi Gate R1 duyệt.