Quản lý Kho
Module quản lý kho tổng công ty — nhập hàng từ NCC, lưu trữ theo zone/slot, xuất hàng cho đơn hàng DMS, theo dõi batch/lô & hạn sử dụng. Hỗ trợ phân phối thuần + sản xuất nhẹ. Liên kết 2 chiều với DMS module.
Module Inventory giải quyết 4 vấn đề cốt lõi
Không biết trong kho còn bao nhiêu hàng
Ghi sổ, Excel → số liệu không chính xác, chênh lệch thực tế. NV bán tạo đơn nhưng kho hết hàng.
Tồn kho real-time theo zone/slot
Mỗi lần nhập/xuất cập nhật tồn kho ngay. NV bán tạo đơn → kho tự động trừ → cảnh báo thiếu hàng.
Hàng hết hạn, không truy xuất được nguồn gốc
Không biết lô nào nhập khi nào, hết hạn khi nào. Bán hàng hết hạn → phạt, mất uy tín.
Batch tracking + hạn sử dụng
Mỗi lô hàng có mã batch + ngày sản xuất + hạn sử dụng. Xuất theo FIFO. Cảnh báo sắp hết hạn.
Xuất nhập kho thủ công, dễ sai
Ghi giấy → gõ lại Excel → sai số lượng, sai mã hàng. Không ai kiểm chứng được.
Phiếu nhập/xuất điện tử + liên kết DMS
Đơn hàng DMS duyệt → tự tạo phiếu xuất kho. NV kho xác nhận → cập nhật tồn kho tự động.
Chênh lệch kho thực tế vs sổ sách
Kiểm kê thủ công tốn thời gian, phát hiện chênh lệch quá muộn. Mất cắp, thất thoát không phát hiện.
Kiểm kê định kỳ + điều chỉnh có duyệt
Tạo phiếu kiểm kê → so sánh thực tế vs sổ sách → điều chỉnh (cần duyệt) → giải thích chênh lệch.
6 Nhóm chức năng chính
| # | Nhóm chức năng | Mô tả |
|---|---|---|
| 1 | Kho & Vị trí | Quản lý kho chính, chia zones/slots. Cấu hình khu vực lưu trữ theo loại hàng. |
| 2 | Nhập kho | Nhập từ NCC, nhập trả từ điểm bán, nhập thành phẩm từ sản xuất nhẹ. Gắn batch/lô. |
| 3 | Xuất kho | Xuất cho đơn DMS (tự động), xuất NVL cho sản xuất, xuất khác. FIFO theo batch. |
| 4 | Tồn kho & Batch | Tồn kho real-time theo zone+slot+batch. Cảnh báo hết hàng, sắp hết hạn. Liên kết DMS. |
| 5 | Kiểm kê & Điều chỉnh | Kiểm kê định kỳ, so sánh thực tế/sổ sách, điều chỉnh có duyệt. |
| 6 | Cross-Module | Liên kết 2 chiều DMS (đơn hàng↔xuất kho), Materials (NVL→sản xuất), Reports. |
Vị trí trong hệ thống FieldFlow
flowchart LR
Core[Core Module
SP, Users, Company] --> Inventory[Inventory Module
Quản lý Kho]
Inventory --> DMS[DMS Module
Đơn hàng → Xuất kho]
Inventory --> Materials[Materials Module
NVL → Sản xuất nhẹ]
Inventory --> Reports[Reports Module
Báo cáo nhập xuất]
DMS -.->|Tồn kho điểm bán
(sync 2 chiều)| Inventory
Materials -.->|Thành phẩm
nhập lại kho| Inventory
style Inventory fill:#d4a73a,stroke:#b8860b,stroke-width:3px,color:#1a1814
style Core fill:#e8e4d8,stroke:#7a7468,stroke-width:2px,color:#1a1814
style DMS fill:#e8e4d8,stroke:#7a7468,stroke-width:2px,color:#1a1814
style Materials fill:#e8e4d8,stroke:#7a7468,stroke-width:2px,color:#1a1814
style Reports fill:#e8e4d8,stroke:#7a7468,stroke-width:2px,color:#1a1814
- Inventory → DMS: DMS tạo đơn → gọi Inventory check tồn → nếu đủ → duyệt đơn → Inventory tự tạo phiếu xuất
- DMS → Inventory: NV nhập tồn kho tại điểm bán → Inventory tổng hợp snapshot → báo cáo tổng tồn (kho + điểm bán)
- Materials → Inventory: Sản xuất nhẹ nhập NVL từ kho → xuất thành phẩm nhập lại kho
5 Vai trò & Mức độ sử dụng Inventory
| Vai trò | Mức độ sử dụng | Công việc chính trong Inventory |
|---|---|---|
| 🔴 Admin | Toàn quyền | Cấu hình hệ thống kho, quản lý users kho |
| 🟡 Manager | Toàn quyền | Báo cáo tồn kho, duyệt điều chỉnh, xem cảnh báo |
| 🔵 Supervisor | Xem | Xem tồn kho, báo cáo nhập xuất trong địa bàn |
| 🟢 Sales Rep | Xem tồn kho | Xem tồn kho kho tổng (biết có hàng trước khi tạo đơn) |
| 🟠 Warehouse | Quản lý chính | Nhập/xuất kho, kiểm kê, quản lý vị trí, xác nhận phiếu |
Ví dụ thực tế: Công ty ABC (3 NV Kho, 8 NV Sales)
- Mở app → xem tồn kho hiện tại theo zone
- Khu A (Bia): Tiger 45 thùng, Lager 30 thùng, Saigon 20 thùng
- Khu B (Nước): Aquafina 50 thùng, Lavie 25 thùng
- Cảnh báo: Saigon Export Zone C sắp hết hạn (còn 5 ngày)
- Tạo phiếu nhập kho → chọn NCC "Heineken VN"
- Nhập: Bia Tiger x 50 thùng, Batch: TGR-260601, HSD: 01/12/2026
- Chọn zone: Khu A, Slot A-03
- Xác nhận → tồn kho Tiger tăng lên 95 thùng
- 5 đơn hàng duyệt → tạo 5 phiếu xuất tự động
- NV kho duyệt từng phiếu → chọn batch xuất (FIFO)
- Xác nhận xuất → cập nhật tồn kho real-time
- Tổng xuất: Tiger 15 thùng, Lager 10 thùng, Aquafina 8 thùng
- Phiếu xuất NVL: 50 thùng Tiger + 50 thùng Aquafina → khu đóng gói
- Nhập lại thành phẩm: 50 combo "Bia + Nước" → Khu D
- Tồn kho cập nhật: trừ NVL, cộng thành phẩm
- Nhập: 50 thùng từ NCC, 5 thùng trả từ điểm bán
- Xuất: 33 thùng bán, 100 thùng NVL sản xuất, nhập lại 50 combo
- Chênh lệch: 0 (khớp sổ sách)
NV kho (🟠 Warehouse) sử dụng module nhiều nhất — nhập/xuất/kiểm kê hàng ngày. Manager (🟡) giám sát qua báo cáo. Sales Rep (🟢) chỉ xem tồn để biết có hàng trước khi tạo đơn.
9 Entity — ER Diagram
erDiagram
Warehouse ||--o{ WarehouseZone : "contains"
WarehouseZone ||--o{ WarehouseSlot : "contains"
Warehouse ||--o{ StockItem : "tracks stock in"
WarehouseSlot ||--o{ StockItem : "stores"
Product ||--o{ StockItem : "tracked for"
Batch ||--o{ StockItem : "belongs to"
StockMovement ||--o{ StockMovementItem : "contains"
Product ||--o{ StockMovementItem : "moved"
Batch ||--o{ StockMovementItem : "from/to"
WarehouseSlot ||--o{ StockMovementItem : "placed in"
Stocktake ||--o{ StocktakeItem : "contains"
Product ||--o{ StocktakeItem : "counted"
Batch ||--o{ StocktakeItem : "verified"
WarehouseSlot ||--o{ StocktakeItem : "located"
Warehouse {
uuid id "PK"
text name "Tên kho"
text code "Mã kho"
text address "Địa chỉ"
text status "active/inactive"
}
WarehouseZone {
uuid id "PK"
uuid warehouse_id "FK"
text name "Tên khu (A,B,C...)"
text zone_type "Loại hàng"
text description "Mô tả"
}
WarehouseSlot {
uuid id "PK"
uuid zone_id "FK"
text code "Mã slot A-01"
text slot_type "Loại slot"
integer max_capacity "SL tối đa"
}
Batch {
uuid id "PK"
uuid company_id "FK"
text batch_code "Mã lô TGR-260601"
date manufacture_date "Ngày SX"
date expiry_date "Hạn sử dụng"
uuid supplier_id "FK NCC"
text notes "Ghi chú"
}
StockItem {
uuid id "PK"
uuid warehouse_id "FK"
uuid slot_id "FK"
uuid product_id "FK"
uuid batch_id "FK"
decimal quantity "SL hiện tại"
decimal reserved_qty "SL đã giữ"
timestamp last_updated "Cập nhật"
}
StockMovement {
uuid id "PK"
text movement_number "Mã phiếu"
enum movement_type "Loại nhập/xuất"
enum status "Trạng thái"
uuid created_by "FK User"
uuid approved_by "FK User"
text reference "Tham chiếu (mã đơn DMS)"
text notes "Ghi chú"
timestamp movement_date "Ngày nhập/xuất"
}
StockMovementItem {
uuid id "PK"
uuid movement_id "FK"
uuid product_id "FK"
uuid batch_id "FK"
uuid slot_id "FK"
decimal quantity "SL"
text notes "Ghi chú"
}
Stocktake {
uuid id "PK"
text stocktake_number "Mã kiểm kê"
enum status "Trạng thái"
uuid warehouse_id "FK"
uuid created_by "FK"
uuid approved_by "FK"
date stocktake_date "Ngày kiểm kê"
text notes "Ghi chú"
}
StocktakeItem {
uuid id "PK"
uuid stocktake_id "FK"
uuid product_id "FK"
uuid batch_id "FK"
uuid slot_id "FK"
decimal system_qty "SL sổ sách"
decimal actual_qty "SL thực tế"
decimal diff_qty "Chênh lệch"
text diff_reason "Lý do"
}
Chi tiết từng Entity
1. Warehouse (Kho)
| Trường | Kiểu dữ liệu | Ví dụ | Bắt buộc |
|---|---|---|---|
| name | text | "Kho chính ABC" | ✅ Bắt buộc |
| code | text | "WH-MAIN" | ✅ Bắt buộc |
| address | text | "456 Lê Duẩn, Q. Bình Thạnh" | ✅ Bắt buộc |
| status | enum | active, inactive | ✅ Bắt buộc |
| description | text | "Kho chính, chứa thành phẩm" | — Tùy chọn |
MVP: 1 kho duy nhất. Kho chia thành nhiều Zone → mỗi Zone có nhiều Slot. Ví dụ: Khu A (Bia) → A-01, A-02. Khu B (Nước) → B-01, B-02. Multi-warehouse = Phase 3.
2. WarehouseZone (Khu vực kho)
| Trường | Kiểu dữ liệu | Ví dụ | Bắt buộc |
|---|---|---|---|
| warehouse_id | FK Warehouse | UUID | ✅ Bắt buộc |
| name | text | "Khu A — Bia các loại" | ✅ Bắt buộc |
| zone_type | enum | finished_goods, raw_materials, returns, production | ✅ Bắt buộc |
| description | text | "Khu chứa bia, nhiệt độ mát" | — Tùy chọn |
3. WarehouseSlot (Vị trí kho)
| Trường | Kiểu dữ liệu | Ví dụ | Bắt buộc |
|---|---|---|---|
| zone_id | FK Zone | UUID | ✅ Bắt buộc |
| code | text | "A-01" | ✅ Bắt buộc |
| slot_type | enum | shelf, pallet, floor, cold | ✅ Bắt buộc |
| max_capacity | integer | 100 (thùng) | — Tùy chọn |
4. Batch (Mã lô hàng)
| Trường | Kiểu dữ liệu | Ví dụ | Bắt buộc |
|---|---|---|---|
| batch_code | text | "TGR-260601" | ✅ Bắt buộc |
| manufacture_date | date | 2026-06-01 | ✅ Bắt buộc |
| expiry_date | date | 2026-12-01 | ✅ Bắt buộc |
| supplier_id | FK Supplier | UUID NCC | ✅ Bắt buộc |
| notes | text | "Lô gia công đặc biệt" | — Tùy chọn |
5. StockItem (Tồn kho hiện tại)
| Trường | Kiểu dữ liệu | Ví dụ | Bắt buộc |
|---|---|---|---|
| warehouse_id | FK Warehouse | UUID | ✅ Bắt buộc |
| slot_id | FK Slot | UUID (A-01) | ✅ Bắt buộc |
| product_id | FK Product | UUID (Bia Tiger) | ✅ Bắt buộc |
| batch_id | FK Batch | UUID | ✅ Bắt buộc |
| quantity | decimal | 45 (thùng) | ✅ Bắt buộc |
| reserved_qty | decimal | 10 (đã giữ cho đơn) | ✅ Bắt buộc |
| last_updated | timestamp | tự động | — Tự động |
Khi đơn DMS duyệt → hệ thống giữ hàng (reserved_qty tăng). Khi xuất kho xong → quantity giảm, reserved_qty giảm. Tồn khả dụng = quantity - reserved_qty.
6. StockMovement (Phiếu nhập/xuất)
| Trường | Kiểu dữ liệu | Ví dụ | Bắt buộc |
|---|---|---|---|
| movement_number | text | "PN-20260605-001" (tự sinh) | ✅ Bắt buộc |
| movement_type | enum | in_supplier, in_return, in_production, out_order, out_production, out_other, transfer, adjustment | ✅ Bắt buộc |
| status | enum | draft, pending, confirmed, completed, cancelled | ✅ Bắt buộc |
| created_by | FK User | UUID NV Kho | ✅ Bắt buộc |
| movement_date | timestamp | 2026-06-05 08:00 | ✅ Bắt buộc |
| approved_by | FK User | UUID Manager | — Tùy chọn |
| reference | text | "DH-20260605-003" (mã đơn DMS) | — Tùy chọn |
| notes | text | "Giao xe tải NCC Sáng" | — Tùy chọn |
7. StockMovementItem (Chi tiết phiếu)
| Trường | Kiểu dữ liệu | Ví dụ | Bắt buộc |
|---|---|---|---|
| movement_id | FK StockMovement | UUID | ✅ Bắt buộc |
| product_id | FK Product | UUID (Bia Tiger) | ✅ Bắt buộc |
| batch_id | FK Batch | UUID (TGR-260601) | ✅ Bắt buộc |
| slot_id | FK Slot | UUID (A-01) | ✅ Bắt buộc |
| quantity | decimal | 50 (thùng) | ✅ Bắt buộc |
| notes | text | "Kiểm tra bao bì" | — Tùy chọn |
8. Stocktake (Phiếu kiểm kê)
| Trường | Kiểu dữ liệu | Ví dụ | Bắt buộc |
|---|---|---|---|
| stocktake_number | text | "KK-20260605-001" (tự sinh) | ✅ Bắt buộc |
| status | enum | draft, counting, completed, adjusted | ✅ Bắt buộc |
| warehouse_id | FK Warehouse | UUID | ✅ Bắt buộc |
| created_by | FK User | UUID NV Kho | ✅ Bắt buộc |
| stocktake_date | date | 2026-06-05 | ✅ Bắt buộc |
| approved_by | FK User | UUID Manager | — Tùy chọn |
| notes | text | "Kiểm kê cuối tháng" | — Tùy chọn |
9. StocktakeItem (Chi tiết kiểm kê)
| Trường | Kiểu dữ liệu | Ví dụ | Bắt buộc |
|---|---|---|---|
| stocktake_id | FK Stocktake | UUID | ✅ Bắt buộc |
| product_id | FK Product | UUID | ✅ Bắt buộc |
| batch_id | FK Batch | UUID | ✅ Bắt buộc |
| slot_id | FK Slot | UUID (A-01) | ✅ Bắt buộc |
| system_qty | decimal | 45 (sổ sách) | ✅ Bắt buộc |
| actual_qty | decimal | 43 (đếm thực tế) | ✅ Bắt buộc |
| diff_qty | decimal | -2 (thiếu 2) | ✅ Tự tính |
| diff_reason | text | "Bao bì rách, hỏng 2 thùng" | — Tùy chọn |
Enums (Danh sách giá trị)
| Enum | Giá trị | Ý nghĩa |
|---|---|---|
| ZoneType | finished_goods, raw_materials, returns, production | Khu thành phẩm, NVL, hàng trả, sản xuất |
| SlotType | shelf, pallet, floor, cold | Giá kệ, pallet, sàn, lạnh |
| MovementType | in_supplier, in_return, in_production, out_order, out_production, out_other, transfer, adjustment | Loại phiếu: nhập NCC, nhập trả, nhập SX, xuất đơn, xuất SX, xuất khác, chuyển, điều chỉnh |
| MovementStatus | draft, pending, confirmed, completed, cancelled | Nháp, chờ duyệt, xác nhận, hoàn thành, hủy |
| StocktakeStatus | draft, counting, completed, adjusted | Nháp, đang đếm, xong, đã điều chỉnh |
Dữ liệu mẫu: 1 công ty, 3 NV kho, 45 SKUs
| Dữ liệu | 1 ngày | 1 tháng | Ghi chú |
|---|---|---|---|
| Stock Items | ~150-200 | ~150-200 | 45 SP × ~4 batch trung bình. Không đổi nhiều/ngày |
| Stock Movements | ~8-15 | ~200-350 | Nhập NCC 1-2, xuất đơn 5-10, xuất SX 0-3 |
| Movement Items | ~30-60 | ~800-1,500 | 3-5 SP/phiếu |
| Batches | ~1-3 mới | ~20-50 | Mỗi lần nhập NCC = 1-2 batch mới |
| Stocktakes | 0 (hàng tuần) | ~4-8 | Kiểm kê 1 lần/tuần hoặc cuối tháng |
| Stocktake Items | 0 | ~200-400 | Đếm 45-50 SP/lần kiểm kê |
Ai được làm gì trong Module Inventory?
✅ = Toàn quyền | 👁️ = Chỉ xem | ✏️ = Tạo/Sửa | — = Không truy cập
| Chức năng | 🔴 Admin | 🟡 Manager | 🔵 Supervisor | ⚪ Staff | 🟢 Sales Rep | 🟠 Warehouse |
|---|---|---|---|---|---|---|
| 🏭 KHO & VỊ TRÍ | ||||||
| Quản lý kho (tạo/sửa) | ✅ | ✅ | — | — | — | — |
| Quản lý zone/slot (tạo/sửa) | ✅ | ✅ | — | — | — | ✏️ |
| Xem cấu trúc kho | ✅ | ✅ | 👁️ | — | — | ✅ |
| 📥 NHẬP KHO | ||||||
| Nhập kho từ NCC | ✅ | ✅ | — | — | — | ✏️ |
| Nhập kho trả hàng từ điểm bán | ✅ | ✅ | — | — | — | ✏️ |
| Nhập thành phẩm từ sản xuất | ✅ | ✅ | — | — | — | ✏️ |
| Xem phiếu nhập | ✅ | ✅ | 👁️ | — | — | ✅ |
| 📤 XUẤT KHO | ||||||
| Xuất kho cho đơn DMS | ✅ | ✅ | — | — | — | ✏️ |
| Xuất NVL cho sản xuất | ✅ | ✅ | — | — | — | ✏️ |
| Xuất kho khác | ✅ | ✅ | — | — | — | ✏️ |
| Duyệt phiếu xuất | ✅ | ✅ | — | — | — | — |
| Xem phiếu xuất | ✅ | ✅ | 👁️ | — | — | ✅ |
| 📦 TỒN KHO & BATCH | ||||||
| Xem tồn kho hiện tại | ✅ | ✅ | 👁️ | — | 👁️ | ✅ |
| Xem chi tiết theo batch | ✅ | ✅ | 👁️ | — | — | ✅ |
| Cảnh báo hết hàng | ✅ | ✅ | ✅ | — | 👁️ | ✅ |
| Cảnh báo sắp hết hạn | ✅ | ✅ | ✅ | — | — | ✅ |
| 📋 KIỂM KÊ & ĐIỀU CHỈNH | ||||||
| Tạo phiếu kiểm kê | ✅ | ✅ | — | — | — | ✏️ |
| Nhập số lượng thực tế | ✅ | ✅ | — | — | — | ✏️ |
| Duyệt điều chỉnh | ✅ | ✅ | — | — | — | — |
| Xem kết quả kiểm kê | ✅ | ✅ | 👁️ | — | — | ✅ |
| 📊 BÁO CÁO | ||||||
| Báo cáo tồn kho | ✅ | ✅ | ✅ | — | — | 👁️ |
| Báo cáo nhập xuất | ✅ | ✅ | ✅ | — | — | 👁️ |
| Báo cáo sắp hết hạn | ✅ | ✅ | ✅ | — | — | ✅ |
| Xuất file (Excel/PDF) | ✅ | ✅ | ✅ | — | — | — |
Giải thích theo vai trò
Được làm: Nhập/xuất kho, quản lý vị trí, kiểm kê, xem batch
Giới hạn: Không duyệt phiếu xuất, không cấu hình kho, không xóa data
Nền tảng: Web (chính) + Mobile (quét barcode)
Được làm: Toàn quyền, duyệt điều chỉnh/xuất kho, báo cáo, cấu hình
Giới hạn: Không nhập/xuất trực tiếp (giao NV kho)
Nền tảng: Web (chính) + Mobile (xem nhanh)
Được làm: Xem tồn kho khả dụng (biết có hàng trước tạo đơn)
Giới hạn: Không xem chi tiết batch/slot, không nhập/xuất
Nền tảng: Mobile (chỉ xem)
6 Quy trình nghiệp vụ chính
Flow 1: Nhập kho từ NCC
NV kho nhận hàng
Chọn NCC, SP, SL
Mã lô + HSD + Ngày SX
Zone → Slot (A-01)
Cập nhật tồn kho
Ai: NV Kho | Tần suất: 1-3 lần/ngày | Kết quả: Tồn kho tăng, Batch mới được tạo nếu chưa có
Flow 2: Xuất kho cho đơn DMS (CORE FLOW — Tự động)
flowchart TD
DMS[DMS: Đơn hàng được duyệt] --> Event[publish: dms.order.approved]
Event --> CreateMovement[Inventory: Tự tạo phiếu xuất
Loại: out_order]
CreateMovement --> FIFO[FIFO: Chọn batch nhập sớm nhất
còn hàng + chưa hết hạn]
FIFO --> Reserve[Giữ hàng: reserved_qty tăng]
Reserve --> WaitKho[NV Kho nhận thông báo
Phiếu xuất chờ xác nhận]
WaitKho --> Confirm{NV Kho xác nhận}
Confirm -->|Đúng SL| Pick[Hàng lấy từ Slot
Cập nhật phiếu]
Confirm -->|Sai SL| Adjust[Điều chỉnh SL
Ghi lý do]
Pick --> Complete[Xuất xong
quantity giảm, reserved_qty giảm]
Adjust --> Complete
Complete --> Publish[publish: inventory.movement.created]
Publish --> DMSUpdate[DMS: Cập nhật trạng thái đơn
→ Đang giao]
style DMS fill:#5eead4,stroke:#0f766e,color:#1a1814
style Complete fill:#6ee7b7,stroke:#059669
style Publish fill:#d4a73a,stroke:#b8860b,color:#1a1814
Ai: Hệ thống (tự động) + NV Kho (xác nhận) | Tần suất: 5-15 lần/ngày | FIFO: batch nhập sớm nhất xuất trước
Flow 3: Nhập kho trả hàng từ điểm bán
Event → Inventory
Loại: in_return
Kiểm tra tình trạng
Zone hàng trả
Tồn kho hàng trả tăng
Hàng trả không trộn với hàng tốt. Nhập vào zone_type=returns. Cần kiểm tra trước khi quyết định: nhập lại (nếu tốt) / hủy (nếu hỏng) / xuất khác.
Flow 4: Xuất NVL cho sản xuất nhẹ + Nhập thành phẩm
flowchart LR
subgraph XuatNVL["Bước 1: Xuất NVL"]
X1[Tạo phiếu xuất
out_production] --> X2[Chọn NVL + SL
Zone NVL]
X2 --> X3[Xác nhận
Tồn NVL giảm]
end
subgraph SX["Bước 2: Sản xuất"]
S1[Đóng gói / Gia công] --> S2[50 combo
Bia + Nước]
end
subgraph NhapTP["Bước 3: Nhập thành phẩm"]
N1[Tạo phiếu nhập
in_production] --> N2[SP thành phẩm + Batch mới]
N2 --> N3[Xác nhận
Tồn thành phẩm tăng]
end
XuatNVL --> SX --> NhapTP
style XuatNVL fill:#fbbf24,stroke:#b45309,color:#1a1814
style SX fill:#e8e4d8,stroke:#7a7468,color:#1a1814
style NhapTP fill:#6ee7b7,stroke:#059669,color:#1a1814
Ví dụ: Đóng gói combo bia + nước, смеш nước, đóng gói lại. Xuất NVL từ kho → gia công → nhập lại thành phẩm với batch mới. Không phải sản xuất nặng (không cần BOM phức tạp).
Flow 5: Kiểm kê định kỳ
Chọn zone / toàn kho
SP + SL sổ sách
Nhập SL thực tế từng SP
So sánh thực tế vs sổ
Manager duyệt điều chỉnh
Cập nhật tồn kho thực tế
Ai: NV Kho (đếm) + Manager (duyệt) | Tần suất: 1 lần/tuần hoặc cuối tháng | Chênh lệch phải giải thích lý do: hỏng, mất, sai đếm...
Flow 6: Cảnh báo & Báo cáo (Tự động)
Tồn khả dụng = 0
Threshold cấu hình được
Batch còn < 30 ngày
Xuất ưu tiên trước
Tổng nhập, xuất, tồn
Chênh lệch, cảnh báo
Khi tồn khả dụng < threshold → inventory.stock.low → DMS (không cho tạo đơn SP đó) + Manager (notification). Khi batch sắp hết hạn → inventory.batch.expiring → cảnh báo xuất ưu tiên.
3 Phase: MVP → Nâng cao → Đầy đủ
gantt
title Lộ trình Module Inventory
dateFormat WW
axisFormat Tuần %U
section MVP (Phase 1)
Kho + Zone + Slot CRUD :m1, 03, 1w
Nhập kho (NCC, trả, SX) :m2, 03, 2w
Xuất kho (DMS auto, SX, khác) :m3, 04, 2w
Batch tracking + FIFO :m4, 04, 1w
Tồn kho real-time :m5, 05, 1w
Kiểm kê + Điều chỉnh :m6, 05, 1w
Liên kết DMS (2 chiều) :m7, 05, 1w
section Nâng cao (Phase 2)
Barcode scan :p1, 12, 1w
Bàn giao ca :p2, 12, 1w
Daily stock-in report :p3, 13, 1w
Xuất ưu tiên sắp hết hạn :p4, 13, 1w
Dashboard kho :p5, 14, 1w
section Đầy đủ (Phase 3)
Multi-warehouse :f1, 22, 2w
Batch traceability full :f2, 23, 1w
AI dự báo nhập hàng :f3, 24, 1w
Tích hợp ERP kế toán :f4, 24, 1w
Chi tiết từng Phase
| # | Chức năng | Mô tả | Dependency |
|---|---|---|---|
| 1 | Quản lý kho | Tạo/sửa kho chính, xem cấu trúc | Core |
| 2 | Quản lý Zone | Tạo khu A/B/C/D theo loại hàng | Core |
| 3 | Quản lý Slot | Tạo vị trí A-01, A-02 trong zone | Core |
| 4 | Nhập kho NCC | Tạo phiếu nhập + gắn batch + chọn slot | Core, Products |
| 5 | Nhập kho trả hàng | Nhận hàng trả từ DMS → zone trả | DMS |
| 6 | Nhập thành phẩm SX | Nhập thành phẩm từ sản xuất nhẹ | Core |
| 7 | Xuất kho đơn DMS (tự động) | Đơn duyệt → tự tạo phiếu xuất + FIFO | DMS |
| 8 | Xuất NVL sản xuất | Xuất nguyên liệu cho sản xuất nhẹ | Core |
| 9 | Xuất kho khác | Xuất lý do khác + ghi chú | Core |
| 10 | Batch tracking | Mã lô + NSX + HSD + NCC | Core |
| 11 | FIFO tự động | Xuất batch nhập sớm nhất trước | Core |
| 12 | Tồn kho real-time | Xem tồn theo zone + slot + batch | Core |
| 13 | Tồn khả dụng | quantity - reserved_qty = số có thể bán | DMS |
| 14 | Cảnh báo hết hàng | Tồn khả dụng < threshold → thông báo | Core |
| 15 | Cảnh báo sắp hết hạn | Batch còn < 30 ngày HSD → cảnh báo | Core |
| 16 | Kiểm kê | Tạo phiếu → đếm thực tế → so sánh | Core |
| 17 | Điều chỉnh (có duyệt) | Manager duyệt chênh lệch → cập nhật | Core |
| 18 | Liên kết 2 chiều DMS | Đơn→xuất kho, tồn điểm bán→snapshot | DMS |
- Barcode scan — Quét mã vạch tìm SP nhanh, check nhập/xuất bằng scan
- Bàn giao ca — NV kho смен确认 số lượng khi đổi ca
- Daily stock-in report — Thống kê nhập kho hàng ngày theo mã hàng → điều chỉnh
- Xuất ưu tiên sắp hết hạn — FIFO ưu tiên batch sắp hết hạn trước batch cũ hơn
- Dashboard kho — Tổng quan tồn, nhập xuất hôm nay, cảnh báo, top SP
- Multi-warehouse — Nhiều kho, chuyển kho giữa các vị trí
- Batch traceability full — Truy xuất nguồn gốc batch → khách hàng cuối
- AI dự báo nhập hàng — Dựa trên lịch sử bán → đề xuất nhập hàng trước khi hết
- Tích hợp ERP kế toán — Đồng bộ phiếu nhập xuất với phần mềm kế toán
| MVP (Phase 1) | Nâng cao (Phase 2) | Đầy đủ (Phase 3) | |
|---|---|---|---|
| Chức năng | 18 | +5 = 23 | +4 = 27 |
| Kho | 1 kho + zones/slots | Giống MVP | Multi-warehouse + chuyển kho |
| Nhập/Xuất | 3 loại nhập + 3 loại xuất | + Barcode scan | + Tích hợp ERP |
| Batch | Tracking + FIFO | + Ưu tiên hết hạn | + Traceability full |
| Liên kết | DMS 2 chiều | + Dashboard kho | + AI dự báo |
| Timeline | Tuần 3-5 | Tuần 12-14 | Sau tuần 22 |
Không bao gồm
Công thức sản xuất = Materials module
CRUD NCC cơ bản. Mua hàng = Materials module
Công nợ = Debt-Tracking module
Tài sản/máy móc = Materials module Phase sau
Thuộc DMS module (VisitInventory). Inventory chỉ sync tổng hợp.
NV kho cần mạng khi nhập/xuất. Offline = Phase 3.
Setup kho ban đầu
| Bước | Ai làm | Cần gì | Kết quả |
|---|---|---|---|
| 1 | Manager | Tên kho, địa chỉ | Kho chính tạo xong |
| 2 | Manager | Danh sách khu (A: Bia, B: Nước, C: Khác, D: Trả hàng) | 4+ zones tạo xong |
| 3 | Manager | Số lượng slot mỗi zone (A-01 → A-10, B-01 → B-08...) | Slots tạo xong |
| 4 | Manager | Danh sách SP từ Core module (đã có sẵn) | SP sẵn sàng gán tồn kho |
| 5 | Manager | Threshold cảnh báo hết hàng (VD: 10 thùng) | Cảnh báo tự động khi tồn < 10 |
| 6 | NV Kho | Nhập tồn kho ban đầu (phiếu nhập adjustment) | Tồn kho ban đầu = thực tế |
| 7 | Manager | Tạo tài khoản NV kho (Core module) | NV kho đăng nhập được |
Nhập tồn kho ban đầu = kiểm kê lần đầu. NV kho đếm toàn bộ hàng trong kho → tạo phiếu nhập adjustment cho từng SP + batch → Manager duyệt. Sau bước này, sổ sách = thực tế.
Cần xác nhận trước khi triển khai
Cần xác nhận
| # | Câu hỏi | Giải thích | Gợi ý |
|---|---|---|---|
| 1 | Kho chia bao nhiêu zone? | Ảnh hưởng cấu trúc slot và UI | 4 zone: Thành phẩm, NVL, Hàng trả, Sản xuất |
| 2 | Barcode/QR đã có trên bao bì chưa? | Quét mã cần SP có sẵn barcode | Nếu chưa → dùng mã nội bộ (tạo trong hệ thống) |
| 3 | Nhà cung cấp cần quản lý chi tiết đến đâu? | CRUD cơ bản hay đầy đủ (hợp đồng, công nợ NCC) | MVP: CRUD cơ bản. NCC chi tiết = Materials module |
| 4 | Sản xuất nhẹ gồm những gì cụ thể? | Đóng gói combo? Gia công? Trộn? | Đóng gói combo (bia+nước), mix, repack |
| 5 | Kiểm kê bao lâu 1 lần? | Hàng tuần / hàng tháng / khi cần | Hàng tuần cho DN nhỏ. Hàng tháng cho lớn hơn. |
Cần quyết định trước khi triển khai
| # | Quyết định | Options | Khuyến nghị |
|---|---|---|---|
| 1 | Threshold cảnh báo hết hàng | Cố định (VD: 10) / Theo SP (mỗi SP khác nhau) | Theo SP — mỗi SP cấu hình riêng |
| 2 | Xuất kho cần duyệt không? | Tự động (đơn DMS duyệt = xuất) / NV kho xác nhận thêm | NV kho xác nhận thêm — tránh sai sót |
| 3 | Cảnh báo hết hạn trước bao lâu? | 15 ngày / 30 ngày / 60 ngày / Theo SP | 30 ngày mặc định, cấu hình theo SP |
| 4 | Batch code ai tạo? | NV kho nhập tay / Hệ thống tự sinh / Lấy từ NCC | Lấy từ NCC nếu có, NV kho nhập nếu không |
Trước / Sau khi có Module Inventory
| Công việc | Trước (Thủ công) | Sau (FieldFlow) |
|---|---|---|
| Nhập hàng NCC | Ghi giấy → gõ Excel → hay sai, quên | Tạo phiếu điện tử → batch tự gắn → tồn cập nhật ngay |
| Xuất hàng cho đơn | NV kho nhận giấy → đi lấy → hay nhầm SP | Đơn DMS duyệt → phiếu xuất tự tạo → FIFO gợi ý batch |
| Xem tồn kho | Mở Excel → số liệu cũ, không real-time | Xem real-time: theo zone, slot, batch, khả dụng |
| Theo dõi hạn sử dụng | Nhớ trong đầu → hay quên → bán hàng hết hạn | Tự động cảnh báo 30 ngày trước → xuất ưu tiên |
| Kiểm kê | Đếm tay → so Excel → chênh lệch không giải thích được | Phiếu kiểm kê → so sánh tự động → điều chỉnh có duyệt |
| Báo cáo | Tổng hợp Excel cuối tuần → chậm, sai | Báo cáo real-time: nhập xuất tồn, batch, cảnh báo |
Thuật ngữ
| Thuật ngữ | Giải thích |
|---|---|
| Zone | Khu vực trong kho (Khu A, B, C). Chia theo loại hàng: thành phẩm, NVL, hàng trả, sản xuất. |
| Slot | Vị trí cụ thể trong zone (A-01, A-02). Nơi đặt hàng hóa. |
| Batch / Lô | Mã lô hàng. Theo dõi nguồn gốc, ngày sản xuất, hạn sử dụng. |
| FIFO | First In First Out — Nhập trước xuất trước. Batch cũ xuất trước batch mới. |
| Tồn khả dụng | quantity - reserved_qty. Số hàng thực sự có thể bán. |
| reserved_qty | Số lượng đã "giữ" cho đơn hàng đã duyệt nhưng chưa xuất kho. |
| Stocktake / Kiểm kê | Đếm số lượng thực tế trong kho, so sánh với sổ sách. |
| Phiếu xuất tự động | Đơn DMS duyệt → Inventory tự tạo phiếu xuất. NV kho chỉ xác nhận. |
FieldFlow — Inventory Module: Quản lý Kho — Tháng 6/2026
← Quay lại Tổng quan Dự án