Skip to content

US-D04: Flow P1: Học phí thường (F-P1-01 · story SAPP US-03) ​

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-40 … A-46. Hành vi từng loại bước → US-D03; khung stepper → US-D01.

FieldValue
US IDUS-D04
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 us03
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-12, 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 học phí thường, đi qua các mốc stage tới Won, rồi bắn đồng bộ lại hóa đơn và reconcile
So that kiểm được luồng "Đồng bộ Deal → hóa đơn SAP" cho story US-03 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 học phí của flow us03 đã cấu hình cho portal (sapp-26878.constants.ts:382-507); người dùng có quyền thao tác trên SAPP OPS ở môi trường tương ứng (bước 2, 4 làm tay).

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, theo thứ tự ở bảng bước §4.b; cho phép "Dùng deal có sẵn".M1AC-M1.1sapp-26878-flows.ts:1165-1217,934-936
BR-02Bắt buộc khi tạo deal: doi_tuong_mua_hang, thoi_gian_ket_thuc_dao_tao_bo_sung; thêm cccd_ho_chieu (cá nhân) hoặc ma_so_thue_cong_ty (doanh nghiệp).M1 - bước 1AC-M1.2sapp-26878-flows.ts:941-943
BR-03Khuyến nghị (cảnh báo mềm): ngay_ghi_nhan_doanh_thu ("Chưa điền Ngày ghi nhận doanh thu → posting_date rỗng, SAP sẽ reject hóa đơn."), co_so_hoc__new_ ("Chưa điền Cơ sở học → center gửi sang SAP rỗng.").M1 - bước 1AC-M1.3sapp-26878-flows.ts:944-955
BR-04Không hiển thị (kèm lý do): goi_khoa_hoc, tvts_uu_ai_bo_sung_ap_dung (Ops ghi khi sync đơn), loai_phi_dich_vu ("Phải để trống. Có giá trị là deal bị hiểu thành deal phí dịch vụ, không phải học phí.").M1 - bước 1AC-M1.3sapp-26878-flows.ts:959-979
BR-05Bước 3 gợi ý stage Soạn thảo hợp đồng; bước 5 gợi ý Won - Hoàn tất thủ tục — mốc Won của luồng học phí, nơi event SAP bắn ra (theo hint).M1 - bước 3, 5AC-M1.4sapp-26878-flows.ts:1120-1124,1136-1140
BR-06Bước 4 hướng dẫn: tạo từng transaction trên Ops (tạo → "Chờ xác nhận" → confirm); tổng amount các transaction cần ≥ order amount.M1 - bước 4AC-M1.1sapp-26878-flows.ts:987-993,1126-1134
BR-07Bước 6 đồng bộ lại hóa đơn và bước 7 đồng bộ lại reconcile trên chính deal bước 1; cả hai thuộc story đồng bộ lại US-08.M1 - bước 6, 7AC-M1.5sapp-26878-flows.ts:1147-1163,2404

4. Design ​

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

