Module 02 — DMS

Quản lý Phân phối

Module nghiệp vụ cốt lõi của FieldFlow — quản lý đội ngũ đi thị trường, điểm bán, tồn kho tại điểm bán, đơn hàng và GPS tracking. Giải quyết 4 vấn đề: không biết NV có đi làm không, không biết tồn kho điểm bán, đơn hàng chậm sai sót, không có báo cáo tức thời.

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

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

Vấn đề 1

Không biết nhân viên có đi làm không

NV đi thị trường nhưng không ai kiểm soát. Gọi điện thì "đang đi", nhưng thực tế có thể ở nhà.

Giải pháp

GPS Check-in tại điểm bán

NV phải check-in tại điểm bán với GPS. Bán kính 200m → tự động xác minh. Vượt quá → force check-in + lý do.

Vấn đề 2

Không biết tồn kho tại điểm bán

Điểm bán còn bao nhiêu hàng? Không biết. Chốt đơn xong mới phát hiện hết hàng.

Giải pháp

Nhập tồn kho tại điểm bán

Mỗi lần ghé thăm, NV nhập tồn kho từng sản phẩm. Hệ thống snapshot → cảnh báo hết hàng.

Vấn đề 3

Đơn hàng chậm, sai sót

Ghi giấy, gọi điện về công ty → chậm, sai sót, mất thông tin.

Giải pháp

Tạo đơn hàng trên app

Chọn SP + SL → tự tính tiền → gửi ngay. Supervisor duyệt real-time → kho chuẩn bị.

Vấn đề 4

Không có báo cáo tức thời

Hôm nay bao nhiêu đơn? Doanh số thế nào? Chờ cuối tuần tổng hợp Excel.

Giải pháp

Dashboard real-time

Tổng quan hôm nay: NV active, điểm đã ghé, đơn hàng, doanh số → cập nhật real-time.

Vị trí trong hệ thống FieldFlow

flowchart LR
    Core[Core Module
Tài khoản & Phân quyền] --> DMS[DMS Module
Quản lý Phân phối] DMS --> Inventory[Inventory Module
Quản lý Kho] DMS --> Debt[Debt-Tracking Module
Công nợ] DMS --> Reports[Reports Module
Báo cáo tổng hợp] style DMS fill:#d4a73a,stroke:#b8860b,stroke-width:3px,color:#1a1814 style Core fill:#e8e4d8,stroke:#7a7468,stroke-width:2px,color:#1a1814 style Inventory fill:#e8e4d8,stroke:#7a7468,stroke-width:2px,color:#1a1814 style Debt fill:#e8e4d8,stroke:#7a7468,stroke-width:2px,color:#1a1814 style Reports fill:#e8e4d8,stroke:#7a7468,stroke-width:2px,color:#1a1814
Core Module → DMS → Các module khác
  • Core: Cung cấp tài khoản, phân quyền cho toàn bộ hệ thống
  • DMS: Module nghiệp vụ chính — đi tuyến, check-in, tồn kho, đơn hàng
  • Inventory: Đơn hàng từ DMS → xuất kho
  • Debt-Tracking: Đơn hàng giao xong → theo dõi công nợ
  • Reports: Tổng hợp dữ liệu từ DMS, Inventory, Attendance, Debt-Tracking
Đối tượng sử dụng

6 Vai trò & Mức độ sử dụng DMS

Vai tròMức độ sử dụngCông việc chính trong DMS
🔴 AdminToàn quyềnQuản lý hệ thống, cấu hình, phân quyền
🟡 ManagerToàn quyềnDashboard, báo cáo, duyệt đơn, quản lý tuyến/địa bàn
🔵 SupervisorQuản lýGiám sát đội ngũ, duyệt đơn, quản lý tuyến trong địa bàn mình
⚪ StaffKhông dùng
🟢 Sales RepTạo/Nhập liệuĐi tuyến, check-in, nhập tồn kho, chụp hình, tạo đơn, trả hàng
🟠 WarehouseXem đơnXem đơn hàng cần xuất kho

Ví dụ thực tế: Công ty ABC (8 NV Sales)

