# Business Rules — MedBASE V2

> Đây là **xương sống nghiệp vụ chính thức** của MedBASE V2.
> Mọi functional flow, screen, API, QA/UAT và implementation phải bám theo các rule trong tài liệu này.

## I. Nhật ký thay đổi

| Phiên bản | Ngày | Chi tiết | Người cập nhật |
|-----------|------|---------|----------------|
| 1.0 | 24/04/2026 | Chuẩn hóa theo official documentation baseline từ bộ docs/v2 và quá trình migration cấu trúc tài liệu | Huyen Tran |
| 1.1 | 24/04/2026 | Bổ sung BR-BP (Buyer×Product), BR-SP (Seller×Product), KYC-MANUAL, RCL-MANUAL (xuất 0đ), GPP-MANUAL, INV-MANUAL-UPLOAD; đánh dấu Phase 1 / Deferred. | Duy Nguyễn (PO) |
| 1.2 | 24/04/2026 | Rewrite RCL-05/06 + thêm RCL-06.1/06.2 theo D-23. Thêm RX-05..08 (ETC/SPECIAL checkout), BP-08/09 (DEVICE class), BP-10 clarify, KYC-12/13 (cert auto-monitor), KYC-14 (SLA alert). | Duy Nguyễn (PO) |

---

> **Ghi chú chuẩn hóa Official:** Tài liệu này là bản chính thức trong bộ `docs/official/`. Nội dung được chuẩn hóa từ `docs/v2/` và các tài liệu migration bổ sung. Nếu có điểm diễn giải chưa rõ, ưu tiên theo [01-source-of-truth.md](./01-source-of-truth.md).

## II. Nguyên tắc áp dụng

- Rule trong tài liệu này áp dụng cho toàn bộ V2 chính thức
- Rule chi phối hành vi nghiệp vụ, không bị thay thế bởi UI convenience hoặc technical shortcut
- Nếu có xung đột giữa flow mô tả và rule, **rule thắng**
- Rule phải được phản ánh ở:
  - screen/field behavior
  - API validation
  - service orchestration
  - audit / logging
  - QA/UAT scenarios

---

## III. Lead / Referral Rules

| Code | Rule |
|---|---|
| LEAD-01 | Referral source chỉ phục vụ attribution/reporting, không được dùng làm trusted buyer identity. |
| LEAD-02 | Lead tối thiểu phải lưu được phone, source, created_at, current_status. |
| LEAD-03 | Lead phải có lifecycle rõ ràng và có history tối thiểu. |
| LEAD-04 | Lead có thể convert sang registered buyer về sau. |
| LEAD-05 | Chính sách lead duplicate phải được cấu hình rõ và dùng nhất quán trong reporting. |
| LEAD-06 | Lead state change phải có trace về actor, thời điểm và trạng thái mới. |

### Lead status chuẩn
- NEW
- CONTACTED
- REGISTERED
- KYC_SUBMITTED
- VERIFIED
- CONVERTED
- DROPPED

---

## IV. Buyer Rules

| Code | Rule |
|---|---|
| BUY-01 | Buyer identity trong V2 là MedBASE-owned identity. |
| BUY-02 | PMS identity không được coi là trusted business identity để giao dịch. |
| BUY-03 | Buyer phải có hồ sơ tối thiểu trước khi submit KYC / eligibility dossier. |
| BUY-04 | Buyer profile và buyer verification state là hai khái niệm riêng. |
| BUY-05 | Buyer có account không đồng nghĩa với buyer đủ điều kiện giao dịch. |
| BUY-06 | Buyer profile chỉ được sửa bởi buyer hoặc role được cấp quyền phù hợp. |

---

## V. Compliance / KYC / Eligibility Rules

