Skip to content

US-D15: Flow P2 — Trường chiều (story SAPP US-07) ​

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.

Mode B – As-built tại commit e77c47a · nguồn Fact: inventory 26878 §3.3 (A-125). Khung stepper → US-D01 · lịch sử / log SAP → US-D02 · loại bước → US-D03. U01:x = bước x của luồng US-01 ở US-D09 §4a.

FieldValue
US IDUS-D15
Role thực hiệnNgười dùng tool — Assumption (OQ về G-01 · inventory Q-05 — xem 00-overview §6)
PhasePhase 2 của SAPP-26878 (DTTH) · chip US-07 · Trường chiều (id us07)
PriorityN/A — as-built, đã triển khai (backlog R2: không xếp Priority)
StatusDraft
NFR liên quanNFR-P-01 (quyền, FS nền tảng) · NFR của 26878 — xem 00-overview §5
OQ liên quanOQ-D-07, OQ-D-06, OQ-D-13, OQ-D-15 — xem 00-overview §6 · DR-D-06 — xem 00-overview §6b

1. US Statement ​

text
As a Người dùng tool (Assumption — OQ về G-01)
I want dựng đúng bộ dữ liệu của US-01 (lớp ACCA · F1 · BLENDED · cơ sở NEU), đọc các trường chiều của
       bút toán, và có sẵn công thức dựng dữ liệu lệch cho các ca âm
So that kiểm được rằng bút toán mang đúng các trường chiều (dimensions) mà kế toán dùng để phân bổ
  • Nguồn "So that": shared/runbooks/sapp/sapp-26878/phase-2/us-07/README.md:6 ("Kiểm rằng bút toán mang đúng các trường chiều (dimensions) mà kế toán dùng để phân bổ"); hint luồng sapp-26878-flows.ts:5590. Tiêu chí nghiệm thu của tool: [Assumption] (OQ-D-13).

2. Dependencies & Definition Of Ready ​

N/A — đã triển khai (Mode B). Dependency runtime như US-D09 §2. Các giá trị mong đợi của kiểm chứng gắn với lớp mà bước 3 dựng (chương trình ACCA, môn F1, hình thức BLENDED, cơ sở NEU) — đổi các giá trị đó ở bước 3 thì kiểm chứng tương ứng báo sai (sapp-26878-flows.ts:5384-5401).

3. Business Rules ​

IDRuleÁp dụng ởĐã cover bởi (AC)Nguồn code (Mode B/C)
BR-01Luồng có 18 bước: 16 bước đầu dùng lại nguyên U01:1 → U01:16 theo đúng thứ tự của US-01, thêm 2 bước riêng; không có API riêng và không có bước trả lại mã lớpM1AC-M1.1fe/src/ui/components/works/sapp/sapp-26878-flows.ts:5592-5617
BR-02"Đọc trường chiều" lọc log SAP theo deal_id, tự chạy 9 kiểm chứng với giá trị mong đợi cố định cho lớp ACCA · F1 · BLENDED · NEU, luôn coi là xong; panel SQL 3 câu chỉ đọcM2AC-M2.1 → AC-M2.10sapp-26878-flows.ts:5402-5506
BR-03"Dựng dữ liệu lệch" là bước hướng dẫn liệt kê 10 công thức dựng ca âm (mỗi ca cần lớp / Deal khác và chạy lại lượt quét), xong khi người dùng bấm xác nhận; chỉ một ca cần SQL ghi (đặt loại ghi danh ra ngoài danh sách)M1 - A18AC-M1.2sapp-26878-flows.ts:5523-5574
BR-04Câu SQL ghi không tự chạy và phải qua hộp xác nhậnM1 - A18AC-M1.2fe/src/ui/components/works/sapp/sapp-26878-step-sql.tsx:200-213

4. Design ​

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

text
[Chip "US-07 · Trường chiều", portal Dev | Staging]
  ↓
[M1] U01:1 → U01:2 → … → U01:16
  ↓
[M2] Đọc trường chiều (9 kiểm chứng, luôn "xong")
  ↓
[M1] Dựng dữ liệu lệch (công thức chạy lại chip cho ca âm)

Bảng bước (Fact: sapp-26878-flows.ts:5592-5617).

#Tên bướcLoạiTái dùngGhi gì (hệ thống · môi trường)Điều kiện chuyển (xong)
1–16Kiểm tra kết nối Ops … Chạy lượt quétnhư US-D09U01:1 → U01:16 (đúng thứ tự)Như US-D09 §4a bước 1–16 (Ops dev/staging, HubSpot — ⚠️ portal prod khi Staging, SAP service; Redis run history)Như US-D09
17Đọc trường chiềutrace + sqlriêngKhông ghi (SQL us07.dims chỉ đọc)Luôn xong
18Dựng dữ liệu lệchguide + sqlriêngOps DB chỉ khi người dùng chạy câu us07.skew.1Bấm "Đã đọc công thức dựng lệch"

