# Trimming Planning — Planner lập plan theo loại và P.O Month từ LOT Curing, tự xác nhận; hệ thống sinh phiếu Stock Out Curing cho từng LOT; sửa plan APPROVED giữ trạng thái

> Fine Chemical (FC) · Module MES · v0.3 · 09/10/2026 · Flow chuẩn — dùng để triển khai, kiểm thử và phát triển
>
> File sinh tự động từ sơ đồ bởi `sync.js` — đừng sửa tay. Hình là chuẩn: thấy mâu thuẫn với trang hình thì báo lại.
>
> Trang hình: /mes/trimming-planning

## Cách đọc

- Mỗi hộp trên sơ đồ có một mã `Bxx`, đánh theo thứ tự đi của luồng (từ điểm bắt đầu, theo mũi tên).
- "Đi tới" liệt kê mọi mũi tên ra khỏi hộp; chữ trong ngoặc vuông là nhãn điều kiện của mũi tên đó.
- "Nhánh tuỳ chọn" = mũi tên nét đứt trên sơ đồ: làm cũng được, bỏ qua cũng được.
- Hộp loại "Dữ liệu" ở lane Input là dữ liệu đi vào, ở lane Output là kết quả / điểm kết thúc của luồng.

## Process Flow (swimlane)

### Vai trò (lane)

- Input
- Planner
- Output

### Các bước

| Mã | Vai trò | Loại | Nội dung | Nền tảng · Màn hình | Đi tới |
| --- | --- | --- | --- | --- | --- |
| B01 | Input | Dữ liệu | Master data: Model Attribute của WO (Logo / Spray / OOMG) | Master data | B08 |
| B02 | Input | Dữ liệu | Curing Room INV List (LOT ca AB / CD · Available) |  | B09 |
| B03 | Input | Dữ liệu | Master data: Standard curing days | Master data | B19 |
| B04 | Input | Dữ liệu | Output Entry của plan — Trimming Result |  | B25 |
| B05 | Input | Dữ liệu | Output Entry của plan — Trimming Result |  | B38 |
| B06 | Planner | Bắt đầu | Start |  | B07 |
| B07 | Planner | Bước | Tạo plan Trimming | Web · Trimming Planning | B08 |
| B08 | Planner | Bước | Chọn Plan Type · P.O Month | Web · Trimming Planning | B09 |
| B09 | Planner | Bước | Tick LOT ở Curing Room INV List | Web · Trimming Planning | B10 |
| B10 | Planner | Điểm quyết định | LOT tick được? |  | B11 [Không]; B12 [Được] |
| B11 | Planner | Bước | Khoá tick LOT | System (auto) · Trimming Planning | B09 [chọn LOT khác] |
| B12 | Planner | Bước | Chỉnh Plan Qty theo size | Web · Trimming Planning | B13 |
| B13 | Planner | Điểm quyết định | Plan hợp lệ? |  | B14 [Không]; B15 [Có] |
| B14 | Planner | Bước | Khoá Save Draft · Confirm | System (auto) · Trimming Planning | B12 [sửa số / bỏ LOT] |
| B15 | Planner | Điểm quyết định | Confirm ngay? |  | B16 [Chưa]; B17 [Có] |
| B16 | Planner | Bước | Lưu nháp plan Trimming | Web · Trimming Planning | B17 [Confirm từ trang plan] |
| B17 | Planner | Bước | Xác nhận plan Trimming | Web · Trimming Planning | B18; B19 [APPROVED] |
| B18 | Output | Dữ liệu | Plan Trimming APPROVED → Trimming Result, chờ ghi sản lượng |  | (kết thúc) |
| B19 | Planner | Điểm quyết định | LOT đủ ngày curing? |  | B20 [Chưa]; B21 [Đủ] |
| B20 | Output | Dữ liệu | LOT chưa đủ ngày — phiếu sinh ở Curing Confirmation |  | (kết thúc) |
| B21 | Planner | Bước | Sinh phiếu Stock Out Curing cho từng LOT | System (auto) · Trimming Planning | B22; B23 |
| B22 | Output | Dữ liệu | Phiếu Stock Out Curing → WH-TRM-01, APPROVED, mỗi LOT một phiếu |  | (kết thúc) |
| B23 | Planner | Kết thúc | End |  |  |
| B24 | Planner | Bắt đầu | Sửa plan |  | B25 |
| B25 | Planner | Điểm quyết định | Plan đã có sản lượng? |  | B26 [Có]; B27 [Chưa] |
| B26 | Output | Dữ liệu | Không sửa được — plan đã có sản lượng |  | (kết thúc) |
| B27 | Planner | Điểm quyết định | Plan APPROVED? |  | B28 [Chưa — DRAFT]; B29 [Có] |
| B28 | Planner | Bước | Sửa plan nháp | Web · Trimming Planning | B09 [sửa LOT / số] |
| B29 | Planner | Bước | Sửa plan APPROVED | Web · Trimming Planning | B30 |
| B30 | Planner | Điểm quyết định | LOT đổi số hoặc bị bỏ? |  | B31 [Không]; B32 [Có] |
| B31 | Output | Dữ liệu | Plan giữ APPROVED — phiếu giữ nguyên |  | (kết thúc) |
| B32 | Planner | Bước | Cancel phiếu Stock Out của LOT đó | System (auto) · Trimming Planning | B33; B34 |
| B33 | Output | Dữ liệu | Phiếu cũ CANCELLED — tồn trả về kho Curing |  | (kết thúc) |
| B34 | Planner | Bước | Sinh phiếu mới theo Plan Qty mới | System (auto) · Trimming Planning | B35; B36 |
| B35 | Output | Dữ liệu | Plan giữ APPROVED và Plan No. — Trimming Result cập nhật số |  | (kết thúc) |
| B36 | Planner | Kết thúc | End |  |  |
| B37 | Planner | Bắt đầu | Huỷ plan |  | B38 |
| B38 | Planner | Điểm quyết định | Plan đã có sản lượng? |  | B39 [Có]; B40 [Chưa] |
| B39 | Output | Dữ liệu | Không huỷ được — plan đã có sản lượng |  | (kết thúc) |
| B40 | Planner | Bước | Huỷ plan Trimming | Web · Trimming Planning | B41 |
| B41 | Planner | Bước | Cancel mọi phiếu · trả tồn đã giữ | System (auto) · Trimming Planning | B42; B43 |
| B42 | Output | Dữ liệu | Plan CANCELLED · tồn về Curing · rút khỏi Trimming Result |  | (kết thúc) |
| B43 | Planner | Kết thúc | End |  |  |

