Module 03 — Inventory

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.

6
Nhóm chức năng
9
Entity
6
Workflow
3
Phase
Giới thiệu

Module Inventory giải quyết 4 vấn đề cốt lõi

Vấn đề 1

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.

Giải pháp

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.

Vấn đề 2

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.

Giải pháp

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.

Vấn đề 3

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.

Giải pháp

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.

Vấn đề 4

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.

Giải pháp

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ăngMô tả
1Kho & 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.
2Nhập khoNhậ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ô.
3Xuất khoXuất cho đơn DMS (tự động), xuất NVL cho sản xuất, xuất khác. FIFO theo batch.
4Tồn kho & BatchTồ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.
5Kiểm kê & Điều chỉnhKiểm kê định kỳ, so sánh thực tế/sổ sách, điều chỉnh có duyệt.
6Cross-ModuleLiê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
Liên kết 2 chiều với DMS
  • 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
Đối tượng sử dụng

5 Vai trò & Mức độ sử dụng Inventory

Vai tròMức độ sử dụngCông việc chính trong Inventory
🔴 AdminToàn quyềnCấu hình hệ thống kho, quản lý users kho
🟡 ManagerToàn quyềnBáo cáo tồn kho, duyệt điều chỉnh, xem cảnh báo
🔵 SupervisorXemXem tồn kho, báo cáo nhập xuất trong địa bàn
🟢 Sales RepXem tồn khoXem tồn kho kho tổng (biết có hàng trước khi tạo đơn)
🟠 WarehouseQuản lý chínhNhậ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)

7h00 — Bắt đầu ca
NV Kho Bình kiểm tra tồn kho đầu ngày
  • 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)
8h00 — Nhập hàng NCC
Xe tải NCC giao 50 thùng bia Tiger
  • 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
9h00-16h00 — Xuất hàng theo đơn DMS
NV Sales tạo đơn → kho tự động nhận phiếu xuất
  • 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
15h00 — Sản xuất nhẹ
Xuất NVL đóng gói 50 combo bia + nước
  • 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
17h00 — Tổng kết
Báo cáo nhập xuất trong ngày
  • 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 = người dùng chính

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.

Thiết kế Dữ liệu

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ườngKiểu dữ liệuVí dụBắt buộc
nametext"Kho chính ABC"✅ Bắt buộc
codetext"WH-MAIN"✅ Bắt buộc
addresstext"456 Lê Duẩn, Q. Bình Thạnh"✅ Bắt buộc
statusenumactive, inactive✅ Bắt buộc
descriptiontext"Kho chính, chứa thành phẩm"— Tùy chọn
1 kho chính, chia zones/slots

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ườngKiểu dữ liệuVí dụBắt buộc
warehouse_idFK WarehouseUUID✅ Bắt buộc
nametext"Khu A — Bia các loại"✅ Bắt buộc
zone_typeenumfinished_goods, raw_materials, returns, production✅ Bắt buộc
descriptiontext"Khu chứa bia, nhiệt độ mát"— Tùy chọn

3. WarehouseSlot (Vị trí kho)

TrườngKiểu dữ liệuVí dụBắt buộc
zone_idFK ZoneUUID✅ Bắt buộc
codetext"A-01"✅ Bắt buộc
slot_typeenumshelf, pallet, floor, cold✅ Bắt buộc
max_capacityinteger100 (thùng)— Tùy chọn

4. Batch (Mã lô hàng)

TrườngKiểu dữ liệuVí dụBắt buộc
batch_codetext"TGR-260601"✅ Bắt buộc
manufacture_datedate2026-06-01✅ Bắt buộc
expiry_datedate2026-12-01✅ Bắt buộc
supplier_idFK SupplierUUID NCC✅ Bắt buộc
notestext"Lô gia công đặc biệt"— Tùy chọn

5. StockItem (Tồn kho hiện tại)

