Skip to content

US-D06: Flow P1: CBE / Cert / Becker (F-P1-03 · story SAPP US-06) ​

Thuộc FS: 00-overview.md — SAPP-26878 · Tạo dữ liệu test doanh thu (Ops → HubSpot → SAP) Phần chung (tổng quan, roles, flow tổng, related features, NFR, Open Questions, References) xem ở Overview. File này chỉ chứa nội dung riêng của US. As-built tại commit e77c47a. Nguồn Fact: inventory 26878 A-60 … A-65. Hành vi từng loại bước → US-D03; khung stepper → US-D01.

FieldValue
US IDUS-D06
Role thực hiệnR1 - Người dùng tool (Assumption (OQ về G-01), OQ-D-05)
PhaseAs-built (đã triển khai) — phase 1 của ticket, chip us06
PriorityN/A (as-built)
StatusDraft
NFR liên quanNFR-D-02, NFR-D-03, NFR-D-04, NFR-D-06 — xem Overview §5
OQ liên quanOQ-D-02, OQ-D-06, OQ-D-10, OQ-D-16 — xem Overview §6

1. US Statement ​

text
As a Người dùng tool (Assumption — OQ về G-01)
I want dựng một deal bán tài khoản thi CBE / Cert / Becker, kéo tới mốc hoàn thành cung cấp dịch vụ, rồi bắn đồng bộ lại
So that kiểm được luồng "Đồng bộ Deal → hóa đơn SAP" cho story US-06 phase 1
        (trích shared/runbooks/sapp/sapp-26878/README.md:10); lợi ích cụ thể: [Assumption]

2. Dependencies & Definition Of Ready ​

N/A — đã triển khai (Mode B). Dependency runtime: pipeline CBE / Cert / Becker của flow us06 đã cấu hình cho portal (sapp-26878.constants.ts:382-507).

3. Business Rules ​

IDRuleÁp dụng ởĐã cover bởi (AC)Nguồn code (Mode B/C)
BR-01Flow có 7 bước, 1 deal (bảng bước §4.b); cho phép "Dùng deal có sẵn". Hóa đơn bán tài khoản thi không cần đơn Ops — công ty hạch toán, Sub_BU, mã dự án, kho là cấu hình cố định theo loại tài khoản thi (theo hint).M1AC-M1.1sapp-26878-flows.ts:1413-1424,1583-1635
BR-02Bắt buộc: loai_phi_dich_vu, muc_phi_can_dong, doi_tuong_mua_hang; thêm cccd_ho_chieu + h_t_n (cá nhân) hoặc ma_so_thue_cong_ty + ten_cong_ty (doanh nghiệp).M1 - bước 1AC-M1.2sapp-26878-flows.ts:1422-1429
BR-03loai_phi_dich_vu chỉ cho chọn Phí đăng ký thi CBE, Phí tài khoản Cert, Phí tài khoản Becker. Nhóm bắt buộc có điều kiện: CBE → mon_thi_cbe (khuyến nghị dia_diem_thi_cbe); Cert → hinh_thuc_thi_certifr; Becker → mon_thi_becker_dang_ky. Chưa chọn loại phí → gợi ý "Chọn Loại phí dịch vụ để biết cần điền môn thi / hình thức thi nào."M1 - bước 1AC-M1.3sapp-26878-flows.ts:1430-1455,1500-1507; :66-68
BR-04Cảnh báo mềm: loại phí không khớp tên pipeline (vd CBE trên pipeline không chứa "cbe"); dia_diem_thi_cbe trống → center rơi về ALL.M1 - bước 1AC-M1.4sapp-26878-flows.ts:1438-1443,1508-1523
BR-05Không hiển thị (kèm lý do): tai_khoan_nhan_phi_dich_vu, bu_san_pham_cung_cap_dich_vu, thoi_gian_ket_thuc_dao_tao_bo_sung, goi_khoa_hoc, tvts_uu_ai_bo_sung_ap_dung, hubspot_owner_id.M1 - bước 1AC-M1.3sapp-26878-flows.ts:1473-1498
BR-06Bước 2 (Đơn hàng Ops) không bắt buộc — chỉ khi test deal có đơn ADD_ON; khi có đơn ADD_ON, test_subject của sản phẩm thắng property môn thi trên deal. Bước 4 (Giao dịch) chỉ khi có đơn bước 2.M1 - bước 2, 4AC-M1.5sapp-26878-flows.ts:1526-1550
BR-07Bước 3 gợi ý Thông tin thanh toán; bước 5 gợi ý Hoàn thành cung cấp dịch vụ / Won - Hoàn thành cung cấp dịch vụ (staging) — không phải Hoàn thành phí dịch vụ (theo hint chỉ mốc cung cấp dịch vụ bắn event SAP).M1 - bước 3, 5AC-M1.6sapp-26878-flows.ts:1538-1561,1419-1420
BR-08Bước 6 (hóa đơn) và 7 (reconcile) trên chính deal bước 1, story US-10; kèm hai lưu ý: môn thi quyết định external_reference (đổi môn sang nhóm khác → SAP tạo chứng từ thứ hai) và lưu ý ngày bấm.M1 - bước 6, 7AC-M1.7sapp-26878-flows.ts:1563-1581,715-716,768