### Chi tiết từng bước (nội dung hover trên sơ đồ)

#### B07 · Tạo plan Trimming

- Planner · Web · Trimming Planning
- Đến từ: B06
- Đi tới: B08 · Chọn Plan Type · P.O Month

> Planner tạo một plan Trimming mới để cắt tỉa hàng lấy từ tồn Curing.  
> Khi nào: bất kỳ lúc nào có LOT ở Curing Room cần lập plan; không cần WO hay plan sinh sẵn.  
> Thao tác: Trimming Planning › nút "Create Plan" → trang "Create Trimming Plan".  
> Hệ thống: số plan tự sinh theo ngày plan: "TRM-PLAN-<YYYYMMDD>-NN" (NN tăng dần trong ngày).  
> Kết quả: mở trang lập plan, chưa lưu gì.  
> Kiểm thử:  
> - Tạo 2 plan cùng ngày 12/08 → TRM-PLAN-20260812-01 và -02  
> Nguồn: Q-20260925-04 (1) · prototype v0.51  

#### B08 · Chọn Plan Type · P.O Month

- Planner · Web · Trimming Planning
- Đến từ: B01, B07
- Đi tới: B09 · Tick LOT ở Curing Room INV List

> Planner chọn loại hoàn thiện và tháng P.O của plan; plan Trimming không gắn Customer P.O.  
> Thao tác: ô "PLAN TYPE *" (Logo / Spray / OOMG), ô "P.O (MONTH) *" (vd "2026.Aug"), ô "PLAN DATE"; ô "SHIFT" ("All" / "Day (AB)" / "Night (CD)") lọc LOT theo ca curing.  
> Hệ thống: tiêu đề đổi thành "Making <Logo|Spray|OOMG> Trimming Plan"; "Curing Room INV List" chỉ hiện LOT có Model Attribute của WO trùng loại plan và thuộc P.O Month đã chọn.  
> Chặn khi: chưa chọn loại → "Select the Plan Type (Logo, Spray or OOMG) to view Curing stock."; chưa chọn tháng → "Select the P.O Month to view its LOTs."  
> Kiểm thử:  
> - Chọn Spray + 2026.Aug → chỉ thấy LOT Spray của tháng 8  
> - Chọn "Night (CD)" → chỉ còn LOT có mã đuôi -CD  
> Nguồn: Q-20260928-03 (câu 11) · prototype v0.51  

