Skip to content

URD: Đơn hàng

ModuleCORE-07Phiên bảnv0.6
Trạng tháiIn-progressNgày2026-06-04

Tài liệu nghiệp vụ. URD này chính là danh sách tính năng của Đơn hàng - mỗi tính năng bên dưới là một Vùng chức năng (<AREA>). Cùng mã <AREA> đó định danh cho PRD (PRD-<AREA>-NNN) và test (TC-<AREA>-NNN) của tính năng, và mỗi tính năng được liệt kê trong danh mục tính năng Delivery. Xem quy ước Feature Spine.

1. Mục đích

Định nghĩa yêu cầu hướng người dùng cho quản lý đơn hàng - vòng đời sale order từ giỏ qua checkout đến thanh toán, cùng các phần mở rộng F&B mà một địa điểm phục vụ đầy đủ cần: tách hoá đơn, phiếu bếp, phiên ca POS, đặt bàn và tích điểm loyalty.

2. Phạm vi

Bao gồmLoại trừ
Vòng đời sale order (DRAFT → PROCESSING → PARTIAL → COMPLETED / CANCELLED)Luồng hoàn / trả hàng (Dự kiến)
Mục đơn hàng (sản phẩm, tách combo, tuỳ chỉnh)Thay đổi tồn kho (Kho)
Checkout và hoàn tácTích hợp nhà cung cấp thanh toán (Thanh toán)
Tách và gộp đơnBộ máy thuế & phát hành hoá đơn điện tử
Tách hoá đơn (chia hoá đơn)Theo dõi đơn giao hàng (Dự kiến)
Phiếu bếp và trạm (F&B)Quản lý sơ đồ bàn / chỗ ngồi (Dự kiến)
Phiên POS (ca) với báo cáo X/ZỨng dụng hiển thị bếp chuyên biệt (Dự kiến)
Đặt bànMẫu đơn hàng (Dự kiến)
Tích điểm loyaltyĐặc tả API kỹ thuật (xem tài liệu lập trình viên)
Cập nhật thời gian thực tới bếp & dashboard

3. Định nghĩa

Thuật ngữĐịnh nghĩa
Sale OrderMột giao dịch chứa các mục đang bán; một thực thể đóng cả vai trò giỏ (DRAFT) lẫn đơn đã chốt.
Order ItemMột dòng hàng - một biến thể sản phẩm (chế độ PRODUCT) hoặc một mục nhập thủ công (chế độ CUSTOM).
ComboMột sản phẩm tách thành các dòng con có giá khi thêm vào giỏ.
Sale CheckMột nhóm trả độc lập trong một đơn, dùng để chia hoá đơn.
Phiếu bếp (Kitchen Ticket)Một phiếu gửi tới bếp để chuẩn bị món F&B; chứa các mục từ một sale order.
Trạm bếp (Kitchen Station)Một khu chuẩn bị có tên (ví dụ bếp nướng, quầy bar) tiếp nhận phiếu.
Phiên POS (POS Session)Một ca của thu ngân trên một thiết bị cụ thể; theo dõi tiền mở / đóng ca và sinh báo cáo.
Báo cáo X (X Report)Bản tóm tắt ca tạm thời - có thể sinh nhiều lần.
Báo cáo Z (Z Report)Báo cáo đóng ca cuối cùng - chỉ một bản mỗi phiên.
Đặt bàn (Reservation)Một lượt đặt của khách cho ngày / giờ trong tương lai kèm số lượng khách.

4. Mô hình Khái niệm

Chỉ ở mức khái niệm - schema đầy đủ nằm trong mô hình miền của lập trình viên.

5. Danh mục tính năng

Danh sách tính năng của module. Mỗi dòng là một tính năng (một Vùng chức năng). Chi tiết ở §6. Được phản chiếu trong danh mục tính năng Delivery.

Feature IDTính năngPhaseTrạng tháiƯu tiên
ORDSale OrderP1BuiltHigh
CHKTách hóa đơnP2BuiltMedium
KITPhiếu bếpP2BuiltHigh
STATrạm bếpP2BuiltMedium
POSPhiên POSP2BuiltHigh
RSVĐặt bànP2BuiltMedium
PNTĐiểm loyaltyP2BuiltMedium
PCKMàn chọn mónP2PlannedHigh
SLFQR Self-orderP2PlannedHigh
SHFCa đa nhân viênP2In-progressHigh
ENTQuyền lợi (Entitlement)P1BuiltHigh