4. Design ​

a. Mối liên hệ giữa các màn & User Flow ​

text
[Chip "US-06 · CBE / Cert / Becker"] → [M1: Stepper 7 bước]
  1 Tạo deal → 2 Đơn hàng Ops (tuỳ chọn, ADD_ON) → 3 Thông tin thanh toán → 4 Giao dịch (nếu có đơn)
  → 5 Hoàn thành cung cấp DV (event SAP) → 6 Đồng bộ lại hóa đơn → 7 Đồng bộ lại reconcile → hết luồng

b. Chi tiết từng màn ​

Màn M1 - Stepper flow "US-06 · CBE / Cert / Becker" ​

FieldValue
Figma frameN/A
Trigger vào mànChọn chip US-06 · CBE / Cert / Becker (Dev / Staging)
Mô tả ngắnTiêu đề "US-06 · Hóa đơn bán tài khoản thi CBE / Cert / Becker (Deal Won) → SAP".

Bảng bước

#Tên bướcLoại (US-D03)Ghi gì / ở đâuĐiều kiện chuyển sang bước sau
1Tạo dealdeal (M1)HubSpot deal + contact (Dev → dev portal; Staging → prod portal); Redis danh sách dealDeal us06 đã có
2Đơn hàng Opsguide (M2)— tay, không bắt buộc (đơn ADD_ON)Bấm "Đã hiểu"
3Thông tin thanh toánstage (M3)HubSpot dealstage → Thông tin thanh toánChuyển thành công
4Giao dịch trong đơnguide (M2)— tay, chỉ khi có đơn bước 2Bấm "Đã hiểu"
5Hoàn thành cung cấp DVstage (M3)HubSpot dealstage → Hoàn thành cung cấp dịch vụ / Won - Hoàn thành cung cấp dịch vụ (event SAP)Chuyển thành công
6Đồng bộ lại hóa đơnresync (M6)trang_thai_dong_bo_hoa_don = Đồng bộ lại (story US-10)Bấm ≥ 1 lần
7Đồng bộ lại reconcileresync (M6)trang_thai_tu_dong_reconcile = Đồng bộ lại (story US-10)Bấm ≥ 1 lần — hết luồng
UI States ​
StateKhi nàoHiển thịFigma frame
DefaultPhiên mớiBước 1 mở, còn lại khoáN/A
LoadingTải pipeline / stageTheo US-D03 M1, M3N/A
Has dataĐã tạo dealDeal id ở thanh ngữ cảnh; "Log SAP" bậtN/A
EmptyChưa chọn loại phíKhối có điều kiện hiện gợi ý chọn loại phí (BR-03)N/A
ErrorLỗi ở bướcTheo US-D03N/A
DisabledProdKhông chạy (NFR-D-02)N/A
Fields ​
FieldRequiredTypeDefaultFormatValidationError MessageVisibilityDepends On
loai_phi_dich_vuYesEnum (thu hẹp 3 giá trị)——BR-02, BR-03"Còn thiếu: loai_phi_dich_vu"Always—
muc_phi_can_dong, doi_tuong_mua_hangYesTheo HubSpot——BR-02"Còn thiếu: …"Always—
mon_thi_cbeYes khi CBEEnum——BR-03"Còn thiếu: mon_thi_cbe"Loại phí = Phí đăng ký thi CBEloai_phi_dich_vu
dia_diem_thi_cbeNo (khuyến nghị khi CBE)Enum——BR-04Cảnh báo mềmLoại phí = CBEloai_phi_dich_vu
hinh_thuc_thi_certifrYes khi CertEnum——BR-03"Còn thiếu: …"Loại phí = Phí tài khoản Certloai_phi_dich_vu
mon_thi_becker_dang_kyYes khi BeckerEnum——BR-03"Còn thiếu: …"Loại phí = Phí tài khoản Beckerloai_phi_dich_vu
cccd_ho_chieu, h_t_n / ma_so_thue_cong_ty, ten_cong_tyYes theo nhánhTextDanh tính test—BR-02"Còn thiếu: …"Theo nhánhdoi_tuong_mua_hang
co_so_hoc__new_, ngay_ghi_nhan_doanh_thuNo (khuyến nghị)Enum / Date——Cảnh báo mềm—Always—
Property bị loại (BR-05)—Không hiển thị (lý do)————Hidden—
Filter / Search / Sort ​

