OpsOne MRP — Quản lý sản xuất toàn diện
Tài liệu này hướng dẫn anh/chị sử dụng module MRP của OpsOne AI để quản lý định mức nguyên vật liệu, theo dõi lô hàng, định mức nhân công và phân tích chênh lệch chi phí.
Module MRP gồm 5 tab hoạt động liên kết với nhau. Anh/chị nên đọc theo thứ tự từ Thuật ngữ → Quy trình tổng thể → từng tab cụ thể. Nếu mới bắt đầu, làm theo phần "3 tình huống thực tế" ở cuối.
1. Thuật ngữ cần biết
Module MRP dùng một số thuật ngữ chuẩn ngành sản xuất. Anh/chị hiểu các từ này sẽ dễ thao tác hơn rất nhiều.
- Material variance (NVL): NVL thực tế dùng nhiều/ít hơn định mức bao nhiêu
- Labor variance (Nhân công): thời gian thực tế nhiều/ít hơn định mức bao nhiêu
- Yield variance (Sản lượng): số SP thực tế ra ít hơn kế hoạch bao nhiêu
2. Truy cập module MRP
- Đăng nhập app.opsoneai.com bằng tài khoản admin/manager
- Bên trái Sidebar → mở nhóm 🏭 Sản xuất & Chất lượng
- Click MRP - Lập kế hoạch SX
Sau khi vào, anh/chị sẽ thấy 5 tab ngang ở đầu trang:
- 📋 BOM — định mức nguyên vật liệu
- 🏗️ Đơn sản xuất — lệnh sản xuất cụ thể
- 🏷️ Lô hàng — theo dõi từng lô NVL/thành phẩm
- 🔧 Trung tâm SX — quản lý máy + tổ thợ
- 📊 Chênh lệch — phân tích variance
3. Quy trình tổng thể — đọc trước khi làm
Để dùng MRP hiệu quả, anh/chị làm theo thứ tự sau (chỉ cần làm tuần tự lần đầu):
- Tạo Trung tâm sản xuất — khai báo các máy/tổ thợ trong xưởng. Mỗi cái có chi phí giờ.
- Tạo BOM + Routing — định mức nguyên vật liệu + trình tự công đoạn cho mỗi sản phẩm.
- Nhập lô NVL — khi nhận hàng từ nhà cung cấp, ghi nhận từng lô (chỉ áp dụng nếu bật batch tracking).
- Tạo Đơn sản xuất — chạy MRP để biết đủ NVL không → Bắt đầu sản xuất → Hoàn thành nhập thành phẩm.
- Xem Chênh lệch — sau khi đóng đơn, xem variance để biết đơn lãi/lỗ và nguyên nhân.
4. Tab BOM — Định mức nguyên vật liệu
4.1. Tạo BOM mới
- Bấm nút + Tạo BOM ở góc phải
- Nhập Tên BOM (vd: "Cân điện tử 30kg")
- Nhập Version (vd: "1.0" — để trống tự sinh)
- Bấm + Thêm NVL cho mỗi nguyên vật liệu:
- Tên NVL (vd "Module cảm biến")
- Số lượng (vd 1)
- Đơn vị (cái, kg, m...)
- Bấm Tạo BOM
4.2. Xem BOM đã tạo
Click Xem ở dòng BOM → modal hiện ra với 5 nút quan trọng:
| Nút | Tác dụng |
|---|---|
| 🌳 Nổ cây đa cấp | Nhập số lượng SP cần sản xuất → hiện cây BOM nhiều tầng + bảng NVL gốc đã tổng hợp |
| 🕒 Lịch sử phiên bản | Xem tất cả version của BOM này theo thời gian (active vs đã thay thế) |
| 🔧 Công đoạn | Định nghĩa routings (xem mục Công đoạn) |
| 📋 Tạo phiên bản mới | Sao chép BOM, chỉnh định mức → phiên bản cũ tự đóng (effective_to = bây giờ) |
| 🗑️ Xoá BOM | Ẩn BOM khỏi danh sách (soft delete — đơn sản xuất cũ không bị ảnh hưởng) |
4.3. BOM đa cấp — cho sản phẩm lắp ráp phức tạp
- Tạo BOM cho thành phẩm (vd "Cân điện tử") với NVL là bán thành phẩm (vd "Module cảm biến")
- Tạo BOM thứ 2 cho bán thành phẩm đó (vd "Module cảm biến v1") với NVL gốc (vd IC ADC + dây dẫn)
- OpsOne tự nhận diện: khi NVL của BOM cha có BOM riêng → coi là bán thành phẩm và nổ tiếp xuống
- Bấm 🌳 Nổ cây trên BOM cha với qty=100 → thấy nhu cầu NVL gốc cho 100 SP
5. Tab Đơn sản xuất — Lệnh sản xuất cụ thể
5.1. Tạo đơn sản xuất
- Bấm + Tạo đơn
- Chọn BOM (hệ thống sẽ dùng phiên bản active)
- Nhập Số lượng dự kiến (vd 100)
- Chọn ngày bắt đầu + ngày hoàn thành dự kiến
- Bấm Tạo đơn → đơn có trạng thái Đã lên kế hoạch
5.2. Các thao tác trên đơn
| Nút | Khi nào dùng | Hệ thống làm gì |
|---|---|---|
| MRP | Trước khi bắt đầu | Nổ BOM đa cấp, đối chiếu kho → cho biết đủ NVL không. Hiện banner xanh "Đủ NVL" hoặc đỏ "Thiếu X" |
| ▶ Bắt đầu | Khi đủ NVL (chỉ với planned) | Trừ NVL gốc khỏi kho theo lô FEFO, ghi production_consumption, chuyển status sang Đang sản xuất |
| ✓ Hoàn thành | Khi sản xuất xong (chỉ với in_progress) | Hỏi số lượng SP thực tế → nhập kho thành phẩm, tự sinh lô nếu enable_batch_tracking |
| ✏️ | Sửa ngày/ghi chú (chỉ với planned) | Không sửa được BOM/số lượng — phải huỷ + tạo mới |
| 🚫 Huỷ | Huỷ đơn chưa bắt đầu | Hỏi lý do huỷ → ghi vào notes. Đơn đang chạy/hoàn thành không huỷ được |
6. Tab Lô hàng — Truy xuất nguồn gốc
6.1. Bật batch tracking cho 1 NVL
Vào module Kho → mở sản phẩm cần track → bật enable_batch_tracking + nhập default_shelf_life_days (vd 365 cho thực phẩm).
Sau khi bật → mọi giao dịch nhập/xuất kho cho NVL này sẽ yêu cầu chỉ định lô.
6.2. Nhập lô khi nhận hàng từ NCC
- Bấm + Nhập lô
- Chọn Sản phẩm
- Nhập Số lô (theo mã NCC hoặc tự đặt, vd:
L20260603-001) - Nhập Số lượng nhập
- Nhập Ngày sản xuất + Hạn dùng
- Nhập Đơn giá (rất quan trọng cho variance — biết được tác động chi phí)
- Bấm Nhập lô
6.3. Trạng thái lô
| Badge | Ý nghĩa | Có dùng được không? |
|---|---|---|
| OK | Bình thường | Có |
| Sắp hết hạn | Còn ≤30 ngày hết hạn | Có — ưu tiên dùng trước (FEFO) |
| Hết hạn | Đã qua hạn dùng | Không — cần huỷ hoặc cách ly |
| Cách ly | Tạm không dùng, chờ QC | Không |
6.4. Thao tác trên 1 lô
- 🔒 Cách ly — khi nghi vấn chất lượng (hỏi lý do)
- 🔓 Thả — sau khi QC pass, đưa lô về trạng thái dùng được
- ✏️ — sửa thông tin lô (hạn dùng, đơn giá, ghi chú); có thể sửa số lượng còn lại nếu kiểm kê lại
- 🗑️ — xoá lô (số lượng còn lại sẽ bị trừ khỏi tồn kho master)
7. Tab Trung tâm SX — Máy + Tổ thợ
7.1. Tạo Trung tâm sản xuất
- Bấm + Tạo trung tâm
- Nhập Mã (vd
WC-CNC-01— viết hoa, dùng dấu gạch) - Nhập Tên (vd "Máy CNC #1")
- Chọn Loại:
- Máy — máy CNC, dây chuyền tự động
- Tổ thợ — nhân công thuần (lắp ráp, đóng gói, QC)
- Máy + Người — máy có người vận hành
- Nhập Công suất giờ/ngày (vd 8 cho tổ thợ, 16 cho máy 2 ca)
- Nhập Chi phí giờ (VND) = lương + khấu hao máy + tiện ích. Vd:
- Máy CNC: 200.000đ/giờ
- Tổ lắp ráp: 150.000đ/giờ
- Tổ QC: 100.000đ/giờ
- Bấm Tạo
7.2. Sửa / Xoá
- ✏️ Sửa — sửa tên/chi phí/công suất, KHÔNG sửa được mã
- 🗑️ Xoá — soft delete, các routing đã ref tới vẫn giữ tham chiếu (chỉ ẩn khỏi danh sách chọn)
8. Tab Chênh lệch — Phân tích lãi/lỗ
Tab này hiển thị tất cả đơn sản xuất đã hoàn thành trong 1 khoảng thời gian, sắp xếp theo ngày kết thúc gần nhất.
8.1. Bảng danh sách
Mỗi dòng hiển thị: Mã đơn, BOM, kế hoạch, thực tế, chênh lệch SL, %, nút Xem chi tiết.
- 🟢 Chênh lệch dương (xanh) — vượt kế hoạch (tốt, nhưng cần xem có hao NVL không)
- 🔴 Chênh lệch âm (đỏ) — thiếu hụt SP, có thể do scrap rate cao hoặc lỗi sản xuất
8.2. Filter thời gian
Chọn date range (từ → đến). Mặc định không filter sẽ hiện tất cả PO hoàn thành (tối đa 200 dòng).
8.3. Modal Variance chi tiết
Click Xem chi tiết trên 1 đơn → modal hiện ra với 4 phần:
- Banner tổng tác động chi phí — đỏ = vượt định mức (lỗ), xanh = tiết kiệm (lãi vs định mức)
- 🎯 Yield variance — chênh lệch số lượng SP thực tế vs kế hoạch
- 📦 Material variance (NVL) — bảng từng NVL với 6 cột: định mức, thực tế, chênh, %, đơn giá, tác động chi phí (VND)
- 👷 Labor variance (Nhân công + máy) — phút định mức vs thực tế, chi phí định mức vs thực tế
9. Công đoạn (Routings) — bên trong modal BOM
Routings KHÔNG có tab riêng — nằm trong modal Xem BOM. Mở modal BOM → bấm nút 🔧 Công đoạn.
9.1. Khai báo công đoạn
Bảng routings có 7 cột:
| Cột | Ý nghĩa | Ví dụ |
|---|---|---|
| Seq | Thứ tự công đoạn (số nhỏ chạy trước). Dùng 10, 20, 30 để dễ chèn giữa. | 10, 20, 30 |
| Công đoạn | Tên công đoạn | "Cắt phôi", "Hiệu chuẩn" |
| Trung tâm SX | Chọn work center đã tạo | Máy CNC #1 |
| Setup (phút) | Thời gian setup máy 1 lần/lô (KHÔNG nhân SP) | 15 phút |
| Phút/SP | Thời gian/sản phẩm (nhân với số lượng) | 5 phút |
| Hỏng % | % SP hỏng ở công đoạn này | 1% |
| × | Xoá công đoạn khỏi danh sách | — |
9.2. Tính chi phí labor
Sau khi khai báo routings:
- Nhập số lượng SP cần tính
- Bấm Tính
- Hệ thống tính tổng thời gian + chi phí + breakdown từng công đoạn
Công thức: chi phí = SUM cho mỗi công đoạn: (setup + qty × time_per_unit) / 60 × hourly_cost
10. Ba tình huống thực tế
10.1. Tình huống: Cân điện tử (lắp ráp đa cấp)
- Tạo trung tâm SX: Tổ lắp ráp A (150K/giờ), Máy hiệu chuẩn (80K/giờ), Tổ QC (100K/giờ)
- Tạo BOM "Module cảm biến v1" → 1 IC ADC + 0.5m dây dẫn
- Tạo BOM "Cân điện tử 30kg v1" → 1 Module cảm biến + 1 LCD + 1 vỏ nhôm
- Mở BOM Cân → bấm 🔧 Công đoạn → thêm 3 công đoạn (Seq 10/20/30)
- Bấm 🌳 Nổ cây với qty=100 → thấy cần 100 IC ADC, 50m dây dẫn, 100 LCD, 100 vỏ nhôm
- Tạo PO cho 100 cân → MRP → ▶ Bắt đầu → ✓ Hoàn thành (95 thực tế)
- Mở tab Chênh lệch → xem variance của PO này
10.2. Tình huống: Bánh quy (F&B, có lô + hạn dùng)
- Tạo BOM "Bánh quy bơ 200g" → 100g bột mì + 50g bơ + 30g đường + 10g muối
- Bật enable_batch_tracking cho 4 NVL trên (vào module Kho)
- Nhập 2 lô bột mì khác hạn dùng:
BM-202604hạn 2027-04 vàBM-202605hạn 2027-05 - Tạo PO cho 1000 bánh → MRP → ▶ Bắt đầu → hệ thống tự FEFO lấy lô BM-202604 trước
- Khi hoàn thành 950 cái → hệ thống tự sinh lô thành phẩm
L-PO-XXX-XXXvới hạn dùng theo default_shelf_life_days - Khách phàn nàn 1 lô → vào PO đó, drill down để truy lô NVL nào đã dùng → liên hệ NCC nếu cần
10.3. Tình huống: Sửa định mức giữa chừng
- Đang chạy PO-001 với BOM "Cân v1" (1 IC ADC)
- Phòng R&D phát hiện cần thêm 1 IC ADC để chống nhiễu → KHÔNG sửa BOM v1
- Mở BOM Cân → bấm 📋 Tạo phiên bản mới → tăng số lượng IC ADC từ 1 lên 2 → bấm Tạo phiên bản
- Hệ thống tự đóng v1 (effective_to = bây giờ), kích hoạt v2 (effective_from = bây giờ)
- PO-001 đang chạy vẫn dùng v1 (chỉ tiêu hao 1 IC)
- PO-002 tạo mới sau đó sẽ tự dùng v2 (tiêu hao 2 IC)
- Bấm 🕒 Lịch sử phiên bản → thấy v1 + v2 với badge "Đã thay thế" / "Đang dùng"
11. Câu hỏi thường gặp
Có bắt buộc dùng cả 5 tab không?
Không. Bắt đầu với BOM + Đơn sản xuất. Sau 1-2 tháng dùng quen rồi mới mở dần Lô hàng (cho F&B/dược), Routing/Trung tâm SX (cho ngành cần định mức nhân công), Chênh lệch (cho variance).
Sửa BOM có ảnh hưởng đơn sản xuất đang chạy không?
Không nếu dùng 📋 Tạo phiên bản mới. Đơn sản xuất khi tạo sẽ lock vào bom_id cụ thể (gồm version_number tại thời điểm đó). Khi anh tạo bản mới, các đơn cũ vẫn ref tới bản cũ.
Tuyệt đối không sửa BOM trực tiếp (qua API) — sẽ phá MRP đã chạy.
Khác gì giữa "Cách ly lô" và "Xoá lô"?
Cách ly: tạm dừng dùng lô đó cho sản xuất mới. Tồn kho master KHÔNG bị trừ. Có thể "Thả" lại sau khi QC pass.
Xoá: ẩn vĩnh viễn. Số lượng còn lại của lô BỊ TRỪ khỏi tồn kho master (coi như hủy NVL). Không recover được.
Tôi không track lô hàng có dùng được không?
Có. Mặc định mọi SKU KHÔNG bật batch tracking. Hệ thống chỉ trừ tồn kho master như bình thường. Anh chỉ bật tracking cho NVL có hạn dùng hoặc cần truy xuất nguồn gốc.
FEFO khác FIFO như thế nào?
FIFO (First In First Out): lô nào nhập trước → xuất trước. Phù hợp với hàng không có hạn dùng (vd: bu-lông, linh kiện cơ khí).
FEFO (First Expiry First Out): lô nào hết hạn trước → xuất trước. Phù hợp với hàng có hạn dùng (F&B, dược, hoá chất). OpsOne mặc định dùng FEFO.
BOM đa cấp tối đa bao nhiêu tầng?
OpsOne hỗ trợ tối đa 10 cấp. Nếu vượt 10 cấp, hệ thống báo "BOM quá sâu". Cũng có cơ chế phát hiện vòng lặp (A → B → A) và từ chối nổ.
Tôi có thể export báo cáo Variance ra Excel không?
Hiện tại chưa có nút Export trực tiếp. Anh/chị có thể copy bảng từ modal ra Excel hoặc liên hệ hỗ trợ để chúng tôi thêm tính năng export trong sprint tiếp theo.
Variance hiển thị âm chi phí — có nghĩa là gì?
Âm = tiết kiệm so với định mức (tốt). Dương = vượt định mức (xấu).
Ví dụ: định mức 100 IC nhưng thực tế chỉ dùng 95 IC → variance -5 IC × đơn giá = âm chi phí (lãi).
Tại sao nút "Bắt đầu" báo "Thiếu lô X"?
Có 3 nguyên nhân:
- NVL có bật batch tracking nhưng chưa có lô nào trong kho → vào tab Lô hàng nhập lô
- Có lô nhưng đang bị cách ly → thả cách ly nếu đã pass QC
- Có lô nhưng tổng qty_remaining không đủ → nhập thêm lô
Tôi có thể giao tab MRP cho nhân viên khác không?
Có. Vào Quản lý người dùng → tạo role mới "Production Manager" với các quyền mrp.view + mrp.edit + mrp.create + mrp.delete. Gán role cho nhân viên.
Variance Labor luôn về 0 — tại sao?
Variance Labor cần 2 thông tin:
- Định mức: phải khai báo routings cho BOM
- Thực tế: phải có log operation qua API
POST /production-orders/:id/log-operation
Hiện chưa có UI để log operation thực tế — sẽ bổ sung trong sprint tiếp.
Cần demo trực tiếp hoặc hỗ trợ?
Đội ngũ OpsOne sẵn sàng chia sẻ màn hình demo workflow trên dữ liệu giống ngành của doanh nghiệp anh/chị. Pilot 30 ngày miễn phí, không cần ký hợp đồng dài hạn.