Files
sys-analysis-design/.claude/skills/ba-2-analysis/templates/business-rules.md
2026-09-22 13:46:36 +07:00

7.4 KiB
Raw Blame History

BR — Business Rules — <Tên module>

Version 1.0
Date YYYY-MM-DD
Author (skill ba-2-analysis)
Status 🟡 Draft
Approved by —
Source
Scope

Change Log

Version Date Người sửa Thay đổi CR

1. Danh sách quy tắc

Rule sống độc lập với user story. Cùng một rule thường chi phối nhiều US; nhét rule vào mô tả US thì sửa một chỗ sẽ quên chín chỗ.

BR-001 — <tên ngắn>

Loại Ràng buộc dữ liệu / Điều kiện hành động / Tính toán / Quy trình-phê duyệt
Nguồn 🔴 Quy định pháp luật / 🟠 Hợp đồng-chính sách / 🟢 Thói quen nội bộ
Người chốt STK-nn, ngày…
RQ RQ-007
US áp dụng US-011, US-013
Khi vi phạm Chặn / Cảnh báo cho qua / Chỉ ghi log
Có ngoại lệ Không / Có — ai được cho phép: …
Có thể đổi trong 1 năm Có / Không

Phát biểu:

(một câu, một quy tắc — quy tắc W1)

Điều kiện áp dụng: (khi nào rule này có hiệu lực)

Ví dụ đúng / sai:

Trường hợp Dữ liệu Kết quả mong đợi
Hợp lệ Cho qua
Vi phạm Chặn, báo E-XXX-0001
Biên

Cột Nguồn quyết định độ cứng của rule:

Nguồn Được đề xuất bỏ/sửa không
🔴 Quy định pháp luật Không. Chỉ tuân thủ, và phải ghi rõ điều khoản nào
🟠 Hợp đồng / chính sách công ty Có, nhưng phải qua cấp ký hợp đồng/chính sách
🟢 Thói quen nội bộ Có — và nên hỏi khi nó đang cản trở, vì thường không ai nhớ vì sao có

2. Bảng tổng hợp

ID Tên Loại Nguồn US áp dụng Khi vi phạm Mã lỗi (GĐ3)
BR-001 🔴 US-011 Chặn E-STL-0001

3. Vòng đời trạng thái

Bắt buộc với mọi thực thể có trạng thái (quy tắc W6).

Thực thể: <tên>

Bốn câu phải trả lời:

Câu hỏi Trả lời
Trạng thái khởi tạo
Trạng thái cuối (không đi tiếp được)
Từ trạng thái cuối quay lại được không
Trạng thái nào cho phép xoá

Sơ đồ:

stateDiagram-v2
    state "Nháp" as Nhap
    state "Chờ duyệt" as ChoDuyet
    state "Đã duyệt" as DaDuyet
    state "Đã đóng" as DaDong

    [*] --> Nhap
    Nhap --> ChoDuyet: gửi duyệt (đủ trường bắt buộc)
    ChoDuyet --> DaDuyet: duyệt
    ChoDuyet --> Nhap: từ chối
    DaDuyet --> DaDong: đóng (có ghi chú lý do)
    DaDong --> [*]

ID trạng thái không dấu, nhãn có dấu — xem ../../ba-lifecycle/references/diagram-rules.md §1.

Bảng chuyển trạng thái:

# Nguồn Sự kiện Điều kiện Đích Ai được làm BR Ghi vết
1 Nháp Gửi duyệt Đã điền đủ trường bắt buộc Chờ duyệt Người tạo BR-005 ✅

Chuyển trạng thái KHÔNG được phép (ghi ra để dev biết mà chặn):

Từ Sang Vì sao cấm
Đã đóng Nháp Mất dấu vết đối soát

4. Mô hình dữ liệu khái niệm (ERD)

🔴 Mục bắt buộc khi US có từ 2 thực thể trở lên. Không có nó, dev tự suy ra quan hệ giữa các thực thể từ những bảng field rời rạc của từng màn hình — và mỗi người suy một kiểu.