N/A — không phải màn List.

Actions ​
A1 - Tạo deal (bước 1) ​
ItemDescription
TriggerBấm "Tạo deal"
BehaviorTheo US-D03 M1 A1 với spec BR-02…BR-05. ⚠️ Ghi PROD: Staging tạo deal/contact trên portal HubSpot production (NFR-D-03); BE còn route prod (NFR-D-02, OQ-D-02).
Success ResultDeal tạo xong; bước 2 mở

Error cases:

CaseExpected Handling
Thiếu môn thi theo loại phí"Còn thiếu: mon_thi_cbe" (v.v.)
A2 - Chuyển stage (bước 3, 5) ​
ItemDescription
TriggerBấm "Chuyển stage"
BehaviorTheo US-D03 M3 A1 (BR-07). ⚠️ Ghi PROD: Staging chuyển stage trên portal production (NFR-D-03, OQ-D-02).
Success ResultDeal ở stage đích

Error cases:

CaseExpected Handling
Chọn nhầm Hoàn thành phí dịch vụTool vẫn chuyển (người dùng chọn tay); theo hint mốc này không bắn event SAP
A3 - Xác nhận hướng dẫn (bước 2, 4) ​
ItemDescription
TriggerBấm "Đã hiểu"
BehaviorTheo US-D03 M2 (BR-06). Không ghi dữ liệu từ tool.
Success ResultBước xong

Error cases:

CaseExpected Handling
—Không gọi API
A4 - Đồng bộ lại (bước 6, 7) ​
ItemDescription
TriggerBấm "Đồng bộ lại"
BehaviorTheo US-D03 M6 A1 (BR-08); lượt ghi vào bucket US-10. ⚠️ Ghi PROD: Staging ghi property trên portal production (NFR-D-03, OQ-D-02).
Success ResultProperty = Đồng bộ lại

Error cases:

CaseExpected Handling
Property trốngCảnh báo "chưa từng qua SAP" của bước
Acceptance Criteria của màn M1 ​
AC-M1.1 - Đi hết flow không cần đơn ​
gherkin
Given chip "US-06 · CBE / Cert / Becker" trên Dev
When người dùng tạo deal, bấm "Đã hiểu" ở bước 2 và 4, chuyển stage ở bước 3 và 5, đồng bộ lại ở bước 6 và 7
Then flow đi hết 7 bước

Maps to:

  • Business Rule: BR-01, BR-06