8h00 — Bắt đầu ngày
NV A mở app → xem tuyến hôm nay
8 điểm bán Quận 1: Tạp hóa Minh An, Cửa hàng Bích Liên, Nhà thuốc Thảo, Siêu thị mini Tuấn, Tạp hóa Hương, Quán cafe Thu, Cửa hàng tiện lợi Long, Nhà hàng Hải Sản.
8h15 — Điểm 1
Check-in Tạp hóa Minh An
  • Nhấn "Check-in" → GPS xác nhận trong 200m → ✅ OK
  • Nhập tồn kho: Bía Tiger 15 thùng, Bía Lager 8 thùng, Nước tương 24 chai → Highlight SP hết hàng
  • Chụp hình: Kệ hàng, Trưng bày, Mặt tiền (3 hình)
  • Tạo đơn: 3 thùng Bía Tiger → Tự tính 3 × 450,000 = 1,350,000 → Gửi đơn
  • Ghi chú: "Chủ nói hết bia, sẽ đặt thêm"
  • Nhấn "Check-out" → Thời gian: 12 phút
8h42 — Điểm 2
Check-in Cửa hàng Bích Liên
Lặp lại: nhập tồn kho → chụp hình → tạo đơn hoặc không → check-out
17h00 — Tổng kết ngày
8 điểm ghé, 5 đơn hàng, 2.5 triệu doanh số
  • Visits: 8/8 điểm (100%)
  • Đơn hàng: 5 đơn bán, 1 đơn trả
  • Doanh số: 2,500,000 VNĐ
  • GPS logs: 96 lần (cứ 5-10 phút/log)
  • Lộ trình: Manager xem bản đồ → thấy toàn bộ route
⏱️ Mục tiêu: 5-15 phút/điểm bán

NV ghé trung bình 8-10 điểm/ngày. Mỗi điểm 5-15 phút → tổng 40-150 phút (trừ thời gian di chuyển).

Thiết kế Dữ liệu

10 Entity — ER Diagram