⚠️ Ghi PROD — trên Staging, bước 8, 9, 11, 14, 15 ghi HubSpot portal production (như US-D09 §4a).

Tình trạng nghiệm thu gần nhất (nguồn ngoài code, chưa kiểm chứng ở R3): runbook ghi 🟡 8/9 trên dev 2026-09-18 — một ca cần lớp nhiều buổi (shared/runbooks/sapp/sapp-26878/phase-2/us-07/README.md:3-4); staging ✅ 2026-09-22 (.../phase-2/staging/README.md §6i).

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

Màn M1 - Chuỗi bước dựng dữ liệu (bước 1–16) và bước 18 ​

FieldValue
Figma frameN/A — as-built, không có Figma
Trigger vào mànChọn chip US-07 · Trường chiều (inventory E-07)
Mô tả ngắnDựng như US-01; bước 18 là danh sách công thức dựng dữ liệu lệch.
UI States ​
StateKhi nàoHiển thịFigma frame
DefaultSitting mớiBước 1 mở (→ US-D01)N/A
LoadingĐang gọi hệ ngoàiNhư US-D09N/A
Has dataBước xongNhư US-D09N/A
EmptyStaging, pool mã lớp rỗngNhư US-D09 EC-M1.2N/A
ErrorHệ ngoài trả lỗiNhư US-D09N/A
DisabledBước khóa; bước 7 trên StagingNhư US-D09N/A
Fields ​
FieldRequiredTypeDefaultFormatValidationError MessageVisibilityDepends On
B18 · id bản ghi ghi danh (class_user_id)—Text—idHint: id bản ghi ghi danh, không phải id người dùng; lấy trên màn lớp ở Ops—Always—

Field bước 1–16 → US-D09.

Actions ​
A18 - Dựng dữ liệu lệch (bước 18) ​
ItemDescription
TriggerMở bước, đọc checklist; tùy chọn chạy câu ① (xác nhận); bấm "Đã đọc công thức dựng lệch"
BehaviorChecklist 10 ca: Center = ALL khi lớp Hybrid/Live Online có cơ sở; cơ sở chưa map; lớp F2F không có cơ sở; Short courses → CMA_02; loại trừ B2B/Finhub; nhánh dự phòng theo pipeline; bộ ba không có trong danh mục; thiếu định danh khách; tổng giờ bằng 0; loại ghi danh ngoài danh sách (BR-03). Câu ① ghi Ops DB dev/staging; câu ② chỉ đọc danh sách cơ sở.
Success ResultBước xong khi xác nhận; mỗi ca âm cần chạy lại chip với lớp / Deal khác

Error cases:

CaseExpected Handling
Ca Suối Nhum (UEL)Guide: không dựng được trên dev (không có dữ liệu cơ sở)
Acceptance Criteria của màn M1 ​
AC-M1.1 - Chuỗi 18 bước ​
gherkin
Given một sitting mới của luồng US-07
When người dùng xem stepper
Then bước 1–16 trùng tên và thứ tự với bước 1–16 của US-01, bước 17 "Đọc trường chiều", bước 18 "Dựng dữ liệu lệch"
And không có bước "Trả lại mã lớp"

Maps to:

  • Business Rule: BR-01
AC-M1.2 - Công thức dựng lệch ​
gherkin
When mở bước 18
Then thấy danh sách 10 công thức ca âm và panel SQL (câu ① ghi, câu ② đọc)
When chạy câu ① và xác nhận
Then loại ghi danh của bản ghi đã nhập đổi sang giá trị ngoài danh sách
And bước xong khi bấm "Đã đọc công thức dựng lệch"

Maps to:

  • Business Rule: BR-03, BR-04
Negative AC / Edge Cases của màn M1 ​
IDTình huốngHành vi mong đợi
EC-M1.1⚠️ Observed — chạy luồng trên StagingLuồng không có bước "Trả lại mã lớp" (chỉ US-01 có), trong khi runbook staging §0.1 ghi mọi lượt đều trả mã. Mỗi lượt giữ vĩnh viễn một mã của pool staging; cạn pool → bước Tạo lớp của mọi luồng phase 2 bị chặn. OQ-D-07 · DR-D-06 — xem 00-overview §6 / §6b
EC-M1.2Đổi hình thức / cơ sở / môn ở bước 3Kiểm chứng tương ứng ở bước 17 báo fail — theo code đó là ca âm có chủ đích
EC-M1.3⚠️ Observed — "Dùng deal có sẵn" ở bước 8Như US-D09 EC-M1.3 — OQ-D-06