#### B09 · Tick LOT ở Curing Room INV List

- Planner · Web · Trimming Planning
- Đến từ: B02, B08, B11, B28
- Đi tới: B10 · LOT tick được?

> Planner chọn các LOT còn tồn ở Curing để đưa vào plan.  
> Thao tác: bảng "Curing Room INV List" › tick ô "Select" đầu dòng; ô tìm "Search lot, WO, model or color".  
> Hệ thống: tick LOT → lấy toàn bộ "Available" theo size vào "Plan Qty"; "Available" = tồn LOT − phần các plan khác đang giữ; "Days" = "PLAN DATE" − ngày curing.  
> Hệ thống: LOT đang curing vẫn tick được, cột Status ghi "Curing not completed — can be planned".  
> Kết quả: footer đếm "<n> LOT(s) · <số> pairs to reserve".  
> Kiểm thử:  
> - LOT Available 2.490 đôi → tick → footer "1 LOT(s) · 2,490 pairs to reserve"  
> - Bỏ tick → LOT rời plan, footer về 0  
> Nguồn: Q-20260928-03 (câu 1) · prototype v0.51  

#### B10 · LOT tick được?

- Planner
- Đến từ: B09
- Đi tới [Không]: B11 · Khoá tick LOT
- Đi tới [Được]: B12 · Chỉnh Plan Qty theo size

> Hệ thống kiểm tra LOT có được đưa vào plan không.  
> Được: LOT đúng loại plan, "Available" > 0, Model Attribute của WO xác định được và đủ dữ liệu Model · Base Color · AL / INT; LOT chưa xuất khỏi kho Curing vẫn tick được — phiếu Stock Out sinh sau khi plan APPROVED.  
> Không: thiếu một trong các điều kiện trên → khoá ô tick.  
> Kiểm thử:  
> - LOT đã bị plan khác giữ hết → không tick được  
> Nguồn: prototype v0.51 · Q-20260930-05  

#### B11 · Khoá tick LOT

- Planner · System (auto) · Trimming Planning
- Đến từ: B10
- Đi tới [chọn LOT khác]: B09 · Tick LOT ở Curing Room INV List

> Hệ thống khoá ô tick và ghi lý do ngay trên dòng LOT.  
> Hệ thống: lý do ở cột Status: "Source WO model attribute unresolved" · "Compatibility data incomplete"; LOT hết tồn ghi "Fully reserved". "Curing stock not issued" không còn chặn ở đây — chuyển sang Trimming Result.  
> Kết quả: Planner chọn LOT khác.  
> Nguồn: prototype v0.51 · Q-20260930-05  

#### B12 · Chỉnh Plan Qty theo size

- Planner · Web · Trimming Planning
- Đến từ: B10, B14
- Đi tới: B13 · Plan hợp lệ?

> Planner giảm số lên plan của từng size khi không cắt tỉa hết LOT.  
> Thao tác: ô số theo size trên dòng LOT đã tick (thành ô nhập sau khi tick); "Cancel editing" để thoát không lưu.  
> Hệ thống: "Plan Qty" của LOT = tổng các size; mỗi size là số nguyên từ 0 tới "Available" của size đó.  
> Chặn khi: vượt "Available" → "<LOT No.> / <size>: quantity exceeds Available <n>." (vd "LOT-20260806-AB / M3/W5: quantity exceeds Available 200.")  
> Kiểm thử:  
> - Available M3/W5 = 200: nhập 200 → hợp lệ; nhập 201 → báo lỗi, khoá "Save Draft" / "Confirm Trimming Plan"  
> - Sửa M3/W5 từ 200 xuống 100 → footer giảm 100 đôi  
> Nguồn: Q-20260928-03 (câu 1) · prototype v0.51  

#### B13 · Plan hợp lệ?

- Planner
- Đến từ: B12
- Đi tới [Không]: B14 · Khoá Save Draft · Confirm
- Đi tới [Có]: B15 · Confirm ngay?

> Hệ thống kiểm tra plan trước khi cho lưu hoặc xác nhận.  
> Có: đã chọn Plan Type · P.O Month · Plan Date, có ít nhất một LOT, tổng "Plan Qty" > 0 và không size nào vượt "Available" → bật "Save Draft" / "Confirm Trimming Plan".  
> Không: còn một điều kiện chưa đạt → hai nút bị khoá, lỗi hiện trên trang.  
> Kiểm thử:  
> - Chưa tick LOT nào → "Confirm Trimming Plan" bị khoá  
> - Mọi size sửa về 0 → không lưu được  
> Nguồn: prototype v0.51  