text
[Chip "US-03 · Học phí thường"] → [M1: Stepper 7 bước]
  1 Tạo deal → 2 Đơn hàng Ops (tay) → 3 Soạn thảo hợp đồng → 4 Giao dịch trong đơn (tay)
  → 5 Kéo sang Won (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-03 · Học phí thường" ​

FieldValue
Figma frameN/A
Trigger vào mànChọn chip US-03 · Học phí thường (portal Dev / Staging)
Mô tả ngắnTiêu đề "US-03 · Hóa đơn doanh thu học phí thường (Deal Won) → SAP"; hint "Luồng học phí thường: hóa đơn dựng từ đơn hàng Ops, công ty hạch toán suy từ pipeline của deal."

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 us03 đã có
2Đơn hàng Opsguide (M2)— tay: tạo đơn cho deal bước 1 trên SAPP OPSBấm "Đã hiểu"
3Soạn thảo hợp đồngstage (M3)HubSpot dealstage → Soạn thảo hợp đồngChuyển thành công
4Giao dịch trong đơnguide (M2)— tay: tạo + confirm transaction, tổng ≥ order amountBấm "Đã hiểu"
5Kéo sang Wonstage (M3)HubSpot dealstage → Won - Hoàn tất thủ tục (bắn event SAP)Chuyển thành công
6Đồng bộ lại hóa đơnresync (M6)HubSpot trang_thai_dong_bo_hoa_don = Đồng bộ lại (story US-08)Bấm ≥ 1 lần thành công
7Đồng bộ lại reconcileresync (M6)HubSpot trang_thai_tu_dong_reconcile = Đồng bộ lại (story US-08)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ở, bước 2–7 khoá (US-D01)N/A
LoadingTải pipeline / stageTheo khối US-D03 M1, M3N/A
Has dataĐã tạo dealDeal id hiện ở thanh ngữ cảnh + "Log SAP" bật (US-D02)N/A
EmptyPortal chưa cấu hình pipeline us03Cảnh báo ở bước 1 (US-D03 EC-M1.3)N/A
ErrorLỗi ở bướcTheo khối US-D03N/A
DisabledProdFlow không chạy trên Prod (NFR-D-02)N/A
Fields ​

Field của bước 1 (khối deal, US-D03 M1) — riêng flow này:

FieldRequiredTypeDefaultFormatValidationError MessageVisibilityDepends On
doi_tuong_mua_hangYesEnum HubSpot——BR-02"Còn thiếu: doi_tuong_mua_hang"Always—
thoi_gian_ket_thuc_dao_tao_bo_sungYesDate HubSpot——BR-02"Còn thiếu: …"Always—
cccd_ho_chieuYes (cá nhân)TextDanh tính test—BR-02"Còn thiếu: cccd_ho_chieu"Nhánh cá nhândoi_tuong_mua_hang
ma_so_thue_cong_tyYes (doanh nghiệp)Text——BR-02"Còn thiếu: …"Nhánh doanh nghiệpdoi_tuong_mua_hang
ngay_ghi_nhan_doanh_thu, co_so_hoc__new_No (khuyến nghị)Date / Enum——BR-03Cảnh báo mềmAlways—
h_t_n, phone_number, email, dia_chiNoTextDanh tính test———Nhánh cá nhân—
ten_cong_ty, phone_number, email, dia_chi_cong_tyNoText————Nhánh doanh nghiệp—
hubspot_owner_idNoDropdown (3 owner cố định, OQ-D-12)————Always—
goi_khoa_hoc, tvts_uu_ai_bo_sung_ap_dung, loai_phi_dich_vu—Không hiển thị (lý do)——BR-04—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-04. ⚠️ 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 [IT TEST][SAPP-26878] US-03 … <n>; bước 2 mở

Error cases:

CaseExpected Handling
Thiếu field bắt buộc"Còn thiếu: …"
A2 - Chuyển stage (bước 3, 5) &ZeroWidthSpace;
ItemDescription
TriggerBấm "Chuyển stage"
BehaviorTheo US-D03 M3 A1; stage gợi ý theo BR-05. Bước 5 là mốc Won bắn event SAP (REL-08). ⚠️ Ghi PROD: Staging kéo stage trên portal production (NFR-D-03, OQ-D-02).
Success ResultDeal ở stage đích

Error cases:

CaseExpected Handling
Deal không do tool tạo13033 (US-D03 BR-08)
A3 - Xác nhận hướng dẫn (bước 2, 4) &ZeroWidthSpace;
ItemDescription
TriggerBấm "Đã hiểu"
BehaviorTheo US-D03 M2; người dùng tự làm trên SAPP OPS (OQ-D-10). 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) &ZeroWidthSpace;
ItemDescription
TriggerBấm "Đồng bộ lại"
BehaviorTheo US-D03 M6 A1 (BR-07); ghi lượt vào bucket story US-08. ⚠️ 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ước đó trốngCảnh báo "Property này đang trống — deal chưa từng qua SAP… Kéo Won ở bước 5 trước đã." (bước 6) / "…Thường phải đồng bộ lại hóa đơn (bước 6) xong trước." (bước 7)
Acceptance Criteria của màn M1 &ZeroWidthSpace;
AC-M1.1 - Đi hết 7 bước &ZeroWidthSpace;
gherkin
Given chip "US-03 · Học phí thường" trên Dev
When người dùng lần lượt hoàn tất bước 1 → 7 theo bảng bước
Then mỗi bước mở sau khi bước trước xong, bước 2 và 4 xong khi bấm "Đã hiểu"
And bước 7 hiện "… hết luồng"

