Skip to content

URD: Kho

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

Tài liệu nghiệp vụ. URD này chính là danh sách tính năng của Kho - mỗi tính năng bên dưới là một Vùng chức năng (<AREA>). Cùng mã <AREA> đó key 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ý Kho - theo dõi tồn, địa điểm kho, đơn mua hàng, vendor, nguyên vật liệu (BOM), phiếu kho, và một audit trail đầy đủ, bất biến của mọi biến động tồn. Kết quả là một merchant luôn biết họ có gì, nó ở đâu, và nó đến đó như thế nào.

2. Phạm vi

Bao gồmLoại trừ
Địa điểm kho với phân cấpBáo giá bán / đặt giữ theo quota
Mục kho (biến thể/nguyên vật liệu liên kết với địa điểm)BOM đa cấp / cụm lắp ráp con
Số lượng tồn (on-hand, reserved, available)Phần trăm hao hụt và sản lượng công thức
Audit log tracking bất biếnĐịnh giá tồn đa tiền tệ
Danh mục loại tracking (19 cái dựng sẵn)Tích hợp quét barcode đầy đủ
Quản lý nhà cung cấp (vendor)Bắt buộc tồn-âm tại POS
Đơn mua hàng với nhận hàngĐặc tả API kỹ thuật
Phiếu kho (chuyển, điều chỉnh, kiểm kê, trả hàng, hủy bỏ)
Danh mục nguyên vật liệu với định danh
Công thức nguyên vật liệu (BOM) với phiên bản
Phân rã BOM lúc chạy trên phiếu bếp
Lệnh sản xuất, inventory rules, đơn vị đo lường

3. Định nghĩa

Thuật ngữĐịnh nghĩa
Địa điểm kho (Inventory Location)Một kho hoặc khu lưu trữ trong một merchant. Hỗ trợ phân cấp. Một mặc định mỗi merchant.
Mục kho (Inventory Item)Một bản ghi liên kết một biến thể sản phẩm hoặc nguyên vật liệu với một merchant để theo dõi tồn.
Tồn kho (Inventory Stock)Bản ghi số lượng - on-hand, reserved, available. Một bản ghi mỗi (mục, địa điểm, lot, serial).
Tracking kho (Inventory Tracking)Một mục audit bất biến cho mọi biến động tồn với số lượng trước/sau.
Loại tracking kho (Inventory Tracking Type)Phân loại hướng biến động (IN/OUT/NEUTRAL) và lý do. 19 cái dựng sẵn + 1 tùy chỉnh.
Phiếu kho (Inventory Ticket)Một chứng từ cho thao tác tồn: chuyển, điều chỉnh, kiểm kê, trả hàng, hủy bỏ. Có line item.
VendorMột nhà cung cấp mà merchant mua hàng từ đó.
Đơn mua hàng (Purchase Order)Một chứng từ nhận hàng từ một vendor, chứa line item với số lượng và giá.
Nguyên vật liệu (Material)Một nguyên liệu thô hoặc bán thành phẩm được theo dõi tách biệt với sản phẩm bán được.
Công thức nguyên vật liệu (Material Recipe / BOM)Một công thức có phiên bản khai báo nguyên vật liệu nào được tiêu thụ để sản xuất một biến thể sản phẩm.
Phân rã BOM (BOM Explosion)Giảm nguyên vật liệu tự động kích hoạt bởi thay đổi trạng thái mục phiếu bếp.
Lệnh sản xuất (Production Order)Một chứng từ sản xuất theo dõi số lượng kế hoạch/thực tế/hao hụt cho hàng được sản xuất.
Inventory RuleMột quy tắc ngưỡng cấu hình được có thể kích hoạt cảnh báo, tạo PO, hoặc webhook.
Đơn vị đo lường (Unit of Measure)Đơn vị đo với phạm vi 3 cấp: mặc định hệ thống → merchant → sản phẩm/nguyên vật liệu.

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

Chỉ là khái niệm - schema đầy đủ nằm trong mô hình miền 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. Đối chiếu với danh mục tính năng Delivery.