| Code | Rule |
|---|---|
| KYC-01 | Buyer phải chủ động nộp hồ sơ cho MedBASE review. |
| KYC-02 | Mỗi hồ sơ KYC/eligibility phải có status rõ ràng và audit trail tối thiểu. |
| KYC-03 | Reject decision phải có reason. |
| KYC-04 | Verification/eligibility state là source of truth để gate commerce action theo policy. |
| KYC-05 | Quyền approve/reject cuối cùng phải theo role-permission matrix. |
| KYC-06 | Không được bypass verification state bằng DB/manual hack. |
| KYC-07 | Buyer legal qualification validity phải được kiểm tra theo policy khi cần. |
| KYC-08 | Một buyer chỉ có một trạng thái verification hiện hành tại một thời điểm. |
| KYC-09 **[MANUAL-P1]** | Phase 1: thẩm định KYC Buyer thực hiện **thủ công** bởi Admin trên CMS. SLA tối đa **30 phút/case** kể từ khi submit. Không có auto-approve. |
| KYC-10 **[MANUAL-P1]** | Phase 1: gán `BuyerScope` (FULL / LIMITED / SPECIALTY / ENTERPRISE / NON_PHARMA) thực hiện **thủ công** trên CMS sau khi Admin approve, theo ma trận tại [03-business-overview-brd.md §IV-bis.1](./03-business-overview-brd.md). |
| KYC-11 **[MANUAL-P1]** | Phase 1: xác thực GPP/GDP/GMP/GSP của Seller/NCC thực hiện **thủ công**; Admin upload & cập nhật trạng thái certificate (VALID / EXPIRED / PENDING) trên CMS kèm `expiry_date`. |
| KYC-12 **[SYSTEM-P1]** | Hệ thống **tự động flag** certificate sắp hết hạn trong admin dashboard: ≤ 30 ngày (cảnh báo vàng), ≤ 7 ngày (cảnh báo đỏ). Admin review định kỳ + trước khi approve SKU mới của Seller. |
| KYC-13 **[SYSTEM-P1]** | Khi certificate `expiry_date < current_date`, hệ thống **tự động set** `VALID → EXPIRED` và **chặn Seller đăng SKU mới** trong phạm vi chứng chỉ tương ứng. SKU đang active giữ nguyên cho đến khi Admin có quyết định (freeze sale/keep sale) để tránh disrupt đột ngột — ghi audit. |
| KYC-14 **[MANUAL-P1]** | Khi KYC case ở `PENDING_REVIEW` quá **30 phút** (SLA D-12), hệ thống **auto-alert** Ops Lead + hiển thị case ở "SLA Breach" dashboard. Ops Lead quyết định escalate hay re-assign reviewer. Không auto-approve trong mọi trường hợp. |

### KYC / verification status chuẩn
- PENDING_REVIEW
- VERIFIED
- REJECTED
- RESUBMIT_REQUIRED

---

## VI. Product / Catalog Rules

| Code | Rule |
|---|---|
| PROD-01 | Product inactive không được order. |
| PROD-02 | Product visibility, sellability và purchasability có thể là 3 trạng thái khác nhau. |
| PROD-03 | Product type và product legal class phải được quản lý rõ, không được trộn lẫn. |
| PROD-04 | Catalog hiển thị thuộc MedBASE, không phụ thuộc PMS context. |
| PROD-05 | Product legal/compliance data tối thiểu phải có mặt ở các admin/compliance surfaces theo policy. |
| PROD-06 | Product bị stop-sell hoặc recall không được đi qua checkout thành công. |

### Gợi ý taxonomy chuẩn cần chốt

#### Product Type
- DRUG
- SUPPLEMENT
- DEVICE
- OTHER

#### Product Legal Class
- OTC
- ETC
- SPECIAL_CONTROLLED
- NON_DRUG

---

## VII. Prescription / Restricted Commerce Rules

> Nhóm rule này là bắt buộc nếu V2 có các sản phẩm yêu cầu kiểm soát bổ sung.

| Code | Rule |
|---|---|
| RX-01 | Nếu product thuộc nhóm yêu cầu prescription/control đặc biệt, verification cơ bản của buyer chưa đủ để hoàn tất sale. |
| RX-02 | Checkout phải kiểm tra điều kiện prescription/control theo policy hiện hành trước khi commit order. |
| RX-03 | Bằng chứng prescription/control khi áp dụng phải có khả năng audit. |
| RX-04 | Nếu control bắt buộc chưa thỏa, order không được commit thành công. |
| RX-05 **[MANUAL-P1]** | Phase 1: khi order line có product tag **ETC**, buyer **bắt buộc upload ảnh/scan đơn thuốc** tại checkout (định dạng JPG/PNG/PDF, tối đa 10MB/file). Thiếu file → chặn checkout. Audit lưu file + actor + timestamp. |
| RX-06 **[MANUAL-P1]** | Phase 1: đơn thuốc được attach tại order line level; Admin/Compliance có thể review sau và đánh `PRESCRIPTION_INVALID` để trigger hoàn tiền/huỷ đơn nếu phát hiện giả mạo. Không có OCR/verify tự động. |
| RX-07 **[MANUAL-P1]** | Phase 1: product tag **SPECIAL** **cấm bán lẻ online tuyệt đối** (TT 26/2025 + Luật Dược 44/2024). Chỉ hiển thị thông tin giới thiệu; mọi action add-to-cart/checkout bị chặn cho mọi Buyer scope. |
| RX-08 **[DEFERRED-P2]** | Tích hợp eCabinet / Cổng Dược Quốc Gia để verify đơn thuốc điện tử real-time thuộc Phase 2 (Q3 2026 theo D-22). |