Trạng thái: live từ Plane nếu có map, còn lại do registry khai báo. Vocabulary đồng nhất với Plane (state-group / phase).

6. Tính năng

Một mục con cho mỗi tính năng, theo thứ tự danh mục. Mỗi tính năng gói gọn mô tả, yêu cầu và nghiệm thu cùng nhau. Ưu tiên = MoSCoW (Must / Should / Could / Won't).

ORD - Sale Order Built

Mã tính năng: orders/ORD · Phase: P1 · PRDs: PRD-ORD-001 · PRD-ORD-002 · Dev: @nx/sale

Lợi ích cho người dùng: thu ngân dựng một đơn như một giỏ, thêm sản phẩm (gồm cả combo), rồi đưa nó qua checkout đến thanh toán - kèm tách / gộp và liên kết khách hàng khi còn ở nháp.

Yêu cầu

IDPYêu cầu
URD-ORD-001MTạo đơn nháp (giỏ) có mục
URD-ORD-002MThêm, cập nhật, xoá mục chỉ khi đang ở DRAFT
URD-ORD-003MThêm cùng một sản phẩm sẽ gộp số lượng vào dòng có sẵn
URD-ORD-004MĐặt số lượng mục về 0 sẽ xoá dòng đó
URD-ORD-005MThêm một mục combo tách thành các dòng con có giá
URD-ORD-006MCheckout: DRAFT → PROCESSING (kiểm tra mục, khoá giá)
URD-ORD-007MCheckout kiểm tra: giỏ không rỗng, giá ≥ 0, số lượng ≥ 1
URD-ORD-008MHoàn tác: PROCESSING → DRAFT
URD-ORD-009MHuỷ từ DRAFT, PROCESSING hoặc PARTIAL (kèm lý do tuỳ chọn)
URD-ORD-010MThanh toán một phần → trạng thái PARTIAL
URD-ORD-011MThanh toán đủ → trạng thái COMPLETED
URD-ORD-012STách một đơn thành nhiều đơn (chỉ DRAFT)
URD-ORD-013SGộp nhiều đơn (chỉ DRAFT)
URD-ORD-014SGắn một khách hàng vào đơn
URD-ORD-015SĐa tiền tệ với tỉ giá (mặc định VND)
URD-ORD-016CÁp số lượng mục tối đa cho mỗi đơn
URD-ORD-017MTách gán mục / số lượng cụ thể vào các đơn nháp mới (mỗi đơn tuỳ chọn tên / khách hàng); một dòng được gán hết sẽ di chuyển nguyên, một dòng một phần sẽ tách để lại phần dư trên nguồn; nguồn rỗng bị huỷ (FULL_SPLIT), nguồn một phần được re-price; số lượng không dương, mục không tồn tại, hoặc over-allocation bị từ chối
URD-ORD-018MDòng đầu của một combo và mọi dòng con phải di chuyển cùng nhau, đầy đủ số lượng, vào cùng một nhóm đích; di chuyển combo một phần hoặc bỏ rơi bị từ chối
URD-ORD-019MGộp di chuyển mọi mục của các đơn nháp nguồn vào đơn nháp đích và huỷ các nguồn (MERGED_INTO_<target>); chỉ các đơn cùng merchant và cùng sale channel mới gộp được
URD-ORD-020MMọi mục đã di chuyển ghi một transfer-history entry append-only (nguồn, đích, thời điểm, số lượng) tạo nên lineage tách / gộp
URD-ORD-021SMột lần gộp có thể hoàn tác khi đơn đích vẫn nháp và đã được gộp; các mục trở về đơn nguồn ban đầu (khôi phục về nháp) qua lineage; số lượng thêm sau khi gộp ở lại đích
URD-ORD-022MTách, gộp và hoàn tác là nguyên tử; allocation usages clone (tách) / move (gộp) / cancel (hoàn tác) đồng bộ và các đơn bị ảnh hưởng được re-price
URD-ORD-023MMột đơn có check hoạt động không thể tách, gộp, hay hoàn tác

Nghiệm thu

AC-ORD-01: Vòng đời đơn hàng
Cho trướcKhiThì
Đơn DRAFTCheckoutPROCESSING (giá đã khoá)
PROCESSINGThanh toán đủCOMPLETED
PROCESSINGThanh toán một phầnPARTIAL
Bất kỳ trạng thái chưa kết thúc nàoHuỷCANCELLED
Giỏ rỗngCheckoutBị từ chối
AC-ORD-02: Tách combo
Cho trướcKhiThì
Một sản phẩm comboThêm vào giỏMột dòng đầu + các dòng con giá 0 được tạo
Cùng combo đã có trong đơnThêm lạiBị từ chối (đã có trong đơn)
AC-ORD-03: Tách một đơn nháp
Cho trướcKhiThì
Một đơn DRAFT có mụcTách thành các nhóm, lấy hết số lượng một dòngDòng di chuyển nguyên sang đơn nháp mới, đóng dấu một transfer entry
Một đơn DRAFT có dòng số lượng 5Tách gán 2 cho một đơn nháp mớiDòng tách - 2 trên đơn nháp mới, 3 ở lại nguồn; cả hai được re-price
Một lần tách làm rỗng nguồn-Nguồn bị huỷ (FULL_SPLIT) và tồn kho đã giữ của nó bị huỷ
Một lần tách gán vượt số lượng khả dụng của một dòng-Bị từ chối (over-allocation)
AC-ORD-04: Gộp & hoàn tác
Cho trướcKhiThì
Hai đơn DRAFT cùng merchant + channelGộp vào một đíchMọi mục di chuyển sang đích, các nguồn bị huỷ (MERGED_INTO_<target>), tồn kho đã giữ được move
Một đích đã gộp vẫn DRAFTHoàn tácMọi mục trở về đơn nguồn ban đầu qua lineage; các nguồn khôi phục về DRAFT
Một dòng có số lượng tăng sau khi gộpHoàn tácPhần dư ở lại đích; chỉ số lượng đã di chuyển ban đầu trở về
Một đích chưa từng được gộpHoàn tácBị từ chối (chưa gộp)
AC-ORD-05: Combo nguyên tử & check hoạt động
Cho trướcKhiThì
Một combo (dòng đầu + con) trên một đơn nhápTách chỉ gán dòng đầu, hoặc một phần số lượng của một dòng conBị từ chối (combo phải di chuyển cùng nhau với đầy đủ số lượng)
Một đơn có check hoạt độngTách, gộp, hoặc hoàn tácBị từ chối - hoàn tác các check trước

CHK - Tách hóa đơn Built

Mã tính năng: orders/CHK · Phase: P2 · PRDs: - · Dev: @nx/sale

Lợi ích cho người dùng: một bàn tách một đơn thành nhiều check trả độc lập, phân bổ mục và số lượng cụ thể (thậm chí khách hàng khác nhau) cho mỗi check, và đơn chỉ hoàn tất khi mọi check được trả.

Yêu cầu

IDPYêu cầu
URD-CHK-001STách một đơn thành nhiều check thanh toán
URD-CHK-002SPhân bổ mục và số lượng cụ thể cho mỗi check
URD-CHK-003SKhách hàng khác nhau cho mỗi check
URD-CHK-004SĐơn hoàn tất khi mọi check của nó hoàn tất
URD-CHK-005CHoàn tác một lần tách khi chưa check nào được trả

Nghiệm thu

AC-CHK-01: Chia hoá đơn
Cho trướcKhiThì
Một đơn có mụcTách thành nhiều check với mục được phân bổMỗi check trả được độc lập
Mọi check của đơn hoàn tất-Đơn hoàn tất

KIT - Phiếu bếp Built

Mã tính năng: orders/KIT · Phase: P2 · PRDs: - · Dev: @nx/sale

Lợi ích cho người dùng: mục đơn hàng được gửi tới bếp dưới dạng phiếu, chuyển qua các trạng thái nấu, cập nhật màn hình theo thời gian thực, và kích hoạt tiêu thụ tồn kho khi phục vụ.

Yêu cầu

IDPYêu cầu
URD-KIT-001MGửi mục đơn hàng tới bếp (tạo phiếu + mục)
URD-KIT-002MGửi idempotent - một lần gửi trùng sinh ra cùng một phiếu
URD-KIT-003MVòng đời phiếu: PENDING → PROCESSING → READY → COMPLETED / VOIDED
URD-KIT-004MVòng đời mục: PENDING → COOKING → READY → SERVED / VOIDED
URD-KIT-005MTrạng thái phiếu tự chuyển theo trạng thái các mục của nó
URD-KIT-006MThay đổi theo cách huỷ-và-gửi-lại (mục đã gửi không sửa tại chỗ)
URD-KIT-007SCờ ưu tiên gấp và thứ tự theo từng đơn để sắp xếp phiếu
URD-KIT-008MCập nhật thời gian thực tới màn hình bếp và dashboard
URD-KIT-009SĐánh dấu một mục đã phục vụ sẽ kích hoạt tiêu thụ tồn kho

Nghiệm thu

AC-KIT-01: Bếp
Cho trướcKhiThì
Mục đơn hàngGửi tới bếpPhiếu được tạo
Cùng một key idempotencyGửi trùngKhông tạo phiếu trùng
Mọi mục đều READY/SERVED-Phiếu tự chuyển trạng thái
Mục được đánh dấu đã phục vụ-Tiêu thụ tồn kho được kích hoạt

STA - Trạm bếp Built

Mã tính năng: orders/STA · Phase: P2 · PRDs: - · Dev: @nx/sale

Lợi ích cho người dùng: merchant định nghĩa các trạm chuẩn bị có tên và định tuyến nhóm hàng sản phẩm tới chúng, kèm cấu hình máy in theo từng trạm và tự động in.

Yêu cầu

IDPYêu cầu
URD-STA-001STạo trạm có tên theo từng merchant (i18n)
URD-STA-002SĐịnh tuyến nhóm hàng sản phẩm tới trạm
URD-STA-003SCấu hình máy in theo từng trạm kèm tự động in

Nghiệm thu

AC-STA-01: Định tuyến trạm
Cho trướcKhiThì
Một trạm có nhóm hàng sản phẩm được định tuyếnMột mục trong nhóm đó được gửi tới bếpPhiếu được định tuyến tới trạm đó

POS - Phiên POS Built

Mã tính năng: orders/POS · Phase: P2 · PRDs: - · Dev: @nx/sale

Lợi ích cho người dùng: một thu ngân mở một ca trên một thiết bị với tiền mở ca, gắn các đơn vào ca, rồi đóng ca bằng một lần đếm tiền sinh ra báo cáo Z và một bản tóm tắt X tạm thời.

Yêu cầu

IDPYêu cầu
URD-POS-001MMở một phiên trên một thiết bị với tiền mở ca
URD-POS-002MChỉ một phiên đang mở cho mỗi thiết bị
URD-POS-003MĐóng một phiên: đếm tiền, ghi chênh lệch
URD-POS-004MBáo cáo Z (đóng ca) - một bản mỗi phiên
URD-POS-005SBáo cáo X (tạm thời) - lặp lại được
URD-POS-006SĐơn tạo trong một ca được gắn vào phiên
URD-POS-007STheo dõi dự kiến so với thực tế cho các phương thức không dùng tiền mặt
URD-POS-008CHỗ trợ đếm lại khi đóng ca

Nghiệm thu

AC-POS-01: Phiên
Cho trướcKhiThì
Thiết bị chưa có phiên đang mởMởPhiên được tạo
Thiết bị đã có phiên đang mởMởBị từ chối
Phiên đang mởĐóng kèm đếm tiềnChênh lệch được tính, báo cáo Z được sinh

RSV - Đặt bàn Built

Mã tính năng: orders/RSV · Phase: P2 · PRDs: - · Dev: @nx/sale

Lợi ích cho người dùng: lễ tân nhận lượt đặt bàn với thông tin khách, số lượng khách và nguồn, theo dõi chúng qua một vòng đời, rồi sinh một sale order liên kết khi check-in.

Yêu cầu

IDPYêu cầu
URD-RSV-001STạo một đặt bàn: tên khách, điện thoại, số lượng khách, ngày / giờ
URD-RSV-002SVòng đời: PENDING → CONFIRMED → CHECKED_IN / CANCELLED
URD-RSV-003STheo dõi nguồn: điện thoại, khách vãng lai, trực tuyến, khác
URD-RSV-004SGắn thẻ dịp: sinh nhật, kỷ niệm, công việc, v.v.
URD-RSV-005SKhi check-in, sinh và liên kết một sale order

Nghiệm thu

AC-RSV-01: Đặt bàn
Cho trướcKhiThì
Thông tin kháchTạoTrạng thái PENDING, bàn được giữ
Đặt bàn đã xác nhậnCheck inTrạng thái CHECKED_IN, sale order được sinh & liên kết

PNT - Điểm loyalty Built

Mã tính năng: orders/PNT · Phase: P2 · PRDs: - · Dev: @nx/sale

Lợi ích cho người dùng: khách hàng tích điểm loyalty trên đơn hoàn tất, được cấp một lần cho mỗi đơn, với số dư theo dõi theo từng khách hàng cho từng merchant.

Yêu cầu

IDPYêu cầu
URD-PNT-001STích điểm trên đơn hoàn tất
URD-PNT-002SCấp điểm là idempotent cho mỗi đơn
URD-PNT-003SSố dư điểm theo dõi theo từng khách hàng cho từng merchant

Nghiệm thu

AC-PNT-01: Tích điểm
Cho trướcKhiThì
Một đơn có liên kết khách hàngĐơn hoàn tấtĐiểm được tích và cộng vào số dư của khách hàng
Cùng một đơn hoàn tất bị phát lại-Không cấp trùng (idempotent cho mỗi đơn)

PCK - Màn chọn món Planned

Mã tính năng: sale/PCK · Phase: P2 (T6) · PRDs: PRD-PCK-001 · Dev: @nx/sale · @nx/commerce

Mang lại gì cho người dùng: thu ngân chọn bất kỳ món nào trong tối đa 3 chạm. Sản phẩm có Options resolve về đúng một Variant qua lựa chọn option; món 1-variant bỏ qua hẳn bước chọn.

Yêu cầu

IDPYêu cầu
URD-PCK-001MThu ngân chọn bất kỳ món nào trong ≤3 chạm
URD-PCK-002MSản phẩm có Options resolve về đúng một Variant qua lựa chọn option
URD-PCK-003MMón 1-variant bỏ qua bước chọn (một chạm vào giỏ)
URD-PCK-004MGiá cập nhật trực tiếp theo option đang chọn
URD-PCK-005STổ hợp option không hợp lệ không thể chọn
URD-PCK-006SOption mặc định được chọn sẵn cho đường đi nhanh nhất
URD-PCK-007SQuét barcode bỏ qua picker (quét = vào giỏ)

Nghiệm thu

AC-PCK-01: Resolve option
GivenWhenThen
Món có option size + đáThu ngân chọn size rồi đáĐúng một variant vào giỏ, giá đúng - tổng ≤3 chạm
Món chỉ có 1 variantThu ngân chạm mónVào giỏ ngay, không hiện chooser

SLF - QR Self-order Planned

Mã tính năng: sale/SLF · Phase: P2 (T7-T8) · PRDs: PRD-SLF-001 · Dev: @nx/sale · @nx/commerce

Mang lại gì cho người dùng: khách ngồi bàn quét QR và tự gọi món bằng điện thoại - không cần cài app. Đơn rơi vào POS gắn đúng bàn; nhân viên xác nhận và đơn chạy xuống bếp như mọi đơn khác.

Yêu cầu

IDPYêu cầu
URD-SLF-001MKhách quét QR của bàn và thấy menu trên điện thoại (không cần app)
URD-SLF-002MMenu phục vụ theo policy (giờ/kênh) từ Menu của merchant
URD-SLF-003MKhách tạo giỏ và gửi đơn cho bàn đó
URD-SLF-004MĐơn rơi vào POS gắn đúng bàn; nhân viên xác nhận hoặc từ chối
URD-SLF-005MĐơn đã xác nhận chạy xuống bếp như đơn nhân viên nhập
URD-SLF-006SKhách thấy cập nhật trạng thái đơn
URD-SLF-007SMón hết hàng bị ẩn / không gọi được
URD-SLF-008CKhách gọi thêm trong cùng phiên

Nghiệm thu

AC-SLF-01: Đơn của khách tới bếp
GivenWhenThen
Khách bàn 5 quét QR của bànGửi đơn 2 mónPOS hiện đơn ở bàn 5 chờ xác nhận; xác nhận xong bếp nhận phiếu
Một món hết hàngKhách xem menuMón đó không gọi được

SHF - Ca Đa nhân viên In-progress

Mã tính năng: sale/SHF · Phase: P2 (T7) · PRDs: PRD-SHF-001 · Dev: @nx/sale

Mang lại gì cho người dùng: cửa hàng nhiều nhân viên vận hành ca bán hàng: mở/đóng ca trên thiết bị, nhiều nhân viên cùng tham gia một ca, báo cáo X/Z khi đóng, và đối soát két - tiền đếm thực vs kỳ vọng, ghi nhận chênh lệch. (Ghi chú as-built: backend đa nhân viên đã trên develop; POS vẫn chạy phiên 1 người cũ - increment này nối FE sang.)

Yêu cầu

IDPYêu cầu
URD-SHF-001MNhân viên mở và đóng ca trên một thiết bị
URD-SHF-002MNhiều nhân viên tham gia một ca (đa nhân viên)
URD-SHF-003MBáo cáo X giữa ca; báo cáo Z khi đóng ca
URD-SHF-004MĐối soát tiền mặt khi đóng: đếm thực vs kỳ vọng, ghi chênh lệch
URD-SHF-005MĐơn bán trong ca gắn đúng nhân viên thao tác
URD-SHF-006SBiến động tiền mặt (thu/chi/nộp két) ghi theo ngăn kéo
URD-SHF-007SChủ xem doanh thu theo ca và theo kỳ
URD-SHF-008MĐóng ca với chênh lệch khác 0 bắt buộc nhập ghi chú lý do
URD-SHF-009SQuỹ đầu ca bị khoá sau khi ca đã mở

Nghiệm thu

AC-SHF-01: Một ca trọn vẹn
GivenWhenThen
Hai nhân viên trong một ca đang mởBán cả ngày rồi đóng caBáo cáo Z đúng; tiền kỳ vọng = quỹ đầu ca + bán tiền mặt − hoàn + thu − chi; chênh lệch = đếm thực − kỳ vọng
Một ca đang mở trên thiết bịThiết bị thứ hai mở ca khácHành vi theo chính sách ca (dùng chung vs theo thiết bị)

ENT - Quyền lợi Built

Mã tính năng: sale/ENT · Phase: P2 · PRDs: PRD-ENT-001 · Dev: @nx/sale · @nx/core

Mang lại gì cho người dùng: merchant bán thứ khách rút dần theo thời gian - combo đồ uống, vé lớp học, một kỳ membership, một khối phút tính theo lượng. Một policy định nghĩa thứ được bán (hạn mức + hiệu lực + phạm vi); bán variant của nó đúc một grant theo từng khách, đóng băng một bản chụp policy để sửa catalog sau này không bao giờ động tới vé đã bán; mỗi lần dùng ghi một redemption chỉ-thêm trừ dần số dư, kiểm món so với phạm vi đóng băng, và có thể đảo.

Yêu cầu

IDPYêu cầu
URD-ENT-001MMột policy gắn 1:1 với một variant bán được (variant bán dưới dạng quyền lợi)
URD-ENT-002MMột policy khai các chiều giới hạn: COUNT (lần dùng rời rạc), TIME_WINDOW (cửa sổ hiệu lực, không trần dùng), METERED (đơn vị liên tục); có thể kết hợp
URD-ENT-003MMột policy mang hạn mức tuỳ chọn (lượng + đơn vị) và thời lượng hiệu lực tuỳ chọn; có thể vắng một trong hai trục
URD-ENT-004MMột policy khai chế độ kích hoạt - khi mua, khi dùng lần đầu, hoặc theo lịch - chi phối khi nào hiệu lực bắt đầu
URD-ENT-005SMột policy có thể yêu cầu gắn khách (quyền lợi định danh) hoặc cho phép quyền lợi vô danh
URD-ENT-006MPhạm vi sử dụng của một policy được định bằng target; tập target rỗng nghĩa là truy cập mở
URD-ENT-007MMột target gắn một policy vào một món cụ thể (mặc định variant) kèm thứ tự; duy nhất theo (policy, món)
URD-ENT-008MBán variant quyền lợi đúc một grant với mã duy nhất, số dư hạn mức, và cửa sổ hiệu lực giải từ policy + chế độ kích hoạt
URD-ENT-009MGrant đóng băng một bản chụp policy và target của nó lúc bán, cô lập khỏi sửa catalog về sau
URD-ENT-010MGrant theo dõi tổng hạn mức so với đã-dùng; bộ đếm đã-dùng là nguồn sự thật và khả dụng = tổng − đã-dùng
URD-ENT-011MGrant chuyển qua PENDING → ACTIVE → EXHAUSTED / EXPIRED / SUSPENDED / CANCELLED
URD-ENT-012MMột redemption trừ bộ đếm đã-dùng cho một số lượng, ghi theo đơn / mục tiêu thụ nó
URD-ENT-013SMột redemption với số lượng đơn vị khác đơn vị hạn mức của grant được quy đổi qua tỉ lệ đơn vị
URD-ENT-014MMột redemption kiểm món được dùng so với phạm vi target đóng băng của grant (mở khi không có target)
URD-ENT-015MMột đảo trả lại hạn mức cho grant; sổ là chỉ-thêm (sửa lỗi là mục mới, không bao giờ sửa)
URD-ENT-016SRedemption có thể liên kết đơn / mục đơn hàng tiêu thụ nó
URD-ENT-017SMọi policy, target, grant, và redemption đều giới hạn theo merchant và soft-delete

Nghiệm thu

AC-ENT-01: Bán một grant
Cho trướcKhiThì
Một policy đã cấu hình trên một variantVariant được bánMột grant được đúc với mã duy nhất, số dư hạn mức của policy, và cửa sổ hiệu lực; trạng thái ACTIVE (hoặc PENDING tuỳ chế độ kích hoạt)
Một grant đã bánPolicy bị sửa sau đóĐiều khoản của grant không đổi - đọc từ bản chụp đóng băng của nó
AC-ENT-02: Trừ và cạn
Cho trướcKhiThì
Một grant ACTIVE còn số dưMột lần dùng được trừ cho một số lượngMột redemption được thêm và bộ đếm đã-dùng tăng; khả dụng = tổng − đã-dùng
Bộ đếm đã-dùng chạm tổng hạn mức-Grant đọc EXHAUSTED; các lần trừ tiếp bị từ chối
AC-ENT-03: Đảo trả lại hạn mức
Cho trướcKhiThì
Một redeem trước đó trên một grantMột đảo được ghiMột mục đảo chỉ-thêm trả lại hạn mức; redeem gốc không bị sửa hay xoá
AC-ENT-04: Phạm vi target
Cho trướcKhiThì
Một grant khoanh vào các món cụ thểMột redeem nhắm món ngoài phạm viBị từ chối
Một grant mà bản chụp không có targetMột redeem nhắm món bất kỳĐược phép (truy cập mở)

7. Ràng buộc & Không thuộc mục tiêu

Ràng buộc

IDRàng buộc
C-01Mục chỉ sửa được khi đơn đang ở DRAFT
C-02Tách / gộp đơn chỉ thực hiện ở DRAFT
C-03Tối đa một phiên POS đang mở cho mỗi thiết bị
C-04Đúng một báo cáo Z cho mỗi phiên
C-05Gửi phiếu bếp là idempotent thông qua key
C-06Mọi bản ghi dùng soft-delete
C-07Mọi thao tác yêu cầu xác thực và được giới hạn theo merchant

Không thuộc mục tiêu

  • Luồng hoàn / trả hàng
  • Theo dõi đơn giao hàng
  • Quản lý sơ đồ bàn / chỗ ngồi
  • Ứng dụng hiển thị bếp chuyên biệt
  • Mẫu đơn hàng

8. Lịch sử Phiên bản

NgàyTác giảMô tảVer
2026-02-26P. Do - Product OwnerUser story ban đầuv0.1
2026-04-16P. Do - Product OwnerTái cấu trúc thành bảng yêu cầu theo vùng chức năng; thêm các vùng combo, tách hoá đơn, trạm, đặt bàn, điểmv0.3
2026-06-04Claude (AI pair)Tổ chức lại theo tính năng (Feature Spine); mỗi tính năng mang yêu cầu + nghiệm thu của riêng nó; CON chuyển vào Ràng buộcv0.4
2026-06-15Nhóm Bán hàngThêm tính năng ENT Quyền lợi (policy / target / grant / redemption) kèm yêu cầu + nghiệm thuv0.5
2026-06-15Nhóm Bán hàngMở rộng ORD với tách / gộp / hoàn tác + lineage transfer-history (URD-ORD-017..023, AC-ORD-03..05); liên kết PRD-ORD-002v0.6

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.