PRD: Đồng bộ đa kênh
| Module | Kho | PRD ID | PRD-SYN-001 |
| Trạng thái | Chưa tạo item | FEAT | SYN |
| Epic | — | Plane | — |
| Ngày | 2026-07-13 | Phiên bản | v1.0 |
| Gói | @nx/inventory | URD | SYN |
| Surface | BackendClient · Chủ/QL | ||
| Phụ trách | Phát Nguyễn | ||
Đồng bộ đa kênh là gì
Merchant nối gian hàng của mình trên một sàn thương mại điện tử vào BANA thành một kênh bán bên ngoài (External Channel). Từ lúc đó, BANA là nơi duy nhất quyết định gian hàng còn bao nhiêu hàng để bán.
Mỗi kênh bên ngoài rút hàng từ đúng một kho (InventoryLocation) của một chi nhánh (Merchant). Kênh không có tồn riêng: nó chỉ là nơi trưng bày con số của cùng một mục kho.
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ữSàn nhận đúng con số khả dụng, trừ tiếp khoản đệm (Buffer) nếu merchant có đặt.
Vì sao phải có một nguồn tồn kho duy nhất
Một quán hoặc một merchant bán lẻ hiếm khi chỉ bán ở một chỗ. Cùng một thùng hàng trong kho được chào bán ở quầy, trên ứng dụng giao đồ ăn, và trên gian hàng của sàn thương mại điện tử. Kho chỉ có một, nhưng số hàng đang được hứa ở ba nơi cùng lúc.
Hai lỗi kinh điển xảy ra khi không có một nguồn tồn kho duy nhất. Thứ nhất là bán quá tay: khách trên sàn đặt món mà hàng đã bán hết ở quầy từ sáng, merchant phải hủy đơn và chịu phạt điểm uy tín. Thứ hai là tồn ảo: hai phần mềm cùng ghi tồn lên một gian hàng, mỗi bên ghi một con số theo cách hiểu của mình, và con số hiển thị cuối cùng không đúng với bất kỳ ai.
BANA giải bài này bằng cách nhận vai trò nguồn tồn kho duy nhất. Mọi kênh bán, kênh nội bộ tại quầy lẫn gian hàng trên sàn, đều rút hàng từ cùng một bảng tồn. Đơn từ sàn về thì đi đúng đường bán hàng như một đơn tại quầy, không có đường tắt.
Một mặt hàng từ đầu tới cuối
Mặt hàng Y tại kho A. Kênh gán vào kho A. Khoản đệm ban đầu 0.
| Việc xảy ra | Thực có | Đang giữ | Khả dụng | Khoản đệm | Số đẩy lên sàn |
|---|---|---|---|---|---|
| Ghép mặt hàng Y với gian hàng | 50 | 5 | 45 | 0 | 45 |
| Đặt khoản đệm 3 cho Y | 50 | 5 | 45 | 3 | 42 |
| Thu ngân bán 2 đơn vị tại quầy | 48 | 5 | 43 | 3 | 40 |
| Khách trên sàn đặt 2 đơn vị | 46 | 5 | 41 | 3 | 38 |
| Merchant lỡ đặt khoản đệm 60 | 46 | 5 | 41 | 60 | 0 |
- Số đẩy lên sàn là khả dụng trừ khoản đệm, chặn dưới ở 0. Không bao giờ đẩy số âm.
- 5 đơn vị đang giữ cho đơn tại quầy không bao giờ được chào bán trên sàn.
- Đơn từ sàn đi đúng đường của một đơn tại quầy: giữ tồn, trừ tồn, ghi sổ biến động. Xong là BANA đẩy lại con số mới.
Chỗ dễ sai nhất
Tồn chỉ chảy một chiều, từ BANA xuống sàn
BANA có đọc con số tồn đang hiển thị trên gian hàng về, nhưng chỉ để đối chiếu với con số mình vừa đẩy và bật cảnh báo khi lệch. Con số đọc về không bao giờ được ghi vào bảng tồn của BANA.
Ghi ngược lại là mở đường cho tồn ảo: sàn nói còn 99, BANA ghi theo 99, rồi lần đẩy sau BANA lại tính ra 42 và ghi đè. Hai bên đá nhau, và con số cuối cùng không đúng với ai cả.
Hệ quả: người dùng sửa tồn thẳng trên trang quản trị của sàn thì con số đó chỉ sống tới lần đẩy kế tiếp. Muốn đổi con số trên sàn thì đổi tồn hoặc đổi khoản đệm trong BANA.