💡 Hướng Dẫn Dành Cho Người Lập Kế Hoạch (Non-Tech Guide)
Tóm tắt trực quan cách hệ thống lập lịch và cách xử lý công việc thực tế của người vận hành:
📌 1. Lịch chạy ngược từ ngày giao hàng
Hệ thống sẽ tính lùi từ ngày bạn cần giao hàng cho khách để tìm ra ngày trễ nhất phải bắt đầu làm phôi, cắt, ráp... Giúp giảm tối đa thời gian bán thành phẩm nằm chờ trong kho, tiết kiệm không gian nhà xưởng.
📌 2. Không tự động "đẩy" việc trễ về tương lai
Khi quá tải, hệ thống không tự động dịch chuyển việc về sát ngày giao hàng (vì sẽ gây ứ đọng và trễ hạn dây chuyền). Thay vào đó, toàn bộ phần việc bị quá tải sẽ được giữ lại và dồn vào ngày bắt đầu kế hoạch để bạn dễ phát hiện.
📌 3. Cách phát hiện & xử lý điểm nghẽn (Cột Đỏ/Đen)
Khi xem biểu đồ Heatmap công suất trạm, nếu thấy cột ngày đầu tiên bị màu Đỏ (quá tải) hoặc Đen (quá tải nghiêm trọng), điều đó có nghĩa là xưởng đang thiếu công suất để kịp tiến độ. Bạn cần tăng ca (OT), chuyển bớt việc sang máy khác hoặc lùi hạn giao hàng.
📌 4. Số lượng sản xuất luôn tròn số
Bạn sẽ không bao giờ thấy các con số lẻ thập phân (ví dụ: làm 10.45 cái bàn) ở bảng phân bổ. Hệ thống tự động làm tròn và gom cụm chính xác theo số lượng chi tiết thực tế, giúp công nhân dễ sản xuất và báo cáo.
🔄 Cơ Chế Rải Tải Lùi Chi Tiết (Pure Backward Scheduling)
Thuật toán V4 loại bỏ hoàn toàn các ca dịch tịnh tiến tiến (Forward) phức tạp, tập trung rải tải lùi tuyệt đối để người lập lịch dễ kiểm soát:
- Lập lịch ngược từ ngày bàn giao (Backward-only): Trình rải bắt đầu chạy ngược từ ngày hạn chót của công việc (`currentDateToTry = deadline`). Trên mỗi ngày, hệ thống tính toán năng lực trống và gán số lượng tối đa có thể sản xuất dựa trên năng lực trống khả dụng ngày đó.
- Xử lý khi chạm biên ngày bắt đầu (Start Date Wall Capping): Nếu lượng công việc quá lớn hoặc công suất các ngày không đủ và con trỏ lùi lịch vượt quá ngày bắt đầu kế hoạch của Lệnh (`currentDateToTry.isBefore(startDate)`), hệ thống lập tức dồn toàn bộ lượng sản phẩm chưa phân bổ còn lại gán trực tiếp vào ngày bắt đầu (`startDate`).
- Cho phép dồn tải (Overloading): Việc dồn lượng công việc còn lại vào ngày bắt đầu sẽ tạo ra điểm quá tải lớn (load ratio > 1.6), được tô màu đỏ hoặc đen đặc trưng trên Heatmap biểu diễn rõ ràng điểm nghẽn của quy trình.
📊 Sơ Đồ Giải Thuật Phân Bổ Tải V4 (Decision Flow)
Quy trình rẽ nhánh chất tải lùi và xử lý dồn ứ tại biên ngày bắt đầu của thuật toán V4:
📉 Bảo Toàn Sản Lượng & Tròn Số (Integer Qty Conservation)
Cơ chế loại bỏ số lượng lẻ thập phân ở kế hoạch phân bổ ngày bằng cách nhóm hợp nhất thông minh:
Trong các phiên bản trước, việc gom nhóm theo trạm máy chung (`stepId`) cho nhiều chi tiết phôi có định mức thời gian khác nhau bắt buộc phải quy đổi qua phút rồi chia ngược để ra số lượng, dẫn đến việc sản lượng gán vào các task bị số lẻ thập phân (ví dụ: 10.45 chi tiết). Ở bản V4, lỗi này được loại bỏ triệt để:
- Gom nhóm theo công đoạn phôi chi tiết (`bomWorkStepId`): Chỉ những công việc con của cùng một công đoạn phôi chi tiết mới được gộp nhóm với nhau trên cùng một ngày hạn chót.
- Cộng trực tiếp số nguyên: Vì các công việc con cùng loại có định mức thời gian hoàn toàn giống nhau, hệ thống chỉ cần cộng trực tiếp các số lượng yêu cầu là số nguyên: $$totalConsolidatedQty = \sum j.remainingQty$$ Nhờ đó, sản lượng được bảo toàn nguyên vẹn là số nguyên tròn số trong suốt quá trình rải ngược.
📦 Gom Cụm Lịch Sản Xuất Bán Thành Phẩm (Child Jobs Consolidation)
Cơ chế gom nhóm chi tiết phôi để tối ưu sản xuất hàng loạt, tránh xé nhỏ đơn hàng phôi:
1 Khóa hợp nhất mới (Consolidation Key V4):
Khóa gộp nhóm chi tiết con của V4 được thiết kế theo cấu trúc: $$Key = bomWorkStepId - DeadlineStr$$ Phân biệt và gom cụm chính xác theo công đoạn chi tiết trên từng ngày hạn chót.
2 Công thức tính thời hạn Due Date chung:
Hạn hoàn thành của các công đoạn con được tính ngược từ mốc bắt đầu của công đoạn cha trừ đi khoảng gối đầu/trễ (`leadTime`): $$Deadline_{consolidated} = \min_{j \in ParentJobs} (Date_{j} - leadTime)$$ *Lưu ý:* Giá trị `leadTime` hỗ trợ đầy đủ cấu hình `= 0` (cho phép sản xuất gối đầu song song trên cùng một ngày).
🚨 Cơ Chế Dồn Tải Tại Ngày Bắt Đầu (Start Date Overload Mechanics)
Tại sao giải thuật V4 loại bỏ hoàn toàn cơ chế dịch chuyển tiến đệ quy (Cascade Shifting)?
Trong phiên bản cũ V3, khi công đoạn con chạm cận ngày bắt đầu, cơ chế đệ quy `cascadeShiftParent` sẽ đẩy tịnh tiến các công đoạn cha về tương lai. Việc này gây ra hai hệ lụy nghiêm trọng:
- Ứ đọng sát hạn giao hàng (Deadline Congestion): Khi bị quá tải chéo, các công đoạn cha liên tục bị tịnh tiến đẩy lùi về sát ngày kết thúc kế hoạch (`planningEndDate`), làm quá tải nghiêm trọng các ngày cuối kỳ lập lịch trong khi các ngày đầu kỳ trống trơn.
- Mất dấu vết điểm nghẽn: Người lập lịch không thấy được điểm nghẽn thực sự xảy ra từ lúc nào để tăng ca/bổ sung công suất.