erDiagram
    CUA_HANG ||--o{ GIAO_DICH : "phát sinh"
    GIAO_DICH ||--o| CHENH_LECH : "sinh ra khi lệch"
    NGUOI_DUNG ||--o{ CHENH_LECH : "xử lý"

    CUA_HANG {
        string ma_cua_hang PK "3-20 ký tự"
        string ten
        enum   trang_thai
    }
    GIAO_DICH {
        bigint id PK
        string ma_cua_hang FK
        decimal so_tien "VND"
        datetime thoi_diem "UTC"
    }
    CHENH_LECH {
        bigint id PK
        bigint giao_dich_id FK
        decimal so_tien "VND"
        enum   trang_thai
    }

Tên thực thể không dấu, viết hoa; tên tiếng Việt để ở bảng §4.1. Ký hiệu lực lượng: ||--o{ một-nhiều · ||--|| một-một · ||--o| một-không hoặc một · }o--o{ nhiều-nhiều.

🔴 Đây là mô hình khái niệm, không phải schema. Nêu thực thể, quan hệ, khoá nghiệp vụ. Không nêu kiểu dữ liệu vật lý, index, bảng trung gian, chiến lược phân mảnh — đó là việc của Solution Architect và dev.

4.1 Bảng thực thể (bắt buộc đi kèm sơ đồ — quy tắc W13)

Thực thể Tên nghiệp vụ Khoá nghiệp vụ Số bản ghi hiện có Ai tạo Vòng đời BR
CUA_HANG Cửa hàng ma_cua_hang ~1.200 Admin §3 BR-021

Khoá nghiệp vụ là thứ người dùng dùng để nhận biết, không phải id kỹ thuật. Nó quyết định quy tắc chống trùng — thiếu cột này thì rule "không được trùng" không có nghĩa.

4.2 Quan hệ cần làm rõ

Sơ đồ chỉ vẽ được lực lượng. Bốn câu sau phải trả lời bằng chữ:

Quan hệ Xoá bên "một" thì bên "nhiều" ra sao Bắt buộc có quan hệ? Đổi được sang bên khác? BR
CUA_HANG → GIAO_DICH Chặn xoá nếu còn giao dịch ✅ giao dịch luôn thuộc 1 cửa hàng ❌ BR-006

4.3 Thực thể ngoài phạm vi

Thực thể có nhắc tới nhưng do hệ thống khác sở hữu — nêu rõ để không ai định tạo bảng cho nó.

Thực thể Ai sở hữu Lấy về bằng cách nào Cache không

5. Công thức tính toán

ID Đại lượng Công thức Đơn vị Làm tròn Nguồn dữ liệu Ví dụ
BR-0nn Chênh lệch tổng POS − tổng hệ thống VND Tới đơn vị, làm tròn xuống 1.234.567 − 1.234.000 = 567

🔴 Ghi rõ: thứ tự phép tính, làm tròn ở bước nào (làm tròn từng dòng rồi cộng ≠ cộng rồi làm tròn), múi giờ với mọi mốc thời gian, tiền tệ với mọi số tiền.

6. Kiểm tra mâu thuẫn giữa các rule

Đối chiếu từng cặp rule cùng tác động lên một thực thể.

# Rule A Rule B Mâu thuẫn ở đâu Trạng thái
1 BR-003 BR-011 🔴 Chờ PO quyết — OQ-0nn

Không tự chọn bên nào. Đưa PO quyết, ghi vào DEC-nn.

7. Rule của hệ thống hiện tại bị thay đổi

Chỉ dùng khi làm enhancement.

Rule cũ Đang áp dụng ở đâu Đổi thành Dữ liệu cũ theo rule cũ xử lý sao

8. Open Questions

ID Câu hỏi Hỏi ai Từ ngày Chặn gì

9. Ngoài phạm vi

  • Thông điệp lỗi hiển thị nguyên văn → GĐ3 SRS §bảng mã lỗi
  • Ai được thực hiện hành động → RBAC_…md