#### B14 · Khoá Save Draft · Confirm

- Planner · System (auto) · Trimming Planning
- Đến từ: B13
- Đi tới [sửa số / bỏ LOT]: B12 · Chỉnh Plan Qty theo size

> Hệ thống khoá nút lưu và hiện lỗi để Planner sửa.  
> Kết quả: Planner sửa số theo size hoặc bỏ tick LOT sai.  
> Nguồn: prototype v0.51  

#### B15 · Confirm ngay?

- Planner
- Đến từ: B13
- Đi tới [Chưa]: B16 · Lưu nháp plan Trimming
- Đi tới [Có]: B17 · Xác nhận plan Trimming

> Planner chọn xác nhận plan ngay hay lưu nháp để sửa tiếp.  
> Có: bấm "Confirm Trimming Plan" ngay trên trang lập plan.  
> Chưa: bấm "Save Draft"; xác nhận sau từ trang chi tiết plan.  
> Nguồn: Q-20260925-04 (2) · prototype v0.51  

#### B16 · Lưu nháp plan Trimming

- Planner · Web · Trimming Planning
- Đến từ: B15
- Đi tới [Confirm từ trang plan]: B17 · Xác nhận plan Trimming

> Planner lưu plan để sửa tiếp; số trên plan được giữ ngay từ lúc lưu nháp.  
> Thao tác: nút "Save Draft".  
> Kết quả: plan → DRAFT; thông báo "<số plan> saved · <n> pairs reserved"; plan khác thấy "Available" của LOT giảm đúng số đó.  
> Kiểm thử:  
> - Lưu nháp plan A giữ 200 đôi của LOT X → plan B thấy Available của LOT X giảm 200  
> Nguồn: prototype v0.51  

#### B17 · Xác nhận plan Trimming

- Planner · Web · Trimming Planning
- Đến từ: B16, B15
- Đi tới: B18 · Plan Trimming APPROVED → Trimming Result, chờ ghi sản lượng
- Đi tới [APPROVED]: B19 · LOT đủ ngày curing?

> Planner tự xác nhận plan; không có bước duyệt riêng.  
> Khi nào: plan đang lập hoặc plan DRAFT.  
> Thao tác: nút "Confirm Trimming Plan" → popup "Release Trimming Plan <số plan>?" (Plan No., Plan Type, P.O (Month), Plan Date, LOTs, Planned Qty, bảng LOT × size) → "Confirm & Release"; "Cancel" để quay lại.  
> Hệ thống: tồn được kiểm lại lúc xác nhận; số theo size không được vượt "Available" hiện tại.  
> Kết quả: plan → APPROVED và hiện ở Trimming Result chờ ghi sản lượng; thông báo "<số plan> confirmed · <n> pairs reserved · Stock Out Curing: <n> issued".  
> Kiểm thử:  
> - Bấm "Cancel" trên popup → plan giữ nguyên trạng thái  
> - Confirm plan 2 LOT đã đủ ngày curing → plan APPROVED, 2 phiếu Stock Out Curing  
> Nguồn: Q-20260925-04 (2) · Q-20261006-02 · prototype v0.76  

#### B19 · LOT đủ ngày curing?

- Planner
- Đến từ: B03, B17
- Đi tới [Chưa]: B20 · LOT chưa đủ ngày — phiếu sinh ở Curing Confirmation
- Đi tới [Đủ]: B21 · Sinh phiếu Stock Out Curing cho từng LOT

> LOT của plan đã đủ ngày curing chuẩn chưa?  
> Đủ: "Days" của LOT ≥ "Standard curing days" → sinh phiếu Stock Out ngay.  
> Chưa: LOT vẫn nằm trong plan; phiếu của LOT sinh ở flow Curing Confirmation vào ngày LOT đủ ngày, plan không phải xác nhận lại.  
> Kiểm thử:  
> - Standard curing days = 2, LOT curing 1 ngày → chưa có phiếu; trang plan ghi "Waiting curing"  
> Nguồn: Q-20260930-05 (câu 5) · Q-20261006-02 · prototype v0.76  

#### B21 · Sinh phiếu Stock Out Curing cho từng LOT

- Planner · System (auto) · Trimming Planning
- Đến từ: B19
- Đi tới: B22 · Phiếu Stock Out Curing → WH-TRM-01, APPROVED, mỗi LOT một phiếu
- Đi tới: B23 · End

