URD: Kho
| Module | Phiên bản | Cập nhật |
|---|---|---|
CORE-06 | v2.0 | 2026-07-13 |
Module Kho làm gì
Xác định các yêu cầu hướng người dùng cho quản lý Kho - merchant biết mình đang có gì, hàng đang nằm ở đâu, nó đến đó bằng cách nào, và nó đáng bao nhiêu tiền.
Module phục vụ hai ngành cùng lúc, và chúng đòi hỏi khác nhau. Bán lẻ cần quản số lượng mã hàng lớn, quét mã vạch nhanh ở quầy, và không bao giờ bán quá tay. F&B cần quản từ nguyên liệu thô: bán một ly trà sữa thì trừ sữa, trừ trà, trừ trân châu - và phải biết lô sữa nào sắp hết hạn để dùng trước.
Năm ý cần hiểu trước
Đây là phần quan trọng nhất của tài liệu. Hiểu năm ý dưới đây là hiểu 80% module.
1. Tồn kho là bốn con số, không phải một
Một con số "còn bao nhiêu hàng" là không đủ, vì nó không trả lời được câu "tôi có thể bán bao nhiêu".
| Con số | Nghĩa | Ví dụ |
|---|---|---|
| Thực có (on-hand) | Số hàng đang nằm trên kệ, sờ được | 10 lon |
| Đang giữ (reserved) | Đã hứa cho ai đó, còn trên kệ nhưng không được bán tiếp | 3 lon (2 lon trong giỏ khách đang thanh toán, 1 lon trong phiếu chờ chuyển kho) |
| Khả dụng (available) | Thực có trừ đang giữ. Đây là con số quyết định có bán được hay không | 7 lon |
| Đang về (incoming) | Đã rời kho nguồn, đang trên đường tới đây. Thấy được nhưng chưa bán được | 5 lon |
Người bán hàng chỉ quan tâm khả dụng. Người kiểm kê chỉ quan tâm thực có. Hai người đếm ra hai số khác nhau và cả hai đều đúng.
2. Mọi thay đổi tồn đều đi qua một chứng từ
Không có chuyện tồn kho tự nhiên tăng hay giảm. Luôn có một tờ giấy đứng sau: đơn mua hàng, phiếu nhập, phiếu chuyển, phiếu kiểm kê, phiếu hủy - hoặc một đơn bán hàng.
Chứng từ có vòng đời: soạn → gửi → duyệt → thực hiện → hoàn tất. Tồn kho chỉ thay đổi khi chứng từ hoàn tất, không phải lúc vừa soạn xong. Nhờ vậy mà mọi con số đều truy được về một tờ giấy có người ký.
3. Sổ là sự thật, bảng tồn chỉ là bản tổng hợp
Hệ thống ghi hai chỗ:
- Sổ biến động (
LDG) - mỗi lần tồn đổi là một dòng mới, ghi rõ: trước bao nhiêu, đổi bao nhiêu, sau bao nhiêu, vì lý do gì, do chứng từ nào. Không nghiệp vụ nào - bán hàng, nhập hàng, chuyển kho, kiểm kê - được sửa hay xóa dòng sổ cũ; sửa sai là ghi thêm một dòng điều chỉnh mới. Đội vận hành hệ thống có một cửa thoát riêng để sửa/xóa trực tiếp khi cần cứu dữ liệu - đây là công cụ nội bộ dùng khi có sự cố, không phải tính năng của merchant. - Bảng tồn (
STK) - bốn con số hiện tại. Đây là bản tổng hợp để đọc nhanh, vì cộng dồn cả cuốn sổ mỗi lần bán hàng thì quá chậm.
Khi hai chỗ lệch nhau, sổ là đúng. Bảng tồn dựng lại được từ sổ; sổ thì không dựng lại được từ bảng tồn.
4. Bán hàng là giữ trước, trừ sau
Hai bước tách bạch, và đây là chỗ chống bán quá tay:
- Giữ (reserve) - ngay khi thu ngân bấm món vào đơn. Hàng vẫn trên kệ, nhưng "khả dụng" giảm ngay. Nếu không đủ hàng, hệ thống từ chối tại đây - lúc khách chưa trả tiền, còn sửa được.
- Trừ (consume) - khi đơn hoàn tất. Hàng rời kệ thật. Bước này không bao giờ thất bại vì thiếu hàng, vì hàng đã được giữ từ bước 1.
Món pha chế cũng vậy: bấm "1 trà sữa" là hệ thống nổ công thức ra sữa/trà/trân châu rồi giữ từng nguyên liệu ngay lúc đó. Hết sữa thì báo ngay tại quầy, không đợi tới lúc bếp làm mới biết.
Mặc định chặn bán quá tay. Merchant có thể bật cho bán âm cho từng mặt hàng - ví dụ quán bật cho đá và ống hút (đếm không chính xác), nhưng giữ chặn cho gà và sữa.
5. Giá vốn tách khỏi số lượng
Số lượng đếm theo từng kho. Giá vốn thì không - nó là một con số cho cả merchant.
Nghĩa là chuyển hàng giữa hai kho không đụng gì tới tiền - chỉ là số lượng dịch chuyển. Giá vốn chỉ đổi khi nhập hàng mới với giá khác.
Module có những gì
Mười bảy nhóm feature. Bấm vào mã AREA để sang tab Chi tiết đọc yêu cầu của nhóm đó.
AREA | Tên | Ngành | Trạng thái |
|---|---|---|---|
LOC | Địa điểm kho | Chung | Đã dựng |
UOM | Đơn vị tính & quy đổi | Chung | Một phần |
STK | Mục kho & mức tồn | Chung | Đã dựng |
RSV | Giữ tồn & chặn bán quá tay | Chung | Một phần |
VAL | Giá vốn | Chung | Một phần |
LSE | Lô, hạn dùng & chiến lược xuất | F&B, Bán lẻ | Chưa dựng |
LDG | Sổ biến động | Chung | Chưa dựng |
TKT | Phiếu kho | Chung | Chưa dựng |
TRF | Chuyển kho | Chung | Chưa dựng |
CNT | Kiểm kê | Chung | Chưa dựng |
VEN | Nhà cung cấp | Chung | Một phần |
PO | Đơn mua hàng | Chung | Chưa dựng |
MAT | Nguyên vật liệu | F&B | Một phần |
BOM | Công thức | F&B, Sản xuất | Chưa dựng |
MFG | Lệnh sản xuất | Sản xuất | Chưa dựng |
RPL | Bổ sung hàng | Chung | Một phần |
SYN | Đồng bộ đa kênh | Bán lẻ | Chưa dựng |
1. Định nghĩa
| Thuật ngữ | Định nghĩa |
|---|---|
| Địa điểm kho | Một nơi chứa hàng vật lý: kho tổng, cửa hàng, quầy bar, bếp. Có thể lồng nhau. |
| Mục kho | Một mặt hàng được theo dõi tồn - là một biến thể sản phẩm, hoặc một nguyên vật liệu. |
| Bản ghi tồn | Bốn con số của một mặt hàng tại một địa điểm, tách theo lô nếu có. |
| Giữ tồn | Một lời hứa dành phần hàng cho ai đó: một đơn bán, một phiếu chuyển, một lệnh sản xuất. Người giữ được ghi tên, nên nhả đúng phần của mình. |
| Cho bán âm | Cờ theo mặt hàng, cho phép bán vượt số hàng đang có. Mặc định tắt. |
| Sổ biến động | Bản ghi chỉ-thêm, mỗi dòng là một lần tồn đổi, kèm lý do và chứng từ nguồn. |
| Định giá tồn kho | Giá vốn của một mặt hàng: bình quân gia quyền (tự tính) hoặc định mức (người nhập). |
| Bình quân gia quyền | Nhập hàng giá mới thì trộn với hàng cũ theo tỉ trọng số lượng, ra một giá vốn duy nhất. |
| Lô | Một nhóm hàng nhập hoặc sản xuất cùng đợt, chung một hạn dùng. Một lô có nhiều đơn vị. |
| Serial | Mã định danh cho từng đơn vị riêng lẻ (IMEI điện thoại). Một serial một món. |
| Chiến lược xuất | Khi một mặt hàng có nhiều lô, xuất lô nào trước: hết hạn sớm nhất (FEFO) hoặc nhập trước (FIFO). |
| Phiếu kho | Chứng từ điều khiển một lần hàng vào, ra, hoặc dịch chuyển. Có vòng đời, duyệt xong mới ghi sổ. |
| Đơn vị gốc | Đơn vị nhỏ nhất mà một mặt hàng được đếm. Tồn luôn lưu theo đơn vị này. |
| Nguyên vật liệu | Thứ dùng để làm ra món khác, không bán trực tiếp: sữa, trà, bột mì. |
| Công thức | Định lượng làm ra một món: 1 ly trà sữa cần 50ml sữa, 5g trà, 30g trân châu. |
| Nổ định lượng | Từ món bán ra, lần theo công thức để biết phải trừ những gì. Lần xuống qua nhiều tầng nếu cần, nhưng dừng ngay tại mọi thành phần có tồn riêng và trừ trên chính tồn đó. |
| Nhà cung cấp | Bên bán hàng cho merchant. Giá, thời gian giao, số lượng tối thiểu khai theo từng cặp nhà cung cấp - mặt hàng. |
2. Mô hình Khái niệm
3. Feature
LOC - Địa điểm kho Đã dựng
Đặc tả: PRD-STK-001 (chung cho
LOCvàSTK) · 8 yêu cầu · 4 kịch bản nghiệm thu
Một merchant hiếm khi chỉ có một chỗ để hàng. Quán trà sữa có quầy pha chế và kho nguyên liệu phía sau; chuỗi bán lẻ có kho tổng và nhiều cửa hàng. Địa điểm kho là nơi hệ thống biết "hàng đang nằm ở đâu", và cho phép merchant dựng một cây phân cấp thay vì một danh sách phẳng. Mỗi merchant luôn có sẵn một địa điểm mặc định ngay từ ngày đầu, kể cả khi chưa từng mở màn cấu hình kho - để các nghiệp vụ khác như bán hàng, nhập hàng không bao giờ bị chặn lại vì "chưa chọn kho".
| Mã | Ưu tiên | Yêu cầu | Trạng thái |
|---|---|---|---|
URD-LOC-001 | Bắt buộc | Merchant tạo một địa điểm kho với tên hiển thị, chọn loại: kho vật lý (kho tổng, cửa hàng, quầy bar, bếp) hoặc địa điểm mô phỏng - dùng để nhóm hoặc lập kế hoạch, không gắn với hàng vật lý thật. | Đã dựng |
URD-LOC-002 | Bắt buộc | Một địa điểm có thể lồng vào một địa điểm cha để tạo cây phân cấp (vd Kho tổng > Khu A > Kệ lạnh), không giới hạn số tầng. | Một phần |
URD-LOC-003 | Bắt buộc | Mỗi merchant có đúng một địa điểm mặc định tại một thời điểm; chỉ định một địa điểm khác làm mặc định thì địa điểm cũ tự động thôi làm mặc định. | Đã dựng |
URD-LOC-004 | Bắt buộc | Merchant chưa từng tạo địa điểm nào vẫn thao tác bình thường (bán hàng, nhập hàng) - hệ thống tự tạo một địa điểm mặc định ngay lần đầu cần dùng đến, không bắt merchant phải vào cấu hình kho trước. | Đã dựng |
URD-LOC-005 | Bắt buộc | Địa điểm đi qua vòng đời: mới tạo → kích hoạt → ngừng hoạt động → lưu trữ; địa điểm ngừng hoạt động không còn hiện trong danh sách chọn nơi nhập/xuất/chuyển hàng, nhưng lịch sử vẫn giữ nguyên. | Đã dựng |
URD-LOC-006 | Nên có | Merchant nhập địa chỉ cho một địa điểm vật lý, dùng khi cần in trên chứng từ hoặc phối hợp giao nhận. | Đã dựng |
URD-LOC-007 | Nên có | Merchant xem tồn cộng dồn của một nhánh trong cây địa điểm (vd tổng tồn của "Kho tổng" gồm mọi khu con bên trong). | Chưa dựng |
URD-LOC-008 | Bắt buộc | Đội vận hành xem và quản lý địa điểm kho của mọi merchant tại Back Office, cùng cấu trúc và vòng đời như merchant tự quản lý trên Client. | Đã dựng |
AC-LOC-01: Phân cấp địa điểm
| Cho trước | Khi | Thì |
|---|---|---|
| Merchant có "Kho tổng" là địa điểm gốc | Tạo địa điểm mới "Khu lạnh", chọn cha là "Kho tổng" | "Khu lạnh" xuất hiện là con của "Kho tổng" trong cây địa điểm |
AC-LOC-02: Đúng một địa điểm mặc định
| Cho trước | Khi | Thì |
|---|---|---|
| Merchant đang có "Cửa hàng A" là mặc định | Chỉ định "Kho tổng" làm mặc định | "Kho tổng" trở thành mặc định; "Cửa hàng A" tự động thôi mặc định |
AC-LOC-03: Tự tạo địa điểm mặc định
| Cho trước | Khi | Thì |
|---|---|---|
| Merchant mới, chưa từng mở màn Địa điểm kho | Bán món hàng đầu tiên | Hệ thống tự tạo một địa điểm mặc định và trừ tồn tại đó, không báo lỗi "chưa chọn kho" |
AC-LOC-04: Địa điểm mô phỏng không tính là tồn vật lý
| Cho trước | Khi | Thì |
|---|---|---|
| Merchant tạo một địa điểm loại mô phỏng để nhóm hàng đang lên kế hoạch nhập | Xem báo cáo tổng tồn vật lý của merchant | Tồn ghi nhận tại địa điểm mô phỏng không cộng vào tổng tồn vật lý - đây là số dùng để lập kế hoạch, không phải hàng có thật trên kệ |
UOM - Đơn vị tính & quy đổi Một phần
Đặc tả: PRD-UOM-001 · 12 yêu cầu · 2 kịch bản nghiệm thu
Một sản phẩm hiếm khi chỉ bán bằng một đơn vị: nhập hàng theo thùng, bán lẻ theo lon; nguyên liệu nhập theo bao, dùng theo gram. Tồn kho phải quy về một đơn vị chung để cộng trừ được, nhưng con người lại muốn nhìn và nhập liệu theo đơn vị quen tay. Đơn vị tính & quy đổi là nơi hệ thống dung hòa hai nhu cầu đó: lưu tồn theo một đơn vị gốc duy nhất, nhưng để merchant thao tác bằng bất kỳ đơn vị nào và tự động quy đổi qua lại - kể cả khi hai merchant khác nhau gọi "một thùng" là hai số lượng khác nhau.
| Mã | Ưu tiên | Yêu cầu | Trạng thái |
|---|---|---|---|
URD-UOM-001 | Bắt buộc | Merchant chọn hoặc tạo đơn vị tính, phân theo nhóm: đếm, khối lượng, thể tích, chiều dài, thời gian, diện tích, khác. Có sẵn bộ đơn vị dùng chung toàn hệ thống, và merchant tự thêm đơn vị riêng khi cần. | Một phần |
URD-UOM-002 | Bắt buộc | Mỗi mặt hàng có một đơn vị gốc; toàn bộ tồn kho của mặt hàng đó luôn được lưu và hiển thị theo đơn vị gốc, bất kể chứng từ nhập bằng đơn vị nào. | Một phần |
URD-UOM-003 | Bắt buộc | Merchant khai hệ số quy đổi giữa một đơn vị và một đơn vị tham chiếu cùng nhóm (vd 1 kg quy theo 1000 g); nhiều cặp khai nối tiếp nhau tạo thành một chuỗi quy đổi nhiều tầng. | Một phần |
URD-UOM-004 | Bắt buộc | Khi lập chứng từ nhập/xuất/chuyển bằng một đơn vị khác đơn vị gốc, hệ thống tự tính ra số lượng quy đổi theo chuỗi hệ số đã khai - người lập chứng từ không phải tự nhân hệ số hay điền tay số quy đổi. | Chưa dựng |
URD-UOM-005 | Bắt buộc | Mỗi biến thể sản phẩm và mỗi nguyên vật liệu khai ba vai trò đơn vị: đơn vị gốc, đơn vị mua hàng, đơn vị bán hàng - mỗi vai trò chọn một đơn vị trong danh mục. | Một phần |
URD-UOM-006 | Nên có | Với vai trò mua hàng hoặc bán hàng, merchant có thể khai riêng cho chính mặt hàng đó: một đơn vị đóng gói của mặt hàng này bằng bao nhiêu đơn vị gốc (vd "1 thùng của tôi = 24 lon"). Khai riêng thì con số này thắng hệ số quy đổi chung của danh mục. | Chưa dựng |
URD-UOM-007 | Bắt buộc | Không khai riêng thì hệ thống dùng đúng hệ số quy đổi chung đã khai ở danh mục đơn vị (đúng cho các đơn vị đo lường chuẩn như kg/g, lít/ml); có khai riêng thì dùng con số riêng của mặt hàng (đúng cho đơn vị đóng gói kiểu thùng/lốc/kết, vì cùng tên "thùng" nhưng mỗi hàng một quy cách). | Chưa dựng |
URD-UOM-008 | Bắt buộc | Đơn vị gốc không được khai số riêng - hệ số của đơn vị gốc luôn là 1 theo định nghĩa. | Chưa dựng |
URD-UOM-009 | Nên có | Nhờ khai riêng theo từng mặt hàng, merchant chỉ cần một đơn vị "thùng" duy nhất trong danh mục dùng chung cho nhiều mặt hàng dù mỗi mặt hàng đóng gói khác quy cách, thay vì phải tạo "thùng-12", "thùng-24" thành nhiều đơn vị riêng biệt. | Chưa dựng |
URD-UOM-010 | Bắt buộc | Nguyên vật liệu khai đơn vị tại module Kho; biến thể sản phẩm khai đơn vị tại module Danh mục sản phẩm - cùng cấu trúc ba vai trò, khác nơi thao tác. | Một phần |
URD-UOM-011 | Bắt buộc | Hệ số quy đổi của một đơn vị trên một mặt hàng là bất biến khi mặt hàng đã có phát sinh kho. • Sửa hệ số sau khi đã nhập, đã bán, đã kiểm kê là viết lại lịch sử: số lượng cũ vẫn nằm đó nhưng ý nghĩa của chúng đổi, giá vốn quá khứ lệch theo. • Nhà cung cấp bán quy cách khác thì khai một đơn vị MỚI trên mặt hàng, không sửa hệ số của đơn vị cũ. | Chưa dựng |
URD-UOM-012 | Bắt buộc | Chứng từ đóng băng cả đơn vị lẫn số lượng quy ra đơn vị gốc tại thời điểm lập. • Dòng đơn mua hàng và dòng phiếu kho lưu lại đơn vị đã chọn và số lượng đã quy đổi, không tính lại về sau. • Nhờ vậy một chứng từ cũ luôn đọc ra đúng con số của ngày lập nó, kể cả khi danh mục đơn vị về sau có thay đổi. | Chưa dựng |
AC-UOM-01: Quy đổi theo chuỗi hệ số chung
| Cho trước | Khi | Thì |
|---|---|---|
| Đơn vị gốc là "gram"; đơn vị "kg" khai hệ số 1000 quy theo "gram" | Lập phiếu nhập 5 kg nguyên liệu | Hệ thống tự ghi 5000 gram vào tồn, người lập phiếu không phải tự nhân hệ số |
AC-UOM-02: Khai riêng theo mặt hàng thắng hệ số chung
| Cho trước | Khi | Thì |
|---|---|---|
| Sản phẩm Coca chọn đơn vị mua hàng là "thùng", khai riêng 24 lon/thùng | Lập đơn mua 2 thùng Coca | Hệ thống ghi nhận 48 lon vào tồn (đơn vị gốc là lon), dùng đúng con số 24 khai riêng cho sản phẩm này |
| Sản phẩm Pepsi cũng chọn đơn vị mua hàng là "thùng" nhưng khai riêng 20 lon/thùng | Lập đơn mua 2 thùng Pepsi | Hệ thống ghi nhận 40 lon - cùng tên đơn vị "thùng" nhưng ra số khác nhau vì mỗi sản phẩm khai riêng của mình |
STK - Mục kho & mức tồn Đã dựng
Đặc tả: PRD-STK-001 (chung cho
LOCvàSTK) · 9 yêu cầu · 4 kịch bản nghiệm thu
Mục kho là nơi bốn con số tồn kho (thực có, đang giữ, khả dụng, đang về) trở thành một bản ghi cụ thể: một mặt hàng, tại một địa điểm, tách theo lô nếu cần theo dõi lô. Đây là màn hình nhân viên kho mở ra mỗi ngày để biết còn bao nhiêu, đang giữ cho ai, và khi nào cần nhập thêm. Cùng một mặt hàng có thể có nhiều mục kho khác nhau, mỗi mục là một tổ hợp mặt hàng - địa điểm - lô riêng.
| Mã | Ưu tiên | Yêu cầu | Trạng thái |
|---|---|---|---|
URD-STK-001 | Bắt buộc | Một mặt hàng (biến thể sản phẩm hoặc nguyên vật liệu) bật theo dõi tồn thì tự động có một mục kho khi hệ thống cần ghi nhận tồn lần đầu - do đồng bộ từ danh mục sản phẩm, hoặc do lần nhập hàng đầu tiên. | Đã dựng |
URD-STK-002 | Bắt buộc | Mỗi mục kho tại một địa điểm mang bốn con số: thực có, đang giữ, khả dụng, đang về. | Một phần |
URD-STK-003 | Bắt buộc | Khả dụng luôn bằng thực có trừ đang giữ, đúng ở mọi thời điểm, kể cả khi nhiều thao tác cùng xảy ra đồng thời trên cùng một mục kho. | Một phần |
URD-STK-004 | Bắt buộc | Một mặt hàng bật theo dõi lô thì mỗi mục kho tách riêng theo từng lô - cùng mặt hàng, cùng địa điểm nhưng khác lô là hai bản ghi tồn khác nhau. Bật theo dõi serial thì tách theo từng đơn vị serial. | Chưa dựng |
URD-STK-005 | Bắt buộc | Cảnh báo sắp hết hàng theo ba tầng ngưỡng, dùng tầng đầu tiên có khai: ngưỡng riêng cho mục kho đó → ngưỡng chung cho mặt hàng (áp cho mọi địa điểm) → ngưỡng mặc định của hệ thống. | Đã dựng |
URD-STK-006 | Nên có | Merchant xem tồn cộng dồn của một mặt hàng trên toàn bộ địa điểm, hoặc xem riêng theo từng địa điểm. | Đã dựng |
URD-STK-007 | Bắt buộc | Merchant hoặc đội vận hành sửa trực tiếp số thực có của một mục kho qua màn quản trị, không cần qua phiếu kho; mọi lần sửa đều ghi một dòng vào sổ biến động kèm số cũ, số mới và lý do. | Đã dựng |
URD-STK-008 | Nên có | Mỗi mục kho ghi lại thời điểm gần nhất được kiểm kê và thời điểm gần nhất được nhập hàng, để merchant biết mục kho nào lâu chưa được kiểm lại. | Chưa dựng |
URD-STK-009 | Bắt buộc | Bất biến "khả dụng = thực có - đang giữ" được ép trực tiếp ở tầng cơ sở dữ liệu, không dựa vào việc từng luồng ghi tồn tự giác tính đúng con số này - kể cả một đoạn code viết sai thứ tự cũng không thể phá vỡ được bất biến. | Chưa dựng |
AC-STK-01: Bốn con số của một mục kho
| Cho trước | Khi | Thì |
|---|---|---|
| Mục kho có thực có 10, đang giữ 3 | Xem màn chi tiết tồn | Khả dụng hiển thị 7 |
AC-STK-02: Cảnh báo theo ba tầng ngưỡng
| Cho trước | Khi | Thì |
|---|---|---|
| Mục kho A không khai ngưỡng riêng; mặt hàng của nó khai ngưỡng chung 20 | Khả dụng của mục kho A còn 15 | Hệ thống cảnh báo sắp hết hàng, dùng ngưỡng chung 20 |
| Mục kho B khai riêng ngưỡng 5; mặt hàng của nó khai ngưỡng chung 20 | Khả dụng của mục kho B còn 15 | Hệ thống không cảnh báo - ngưỡng riêng 5 được ưu tiên, và 15 vẫn trên ngưỡng đó |
AC-STK-03: Tách theo lô
| Cho trước | Khi | Thì |
|---|---|---|
| Mặt hàng bật theo dõi lô, đã có lô A còn 10, lô B còn 5 | Xem chi tiết tồn tại một địa điểm | Hai dòng tồn riêng biệt hiển thị: lô A - 10, lô B - 5, cộng lại đúng tổng 15 |
AC-STK-04: Bất biến ép ở tầng dữ liệu, không dựa vào code
| Cho trước | Khi | Thì |
|---|---|---|
| Mục kho có thực có 10, đang giữ 4 (khả dụng 6) | Nhiều thao tác ghi tồn chạy đồng thời trên cùng mục kho, kể cả một luồng ghi mới viết sai thứ tự cập nhật | Khả dụng vẫn luôn đúng bằng thực có trừ đang giữ tại mọi thời điểm đọc được - cơ sở dữ liệu tự chặn mọi thao tác ghi làm sai bất biến, không cần đoạn code nào tự giác kiểm tra lại |
RSV - Giữ tồn & chặn bán quá tay Một phần
Đặc tả: PRD-RSV-001 · 10 yêu cầu · 4 kịch bản nghiệm thu
Bán quá tay - hứa bán một món cho hai khách cùng lúc - là lỗi vận hành tệ nhất một merchant có thể gặp. Giữ tồn là cơ chế chặn lỗi đó lại: ngay khi thu ngân bấm món vào đơn, phần hàng tương ứng bị giữ lại và "khả dụng" giảm ngay lập tức - trước cả khi khách trả tiền. Cùng một cơ chế giữ tồn đó còn dùng cho phiếu chuyển kho (hàng đang trên đường) và lệnh sản xuất (nguyên liệu đã cam kết cho một mẻ hàng) - một cơ chế, nhiều nghiệp vụ dùng chung.
Việc giữ tồn tự động lúc bấm món đã chạy thật, và merchant sửa tay được con số đang giữ qua màn quản trị. Nhưng màn xem chi tiết ai đang giữ bao nhiêu - bóc tách từng đơn hàng, từng phiếu chuyển đang giữ phần nào - thì chưa có, merchant chỉ thấy một con số tổng.
| Mã | Ưu tiên | Yêu cầu | Trạng thái |
|---|---|---|---|
URD-RSV-001 | Bắt buộc | Bấm một mặt hàng vào giỏ hàng giữ ngay phần tồn tương ứng - thực có không đổi, đang giữ tăng, khả dụng giảm cùng lúc. | Đã dựng |
URD-RSV-002 | Bắt buộc | Mặc định hệ thống chặn giữ hoặc bán vượt quá số khả dụng - yêu cầu bị từ chối ngay tại giỏ hàng, trước khi khách thanh toán. | Đã dựng |
URD-RSV-003 | Bắt buộc | Từng mục kho có thể bật cờ cho bán âm để cho phép giữ/bán vượt tồn, kể cả xuống âm - dùng cho hàng khó đếm chính xác như đá viên, ống hút. Cờ này mặc định tắt. | Đã dựng |
URD-RSV-004 | Bắt buộc | Mỗi lần giữ tồn được gắn với người giữ cụ thể - một đơn bán, một phiếu chuyển kho, hoặc một lệnh sản xuất - để biết chính xác phần đang giữ thuộc về đâu. | Chưa dựng |
URD-RSV-005 | Nên có | Một mặt hàng có thể được nhiều nguồn giữ cùng lúc; màn chi tiết bung ra được từng phần đang giữ theo đúng nguồn của nó, không chỉ một con số tổng. • Ví dụ: đơn hàng #123 đang giữ 2 lon, phiếu chuyển #45 đang giữ 1 lon. • Merchant thấy hàng bị kẹt (đang giữ nhiều nhưng không rõ vì sao) thì biết ngay phải gỡ ở đâu, thay vì chỉ thấy tổng đang giữ mà không truy được nguồn. | Chưa dựng |
URD-RSV-006 | Bắt buộc | Khi một đơn bán bị xóa dòng hàng hoặc bị hủy, phần tồn đã giữ riêng cho đơn đó được nhả lại ngay lập tức - khả dụng tăng tương ứng, không cần thao tác thêm và không có thông báo nào bật lên. | Đã dựng |
URD-RSV-007 | Bắt buộc | Kho không tự quyết định thời điểm nhả tồn đã giữ và không có cơ chế tự hết hạn theo thời gian - việc nhả luôn do nơi tạo ra lần giữ đó (đơn bán, phiếu chuyển, lệnh sản xuất) chủ động ra lệnh, theo đúng vòng đời của nó. | Đã dựng |
URD-RSV-008 | Bắt buộc | Món pha chế hoặc set hàng đi qua đúng cơ chế giữ tồn khi được bấm vào đơn - thiếu một trong các thành phần thì báo hết món ngay tại giỏ hàng, trừ khi thành phần đó cũng bật cờ cho bán âm. | Chưa dựng |
URD-RSV-009 | Nên có | Hàng trên phiếu chuyển kho được giữ tại địa điểm nguồn từ lúc lập phiếu cho tới khi hàng rời kho nguồn. • Hàng rời kho nguồn thì bản ghi giữ kết thúc và thực có ở nguồn giảm cùng lúc, nên khả dụng ở nguồn không đổi thêm lần nữa. • Từ lúc đó tới khi địa điểm đích xác nhận nhận đủ, phần hàng nằm ở con số "đang về" của kho đích, và kho nguồn vẫn chịu trách nhiệm về phần hàng đó. | Chưa dựng |
URD-RSV-010 | Nên có | Các lần vượt tồn được ghi lại thành nhật ký để merchant đối soát. • Ghi cả lần giữ tồn bị từ chối vì thiếu hàng và lần bán âm thành công nhờ cờ cho bán âm. • Lọc được theo mặt hàng, để thấy mặt hàng nào liên tục bị từ chối hoặc liên tục bán âm, làm căn cứ đặt lại hàng hoặc bật cờ. | Chưa dựng |
AC-RSV-01: Chặn bán quá tay mặc định
| Cho trước | Khi | Thì |
|---|---|---|
| Mục kho còn khả dụng 2, chưa bật cho bán âm | Thu ngân bấm 3 vào giỏ | Hệ thống từ chối, báo không đủ hàng ngay tại giỏ hàng |
AC-RSV-02: Cho bán âm khi bật cờ
| Cho trước | Khi | Thì |
|---|---|---|
| Mục kho "đá viên" còn khả dụng 0, đã bật cho bán âm | Thu ngân bấm thêm 5 đá vào giỏ | Hệ thống vẫn cho giữ, đang giữ tăng, khả dụng xuống -5, không báo lỗi |
AC-RSV-03: Nhả tồn khi hủy đơn
| Cho trước | Khi | Thì |
|---|---|---|
| Đơn bán đang giữ 3 đơn vị một mặt hàng | Khách hủy đơn | Đang giữ giảm 3 ngay lập tức, khả dụng tăng lại 3, không có thông báo nào hiện ra |
AC-RSV-04: Xem chi tiết ai đang giữ hàng
| Cho trước | Khi | Thì |
|---|---|---|
| Mặt hàng X đang giữ tổng cộng 3 lon: đơn hàng #123 giữ 2 lon, phiếu chuyển #45 giữ 1 lon | Merchant mở màn chi tiết đang giữ của mặt hàng X | Hai dòng breakdown hiện ra: đơn hàng #123 - 2 lon, phiếu chuyển #45 - 1 lon, cộng đúng bằng tổng đang giữ 3 lon |
VAL - Giá vốn Một phần
Đặc tả: PRD-VAL-001 · 13 yêu cầu · 4 kịch bản nghiệm thu
Giá vốn trả lời câu hỏi: một đơn vị hàng trong kho đáng bao nhiêu tiền, để tính đúng lãi lỗ khi bán ra. Merchant nhập hàng nhiều đợt, giá mỗi đợt có thể khác nhau - hệ thống cần gộp lại thành một con số duy nhất mà không cần merchant tự tính tay. Hai cách tính được hỗ trợ song song: một cách tự động theo bình quân gia quyền, một cách để chủ quán tự gõ một giá cố định khi họ đã biết rõ giá vốn thật, ví dụ hàng tự sản xuất hoặc hàng có giá nhập ổn định. Kho không kéo module Tài chính vào việc này - chênh lệch giá chỉ là một con số ghi lại để tham khảo, không sinh bút toán kế toán nào.
| Mã | Ưu tiên | Yêu cầu | Trạng thái |
|---|---|---|---|
URD-VAL-001 | Bắt buộc | Mỗi mặt hàng (biến thể sản phẩm hoặc nguyên vật liệu) có đúng một giá vốn cho mỗi merchant; v1 không tách giá vốn theo từng địa điểm - một mặt hàng chỉ có một giá vốn dù có mặt ở nhiều kho. | Chưa dựng |
URD-VAL-002 | Bắt buộc | Hệ thống lưu song song hai giá cho mỗi mặt hàng: giá bình quân gia quyền (hệ thống tự tính) và giá định mức (chủ quán tự nhập tay). | Chưa dựng |
URD-VAL-003 | Bắt buộc | Chủ quán chọn phương pháp định giá cho từng mặt hàng - dùng giá bình quân gia quyền hay giá định mức - để quyết định giá nào được dùng khi xuất kho. | Chưa dựng |
URD-VAL-004 | Bắt buộc | Giá bình quân gia quyền được tính lại mỗi lần nhập hàng, bất kể mặt hàng đó đang chọn phương pháp định giá nào - giá này luôn chạy nền để sẵn sàng khi merchant muốn đổi phương pháp. | Chưa dựng |
URD-VAL-005 | Bắt buộc | Công thức bình quân gia quyền: giá vốn mới bằng (giá trị tồn cũ cộng giá trị lô vừa nhập) chia cho (số lượng tồn cũ cộng số lượng vừa nhập). | Chưa dựng |
URD-VAL-006 | Bắt buộc | Khi tồn về 0 hoặc âm, hệ thống không chia cho 0 - giá vốn cũ được giữ nguyên (đóng băng) cho tới lần nhập kế tiếp, lúc đó giá mới thay thế hoàn toàn giá cũ. | Chưa dựng |
URD-VAL-007 | Bắt buộc | Giá định mức do chủ quán tự nhập tại màn hình mặt hàng, không tự đổi theo các lần nhập hàng - chỉ đổi khi chủ quán tự sửa. | Một phần |
URD-VAL-008 | Bắt buộc | Khi giá nhập hàng thật khác giá định mức đang cấu hình, phần chênh lệch được ghi lại như một con số quan sát được trên dòng sổ biến động của lần nhập đó, không tạo bút toán kế toán và không chuyển qua module Tài chính. | Chưa dựng |
URD-VAL-009 | Bắt buộc | Chuyển hàng giữa hai địa điểm của cùng merchant không làm đổi giá vốn - giá vốn theo merchant, số lượng mới là thứ thay đổi theo địa điểm. | Chưa dựng |
URD-VAL-010 | Nên có | Khi hóa đơn nhà cung cấp về sau ngày nhận hàng và ghi giá khác với giá lúc nhận, đơn mua hàng hiển thị cảnh báo lệch giá; giá vốn của các lần xuất kho đã xảy ra trước đó giữ nguyên, không tính lại - phần chênh lệch chỉ áp dụng cho các lần nhập/xuất tiếp theo. | Chưa dựng |
URD-VAL-011 | Bắt buộc | v1 không hỗ trợ giá vốn theo FIFO hay LIFO - chỉ có bình quân gia quyền và định mức. | Chưa dựng |
URD-VAL-012 | Có thể | Merchant vận hành nhiều địa điểm nhập hàng độc lập có thể bật cấu hình nâng cao: tách giá vốn riêng theo từng địa điểm thay vì dùng chung một giá cho cả merchant. | Chưa dựng |
URD-VAL-013 | Nên có | Merchant đang dùng giá định mức xem được màn hình gom chênh lệch giá vốn theo khoảng thời gian - tổng số tiền đã mua đắt hơn hoặc rẻ hơn so với giá định mức đang cấu hình, cộng dồn từ các dòng sổ biến động có ghi chênh lệch. Màn này chỉ có ý nghĩa khi có mặt hàng thật đang bật giá định mức. | Chưa dựng |
AC-VAL-01: Tính lại giá bình quân gia quyền khi nhập hàng
| Cho trước | Khi | Thì |
|---|---|---|
| Mặt hàng đang tồn 10 đơn vị, giá vốn bình quân 20.000đ/đơn vị (tổng giá trị tồn 200.000đ) | Nhập thêm 5 đơn vị với giá 26.000đ/đơn vị (tổng 130.000đ) | Giá vốn bình quân mới = (200.000 + 130.000) / (10 + 5) = 22.000đ/đơn vị |
| Cùng mặt hàng, đang cấu hình dùng giá định mức để xuất kho | Nhập thêm hàng như trên | Giá bình quân gia quyền vẫn được tính lại thành 22.000đ ở nền, nhưng giá dùng để xuất kho vẫn là giá định mức đang cấu hình, không đổi |
AC-VAL-02: Đóng băng giá khi tồn về 0
| Cho trước | Khi | Thì |
|---|---|---|
| Mặt hàng bán hết, tồn về 0, giá vốn bình quân trước đó là 22.000đ | Nhập thêm 8 đơn vị với giá 24.000đ/đơn vị | Giá vốn bình quân mới = 24.000đ/đơn vị - bằng đúng giá lô vừa nhập, không cộng dồn với giá trị tồn cũ (vì tồn cũ là 0) |
AC-VAL-03: Hóa đơn nhà cung cấp về sau lệch giá
| Cho trước | Khi | Thì |
|---|---|---|
| Đơn mua hàng đã nhận hàng với giá 20.000đ/đơn vị, giá vốn đã cập nhật theo giá này | Hóa đơn nhà cung cấp về sau ghi giá thật là 21.000đ/đơn vị | Đơn mua hàng hiển thị cảnh báo lệch giá; các lần xuất kho đã xảy ra trước đó giữ nguyên giá vốn cũ, không tính lại |
| Cùng tình huống | Merchant xác nhận áp giá mới | Giá vốn cập nhật theo giá 21.000đ cho các lần nhập/xuất tiếp theo, không hồi tố về các lần đã qua |
AC-VAL-04: Gom chênh lệch giá định mức theo tháng
| Cho trước | Khi | Thì |
|---|---|---|
| Mặt hàng đang dùng giá định mức 20.000đ/đơn vị; trong tháng có 3 lần nhập với giá thật lần lượt 22.000đ, 21.000đ, 23.000đ cho tổng 150 đơn vị | Merchant mở màn chênh lệch giá vốn định mức, chọn khoảng thời gian là tháng đó | Màn hiển thị tổng số tiền đã mua đắt hơn định mức, cộng dồn từ chênh lệch của cả 3 lần nhập trong tháng |
LSE - Lô, hạn dùng & chiến lược xuất Chưa dựng
Đặc tả: PRD-LSE-001 · 9 yêu cầu · 4 kịch bản nghiệm thu
Không phải hàng nào cũng giống hệt nhau dù cùng một mã hàng. Sữa nhập hôm nay và sữa nhập tuần trước có hạn dùng khác nhau, và quán cần bán sữa cũ trước để khỏi đổ bỏ. Lô là cách hệ thống gom một đợt nhập thành một nhóm có chung hạn dùng, còn serial là mã riêng cho từng chiếc máy hay từng sản phẩm giá trị cao cần theo dõi vòng đời của chính nó, ví dụ điện thoại theo IMEI. v1 chỉ bật lô; serial được thiết kế sẵn nhưng chưa mở, để không phải đập đi làm lại khi tới lượt triển khai.
| Mã | Ưu tiên | Yêu cầu | Trạng thái |
|---|---|---|---|
URD-LSE-001 | Bắt buộc | Mỗi mặt hàng có thể bật theo dõi lô, bật theo dõi serial, hoặc không bật gì - hai cờ này độc lập với nhau, mặc định cả hai đều tắt. | Chưa dựng |
URD-LSE-002 | Bắt buộc | Khi bật theo dõi lô, mỗi lần nhập hàng ghi nhận vào một lô gồm nhiều đơn vị, mang một mã lô và một ngày hết hạn (với hàng có hạn dùng); nhập lại đúng mã lô đó vào cùng địa điểm thì cộng dồn vào lô đang có thay vì tạo lô thứ hai. | Chưa dựng |
URD-LSE-003 | Nên có | Khi bật theo dõi serial, mỗi đơn vị hàng mang một mã định danh riêng và đi qua các trạng thái riêng của chính nó: đang trong kho, đã bán, và các trạng thái phát sinh sau (đổi trả, thất lạc...). | Chưa dựng |
URD-LSE-004 | Bắt buộc | Mỗi mặt hàng có lô chọn một chiến lược xuất hàng: hết hạn sớm nhất trước, hoặc nhập kho trước. | Chưa dựng |
URD-LSE-005 | Bắt buộc | Chiến lược xuất hàng là cấu hình riêng, tách biệt hoàn toàn khỏi phương pháp định giá (VAL) - đổi chiến lược xuất không ảnh hưởng cách tính giá vốn, và ngược lại. | Chưa dựng |
URD-LSE-006 | Bắt buộc | Khi hai lô có cùng ngày hết hạn, hệ thống chọn theo thứ tự cố định: hạn dùng sớm nhất trước, nếu vẫn bằng nhau thì lô nhập kho trước, nếu vẫn bằng nhau nữa thì theo mã lô. | Chưa dựng |
URD-LSE-007 | Bắt buộc | Khi bán hoặc xuất kho một mặt hàng có nhiều lô, hệ thống tự động chọn đúng lô theo chiến lược đã cấu hình - người bán không phải tự chọn lô bằng tay. | Chưa dựng |
URD-LSE-008 | Nên có | Màn hình tồn kho hiển thị breakdown theo từng lô của một mặt hàng: số lượng còn lại, ngày nhập, ngày hết hạn. | Chưa dựng |
URD-LSE-009 | Có thể | Hệ thống cảnh báo các lô sắp hết hạn trong vòng một số ngày cấu hình theo từng merchant; mặc định 7 ngày, merchant tự đổi số ngày này theo nhu cầu ngành hàng của mình. | Chưa dựng |
AC-LSE-01: Chọn lô theo hết hạn sớm nhất
| Cho trước | Khi | Thì |
|---|---|---|
| Mặt hàng có Lô A (5 đơn vị, hạn 2026-08-01, nhập 2026-07-01) và Lô B (3 đơn vị, hạn 2026-07-20, nhập 2026-07-05) | Bán 4 đơn vị | Hệ thống trừ hết 3 đơn vị Lô B trước (hạn sớm hơn), rồi trừ tiếp 1 đơn vị từ Lô A cho đủ số lượng |
AC-LSE-02: Tie-break khi hai lô cùng hạn dùng
| Cho trước | Khi | Thì |
|---|---|---|
| Mặt hàng có Lô C (hạn 2026-08-01, nhập 2026-07-01) và Lô D (hạn 2026-08-01, nhập 2026-07-03) - cùng hạn dùng | Bán hàng cần chọn một lô | Lô C được chọn trước vì nhập kho sớm hơn, dù cả hai cùng hạn dùng |
AC-LSE-03: Vòng đời serial (forward-spec)
| Cho trước | Khi | Thì |
|---|---|---|
| Mặt hàng bật theo dõi serial, ví dụ điện thoại theo IMEI | Nhập kho 1 đơn vị | Đơn vị đó mang một mã serial riêng, trạng thái "Đang trong kho" |
| Cùng đơn vị đó | Bán ra cho khách | Trạng thái chuyển sang "Đã bán", gắn với đơn hàng tương ứng |
AC-LSE-04: Cảnh báo hết hạn theo số ngày mặc định, merchant đổi được
| Cho trước | Khi | Thì |
|---|---|---|
| Merchant chưa từng vào cấu hình cảnh báo hết hạn | Lô sữa còn 6 ngày nữa hết hạn | Hệ thống cảnh báo sắp hết hạn, dùng đúng số ngày mặc định là 7 |
| Merchant vào cấu hình, đổi số ngày cảnh báo thành 3 | Lô sữa còn 6 ngày nữa hết hạn | Hệ thống không cảnh báo, vì 6 ngày còn lại lớn hơn ngưỡng 3 ngày merchant vừa đổi |
LDG - Sổ biến động Chưa dựng
Đặc tả: PRD-LDG-001 · 11 yêu cầu · 4 kịch bản nghiệm thu
Mỗi lần tồn kho tăng hay giảm, phải có một tờ giấy đứng sau - và sổ biến động là nơi lưu lại từng tờ giấy đó thành một dòng, mãi mãi không xóa. Đây là chỗ merchant tra lại được: tại sao tồn hôm nay là con số này, khi nào đổi, vì lý do gì, và chứng từ nào đứng sau. Bảng tồn hiển thị nhanh trên màn hình chỉ là bản tổng hợp - khi có tranh cãi hay lệch số, sổ biến động luôn là câu trả lời đúng, và bảng tồn dựng lại được từ sổ chứ không phải ngược lại.
| Mã | Ưu tiên | Yêu cầu | Trạng thái |
|---|---|---|---|
URD-LDG-001 | Bắt buộc | Mọi thay đổi tồn kho do nghiệp vụ gây ra - nhập, xuất, chuyển, điều chỉnh, hủy - tạo một dòng mới trong sổ biến động; nghiệp vụ không xóa hay sửa dòng cũ, sửa sai bằng một dòng điều chỉnh mới. | Một phần |
URD-LDG-002 | Bắt buộc | Mỗi dòng sổ ghi đủ ba con số: tồn trước khi đổi, số lượng thay đổi, và tồn sau khi đổi. | Một phần |
URD-LDG-003 | Bắt buộc | Mỗi dòng sổ mang một lý do chọn từ danh mục cố định, ví dụ: nhập mua hàng, bán hàng, giữ tồn giỏ hàng, tiêu hao nguyên liệu, kiểm kê điều chỉnh, hủy/tiêu hủy. | Một phần |
URD-LDG-004 | Bắt buộc | Mỗi dòng sổ tham chiếu về đúng một chứng từ nguồn - đơn mua hàng, phiếu kho, hoặc đơn bán hàng - qua loại chứng từ và mã chứng từ. | Một phần |
URD-LDG-005 | Bắt buộc | Mỗi dòng sổ ghi lại đơn vị tính, hệ số quy đổi và giá vốn tại đúng thời điểm phát sinh, để đọc lại lịch sử vẫn đúng dù đơn vị hay giá sau này có đổi. | Một phần |
URD-LDG-006 | Bắt buộc | Cùng một chứng từ, dù được xử lý lại nhiều lần (ví dụ do hệ thống gửi lại thông báo), chỉ ghi đúng một dòng sổ cho mỗi dòng tồn liên quan - không trừ hay cộng kho hai lần. | Chưa dựng |
URD-LDG-007 | Bắt buộc | Sổ biến động là nguồn sự thật của tồn kho; bảng tồn tổng hợp chỉ là bản tổng hợp để đọc nhanh - khi hai bên lệch nhau, sổ luôn đúng. | Một phần |
URD-LDG-008 | Nên có | Người dùng xem lại toàn bộ lịch sử biến động của một mặt hàng tại một địa điểm, lọc theo lý do, chứng từ, khoảng thời gian. | Chưa dựng |
URD-LDG-009 | Bắt buộc | Đội vận hành hệ thống sửa hoặc xóa trực tiếp một dòng sổ biến động khi cần xử lý sự cố dữ liệu - đây là công cụ vận hành nội bộ dùng ngoài giao diện merchant, không phải một tính năng merchant tự thao tác được. | Đã dựng |
URD-LDG-010 | Bắt buộc | Mỗi dòng sổ giữ lại bối cảnh nơi chốn và hàng hóa của lần biến động: địa điểm nguồn và địa điểm đích, mã lô, hạn dùng, mã serial, người thao tác, thời điểm phát sinh và một ô ghi chú tự do. | Một phần |
URD-LDG-011 | Bắt buộc | Sổ biến động là dữ liệu riêng của từng merchant: người dùng chỉ đọc được dòng sổ thuộc merchant của mình, và mọi bộ lọc, mọi báo cáo đọc từ sổ đều nằm trong phạm vi đó. | Một phần |
AC-LDG-01: Chống ghi trùng dòng sổ
| Cho trước | Khi | Thì |
|---|---|---|
| Đơn hàng thanh toán xong, hệ thống đã ghi một dòng sổ trừ kho cho dòng hàng đó | Thông báo thanh toán thành công được gửi lại lần hai (do hệ thống nhắn tin gửi lại) | Không có dòng sổ thứ hai nào được ghi thêm cho cùng chứng từ và cùng dòng tồn đó |
AC-LDG-02: Trước/đổi/sau khi nhập hàng
| Cho trước | Khi | Thì |
|---|---|---|
| Tồn đang là 10 đơn vị | Nhập thêm 5 đơn vị theo phiếu nhập kho | Dòng sổ ghi trước = 10, đổi = +5, sau = 15, lý do = Nhập mua hàng, chứng từ = mã phiếu nhập |
AC-LDG-03: Sửa sai bằng dòng điều chỉnh mới
| Cho trước | Khi | Thì |
|---|---|---|
| Một dòng sổ ghi nhầm số lượng | Người vận hành phát hiện sai và cần sửa lại cho đúng | Một dòng sổ mới được ghi để điều chỉnh về đúng số; dòng sổ ghi sai trước đó vẫn còn nguyên trong lịch sử, không bị xóa hay sửa |
AC-LDG-04: Cửa thoát vận hành sửa/xóa trực tiếp
| Cho trước | Khi | Thì |
|---|---|---|
| Một dòng sổ biến động bị lỗi dữ liệu nặng do sự cố hệ thống, không thể sửa bằng dòng điều chỉnh thông thường | Đội vận hành hệ thống can thiệp trực tiếp để sửa hoặc xóa dòng đó | Dòng sổ được sửa/xóa trực tiếp qua công cụ nội bộ - merchant không thấy và không tự làm được thao tác này trên giao diện của mình |
TKT - Phiếu kho Chưa dựng
Đặc tả: PRD-TKT-001 · 18 yêu cầu · 5 kịch bản nghiệm thu
Trước khi tồn kho thay đổi, phải có một tờ phiếu được lập, được duyệt, rồi được thực hiện - không có chuyện tồn tự nhảy số mà không ai ký. Phiếu kho là khung chung cho mọi loại việc động tới tồn ngoài đường bán hàng: xin mua thêm hàng, nhập hàng về, chuyển hàng sang kho khác, xuất dùng nội bộ, sửa số cho khớp thực tế, kiểm kê, trả hàng cho nhà cung cấp, nhận hàng khách trả, và hủy hàng hỏng.
Chín loại phiếu đó dùng chung đúng một vòng đời, và mỗi loại chỉ đi phần vòng đời mà nó cần. Chữ hiển thị trên màn hình thì đổi theo loại phiếu - một phiếu chuyển kho gọi bước duyệt xong là "Chờ chuyển" - nhưng bên dưới vẫn là một bộ trạng thái duy nhất, không có bộ thứ hai.
Một phiếu mang ý định có thể được thực hiện thành nhiều đợt. Phiếu cha ghi ý định, các phiếu con ghi từng lần hàng thật sự rời kho hoặc vào kho, và trạng thái phiếu cha suy ra từ các phiếu con. Toàn bộ khung này chỉ ghi thêm: một phiếu con đã hoàn tất không bao giờ bị sửa hay bị xóa, sửa sai là lập một phiếu bù mới.
| Mã | Ưu tiên | Yêu cầu | Trạng thái |
|---|---|---|---|
URD-TKT-001 | Bắt buộc | Phiếu kho là chứng từ cho một lần hàng vào, hàng ra hoặc sửa số tồn; người lập chọn đúng một trong chín loại lúc tạo phiếu. • Yêu cầu mua hàng, nhập kho, chuyển kho, xuất dùng nội bộ, điều chỉnh. • Kiểm kê, trả nhà cung cấp, trả từ khách, hủy/tiêu hủy. • Loại phiếu chốt lúc tạo và không đổi được về sau. | Một phần |
URD-TKT-002 | Bắt buộc | Chín loại phiếu dùng chung đúng một vòng đời, không loại nào có vòng đời riêng. • Các bước: Nháp, Đã gửi, Đã duyệt, Đang thực hiện, Hoàn tất. • Hủy được từ bất kỳ bước nào chưa hoàn tất. | Chưa dựng |
URD-TKT-003 | Bắt buộc | Mỗi loại phiếu chỉ đi phần vòng đời mà nó cần, và không loại nào phát sinh thêm bước mới. • Điều chỉnh: Nháp → Hoàn tất, không qua bước duyệt. • Kiểm kê: Nháp → Đang thực hiện → Hoàn tất. • Chuyển kho: đi đủ cả năm bước. | Chưa dựng |
URD-TKT-004 | Bắt buộc | Nhãn trạng thái hiển thị theo từng loại phiếu, dù bên dưới vẫn là một bộ trạng thái duy nhất. • Phiếu chuyển kho đọc Đã duyệt là "Chờ chuyển", Đang thực hiện là "Đang chuyển", Hoàn tất là "Đã nhận". • Phiếu kiểm kê đọc Đang thực hiện là "Đang đếm", Hoàn tất là "Đã áp". • Đổi chữ chứ không đổi mô hình: không có trạng thái nào nằm ngoài năm bước trên. | Chưa dựng |
URD-TKT-005 | Bắt buộc | Tồn kho chỉ thay đổi khi phiếu sang Hoàn tất; soạn phiếu, gửi phiếu, duyệt phiếu và bắt đầu thực hiện đều không cộng trừ một đơn vị nào. | Chưa dựng |
URD-TKT-006 | Bắt buộc | Phiếu cha mang ý định, và trạng thái của nó được suy ra từ các phiếu con. • Phiếu cha ghi hai đầu của việc chuyển hàng (merchant nào, kho nào), danh sách hàng và số lượng kế hoạch. • Một phiếu cha nhận nhiều phiếu xuất và nhiều phiếu nhập, không bị bó vào đúng một cặp. • Không ai đặt tay trạng thái phiếu cha; màn chi tiết không có nút chuyển trạng thái cho phiếu cha. | Chưa dựng |
URD-TKT-007 | Bắt buộc | Phiếu con là chứng từ thực thi và thuộc về merchant của chính đầu mà nó đứng. • Phiếu xuất thuộc merchant nguồn; phiếu nhập thuộc merchant đích. • Phiếu con đi vòng đời gọn Nháp → Hoàn tất, vì việc duyệt đã xong ở phiếu cha. • Việc ghi tồn và ghi sổ xảy ra ở phiếu con, không ở phiếu cha. | Chưa dựng |
URD-TKT-008 | Bắt buộc | Khung phiếu kho chỉ ghi thêm, không ghi đè. • Phiếu con đã hoàn tất không sửa và không xóa, kể cả khi phiếu cha bị đóng hoặc bị hủy về sau. • Sửa sai là lập một phiếu bù mới, ví dụ một phiếu điều chỉnh, chứ không phải sửa lại phiếu cũ. | Chưa dựng |
URD-TKT-009 | Bắt buộc | Mỗi phiếu mang một bộ thông tin đầu phiếu, khai lúc tạo và sửa được khi phiếu còn ở Nháp. • Mã phiếu do hệ thống tự sinh, không trùng, dùng để tra cứu và nhắc tới phiếu ở nơi khác. • Hai đầu của phiếu: merchant và kho ở đầu xuất, merchant và kho ở đầu nhận - loại phiếu nào cần đầu nào thì hiện ô đó. • Đối tác là nhà cung cấp hoặc khách hàng, chỉ hiện với các loại phiếu có đối tác. • Lý do chọn từ danh sách có sẵn, bắt buộc với phiếu điều chỉnh và phiếu hủy/tiêu hủy. • Ghi chú tự do, tùy chọn. | Một phần |
URD-TKT-010 | Bắt buộc | Mỗi dòng hàng trên phiếu khai mặt hàng, đơn vị, số lượng, và mang trạng thái riêng của dòng đó. • Số lượng kế hoạch khai lúc lập phiếu; số lượng thực tế ghi lúc thực hiện. • Lô và hạn dùng hiện với mặt hàng có quản lô; đơn giá hiện với phiếu nhập kho và phiếu trả nhà cung cấp. • Trạng thái dòng: chờ xử lý, đang xử lý, hoàn tất, hủy - nên một phiếu có dòng đã xong và dòng chưa xong cùng lúc. | Một phần |
URD-TKT-011 | Bắt buộc | Khi một phiếu sang Hoàn tất, mỗi dòng hàng của nó ghi đúng một dòng sổ biến động, không ghi trùng dù phiếu bị xử lý lại. | Chưa dựng |
URD-TKT-012 | Bắt buộc | Số thực tế khác số kế hoạch không chặn phiếu hoàn tất. • Xuất ít hơn kế hoạch, xuất nhiều hơn kế hoạch, nhận ít hơn số đã xuất, nhận nhiều hơn số đã xuất - cả bốn đều được phép. • Phiếu hoàn tất theo đúng số thực tế, tồn cộng trừ theo số thực tế, không ép khớp về số kế hoạch. | Chưa dựng |
URD-TKT-013 | Bắt buộc | Người lập đóng phiếu khi hàng đã đi mà không về đủ, và việc đóng phiếu sinh ra một phiếu điều chỉnh ghi phần thất thoát. • Đóng phiếu là chốt sổ cho phần hàng đã xuất mà không bao giờ tới nơi. • Phiếu điều chỉnh mang đúng số thất thoát và một lý do, nên phần hàng mất luôn có chứng từ giải thích. • Phiếu đã đóng không mở lại được. | Chưa dựng |
URD-TKT-014 | Bắt buộc | Hủy phiếu và đóng phiếu là hai việc khác nhau, không được lẫn. • Hủy phiếu chỉ dừng phần kế hoạch chưa bao giờ được thực hiện: nhả phần đang giữ, không có hàng nào mất, không sinh phiếu điều chỉnh. • Đóng phiếu xử lý phần hàng đã rời kho mà không tới nơi: phần đó là thất thoát và luôn sinh một phiếu điều chỉnh. • Hủy một phiếu cha khi còn hàng đang trên đường thì phần hàng đó vẫn phải được chốt bằng luật đóng phiếu, không được biến mất im lặng. | Chưa dựng |
URD-TKT-015 | Bắt buộc | Merchant có một sổ phiếu kho liệt kê phiếu của mình, lọc được theo loại phiếu, trạng thái, kho và khoảng ngày, và tìm được theo mã phiếu. | Chưa dựng |
URD-TKT-016 | Bắt buộc | Mỗi bước chuyển trạng thái lưu lại thời điểm và người thao tác, và dấu vết này hiện ngay trên màn chi tiết phiếu. | Chưa dựng |
URD-TKT-017 | Bắt buộc | Phiếu kho là dữ liệu riêng của từng merchant. • Người dùng chỉ thấy và thao tác được trên phiếu thuộc merchant mình đang làm việc. • Một việc chuyển hàng chạm hai merchant thì mỗi bên chỉ thấy phiếu con của chính mình, không thấy chứng từ của bên kia. | Một phần |
URD-TKT-018 | Bắt buộc | Người lập phiếu thấy một dòng duy nhất trong danh sách, không phải học thêm khái niệm nào. • Dòng đó nói đủ việc: chuyển bao nhiêu, từ đâu tới đâu, đang ở bước nào. • Các phiếu con nằm bên trong màn chi tiết như một dòng thời gian của việc đã làm. | Chưa dựng |
AC-TKT-01: Một vòng đời, mỗi loại phiếu đi một phần của nó
| Cho trước | Khi | Thì |
|---|---|---|
| Người dùng lập một phiếu điều chỉnh | Mở phiếu ra xem các nút thao tác | Chỉ có nút Hoàn tất, không có nút Gửi duyệt hay Duyệt - phiếu điều chỉnh đi thẳng Nháp → Hoàn tất |
| Người dùng lập một phiếu kiểm kê | Mở phiếu ra xem các nút thao tác | Có nút Bắt đầu đếm rồi tới nút Áp kết quả; không có bước duyệt riêng |
| Người dùng lập một phiếu chuyển kho | Mở phiếu ra xem các nút thao tác | Đủ cả năm bước: Gửi duyệt, Duyệt, Bắt đầu thực hiện, Hoàn tất, và Hủy |
AC-TKT-02: Cùng một trạng thái, khác chữ hiển thị theo loại phiếu
| Cho trước | Khi | Thì |
|---|---|---|
| Một phiếu chuyển kho vừa được duyệt | Mở danh sách phiếu | Phiếu hiện chữ "Chờ chuyển", không hiện chữ "Đã duyệt" |
| Cùng phiếu đó, hàng đã rời kho nguồn | Mở danh sách phiếu | Phiếu hiện chữ "Đang chuyển" - vẫn là bước Đang thực hiện của vòng đời chung, chỉ khác chữ |
AC-TKT-03: Tồn chỉ đổi khi phiếu hoàn tất
| Cho trước | Khi | Thì |
|---|---|---|
| Phiếu nhập kho đang ở Đã duyệt | Mở màn Tồn kho của kho nhận | Con số tồn chưa đổi - số lượng chỉ được cộng vào tồn khi phiếu sang Hoàn tất |
AC-TKT-04: Đóng phiếu sinh phiếu điều chỉnh, hủy phiếu thì không
| Cho trước | Khi | Thì |
|---|---|---|
| Phiếu chuyển 100 lon đã xuất 60, kho đích mới nhận 38 và không còn hàng để nhận nữa | Người lập bấm Đóng phiếu | Hệ thống sinh một phiếu điều chỉnh ghi 22 lon thất thoát kèm lý do; số đang về của kho đích về 0 |
| Phiếu chuyển 100 lon vừa được duyệt, chưa xuất lần nào | Người lập bấm Hủy phiếu | Phần 100 lon đang giữ tại kho nguồn được nhả hết; không có phiếu điều chỉnh nào được sinh ra vì không có hàng nào mất |
AC-TKT-05: Phiếu con đã hoàn tất không sửa, không xóa
| Cho trước | Khi | Thì |
|---|---|---|
| Một phiếu xuất con đã hoàn tất với 60 lon, ghi sai còn 50 | Người dùng mở phiếu xuất đó ra | Mọi ô nhập bị khóa, không có nút Sửa và không có nút Xóa |
| Cùng tình huống | Người dùng muốn đưa số về đúng | Lập một phiếu điều chỉnh mới cho 10 lon chênh lệch; phiếu xuất cũ giữ nguyên như đã ghi |
TRF - Chuyển kho Chưa dựng
Đặc tả: PRD-TRF-001 · 19 yêu cầu · 3 kịch bản nghiệm thu
Chuyển kho là chuyện dịch chuyển hàng thật giữa hai nơi, nhưng phần khó không nằm ở việc di chuyển - nó nằm ở khoảng thời gian hàng đang trên đường, khi cả hai đầu đều phải nhìn thấy đúng con số của mình, và ở chuyện chứng từ này thuộc về ai.
Một phiếu chuyển chọn đủ bốn thứ: merchant nào - kho nào xuất, và merchant nào - kho nào nhận. Hai đầu có thể là hai merchant khác nhau trong cùng một organizer, hoặc hai kho của cùng một merchant - cùng một mô hình, không có ngoại lệ.
Phiếu chuyển (phiếu cha) mang ý định. Hàng được xuất bằng một hoặc nhiều phiếu xuất thuộc merchant nguồn, và được nhận bằng một hoặc nhiều phiếu nhập thuộc merchant đích - chuyển làm mấy chuyến thì có bấy nhiêu phiếu con, mỗi bên tự ghi chứng từ của mình. Bốn con số tồn kho rơi ra từ chính mô hình đó: phần đang giữ ở kho nguồn là phần đã duyệt nhưng chưa xuất, và phần đang về ở kho đích là tổng đã xuất trừ tổng đã nhận.
| Mã | Ưu tiên | Yêu cầu | Trạng thái |
|---|---|---|---|
URD-TRF-001 | Bắt buộc | Một phiếu chuyển khai đủ hai đầu, và đầu nhận là bắt buộc. • Đầu xuất: merchant nguồn và kho nguồn. • Đầu nhận: merchant đích và kho đích - một phiếu chuyển không bao giờ được để trống đầu nhận. • Danh sách dòng hàng kèm số lượng kế hoạch cho từng mặt hàng. | Chưa dựng |
URD-TRF-002 | Bắt buộc | Chuyển hàng giữa hai chi nhánh (Merchant) là nghiệp vụ hợp lệ, và chuyển trong cùng một chi nhánh chạy giống hệt mô hình đó. • Hai đầu thuộc hai merchant khác nhau: mỗi bên sở hữu phiếu con của mình. • Hai đầu thuộc cùng một merchant: hai loại phiếu con cùng thuộc merchant đó. • Một mô hình duy nhất, không có nhánh xử lý riêng cho ca nội bộ. | Chưa dựng |
URD-TRF-003 | Bắt buộc | Phiếu chuyển đi đủ năm bước của vòng đời phiếu kho, hiển thị bằng chữ của nghiệp vụ chuyển kho. • Nháp và Đã gửi giữ nguyên chữ. • Đã duyệt hiện là "Chờ chuyển"; Đang thực hiện hiện là "Đang chuyển"; Hoàn tất hiện là "Đã nhận". • Không có trạng thái nào nằm ngoài vòng đời chung. | Chưa dựng |
URD-TRF-004 | Bắt buộc | Trạng thái phiếu chuyển được suy ra từ các phiếu con của nó; không ai đặt tay, và màn chi tiết không có ô chọn trạng thái cho phiếu chuyển. | Chưa dựng |
URD-TRF-005 | Bắt buộc | Hàng được xuất nhiều lần bằng nhiều phiếu xuất, mỗi phiếu xuất là một chuyến. • Mỗi phiếu xuất thuộc merchant nguồn và ghi đúng số lượng của chuyến đó. • Phiếu xuất đi vòng đời gọn Nháp → Hoàn tất; hoàn tất thì thực có của kho nguồn giảm ngay bằng số đã xuất. | Chưa dựng |
URD-TRF-006 | Bắt buộc | Hàng được nhận nhiều lần bằng nhiều phiếu nhập, mỗi phiếu nhập là một lần nhận. • Mỗi phiếu nhập thuộc merchant đích và ghi đúng số lượng đếm được lần đó. • Phiếu nhập đi vòng đời gọn Nháp → Hoàn tất; hoàn tất thì thực có của kho đích tăng bằng số đã nhận. | Chưa dựng |
URD-TRF-007 | Bắt buộc | Số đang giữ ở kho nguồn bằng phần đã duyệt trừ phần đã xuất. • Duyệt 100 thì kho nguồn giữ 100: thực có chưa đổi, khả dụng giảm 100. • Xuất 60 thì thực có của kho nguồn giảm 60 và phần đang giữ còn 40 - khả dụng không đổi thêm ở bước này. | Chưa dựng |
URD-TRF-008 | Bắt buộc | Số đang về ở kho đích bằng tổng đã xuất trừ tổng đã nhận. • Số này hiện trên màn tồn kho của kho đích nhưng không cộng vào khả dụng, nên hàng chưa tới nơi thì không khả dụng. • Xuất 60 rồi xuất tiếp 40, nhận 60 rồi nhận 38: đang về đi từ 60 lên 100, xuống 40, rồi còn 2. | Chưa dựng |
URD-TRF-009 | Bắt buộc | Xuất vượt số lượng kế hoạch được phép: phiếu xuất ghi đúng số hàng thật sự rời kho, hệ thống không chặn vì con số đó lớn hơn số đã khai trên phiếu chuyển. | Chưa dựng |
URD-TRF-010 | Bắt buộc | Nhận vượt số lượng đã xuất được phép: phiếu nhập ghi đúng số hàng thật sự đếm được tại kho đích, hệ thống không chặn vì con số đó lớn hơn tổng đã xuất. | Chưa dựng |
URD-TRF-011 | Bắt buộc | Không nhận đủ thì người lập đóng phiếu, và việc đóng phiếu sinh một phiếu điều chỉnh ghi phần thất thoát. • Phần thất thoát bằng tổng đã xuất trừ tổng đã nhận tại thời điểm đóng. • Số đang về của kho đích về 0, và phần thất thoát nằm trên sổ của kho nguồn kèm lý do. • Hàng đã xuất mà không bao giờ tới nơi được xử lý bằng đúng luật này. | Chưa dựng |
URD-TRF-012 | Bắt buộc | Hủy phiếu chuyển được phép, và hủy chỉ dừng phần kế hoạch chưa bao giờ được xuất. • Phần đang giữ ở kho nguồn được nhả hết, khả dụng tăng trở lại; không có hàng nào mất nên không sinh phiếu điều chỉnh. • Nếu lúc hủy vẫn còn hàng đang về ở kho đích thì phần đó được chốt theo luật đóng phiếu, tức là ghi thất thoát bằng một phiếu điều chỉnh. • Phiếu xuất và phiếu nhập đã hoàn tất giữ nguyên, không bị sửa và không bị xóa. | Chưa dựng |
URD-TRF-013 | Bắt buộc | Sửa sai trên một phiếu chuyển luôn là lập thêm một phiếu mới - một chuyến xuất bù, một lần nhận bù, hoặc một phiếu điều chỉnh - chứ không bao giờ là sửa lại một phiếu con đã hoàn tất. | Chưa dựng |
URD-TRF-014 | Bắt buộc | Kho nguồn chịu rủi ro mất mát hoặc hư hỏng trên đường đi cho tới khi kho đích xác nhận đã nhận; trước thời điểm đó hàng chưa được tính là tài sản trên kệ của kho đích. | Chưa dựng |
URD-TRF-015 | Bắt buộc | Số đang về chỉ dùng cho hàng đang chuyển giữa hai kho trong hệ thống; hàng đã đặt nhà cung cấp nhưng chưa về là một khái niệm khác và không cộng vào con số này. | Chưa dựng |
URD-TRF-016 | Bắt buộc | Chuyển kho không làm thay đổi giá vốn của mặt hàng - chỉ số lượng dịch chuyển giữa hai kho, giá vốn vẫn là một con số theo merchant. | Chưa dựng |
URD-TRF-017 | Bắt buộc | Mỗi người chỉ thấy đúng việc của mình. • Người lập phiếu chuyển thấy một dòng duy nhất, ví dụ "Chuyển 20 lon, Kho A sang Kho B, đang chuyển"; các phiếu con là chi tiết bên trong dòng đó. • Thủ kho của merchant đích thấy đúng một việc của mình, ví dụ "nhận 20 lon từ Merchant A", và không thấy chứng từ của merchant nguồn. | Chưa dựng |
URD-TRF-018 | Bắt buộc | Người phụ trách tra cứu phiếu chuyển mà không phải mở từng phiếu. • Danh sách lọc được theo trạng thái, merchant và kho ở hai đầu, và khoảng ngày lập. • Màn chi tiết hiện đủ trên từng dòng hàng: số kế hoạch, tổng đã xuất, tổng đã nhận, phần đang giữ và phần đang về. | Chưa dựng |
URD-TRF-019 | Bắt buộc | Ba nhóm người đều duyệt được và đóng được một phiếu chuyển chạm hai merchant. • Người thuộc merchant gửi. • Người thuộc merchant nhận. • Cấp quản lý trở lên của merchant trụ sở chính. Để mở như vậy là có chủ đích: chuyển kho hay bị kẹt vì chờ đúng một người, và kẹt thì hàng nằm im. | Chưa dựng |
AC-TRF-01: Bốn con số qua một phiếu chuyển 100 lon, xuất hai chuyến và nhận hai lần
Phiếu chuyển 100 lon từ Merchant A - Kho mặc định sang Merchant B - Kho mặc định. Trước khi lập phiếu, kho nguồn có 300 thực có (khả dụng 300), kho đích có 50 thực có (khả dụng 50). Hai chuyến xuất 60 rồi 40; hai lần nhận 60 rồi 38 (mất 2 trên đường).
| Bước | Nguồn - Thực có | Nguồn - Đang giữ | Nguồn - Khả dụng | Đích - Đang về | Đích - Thực có |
|---|---|---|---|---|---|
| Trước khi lập phiếu | 300 | 0 | 300 | 0 | 50 |
| Duyệt phiếu (Chờ chuyển) | 300 | 100 | 200 | 0 | 50 |
| Xuất chuyến 1: 60 lon (Đang chuyển) | 240 | 40 | 200 | 60 | 50 |
| Nhận lần 1: 60 lon | 240 | 40 | 200 | 0 | 110 |
| Xuất chuyến 2: 40 lon | 200 | 0 | 200 | 40 | 110 |
| Nhận lần 2: 38 lon | 200 | 0 | 200 | 2 | 148 |
| Người lập đóng phiếu cho 2 lon thất thoát (Đã nhận) | 200 | 0 | 200 | 0 | 148 |
AC-TRF-02: Bảng luật hủy phiếu và đóng phiếu
Phiếu chuyển kế hoạch 100 lon. "Đang giữ" là phần đã duyệt nhưng chưa xuất; "Đang về" là tổng đã xuất trừ tổng đã nhận. Hủy phiếu dừng phần chưa bao giờ xuất. Đóng phiếu chốt phần đã xuất mà không tới nơi.
| Ca | Đang giữ ở kho nguồn | Thực có kho nguồn | Đang về ở kho đích | Thực có kho đích | Sinh phiếu điều chỉnh thất thoát |
|---|---|---|---|---|---|
| Hủy khi phiếu còn Nháp | Chưa giữ gì, không đổi | Không đổi | 0 | Không đổi | Không |
| Hủy khi phiếu Đã gửi, chưa ai duyệt | Chưa giữ gì, không đổi | Không đổi | 0 | Không đổi | Không |
| Hủy khi phiếu Đã duyệt (Chờ chuyển), chưa xuất chuyến nào | Nhả hết 100, về 0 | Không đổi | 0 | Không đổi | Không - không có hàng nào rời kho |
| Hủy khi đã xuất 60 và kho đích đã nhận đủ 60 | Nhả 40 còn lại, về 0 | Đã giảm 60 lúc xuất, không giảm thêm | 0 | Đã tăng 60 lúc nhận, không đổi thêm | Không - hàng đã xuất đều đã tới nơi |
| Hủy khi đã xuất 60 và kho đích mới nhận 38 | Nhả 40 còn lại, về 0 | Đã giảm 60, không giảm thêm | 22 được chốt, về 0 | Đã tăng 38, không đổi thêm | Có - phiếu điều chỉnh 22 lon thất thoát |
| Hủy khi đã xuất đủ 100 và kho đích mới nhận 90 | Đã về 0 từ lúc xuất hết | Đã giảm 100 | 10 được chốt, về 0 | Đã tăng 90 | Có - phiếu điều chỉnh 10 lon thất thoát |
| Đóng phiếu khi đã xuất 100 và chỉ nhận được 98, không chờ nữa | 0 | Đã giảm 100 | 2 được chốt, về 0 | Đã tăng 98 | Có - phiếu điều chỉnh 2 lon thất thoát |
| Phiếu đã Hoàn tất (nhận đủ 100) | 0 | Đã giảm 100 | 0 | Đã tăng 100 | Không - và không còn nút hủy; sửa sai thì lập phiếu mới |
AC-TRF-03: Mỗi bên chỉ thấy việc của mình
| Cho trước | Khi | Thì |
|---|---|---|
Quản lý của Merchant A lập phiếu chuyển 20 lon sang Merchant B - Kho mặc định, hàng đã rời kho | Người lập mở danh sách phiếu chuyển | Thấy đúng một dòng: "Chuyển 20 lon, Merchant A - Kho mặc định sang Merchant B - Kho mặc định, đang chuyển"; các phiếu xuất và phiếu nhập nằm bên trong màn chi tiết |
| Cùng phiếu đó | Thủ kho của Merchant B mở danh sách việc của mình | Thấy đúng một việc: "nhận 20 lon từ Merchant A", và không thấy phiếu xuất của merchant nguồn |
CNT - Kiểm kê Chưa dựng
Đặc tả: PRD-CNT-001 · 14 yêu cầu · 3 kịch bản nghiệm thu
Kiểm kê là lúc người vận hành đối chiếu sổ sách với hàng thật trên kệ, nhưng merchant không thể đóng cửa để đếm - khách vẫn tới, đơn vẫn chạy. Hệ thống giải bài này bằng cách chụp một mốc số sổ ngay khi mở phiếu kiểm, rồi để việc bán hàng tiếp tục diễn ra song song trong lúc kiểm.
Khi người kiểm nộp số đếm, hệ thống không lấy số đó ghi đè lên tồn - nó tính chênh lệch giữa số đếm và mốc đã chụp, rồi áp đúng phần chênh lệch đó lên tồn tại thời điểm áp kết quả. Nhờ vậy hàng bán ra trong lúc đang kiểm không bị tính nhầm thành thất thoát, và thất thoát thật cũng không bị hàng bán ra che khuất.
Phiếu kiểm kê là một loại phiếu kho, dùng chung vòng đời của khung phiếu chứ không có vòng đời riêng: Nháp → Đang thực hiện → Hoàn tất, hiển thị bằng chữ của nghiệp vụ đếm.
| Mã | Ưu tiên | Yêu cầu | Trạng thái |
|---|---|---|---|
URD-CNT-001 | Bắt buộc | Tạo một phiếu kiểm kê cho một địa điểm kho; ngay khi tạo, hệ thống chụp lại số thực có hiện tại của từng mặt hàng trong phạm vi kiểm làm mốc so sánh. | Chưa dựng |
URD-CNT-002 | Bắt buộc | Merchant vẫn bán hàng, vẫn nhập hàng, vẫn chuyển kho bình thường trong lúc phiếu kiểm còn mở; kiểm kê không tự động chặn bán. | Chưa dựng |
URD-CNT-003 | Nên có | Mỗi phiếu kiểm kê có một cờ chặn bán riêng, mặc định tắt; merchant tự bật cờ này cho phiếu kiểm hàng giá trị cao. | Chưa dựng |
URD-CNT-004 | Bắt buộc | Người kiểm nhập số đếm thực tế cho từng mặt hàng trong phiếu, một dòng một mặt hàng. | Chưa dựng |
URD-CNT-005 | Bắt buộc | Áp kết quả kiểm kê tính theo chênh lệch giữa số đếm và mốc đã chụp lúc tạo phiếu, không ghi đè số đếm lên tồn. • Chênh lệch bằng số đếm trừ số mốc. • Chênh lệch được cộng trừ vào tồn tại đúng thời điểm áp kết quả, không phải tồn tại thời điểm chụp mốc. | Chưa dựng |
URD-CNT-006 | Bắt buộc | Chênh lệch được ghi vào sổ biến động thành một dòng điều chỉnh riêng, kèm lý do do người duyệt chọn. | Chưa dựng |
URD-CNT-007 | Nên có | Mặt hàng có phát sinh bán, nhập hoặc chuyển kho trong khoảng giữa lúc chụp mốc và lúc áp kết quả được đánh dấu riêng, để người duyệt chú ý khi xem lại phiếu trước khi áp. | Chưa dựng |
URD-CNT-008 | Nên có | Phiếu kiểm kê giới hạn phạm vi được theo nhóm phân loại ABC, phục vụ kiểm luân phiên thay vì kiểm toàn bộ kho một lần. | Chưa dựng |
URD-CNT-009 | Bắt buộc | Phiếu kiểm kê dùng chung vòng đời của khung phiếu kho, chỉ đi phần mình cần và đổi chữ hiển thị. • Các bước: Nháp → Đang thực hiện → Hoàn tất, không có bước duyệt riêng. • Đang thực hiện hiện là "Đang đếm", Hoàn tất hiện là "Đã áp". • Tồn chỉ thay đổi ở bước cuối; hai bước trước không đụng tới tồn. | Chưa dựng |
URD-CNT-010 | Có thể | Một mặt hàng xuất hiện được trong nhiều phiếu kiểm kê khác nhau theo thời gian; mỗi phiếu chụp mốc độc lập với các phiếu trước đó. | Chưa dựng |
URD-CNT-011 | Bắt buộc | Phạm vi của một phiếu kiểm kê chọn theo một trong ba kiểu: toàn bộ mặt hàng của địa điểm kho, theo nhóm phân loại ABC, hoặc chọn tay một danh sách mặt hàng. | Chưa dựng |
URD-CNT-012 | Nên có | Khi một mặt hàng đang nằm trong một phiếu kiểm chưa áp mà được đưa vào phiếu kiểm thứ hai, hệ thống cảnh báo trùng phạm vi ngay lúc tạo phiếu và để người dùng chọn tiếp tục hay bỏ mặt hàng đó ra; hệ thống cảnh báo chứ không cấm. | Chưa dựng |
URD-CNT-013 | Nên có | Danh sách phiếu kiểm kê lọc được theo địa điểm kho, trạng thái phiếu và khoảng ngày tạo. | Chưa dựng |
URD-CNT-014 | Bắt buộc | Phiếu kiểm kê đã áp là chốt, đi theo đúng luật chỉ-ghi-thêm của khung phiếu kho. • Không sửa lại số đếm, không sửa lý do, không xóa phiếu đã áp. • Đếm sai thì mở một phiếu kiểm mới: phiếu mới chụp mốc mới và ghi một dòng điều chỉnh mới. | Chưa dựng |
AC-CNT-01: Đếm được 80 nhưng trong lúc đếm bán thêm 5 - chênh lệch đúng, ghi đè thì sai
| Cho trước | Khi | Thì |
|---|---|---|
| Mặt hàng X tại kho A có 100 đơn vị lúc tạo phiếu kiểm (mốc chụp = 100) | Trong lúc phiếu kiểm còn mở, merchant bán thêm 5 đơn vị (tồn hiện tại còn 95), người kiểm đếm thực tế được 80 đơn vị trên kệ | Chênh lệch = 80 - 100 = -20 |
| Cùng phiếu kiểm | Áp kết quả | Tồn tại thời điểm áp = tồn hiện tại 95 cộng chênh lệch -20 = 75 - đúng, vì 5 đơn vị đã bán không bị tính lại |
| Nếu hệ thống ghi đè trực tiếp số đếm lên tồn thay vì tính theo chênh lệch | Áp kết quả kiểu ghi đè bằng số đếm 80 | Tồn bị đặt thẳng thành 80 - sai lệch 5 đơn vị so với 75, vì 5 đơn vị đã bán hợp lệ trong lúc kiểm bị tính nhầm thành vẫn còn trong kho |
AC-CNT-02: Đánh dấu biến động cho người duyệt chú ý
| Cho trước | Khi | Thì |
|---|---|---|
| Mặt hàng Y không có giao dịch nào phát sinh trong lúc phiếu kiểm còn mở | Áp kết quả | Không có cờ biến động; chênh lệch phản ánh đúng thất thoát hoặc kiểm sai trước đó |
| Mặt hàng X có bán, nhập hoặc chuyển kho phát sinh giữa lúc chụp mốc và lúc áp kết quả | Người duyệt mở phiếu kiểm để xem lại trước khi áp | Mặt hàng X hiện cờ "có biến động trong lúc đếm" để người duyệt chú ý |
AC-CNT-03: Phiếu đã áp là chốt
| Cho trước | Khi | Thì |
|---|---|---|
| Một phiếu kiểm kê đã áp, sau đó phát hiện đếm nhầm một mặt hàng | Người dùng mở lại phiếu đã áp | Mọi ô nhập bị khóa, không sửa được số đếm hay lý do, không có nút xóa phiếu |
| Cùng tình huống | Người dùng mở một phiếu kiểm mới cho mặt hàng đó | Phiếu mới chụp mốc mới theo tồn hiện tại và ghi một dòng điều chỉnh mới vào sổ; phiếu cũ giữ nguyên |
VEN - Nhà cung cấp Một phần
Đặc tả: PRD-VEN-001 · 9 yêu cầu · 2 kịch bản nghiệm thu
Nhà cung cấp là bên bán hàng cho merchant, nhưng bản thân tên nhà cung cấp không đủ để lập một đơn mua hàng đúng giá đúng số lượng. Mỗi cặp nhà cung cấp - mặt hàng mang theo một bộ dữ liệu mua hàng riêng: giá nhập gần nhất, số lượng đặt tối thiểu, thời gian giao hàng, quy cách đóng gói - tách hẳn khỏi giá bán ra cho khách của cùng mặt hàng đó. Đây chính là nguồn dữ liệu mà đơn mua hàng dựa vào để đề xuất giá và đơn vị khi merchant chọn nhà cung cấp cho một dòng hàng.
Màn tạo, sửa Nhà cung cấp và gán mặt hàng cho Nhà cung cấp đã chạy được thật. Nhưng màn nhập giá theo bậc số lượng và màn nhập số lượng đặt tối thiểu thì chưa có - dữ liệu này có chỗ lưu ở backend nhưng merchant chưa gõ tay được qua giao diện.
| Mã | Ưu tiên | Yêu cầu | Trạng thái |
|---|---|---|---|
URD-VEN-001 | Bắt buộc | Merchant tạo Nhà cung cấp với tên, mô tả, mã số thuế, tiền tệ giao dịch mặc định, địa điểm và nhiều liên hệ (tên, email, số điện thoại). | Đã dựng |
URD-VEN-002 | Bắt buộc | Mỗi cặp Nhà cung cấp - mặt hàng (biến thể sản phẩm hoặc nguyên vật liệu) có một bản ghi riêng; đây là nguồn dữ liệu chính thức cho việc mua hàng của mặt hàng đó, tách khỏi giá bán ra cho khách. | Một phần |
URD-VEN-003 | Bắt buộc | Bản ghi Nhà cung cấp - mặt hàng khai báo số lượng đặt tối thiểu, thời gian giao hàng dự kiến theo số ngày, và đơn vị đặt hàng. • Đơn vị đặt hàng chọn trong các đơn vị đã khai trên chính mặt hàng đó. • Dòng nhà cung cấp KHÔNG mang hệ số quy đổi riêng - hai nhà cung cấp không được phép bất đồng về việc một thùng của mặt hàng này bằng bao nhiêu. | Một phần |
URD-VEN-004 | Bắt buộc | Bản ghi Nhà cung cấp - mặt hàng lưu giá lần nhập gần nhất gồm đơn giá, đơn vị tính, thời điểm đặt và thời điểm nhận; giá này tự cập nhật mỗi lần đơn mua hàng của mặt hàng đó được nhận hàng. | Đã dựng |
URD-VEN-005 | Nên có | Merchant đánh dấu một Nhà cung cấp là ưu tiên cho một mặt hàng cụ thể; mỗi mặt hàng có nhiều nhất một nhà cung cấp ưu tiên tại một thời điểm - đánh dấu nhà cung cấp mới tự động bỏ đánh dấu nhà cung cấp cũ. | Một phần |
URD-VEN-006 | Nên có | Bản ghi Nhà cung cấp - mặt hàng có thể khai báo giá bậc theo số lượng đặt, mỗi bậc mang số lượng tối thiểu, đơn giá và đơn vị tính riêng. | Một phần |
URD-VEN-007 | Có thể | Bản ghi Nhà cung cấp - mặt hàng lưu mã hàng riêng của nhà cung cấp, khác với mã hàng nội bộ, phục vụ đối chiếu khi nhận hóa đơn hoặc phiếu giao hàng từ nhà cung cấp. | Chưa dựng |
URD-VEN-008 | Bắt buộc | Nhà cung cấp và bản ghi Nhà cung cấp - mặt hàng được cô lập theo merchant và dùng xóa mềm. | Đã dựng |
URD-VEN-009 | Nên có | Nhà cung cấp có vòng đời trạng thái (Đang hoạt động, Ngừng dùng, Lưu trữ), mặc định Đang hoạt động khi tạo mới; danh sách nhà cung cấp lọc được theo trạng thái và tìm được theo tên hoặc mã số thuế. | Một phần |
AC-VEN-01: Ưu tiên nhà cung cấp tự động chuyển
| Cho trước | Khi | Thì |
|---|---|---|
| Mặt hàng X đang có nhà cung cấp A được đánh dấu ưu tiên | Merchant đánh dấu nhà cung cấp B là ưu tiên cho cùng mặt hàng X | Nhà cung cấp A tự động bỏ đánh dấu ưu tiên; B trở thành ưu tiên duy nhất cho mặt hàng X |
AC-VEN-02: Giá tự cập nhật sau khi nhận hàng
| Cho trước | Khi | Thì |
|---|---|---|
| Bản ghi Nhà cung cấp A - mặt hàng X có giá lần nhập gần nhất là 50.000đ | Một đơn mua hàng từ A cho mặt hàng X được nhận hàng với đơn giá 55.000đ | Giá lần nhập gần nhất trên bản ghi A - X cập nhật thành 55.000đ, kèm thời điểm nhận mới |
PO - Đơn mua hàng Chưa dựng
Đặc tả: PRD-PO-001- · 13 yêu cầu · 3 kịch bản nghiệm thu
Đơn mua hàng là chứng từ ràng buộc merchant với một nhà cung cấp cho một lần đặt hàng: soạn dòng hàng, gửi đi, rồi nhận về - có thể nhận nhiều đợt vì hàng không phải lúc nào cũng về đủ một lần. Khi chọn nhà cung cấp cho đơn, mỗi dòng hàng nên tự lấy giá và đơn vị đã biết từ dữ liệu mua hàng của cặp nhà cung cấp - mặt hàng đó, thay vì merchant phải gõ tay lại từ đầu. Nhận hàng ghi sổ kho, cập nhật giá vốn và cập nhật ngược giá vào dữ liệu nhà cung cấp; khi số lượng hoặc giá thực nhận lệch với đơn đã đặt, hệ thống chỉ cảnh báo chứ không chặn, vì hàng đã về kho rồi thì việc nhận vẫn phải ghi nhận được.
| Mã | Ưu tiên | Yêu cầu | Trạng thái |
|---|---|---|---|
URD-PO-001 | Bắt buộc | Đơn mua hàng đi qua vòng đời soạn, gửi, nhận, hoàn tất, đóng. • Hủy được ở các bước trước khi hàng về kho. • Không hủy được từ Hoàn tất. Hàng đã nhập kho thì đơn đã xong; muốn trả hàng thì lập phiếu trả nhà cung cấp. | Một phần |
URD-PO-002 | Bắt buộc | Đơn mua hàng chỉ cho thêm, sửa, xóa dòng hàng khi còn ở trạng thái soạn; sang trạng thái tiếp theo thì dòng hàng bị khóa. | Một phần |
URD-PO-003 | Bắt buộc | Lập đơn mua hàng chọn một nhà cung cấp cho toàn đơn; mỗi dòng hàng khai một mặt hàng, số lượng, đơn giá, đơn vị tính. | Một phần |
URD-PO-004 | Nên có | Khi thêm một dòng hàng vào đơn mua hàng, hệ thống tự đề xuất đơn giá và đơn vị tính từ bản ghi Nhà cung cấp - mặt hàng của cặp nhà cung cấp và mặt hàng đó; merchant có thể sửa lại trước khi lưu. | Chưa dựng |
URD-PO-005 | Bắt buộc | Nhận hàng cho phép nhận từng phần, nhiều lần cho cùng một đơn mua hàng. • Mỗi lần nhận ghi nhận số lượng nhận được của từng dòng hàng, cộng dồn vào số đã nhận lũy kế của dòng đó. • Nhận thừa so với số đã đặt vẫn được ghi. Nhà cung cấp giao thừa thì hàng đã nằm trong kho; chặn ở form không làm hàng biến mất, chỉ làm sổ sách lệch thực tế. | Một phần |
URD-PO-006 | Bắt buộc | Mỗi lần nhận hàng đều ghi sổ biến động, cộng thực có của kho nhận đúng số lượng đã nhận, quy đổi theo đơn vị gốc của mặt hàng. | Một phần |
URD-PO-007 | Bắt buộc | Mỗi lần nhận hàng cập nhật lại giá lần nhập gần nhất trên bản ghi Nhà cung cấp - mặt hàng (đơn giá, đơn vị tính, thời điểm đặt, thời điểm nhận), để lần lập đơn mua hàng sau đề xuất đúng giá mới nhất. | Một phần |
URD-PO-008 | Nên có | Nhận hàng cập nhật lại giá vốn bình quân gia quyền của mặt hàng ở phạm vi merchant (không tách theo kho, xem VAL), hòa giá nhập mới vào giá vốn cũ theo tỉ trọng số lượng. | Chưa dựng |
URD-PO-009 | Nên có | Đối chiếu giữa số lượng/giá đặt và số lượng/giá thực nhận hiện dưới dạng cảnh báo, không chặn nhận hàng. • Lệch số lượng: số đã nhận khác số đã đặt của dòng hàng. • Lệch giá: đơn giá trên đơn mua hàng khác giá hóa đơn hoặc giá thực nhận. | Chưa dựng |
URD-PO-010 | Bắt buộc | Công nợ phải trả nhà cung cấp của đơn mua hàng neo theo số lượng đã nhận, không neo theo số lượng đã đặt. | Chưa dựng |
URD-PO-011 | Có thể | Hóa đơn nhà cung cấp về sau khác giá so với lúc nhận hàng chỉ ghi nhận khoản lệch trên đơn mua hàng, không tính lại giá vốn của các lần nhập trước đó. | Chưa dựng |
URD-PO-012 | Bắt buộc | Đơn mua hàng được cô lập theo merchant và dùng xóa mềm. | Một phần |
URD-PO-013 | Bắt buộc | Nhận thiếu so với số đã đặt không chặn gì và không ép đóng đơn. • Đơn mua hàng vẫn ở trạng thái mở sau khi nhận thiếu; nhận thêm bao nhiêu ghi bấy nhiêu, nhà cung cấp giao nhiều đợt thì cộng dồn vào số đã nhận lũy kế. • Hệ thống không tự sinh một chứng từ "thiếu hàng" riêng cho phần chưa nhận đủ. • Phần thiếu vĩnh viễn (nhà cung cấp không giao nữa) không xử lý bằng cách sửa lại đơn mua hàng này - merchant đưa tồn về đúng thực tế qua kiểm kê (xem CNT). | Chưa dựng |
AC-PO-01: Nhận từng phần, và nhận thừa vẫn ghi được
| Cho trước | Khi | Thì |
|---|---|---|
| Dòng hàng đặt 100 đơn vị, chưa nhận lần nào | Nhận đợt 1 với 60 đơn vị | Số đã nhận lũy kế của dòng hàng là 60; còn 40 đơn vị chưa nhận |
| Cùng dòng hàng | Nhận đợt 2 với 40 đơn vị | Số đã nhận lũy kế là 100, khớp số đã đặt |
AC-PO-02: Cảnh báo lệch số lượng và giá, không chặn nhận hàng
| Cho trước | Khi | Thì |
|---|---|---|
| Dòng hàng đặt 100 đơn vị với đơn giá 50.000đ | Nhận thực tế 95 đơn vị với giá hóa đơn 52.000đ | Nhận hàng vẫn được ghi nhận bình thường; hệ thống hiện cảnh báo lệch 5 đơn vị và lệch 2.000đ mỗi đơn vị, không chặn thao tác nhận |
| Đơn mua hàng đã nhận 95/100 đơn vị | Xem công nợ phải trả nhà cung cấp của đơn | Công nợ tính theo 95 đơn vị đã nhận, không theo 100 đơn vị đã đặt |
AC-PO-03: Nhận thiếu vĩnh viễn - đơn vẫn mở, xử lý qua kiểm kê
| Cho trước | Khi | Thì |
|---|---|---|
| Đơn mua hàng đặt 100 đơn vị, đã nhận 60 đơn vị qua hai đợt | Nhà cung cấp báo không còn hàng để giao thêm | Đơn mua hàng vẫn ở trạng thái mở, không bị hệ thống tự đóng, không có chứng từ "thiếu hàng" nào được sinh ra |
| Cùng tình huống | Merchant muốn phần thiếu 40 đơn vị không còn treo trên sổ sách | Merchant tự lập một phiếu kiểm kê để đưa tồn về đúng số thực tế, không sửa lại đơn mua hàng cũ |
MAT - Nguyên vật liệu Một phần
Đặc tả: PRD-MAT-001 · 8 yêu cầu · 3 kịch bản nghiệm thu
Nguyên vật liệu là nguyên liệu thô, bán thành phẩm hoặc vật tư tiêu hao dùng để làm ra món khác - sữa, trà, bột mì, ly nhựa. Mỗi nguyên liệu tự quyết cách nó được quản: có theo dõi tồn hay không, có chia theo lô hay không, có hạn dùng hay không. Nguyên liệu không giữ tên nhà cung cấp trên chính nó - liên kết với nhà cung cấp đi qua một bảng giá riêng, vì một nguyên liệu có thể mua từ nhiều nhà cung cấp với giá và số lượng tối thiểu khác nhau. Tạo một nguyên liệu mới, gán tồn ban đầu ở nhiều địa điểm, và chọn nhà cung cấp đều làm được trong một lần lưu.
| Mã | Ưu tiên | Yêu cầu | Trạng thái |
|---|---|---|---|
URD-MAT-001 | Bắt buộc | Mỗi nguyên liệu có một loại: nguyên liệu thô, bán thành phẩm, hoặc vật tư tiêu hao. • Bán thành phẩm là thứ bếp tự nấu ra thành mẻ rồi múc dần: nồi nước dùng, hành phi, thịt luộc thái sẵn. Nó có tồn, đếm kiểm kê được, có hạn dùng. • Bán thành phẩm có bật theo dõi tồn thì nổ định mức dừng tại nó (xem BOM) - món bán trừ thẳng trên tồn bán thành phẩm, không đi tiếp xuống nguyên liệu đã dùng để nấu ra nó. • Bán thành phẩm chỉ có tồn khi có lệnh sản xuất khai nó ra (xem MFG). | Một phần |
URD-MAT-002 | Bắt buộc | Mỗi nguyên liệu có bộ cờ cấu hình kho riêng: có theo dõi tồn hay không, có chia theo lô hay không, có hạn dùng hay không, số ngày hạn dùng kể từ lúc nhập, cho bán âm hay không, và ngưỡng tồn thấp báo riêng cho nguyên liệu này. | Một phần |
URD-MAT-003 | Bắt buộc | Nguyên liệu mang ba vai đơn vị: đơn vị gốc dùng để lưu tồn, đơn vị mua dùng khi lập đơn mua hàng, đơn vị bán dùng khi tính định lượng công thức. Ba vai này quy đổi qua engine đơn vị chung của Kho. | Một phần |
URD-MAT-004 | Bắt buộc | Nguyên liệu không giữ tên nhà cung cấp trên chính nó. Muốn biết ai bán nguyên liệu này thì tra qua bảng giá nhà cung cấp - một nguyên liệu có thể có nhiều nhà cung cấp, mỗi nhà cung cấp một giá, một số lượng tối thiểu, một thời gian giao khác nhau. | Một phần |
URD-MAT-005 | Bắt buộc | Tạo một nguyên liệu mới làm được trong một lần lưu, gồm cả tồn và nhà cung cấp. • Khai thông tin nguyên liệu và cờ cấu hình kho. • Khai tồn ban đầu tại nhiều địa điểm kho cùng lúc. • Chọn một hoặc nhiều nhà cung cấp, mỗi nhà cung cấp một giá. Không phải tạo xong nguyên liệu rồi mở màn khác để gán tồn, mở màn khác nữa để gán nhà cung cấp. | Một phần |
URD-MAT-006 | Bắt buộc | Sửa thông tin nguyên liệu (tên, mô tả, danh mục, cờ cấu hình kho, nhà cung cấp) cũng làm trong một lần lưu. Số lượng tồn không sửa qua màn này - số lượng chỉ đổi qua nhận hàng, bán hàng, chuyển kho hoặc kiểm kê. | Một phần |
URD-MAT-007 | Nên có | Ngưỡng tồn thấp cảnh báo dùng theo nguyên liệu nếu có khai; nếu nguyên liệu không khai thì dùng ngưỡng mặc định chung của hệ thống. | Một phần |
URD-MAT-008 | Nên có | Nguyên liệu đã chuyển sang trạng thái lưu trữ không còn được sửa thông tin hay cấu hình. Muốn dùng lại phải kích hoạt lại nguyên liệu trước. | Chưa dựng |
AC-MAT-01: Tạo nguyên liệu kèm tồn nhiều địa điểm và nhà cung cấp trong một lần lưu
| Cho trước | Khi | Thì |
|---|---|---|
| Chủ quán soạn nguyên liệu "Sữa tươi", bật theo dõi tồn, khai tồn ban đầu 20 lít tại kho Bếp và 10 lít tại kho Quầy, chọn 2 nhà cung cấp với giá khác nhau | Bấm Lưu | Nguyên liệu, hai dòng tồn theo địa điểm, và hai liên kết nhà cung cấp được ghi cùng lúc trong một lần lưu |
AC-MAT-02: Không có nhà cung cấp trên chính nguyên liệu
| Cho trước | Khi | Thì |
|---|---|---|
| Nguyên liệu "Trà" đang liên kết với nhà cung cấp A qua bảng giá | Xóa liên kết nhà cung cấp A khỏi bảng giá | Nguyên liệu Trà vẫn còn nguyên - không có trường nhà cung cấp nào trên chính nguyên liệu bị ảnh hưởng, vì liên kết chỉ nằm ở bảng giá |
AC-MAT-03: Nguyên liệu lưu trữ bị khóa sửa
| Cho trước | Khi | Thì |
|---|---|---|
| Nguyên liệu "Bột nếp" ở trạng thái lưu trữ | Thử sửa ngưỡng tồn thấp của nguyên liệu này | Hệ thống từ chối, yêu cầu kích hoạt lại nguyên liệu trước khi sửa |
BOM - Công thức Chưa dựng
Đặc tả: PRD-BOM-001 · 15 yêu cầu · 4 kịch bản nghiệm thu
Công thức là định lượng nguyên liệu để làm ra một món. Không phải món nào cũng đi qua công thức, và không phải món có công thức nào cũng trừ kho theo cùng một cách. Hai thứ cùng quyết định hành vi: loại của món (kho hàng thường, dạng ráp sẵn, combo, hàng sản xuất, hàng tiêu hao, dịch vụ, quyền lợi) và một cờ duy nhất nói món đó có theo dõi tồn hay không - không có một cờ chọn chế độ riêng nào khác, hai thứ trên đã đủ để suy ra toàn bộ cách trừ kho.
| Loại món | Theo dõi tồn | Cách trừ kho |
|---|---|---|
| Kho hàng thường (STORABLE) | Có | Có tồn riêng, bán 1 trừ 1 trên chính tồn của món, không qua công thức |
| Kho hàng thường (STORABLE) | Không | Không đụng kho |
| Dạng ráp sẵn (KIT) | Có | Không có tồn riêng - bán 1 món là nổ công thức, trừ thẳng nguyên liệu |
| Dạng ráp sẵn (KIT) | Không | Không đụng kho |
| Combo | Cha luôn Không | Cha không có tồn riêng - nổ ra từng món con, mỗi món con trừ kho theo đúng cờ của chính nó |
| Hàng sản xuất (MANUFACTURED) | Có | Có tồn riêng thành phẩm; công thức chỉ dùng cho lệnh sản xuất, không nổ lúc bán |
| Hàng tiêu hao (CONSUMABLE) | Luôn Không | Món có thật ngoài đời nhưng không lưu tồn - không đụng kho, không đi qua công thức |
| Dịch vụ / Quyền lợi (SERVICE / ENTITLEMENT) | Luôn Không | Không đụng kho, không được phép bật theo dõi tồn |
Chỉ hai loại dạng ráp sẵn và hàng sản xuất đi qua công thức. Combo không có công thức riêng của chính nó - nó nổ ra các món con, và món con nào có công thức thì món con đó tự nổ tiếp.
Nổ định mức dừng ở đâu. Đây là luật quan trọng nhất của cả vùng này. Nổ định mức dừng tại mọi thành phần có tồn riêng, và chỉ đi tiếp xuyên qua thành phần không có tồn riêng. Câu hỏi để quyết định là "thành phần này có tồn riêng không?", không phải "thành phần này có công thức con không?".
Nồi nước dùng là ví dụ rõ nhất. Sáng bếp nấu một nồi 50 lít từ 5kg xương, đó là một lệnh sản xuất và nó đã trừ 5kg xương. Trưa bán một tô phở múc 200ml, hệ thống trừ 200ml tồn nước dùng rồi dừng lại. Nếu nó đi tiếp xuống xương thì 5kg xương bị trừ lần thứ hai, tồn xương tụt gấp đôi, còn tồn nước dùng thì không bao giờ giảm dù nồi đã rỗng.
| Thành phần trong công thức | Có tồn riêng | Nổ tiếp xuống? |
|---|---|---|
| Nguyên liệu thô (xương, bột, sữa) | Có | Không - dừng, trừ tồn của chính nguyên liệu |
| Bán thành phẩm có theo dõi tồn (nồi nước dùng, hành phi) | Có | Không - dừng, trừ tồn của chính bán thành phẩm |
| Hàng sản xuất có theo dõi tồn | Có | Không - dừng, trừ tồn thành phẩm của chính nó |
| Món dạng ráp sẵn không có tồn riêng | Không | Có - đi tiếp xuống công thức của nó |
Luật này áp cho cây công thức sâu bao nhiêu tầng cũng vậy: gặp tầng nào có tồn riêng là dừng tại tầng đó.
| Mã | Ưu tiên | Yêu cầu | Trạng thái |
|---|---|---|---|
URD-BOM-001 | Bắt buộc | Loại món cộng cờ theo dõi tồn quyết định cách trừ kho theo đúng bảng ma trận ở trên; không có cờ chọn chế độ riêng nào khác. | Một phần |
URD-BOM-002 | Bắt buộc | Kho hàng thường có theo dõi tồn giữ tồn riêng, bán 1 trừ 1 trên chính món, không đi qua công thức dù có gắn công thức hay không. | Một phần |
URD-BOM-003 | Bắt buộc | Dạng ráp sẵn có theo dõi tồn không giữ tồn riêng - bán món này là nổ công thức, trừ thẳng nguyên liệu, bản thân món không có dòng tồn của chính nó. | Một phần |
URD-BOM-004 | Bắt buộc | Combo luôn không giữ tồn ở cấp cha - bấm combo vào giỏ là nổ ra từng món con ngay lúc đó, mỗi món con trừ kho theo đúng cờ của chính nó. | Một phần |
URD-BOM-005 | Bắt buộc | Hàng sản xuất có theo dõi tồn giữ tồn thành phẩm riêng; công thức của nó chỉ dùng khi chạy lệnh sản xuất (xem MFG), không nổ lúc bán trực tiếp. | Một phần |
URD-BOM-006 | Bắt buộc | Kiểm và giữ nguyên liệu ngay lúc bấm món vào đơn, không đợi tới lúc thanh toán. • Đủ nguyên liệu thì món được thêm vào giỏ, nguyên liệu chuyển sang trạng thái đang giữ ngay lúc đó. • Thiếu nguyên liệu thì báo ngay tại quầy, khách chưa trả tiền, thu ngân còn sửa được. | Chưa dựng |
URD-BOM-007 | Bắt buộc | Một nguyên liệu bật cờ cho bán âm thì được cho qua dù không đủ tồn; nguyên liệu khác trong cùng công thức vẫn bị chặn bình thường nếu chưa bật cờ này. | Một phần |
URD-BOM-008 | Nên có | Số lượng phần còn bán được của một món đi qua công thức là số nhỏ nhất trong các tỉ lệ (nguyên liệu còn / định mức từng nguyên liệu). Khi số này về 0, món hiện trạng thái hết trên menu. | Chưa dựng |
URD-BOM-009 | Bắt buộc | Nổ định mức dừng tại mọi thành phần có tồn riêng. • Thành phần có tồn riêng (nguyên liệu thô, bán thành phẩm có theo dõi tồn, hàng sản xuất có theo dõi tồn) thì nổ dừng ngay tại đó và trừ trên chính tồn của thành phần đó - không đi tiếp xuống nguyên liệu tạo ra nó, vì phần đó đã bị trừ lúc sản xuất. • Chỉ đi tiếp xuống khi thành phần đó không có tồn riêng. • Điều kiện dừng là "có tồn riêng hay không", không phải "có công thức con hay không". • Luật áp cho cây sâu bao nhiêu tầng cũng vậy; có giới hạn số tầng và chặn vòng lặp (một công thức không được vòng lại chính nó). • Bước giữ nguyên liệu lúc bấm món và bước trừ sổ thật khi món hoàn tất phải nổ tới cùng một độ sâu, không được lệch nhau. | Chưa dựng |
URD-BOM-010 | Bắt buộc | Trừ sổ (nguyên liệu rời kho thật) mặc định diễn ra ngay khi đơn thanh toán xong, không phụ thuộc quán có dùng màn hình bếp hay không. | Chưa dựng |
URD-BOM-011 | Nên có | Quán có dùng màn hình bếp có thể chọn đổi thời điểm trừ sổ sang lúc bếp báo món đã xong, thay vì mặc định lúc thanh toán. | Một phần |
URD-BOM-012 | Bắt buộc | Bếp hủy một món trước khi báo xong thì phần nguyên liệu đã giữ cho món đó được nhả lại, chưa hề bị trừ sổ. | Một phần |
URD-BOM-013 | Bắt buộc | Cấu trúc và vòng đời của một công thức. • Một công thức là danh sách dòng thành phần cho một phần thành phẩm; mỗi dòng là một nguyên liệu hoặc một món khác, kèm số lượng, đơn vị tính và cờ tùy chọn. • Dòng thành phần đánh dấu tùy chọn thì thiếu nó không chặn bán món. • Công thức có ba trạng thái: nháp, đang dùng, ngừng dùng; chỉ bản đang dùng mới được nổ khi bán. • Một món chỉ có đúng một công thức đang dùng tại một thời điểm - kích hoạt bản mới thì bản cũ tự chuyển sang ngừng dùng. | Một phần |
URD-BOM-014 | Bắt buộc | Hết bán thành phẩm giữa ca thì tồn của nó xuống âm kèm cảnh báo, tuyệt đối không rơi xuống nguyên liệu gốc. • Nồi nước dùng cạn mà vẫn bán tiếp thì tồn nước dùng xuống âm và merchant nhận cảnh báo, để cuối ngày còn đối chiếu ra được là bếp đã nấu thêm mà quên khai lệnh. • Hệ thống không được tự động quay sang trừ xương, nước và gia vị - phần đó đã bị trừ ở lệnh sản xuất rồi. • Không chặn bán: bếp vẫn nấu được và khách vẫn ăn được, chặn bán chỉ khiến thu ngân tìm cách lách và dữ liệu còn sai hơn. | Chưa dựng |
URD-BOM-015 | Bắt buộc | Đổi định lượng không được viết lại lịch sử. • Đổi định lượng của một công thức là thêm một bản mới có ngày hiệu lực, không sửa đè lên bản cũ. • Định lượng đã dùng để trừ kho được đóng dấu vào chính chứng từ lúc phát sinh, nên chứng từ cũ luôn đọc lại được đúng định lượng của thời điểm đó. • Không có luật này thì sửa định lượng hôm nay sẽ làm đổi giá vốn của các đơn tháng trước, và báo cáo cũ không tái tạo được. | Chưa dựng |
AC-BOM-01: Ma trận loại món quyết định cách trừ kho
| Cho trước | Khi | Thì |
|---|---|---|
| Món "Lon nước ngọt" là kho hàng thường, có theo dõi tồn, tồn còn 10 lon | Bán 1 lon | Tồn của chính món giảm còn 9 lon, không có dòng công thức nào được nhìn tới |
| Món "Set cơm gà" là combo gồm 1 phần cơm và 1 phần gà, cả hai đều là kho hàng thường có theo dõi tồn | Bán 1 set | Combo không có dòng tồn riêng; phần cơm và phần gà mỗi phần bị trừ 1 theo đúng tồn của chính nó |
AC-BOM-02: Trà sữa hết sữa - báo ngay tại quầy
| Cho trước | Khi | Thì |
|---|---|---|
| Trà sữa là món dạng ráp sẵn, có theo dõi tồn; công thức cần 50ml sữa tươi cho 1 ly; sữa tươi còn 30ml, chưa bật cho bán âm | Thu ngân bấm "1 trà sữa" vào đơn tại quầy | Hệ thống kiểm nguyên liệu ngay lúc đó, thấy thiếu 20ml sữa, báo hết nguyên liệu ngay tại quầy, không cho thêm món vào giỏ - khách chưa trả tiền |
| Cùng trà sữa, sữa đủ nhưng đá viên trong công thức đang bật cờ cho bán âm và tồn đá đang bằng 0 | Bấm "1 trà sữa" vào đơn | Món vẫn được thêm vào giỏ - đá bị trừ âm nhưng không chặn, vì đá đã bật cờ cho bán âm |
AC-BOM-03: Trừ sổ theo cấu hình, bếp hủy thì nhả lại
| Cho trước | Khi | Thì |
|---|---|---|
| Quán có màn hình bếp và đã bật trừ sổ lúc bếp báo xong món; đơn trà sữa đã thanh toán, nguyên liệu đang ở trạng thái đang giữ | Bếp bấm "xong món" cho ly trà sữa đó | Nguyên liệu được trừ sổ thật, rời kho, không còn ở trạng thái đang giữ |
| Cùng đơn, nhưng bếp bấm "hủy món" thay vì "xong món", trước khi trừ sổ | Bếp hủy món | Phần nguyên liệu đã giữ cho món đó được nhả lại, tồn khả dụng tăng trở lại, chưa hề bị trừ sổ |
AC-BOM-04: Nồi nước dùng - nổ dừng tại bán thành phẩm, xương không bị trừ hai lần
| Cho trước | Khi | Thì |
|---|---|---|
| Đầu ngày tồn xương 20kg. Nước dùng là bán thành phẩm có theo dõi tồn, đơn vị lít. Công thức nước dùng: 5kg xương + 55 lít nước cho 50 lít. Công thức tô phở: 200ml nước dùng + 180g bánh phở + 60g thịt bò | Bếp chạy lệnh sản xuất nấu nồi nước dùng và bấm Hoàn tất, khai sản lượng thực 47 lít | Tồn xương giảm còn 15kg (trừ đúng một lần). Tồn nước dùng tăng lên 47 lít, mang số lô và hạn dùng của mẻ đó. Giá vốn một lít nước dùng tính trên 47 lít thực làm ra, không phải 50 lít kế hoạch |
| Tiếp theo, tồn nước dùng đang 47 lít, tồn xương đang 15kg | Bán 1 tô phở | Trừ 200ml tồn nước dùng rồi dừng lại. Tồn xương vẫn nguyên 15kg - hệ thống không đi tiếp xuống xương, nước và gia vị |
| Bán tiếp cho tới khi tồn nước dùng về 0 | Bán thêm 1 tô phở nữa | Tồn nước dùng xuống âm 200ml kèm cảnh báo. Tồn xương vẫn nguyên, hệ thống không tự trừ xương để bù |
MFG - Lệnh sản xuất Chưa dựng
Đặc tả: PRD-MFG-001 · 9 yêu cầu · 2 kịch bản nghiệm thu
Lệnh sản xuất điều khiển việc biến nguyên liệu thành thành phẩm theo một công thức - làm một mẻ bánh, đóng một lô nước sốt. Lệnh đi qua ba mốc: soạn, đang chạy, xong hoặc hủy giữa chừng. Bắt đầu chạy là lúc nguyên liệu bị giữ lại cho mẻ hàng, không ai lấy đi được nữa; hoàn tất là lúc nguyên liệu đã giữ được trừ sổ thật và thành phẩm vào kho, mang theo số lô và hạn dùng của chính đợt sản xuất đó. Cơ chế giữ rồi trừ này dùng chung với chuyển kho (xem RSV-009), nên hủy giữa chừng thì nguyên liệu quay lại khả dụng ngay.
| Mã | Ưu tiên | Yêu cầu | Trạng thái |
|---|---|---|---|
URD-MFG-001 | Bắt buộc | Lệnh sản xuất đi qua vòng đời soạn (nháp) → đang chạy → xong hoặc hủy. Không được đổi thẳng từ soạn sang xong, phải qua đang chạy trước. | Một phần |
URD-MFG-002 | Bắt buộc | Mỗi lệnh sản xuất chạy theo đúng một công thức, tại một địa điểm kho xác định, cho một số lượng kế hoạch; và mang một mã lệnh duy nhất trong merchant, dùng để tham chiếu tới mẻ hàng đó ở sổ biến động, lô thành phẩm và phần tồn đang giữ. | Một phần |
URD-MFG-003 | Bắt buộc | Bắt đầu chạy lệnh sản xuất giữ nguyên liệu theo công thức nhân với số lượng kế hoạch - phần nguyên liệu này chuyển sang đang giữ cho chính lệnh đó, khả dụng giảm ngay, nhưng chưa trừ sổ. Thiếu nguyên liệu thì lệnh không chạy được. | Chưa dựng |
URD-MFG-004 | Bắt buộc | Hoàn tất lệnh sản xuất trừ sổ phần nguyên liệu đang giữ (nguyên liệu rời kho thật) và tăng tồn thành phẩm tại địa điểm sản xuất theo đúng số lượng thực tế làm ra - hai việc diễn ra cùng lúc trong một lần hoàn tất. | Chưa dựng |
URD-MFG-005 | Bắt buộc | Hoàn tất lệnh sản xuất đóng dấu số lô và hạn dùng cho lô thành phẩm vừa sản xuất ra; hạn dùng tính từ ngày hoàn tất cộng số ngày hạn dùng cấu hình trên thành phẩm. | Chưa dựng |
URD-MFG-006 | Nên có | Hoàn tất lệnh sản xuất ghi nhận sản lượng thực tế và phần hao hụt - chênh lệch giữa số lượng kế hoạch và số lượng thực tế làm ra. | Chưa dựng |
URD-MFG-007 | Bắt buộc | Hủy lệnh sản xuất đang chạy nhả lại phần nguyên liệu đã giữ nhưng chưa trừ sổ. | Chưa dựng |
URD-MFG-008 | Bắt buộc | Màn hình quản lý lệnh sản xuất tại trang Client. • Danh sách lệnh theo merchant của chính người dùng, lọc được theo trạng thái và theo địa điểm kho. • Mở một lệnh ra xem chi tiết: danh sách nguyên liệu theo công thức đã nổ, mốc thời gian bắt đầu và hoàn tất, lô thành phẩm đã sinh ra. | Chưa dựng |
URD-MFG-009 | Bắt buộc | Giá vốn thành phẩm tính trên sản lượng THỰC, không phải sản lượng kế hoạch. • Giá vốn một đơn vị thành phẩm bằng tổng giá vốn nguyên liệu thực sự tiêu thụ chia cho sản lượng thực làm ra. • Kế hoạch 50 lít nhưng bay hơi còn 47 lít thì chia cho 47, không chia cho 50 - chia cho 50 là báo giá vốn rẻ hơn thực tế. • Nguyên liệu tiêu thụ thực được phép lệch định mức: người làm khai số thực, hệ thống cảnh báo mức lệch nhưng không chặn. Chính chỗ lệch này là cái merchant cần nhìn để biết bếp đang hao bao nhiêu. | Chưa dựng |
AC-MFG-01: Vòng đời hợp lệ
| Cho trước | Khi | Thì |
|---|---|---|
| Lệnh sản xuất "Mẻ bánh 001" đang ở trạng thái soạn | Cố đổi trạng thái thẳng sang xong | Hệ thống từ chối - chỉ cho chuyển soạn → đang chạy → xong (hoặc hủy), không được nhảy tắt |
AC-MFG-02: Bắt đầu giữ nguyên liệu, hoàn tất trừ sổ và tăng thành phẩm kèm lô
| Cho trước | Khi | Thì |
|---|---|---|
| Lệnh sản xuất "Mẻ bánh 001" theo công thức cần 5kg bột và 2kg đường cho 100 cái bánh kế hoạch; kho đủ nguyên liệu | Bấm Bắt đầu chạy | 5kg bột và 2kg đường chuyển sang đang giữ cho lệnh này, khả dụng của bột và đường giảm tương ứng, thực có chưa đổi |
| Sau đó, khai 98 cái làm ra thật, hao hụt 2 cái | Bấm Hoàn tất | 5kg bột và 2kg đường được trừ sổ thật, rời kho; tồn thành phẩm tăng 98 cái tại kho sản xuất, mang một số lô mới và hạn dùng tính theo cấu hình thành phẩm; sản lượng thực tế 98 và hao hụt 2 được ghi lại trên lệnh |
| Cùng lệnh đó, nhưng mẻ bị bỏ dở | Bấm Hủy lệnh khi lệnh đang chạy | Phần bột và đường đang giữ được nhả lại, khả dụng tăng trở lại, chưa hề bị trừ sổ |
RPL - Bổ sung hàng Một phần
Đặc tả: PRD-RPL-001 · 9 yêu cầu · 3 kịch bản nghiệm thu
Bổ sung hàng gợi ý cho merchant biết khi nào cần đặt hàng lại và đặt bao nhiêu, dựa trên tốc độ bán và thời gian nhà cung cấp giao hàng. Đây là công cụ gợi ý, chưa phải luồng bắt buộc trong đơn mua hàng - xếp sau trong thứ tự triển khai của module Kho.
| Mã | Ưu tiên | Yêu cầu | Trạng thái |
|---|---|---|---|
URD-RPL-001 | Nên có | Điểm đặt hàng lại của một mặt hàng tính bằng nhu cầu bán trung bình mỗi ngày nhân thời gian nhà cung cấp giao hàng, cộng thêm tồn an toàn. Nhu cầu bán trung bình lấy trên cửa sổ lịch sử bán cấu hình được (mặc định 30 ngày); mặt hàng có dưới 14 ngày phát sinh bán trong cửa sổ đó thì hệ thống không đưa ra con số gợi ý mà nói rõ đang thiếu lịch sử. | Chưa dựng |
URD-RPL-002 | Nên có | Tồn an toàn mặc định tính theo công thức chênh lệch cao nhất trừ thấp nhất: (bán nhiều nhất một ngày x thời gian giao lâu nhất) trừ (bán trung bình một ngày x thời gian giao trung bình). Thời gian giao lâu nhất và trung bình lấy từ lịch sử các lần nhận hàng thật của mặt hàng; chưa có lịch sử nhận hàng thì cả hai cùng lấy số ngày khai trên bản ghi nhà cung cấp - mặt hàng. Công thức ra số âm thì tồn an toàn bằng 0. | Chưa dựng |
URD-RPL-003 | Nên có | Merchant có thể nhập tay tồn an toàn cho từng mặt hàng, ghi đè số công thức mặc định tính ra. | Chưa dựng |
URD-RPL-004 | Có thể | Công thức thống kê theo độ lệch chuẩn để dành làm tùy chọn nâng cao sau này, không dùng làm công thức mặc định vì cần dữ liệu bán hàng đủ dài mới đáng tin. Merchant tự bật cho từng mặt hàng, và chỉ bật được cho mặt hàng có từ 90 ngày lịch sử bán trở lên. | Chưa dựng |
URD-RPL-005 | Nên có | Mặt hàng được phân vào nhóm A, B, hoặc C theo giá trị tiêu thụ - số lượng bán nhân giá vốn, không phải theo doanh thu. | Chưa dựng |
URD-RPL-006 | Nên có | Ngưỡng phân nhóm A/B/C mặc định 80/15/5 theo tỉ trọng giá trị tiêu thụ; merchant chỉnh được ngưỡng này. Các tham số tính toán khác cũng chỉnh được ở một nơi dùng chung cho cả merchant: cửa sổ lịch sử tính nhu cầu bán trung bình (mặc định 30 ngày), cơ sở phân nhóm ABC (mặc định giá vốn), kỳ phân nhóm ABC (mặc định 90 ngày), và tần suất kiểm kê gợi ý của từng nhóm. | Chưa dựng |
URD-RPL-007 | Có thể | Nhóm A/B/C của một mặt hàng gợi ý tần suất kiểm kê luân phiên cho mặt hàng đó - nhóm A kiểm thường xuyên hơn nhóm C. Tần suất mặc định: nhóm A mỗi tuần, nhóm B mỗi tháng, nhóm C mỗi quý; merchant chỉnh được tần suất của từng nhóm. | Chưa dựng |
URD-RPL-008 | Nên có | Mặt hàng nằm dưới điểm đặt hàng lại được kèm số lượng đề nghị đặt: số lượng đưa tồn về mức đủ bán hết một chu kỳ giao hàng, làm tròn LÊN theo quy cách đóng gói và số lượng đặt tối thiểu của nhà cung cấp ưu tiên. Merchant sửa được con số này. | Chưa dựng |
URD-RPL-009 | Nên có | Merchant chọn nhiều dòng cùng một nhà cung cấp trong danh sách Cần đặt hàng rồi tạo thẳng một đơn mua hàng từ đó, với các dòng và số lượng đã chọn được mang sang. Hệ thống không tự lập và không tự gửi đơn. | Chưa dựng |
AC-RPL-01: Tính điểm đặt hàng lại và tồn an toàn mặc định
| Cho trước | Khi | Thì |
|---|---|---|
| Mặt hàng X bán trung bình 20 đơn vị/ngày, bán nhiều nhất 35 đơn vị/ngày; nhà cung cấp giao trung bình 3 ngày, lâu nhất 5 ngày | Hệ thống tính gợi ý đặt hàng lại | Tồn an toàn = (35 x 5) - (20 x 3) = 115; điểm đặt hàng lại = (20 x 3) + 115 = 175 |
AC-RPL-02: Phân nhóm ABC theo ngưỡng cấu hình
| Cho trước | Khi | Thì |
|---|---|---|
| Merchant chỉnh ngưỡng phân nhóm thành 70/20/10 thay vì mặc định 80/15/5 | Hệ thống chạy phân loại ABC theo giá trị tiêu thụ | Mặt hàng được xếp nhóm theo ngưỡng 70/20/10 mà merchant đã chỉnh, không dùng ngưỡng mặc định |
AC-RPL-03: Số lượng đề nghị đặt và tạo đơn mua hàng từ danh sách
| Cho trước | Khi | Thì |
|---|---|---|
| Mặt hàng có quy cách đóng gói 24 đơn vị một thùng, số lượng đặt tối thiểu 2 thùng, và đang cần bổ sung 30 đơn vị | Merchant mở danh sách Cần đặt hàng | Số lượng đề nghị đặt hiện 2 thùng (48 đơn vị), làm tròn lên, không hiện 30 đơn vị lẻ |
| Ba dòng trong danh sách Cần đặt hàng cùng một nhà cung cấp | Merchant chọn ba dòng đó và bấm tạo đơn mua hàng | Một đơn mua hàng mới mở ra với đúng ba dòng, đúng số lượng đề nghị đặt và nhà cung cấp đã chọn; hệ thống không tự gửi đơn |
SYN - Đồng bộ đa kênh Chưa dựng
Đặc tả: PRD-SYN-001 · 9 yêu cầu · 2 kịch bản nghiệm thu
Đồng bộ đa kênh giữ tồn kho đúng khi merchant bán cùng lúc trên nhiều nơi - tại quầy và trên các sàn thương mại điện tử. BANA đóng vai trò nguồn tồn kho duy nhất; các sàn chỉ nhận số liệu từ BANA, không tự ghi tồn ngược lại. Feature này thiết kế cho tương lai - BANA hiện chưa tích hợp sàn nào. Kênh bán hiện tại chỉ là kênh nội bộ do merchant tự khai; BANA gieo sẵn một bộ mặc định theo ngành (quán ăn: tại chỗ, mang đi; bán lẻ: tại quầy, trực tuyến), merchant sửa hoặc thêm kênh của mình được.
| Mã | Ưu tiên | Yêu cầu | Trạng thái |
|---|---|---|---|
URD-SYN-001 | Nên có | BANA là nguồn tồn kho duy nhất cho mọi kênh bán của merchant; tồn được đẩy một chiều từ BANA xuống các sàn, không có chiều ngược lại. | Chưa dựng |
URD-SYN-002 | Bắt buộc | Số đẩy lên sàn là số khả dụng (thực có trừ đang giữ), không phải số thực có. | Chưa dựng |
URD-SYN-003 | Nên có | Số đẩy lên sàn trừ thêm một khoản đệm cấu hình được theo từng mặt hàng hoặc kênh; khoản đệm mặc định bằng 0. | Chưa dựng |
URD-SYN-004 | Nên có | Đơn hàng phát sinh trên sàn được đưa về BANA và trừ kho như một đơn bán bình thường. | Chưa dựng |
URD-SYN-005 | Bắt buộc | Sau khi trừ kho cho đơn từ sàn, BANA tính lại số khả dụng và đẩy số tồn mới nhất lên sàn đó. | Chưa dựng |
URD-SYN-006 | Bắt buộc | Một gian hàng trên sàn chỉ nhận cập nhật tồn từ đúng một nguồn là BANA; không cho phép hệ thống khác cùng ghi tồn lên gian hàng đó, để tránh tồn ảo. | Chưa dựng |
URD-SYN-007 | Nên có | Merchant nối một gian hàng trên sàn vào BANA thành một kênh bán bên ngoài, gắn với đúng một địa điểm kho, và tự quản lý kênh đó (tạm dừng, bật lại, xóa). | Chưa dựng |
URD-SYN-008 | Nên có | Từng mặt hàng trên gian hàng được ghép với đúng một mục kho trong BANA; mặt hàng chưa ghép thì không được đồng bộ tồn. | Chưa dựng |
URD-SYN-009 | Nên có | Merchant xem được lịch sử và tình trạng đồng bộ của từng mặt hàng trên từng kênh, và đẩy lại bằng tay khi một lần đẩy bị lỗi. | Chưa dựng |
AC-SYN-01: Đẩy tồn một chiều kèm khoản đệm
| Cho trước | Khi | Thì |
|---|---|---|
| Mặt hàng Y có thực có 50, đang giữ 5 (khả dụng 45), khoản đệm cấu hình 3 | Hệ thống đồng bộ tồn lên sàn | Số đẩy lên sàn = 45 - 3 = 42, không phải 50 |
AC-SYN-02: Đơn từ sàn về trừ kho và đẩy lại
| Cho trước | Khi | Thì |
|---|---|---|
| Gian hàng trên sàn đang hiển thị tồn 42 cho mặt hàng Y (nối tiếp AC-SYN-01) | Có đơn từ sàn mua 2 đơn vị, đơn được đưa về BANA | BANA trừ kho như đơn bán bình thường, tính lại số khả dụng, rồi đẩy số tồn mới lên sàn đó |
4. Ràng buộc
| # | Ràng buộc |
|---|---|
C‑01 | Mỗi merchant có đúng một địa điểm kho mặc định. |
C‑02 | Tồn luôn lưu theo đơn vị gốc của mặt hàng. Mọi số lượng trên chứng từ được quy đổi về đơn vị gốc trước khi ghi sổ. |
C‑03 | Khả dụng = Thực có - Đang giữ. Bất biến này đúng ở mọi thời điểm. |
C‑04 | Chặn bán quá tay là mặc định. Chỉ mặt hàng bật cờ cho bán âm mới được bán vượt tồn. |
C‑05 | Nghiệp vụ (bán, nhập, chuyển, kiểm kê...) chỉ thêm dòng vào sổ biến động, sửa sai bằng một dòng điều chỉnh mới, không sửa hay xóa dòng cũ. Đội vận hành hệ thống có cửa thoát riêng để sửa/xóa trực tiếp khi cần cứu dữ liệu - công cụ nội bộ, không phải tính năng merchant (xem URD-LDG-009). |
C‑06 | Cùng một chứng từ, dù được xử lý lại bao nhiêu lần, cũng chỉ ghi sổ một lần cho mỗi dòng tồn. |
C‑07 | Giá vốn theo merchant, số lượng theo địa điểm. Chuyển kho nội bộ không đổi giá vốn. |
C‑08 | Phiếu kho chỉ tác động tồn khi ở trạng thái hoàn tất. |
C‑09 | Mọi phép tính số lượng và tiền dùng độ chính xác 4 chữ số thập phân. |
C‑10 | Mọi bản ghi thuộc về một merchant và dùng xóa mềm. |
5. Loại trừ
Kho cố ý không làm những việc sau.
| Mã | Việc không làm |
|---|---|
N‑01 | Quản lý kho theo kệ, theo ô (bin/locator) - địa điểm dừng ở mức kho và khu. |
N‑02 | Giá vốn FIFO theo lô (cost layer). Hệ dùng bình quân gia quyền và định mức. |
N‑03 | Giá vốn LIFO - không hỗ trợ. |
N‑04 | Định giá tồn kho đa tiền tệ. |
N‑05 | Hoạt động ngoại tuyến (offline-first) tại quầy. |
N‑06 | Hạch toán kế toán - module Kho ghi số lượng và giá vốn, không sinh bút toán. |
Lịch sử phiên bản
| Ngày | Người | Thay đổi | Phiên bản |
|---|---|---|---|
| 2026-07-13 | Phát Nguyễn | Viết lại toàn bộ. Cấu trúc lại 17 feature theo năng lực nghiệp vụ. Thêm chương "Cách hệ thống nghĩ về tồn kho". | v2.0 |
| 2026-07-13 | Phát Nguyễn | MFG: chốt lại thời điểm trừ nguyên liệu - bắt đầu chạy chỉ giữ, hoàn tất mới trừ sổ (URD-MFG-003, URD-MFG-004), để URD-MFG-007 và URD-RSV-004/005 có nghĩa. Thêm URD-MFG-008 (màn hình quản lý lệnh sản xuất) và mã lệnh duy nhất vào URD-MFG-002. | v2.1 |
| 2026-07-13 | Phát Nguyễn | BOM: viết lại URD-BOM-009 - nổ định mức DỪNG tại mọi thành phần có tồn riêng, thay cho luật cũ "lần xuống tới nguyên liệu gốc" (luật cũ khiến nguyên liệu của mẻ bị trừ hai lần). Thêm URD-BOM-014 (hết bán thành phẩm thì âm kho, không rơi xuống nguyên liệu gốc) và URD-BOM-015 (định lượng versioned, snapshot vào chứng từ). MAT-001: nói rõ bán thành phẩm có tồn là điểm dừng nổ. Thêm URD-MFG-009 (giá vốn theo sản lượng thực). | v2.2 |