PRD: Bổ sung hàng
| Module | Kho | PRD ID | PRD-RPL-001 |
| Trạng thái | Chưa tạo item | FEAT | RPL |
| Epic | — | Plane | — |
| Ngày | 2026-07-13 | Phiên bản | v1.0 |
| Gói | @nx/inventory | URD | RPL |
| Surface | Client · Chủ/QL | ||
| Phụ trách | Phát Nguyễn | ||
Bổ sung hàng là gì
Bổ sung hàng (Replenishment) là màn gợi ý đặt hàng trên trang Client: danh sách những mặt hàng cần đặt lại, kèm số lượng đề nghị đặt cho từng mặt hàng.
Nó chạy trên tồn của các kho (InventoryLocation) thuộc một chi nhánh (Merchant), và trả lời hai câu: hôm nay cần đặt gì, và vốn của quán đang nằm ở nhóm hàng nào. Đây là công cụ gợi ý. Nó không tự lập đơn mua hàng, và không chặn thao tác nào của chủ merchant.
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ữCon số mà toàn bộ tính năng này so sánh là khả dụng.
Vì sao một ngưỡng gõ tay là không đủ
Một ngưỡng sắp hết hàng gõ tay cho từng mục kho là công cụ thô sơ nhất để biết khi nào cần nhập thêm hàng, vì nó là một con số tĩnh. Nó không biết mặt hàng đang bán nhanh hay chậm, không biết nhà cung cấp giao trong hai ngày hay hai tuần. Quán bán 20 ly một ngày và quán bán 200 ly một ngày cùng nhận cảnh báo ở mức 10 lon sữa, dù một bên còn nửa ngày là hết, một bên còn cả tuần.
Bổ sung hàng thay con số tĩnh đó bằng một con số động: đặt hàng lại khi tồn chỉ còn đủ bán tới lúc chuyến hàng tiếp theo về, cộng một khoản đệm cho những hôm bán vọt hoặc nhà cung cấp giao trễ. Dữ liệu để tính đã nằm sẵn trong hệ thống. Tốc độ bán lấy từ lịch sử bán hàng, thời gian giao lấy từ bản ghi nhà cung cấp - mặt hàng.
Đi kèm là câu thứ hai mà chủ merchant nào cũng hỏi: trong hàng trăm mặt hàng, mặt hàng nào đáng để mất công theo dõi. Phân nhóm ABC trả lời bằng giá trị tiêu thụ, tức số lượng bán nhân giá vốn. Mục đích ở đây là kiểm soát số vốn đang nằm chết trong kho, không phải xem mặt hàng nào ra doanh số đẹp.
Một mặt hàng từ đầu tới cuối
Sữa lon. Cửa sổ lịch sử 30 ngày. Nhà cung cấp ưu tiên giao trung bình 3 ngày, lâu nhất 5 ngày. Quy cách đóng gói 24 lon một thùng, số lượng đặt tối thiểu 2 thùng.
| Con số | Lấy từ đâu | Giá trị |
|---|---|---|
| Bán trung bình một ngày | lịch sử bán 30 ngày | 20 |
| Bán nhiều nhất một ngày | cùng cửa sổ đó | 35 |
| Thời gian giao trung bình | lịch sử nhận hàng thật | 3 ngày |
| Thời gian giao lâu nhất | lịch sử nhận hàng thật | 5 ngày |
| Tồn an toàn (Safety Stock) | (35 x 5) - (20 x 3) | 115 |
| Điểm đặt hàng lại (Reorder Point) | (20 x 3) + 115 | 175 |
- Khả dụng còn 200: mặt hàng không vào danh sách Cần đặt hàng.
- Khả dụng rơi xuống 170: mặt hàng vào danh sách, vì 170 đã dưới 175.
- Cần bổ sung 30 lon, nhưng số lượng đề nghị đặt hiện 2 thùng (48 lon), vì luôn làm tròn lên theo quy cách đóng gói và số lượng đặt tối thiểu.
- Quản lý kho gõ tay tồn an toàn 50: điểm đặt hàng lại tính lại thành 110. Con số gõ tay luôn thắng con số công thức tính ra.
Chỗ dễ sai nhất
Thiếu dữ liệu thì để trống, không bịa một con số
Mặt hàng có dưới 14 ngày phát sinh bán, hoặc chưa nhà cung cấp nào khai thời gian giao, thì dòng đó không hiện con số nào. Nó hiện đúng lý do đang thiếu: "Chưa đủ lịch sử bán", "Chưa khai thời gian giao".
Lấy thời gian giao bằng 0 cho mặt hàng chưa khai, hay lấy tốc độ bán từ ba ngày dữ liệu, đều cho ra một con số trông có vẻ khoa học mà không ai kiểm được. Merchant tin theo và đặt sai.
Hệ quả: dòng thiếu thời gian giao mang sẵn một lối tắt mở thẳng màn nhà cung cấp của mặt hàng đó, để merchant khai ngay rồi quay lại.