Feature IDTính năngPhaseTrạng tháiƯu tiên
LOCĐịa điểm khoP1BuiltHigh
ITMMục khoP1BuiltHigh
STKMức tồnP1BuiltHigh
TRKAudit trail biến độngP1BuiltHigh
LSEĐịnh danh lô / serial & hạn dùngP3BuiltHigh
TKTPhiếu khoP2BuiltHigh
VENVendorP1BuiltHigh
POĐơn mua hàngP1BuiltHigh
POIMục đơn mua hàngP1BuiltHigh
MATNguyên vật liệuP3BuiltHigh
RECCông thức / BOMP3In-progressHigh
PROĐơn sản xuất & Phân rã BOMP3In-progressHigh
IOPVận hành kho - F&B & Bán lẻP2PlannedHigh

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 giữ mô tả, yêu cầu, và nghiệm thu cùng nhau. Ưu tiên = MoSCoW (Must / Should / Could / Won't).

LOC - Địa điểm kho Built

Mã tính năng: inventory/LOC · Phase: P1 · PRDs: - · Dev: @nx/inventory

Làm gì cho người dùng: merchant tổ chức tồn thành các kho/khu lưu trữ. Mỗi merchant tự có một địa điểm mặc định; merchant lớn hơn có thể thêm phân cấp địa điểm kèm địa chỉ và dữ liệu GPS.

Yêu cầu

IDPYêu cầu
URD-LOC-001MChủ có thể tạo một địa điểm kho với tên i18n.
URD-LOC-002MMột địa điểm mặc định được tự tạo cho mỗi merchant khi commerce init.
URD-LOC-003MĐúng một địa điểm mặc định tồn tại mỗi merchant; đặt mặc định mới xóa cái trước.
URD-LOC-004SĐịa điểm hỗ trợ phân cấp cha-con.
URD-LOC-005SMột địa điểm có thể lưu dữ liệu địa chỉ và địa lý (GPS).
URD-LOC-006MVòng đời địa điểm: NEW → ACTIVATED → DEACTIVATED → ARCHIVED (ARCHIVED là cuối).
URD-LOC-007MMỗi địa điểm có một định danh do hệ thống sinh (LOC_YYYYMMDD_id), không sửa được bởi người dùng.
URD-LOC-008MĐịa điểm dùng soft-delete; dữ liệu được giữ và admin lấy lại được.
URD-LOC-009SChủ có thể liệt kê và lọc địa điểm theo trạng thái.
URD-LOC-010MĐịa điểm được cô lập theo từng merchant.

Nghiệm thu

AC-LOC-01: Địa điểm Mặc định
Cho trướcKhiThì
Merchant mớiCommerce initializationĐịa điểm mặc định tự tạo
Đặt một mặc định mới-Mặc định trước bị xóa

ITM - Mục kho Built

Mã tính năng: inventory/ITM · Phase: P1 · PRDs: - · Dev: @nx/inventory

Làm gì cho người dùng: một bản ghi theo dõi tồn được tạo tự động mỗi khi thêm một biến thể sản phẩm, liên kết vào địa điểm mặc định của merchant, kèm ngưỡng min/max tùy chọn.

Yêu cầu

IDPYêu cầu
URD-ITM-001MMột mục kho được tự tạo khi một biến thể sản phẩm được tạo.
URD-ITM-002MMột mục mỗi tổ hợp (biến thể, địa điểm, đơn vị).
URD-ITM-003SMục hỗ trợ ngưỡng mức tồn min/max; min ≤ max.
URD-ITM-004MMỗi mục có một định danh do hệ thống sinh (SKU_YYYYMMDD_id), không sửa được bởi người dùng.
URD-ITM-005MVòng đời mục: ACTIVATED → DEACTIVATED → ARCHIVED (ARCHIVED là cuối).
URD-ITM-006MMục được liên kết với địa điểm mặc định của merchant khi tạo.

Nghiệm thu

AC-ITM-01: Tự tạo theo biến thể
Cho trướcKhiThì
Một biến thể sản phẩm mớiBiến thể được tạoMột mục kho tự tạo tại địa điểm mặc định

STK - Mức tồn Built

Mã tính năng: inventory/STK · Phase: P1 · PRDs: Nhập tồn đầu kỳ · Dev: @nx/inventory

Làm gì cho người dùng: merchant thấy mình có bao nhiêu tồn - on-hand, reserved, available - theo từng mục từng địa điểm, với độ chính xác thập phân và cập nhật liền mạch.

Yêu cầu

IDPYêu cầu
URD-STK-001MMột bản ghi tồn mỗi (mục, địa điểm, lot, serial).
URD-STK-002MAvailable = on-hand − reserved.
URD-STK-003MMọi số lượng lưu với độ chính xác thập phân (4 chữ số).
URD-STK-004MChủ có thể xem mức tồn hiện tại; biến động đầu tiên tự tạo bản ghi tồn.
URD-STK-005STimestamp last-stocked / last-counted cập nhật tự động.
URD-STK-006MCập nhật tồn diễn ra như một thao tác duy nhất - thất bại một phần sẽ rollback hoàn toàn.
URD-STK-007CThay đổi mức tồn lịch sử xem được.

Nghiệm thu

AC-STK-01: Theo dõi Tồn
Cho trướcKhiThì
Mục có tồnXemOn-hand, reserved, available hiển thị
Available rớt dưới ngưỡng-Chỉ báo tồn thấp hiển thị

TRK - Audit trail biến động Built

Mã tính năng: inventory/TRK · Phase: P1 · PRDs: - · Dev: @nx/inventory

Làm gì cho người dùng: mọi thay đổi tồn - nhận hàng, bán, chuyển, điều chỉnh - được ghi thành một mục bất biến với số lượng trước/thay đổi/sau, truy vết đầy đủ tới chứng từ nguồn.

Yêu cầu

IDPYêu cầu
URD-TRK-001MMọi biến động tồn tạo một mục tracking bất biến.
URD-TRK-002MGhi số lượng trước, thay đổi, và sau.
URD-TRK-003MMục từ chứng từ nghiệp vụ lưu loại tham chiếu và ID.
URD-TRK-004MIdempotent: cùng (referenceType, referenceId) chỉ sinh một mục.
URD-TRK-005MMỗi mục có kiểu theo loại tracking (IN/OUT/NEUTRAL); 19 cái dựng sẵn + tùy chỉnh.
URD-TRK-006SMục ghi người dùng thực hiện (createdBy / modifiedBy).
URD-TRK-007MChủ có thể xem toàn bộ lịch sử tracking.
URD-TRK-008SMục có thể ghi giá hiệu lực và multiplier.
URD-TRK-009SMục thủ công có thể kèm một note/lý do.
URD-TRK-010CLọc lịch sử theo ngày, loại, hoặc chứng từ tham chiếu.

Nghiệm thu

AC-TRK-01: Mục bất biến
Cho trướcKhiThì
Bất kỳ biến động tồn nàoXảy raMột mục bất biến ghi trước/thay đổi/sau + tham chiếu
Cùng (referenceType, referenceId) chạy lại-Không tạo mục trùng (idempotent)

LSE - Định danh lô / serial & hạn dùng Built

Mã tính năng: inventory/LSE · Phase: P3 · PRDs: Định danh lô / serial & hạn dùng · Dev: @nx/inventory

Làm gì cho người dùng: tồn trở nên truy vết được ở dưới cấp mục. Cùng một mục ở một địa điểm tách thành các bucket riêng theo lô và theo serial, mỗi cái mang hạn dùng và ngày sản xuất riêng, trong khi một registry định danh biến một mã được quét (SKU / barcode / QR ở cấp mục, IMEI / serial ở cấp đơn vị) thành đúng một thực thể tồn.

Yêu cầu

IDPYêu cầu
URD-LSE-001MTồn được phân bucket theo (mục, địa điểm, lô, serial); các lô/serial khác nhau của một mục tại một địa điểm là các bản ghi tồn riêng.
URD-LSE-002MMỗi bucket tồn mang một số lô, số serial, hạn dùng, và ngày sản xuất.
URD-LSE-003MBucket không có lô/serial gộp thành một bản ghi (NULL bằng nhau coi là cùng bucket), nên mục không truy vết giữ một bản ghi duy nhất.
URD-LSE-004MLô / serial / hạn dùng được bắt lúc nhận hàng trên line đơn mua hàng; một line theo serial ghi một serial mỗi đơn vị nhận.
URD-LSE-005MLine phiếu kho bắt lô / serial / hạn dùng cho stock-in và return-from-customer; một line serial phải có số lượng kế hoạch 1.
URD-LSE-006MMọi biến động snapshot lô / serial / hạn dùng đã biến động vào mục tracking bất biến.
URD-LSE-007MMột registry định danh ghi SKU / BARCODE / QRCODE ở cấp mục và IMEI / SERIAL ở cấp đơn vị (tồn).
URD-LSE-008MMỗi cặp (scheme, code) duy nhất toàn cục trên các bản ghi active - một mã phân giải về đúng một thực thể tồn.
URD-LSE-009MScheme định danh mặc định UNKNOWN khi không nêu; chỉ SKU / BARCODE / QRCODE / IMEI / SERIAL được nhận diện.
URD-LSE-010MĐịnh danh được scope theo merchant qua principal (mục hoặc tồn) và dùng soft-delete; soft-delete một mã giải phóng cặp (scheme, code) của nó.
URD-LSE-011SHàng hết hạn được hủy qua một lý do biến động EXPIRED chuyên biệt giảm đúng lô.
URD-LSE-012SMột lần sản xuất có thể đóng dấu hàng thành phẩm đầu ra với số lô và hạn dùng để truy vết thu hồi.
URD-LSE-013CHạn dùng và ngày sản xuất bắt theo lô hỗ trợ hiển thị sắp-hết-hạn và chọn FEFO (chỉ mô hình dữ liệu; UI vận hành xuất hiện với IOP).

Nghiệm thu

AC-LSE-01: Phân bucket lô
GivenWhenThen
Hai lần nhận một mục với số lô khác nhauĐã nhậnTồn tại hai bucket tồn riêng, mỗi cái có hạn dùng riêng
Một mục không truy vết (không lô/serial)Nhận hai lầnMột bucket cộng dồn - lô/serial NULL bằng nhau gộp
AC-LSE-02: Phân giải định danh duy nhất
GivenWhenThen
Một (scheme, code) đã đăng kýĐược quétPhân giải về đúng một thực thể tồn
Cùng (scheme, code) trên bản ghi khácLưuTừ chối - cặp phải duy nhất trên các bản ghi active
Một mã đã đăng ký bị soft-deleteCặp được đăng ký lạiCho phép - soft-delete giải phóng cặp
AC-LSE-03: Biến động truy vết & hủy
GivenWhenThen
Bất kỳ biến động nào của một bucket truy vếtXảy raMục tracking snapshot lô / serial / hạn dùng đã biến động
Một lô hết hạnHủyGiảm qua lý do EXPIRED và ghi vào trail
Một line nhận theo serial với số lượng > 1LưuTừ chối - một line serial phải đúng một đơn vị

TKT - Phiếu kho Built

Mã tính năng: inventory/TKT · Phase: P2 · PRDs: - · Dev: @nx/inventory

Làm gì cho người dùng: thao tác kho chạy qua phiếu - chuyển giữa các địa điểm, điều chỉnh tồn, kiểm kê, trả hàng, và hủy bỏ - mỗi phiếu qua một quy trình duyệt trước khi chạm vào tồn.

Yêu cầu

IDPYêu cầu
URD-TKT-001MPhiếu hỗ trợ 6 loại thao tác: Chuyển, Điều chỉnh, Kiểm kê, Trả về Vendor, Trả từ Khách hàng, Hủy bỏ/Tiêu hủy.
URD-TKT-002MVòng đời: DRAFT → SUBMITTED → APPROVED → IN_PROGRESS → COMPLETED / CANCELLED.
URD-TKT-003MMỗi phiếu có line item với số lượng kế hoạch vs. thực tế.
URD-TKT-004MHoàn tất một phiếu tạo mục tracking và cập nhật tồn.
URD-TKT-005SLine item hỗ trợ số lot/serial.
URD-TKT-006SLine item hỗ trợ override địa điểm theo từng mục.

Nghiệm thu

AC-TKT-01: Phiếu kho
Cho trướcKhiThì
Phiếu chuyểnCOMPLETEDNguồn giảm, đích tăng
Phiếu kiểm kêCOMPLETEDChênh lệch được tính và áp
Phiếu điều chỉnhCOMPLETEDTồn được sửa với mã lý do

VEN - Vendor Built

Mã tính năng: inventory/VEN · Phase: P1 · PRDs: - · Dev: @nx/inventory

Làm gì cho người dùng: merchant giữ một danh bạ nhà cung cấp - thông tin liên hệ, địa chỉ, mã số thuế - được đơn mua hàng tham chiếu và giữ lại cho lịch sử kể cả sau khi xóa.

Yêu cầu

IDPYêu cầu
URD-VEN-001MChủ có thể tạo vendor trong một merchant.
URD-VEN-002MVendor có tên, thông tin liên hệ (email, điện thoại), địa chỉ, và một định danh hệ thống (VEN_YYYYMMDD_id).
URD-VEN-003SVendor có thể lưu một mã số thuế.
URD-VEN-004MVendor dùng soft-delete; tham chiếu PO lịch sử được giữ.
URD-VEN-005MVendor được cô lập theo từng merchant.

Nghiệm thu

AC-VEN-01: Vòng đời vendor
Cho trướcKhiThì
Chủ tạo một vendorLưuVendor nhận một định danh hệ thống và cô lập theo merchant
Vendor được PO tham chiếu bị xóaSoft-deleteTham chiếu PO lịch sử được giữ

PO - Đơn mua hàng Built

Mã tính năng: inventory/PO · Phase: P1 · PRDs: - · Dev: @nx/inventory

Làm gì cho người dùng: chủ nhận hàng từ vendor qua quy trình đơn mua hàng; nhận hàng tăng tồn và ghi audit trail, với chế độ nhận OVERRIDE và ACCUMULATIVE.

Yêu cầu

IDPYêu cầu
URD-PO-001MChủ có thể tạo một PO chọn vendor + mục trong một thao tác; bắt buộc vendor.
URD-PO-002MVòng đời: DRAFT → PROCESSING → RECEIVED → COMPLETED → CLOSED (chỉ chuyển hợp lệ).
URD-PO-003MChủ có thể cancel một PO từ bất kỳ trạng thái không-cuối nào; tồn đã nhận không tự đảo ngược.
URD-PO-004MChủ có thể revert PROCESSING → DRAFT.
URD-PO-005MMục PO chỉ sửa được ở trạng thái DRAFT.
URD-PO-006MMột PO phải có ≥1 mục trước khi xác nhận.
URD-PO-007MNhận hàng tăng tồn và tạo mục tracking.
URD-PO-008MNhận hàng hỗ trợ chế độ OVERRIDE và ACCUMULATIVE.
URD-PO-009MPO mặc định về địa điểm mặc định của merchant trừ khi chỉ định một cái.
URD-PO-010MTổng PO = subtotal − discount + tax.
URD-PO-011SDiscount/tax thủ công vs. hệ thống được gắn cờ phân biệt rõ.
URD-PO-012MMỗi PO có một số đơn mua hàng do hệ thống sinh.

Nghiệm thu

AC-PO-01: Nhận hàng Đơn mua hàng
Cho trướcKhiThì
PO ở PROCESSINGNhận hàngTồn tăng, tracking được tạo
Chế độ OVERRIDE-Thay thế số lượng đã nhận
Chế độ ACCUMULATIVE-Cộng vào số lượng đã nhận

POI - Mục đơn mua hàng Built

Mã tính năng: inventory/POI · Phase: P1 · PRDs: - · Dev: @nx/inventory

Làm gì cho người dùng: mỗi dòng PO tự tính tổng từ giá, số lượng, multiplier, tax và discount; thêm cùng mục+đơn vị thì cộng dồn số lượng, và đưa dòng về 0 thì xóa dòng.

Yêu cầu

IDPYêu cầu
URD-POI-001MThêm cùng (itemType, itemId, uom) cộng dồn số lượng; uom khác tạo một line mới.
URD-POI-002MTổng mục = (unitPrice × quantity × multiplier) + tax − discount.
URD-POI-003MĐặt số lượng mục ≤ 0 soft-delete line đó và tính lại tổng PO.
URD-POI-004SĐơn giá mặc định về giá vốn đang hoạt động của biến thể.
URD-POI-005SUOM mặc định về đơn vị cơ sở của mục kho.

Nghiệm thu

AC-POI-01: Cộng dồn dòng
Cho trướcKhiThì
Cùng (itemType, itemId, uom) thêm hai lầnThêmSố lượng cộng dồn trên một dòng
Số lượng dòng đặt về 0LưuDòng soft-delete và tổng PO tính lại

MAT - Nguyên vật liệu Built

Mã tính năng: inventory/MAT · Phase: P3 · PRDs: - · Dev: @nx/inventory

Làm gì cho người dùng: merchant F&B theo dõi nguyên liệu thô tách biệt với sản phẩm bán được, mỗi cái có tên i18n và nhiều lược đồ định danh (SKU, barcode, QR) cùng tìm kiếm theo barcode.

Yêu cầu

IDPYêu cầu
URD-MAT-001MChủ có thể tạo nguyên vật liệu trong một merchant.
URD-MAT-002MNguyên vật liệu có một định danh hệ thống (MAT_YYYYMMDD_id) và một tên i18n.
URD-MAT-003MTên nguyên vật liệu hỗ trợ nhiều locale.
URD-MAT-004MMô tả nguyên vật liệu sửa được.
URD-MAT-005MNguyên vật liệu có thể vô hiệu hóa.
URD-MAT-006MNguyên vật liệu có thể lưu trữ (cuối, chỉ đọc).
URD-MAT-007MĐịnh danh nguyên vật liệu là duy nhất.
URD-MAT-101MChủ có thể đính một định danh BARCODE vào một nguyên vật liệu.
URD-MAT-102MNguyên vật liệu hỗ trợ lược đồ định danh: SYSTEM, SLUG, SKU, BARCODE, QRCODE.
URD-MAT-103MMột cặp (scheme, code) là duy nhất xuyên các nguyên vật liệu.
URD-MAT-104MLược đồ định danh mặc định về SYSTEM khi không chỉ định.
URD-MAT-105SNhiều định danh của lược đồ khác nhau có thể cùng tồn tại trên một nguyên vật liệu.
URD-MAT-106SNguyên vật liệu tìm được theo barcode đã đăng ký.

Nghiệm thu

AC-MAT-01: Định danh barcode
Cho trướcKhiThì
Chủ đính một BARCODE vào nguyên vật liệuTìm theo barcode đóNguyên vật liệu được tìm thấy
Cùng (scheme, code) trên nguyên vật liệu khácLưuBị từ chối - cặp phải duy nhất

REC - Công thức / BOM In-progress

Mã tính năng: inventory/REC · Phase: P3 · PRDs: - · Dev: @nx/inventory · ADR-0001

Làm gì cho người dùng: merchant F&B định nghĩa công thức có phiên bản (bill of materials) cho từng biến thể sản phẩm; khi một mục phiếu bếp tiến triển, công thức đang kích hoạt tự giảm nguyên vật liệu và ghi biến động.

Yêu cầu

IDPYêu cầu
URD-REC-001MChủ có thể tạo một công thức đính vào một biến thể sản phẩm.
URD-REC-002MCông thức có một phiên bản (mặc định 1.0).
URD-REC-003M(principal, version) là duy nhất mỗi công thức.
URD-REC-004MMục công thức chỉ định một nguyên vật liệu, số lượng, và đơn vị.
URD-REC-005MMục công thức có thể được thêm vào một công thức.
URD-REC-006MCùng nguyên vật liệu xuất hiện tối đa một lần mỗi công thức.
URD-REC-007MChủ có thể kích hoạt một công thức.
URD-REC-008MChủ có thể vô hiệu hóa một công thức.
URD-REC-009SSửa một công thức đã kích hoạt tạo một phiên bản mới; bản gốc được giữ.
URD-REC-010SNhiều phiên bản công thức có thể được liệt kê mỗi principal.
URD-REC-011MChỉ phiên bản công thức đã kích hoạt được dùng tại runtime.
URD-REC-101MMục công thức tham chiếu một nguyên vật liệu hợp lệ.
URD-REC-102MSố lượng mục công thức lưu với độ chính xác thập phân (4 chữ số).
URD-REC-103MMục công thức lưu một đơn vị.
URD-REC-104MSố lượng mục công thức sửa được.
URD-REC-105MSoft-delete mục công thức cho phép thêm lại cùng nguyên vật liệu.
URD-REC-201MMột thay đổi trạng thái mục phiếu bếp kích hoạt tra cứu công thức và chuẩn bị giảm tại địa điểm mặc định.
URD-REC-202MMỗi thành phần công thức được giảm; một mục tracking (Used as Material) được tạo.
URD-REC-203MGiảm thành phần cập nhật tồn tại địa điểm mặc định.
URD-REC-204MCông thức đã kích hoạt cho biến thể là cái được phân rã.
URD-REC-205MMột event material.stock-changed được phát sau khi phân rã.
URD-REC-206SKhông có địa điểm mặc định → log warning, bỏ qua (không lỗi cứng).
URD-REC-207SKhông có công thức đã kích hoạt → no-op âm thầm.
URD-REC-208CĐịa điểm bếp không-mặc-định được tôn trọng (đang chờ - code hiện tại dùng mặc định của merchant).

Nghiệm thu

AC-REC-01: Phân rã BOM Bếp
Cho trướcKhiThì
Biến thể với công thức đã kích hoạtMục bếp đổi trạng tháiNguyên vật liệu được giảm theo từng mục công thức
Không có công thức đã kích hoạt-No-op âm thầm
Không có địa điểm mặc định-Warning được log, bỏ qua

IOP - Vận hành Kho cho F&B & Bán lẻ Planned

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

Mang lại gì cho người dùng: merchant thực sự vận hành kho từ ứng dụng - phiếu, đơn mua, kiểm kê - rồi đi sâu theo ngành: F&B định mức tự trừ nguyên liệu kèm lô/HSD; bán lẻ nhập/xuất bằng barcode với tồn quầy realtime. (Backend phần lớn đã có; increment này làm cho dùng được end-to-end.)

Yêu cầu

IDPYêu cầu
URD-IOP-001MChủ quán ghi nhập/xuất kho bằng màn phiếu (mọi loại phiếu dùng được từ app)
URD-IOP-002MĐơn mua hàng quản lý end-to-end từ app (tạo → nhận)
URD-IOP-003MKiểm kê & điều chỉnh tồn thực hiện từ app
URD-IOP-004MF&B: bán món có định mức tự trừ nguyên liệu (kiểm chứng e2e, kèm màn công thức)
URD-IOP-005MBán lẻ: nhập/xuất kho bằng quét barcode
URD-IOP-006SLô + HSD ghi nhận khi nhập; nhìn thấy hàng cận hạn
URD-IOP-007STồn realtime hiển thị tại quầy
URD-IOP-008CTạp hoá: chia gói rút gọn (1 vật tư vào → 1 mặt hàng ra)

Nghiệm thu

AC-IOP-01: Vận hành kho từ app
GivenWhenThen
Merchant có NCCTạo PO, nhận hàng, kiểm kêTồn khớp lịch sử phiếu; phiếu chi tự sinh khi nhận
Món F&B có định mứcKhách mua mónTồn nguyên liệu giảm theo công thức

PRO - Đơn sản xuất & Phân rã BOM In-progress

Mã tính năng: inventory/PRO · Phase: P3 · PRDs: PRD-PRO-001 · Dev: @nx/inventory

Làm gì cho người dùng: merchant kiểu làm-vào-kho (tiệm bánh, bếp trung tâm, lắp ráp nhẹ) lên kế hoạch một lượt sản xuất như một chứng từ - thành phẩm nào, từ công thức nào, bao nhiêu, ở đâu - theo dõi kế hoạch vs. thực tế vs. hao hụt qua một vòng đời. Phía sau, một phân rã BOM đa cấp làm phẳng công thức gắn kèm qua các bán thành phẩm lồng nhau xuống tận nguyên vật liệu lá mà một lượt tiêu hao, với chốt chặn độ sâu và chu trình.

Yêu cầu

IDPYêu cầu
URD-PRO-001MChủ có thể tạo một đơn sản xuất nhắm tới thành phẩm (ProductVariant hoặc Material) trong merchant.
URD-PRO-002MMột đơn sản xuất gắn với một công thức nguyên vật liệu (BOM) dẫn dắt phân rã thành phần.
URD-PRO-003MĐơn sản xuất mang số lượng kế hoạch / thực tế / hao hụt theo đơn vị đo ở độ chính xác thập phân (4 chữ số).
URD-PRO-004MVòng đời đơn sản xuất: DRAFT → IN_PROGRESS → DONE / CANCELLED (DONE và CANCELLED tận cùng); chỉ chuyển đổi hợp lệ được phép.
URD-PRO-005MMỗi đơn sản xuất có một số sản xuất sinh tự động, duy nhất, không sửa bởi người dùng.
URD-PRO-006MĐơn sản xuất nêu địa điểm nơi thành phần được rút và thành phẩm được làm ra.
URD-PRO-007SĐơn sản xuất hỗ trợ cửa sổ lịch (lịch bắt đầu / kết thúc) cho hoạch định hàng đợi sản xuất.
URD-PRO-008SĐơn sản xuất ghi mốc thời gian bắt đầu / hoàn thành / huỷ.
URD-PRO-009SĐơn sản xuất có thể mang một số lô đầu ra và ngày hết hạn cho truy vết thu hồi.
URD-PRO-010MĐơn sản xuất cô lập theo merchant và dùng soft-delete.
URD-PRO-011MMột công thức gắn kèm được làm phẳng qua bán thành phẩm lồng nhau xuống nguyên vật liệu lá (BOM đa cấp).
URD-PRO-012MPhân rã dùng phiên bản công thức ĐÃ KÍCH HOẠT mới nhất cho mỗi principal.
URD-PRO-013MPhân rã bị chốt bởi độ sâu lồng tối đa và từ chối chuỗi công thức có chu trình.
URD-PRO-014MMỗi số lượng thành phần lá là tích của các số lượng dọc đường đi phân rã của nó.
URD-PRO-015MMột thành phần biến thể không có công thức con đã kích hoạt bị bỏ qua; một nguyên vật liệu không có công thức con là một lá tiêu hao trực tiếp.
URD-PRO-016MTiêu hao sản xuất và đầu ra thành phẩm được ghi như mục tracking bất biến tham chiếu tới đơn sản xuất, kiểu PRODUCTION_CONSUME / PRODUCTION_OUTPUT.

Nghiệm thu

AC-PRO-01: Tạo một đơn sản xuất
Cho trướcKhiThì
Một thành phẩm có công thức đã kích hoạtChủ tạo một đơn sản xuất với số lượng kế hoạch và địa điểmMột số sản xuất duy nhất được gán và đơn mở ở DRAFT
Cùng merchantĐơn được tạoĐơn cô lập theo merchant và soft-delete được
AC-PRO-02: Chuyển đổi vòng đời
Cho trướcKhiThì
Đơn ở DRAFTBắt đầu / huỷChuyển sang IN_PROGRESS / CANCELLED
Đơn ở IN_PROGRESSHoàn thành / huỷChuyển sang DONE / CANCELLED
Đơn ở DONE hoặc CANCELLEDBất kỳ chuyển đổi nàoTừ chối - trạng thái tận cùng
AC-PRO-03: Phân rã BOM đa cấp
Cho trướcKhiThì
Một công thức mà thành phần của nó tự là một bán thành phẩmPhân rã chạyLàm phẳng ra nguyên vật liệu lá với số lượng nhân dọc từng nhánh
Một chuỗi công thức tham chiếu chính nóPhân rã chạyTừ chối - phát hiện chu trình
Một cây công thức sâu hơn tối đaPhân rã chạyTừ chối - vượt độ sâu tối đa
Một thành phần biến thể không có công thức con đã kích hoạtPhân rã chạyBỏ qua, không phát lá
AC-PRO-04: Từ vựng tracking sản xuất
Cho trướcKhiThì
Một biến động sản xuấtĐược ghiMột mục tracking bất biến kiểu PRODUCTION_CONSUME / PRODUCTION_OUTPUT tham chiếu tới đơn sản xuất

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

Yêu cầu xuyên suốt (CON) áp cho mọi tính năng ở trên và được test là TC-CON-*.

Yêu cầu xuyên suốt (CON)

IDPYêu cầu
URD-CON-001MMọi endpoint kho yêu cầu xác thực (JWT hoặc basic auth).
URD-CON-002MMọi bản ghi dùng soft-delete; bản ghi soft-delete bị loại khỏi listing chuẩn.
URD-CON-003MSố lượng available âm hiện được dung thứ (ràng buộc nghiệp vụ có ghi tài liệu, không phải bug).
URD-CON-004MTrừ tồn là idempotent mỗi (referenceType, referenceId).

Ràng buộc

IDRàng buộc
C-01Một địa điểm mặc định mỗi merchant tại mọi thời điểm.
C-02Một bản ghi tồn mỗi (mục, địa điểm, lot, serial).
C-03Available = on-hand − reserved (âm hiện được dung thứ).
C-04Bản ghi tracking là bất biến.
C-05Biến động tồn là idempotent qua (referenceType, referenceId).
C-06Mục PO chỉ sửa được ở DRAFT.
C-0719 loại tracking dựng sẵn (+ 1 tùy chỉnh) lúc khởi động.
C-08Mọi bản ghi dùng soft-delete.
C-09Mọi số lượng dùng độ chính xác thập phân (4 chữ số).

Không-mục-tiêu

  • BOM đa cấp (nguyên vật liệu làm principal cho cụm lắp ráp con)
  • Phần trăm hao hụt và sản lượng công thức
  • Phân rã BOM khi bán cho bán lẻ phi-F&B
  • Bắt buộc tồn-âm tại POS
  • Quét barcode đầy đủ cho kiểm kê
  • Định giá tồn đa tiền tệ

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

NgàyTác giảMô tảVer
2026-02-28Q. Do - QEKhởi tạo từ phân tích codev0.1
2026-04-15Claude (AI pair)Thêm yêu cầu Material và MaterialRecipe (BOM)v0.2
2026-04-16Q. Do - QEHợp nhất các lĩnh vực yêu cầuv0.3
2026-05-30Claude (AI pair)Định dạng lại theo template module; điều hòa loại tracking về 19 (tài liệu dev)v0.4
2026-06-04Claude (AI pair)Tổ chức lại theo tính năng (Feature Spine); mỗi tính năng tự mang yêu cầu + nghiệm thu; CON chuyển vào Ràng buộcv0.5
2026-06-15Claude (AI pair)Thêm LSE - Định danh lô / serial & hạn dùng (bucket tồn truy vết + registry định danh)v0.6

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