PRD: Lô, hạn dùng & chiến lược xuất
| Module | Kho | PRD ID | PRD-LSE-001 |
| Trạng thái | Đã thay thế | FEAT | LSE |
| Epic | — | Plane | — |
| Ngày | 2026-07-13 | Phiên bản | v1.0 |
| Gói | @nx/inventory | URD | LSE |
| Surface | Client · Chủ/QL | ||
| Phụ trách | Phát Nguyễn | ||
Lô là gì
Một lô (Lot) là một đợt hàng nhập vào cùng lúc, mang chung một mã lô và một hạn dùng. Mười hộp sữa nhận sáng nay với hạn 2026-08-01 là một lô; mười hộp nhận tuần sau với hạn khác là một lô khác.
Một chi nhánh (Merchant) bật theo dõi lô cho từng mặt hàng, ngay trong form sửa mặt hàng. Cờ này mặc định tắt. Bật lên thì tồn của mặt hàng đó tại mỗi kho (InventoryLocation) được tách ra theo từng lô. Nhiều chi nhánh cùng nằm trong một tổ chức (Organizer), và mỗi chi nhánh tự quyết mặt hàng nào cần lô.
Bốn chỉ số trong tồn kho
Trích từ Kho & mức tồn để khỏi phải mở PRD khác. Mỗi mặt hàng ở mỗi kho mang bốn con số:
| Con số | Hệ thống gọi | Nghĩa |
|---|---|---|
| Thực có | on-hand | Hàng đang nằm trong kho |
| Đang giữ | reserved | Đã hứa cho một chứng từ khác, không bán cho ai được nữa |
| Khả dụng | available | Phần còn bán được |
| Đang về | incoming | Đã rời kho gửi, chưa tới kho nhận |
Bất biến, đúng ở mọi thời điểm:
Khả dụng = Thực có - Đang giữBật lô thì bốn con số này chạy xuống một tầng nữa: mỗi lô mang bốn con số của riêng nó, và tồn của mặt hàng tại một kho là tổng của các lô ở đó.
Vì sao một con số tồn duy nhất là không đủ
Cùng một mã hàng nhưng không phải đơn vị nào cũng giống nhau. Thùng sữa nhập hôm nay và thùng sữa nhập tuần trước có hạn dùng khác nhau. Hệ thống chỉ giữ một con số tồn duy nhất cho "sữa tươi" thì quán không biết phần nào sắp hết hạn, và nhân viên lấy thùng nào gần tay nhất. Sữa cũ nằm lại tới lúc phải đổ bỏ.
Có lô rồi mới trả lời được hai câu hỏi mà F&B và bán lẻ hàng tươi đặt ra mỗi ngày: hàng nào sắp hết hạn, và khi bán thì lấy hàng nào ra trước.
Một mặt hàng có lô, từ đầu tới cuối
Sữa tươi, đang để chiến lược hết hạn sớm nhất trước (FEFO). Nhận hai lô rồi bán 4 hộp. Thu ngân không chọn lô.
| Việc xảy ra | Lô A · hạn 01/08 · nhập 01/07 | Lô B · hạn 20/07 · nhập 05/07 | Tổng tồn |
|---|---|---|---|
| Nhận lô A: 5 hộp | 5 | 0 | 5 |
| Nhận lô B: 3 hộp | 5 | 3 | 8 |
| Bán 4 hộp | 4 | 0 | 4 |
- Lô B hạn sớm hơn, nên bị bóc trước: hết cả 3 hộp. Còn thiếu 1 hộp thì tràn sang lô A.
- Một lần bán chạm hai lô, và sổ biến động ghi hai dòng: trừ 3 của lô B, trừ 1 của lô A.
- Đổi mặt hàng này sang chiến lược nhập kho trước (FIFO) thì lô A bị bóc trước, vì lô A vào kho ngày 01/07, sớm hơn lô B.
- Vài ngày sau, lô A vào ngưỡng cảnh báo (mặc định 7 ngày) và hiện lên danh sách lô sắp hết hạn.
Chỗ dễ sai nhất
Chiến lược xuất không phải phương pháp tính giá vốn
FIFO ở đây là thứ tự bóc lô: lô nào rời kệ trước. Nó không nói gì về số tiền gắn với hộp sữa đó.
Giá vốn là một cấu hình riêng, khai ở màn Giá vốn, và chỉ có hai lựa chọn: bình quân gia quyền hoặc định mức. Đổi chiến lược xuất không làm giá vốn đổi theo, và đổi phương pháp giá vốn không làm thứ tự bóc lô đổi theo.
Hai lô ngang nhau thì hệ thống xét lần lượt từng khóa cho tới khi phân định được, nên kết quả luôn giải thích được và lặp lại được. Lô không khai hạn dùng luôn xếp sau các lô có hạn dùng.