> Hệ thống tự sinh phiếu Stock Out chuyển LOT của plan từ kho công đoạn "WH-CUR-01 / Curing" sang "WH-TRM-01 / Trimming"; Planner không bấm gì.  
> Hệ thống: mỗi LOT × plan một phiếu, số theo size = "Plan Qty" của LOT trong plan; phiếu ở trạng thái APPROVED ngay, tồn chuyển ngay — không ai duyệt.  
> Kết quả: tồn chờ cắt tỉa của LOT ở WH-TRM-01 tăng; "RECEIVED" của LOT ở Trimming Result bằng số trên phiếu; trang plan có khung "Stock Out Curing → WH-TRM-01" (Slip No., LOT No., From → To, Notes, Pairs, Status, Date).  
> Hệ thống: số phiếu theo khuôn phiếu Stock Out của WMS "REQ-<mã kho>-YYMM-<5 số>" (prototype: REQ-CUR01-2608-00001); ô "Notes" của phiếu ghi WO của LOT.  
> Kiểm thử:  
> - Plan giữ 2.000 / 2.490 đôi của một LOT → phiếu 2.000 đôi, 490 đôi còn ở kho Curing  
> - Release TRM-PLAN-20260812-06 (LOT-20260805-AB, 510 đôi) → phiếu REQ-CUR01-2608-00001, Notes WO-20260803  
> Chưa chốt: phiếu chưa hiện ở màn WMS Outbound.  
> Nguồn: Q-20261006-02 (câu 1) · Q-20261006-03 (câu 2) · Q-20260930-05 · Q-20261009-09 (câu 3) · prototype v0.87  

#### B25 · Plan đã có sản lượng?

- Planner
- Đến từ: B04, B24
- Đi tới [Có]: B26 · Không sửa được — plan đã có sản lượng
- Đi tới [Chưa]: B27 · Plan APPROVED?

> Plan còn sửa được không?  
> Có sản lượng: ít nhất một LOT của plan đã có Output Entry ở Trimming Result → khoá "Edit Plan" cho cả plan, kể cả LOT chưa ghi.  
> Chưa: plan DRAFT hoặc APPROVED chưa có Output Entry → cho sửa.  
> Hệ thống: thông báo "This plan has production results and cannot be edited."  
> Kiểm thử:  
> - Plan APPROVED 3 LOT, 1 LOT đã ghi Output → "Edit Plan" bị khoá  
> Nguồn: Q-20260925-04 · Q-20261006-02 (câu 4) · prototype v0.76  

#### B27 · Plan APPROVED?

- Planner
- Đến từ: B25
- Đi tới [Chưa — DRAFT]: B28 · Sửa plan nháp
- Đi tới [Có]: B29 · Sửa plan APPROVED

> Plan đang ở trạng thái nào?  
> Chưa — DRAFT: sửa như lúc lập plan, lưu bằng "Save Draft" hoặc "Confirm Trimming Plan".  
> Có — APPROVED: sửa nhưng plan giữ APPROVED và Plan No.; không có "Save Draft".  
> Nguồn: Q-20261006-02 (câu 3) · prototype v0.76  

#### B28 · Sửa plan nháp

- Planner · Web · Trimming Planning
- Đến từ: B27
- Đi tới [sửa LOT / số]: B09 · Tick LOT ở Curing Room INV List

> Planner mở lại plan nháp để đổi LOT hoặc số theo size.  
> Thao tác: trang chi tiết plan › nút "Edit Plan" → trang lập plan với LOT và số đã lưu; "Cancel editing" để thoát không lưu.  
> Hệ thống: "Available" tính lại theo tồn hiện tại, phần plan này đang giữ vẫn tính cho plan này; plan DRAFT chưa có phiếu Stock Out.  
> Kết quả: lưu bằng "Save Draft" → giữ DRAFT, hoặc "Confirm Trimming Plan" → APPROVED.  
> Nguồn: Q-20260925-04 · Q-20260930-02 (câu 1) · prototype v0.76  

#### B29 · Sửa plan APPROVED

- Planner · Web · Trimming Planning
- Đến từ: B27
- Đi tới: B30 · LOT đổi số hoặc bị bỏ?