TrườngKiểu dữ liệuVí dụBắt buộc
warehouse_idFK WarehouseUUID✅ Bắt buộc
slot_idFK SlotUUID (A-01)✅ Bắt buộc
product_idFK ProductUUID (Bia Tiger)✅ Bắt buộc
batch_idFK BatchUUID✅ Bắt buộc
quantitydecimal45 (thùng)✅ Bắt buộc
reserved_qtydecimal10 (đã giữ cho đơn)✅ Bắt buộc
last_updatedtimestamptự động— Tự động
⚠️ reserved_qty = "đã giữ"

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ườngKiểu dữ liệuVí dụBắt buộc
movement_numbertext"PN-20260605-001" (tự sinh)✅ Bắt buộc
movement_typeenumin_supplier, in_return, in_production, out_order, out_production, out_other, transfer, adjustment✅ Bắt buộc
statusenumdraft, pending, confirmed, completed, cancelled✅ Bắt buộc
created_byFK UserUUID NV Kho✅ Bắt buộc
movement_datetimestamp2026-06-05 08:00✅ Bắt buộc
approved_byFK UserUUID Manager— Tùy chọn
referencetext"DH-20260605-003" (mã đơn DMS)— Tùy chọn
notestext"Giao xe tải NCC Sáng"— Tùy chọn

7. StockMovementItem (Chi tiết phiếu)

TrườngKiểu dữ liệuVí dụBắt buộc
movement_idFK StockMovementUUID✅ Bắt buộc
product_idFK ProductUUID (Bia Tiger)✅ Bắt buộc
batch_idFK BatchUUID (TGR-260601)✅ Bắt buộc
slot_idFK SlotUUID (A-01)✅ Bắt buộc
quantitydecimal50 (thùng)✅ Bắt buộc
notestext"Kiểm tra bao bì"— Tùy chọn

8. Stocktake (Phiếu kiểm kê)

TrườngKiểu dữ liệuVí dụBắt buộc
stocktake_numbertext"KK-20260605-001" (tự sinh)✅ Bắt buộc
statusenumdraft, counting, completed, adjusted✅ Bắt buộc
warehouse_idFK WarehouseUUID✅ Bắt buộc
created_byFK UserUUID NV Kho✅ Bắt buộc
stocktake_datedate2026-06-05✅ Bắt buộc
approved_byFK UserUUID Manager— Tùy chọn
notestext"Kiểm kê cuối tháng"— Tùy chọn

9. StocktakeItem (Chi tiết kiểm kê)

TrườngKiểu dữ liệuVí dụBắt buộc
stocktake_idFK StocktakeUUID✅ Bắt buộc
product_idFK ProductUUID✅ Bắt buộc
batch_idFK BatchUUID✅ Bắt buộc
slot_idFK SlotUUID (A-01)✅ Bắt buộc
system_qtydecimal45 (sổ sách)✅ Bắt buộc
actual_qtydecimal43 (đếm thực tế)✅ Bắt buộc
diff_qtydecimal-2 (thiếu 2)✅ Tự tính
diff_reasontext"Bao bì rách, hỏng 2 thùng"— Tùy chọn

Enums (Danh sách giá trị)

EnumGiá trịÝ nghĩa
ZoneTypefinished_goods, raw_materials, returns, productionKhu thành phẩm, NVL, hàng trả, sản xuất
SlotTypeshelf, pallet, floor, coldGiá kệ, pallet, sàn, lạnh
MovementTypein_supplier, in_return, in_production, out_order, out_production, out_other, transfer, adjustmentLoạ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
MovementStatusdraft, pending, confirmed, completed, cancelledNháp, chờ duyệt, xác nhận, hoàn thành, hủy
StocktakeStatusdraft, counting, completed, adjustedNháp, đang đếm, xong, đã điều chỉnh

Dữ liệu mẫu: 1 công ty, 3 NV kho, 45 SKUs

Dữ liệu1 ngày1 thángGhi chú
Stock Items~150-200~150-20045 SP × ~4 batch trung bình. Không đổi nhiều/ngày
Stock Movements~8-15~200-350Nhập NCC 1-2, xuất đơn 5-10, xuất SX 0-3
Movement Items~30-60~800-1,5003-5 SP/phiếu
Batches~1-3 mới~20-50Mỗi lần nhập NCC = 1-2 batch mới
Stocktakes0 (hàng tuần)~4-8Kiểm kê 1 lần/tuần hoặc cuối tháng
Stocktake Items0~200-400Đếm 45-50 SP/lần kiểm kê
Bảng Phân quyền

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ò