Maps to:

  • Business Rule: BR-01, BR-06
AC-M1.2 - Bắt buộc theo nhánh &ZeroWidthSpace;
gherkin
Given doi_tuong_mua_hang = cá nhân
When chưa điền cccd_ho_chieu
Then nút "Tạo deal" tắt với "Còn thiếu: cccd_ho_chieu"
Given doi_tuong_mua_hang = doanh nghiệp
Then field bắt buộc là ma_so_thue_cong_ty thay cho cccd_ho_chieu

Maps to:

  • Business Rule: BR-02
AC-M1.3 - Khuyến nghị và field bị loại &ZeroWidthSpace;
gherkin
Given bước 1 đang mở
When ngay_ghi_nhan_doanh_thu để trống
Then hiện cảnh báo "Chưa điền Ngày ghi nhận doanh thu → `posting_date` rỗng, SAP sẽ reject hóa đơn." nhưng vẫn tạo được deal
And form không có ô goi_khoa_hoc, tvts_uu_ai_bo_sung_ap_dung, loai_phi_dich_vu mà hiện lý do loại

Maps to:

  • Business Rule: BR-03, BR-04
AC-M1.4 - Stage gợi ý &ZeroWidthSpace;
gherkin
Given deal đã tạo ở pipeline học phí
When mở bước 3
Then dropdown chọn sẵn "Soạn thảo hợp đồng"
When mở bước 5
Then dropdown chọn sẵn "Won - Hoàn tất thủ tục"

Maps to:

  • Business Rule: BR-05
AC-M1.5 - Đồng bộ lại hai loại trên cùng deal &ZeroWidthSpace;
gherkin
Given deal bước 1 đã kéo Won
When người dùng bấm "Đồng bộ lại" ở bước 6 rồi ở bước 7
Then trang_thai_dong_bo_hoa_don rồi trang_thai_tu_dong_reconcile của chính deal đó = "Đồng bộ lại"
And mỗi lần bấm thêm một lượt vào lịch sử story US-08

Maps to:

  • Business Rule: BR-07
Negative AC / Edge Cases của màn M1 &ZeroWidthSpace;
IDTình huốngHành vi mong đợi
EC-M1.1Kéo Won khi chưa tạo đơn / giao dịch trên OpsTool không kiểm (bước 2, 4 chỉ là hướng dẫn); hệ ngoài có thể không phát hóa đơn
EC-M1.2⚠️ Observed: bước 1 chọn "Dùng deal có sẵn"Bước 2–7 tự đánh dấu "đã bỏ qua" và tính là xong (US-D01 EC-M2.3) → OQ-D-06
EC-M1.3Bấm bước 7 trước khi bước 6 từng chạyKhông xảy ra qua gate; nếu bỏ qua bước 6 thì bước 7 vẫn ghi và cảnh báo nếu property trống
EC-M1.4⚠️ Observed: contact mới trùng email trên StagingContact thật trên portal prod bị cập nhật (US-D03 EC-M1.5) → OQ-D-16

5. Cross-feature AC &ZeroWidthSpace;

AC-X.1 - Kéo Won bắn event SAP &ZeroWidthSpace;

gherkin
Given đơn và giao dịch đã có trên Ops
When bước 5 kéo deal sang "Won - Hoàn tất thủ tục"
Then hệ ngoài (webhook HubSpot → lms-be → SAP) phát hóa đơn và ghi trạng thái về deal (Fact theo hint)

Maps to:

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

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

gherkin
Given deal bước 1 đã kéo Won hoặc đã đồng bộ lại
When người dùng bấm "Log SAP"
Then log SAP của deal hiển thị theo US-P05 (sự kiện, bước SAP_CALLED, callback)

Maps to:

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

Ghi chú: deal của flow này đồng bộ lại được cả từ màn "Re-sync US-03" (US-D18) — liên hệ nội bộ FS, không phải REL.