> Planner sửa số theo size hoặc bỏ LOT của plan đã APPROVED mà chưa có sản lượng.  
> Thao tác: trang chi tiết plan › "Edit Plan" → sửa số / bỏ tick LOT → "Confirm Trimming Plan" → popup "Save changes to Trimming Plan <số plan>?" (liệt kê "Changed LOTs") → "Save changes". Trang sửa không có "Save Draft".  
> Hệ thống: "Available" tính lại theo tồn hiện tại như lúc lập plan; số theo size không vượt "Available".  
> Kết quả: plan giữ APPROVED và Plan No.; thông báo "<số plan> updated · <n> pairs reserved · Stock Out Curing: <n> cancelled, <n> issued".  
> Chặn khi: plan đã có Output Entry hoặc bị người khác sửa trước → không lưu.  
> Kiểm thử:  
> - Plan APPROVED, giảm W5 của LOT X 10 đôi → "Save changes" → plan vẫn APPROVED, cùng Plan No.  
> Nguồn: Q-20261006-02 (câu 3) · prototype v0.76  

#### B30 · LOT đổi số hoặc bị bỏ?

- Planner
- Đến từ: B29
- Đi tới [Không]: B31 · Plan giữ APPROVED — phiếu giữ nguyên
- Đi tới [Có]: B32 · Cancel phiếu Stock Out của LOT đó

> Lần sửa có làm đổi số của LOT đã có phiếu Stock Out không?  
> Có: LOT đổi số theo size hoặc bị bỏ khỏi plan → phiếu của LOT đó phải đổi.  
> Không: số mọi LOT giữ nguyên → phiếu giữ nguyên.  
> Hệ thống: LOT chưa đủ ngày curing chưa có phiếu — chỉ đổi Plan Qty, phiếu sinh sau theo số mới.  
> Nguồn: Q-20261006-02 (câu 2) · prototype v0.76  

#### B32 · Cancel phiếu Stock Out của LOT đó

- Planner · System (auto) · Trimming Planning
- Đến từ: B30
- Đi tới: B33 · Phiếu cũ CANCELLED — tồn trả về kho Curing
- Đi tới: B34 · Sinh phiếu mới theo Plan Qty mới

> Hệ thống huỷ phiếu Stock Out cũ của LOT đổi số hoặc bị bỏ; không dùng phiếu số âm.  
> Hệ thống: phiếu → CANCELLED, tồn chờ cắt tỉa ở WH-TRM-01 trả về kho Curing (luật Cancel Slip WMS §1.7); phiếu CANCELLED vẫn hiện ở khung "Stock Out Curing → WH-TRM-01".  
> Kết quả: LOT bị bỏ khỏi plan chỉ bị huỷ phiếu; LOT đổi số đi tiếp bước sinh phiếu mới.  
> Kiểm thử:  
> - LOT X có phiếu 2.500 đôi, sửa còn 2.490 → phiếu 2.500 đôi CANCELLED, tồn Curing của LOT X tăng 2.500 trước khi phiếu mới xuất 2.490  
> Chưa chốt: phiếu nằm trong kỳ tồn đã đóng (§1.8) thì có chặn sửa plan không.  
> Nguồn: Q-20261006-02 (câu 2) · WMS_BUSINESS_RULE §1.7 · prototype v0.76  

#### B34 · Sinh phiếu mới theo Plan Qty mới

- Planner · System (auto) · Trimming Planning
- Đến từ: B32
- Đi tới: B35 · Plan giữ APPROVED và Plan No. — Trimming Result cập nhật số
- Đi tới: B36 · End

> Hệ thống sinh phiếu Stock Out mới cho LOT vừa đổi số.  
> Hệ thống: phiếu mới theo "Plan Qty" mới của LOT, APPROVED ngay; LOT chưa đủ ngày curing thì chưa sinh.  
> Kết quả: plan giữ APPROVED và Plan No.; "RECEIVED" của LOT ở Trimming Result bằng số phiếu mới.  
> Kiểm thử:  
> - LOT X sửa còn 2.490 → phiếu mới 2.490 đôi APPROVED; Trimming Result: Received 2.490  
> Nguồn: Q-20261006-02 (câu 2, 3) · prototype v0.76  

#### B38 · Plan đã có sản lượng?

- Planner
- Đến từ: B05, B37
- Đi tới [Có]: B39 · Không huỷ được — plan đã có sản lượng
- Đi tới [Chưa]: B40 · Huỷ plan Trimming

> Plan còn huỷ được không?  
> Có sản lượng: ít nhất một LOT đã có Output Entry → khoá "Cancel Plan".  
> Chưa: plan DRAFT hoặc APPROVED chưa có Output Entry → cho huỷ.  
> Hệ thống: thông báo "This plan has production results and cannot be changed."  
> Nguồn: Q-20260925-04 · Q-20261006-02 (câu 4) · prototype v0.76  