---

## VIII. Recall / Stop-Sell / Batch Rules

| Code | Rule |
|---|---|
| RCL-01 | Product hoặc batch bị recall phải bị chặn giao dịch theo policy. |
| RCL-02 | Product hoặc batch bị stop-sell phải không được commit vào order mới. |
| RCL-03 | Recall/stop-sell action phải có log và actor rõ ràng. |
| RCL-04 | Nếu V2 dùng batch-aware selling policy, batch hết hạn hoặc không hợp lệ không được allocate vào order. |
| RCL-05 **[MANUAL-P1]** | Phase 1: khi có QĐ thu hồi (từ Cục QLD/SYT) hoặc voluntary recall từ NSX/NK, Admin tạo `RecallCase` trên CMS kèm mức độ (1/2/3) + phạm vi (product/batch) + QĐ thu hồi. Hệ thống set `ProductStatus/BatchStatus = RECALLED`, dừng hiển thị/đặt hàng, release reservation ACTIVE, huỷ đơn PENDING/CONFIRMED và hoàn tiền nếu đã thanh toán. |
| RCL-06 **[MANUAL-P1]** | Phase 1: xử lý tài chính sau thu hồi tuân **NĐ 123/2020 + TT 78/2021**. NCC xuất **hoá đơn điều chỉnh giảm** (hoặc hoá đơn thay thế) trên cơ sở **biên bản thu hồi**; giá trị điều chỉnh = giá trị hàng trả thực tế. **Không dùng khái niệm "hoá đơn 0đ"**. NCC/Admin upload hoá đơn điều chỉnh + biên bản thu hồi + biên bản tiêu huỷ (nếu có) vào tài liệu đơn hàng. |
| RCL-06.1 **[MANUAL-P1]** | NCC/NSX/NK chủ trì reverse logistics (liên hệ buyer, vận chuyển thu hàng, lập biên bản có chữ ký hai bên, xử lý hàng thu hồi). MedBASE là facilitator: chặn sales, notify buyer, track evidence, không tự xuất chứng từ tài chính thay NCC. |
| RCL-06.2 **[MANUAL-P1]** | NSX/NK lập **Báo cáo kết quả thu hồi** gửi Cục QLD/SYT theo thời hạn quy định (theo mức độ thu hồi). Admin upload báo cáo vào RecallCase; RecallCase chỉ chuyển `CLOSED` khi có đủ: QĐ thu hồi, biên bản thu hồi từng đơn, hoá đơn điều chỉnh giảm, biên bản tiêu huỷ (nếu có), báo cáo QLD. |
| RCL-07 **[MANUAL-P1 Hybrid]** | Đồng bộ trạng thái SĐK/thu hồi với **Cổng Dược Quốc Gia** theo mô hình hybrid (D-21): (a) Admin export CSV/Excel từ dav.gov.vn **mỗi tuần**, upload lên CMS — hệ thống chạy diff với catalog và cảnh báo SKU lệch; (b) Khi Cục QL Dược phát hành công văn thu hồi, Admin upload ngay và trigger UC-14. Tự động hoá qua API chuyển Phase 2 (Q3 2026) khi API public sẵn sàng. |

---

## IX. Cart / Checkout Rules