AC-M1.2 - Bắt buộc chung ​
gherkin
Given bước 1 đang mở
When muc_phi_can_dong để trống
Then nút "Tạo deal" tắt với "Còn thiếu: muc_phi_can_dong"

Maps to:

  • Business Rule: BR-02
AC-M1.3 - Nhóm có điều kiện theo loại phí ​
gherkin
Given chưa chọn loai_phi_dich_vu
Then hiện gợi ý "Chọn Loại phí dịch vụ để biết cần điền môn thi / hình thức thi nào."
When chọn "Phí đăng ký thi CBE"
Then mon_thi_cbe trở thành bắt buộc và dia_diem_thi_cbe là khuyến nghị
When đổi sang "Phí tài khoản Becker"
Then mon_thi_becker_dang_ky trở thành bắt buộc thay cho mon_thi_cbe
And dropdown loai_phi_dich_vu chỉ có 3 giá trị

Maps to:

  • Business Rule: BR-03, BR-05
AC-M1.4 - Cảnh báo lệch pipeline ​
gherkin
Given loai_phi_dich_vu = "Phí tài khoản Cert" và pipeline đang chọn không chứa "cert"
Then hiện cảnh báo "Loại phí là … nhưng pipeline đang chọn là … — payload vẫn hợp lệ … nhưng data test dễ gây nhầm." và không chặn tạo deal

Maps to:

  • Business Rule: BR-04
AC-M1.5 - Đơn ADD_ON tuỳ chọn ​
gherkin
Given người dùng chỉ kiểm hóa đơn theo property deal
When mở bước 2
Then hướng dẫn nói có thể bỏ qua thao tác và bấm "Đã hiểu"; nhắc test_subject của sản phẩm ADD_ON thắng property môn thi

Maps to:

  • Business Rule: BR-06
AC-M1.6 - Mốc cung cấp dịch vụ ​
gherkin
Given deal ở pipeline CBE / Cert / Becker
When mở bước 5
Then dropdown chọn sẵn "Hoàn thành cung cấp dịch vụ" (dev) hoặc "Won - Hoàn thành cung cấp dịch vụ" (staging)

Maps to:

  • Business Rule: BR-07
AC-M1.7 - Đồng bộ lại kèm lưu ý môn thi ​
gherkin
Given deal đã qua bước 5
When mở bước 6
Then khối hiện lưu ý môn thi trước, lưu ý ngày bấm sau
When bấm "Đồng bộ lại"
Then trang_thai_dong_bo_hoa_don = "Đồng bộ lại" và lượt ghi vào lịch sử story US-10

Maps to:

  • Business Rule: BR-08
Negative AC / Edge Cases của màn M1 ​
IDTình huốngHành vi mong đợi
EC-M1.1Đổi môn thi sang nhóm khác trước khi đồng bộ lạiTheo lưu ý: SAP tạo chứng từ thứ hai — dữ liệu hỏng, sửa môn về đúng nhóm trước (sapp-26878-flows.ts:715-716)
EC-M1.2Đổi loại phí sau khi đã điền môn thiNhóm bắt buộc đổi theo loại phí mới
EC-M1.3⚠️ Observed: bước 1 "Dùng deal có sẵn"Bước 2–7 tự đánh dấu xong (US-D01 EC-M2.3) → OQ-D-06

5. Cross-feature AC ​

AC-X.1 - Mốc cung cấp dịch vụ bắn event SAP ​

gherkin
Given deal đủ property bắt buộc
When bước 5 chuyển sang mốc hoàn thành cung cấp dịch vụ
Then hệ ngoài phát hóa đơn bán tài khoản thi (Fact theo hint)

Maps to:

  • REL-08 (Be Affected - webhook HubSpot → lms-be → SAP)

AC-X.2 - Kiểm kết quả bằng Log SAP ​

gherkin
Given deal đã qua bước 5 hoặc 6
When người dùng bấm "Log SAP"
Then log SAP của deal hiển thị theo US-P05

Maps to:

  • REL-03 (Affects - Tra log SAP + quét doanh thu)