#### B40 · Huỷ plan Trimming

- Planner · Web · Trimming Planning
- Đến từ: B38
- Đi tới: B41 · Cancel mọi phiếu · trả tồn đã giữ

> Planner huỷ plan không dùng nữa; plan CANCELLED đóng hẳn, không sửa hay xác nhận lại được.  
> Thao tác: trang chi tiết plan › nút "Cancel Plan" → popup đỏ "Cancel Trimming Plan <số plan>?" ("The reservation on the LOTs is released. Its Stock Out Curing slips are cancelled and the stock returns to Curing. This cannot be undone.") → "Cancel Plan".  
> Kết quả: plan → CANCELLED; thông báo "<số plan> · Cancelled · reservation released · Stock Out Curing: <n> cancelled".  
> Nguồn: Q-20260930-02 (câu 1) · Q-20261006-02 (câu 2) · prototype v0.76  

#### B41 · Cancel mọi phiếu · trả tồn đã giữ

- Planner · System (auto) · Trimming Planning
- Đến từ: B40
- Đi tới: B42 · Plan CANCELLED · tồn về Curing · rút khỏi Trimming Result
- Đi tới: B43 · End

> Hệ thống huỷ mọi phiếu Stock Out còn APPROVED của plan và trả số đang giữ.  
> Hệ thống: phiếu → CANCELLED, tồn chờ cắt tỉa ở WH-TRM-01 về kho Curing (§1.7); "Available" của từng LOT tăng đúng phần của plan; plan rút khỏi danh sách Trimming Result.  
> Kiểm thử:  
> - Huỷ plan APPROVED giữ 300 đôi của LOT X đã có phiếu → phiếu CANCELLED, Available của LOT X tăng 300, Trimming Result không còn dòng của plan  
> - Huỷ plan DRAFT → không có phiếu nào để huỷ, chỉ trả số giữ  
> Nguồn: Q-20261006-02 (câu 2) · WMS_BUSINESS_RULE §1.7 · prototype v0.76  

## Vòng đời trạng thái

#### Plan Trimming

`DRAFT` → `CANCELLED` → `APPROVED` → `COMPLETED`

Bước chuyển:

- `DRAFT` -- Confirm & Release --> `APPROVED`
- `APPROVED` -- Mọi LOT Remaining = 0 --> `COMPLETED`
- `DRAFT` -- Cancel Plan — trả tồn --> `CANCELLED`
- `APPROVED` -- Edit Plan · Save changes — giữ APPROVED --> `APPROVED` (quay lại)
- `APPROVED` -- Cancel Plan — chưa có sản lượng --> `CANCELLED`

#### Phiếu Stock Out Curing (mỗi LOT × plan)

`APPROVED` → `CANCELLED`

Bước chuyển:

- `APPROVED` -- Sửa số / bỏ LOT · Cancel Plan --> `CANCELLED`

## Input

| # | Input | Loại | Đi vào bước |
| --- | --- | --- | --- |
| I-1 | Model Attribute của WO nguồn — Logo / Spray / OOMG, quyết định LOT nào hiện ở plan loại nào | Master data | Chọn Plan Type · P.O Month |
| I-2 | Curing Room INV List — LOT Curing theo ca (mã đuôi AB = ca ngày, CD = ca đêm), P.O Month, Days, số theo size và Available; gồm cả LOT chưa curing xong | Bể tồn công đoạn — flow Curing Confirmation | Tick LOT ở Curing Room INV List |
| I-3 | Standard curing days — số ngày curing chuẩn | Master data | LOT đủ ngày curing? |
| I-4 | Output Entry của plan — Trimming Result (có hay chưa) | Kết quả sản xuất — flow Trimming Result | Plan đã có sản lượng? |

## Bước ↔ màn hình thực hiện