| Code | Rule |
|---|---|
| CART-01 | Cart là dữ liệu nội bộ của MedBASE. |
| CART-02 | Cart không phải source of truth cuối cùng cho stock availability; checkout phải revalidate. |
| ORD-01 | Create-order phải idempotent. |
| ORD-02 | Eligibility phải được re-check tại checkout. |
| ORD-03 | Product control và stop-sell checks phải chạy lại ở checkout path. |
| ORD-04 | Inventory reservation phải xảy ra trước khi business order được finalize. |
| ORD-05 | Nếu reservation thành công nhưng order fail, phải có compensation release an toàn. |
| ORD-06 | Order truth thuộc MedBASE. |
| ORD-07 | Order history phải hiển thị từ MedBASE order records. |

### Order status chuẩn
- PENDING
- CONFIRMED
- REJECTED
- COMPLETED
- CANCELLED

---

## X. Inventory Rules

| Code | Rule |
|---|---|
| INV-01 | available_stock không được âm. |
| INV-02 | reserved_stock không được âm. |
| INV-03 | Reservation phải idempotent cho cùng order intent / line logic. |
| INV-04 | Reservation lifecycle phải hỗ trợ ACTIVE / RELEASED / CONSUMED. |
| INV-05 | Reject/cancel/compensation release không được double-release. |
| INV-06 | Reservation path là strong-consistency path. |
| INV-07 | Manual stock adjustment phải có reason và actor. |
| INV-08 | Ops không được phá reservation invariants. |

### Reservation status chuẩn
- ACTIVE
- RELEASED
- CONSUMED

---

## XI. Admin / Ops Rules

| Code | Rule |
|---|---|
| OPS-01 | Admin/Ops chỉ được thao tác qua supported application flows. |
| OPS-02 | Manual intervention không được thay thế domain rules. |
| OPS-03 | Mọi action quan trọng làm thay đổi buyer verification, order state hoặc inventory state phải có log. |
| OPS-04 | Nếu hệ thống chưa có supported flow cho một thao tác, thao tác đó không được xem là V2-ready capability. |
| OPS-05 | Admin/Ops visibility phải đủ để vận hành lead, KYC, order và inventory hàng ngày. |

---

## XII. Reporting Rules

| Code | Rule |
|---|---|
| RPT-01 | Reporting là read-model / projection layer. |
| RPT-02 | Reporting không được dùng làm transactional truth. |
| RPT-03 | KPI formula, inclusion/exclusion và attribution logic phải được chốt trong tài liệu KPI riêng. |
| RPT-04 | Duplicate retry với cùng idempotency key không được làm inflate KPI nếu chỉ trả lại cùng kết quả. |

---

## XII-bis. Buyer × Product Rules (quyền mua)

> Dựa trên ma trận tại [03-business-overview-brd.md §IV-bis.4](./03-business-overview-brd.md).

| Code | Rule |
|---|---|
| BP-01 | `Pharmacy` (SCOPE_FULL) được mua OTC, ETC, RESTRICTED, SPECIAL (có điều kiện), TPBVSK, DMP, DEVICE khi có REP-05 hiệu lực. |
| BP-02 | `Drugstore` (SCOPE_LIMITED) **không được** đặt mua SPECIAL và RESTRICTED. Hệ thống phải chặn add-to-cart và checkout; hiển thị cảnh báo rõ lý do. |
| BP-03 | `Chain` (SCOPE_FULL theo điểm bán) áp dụng quyền mua theo giấy phép từng điểm bán, không theo Chain Master. |
| BP-04 | `Clinic / Medical` (SCOPE_SPECIALTY) chỉ mua thuốc/vật tư phục vụ chuyên môn nội bộ. **Chặn hoàn toàn** chức năng đăng bán lại (nếu tương lai có). |
| BP-05 | `Pharma Enterprise` (SCOPE_ENTERPRISE) chỉ mua trong phạm vi giấy phép; không mua ETC/SPECIAL. |
| BP-06 | `Non-Pharma` (SCOPE_NON_PHARMA) chỉ thấy và mua được TPBVSK, DMP, DEVICE (loại A) và OTC tủ thuốc nội bộ. |
| BP-07 | Buyer ở trạng thái `PENDING_REVIEW` hoặc chưa được gán scope: xem được sản phẩm nhưng **không thấy giá** và không thể add-to-cart/checkout. |
| BP-08 **[NĐ 98/2021]** | Sản phẩm **DEVICE** phân theo `DeviceClass` (A / B / C / D) theo NĐ 98/2021. Rule quyền mua: **Class A** — mọi buyer scope hợp lệ; **Class B/C/D** — chỉ `SCOPE_FULL` (Pharmacy/Chain điểm bán đủ GP) + `SCOPE_SPECIALTY` (Clinic có CLINIC-06) + `SCOPE_ENTERPRISE` (Pharma Enterprise có DEVICE-08). Drugstore (SCOPE_LIMITED) và Non-Pharma bị chặn Class B/C/D. |
| BP-09 **[NĐ 98/2021]** | Seller đăng bán DEVICE Class B/C/D bắt buộc có **DEVICE-08** (Công bố đủ điều kiện mua bán TBYT B/C/D). Thiếu/hết hạn DEVICE-08 → chặn đăng SKU tương ứng. |
| BP-10 **[CLARIFY]** | RESTRICTED với Drugstore: **hard block add-to-cart** + hiển thị cảnh báo nguyên nhân (TT 31/2025). BRD §IV-bis.4 đoạn "cảnh báo" được hiểu là cảnh báo **đồng thời với block**, không phải warning-only. |

