# Ví dụ minh hoạ — `ba-2-analysis`
Tách khỏi `SKILL.md` để quy trình không lẫn ví dụ của một ngành cụ thể.
---
## Bước 2 · Cây phân rã ba tầng
Không nhảy cóc từ `RQ` xuống `US`.
### Bán lẻ — đối soát POS
```mermaid
flowchart LR
RQ["RQ-007 Phát hiện chênh lệch
trong ngày phát sinh"] --> E02["EPIC-02 Đối soát POS"]
E02 --> F05["FEAT-05 Nhập dữ liệu POS"]
E02 --> F06["FEAT-06 So khớp và xử lý"]
F05 --> U11(["US-011 Tải lên file POS hằng ngày"])
F05 --> U12(["US-012 Xem kết quả nhập và lỗi từng dòng"])
F06 --> U13(["US-013 Xem danh sách chênh lệch"])
F06 --> U14(["US-014 Ghi chú và đóng một chênh lệch"])
```
### Y tế — đặt lịch khám
```mermaid
flowchart LR
RQ["RQ-003 Biết ngay slot
còn trống hay không"] --> E01["EPIC-01 Đặt lịch trực tuyến"]
E01 --> F01["FEAT-01 Tra cứu slot"]
E01 --> F02["FEAT-02 Giữ chỗ và xác nhận"]
F01 --> U01(["US-001 Xem slot trống theo chuyên khoa và ngày"])
F01 --> U02(["US-002 Lọc slot theo bác sĩ"])
F02 --> U03(["US-003 Giữ slot tạm 10 phút khi đang điền"])
F02 --> U04(["US-004 Xác nhận đặt lịch, nhận mã hẹn"])
```
### Use case của cùng module y tế — hình mang vào buổi duyệt G2
```mermaid
flowchart LR
BN(["👤 Bệnh nhân"])
DD(["👤 Điều dưỡng tiếp nhận"])
subgraph HT["Phạm vi US-001 … US-004"]
UC01(["US-001 Xem slot trống"])
UC02(["US-002 Lọc theo bác sĩ"])
UC03(["US-003 Giữ slot tạm"])
UC04(["US-004 Xác nhận đặt lịch"])
end
BHYT[["Hệ thống BHYT — ngoài phạm vi"]]
BN --- UC01
BN --- UC02
BN --- UC03
BN --- UC04
DD --- UC01
DD --- UC04
UC04 --- BHYT
```
Cùng một phạm vi, hai góc nhìn: cây phân rã cho BA truy vết `RQ → US`; use case cho PO thấy
**ai làm được gì** trong một hình.
🔴 `US-003` là US mà **chỉ có AS-IS mới lộ ra**: quan sát thấy hai bệnh nhân cùng chọn một
slot rồi một người bị gọi lại báo huỷ. Không quan sát thì không ai nghĩ tới việc giữ chỗ tạm.
---
## Bước 2 · Tách US quá lớn — bốn cách, theo thứ tự
| Cách | Ví dụ |
|---|---|
| **1. Theo luồng nghiệp vụ** | "Quản lý cửa hàng" → tạo · sửa · xoá · xem = bốn US |
| **2. Theo quy tắc** | "Đặt lịch" → luồng thường / luồng bệnh nhân BHYT (cần tra cứu thẻ) |
| **3. Theo dữ liệu** | "Nạp dữ liệu" → nguồn POS trước, nguồn ERP sau |
| **4. Theo vai trò** | "Xử lý chênh lệch" → người ghi chú / người phê duyệt đóng |
❌ **Không tách theo tầng kỹ thuật.** "US làm API" + "US làm giao diện" không giao được mẩu
giá trị nào chạy được đầu-cuối — và không ai nghiệm thu được từng cái riêng.
---
## Bước 3 · Nguồn của rule quyết định độ cứng
| Rule | Domain | Nguồn | Được đề xuất bỏ không |
|---|---|---|---|
| "Hồ sơ bệnh án lưu tối thiểu 10 năm" | Y tế | 🔴 Quy định pháp luật | Không — chỉ tuân thủ, ghi rõ điều khoản |
| "Chênh lệch > 10 triệu cần trưởng phòng duyệt" | Bán lẻ | 🟠 Chính sách công ty | Có, qua cấp ký chính sách |
| "Mã cửa hàng phải viết hoa" | Bán lẻ | 🟢 Thói quen nội bộ | Có — **và nên hỏi**, thường không ai nhớ vì sao có |
Hỏi nguồn của mọi rule. Ba loại này có độ cứng hoàn toàn khác nhau, và gộp chúng lại làm mất
khả năng đàm phán ở đúng chỗ đáng đàm phán.
---
## Bước 3 · Công thức tính toán — chỗ hay sai
```
BR-045 | Chênh lệch đối soát
Công thức: tổng POS − tổng hệ thống
Đơn vị: VND
🔴 Thứ tự: làm tròn TỪNG DÒNG tới đơn vị rồi mới cộng
(khác với cộng rồi làm tròn — lệch tới vài nghìn đồng/ngày)
Múi giờ: giao dịch tính theo ngày làm việc của cửa hàng (UTC+7),
KHÔNG theo timestamp UTC của bản ghi
Ví dụ: 1.234.567 − 1.234.000 = 567
```
Ba thứ phải ghi rõ ở mọi công thức, ở mọi domain: **thứ tự phép tính** · **làm tròn ở bước
nào** · **múi giờ / đơn vị**.
---
## Bước 4 · Ma trận phân quyền — hỏi câu phủ định
Ma trận toàn ✅ nghĩa là chưa phân tích. Hỏi *"vai trò nào KHÔNG được làm việc này?"*
| Hành động | Nhân viên | Trưởng nhóm | Kế toán | Admin |
|---|---|---|---|---|
| Xem danh sách | 🔶 chỉ cửa hàng phụ trách | ✅ | ✅ | ✅ |
| Duyệt chênh lệch | ❌ | 🔶 **không tự duyệt bản ghi mình tạo** *(SoD-01)* | ❌ | ❌ |
| Xuất dữ liệu | 🔶 cần nhập lý do | ✅ | ✅ | ✅ |
Chú ý ô Admin ở dòng "Duyệt": ❌. Admin có mọi quyền kỹ thuật nhưng **không có thẩm quyền
nghiệp vụ** — đây là chỗ ma trận hay bị điền sai theo quán tính.
Ô `🔶` **bắt buộc ghi điều kiện ngay trong ô**. `🔶` trống là ô chưa phân tích xong.
---
## Bước 5 · Dữ liệu cũ — ba lựa chọn, phải chọn một
| Domain | Tình huống | Lựa chọn | Chi phí kèm theo |
|---|---|---|---|
| Bán lẻ | Thêm cột "loại cửa hàng", 12.000 bản ghi cũ null | **Migrate** — điền `THƯỜNG` | Script + đối chiếu count sau khi chạy |
| Y tế | Đổi quy tắc mã hồ sơ từ 2026 | **Song song** — hồ sơ cũ giữ mã cũ | Quy tắc phân biệt phải hiển thị được cho điều dưỡng |
| Logistics | Thêm trường "nhiệt độ" cho lô hàng lạnh | **Giữ nguyên** — lô cũ không có | Chấp nhận báo cáo trước 2026 không có cột này; **phải báo người đọc báo cáo** |
"Sẽ xử lý sau" không phải câu trả lời. Chưa đủ thông tin để chọn ⇒ `OQ` có người và có hạn.