Giao diện
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.
| Field | Value |
|---|---|
| US ID | US-D06 |
| Role thực hiện | R1 - Người dùng tool (Assumption (OQ về G-01), OQ-D-05) |
| Phase | As-built (đã triển khai) — phase 1 của ticket, chip us06 |
| Priority | N/A (as-built) |
| Status | Draft |
| NFR liên quan | NFR-D-02, NFR-D-03, NFR-D-04, NFR-D-06 — xem Overview §5 |
| OQ liên quan | OQ-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 ​
| ID | Rule | Áp dụng ở | Đã cover bởi (AC) | Nguồn code (Mode B/C) |
|---|---|---|---|---|
| BR-01 | Flow 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). | M1 | AC-M1.1 | sapp-26878-flows.ts:1413-1424,1583-1635 |
| BR-02 | Bắ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 1 | AC-M1.2 | sapp-26878-flows.ts:1422-1429 |
| BR-03 | loai_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 1 | AC-M1.3 | sapp-26878-flows.ts:1430-1455,1500-1507; :66-68 |
| BR-04 | Cả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 1 | AC-M1.4 | sapp-26878-flows.ts:1438-1443,1508-1523 |
| BR-05 | Khô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 1 | AC-M1.3 | sapp-26878-flows.ts:1473-1498 |
| BR-06 | Bướ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, 4 | AC-M1.5 | sapp-26878-flows.ts:1526-1550 |
| BR-07 | Bướ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, 5 | AC-M1.6 | sapp-26878-flows.ts:1538-1561,1419-1420 |
| BR-08 | Bướ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, 7 | AC-M1.7 | sapp-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ồngb. Chi tiết từng màn ​
Màn M1 - Stepper flow "US-06 · CBE / Cert / Becker" ​
| Field | Value |
|---|---|
| Figma frame | N/A |
| Trigger vào màn | Chọn chip US-06 · CBE / Cert / Becker (Dev / Staging) |
| Mô tả ngắn | Tiê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ước | Loại (US-D03) | Ghi gì / ở đâu | Điều kiện chuyển sang bước sau |
|---|---|---|---|---|
| 1 | Tạo deal | deal (M1) | HubSpot deal + contact (Dev → dev portal; Staging → prod portal); Redis danh sách deal | Deal us06 đã có |
| 2 | Đơn hàng Ops | guide (M2) | — tay, không bắt buộc (đơn ADD_ON) | Bấm "Đã hiểu" |
| 3 | Thông tin thanh toán | stage (M3) | HubSpot dealstage → Thông tin thanh toán | Chuyển thành công |
| 4 | Giao dịch trong đơn | guide (M2) | — tay, chỉ khi có đơn bước 2 | Bấm "Đã hiểu" |
| 5 | Hoàn thành cung cấp DV | stage (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 đơn | resync (M6) | trang_thai_dong_bo_hoa_don = Đồng bộ lại (story US-10) | Bấm ≥ 1 lần |
| 7 | Đồng bộ lại reconcile | resync (M6) | trang_thai_tu_dong_reconcile = Đồng bộ lại (story US-10) | Bấm ≥ 1 lần — hết luồng |
UI States ​
| State | Khi nào | Hiển thị | Figma frame |
|---|---|---|---|
| Default | Phiên mới | Bước 1 mở, còn lại khoá | N/A |
| Loading | Tải pipeline / stage | Theo US-D03 M1, M3 | N/A |
| Has data | Đã tạo deal | Deal id ở thanh ngữ cảnh; "Log SAP" bật | N/A |
| Empty | Chư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 |
| Error | Lỗi ở bước | Theo US-D03 | N/A |
| Disabled | Prod | Không chạy (NFR-D-02) | N/A |
Fields ​
| Field | Required | Type | Default | Format | Validation | Error Message | Visibility | Depends On |
|---|---|---|---|---|---|---|---|---|
loai_phi_dich_vu | Yes | Enum (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_hang | Yes | Theo HubSpot | — | — | BR-02 | "Còn thiếu: …" | Always | — |
mon_thi_cbe | Yes khi CBE | Enum | — | — | BR-03 | "Còn thiếu: mon_thi_cbe" | Loại phí = Phí đăng ký thi CBE | loai_phi_dich_vu |
dia_diem_thi_cbe | No (khuyến nghị khi CBE) | Enum | — | — | BR-04 | Cảnh báo mềm | Loại phí = CBE | loai_phi_dich_vu |
hinh_thuc_thi_certifr | Yes khi Cert | Enum | — | — | BR-03 | "Còn thiếu: …" | Loại phí = Phí tài khoản Cert | loai_phi_dich_vu |
mon_thi_becker_dang_ky | Yes khi Becker | Enum | — | — | BR-03 | "Còn thiếu: …" | Loại phí = Phí tài khoản Becker | loai_phi_dich_vu |
cccd_ho_chieu, h_t_n / ma_so_thue_cong_ty, ten_cong_ty | Yes theo nhánh | Text | Danh tính test | — | BR-02 | "Còn thiếu: …" | Theo nhánh | doi_tuong_mua_hang |
co_so_hoc__new_, ngay_ghi_nhan_doanh_thu | No (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) ​
| Item | Description |
|---|---|
| Trigger | Bấm "Tạo deal" |
| Behavior | Theo 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 Result | Deal tạo xong; bước 2 mở |
Error cases:
| Case | Expected 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) ​
| Item | Description |
|---|---|
| Trigger | Bấm "Chuyển stage" |
| Behavior | Theo US-D03 M3 A1 (BR-07). ⚠️ Ghi PROD: Staging chuyển stage trên portal production (NFR-D-03, OQ-D-02). |
| Success Result | Deal ở stage đích |
Error cases:
| Case | Expected 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) ​
| Item | Description |
|---|---|
| Trigger | Bấm "Đã hiểu" |
| Behavior | Theo US-D03 M2 (BR-06). Không ghi dữ liệu từ tool. |
| Success Result | Bước xong |
Error cases:
| Case | Expected Handling |
|---|---|
| — | Không gọi API |
A4 - Đồng bộ lại (bước 6, 7) ​
| Item | Description |
|---|---|
| Trigger | Bấm "Đồng bộ lại" |
| Behavior | Theo 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 Result | Property = Đồng bộ lại |
Error cases:
| Case | Expected Handling |
|---|---|
| Property trống | Cả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ướcMaps 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 dealMaps 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 thiMaps 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-10Maps to:
- Business Rule: BR-08
Negative AC / Edge Cases của màn M1 ​
| ID | Tình huống | Hành vi mong đợi |
|---|---|---|
| EC-M1.1 | Đổi môn thi sang nhóm khác trước khi đồng bộ lại | Theo 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 thi | Nhó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-P05Maps to:
- REL-03 (Affects - Tra log SAP + quét doanh thu)