## XII-ter. Seller × Product Rules (quyền bán)

> Dựa trên ma trận tại [03-business-overview-brd.md §IV-bis.5](./03-business-overview-brd.md).

| Code | Rule |
|---|---|
| SP-01 | `Pharma Primary (NSX/XNK)` chỉ được đăng bán sản phẩm do chính đơn vị SX hoặc NK hợp lệ (kèm GPO-13 với hàng NK). |
| SP-02 | `Pharma Wholesaler` đăng bán trong phạm vi GDP; phải chứng minh nguồn gốc hàng hoá qua chứng từ số (E-SIG-14). |
| SP-03 | `Non-Pharma Seller` (Trading): **BLOCK_PHARMA** — cấm đăng bán toàn bộ ETC, OTC, SPECIAL. Hệ thống chặn ở bước tạo SKU. |
| SP-04 **[MANUAL-P1]** | Phase 1: việc gán `SellerType` và quyền bán do Admin cấu hình thủ công trên CMS sau khi approve KYC Seller. |

## XII-quater. E-Invoice & Financial Rules (Phase 1)

| Code | Rule |
|---|---|
| INV-EI-01 **[MANUAL-P1]** | Phase 1: hoá đơn điện tử & chứng từ VAT xuất **thủ công** bởi NCC/kế toán, **upload vào tài liệu đơn hàng** trên MedBASE. |
| INV-EI-02 **[MANUAL-P1]** | Hoá đơn điều chỉnh / thay thế khi recall hoặc return phát sinh ở Phase 1 đều upload thủ công dưới dạng file. |
| INV-EI-03 **[DEFERRED-P2]** | Tích hợp ký số + đẩy hoá đơn tới TCT thuộc Phase 2. |

## XII-quinquies. Deferred Rules (Phase 2+)

> Các nhóm rule sau **không triển khai ở Phase 1**. Ghi nhận để không lẫn vào scope hiện tại. Theo dõi chi tiết ở [24-future-architecture-notes.md](./24-future-architecture-notes.md).

| Code | Chủ đề | Ghi chú |
|---|---|---|
| DEF-RET-01 | Return B2B trong hệ thống | Phase 1 xử lý ngoài hệ thống; quy trình full (RETURN_PENDING → RETURN_APPROVED → RETURNING → RETURN_COMPLETED + hoá đơn điều chỉnh) làm Phase 2. |
| DEF-COLD-01 | Cold chain SLA & enforcement | Bắt đầu sau khi KYC Seller ổn (bước 2). |
| DEF-ADV-01 | Advertising / quảng cáo thuốc | Phase sau. |
| DEF-DUOCQG-01 | Dược Quốc Gia sync | Đang lên phương án (Q-11). |
| DEF-MKT-01 | Multi-NCC catalog, tier pricing, buyer-specific price, credit terms, 3-way match, reporting B2B nâng cao | Để mở cho giai đoạn sau. |

---

## XII-bis. Portal Configuration Rules (Module / SiteConfig / Menu)

> Áp dụng cho cấu hình hạ tầng portal — quản lý qua CMS Admin theo UC-06-15/16/17 (E06 CMS & PIM).

### BR-PC-1 — SEO compliance lock theo Luật Dược

