# 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.