7.4 KiB
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