Bất kỳ **page module** (UC-06-15) hiển thị/list sản phẩm có tag pháp lý `ETC`, `RESTRICTED`, hoặc `SPECIAL` **bắt buộc** có `requiresNoIndex=true`. Portal phải render `<meta robots="noindex,nofollow">` cho các trang này **bất kể** CMS setting "Cho phép Google index". Catalog Manager không có quyền override; chỉ Compliance hoặc Admin Master mới đổi được lock (kèm lý do bắt buộc và audit log).

**Tham chiếu pháp lý:** Luật Dược 44/2024 §74–75 (cấm quảng cáo thuốc kê đơn + thuốc kiểm soát đặc biệt trên môi trường công khai).

**Áp dụng:** UC-06-15, NFR-CMS-14, FR-15.4.

### BR-PC-2 — Footer pháp lý bắt buộc

Mọi page **public** trên `thuocviet.vn` phải render footer có đầy đủ:
- Tên pháp nhân (`legal_company_name`)
- Mã số thuế (`legal_tax_code`)
- Số Giấy phép kinh doanh (`legal_business_license_no`)
- Tên + Số chứng chỉ hành nghề dược của Dược sĩ phụ trách chuyên môn (`pharmacist_in_charge_name`, `pharmacist_in_charge_cert_no`)
- Logo Bộ Công Thương + link notification (`bo_cong_thuong_notification_url`)

Nếu **bất kỳ key nào trống**, Portal render placeholder "Đang cập nhật" + ghi cảnh báo monitoring (Slack `#compliance`). Trong môi trường PROD, dashboard giám sát phải hiển thị cảnh báo Critical nếu placeholder xuất hiện > 24h.

**Tham chiếu pháp lý:** NĐ 52/2013 (Thương mại điện tử), NĐ 85/2021 (sửa đổi NĐ 52), Luật Dược 44/2024 §32 (Dược sĩ phụ trách chuyên môn).

**Áp dụng:** UC-06-16, FR-16.5, NFR-CMS-15.

### BR-HM-1 — Phân loại Medicine Type bắt buộc

Mọi Product trên MedBASE phải có `medicine_type ∈ {MODERN, TRADITIONAL, MIXED}`. Tuỳ giá trị, schema metadata + form PIM khác nhau:
- **MODERN** — dùng hoạt chất hoá học + ATC code (mô hình E05 UC-05-01).
- **TRADITIONAL** — dùng vị thuốc / bài thuốc theo DĐVN V (mô hình E05 UC-05-07). Không gán ATC code. Bắt buộc có `traditional_registration_no` (TT 38/2021) trước khi Publish.
- **MIXED** — kết hợp cả 2 (hiếm, vd siro thảo dược + tân dược). Phải có cả hoạt chất hoá học và vị thuốc thành phần.

**Áp dụng:** UC-05-07, FR-12.

### BR-HM-2 — Vị thuốc có độc → ETC

Vị thuốc có `is_poisonous=true` theo Phụ lục TT 38/2021/TT-BYT (Phụ tử, Mã tiền, Ô đầu, Hoàng nàn…) bắt buộc `requires_prescription=true`. SP gán vị thuốc loại này auto-suggest tag `ETC` hoặc `RESTRICTED` tuỳ mức độ; không cho phép bán Drugstore/Non-Pharma; cần Compliance review trước khi Publish.

**Tham chiếu pháp lý:** Luật Dược 44/2024 §47 (thuốc phải kê đơn), TT 38/2021 Phụ lục danh mục dược liệu độc.

**Áp dụng:** UC-05-07 AC-5/AC-12, FR-10.2.

### BR-BA-1 — FEFO bắt buộc cho mọi SP có hạn dùng

Mọi `product_batch` thuộc SP có thuộc tính `expiry_date` (thuốc, TPCN, mỹ phẩm có hạn) phải được **allocate theo nguyên tắc FEFO (First-Expiry-First-Out)** — sort `expiry_date ASC` (lô gần date nhất trước). Không dùng FIFO (theo `mfg_date`/`received_at`).

**Tham chiếu pháp lý + chuẩn ngành:**
- **GPP §22** (Good Pharmacy Practice — Practice of Good Storage and Distribution): xuất kho theo nguyên tắc gần date trước
- **TT 02/2018/TT-BYT** (GPP nhà thuốc): quản lý hạn dùng + sắp xếp theo HD
- **WHO Good Distribution Practices for medical products** (2020 guideline)