erDiagram
    Territory ||--o{ Outlet : "contains"
    Territory ||--o{ Route : "contains"
    Territory }o--|| User : "supervised by"
    Route ||--o{ RouteOutlet : "has"
    Outlet ||--o{ RouteOutlet : "in"
    Route }o--|| User : "assigned to"
    Outlet ||--o{ Visit : "visited in"
    Visit ||--o{ VisitInventory : "records"
    Visit ||--o{ VisitPhoto : "captures"
    Visit ||--o{ SalesOrder : "creates"
    SalesOrder ||--o{ OrderItem : "contains"
    User ||--o{ GPSLog : "tracked"
    User ||--o{ Visit : "performs"
    Product ||--o{ VisitInventory : "tracked in"
    Product ||--o{ OrderItem : "sold in"

    Territory {
        uuid id "PK ✱"
        text name "Tên địa bàn ✱"
        uuid supervisor_id "FK User ✱"
        text status "active/inactive ✱"
        text description "Mô tả"
        json district_codes "Mã quận/huyện"
        json boundary_geojson "Ranh giới bản đồ (Phase 2)"
    }

    Outlet {
        uuid id "PK ✱"
        text name "Tên cửa hàng ✱"
        text address "Địa chỉ ✱"
        decimal lat "Vĩ độ GPS ✱"
        decimal lng "Kinh độ GPS ✱"
        uuid territory_id "FK Territory ✱"
        text outlet_type "Loại hình ✱"
        text status "active/paused/closed ✱"
        text contact_name "Tên người liên hệ"
        text contact_phone "SĐT"
        boolean approved "Đã duyệt"
        uuid created_by "FK User"
        json photos "Ảnh (Phase 2)"
        timestamp last_visit_at "Lần ghé cuối (Phase 2)"
        decimal avg_monthly_revenue "Doanh số TB (Phase 2)"
    }

    Route {
        uuid id "PK ✱"
        text name "Tên tuyến ✱"
        uuid territory_id "FK Territory ✱"
        uuid user_id "FK User (Sales Rep) ✱"
        json day_of_week "Ngày chạy [1,3,5] ✱"
        boolean is_active "Đang chạy ✱"
        text description "Mô tả"
        json optimized_order "Tự động tối ưu (Phase 2)"
        integer estimated_duration "Thời gian ước tính (Phase 2)"
    }

    RouteOutlet {
        uuid route_id "FK Route ✱"
        uuid outlet_id "FK Outlet ✱"
        integer sort_order "Thứ tự ✱"
    }

    Visit {
        uuid id "PK ✱"
        uuid user_id "FK User ✱"
        uuid outlet_id "FK Outlet ✱"
        uuid route_id "FK Route ✱"
        timestamp checkin_time "Thời gian check-in ✱"
        decimal checkin_lat "Vĩ độ check-in ✱"
        decimal checkin_lng "Kinh độ check-in ✱"
        timestamp checkout_time "Thời gian check-out"
        decimal checkout_lat "Vĩ độ check-out"
        decimal checkout_lng "Kinh độ check-out"
        boolean is_forced "Force check-in"
        text force_reason "Lý do force"
        text notes "Ghi chú"
        integer duration_minutes "Thời lượng"
        decimal visit_score "Đánh giá (Phase 2)"
        text customer_feedback "Phản hồi (Phase 2)"
    }

    VisitInventory {
        uuid visit_id "FK Visit ✱"
        uuid product_id "FK Product ✱"
        decimal quantity "Số lượng ✱"
        text unit "Đơn vị: thùng"
    }

    VisitPhoto {
        uuid visit_id "FK Visit ✱"
        text photo_url "Đường dẫn hình ✱"
        text photo_type "Loại ảnh ✱"
        text caption "Chú thích"
    }

    SalesOrder {
        uuid id "PK ✱"
        text order_number "Mã đơn ✱"
        text order_type "sale/return ✱"
        uuid user_id "FK User ✱"
        uuid outlet_id "FK Outlet ✱"
        uuid visit_id "FK Visit ✱"
        text status "Trạng thái ✱"
        decimal total_amount "Tổng tiền ✱"
        text notes "Ghi chú"
        uuid approved_by "FK User"
        timestamp approved_at "Thời gian duyệt"
        text delivery_notes "Ghi chú giao"
        text delivery_proof_url "Bằng chứng giao (Phase 2)"
        text payment_status "Trạng thái TT (Phase 2)"
        text return_reason "Lý do trả (Phase 2)"
    }

    OrderItem {
        uuid order_id "FK SalesOrder ✱"
        uuid product_id "FK Product ✱"
        decimal quantity "Số lượng ✱"
        decimal unit_price "Giá tại thời điểm ✱"
        decimal total_price "Thành tiền ✱"
    }

    GPSLog {
        uuid user_id "FK User ✱"
        decimal lat "Vĩ độ ✱"
        decimal lng "Kinh độ ✱"
        decimal accuracy "Độ chính xác (m) ✱"
        timestamp recorded_at "Thời gian ghi ✱"
    }
    

Chi tiết từng Entity

1. Territory (Địa bàn)

TrườngKiểu dữ liệuVí dụBắt buộc
nametext"Khu vực Quận 1,3"✅ Bắt buộc
supervisor_idFK UserUUID Supervisor✅ Bắt buộc
statusenumactive, inactive✅ Bắt buộc
descriptiontext"Khu vực trung tâm TP.HCM"— Tùy chọn
district_codesjson["001", "003"] (Quận 1, 3)— Tùy chọn
boundary_geojsonjsonGEOJSON polygonPhase 2

2. Outlet (Điểm bán)

TrườngKiểu dữ liệuVí dụBắt buộc
nametext"Tạp hóa Minh An"✅ Bắt buộc
addresstext"123 Nguyễn Huệ, Q.1"✅ Bắt buộc
latdecimal10.7769✅ Bắt buộc
lngdecimal106.7009✅ Bắt buộc
territory_idFK TerritoryUUID✅ Bắt buộc
outlet_typeenumgrocery, mini_market, pharmacy, restaurant, other✅ Bắt buộc
statusenumactive, paused, closed, pending_approval✅ Bắt buộc
contact_nametext"Anh Minh"— Tùy chọn
contact_phonetext"0901234567"— Tùy chọn
approvedbooleantrue/false— Tùy chọn
created_byFK UserUUID Sales Rep— Tùy chọn
photosjson["url1", "url2"]Phase 2
last_visit_attimestamp2026-06-05 08:15:00Phase 2
avg_monthly_revenuedecimal15,000,000Phase 2

3. Route (Tuyến bán)

TrườngKiểu dữ liệuVí dụBắt buộc
nametext"Tuyến Quận 1 - Sáng"✅ Bắt buộc
territory_idFK TerritoryUUID✅ Bắt buộc
user_idFK UserUUID Sales Rep✅ Bắt buộc
day_of_weekjson[1,3,5] (T2,T4,T6)✅ Bắt buộc
is_activebooleantrue/false✅ Bắt buộc
descriptiontext"Tuyến điểm bán trung tâm"— Tùy chọn
optimized_orderjson[outlet_id1, outlet_id2,...]Phase 2
estimated_durationinteger120 (phút)Phase 2

4. RouteOutlet (Bảng junction)

TrườngKiểu dữ liệuVí dụBắt buộc
route_idFK RouteUUID✅ Bắt buộc
outlet_idFK OutletUUID✅ Bắt buộc
sort_orderinteger1,2,3...✅ Bắt buộc

5. Visit (Lần ghé thăm)

TrườngKiểu dữ liệuVí dụBắt buộc
user_idFK UserUUID Sales Rep✅ Bắt buộc
outlet_idFK OutletUUID✅ Bắt buộc
route_idFK RouteUUID✅ Bắt buộc
checkin_timetimestamp2026-06-05 08:15:00✅ Bắt buộc
checkin_latdecimal10.7769✅ Bắt buộc
checkin_lngdecimal106.7009✅ Bắt buộc
checkout_timetimestamp2026-06-05 08:27:00— Tùy chọn
checkout_latdecimal10.7769— Tùy chọn
checkout_lngdecimal106.7009— Tùy chọn
is_forcedbooleantrue/false— Tùy chọn
force_reasontext"Chợ đông, không ra đường"— Tùy chọn
notestext"Chủ nói hết bia"— Tùy chọn
duration_minutesinteger12— Tùy chọn (tự tính)
visit_scoredecimal8.5/10Phase 2
customer_feedbacktext"Dịch vụ tốt"Phase 2

6. VisitInventory (Tồn kho snapshot)

TrườngKiểu dữ liệuVí dụBắt buộc
visit_idFK VisitUUID✅ Bắt buộc
product_idFK ProductUUID✅ Bắt buộc
quantitydecimal15 (thùng)✅ Bắt buộc
unittext"thùng"✅ Bắt buộc

7. VisitPhoto (Hình ảnh)

TrườngKiểu dữ liệuVí dụBắt buộc
visit_idFK VisitUUID✅ Bắt buộc
photo_urltext"s3://bucket/visit_001.jpg"✅ Bắt buộc
photo_typeenumdisplay, invoice, receipt, other✅ Bắt buộc
captiontext"Kệ hàng chính"— Tùy chọn
⚠️ Tối đa 5 hình/lần ghé

Mỗi visit tối đa 5 hình để tiết kiệm băng thông và storage. NV có thể xóa và chụp lại nếu cần.

8. SalesOrder (Đơn hàng)

TrườngKiểu dữ liệuVí dụBắt buộc
order_numbertext"DH-20260605-001" (tự sinh)✅ Bắt buộc
order_typeenumsale, return✅ Bắt buộc
user_idFK UserUUID Sales Rep✅ Bắt buộc
outlet_idFK OutletUUID✅ Bắt buộc
visit_idFK VisitUUID✅ Bắt buộc
statusenumpending, approved, delivering, completed, cancelled✅ Bắt buộc
total_amountdecimal1,350,000 VNĐ✅ Bắt buộc
notestext"Giao trước 12h"— Tùy chọn
approved_byFK UserUUID Supervisor— Tùy chọn
approved_attimestamp2026-06-05 08:20:00— Tùy chọn
delivery_notestext"Đã giao, chủ ký nhận"— Tùy chọn
delivery_proof_urltext"s3://bucket/delivery_001.jpg"— Tùy chọn (ảnh bằng chứng giao)
payment_statusenumunpaid, paidPhase 2
return_reasontext"Hết hạn sử dụng"Phase 2

9. OrderItem (Chi tiết đơn)

TrườngKiểu dữ liệuVí dụBắt buộc
order_idFK SalesOrderUUID✅ Bắt buộc
product_idFK ProductUUID✅ Bắt buộc
quantitydecimal3 (thùng)✅ Bắt buộc
unit_pricedecimal450,000 VNĐ✅ Bắt buộc
total_pricedecimal1,350,000 VNĐ✅ Bắt buộc

10. GPSLog (Vị trí GPS)

TrườngKiểu dữ liệuVí dụBắt buộc
user_idFK UserUUID✅ Bắt buộc
latdecimal10.7769✅ Bắt buộc
lngdecimal106.7009✅ Bắt buộc
accuracydecimal5 (mét)✅ Bắt buộc
recorded_attimestamp2026-06-05 08:15:00✅ Bắt buộc

Enums (Danh sách giá trị)

EnumGiá trị
TerritoryStatusactive, inactive
OutletTypegrocery, mini_market, pharmacy, restaurant, bar, other
OutletStatusactive, paused, closed, pending_approval
OrderTypesale, return
OrderStatuspending, approved, preparing, delivering, completed, cancelled
VisitPhotoTypedisplay, invoice, receipt, other
DayOfWeek1-7 (1=T2, 7=CN)

Dữ liệu mẫu: 1 công ty, 8-20 NV

Dữ liệu1 ngày1 thángGhi chú
Visits~60-80~1,500-2,000Mỗi NV ghé 8-10 điểm
Inventory records~800-1,200~20,000-30,00010-15 SP/visit
Photos~200-400~5,000-10,0003-5 hình/visit
Orders (bán)~15-30~400-600Không phải visit nào cũng có đơn
Orders (trả)~2-5~50-100~10-15% tổng đơn
GPS logs~800-1,600~20,000-40,000Mỗi NV log mỗi 5-10 phút
Order items~80-150~2,000-4,0004-6 SP/đơn
Bảng Phân quyền

Ai được làm gì trong Module DMS?

✅ = 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
📍 ĐỊA BÀN & TUYẾN
Quản lý địa bàn (CRUD)
Xem địa bàn👁️👁️
Tạo/sửa tuyến✏️
Gán NV vào tuyến✏️
🏪 ĐIỂM BÁN
Danh sách điểm bán👁️
Thêm điểm bán mới✏️✏️
Duyệt điểm bán mới
Import Excel điểm bán✏️
📍 GHÉ THĂM
Check-in/out GPS
Force check-in
Xem lịch sử ghé thăm👁️
📦 TỒN KHO ĐIỂM BÁN
Nhập tồn kho
Xem snapshot tồn kho👁️👁️
Cảnh báo hết hàng👁️👁️
📋 ĐƠN HÀNG
Tạo đơn bán
Tạo đơn trả hàng
Duyệt/từ chối đơn
Cập nhật trạng thái đơn✏️
Xem đơn hàng👁️👁️
Chụp bằng chứng giao✏️✏️
🛰️ GPS TRACKING
Xem vị trí NV real-time
Xem lộ trình đã đi👁️
Log vị trí định kỳ
📊 DASHBOARD
Dashboard tổng quan
Cảnh báo👁️
Báo cáo doanh số
Báo cáo hiệu suất NV
Xuất file (Excel/PDF)
Luồng Nghiệp vụ

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

Flow 1: Setup Địa bàn & Tuyến

1. Tạo địa bàn
"Khu vực Quận 1,3"
2. Gán Supervisor
Chọn NV phụ trách
3. Tạo tuyến
"Tuyến Q1 - Sáng"
4. Thêm điểm bán
Sắp xếp thứ tự
5. Gán NV
Chọn Sales Rep
6. Lịch trình tuần
Ngày nào chạy tuyến nào
Ai & Tần suất

Ai: Manager/Supervisor | Tần suất: 1 lần (và khi mở rộng kinh doanh) | Kết quả: NV mở app thấy tuyến hôm nay

Flow 2: NV Đi Tuyến Hàng Ngày (CORE FLOW)

flowchart TD
    Start[NV mở app] --> ViewRoute[Xem tuyến hôm nay
Danh sách 8 điểm bán theo thứ tự] ViewRoute --> SelectOutlet[Chọn điểm bán đầu tiên
Tạp hóa Minh An] SelectOutlet --> CheckIn{Check-in GPS} CheckIn -->|Trong 200m| CheckInOK[✅ Check-in OK
Tiếp tục nghiệp vụ] CheckIn -->|Ngoài 200m| ForceCheckIn[⚠️ Cảnh báo
Cho phép force check-in] ForceCheckIn --> EnterReason[Nhập lý do
"Chợ đông, không ra đường"] EnterReason --> CheckInOK CheckInOK --> Tasks{Tại điểm bán
4 nghiệp vụ (thứ tự bất kỳ)} Tasks --> Inventory[📦 NHẬP TỒN KHO
Danh sách SP → Nhập SL
Highlight SP hết hàng] Tasks --> Photos[📸 CHỤP HÌNH
Trưng bày, kệ hàng
Tối đa 5 hình] Tasks --> CreateOrder[🛒 TẠO ĐƠN HÀNG
Chọn SP + SL
Tự tính tiền → Gửi] Tasks --> Notes[📝 GHI CHÚ
Text tự do
"Chủ nói hết bia"] Inventory --> CheckOut Photos --> CheckOut CreateOrder --> CheckOut Notes --> CheckOut CheckOut[Nhấn Check-out] --> CalcDuration[Tính thời gian
12 phút] CalcDuration --> NextOutlet[Chuyển điểm tiếp
Lặp lại từ Check-in] NextOutlet --> MorePoints{Còn điểm nào?} MorePoints -->|Có| SelectOutlet MorePoints -->|Không| DaySummary[Tổng kết ngày
8 điểm, 5 đơn, 2.5 triệu] style CheckInOK fill:#6ee7b7,stroke:#059669 style ForceCheckIn fill:#fbbf24,stroke:#b45309 style DaySummary fill:#d4a73a,stroke:#b8860b,color:#1a1814
Mục tiêu: 5-15 phút/điểm bán

Ai: Sales Rep | Tần suất: Hàng ngày | Mục tiêu: 8-10 điểm/ngày, 5-15 phút/điểm

Flow 3: Thêm Điểm Bán Mới Từ Field

1. "Thêm điểm bán"
NV mở app
2. Nhập thông tin
Tên, địa chỉ, loại hình, GPS
3. Chụp mặt tiền
1-2 hình
4. Gửi duyệt
Trạng thái "Chờ duyệt"
5. Supervisor/Manager
Xem → Duyệt hoặc Từ chối
6. Nếu duyệt
Thêm vào tuyến, gán tọa độ

Flow 4: Xử Lý Đơn Hàng (Bán)

1. Đơn từ NV
Hiện trên Dashboard
2. Xem chi tiết
NV nào, điểm bán, SP, SL
3. Phê duyệt
✅ Duyệt / ❌ Từ chối / ✏️ Sửa
4. Kho chuẩn bị
"Đã duyệt" → "Đang giao"
5. Giao xong
Chụp bằng chứng → "Hoàn thành"
Trạng thái: PENDING → APPROVED → PREPARING → DELIVERING → COMPLETED

Ai: Supervisor/Manager duyệt | Tần suất: Hàng ngày | Nếu từ chối: NV nhận thông báo + lý do

Flow 5: Trả Hàng / Đổi Hàng

1. NV tại điểm bán
"Tạo đơn trả hàng"
2. Chọn SP + SL
+ Lý do trả
3. Chụp bằng chứng
Hàng lỗi, bao bì hỏng
4. Gửi duyệt
Supervisor/Manager xem
5. Nếu duyệt
Tạo phiếu nhập kho
Lý do trả: hết hạn sử dụng, hỏng, sai mã, khách không nhận, hàng thừa

Ai: Sales Rep tạo, Supervisor/Manager duyệt | Trạng thái giống đơn bán: PENDING → APPROVED → RETURNING → COMPLETED

Flow 6: Giám Sát Real-time

Tổng quan hôm nay

NV active, điểm đã ghé, đơn hàng, doanh số

Bản đồ

Vị trí tất cả NV real-time

Chi tiết từng NV

Lộ trình, timeline, đơn hàng, hình ảnh

Cảnh báo

Điểm chưa ghé, NV chưa check-out, force check-in, đơn hàng chờ duyệt

Flow 7: Báo Cáo Cuối Ngày (Tự động)

📊
Số NV đi tuyến

8/10

📍
Điểm đã ghé

68/70

📋
Đơn hàng

25 bán, 3 trả

💰
Doanh số

18.5 triệu

⚠️
Cảnh báo

2 điểm chưa ghé

📸
Hình ảnh

342 hình

Tự động tổng hợp 18:00 mỗi ngày

Ai: Hệ thống → Manager/Supervisor | Tần suất: Hàng ngày (18:00) | Gửi: Dashboard + Email

Lộ trình Phát triển

3 Phase: MVP → Nâng cao → Đầy đủ

gantt
    title Lộ trình Module DMS
    dateFormat WW
    axisFormat Tuần %U

    section MVP (Phase 1)
    Quản lý địa bàn              :m1, 01, 2w
    Quản lý điểm bán             :m2, 01, 2w
    Duyệt điểm bán mới           :m3, 01, 1w
    Quản lý tuyến                :m4, 02, 2w
    Check-in/out GPS             :m5, 02, 2w
    Force check-in               :m6, 02, 1w
    Nhập tồn kho                 :m7, 03, 2w
    Cảnh báo hết hàng            :m8, 03, 1w
    Chụp hình                    :m9, 03, 1w
    Tạo đơn hàng                 :m10, 04, 2w
    Tạo đơn trả hàng             :m11, 04, 1w
    Duyệt đơn                    :m12, 04, 2w
    Dashboard tổng quan         :m13, 05, 2w
    GPS tracking                 :m14, 05, 2w
    Báo cáo doanh số             :m15, 06, 2w

    section Nâng cao (Phase 2)
    Offline mode                 :p1, 15, 3w
    Tối ưu tuyến tự động         :p2, 16, 2w
    So sánh tồn kho              :p3, 17, 1w
    Quét mã vạch                 :p4, 17, 1w
    Gợi ý đặt hàng              :p5, 18, 2w
    Xem tuyến trên bản đồ        :p6, 19, 1w
    Phân hạng khách hàng        :p7, 20, 2w

    section Đầy đủ (Phase 3)
    Tích hợp khuyến mãi          :f1, 28, 2w
    AI gợi ý tối ưu tuyến        :f2, 29, 2w
    Phân tích hình ảnh          :f3, 30, 3w
    Tích hợp công nợ            :f4, 33, 2w
    Geo-analytics               :f5, 34, 2w
    

Chi tiết từng Phase

Phase 1 — MVP (Tuần 1-6)
26 chức năng — đủ để vận hành
#Chức năngMô tả
1Quản lý địa bànCRUD địa bàn, gán Supervisor
2Quản lý điểm bánCRUD + Import Excel
3Duyệt điểm bán mớiXem, duyệt, từ chối từ NV
4Quản lý tuyếnTạo, gán NV, lịch trình tuần
5Check-in/out GPS200m bán kính, tự động xác minh
6Force check-inVượt bán kính + nhập lý do
7Nhập tồn khoTại điểm bán, snapshot SP
8Cảnh báo hết hàngHighlight SP = 0
9Chụp hìnhTối đa 5 hình/lần ghé
10Tạo đơn hàng bánChọn SP + SL, tự tính tiền
11Tạo đơn trả hàngChọn SP + SL + lý do
12Ghi chú tại điểm bánText tự do
13Duyệt/từ chối đơnSupervisor duyệt real-time
14Cập nhật trạng thái đơnPending → Approved → Completed
15Chụp bằng chứng giaoĐính kèm đơn hàng
16Dashboard tổng quanManager/Supervisor xem tổng quan
17Bản đồ theo dõi NVVị trí real-time
18Dòng thời gian NVLộ trình đã đi
19Cảnh báoChưa ghé, chưa check-out, force
20Báo cáo doanh sốTổng hợp theo ngày/tuần/tháng
21Báo cáo hiệu suất NVSố điểm ghé, đơn, doanh số
22Báo cáo tồn khoTồn kho tại điểm bán
23Xuất báo cáoExcel/PDF
24Tổng kết ngày cho NV8 điểm, 5 đơn, 2.5 triệu
25Chi tiết giao hàngNotes, by chứng
26GPS trackingVị trí + lộ trình
Phase 2 — Nâng cao (Tuần 15-20)
15 chức năng — Bổ sung tiện ích & hiệu suất
  • Offline mode — Làm việc không mạng, sync khi có mạng
  • Tối ưu tuyến tự động — Theo khoảng cách GPS
  • So sánh tồn kho — So với lần trước (+/-)
  • Quét mã vạch — Barcode/QR code
  • Gợi ý đặt hàng — Dựa trên lịch sử
  • Xem tuyến trên bản đồ — Tất cả điểm
  • Lịch sử check-in — Chi tiết từng lần
  • Thư viện hình ảnh — Lịch sử tất cả hình
  • Báo cáo tần suất — Số lần ghé/tháng
  • Phân hạng khách hàng — A/B/C theo doanh số
  • Xem điểm bán trên bản đồ — Cluster view
  • Tính visit score — Đánh giá tự động
  • Phản hồi khách hàng — Nhận xét từ chủ điểm bán
  • Ranh giới địa bàn — Bản đồ GEOJSON
  • Lịch sử đơn hàng — Chi tiết từng đơn
Phase 3 — Đầy đủ (Tuần 28+)
10 chức năng — Hệ thống hoàn chỉnh
  • Tích hợp khuyến mãi — Trade marketing, CTKM
  • AI gợi ý tối ưu tuyến — Machine learning
  • Phân tích hình ảnh — AI nhận diện trưng bày
  • Route planning tự động — Tự động gán tuyến
  • Tích hợp công nợ — Module Debt-Tracking
  • Báo cáo chi phí — Chi phí bán hàng
  • Dashboard BI — Phân tích nâng cao
  • Tích hợp ERP — Kế toán, SAP, Oracle
  • Multi-warehouse routing — Đa kho
  • Geo-analytics — Phân tích theo vùng

Không bao gồm trong Module DMS

⚠️ Module khác xử lý
  • Quản lý công nợ / thu tiền → Module Debt-Tracking
  • Quản lý kho tổng → Module Inventory
  • Tích hợp ERP / kế toán → Phase 3 hoặc module riêng
  • Quản lý nhân sự / lương → Module HR (chưa có trong lộ trình)
  • Chấm công → Module Attendance
Thiết lập lần đầu

5 Bước để bắt đầu sử dụng

BướcHành độngAi làmKết quả
1Tạo địa bànManager"Khu vực Quận 1,3" + Supervisor phụ trách
2Import/Tạo điểm bánManager/SupervisorExcel hoặc form, gán vào địa bàn
3Tạo tuyếnManager/SupervisorChọn điểm bán, sắp xếp thứ tự, gán NV
4Cấu hình lịch trình tuầnManager/SupervisorTuyến nào chạy ngày nào (T2,T4,T6...)
5Test đi tuyến1 NV testNV test toàn bộ flow từ check-in đến đơn hàng
⏱️ Thời gian thiết lập: 1-2 ngày

Nếu đã có dữ liệu điểm bán (Excel) → Import → 1-2 giờ setup xong. Nếu phải nhập thủ công → 1-2 ngày tùy số lượng điểm bán.

Câu hỏi cần phản hồi

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

❓ Cần xác nhận
  1. 4 loại hình điểm bán có đủ không? (tạp hóa, siêu thị mini, nhà thuốc, nhà hàng, khác) — Cần thêm quán bar, cafe?
  2. Bán kính check-in 200m có phù hợp? Cho cả khu vực chợ đông đúc?
  3. Tối đa 5 hình/lần ghé có đủ? Hay cần tăng lên 10?
  4. NV có cần xem lại tồn kho lần ghé trước không? MVP (không) hay Phase 2 (có)?
  5. Đơn trả hàng có cần phân biệt? Trả nhập kho / trả hủy / đổi hàng?
  6. Bằng chứng giao hàng? Chụp hóa đơn hay ký nhận điện tử?
  7. Lịch trình tuần: 1 tuyến có chạy nhiều ngày/tuần không? (VD: cùng tuyến T2+T4+T6)
❓ Cần quyết định
  1. Offline mode ưu tiên cao không? (VN hay mất mạng thường xuyên)
  2. GPS log mỗi mấy phút? 5 phút vs 10 phút — ảnh hưởng pin + data
  3. Đơn giá: Cố định theo công ty hay theo khu vực/điểm bán?
  4. Tự động duyệt đơn dưới ngưỡng? (VD: đơn < 1 triệu tự động duyệt)
  5. Cần SMS/Email thông báo không? Khi có đơn mới, đơn duyệt...
  6. Limit GPS logs: Giữ bao lâu? 30 ngày / 90 ngày / vĩnh viễn?
  7. Multi-language: Cần tiếng Anh không? (cho NV nước ngoài)

Phụ lục A: Trước/Sau khi có DMS

Công việcTrước (Thủ công)Sau (FieldFlow)
Kiểm soát NV đi tuyếnGọi điện hỏi, tin tưởngGPS real-time, check-in verify
Tồn kho tại điểm bánNV gọi/nhắn tin, ghi giấyNhập trực tiếp trên app, snapshot
Tạo đơn hàngGhi giấy, gọi điện về công tyTạo trên app, tự tính tiền, gửi ngay
Duyệt đơnChờ cuối ngày/giờ chótDuyệt real-time trên dashboard
Báo cáo doanh sốTổng hợp Excel cuối tuầnReal-time + tự động cuối ngày
Phát hiện điểm bán mớiGhi nhớ, báo cáo sauTạo ngay trên app, chờ duyệt
Trả hàngKhông quản lý / ghi giấyTạo đơn trả, chụp bằng chứng, duyệt
Theo dõi lộ trìnhKhông biết NV đi đâuBản đồ real-time + lịch sử

Phụ lục B: Thuật ngữ

Thuật ngữGiải thích
Territory (Địa bàn)Khu vực địa lý gom nhóm điểm bán, 1 Supervisor quản lý
Outlet (Điểm bán)Cửa hàng/đại lý bán lẻ mà NV ghé thăm
Route (Tuyến bán)Danh sách điểm bán theo thứ tự, chạy vào ngày cố định trong tuần
Visit (Lần ghé thăm)Sự kiện NV check-in đến check-out tại 1 điểm bán
Force check-inCheck-in ngoài bán kính GPS cho phép + nhập lý do
Sales Order (Đơn hàng)Yêu cầu bán/trao hàng từ NV tại điểm bán
Return Order (Đơn trả hàng)Yêu cầu trả hàng từ điểm bán về kho
Snapshot tồn khoGhi nhận tồn kho tại thời điểm ghé thăm, không tự động trừ
GPS LogVị trí GPS được ghi nhận định kỳ từ thiết bị NV
GPS GeofencingKiểm tra NV có trong bán kính điểm bán khi check-in

FieldFlow — DMS Module: Quản lý Phân phối — Tháng 6/2026
← Quay lại Tổng quan Dự án