🟠 Warehouse — Người dùng chính

Đượ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)

🟡 Manager — Giám sát

Đượ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)

🟢 Sales Rep — Xem tồn

Đượ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)

Luồng Nghiệp vụ

6 Quy trình nghiệp vụ chính

Flow 1: Nhập kho từ NCC

1. Xe tải đến
NV kho nhận hàng
2. Tạo phiếu nhập
Chọn NCC, SP, SL
3. Gắn Batch
Mã lô + HSD + Ngày SX
4. Chọn vị trí
Zone → Slot (A-01)
5. Xác nhận
Cập nhật tồn kho
Ai & Tần suất

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
Luồng quan trọng nhất — Liên kết DMS ↔ Inventory

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

1. DMS: Đơn trả được duyệt
Event → Inventory
2. Tạo phiếu nhập trả
Loại: in_return
3. NV Kho nhận hàng
Kiểm tra tình trạng
4. Chọn vị trí
Zone hàng trả
5. Xác nhận
Tồn kho hàng trả tăng
Hàng trả nhập vào Zone riê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
Mô hình: Phân phối + Sản xuất nhẹ

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ỳ

1. Tạo phiếu
Chọn zone / toàn kho
2. Hệ thống tạo list
SP + SL sổ sách
3. NV kho đếm
Nhập SL thực tế từng SP
4. Chênh lệch?
So sánh thực tế vs sổ
5. Gửi duyệt
Manager duyệt điều chỉnh
6. Điều chỉnh
Cập nhật tồn kho thực tế
Ai & Tần suấ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)

🔴
Hết hàng

Tồn khả dụng = 0
Threshold cấu hình được

🟡
Sắp hết hạn

Batch còn < 30 ngày
Xuất ưu tiên trước

📊
Báo cáo cuối ngày

Tổng nhập, xuất, tồn
Chênh lệch, cảnh báo

Event-driven

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.

Lộ trình Phát triể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

Phase 1 — MVP (Tuần 3-5, sau Core)
18 chức năng — đủ để quản lý kho thực tế
#Chức năngMô tảDependency
1Quản lý khoTạo/sửa kho chính, xem cấu trúcCore
2Quản lý ZoneTạo khu A/B/C/D theo loại hàngCore
3Quản lý SlotTạo vị trí A-01, A-02 trong zoneCore
4Nhập kho NCCTạo phiếu nhập + gắn batch + chọn slotCore, Products
5Nhập kho trả hàngNhận hàng trả từ DMS → zone trảDMS
6Nhập thành phẩm SXNhập thành phẩm từ sản xuất nhẹCore
7Xuất kho đơn DMS (tự động)Đơn duyệt → tự tạo phiếu xuất + FIFODMS
8Xuất NVL sản xuấtXuất nguyên liệu cho sản xuất nhẹCore
9Xuất kho khácXuất lý do khác + ghi chúCore
10Batch trackingMã lô + NSX + HSD + NCCCore
11FIFO tự độngXuất batch nhập sớm nhất trướcCore
12Tồn kho real-timeXem tồn theo zone + slot + batchCore
13Tồn khả dụngquantity - reserved_qty = số có thể bánDMS
14Cảnh báo hết hàngTồn khả dụng < threshold → thông báoCore
15Cảnh báo sắp hết hạnBatch còn < 30 ngày HSD → cảnh báoCore
16Kiểm kêTạo phiếu → đếm thực tế → so sánhCore
17Điều chỉnh (có duyệt)Manager duyệt chênh lệch → cập nhậtCore
18Liên kết 2 chiều DMSĐơn→xuất kho, tồn điểm bán→snapshotDMS
Phase 2 — Nâng cao (Tuần 12-14)
5 chức năng — Tăng hiệu quả
  • 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
Phase 3 — Đầy đủ (Sau tuần 22)
4 chức năng — Hệ thống hoàn chỉnh
  • 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