**Áp dụng:** UC-06-10 R-1, FR-BA-2, FR-10.7.

### BR-BA-2 — Split Allocation cho phép + minh bạch

Một `order_line` (đặt N sản phẩm) được phép trải qua **nhiều batch** nếu không có batch đơn lẻ nào đủ N. Hệ thống phải lưu chi tiết phân bổ trong `order_line_batch_allocation` (`batch_id`, `qty_allocated`, `expiry_at_allocation`); buyer phải được thấy bảng phân bổ trong order detail để truy nguồn từng pack về lô gốc — phục vụ recall lookup và đảm bảo minh bạch.

**Áp dụng:** UC-06-10 R-2 + AC-8/AC-9, FR-BA-7, FR-BA-10.

### BR-BA-3 — Display hạn dùng gần nhất bắt buộc

Catalog list + PDP phải hiển thị `display_expiry` (= MIN expiry của batch còn `qty_available > 0`) trong header tên SP. Format chuẩn: `"{tên SP} — HD {dd/mm/yyyy}"`. Cấm che giấu hạn dùng cận date hoặc chỉ hiển thị hạn xa nhất — vi phạm đạo đức bán thuốc và minh bạch thương mại.

**Áp dụng:** UC-06-10 R-3, FR-8.1, FR-8.2.

### BR-BA-4 — Cảnh báo cận date ≤30 ngày bắt buộc

Khi `order_line.batch_allocations` chứa bất kỳ batch có `expiry_date ≤ today + 30 ngày`, cart/checkout phải hiển thị banner cảnh báo rõ ràng (lô + HD + còn bao nhiêu ngày) và **bắt buộc buyer tick checkbox "Tôi đồng ý"** mới được Confirm. Buyer có quyền hủy mà không bị phạt.

**Tham chiếu:** Luật Bảo vệ quyền lợi NTD 2023 §10 (minh bạch thông tin sản phẩm).

**Áp dụng:** UC-06-10 R-4 + AC-11, FR-BA-4.

---

### BR-HM-3 — Cấm dược liệu thuộc CITES

Dược liệu có nguồn gốc từ loài quý hiếm thuộc **Phụ lục I CITES** (Tê giác, Hổ, Gấu, Voi, Tê tê…) bị **cấm tuyệt đối** giao dịch trên MedBASE. Master data vị thuốc đánh `restricted_origin=true` → hệ thống chặn tạo SP gán vị này. Chỉ Admin Master mới override (kèm chứng cứ pháp lý + lý do bắt buộc + audit log + alert Compliance Slack).

**Tham chiếu pháp lý:** Công ước CITES (Việt Nam tham gia 1994), Luật Đa dạng sinh học 2008/QH12, NĐ 06/2019 về quản lý thực vật rừng, động vật rừng nguy cấp.

**Áp dụng:** UC-05-07 AC-7, FR-10.2.

### BR-PC-3 — Menu fallback bắt buộc

Khi API `/cms/public/menus` lỗi (5xx, timeout) hoặc menu DB trống ở location `header_public`, `footer_quick`, `footer_legal`, `footer_compliance`, Portal **phải** render fallback hardcoded — **không** được render Header/Footer trắng. Monitoring phải ghi nhận sự kiện fallback active để Ops can thiệp.

**Áp dụng:** UC-06-17 LP-8, AC-10; NFR-CMS-15.

---

## XIII. Các rule ngoài phạm vi rõ ràng

Các capability sau **không tạo rule triển khai trong V2**:
- PMS buyer mapping
- PMS product mapping
- PMS draft cart
- PMS order sync
- PMS callback/status sync
- deep orchestration với PMS

---

## XIV. Open rule items cần quyết định

Các điểm sau vẫn cần decision chi tiết hơn:
- policy lead duplicate cụ thể
- bộ hồ sơ buyer legal tối thiểu
- exact prescription workflow có/không trong V2
- exact product legal taxonomy
- exact batch-aware allocation policy
- timezone/cadence cho KPI reporting

---

## XV. Tuyên bố cuối cùng

Mọi hành vi nghiệp vụ trong MedBASE V2 phải được hiểu theo 4 trục bất biến:
1. **MedBASE owns business truth**
2. **Eligibility/compliance gate không bị bypass**
3. **Inventory correctness phải được bảo toàn**
4. **PMS không tham gia business orchestration trong V2**