| Bước | Vai trò | Màn hình · nút trên UI |
| --- | --- | --- |
| Tạo plan Trimming · Chọn Plan Type · P.O Month · Tick LOT ở Curing Room INV List · Chỉnh Plan Qty theo size | Planner | Trimming Planning · `Create Plan` → `Create Trimming Plan` / `Making … Trimming Plan` (`PLAN TYPE *`, `P.O (MONTH) *`, `PLAN DATE`, `SHIFT`, `Curing Room INV List`) |
| Lưu nháp plan Trimming · Xác nhận plan Trimming | Planner | Trimming Planning · `Save Draft`, `Confirm Trimming Plan` → `Confirm & Release` |
| Sửa plan nháp · Sửa plan APPROVED | Planner | Trimming Planning · trang chi tiết plan · `Edit Plan` → `Confirm Trimming Plan` → `Save changes` (plan APPROVED không có `Save Draft`) |
| Huỷ plan Trimming | Planner | Trimming Planning · trang chi tiết plan · `Cancel Plan` |
| Khoá tick LOT · Khoá Save Draft · Confirm · Sinh phiếu Stock Out Curing cho từng LOT · Cancel phiếu Stock Out của LOT đó · Sinh phiếu mới theo Plan Qty mới · Cancel mọi phiếu · trả tồn đã giữ | System (auto) | Trimming Planning · khung `Stock Out Curing → WH-TRM-01` trên trang chi tiết plan |

## Output

| # | Output | Điều kiện sinh ra |
| --- | --- | --- |
| O-1 | Plan Trimming `APPROVED` → Trimming Result, chờ ghi sản lượng | Planner bấm Confirm & Release |
| O-2 | LOT chưa đủ ngày curing — phiếu sinh ở Curing Confirmation lúc LOT đủ ngày | Plan APPROVED có LOT "Days" < Standard curing days |
| O-3 | Phiếu Stock Out Curing → WH-TRM-01, `APPROVED`, mỗi LOT một phiếu | Plan APPROVED, LOT đủ ngày curing |
| O-4 | Không sửa được — plan đã có sản lượng | Edit Plan khi plan có Output Entry ("This plan has production results and cannot be edited.") |
| O-5 | Plan giữ `APPROVED` — phiếu giữ nguyên | Sửa plan APPROVED không đổi số LOT nào |
| O-6 | Phiếu cũ `CANCELLED` — tồn trả về kho Curing | Sửa plan APPROVED đổi số hoặc bỏ LOT đã có phiếu |
| O-7 | Plan giữ `APPROVED` và Plan No. — Trimming Result cập nhật số | Save changes có LOT đổi số |
| O-8 | Không huỷ được — plan đã có sản lượng | Cancel Plan khi plan có Output Entry |
| O-9 | Plan `CANCELLED` · tồn về Curing · rút khỏi Trimming Result | Planner bấm Cancel Plan khi plan `DRAFT` / `APPROVED` chưa có sản lượng |

## Thuật ngữ

| Thuật ngữ | Nghĩa trong flow này |
| --- | --- |
| `Plan Type` | Loại hoàn thiện của plan: Logo, Spray hoặc OOMG — mỗi plan một loại |
| `OOMG` | Loại sản phẩm thứ ba bên cạnh Logo và Spray (ví dụ model "OMG Clog"); sau Trimming đi theo luồng Logo |
| `Model Attribute` | Thuộc tính Logo / Spray / OOMG của model trên WO nguồn — quyết định LOT Curing thuộc loại plan nào |
| `LOT` / `LOT No.` | Lô hàng từ công đoạn ép: 1 ca = 1 LOT, mã dạng LOT-YYYYMMDD-AB (ca ngày) / -CD (ca đêm), có số theo size |
| `P.O (Month)` | Tháng P.O của plan (vd 2026.Aug) — bắt buộc; plan Trimming không gắn Customer P.O |
| `Curing Room INV List` | Danh sách tồn LOT Curing chờ Trimming, lọc theo Plan Type, P.O Month và Shift |
| `Available` | Số còn lập plan được của LOT theo size = tồn LOT − phần các plan khác đang giữ (plan DRAFT và APPROVED đều giữ) |
| `Days` | Plan Date − ngày curing của LOT |
| `Plan Qty` | Số lên plan của LOT theo size — mặc định toàn bộ Available khi tick, sửa giảm được |
| `Stock Out Curing` | Phiếu Stock Out của WMS xuất LOT từ kho công đoạn "WH-CUR-01 / Curing" sang "WH-TRM-01 / Trimming": mỗi LOT × plan một phiếu, theo Plan Qty của LOT, APPROVED ngay khi sinh; sửa số / bỏ LOT / huỷ plan thì phiếu CANCELLED và tồn về Curing; số phiếu khuôn REQ-<mã kho>-YYMM-<5 số>, ô Notes ghi WO |
| `Save changes` | Nút lưu khi sửa plan APPROVED: plan giữ APPROVED và Plan No. |