Màn M2 - Bước 17 "Đọc trường chiều" ​

FieldValue
Figma frameN/A — as-built, không có Figma
Trigger vào mànMở bước 17
Mô tả ngắnTrace log SAP theo deal_id (→ US-P05) + 9 kiểm chứng trên khối dimensions và 3 trường cấp trên.
UI States ​
StateKhi nàoHiển thịFigma frame
DefaultMở bướcHint + mã lớp + trace tự chạy + panel SQL us07.dimsN/A
LoadingĐang traTrace đang tảiN/A
Has dataCó trailKết quả 9 kiểm chứngN/A
EmptyChưa có bút toánTrace rỗngN/A
ErrorTrace lỗi→ US-P05N/A
DisabledN/AN/AN/A
Fields ​

N/A — bước chỉ đọc.

Actions ​
A17 - Đọc trường chiều ​
ItemDescription
TriggerMở bước (tự chạy); chạy tay SQL
Behavior9 kiểm chứng (BR-02). SQL ① mẫu số tuyệt đối từng dòng, ② mã cơ sở trong LMS, ③ lỗi dữ liệu nguồn gần đây — đều chỉ đọc.
Success ResultBước luôn xong

Error cases:

CaseExpected Handling
Không đọc được trườngKiểm chứng = unknown
Acceptance Criteria của màn M2 ​

AC = kiểm chứng tự chấm (sapp-26878-flows.ts:5402-5472).

AC-M2.1 - department cố định CX ​
gherkin
Then pass khi dimensions.department = CX

Maps to:

  • Business Rule: BR-02
AC-M2.2 - exp_rev_code cố định REV.0005 ​
gherkin
Then pass khi dimensions.exp_rev_code = REV.0005

Maps to:

  • Business Rule: BR-02
AC-M2.3 - sub_bu suy từ Program của khóa ​
gherkin
Then pass khi dimensions.sub_bu = ACCA_01

Maps to:

  • Business Rule: BR-02
AC-M2.4 - center tra từ cơ sở (BLENDED) ​
gherkin
Then pass khi dimensions.center = NEU

Maps to:

  • Business Rule: BR-02
AC-M2.5 - item_code tra từ chương trình · môn · hình thức ​
gherkin
Then pass khi item_code = SALE.01.000004

Maps to:

  • Business Rule: BR-02
AC-M2.6 - Mẫu số tính trên toàn bộ lớp ​
gherkin
Then pass khi standard_hours_remaining giảm đúng bằng lesson_hours của buổi liền trước, từng bước một

Maps to:

  • Business Rule: BR-02
AC-M2.7 - Có customer_id ​
gherkin
Then pass khi phần tử cuối của payload CÓ customer_id

Maps to:

  • Business Rule: BR-02
AC-M2.8 - Có branch_id ​
gherkin
Then pass khi phần tử cuối của payload CÓ branch_id

Maps to:

  • Business Rule: BR-02
AC-M2.9 - Có dimensions.project_code ​
gherkin
Then pass khi phần tử cuối của payload CÓ dimensions.project_code

Maps to:

  • Business Rule: BR-02
AC-M2.10 - Bước đọc không chặn ​
gherkin
Given một kiểm chứng fail hoặc unknown
Then bước 17 vẫn "xong" và bước 18 mở

Maps to:

  • Business Rule: BR-02
Negative AC / Edge Cases của màn M2 ​
IDTình huốngHành vi mong đợi
EC-M2.1⚠️ Observed (OQ-D-20) — hint luồng và hint bước ghi "Tám kiểm chứng"Code khai 9 kiểm chứng (sapp-26878-flows.ts:5402-5472 vs :5479,5590). Chỉ là lệch mô tả trong màn; đề xuất ghi Drift nội bộ — điều phối viên quyết
EC-M2.2Lớp chỉ có một buổiKiểm chứng "Mẫu số tính trên toàn bộ lớp" cần nhiều buổi để so; runbook ghi đây là ca 🟡 chưa đo được
EC-M2.3Kiểm chứng fail nhưng đi tiếpKhông có gate — OQ-D-15

5. Cross-feature AC ​

AC-X.1 - Dùng lại bước US-01 ​

gherkin
Given bước U01:1–16 thay đổi ở US-01
When mở luồng US-07
Then luồng dùng đúng định nghĩa mới

Maps to:

  • Liên quan nội bộ FS 26878 (không có mã REL) (US-D09)