So sánh nhanh
MVP (Phase 1)Nâng cao (Phase 2)Đầy đủ (Phase 3)
Chức năng18+5 = 23+4 = 27
Kho1 kho + zones/slotsGiống MVPMulti-warehouse + chuyển kho
Nhập/Xuất3 loại nhập + 3 loại xuất+ Barcode scan+ Tích hợp ERP
BatchTracking + FIFO+ Ưu tiên hết hạn+ Traceability full
Liên kếtDMS 2 chiều+ Dashboard kho+ AI dự báo
TimelineTuần 3-5Tuần 12-14Sau tuần 22

Không bao gồm

❌ BOM phức tạp
Công thức sản xuất = Materials module
❌ Quản lý NCC chi tiết
CRUD NCC cơ bản. Mua hàng = Materials module
❌ Thanh toán/Nợ
Công nợ = Debt-Tracking module
❌ Quản lý thiết bị
Tài sản/máy móc = Materials module Phase sau
❌ Tồn kho điểm bán
Thuộc DMS module (VisitInventory). Inventory chỉ sync tổng hợp.
❌ Offline mode
NV kho cần mạng khi nhập/xuất. Offline = Phase 3.
Thiết lập lần đầu

Setup kho ban đầu

BướcAi làmCần gìKết quả
1ManagerTên kho, địa chỉKho chính tạo xong
2ManagerDanh sách khu (A: Bia, B: Nước, C: Khác, D: Trả hàng)4+ zones tạo xong
3ManagerSố lượng slot mỗi zone (A-01 → A-10, B-01 → B-08...)Slots tạo xong
4ManagerDanh sách SP từ Core module (đã có sẵn)SP sẵn sàng gán tồn kho
5ManagerThreshold cảnh báo hết hàng (VD: 10 thùng)Cảnh báo tự động khi tồn < 10
6NV KhoNhập tồn kho ban đầu (phiếu nhập adjustment)Tồn kho ban đầu = thực tế
7ManagerTạo tài khoản NV kho (Core module)NV kho đăng nhập được
Bước 6 quan trọng nhất

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âu hỏi cho đối tác

Cần xác nhận trước khi triển khai

Cần xác nhận

#Câu hỏiGiải thíchGợi ý
1Kho chia bao nhiêu zone?Ảnh hưởng cấu trúc slot và UI4 zone: Thành phẩm, NVL, Hàng trả, Sản xuất
2Barcode/QR đã có trên bao bì chưa?Quét mã cần SP có sẵn barcodeNếu chưa → dùng mã nội bộ (tạo trong hệ thống)
3Nhà 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
4Sả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
5Kiểm kê bao lâu 1 lần?Hàng tuần / hàng tháng / khi cầnHà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 địnhOptionsKhuyến nghị
1Threshold cảnh báo hết hàngCố định (VD: 10) / Theo SP (mỗi SP khác nhau)Theo SP — mỗi SP cấu hình riêng
2Xuất kho cần duyệt không?Tự động (đơn DMS duyệt = xuất) / NV kho xác nhận thêmNV kho xác nhận thêm — tránh sai sót
3Cảnh báo hết hạn trước bao lâu?15 ngày / 30 ngày / 60 ngày / Theo SP30 ngày mặc định, cấu hình theo SP
4Batch code ai tạo?NV kho nhập tay / Hệ thống tự sinh / Lấy từ NCCLấy từ NCC nếu có, NV kho nhập nếu không
Phụ lục

Trước / Sau khi có Module Inventory

Công việcTrước (Thủ công)Sau (FieldFlow)
Nhập hàng NCCGhi giấy → gõ Excel → hay sai, quênTạo phiếu điện tử → batch tự gắn → tồn cập nhật ngay
Xuất hàng cho đơnNV 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 khoMở Excel → số liệu cũ, không real-timeXem real-time: theo zone, slot, batch, khả dụng
Theo dõi hạn sử dụngNhớ trong đầu → hay quên → bán hàng hết hạnTự độ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 đượcPhiếu kiểm kê → so sánh tự động → điều chỉnh có duyệt
Báo cáoTổng hợp Excel cuối tuần → chậm, saiBá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
ZoneKhu 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.
SlotVị 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.
FIFOFirst In First Out — Nhập trước xuất trước. Batch cũ xuất trước batch mới.
Tồn khả dụngquantity - reserved_qty. Số hàng thực sự có thể bán.
reserved_qtySố 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