📦 Hợp Nhất Vật Tư Đơn Hàng (OrderItemMaterials)

Tài liệu đặc tả kiến trúc nghiệp vụ, mô hình dữ liệu (DDL), luồng API & Mô phỏng giao diện tab kép v2

📌 Kiến Trúc & API Flow
💾 Database DDL & Prisma
⚖️ So Sánh Trước / Sau
🖥️ Sa Bàn Giao Diện Tab Kép

📖 Nguyên Tắc Nghiệp Vụ & Quy Trình Khởi Tạo

Business Flow

Khi ra đơn hàng bán lẻ (Sales Order), hệ thống MES tự động phân rã nguyên vật liệu định mức từ thiết kế kỹ thuật Variant sang thực thể OrderItemMaterial gắn trực tiếp theo dòng đơn hàng. Quy trình cụ thể như sau:

1

Truy xuất cấu hình Variant / Set

Hệ thống đọc danh sách vật tư (`VariantMaterial`) đã được định nghĩa cứng trong hồ sơ thiết kế kỹ thuật R&D.

2

Phân loại vai trò vật tư tự động

Hệ thống duyệt từng dòng vật tư. Vật tư nào có `assemblyQty1 > 0` hoặc `assemblyQty2 > 0` sẽ được phân loại là PRODUCTION (Vật tư sản xuất). Vật tư nào có `packagingQty > 0` sẽ được phân loại là PACKAGING (Vật tư đóng gói).

3

Tính toán định lượng nhân số lượng đơn

Số lượng khởi tạo = (Định mức gốc + Hao hụt Extra) * Số lượng sản phẩm trên đơn hàng (OrderItem.quantity). Dữ liệu này được lưu trực tiếp vào bảng order_item_materials.

4

Hợp nhất tùy chỉnh (Override) và Nhập thêm

Bên cạnh định mức tự động, Planner có toàn quyền chỉnh sửa trực tiếp số lượng, ghi chú hoặc click nút "Thêm vật tư" để nhập thêm nguyên vật liệu mới theo yêu cầu riêng biệt của đơn hàng.

📡 REST API Endpoints

API Spec

Endpoints hợp nhất quản lý CRUD vật tư theo dòng đơn hàng:

GET /api/admin/order-items/:itemId/materials

Lấy danh sách vật tư. Hỗ trợ query ?type=PRODUCTION|PACKAGING để lọc.

POST /api/admin/order-items/:itemId/materials

Thêm vật tư đính kèm ngoài định mức. Payload:

{
  "materials": [
    {
      "materialId": 10,
      "type": "PRODUCTION",
      "quantity": 5,
      "note": "Ốc dự phòng"
    }
  ]
}
PUT /api/admin/order-items/:itemId/materials/:id

Sửa đổi số lượng hoặc ghi chú của vật tư đính kèm.

DELETE /api/admin/order-items/:itemId/materials/:id

Xóa một dòng vật tư nhập thêm.