# Outsourcing Planning (Spray Out) — lập plan gửi sơn 3 bước, duyệt, sinh phiếu Stock Out gửi nhà cung cấp; kho duyệt phiếu thì plan SENT

> Fine Chemical (FC) · Module MES · v0.8 · 13/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/outsourcing

## 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
- Warehouse Staff
- 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: Vendor (NCC sơn) | Master data | B06 |
| B02 | Input | Dữ liệu | Waiting SPRAY-OUT ZONE — LOT Spray A + A- (Trimming Result · WH-TRM-01) |  | B07 |
| B03 | Input | Dữ liệu | Repair Inventory — hàng Spray (Trimming · Pending repair đã sửa — Repaired) |  | B08 |
| B04 | Input | Dữ liệu | Customer P.O SPRAY · ETD · P.O Month (Sales Order) |  | B09 |
| B05 | Planner | Bắt đầu | Start |  | B06 |
| B06 | Planner | Bước | Tạo Spray Out Plan | Web · Outsourcing Planning | B07 |
| B07 | Planner | Bước | Step 1 · Chọn LOT Waiting SPRAY-OUT ZONE | Web · Outsourcing Planning | B08 |
| B08 | Planner | Bước | Step 2 · Chọn Repair Inventory | Web · Outsourcing Planning | B09 |
| B09 | Planner | Bước | Step 3 · Phân bổ vào Detail P.O | Web · Outsourcing Planning | B10 |
| B10 | Planner | Điểm quyết định | Phân bổ hợp lệ? |  | B11 [Không]; B12 [Có] |
| B11 | Output | Dữ liệu | Chặn Release — vượt Available / Remaining P.O, thiếu Vendor |  | (kết thúc) |
| B12 | Planner | Điểm quyết định | Release ngay? |  | B13 [Chưa]; B14 [Có] |
| B13 | Planner | Bước | Lưu nháp Spray Out Plan | Web · Outsourcing Planning | B15 |
| B14 | Planner | Bước | Phát hành Spray Out Plan | Web · Outsourcing Planning | B16 [NEW] |
| B15 | Output | Dữ liệu | Plan DRAFT — mở lại Step 3, Release sau |  | (kết thúc) |
| B16 | Planner | Điểm quyết định | Duyệt plan? |  | B17 [Không]; B18 [Đạt] |
| B17 | Planner | Bước | Từ chối Spray Out Plan | Web · Outsourcing Planning | B19 |
| B18 | Planner | Bước | Duyệt Spray Out Plan | Web · Outsourcing Planning | B20 [APPROVED] |
| B19 | Output | Dữ liệu | Plan REJECTED — nguồn trả về, lập plan mới |  | (kết thúc) |
| B20 | Planner | Bước | Sinh phiếu Stock Out WH-TRM-01 → Vendor | System (auto) · Outsourcing Planning | B21; B22 |
| B21 | Output | Dữ liệu | Phiếu Stock Out → WMS (chờ kho duyệt) |  | (kết thúc) |
| B22 | Warehouse Staff | Bước | Duyệt phiếu Stock Out | Web · Outbound | B23 [Stock Out APPROVED] |
| B23 | Warehouse Staff | Bước | Chuyển plan SENT (OUT DATE = ngày duyệt) | System (auto) · Outsourcing Planning | B24; B25 |
| B24 | Output | Dữ liệu | Plan SENT — LOT ở NCC (đã trừ WH-TRM-01), chờ Outsourcing Result |  | (kết thúc) |
| B25 | Warehouse Staff | Kết thúc | End |  |  |
| B26 | Planner | Bắt đầu | Cần sửa plan |  | B27 |
| B27 | Planner | Điểm quyết định | Phiếu Stock Out đã APPROVED? |  | B28 [Rồi]; B29 [Chưa] |
| B28 | Output | Dữ liệu | Không sửa — hàng đã xuất sang NCC |  | (kết thúc) |
| B29 | Planner | Bước | Sửa Spray Out Plan (Edit / Revise plan) | Web · Outsourcing Planning | B30; B31 |
| B30 | Output | Dữ liệu | Plan sửa ở Step 3 — phiếu Stock Out cập nhật theo |  | (kết thúc) |
| B31 | Planner | Kết thúc | End |  |  |
| B32 | Planner | Bắt đầu | Bỏ plan |  | B33 |
| B33 | Planner | Điểm quyết định | Plan DRAFT? |  | B34 [Có]; B35 [Không] |
| B34 | Planner | Bước | Xoá plan nháp | Web · Outsourcing Planning | B36 |
| B35 | Planner | Điểm quyết định | Phiếu Stock Out chưa APPROVED? |  | B37 [Không]; B38 [Có] |
| B36 | Output | Dữ liệu | Plan nháp đã xoá · nguồn trả về |  | (kết thúc) |
| B37 | Output | Dữ liệu | Không huỷ được — phiếu Stock Out đã APPROVED |  | (kết thúc) |
| B38 | Planner | Bước | Huỷ Spray Out Plan | Web · Outsourcing Planning | B39; B40 |
| B39 | Output | Dữ liệu | Plan CANCELLED — nguồn trả về, phiếu Stock Out huỷ |  | (kết thúc) |
| B40 | Planner | Kết thúc | End |  |  |

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

#### B06 · Tạo Spray Out Plan

- Planner · Web · Outsourcing Planning
- Đến từ: B01, B05
- Đi tới: B07 · Step 1 · Chọn LOT Waiting SPRAY-OUT ZONE

> Planner tạo một Spray Out Plan mới để gửi hàng SPRAY đã Trimming sang NCC sơn.  
> Thao tác: Outsourcing Planning › "SPRAY OUT List" › nút "Create Plan" → trang "Add Spray Out Plan"; card "Plan Details" có "Plan No." (Auto-generated) · "P.O (Month) *" · "Plan Date" · "Vendor *".  
> Hệ thống: Plan No. dạng SPO-YYYYMMDD-NN; P.O (Month) mặc định tháng đầu còn P.O SPRAY có Remaining; danh sách Vendor lấy từ master data NCC sơn (COVA, MINH HUY).  
> Chặn khi: bấm "Next" ở Step 1 khi chưa chọn P.O (Month) — "Select P.O (Month) first."  
> Kiểm thử:  
> - Để trống P.O (Month), bấm Next → hiện thông báo trên, không sang Step 2  
> Nguồn: Q-20261001-10 (OQ-93) · Q-20260929-02 · prototype v0.69  

#### B07 · Step 1 · Chọn LOT Waiting SPRAY-OUT ZONE

- Planner · Web · Outsourcing Planning
- Đến từ: B02, B06
- Đi tới: B08 · Step 2 · Chọn Repair Inventory

> Planner chọn các LOT SPRAY đang chờ gửi sơn — bước này chỉ chọn, chưa phân bổ cho P.O.  
> Thao tác: "Step 1 · Select Waiting SPRAY-OUT ZONE" › tick cột "Select"; cột LOT No. · Trimming Plan · P.O (Month) · WO No. · Model · Base Color · AL / INT · Grade · IN Date · Curing Days · số theo size · Available.  
> Hệ thống: "IN Date" = ngày LOT vào Curing; "Curing Days" = Plan Date − Curing Date. Step 1 không có cột Status (Step 2 Repair vẫn có).  
> Hệ thống: nguồn = A + A- đã ghi ở Trimming Result của LOT Spray, nằm ở WH-TRM-01; "Available" = số đã ghi − số các plan Spray Out khác còn hiệu lực (DRAFT, NEW, APPROVED, SENT, RECEIVED) đang giữ.  
> Chặn khi: LOT không phải hàng SPRAY — "Logo output — unavailable for Spray Out"; LOT đã bị giữ hết — "Fully reserved" (lý do hiện khi rê chuột lên ô tick bị khoá).  
> Kiểm thử:  
> - LOT Logo → ô tick bị khoá, rê chuột thấy lý do trên  
> - LOT 100 đôi, plan khác đã giữ 60 → Available 40  
> Nguồn: Q-20261001-10 (OQ-93) · Q-20260929-01 · Q-20261006-06 (3) · prototype v0.80  

#### B08 · Step 2 · Chọn Repair Inventory

- Planner · Web · Outsourcing Planning
- Đến từ: B03, B07
- Đi tới: B09 · Step 3 · Phân bổ vào Detail P.O

> Planner chọn thêm hàng Spray đã sửa xong trong kho Repair để gửi sơn cùng plan — bước này chỉ chọn.  
> Thao tác: "Step 2 · Select Repair Inventory" › tick dòng; cột Repair No. (kèm "from RW-…") · WO No. · Model · Base Color · AL / INT · số theo size · Available.  
> Hệ thống: chỉ hiện phiếu Repair / Rework đã "Repaired" của hàng SPRAY có Source "Trimming · Pending repair"; "Available" = số sửa đạt − số plan Spray Out khác đang giữ − số Packing Plan đang dùng cùng dòng Repair.  
> Kết quả: hàng SPRAY bị Pending repair ở Trimming, sửa xong thì được chọn ở đây để gửi sơn cùng plan; hàng "Spray Out · Pending repair" sửa xong không về đây mà sang Step 2 của Packing Planning Spray.  
> Kiểm thử:  
> - Phiếu RW "Trimming · Pending repair" của hàng SPRAY ghi Repaired 3 đôi → Step 2 có dòng 3 đôi chọn được  
> - Phiếu RW "Spray Out · Pending repair" ghi Repaired → không có dòng ở Step 2 này (hiện ở Packing Planning Spray)  
> Nguồn: Q-20261013-01 · Q-20261001-11 (OQ-96) · prototype v0.91  

#### B09 · Step 3 · Phân bổ vào Detail P.O

- Planner · Web · Outsourcing Planning
- Đến từ: B04, B08
- Đi tới: B10 · Phân bổ hợp lệ?

> Planner phân bổ hàng đã chọn ở Step 1 và Step 2 vào từng Customer P.O — đây là bước duy nhất phân bổ.  
> Thao tác: "Step 3 · Allocate to Detail P.O" › khối "Selected Stock (by size)" (Selected · "Allocated to P.O" · "Not Allocated"); mỗi P.O hai dòng "Remaining" / "Allocated" (ô nhập theo size), cột "Action" "Allocate" / "Remove", nút "Auto Allocate", "Clear".  
> Hệ thống: chỉ liệt kê P.O SPRAY cùng P.O (Month), khớp Model · Base Color · AL / INT và Grade P.O chấp nhận; "Remaining" = ORDER của P.O − số các plan Spray Out khác còn hiệu lực đã phân bổ.  
> Hệ thống: "Auto Allocate" lấp hàng Repair trước, rồi P.O có ETD sớm nhất trước; một plan chứa được nhiều P.O; Vendor để trống thì lấy NCC của P.O đầu tiên.  
> Kiểm thử:  
> - Chọn 1.802 đôi, Auto Allocate → dòng Repair được dùng trước, P.O ETD sớm được lấp trước  
> - Không P.O nào khớp → "No Customer P.O in P.O Month … matches the selected stock."  
> Nguồn: Q-20260929-06 · Q-20261001-10 (OQ-93) · prototype v0.69  

#### B10 · Phân bổ hợp lệ?

- Planner
- Đến từ: B09
- Đi tới [Không]: B11 · Chặn Release — vượt Available / Remaining P.O, thiếu Vendor
- Đi tới [Có]: B12 · Release ngay?

> Hệ thống kiểm phân bổ trước khi lưu hoặc phát hành plan.  
> Có: có Vendor, Plan Date, mọi P.O cùng một P.O (Month), tổng mỗi LOT / size ≤ "Available", tổng mỗi P.O / size ≤ "Remaining", có ít nhất một đôi được phân bổ.  
> Không: hiện lỗi trên trang — "Select the Vendor." · "LOT … / … exceeds Available (n)." · "P.O … / … exceeds the P.O Remaining (n)." · "All P.O of one plan must be in the same P.O Month." · "Allocate at least one pair to a Detail P.O."  
> Kiểm thử:  
> - Available 136, nhập 137 → bị chặn "exceeds Available (136)"  
> - Remaining P.O 80, nhập 80 → được  
> Nguồn: prototype v0.69  

#### B12 · Release ngay?

- Planner
- Đến từ: B10
- Đi tới [Chưa]: B13 · Lưu nháp Spray Out Plan
- Đi tới [Có]: B14 · Phát hành Spray Out Plan

> Planner phát hành plan ngay hay lưu nháp để sửa tiếp?  
> Có: bấm "Release Plan" ở Step 3.  
> Chưa: bấm "Save Draft".  
> Nguồn: prototype v0.69  

#### B13 · Lưu nháp Spray Out Plan

- Planner · Web · Outsourcing Planning
- Đến từ: B12
- Đi tới: B15 · Plan DRAFT — mở lại Step 3, Release sau

> Planner lưu plan ở dạng nháp để mở lại sửa sau.  
> Thao tác: Step 3 › nút "Save Draft".  
> Kết quả: plan → DRAFT; số đã phân bổ được giữ ngay (trừ khỏi Available của LOT / Repair và Remaining của P.O) cho tới khi xoá nháp; mở lại plan vào thẳng Step 3.  
> Kiểm thử:  
> - Lưu nháp plan giữ 40 đôi của LOT A → plan khác thấy Available của LOT A giảm 40  
> Chưa chốt: plan DRAFT có nên giữ nguồn không — prototype v0.69 giữ ngay từ khi lưu nháp.  
> Nguồn: prototype v0.69  

#### B14 · Phát hành Spray Out Plan

- Planner · Web · Outsourcing Planning
- Đến từ: B12
- Đi tới [NEW]: B16 · Duyệt plan?

> Planner phát hành plan để chờ duyệt.  
> Thao tác: Step 3 › nút "Release Plan" → hộp "Release Spray Out Plan …?" (P.O (Month) · P.O in plan · Vendor · Plan Date · Send Qty, bảng size theo "P.O · LOT / Repair") › "Release Plan".  
> Hệ thống: kiểm lại như bước "Phân bổ hợp lệ?"; số theo size được giữ cho từng Customer P.O, hàng Repair dùng trước.  
> Kết quả: plan → NEW (chờ duyệt); thông báo "… released · New (waiting for approval) · n P.O · n pairs reserved · Vendor …".  
> Kiểm thử:  
> - Release plan 2 P.O → danh sách SPRAY OUT List hiện hai dòng (mỗi P.O một dòng) cùng số plan  
> Nguồn: Q-20261001-10 (OQ-93) · prototype v0.69  

#### B16 · Duyệt plan?

- Planner
- Đến từ: B14
- Đi tới [Không]: B17 · Từ chối Spray Out Plan
- Đi tới [Đạt]: B18 · Duyệt Spray Out Plan

> Planner quyết định plan NEW có được gửi NCC sơn không.  
> Đạt: bấm "Approve" trên trang chi tiết plan.  
> Không: bấm "Reject".  
> Chưa chốt: Planner tự duyệt lệch BRD §7 (Production Supervisor duyệt) — chờ khách xác nhận.  
> Nguồn: Q-20261005-01 (2) · Q-20260928-04 · prototype v0.69  

#### B17 · Từ chối Spray Out Plan

- Planner · Web · Outsourcing Planning
- Đến từ: B16
- Đi tới: B19 · Plan REJECTED — nguồn trả về, lập plan mới

> Planner từ chối plan và ghi lý do; nguồn đã giữ được trả lại.  
> Khi nào: plan NEW.  
> Thao tác: trang chi tiết plan › nút "Reject" → hộp "Reject Spray Out Plan …?" › nhập lý do › "Reject".  
> Kết quả: plan → REJECTED, là trạng thái cuối — không mở lại sửa được; LOT, Repair và Remaining P.O được trả lại ("LOT reservation released"); Planner lập plan mới nếu cần.  
> Chặn khi: lý do để trống.  
> Kiểm thử:  
> - Reject plan giữ 40 đôi LOT A → plan mới thấy Available LOT A tăng lại 40  
> - Reject không nhập lý do → không lưu được  
> Chưa chốt: prototype v0.69 chưa có ô lý do trong hộp Reject.  
> Nguồn: Q-20260923-19 (C) · Q-20261005-01 (2) · prototype v0.69  

#### B18 · Duyệt Spray Out Plan

- Planner · Web · Outsourcing Planning
- Đến từ: B16
- Đi tới [APPROVED]: B20 · Sinh phiếu Stock Out WH-TRM-01 → Vendor

> Planner duyệt plan để hàng được xuất sang NCC sơn.  
> Khi nào: plan NEW.  
> Thao tác: trang chi tiết plan › nút "Approve" → hộp "Approve Spray Out Plan …?" › "Approve".  
> Hệ thống: kiểm lại phân bổ như lúc Release (Vendor, Available, Remaining P.O).  
> Kết quả: plan → APPROVED; hệ thống sinh phiếu Stock Out ngay sau đó (bước kế).  
> Kiểm thử:  
> - Approve plan NEW → plan APPROVED, có một phiếu Stock Out mang số plan  
> Nguồn: Q-20261005-01 (2) · Q-20261005-04 · prototype v0.69  

#### B20 · Sinh phiếu Stock Out WH-TRM-01 → Vendor

- Planner · System (auto) · Outsourcing Planning
- Đến từ: B18
- Đi tới: B21 · Phiếu Stock Out → WMS (chờ kho duyệt)
- Đi tới: B22 · Duyệt phiếu Stock Out

> Hệ thống tự sinh một phiếu Stock Out để xuất hàng của plan khỏi WH-TRM-01 gửi Vendor.  
> Khi nào: plan chuyển sang APPROVED.  
> Hệ thống: một phiếu / plan, kho xuất WH-TRM-01, nơi nhận là Vendor của plan; mỗi dòng plan (LOT hoặc dòng Repair × Customer P.O) một dòng phiếu theo size; chỉ hàng LOT / Repair, không vật tư khác.  
> Kết quả: phiếu Stock Out chờ kho duyệt ở màn WMS Outbound; tồn WH-TRM-01 chưa đổi cho tới khi phiếu APPROVED.  
> Kiểm thử:  
> - Approve plan 4 dòng 2.050 đôi → phiếu Stock Out 4 dòng, 2.050 đôi, Vendor COVA  
> Chưa chốt: trạng thái phiếu lúc sinh (SAVED hay SUBMITTED) và số phiếu; prototype v0.69 còn sinh MOR-SO thay cho Stock Out.  
> Nguồn: Q-20261005-04 · Q-20260930-05 (tiền lệ Stock Out Curing)  

#### B22 · Duyệt phiếu Stock Out

- Warehouse Staff · Web · Outbound
- Đến từ: B20
- Đi tới [Stock Out APPROVED]: B23 · Chuyển plan SENT (OUT DATE = ngày duyệt)

> Warehouse Staff duyệt phiếu Stock Out khi hàng thực sự rời xưởng sang NCC sơn.  
> Khi nào: phiếu Stock Out của plan APPROVED, chưa APPROVED.  
> Thao tác: WMS › màn "Outbound" (Stock Out) › mở phiếu mang số Spray Out Plan › Approve.  
> Hệ thống: trừ các LOT / dòng Repair của phiếu khỏi WH-TRM-01 theo size theo luật Slip của WMS.  
> Kết quả: phiếu Stock Out → APPROVED; plan được chuyển sang SENT ở bước kế.  
> Kiểm thử:  
> - LOT 1.826 đôi, phiếu xuất 640 đôi của LOT → sau khi phiếu APPROVED tồn LOT ở WH-TRM-01 còn 1.186  
> Chưa chốt: ai submit phiếu trước khi duyệt và kho có được sửa số trên phiếu tự sinh không.  
> Nguồn: Q-20261005-05 (2)  

#### B23 · Chuyển plan SENT (OUT DATE = ngày duyệt)

- Warehouse Staff · System (auto) · Outsourcing Planning
- Đến từ: B22
- Đi tới: B24 · Plan SENT — LOT ở NCC (đã trừ WH-TRM-01), chờ Outsourcing Result
- Đi tới: B25 · End

> Hệ thống chuyển plan sang SENT khi phiếu Stock Out của plan được duyệt.  
> Khi nào: phiếu Stock Out của plan chuyển APPROVED.  
> Hệ thống: OUT DATE của plan = ngày phiếu APPROVED; "At vendor" = Send Qty.  
> Kết quả: plan → SENT; plan hiện ở "Waiting to Return" của Outsourcing Result. Màn Outsourcing Planning không còn khối "Send to vendor" / nút "Confirm Spray Out".  
> Kiểm thử:  
> - Phiếu APPROVED ngày 2026-08-11 → plan SENT, OUT DATE 2026-08-11  
> Chưa chốt: prototype v0.69 còn khối "Send to vendor" với ô "OUT DATE" và nút "Confirm Spray Out".  
> Nguồn: Q-20261005-05 (2)  

#### B27 · Phiếu Stock Out đã APPROVED?

- Planner
- Đến từ: B26
- Đi tới [Rồi]: B28 · Không sửa — hàng đã xuất sang NCC
- Đi tới [Chưa]: B29 · Sửa Spray Out Plan (Edit / Revise plan)

> Plan còn sửa được không?  
> Chưa: plan DRAFT, NEW, hoặc APPROVED mà phiếu Stock Out chưa APPROVED → cho sửa.  
> Rồi: phiếu Stock Out đã APPROVED (hàng đã xuất, plan SENT / RECEIVED) → không sửa; REJECTED / CANCELLED cũng không mở lại được.  
> Nguồn: Q-20261005-05 (1)  

#### B29 · Sửa Spray Out Plan (Edit / Revise plan)

- Planner · Web · Outsourcing Planning
- Đến từ: B27
- Đi tới: B30 · Plan sửa ở Step 3 — phiếu Stock Out cập nhật theo
- Đi tới: B31 · End

> Planner mở lại plan chưa xuất hàng để sửa phân bổ.  
> Khi nào: plan DRAFT / NEW (nút "Edit plan") hoặc APPROVED với phiếu Stock Out chưa APPROVED (nút "Revise plan").  
> Thao tác: trang chi tiết › "Edit plan" / "Revise plan" → trang "Edit Spray Out Plan" mở ở Step 3 › "Save Draft", "Release Plan" hoặc "Save revision".  
> Kết quả: DRAFT / NEW lưu theo nút bấm; APPROVED bấm "Save revision" → plan giữ APPROVED, hệ thống cập nhật dòng phiếu Stock Out theo số mới.  
> Chặn khi: plan đã bị người khác đổi hoặc phiếu đã APPROVED — "The plan changed or has already shipped. Reopen the current plan before editing."  
> Kiểm thử:  
> - Revise plan APPROVED giảm 40 đôi khi phiếu chưa APPROVED → phiếu Stock Out giảm 40 đôi  
> Chưa chốt: Revise plan APPROVED không qua duyệt lại — lệch nguyên tắc Revision về DRAFT, duyệt lại.  
> Nguồn: Q-20261005-05 (1) · prototype v0.69  

#### B33 · Plan DRAFT?

- Planner
- Đến từ: B32
- Đi tới [Có]: B34 · Xoá plan nháp
- Đi tới [Không]: B35 · Phiếu Stock Out chưa APPROVED?

> Plan muốn bỏ đang là nháp không?  
> Có: plan DRAFT → xoá được.  
> Không: xét tiếp có huỷ được không.  
> Nguồn: prototype v0.69  

#### B34 · Xoá plan nháp

- Planner · Web · Outsourcing Planning
- Đến từ: B33
- Đi tới: B36 · Plan nháp đã xoá · nguồn trả về

> Planner xoá plan nháp không dùng nữa.  
> Thao tác: trang chi tiết plan DRAFT › nút "Delete Draft".  
> Kết quả: plan bị xoá; nguồn và Remaining P.O đã giữ được trả lại; thông báo "… deleted · reservation released".  
> Kiểm thử:  
> - Plan NEW → không có nút "Delete Draft"  
> Nguồn: prototype v0.69  

#### B35 · Phiếu Stock Out chưa APPROVED?

- Planner
- Đến từ: B33
- Đi tới [Không]: B37 · Không huỷ được — phiếu Stock Out đã APPROVED
- Đi tới [Có]: B38 · Huỷ Spray Out Plan

> Plan có còn huỷ được không?  
> Có: plan NEW, hoặc APPROVED mà phiếu Stock Out chưa APPROVED → huỷ được.  
> Không: phiếu Stock Out đã APPROVED (hàng đã xuất) → không huỷ; thông báo "Status cannot change after shipment or receipt."  
> Nguồn: Q-20261005-05 (1)  

#### B38 · Huỷ Spray Out Plan

- Planner · Web · Outsourcing Planning
- Đến từ: B35
- Đi tới: B39 · Plan CANCELLED — nguồn trả về, phiếu Stock Out huỷ
- Đi tới: B40 · End

> Planner huỷ plan chưa xuất hàng.  
> Thao tác: trang chi tiết plan › nút "Cancel Plan" → hộp "Cancel Spray Out Plan …?" › "Cancel Plan".  
> Kết quả: plan → CANCELLED; nguồn và Remaining P.O được trả lại ("LOT reservation released"); plan APPROVED có phiếu Stock Out chưa APPROVED thì hệ thống huỷ phiếu đó.  
> Kiểm thử:  
> - Huỷ plan APPROVED giữ 100 đôi, phiếu chưa APPROVED → LOT có lại 100 đôi Available, phiếu Stock Out CANCELLED, tồn WH-TRM-01 không đổi  
> Nguồn: Q-20261005-05 (1) · prototype v0.69  

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

#### Spray Out Plan

`DRAFT` → `NEW` → `REJECTED` → `APPROVED` → `CANCELLED` → `SENT` → `RECEIVED`

Bước chuyển:

- `DRAFT` -- Release Plan --> `NEW`
- `NEW` -- Approve · sinh Stock Out --> `APPROVED`
- `APPROVED` -- Stock Out APPROVED (WMS) --> `SENT`
- `SENT` -- Record Result — hết Remaining --> `RECEIVED`
- `DRAFT` -- Delete Draft --> `Đã xoá`
- `NEW` -- Reject --> `REJECTED`
- `APPROVED` -- Cancel Plan --> `CANCELLED`
- `NEW` -- Edit plan · Save Draft --> `DRAFT` (quay lại)
- `NEW` -- Cancel Plan --> `CANCELLED`

## Input

| # | Input | Loại | Đi vào bước |
| --- | --- | --- | --- |
| I-1 | Master data Vendor (nhà cung cấp sơn, vd COVA · MINH HUY) | Master data | Tạo Spray Out Plan |
| I-2 | Waiting SPRAY-OUT ZONE — LOT Spray có A + A- đã ghi ở Trimming Result, nằm ở kho WH-TRM-01 | Bể tồn công đoạn — flow Trimming | Step 1 · Chọn LOT Waiting SPRAY-OUT ZONE |
| I-3 | Repair Inventory — hàng Spray đã sửa xong (Repaired) ở Repair / Rework, gồm Pending repair nhận về từ NCC | Bể tồn — flow Repair / Rework | Step 2 · Chọn Repair Inventory |
| I-4 | Customer P.O SPRAY · ETD · P.O Month (từ Sales Order) | Chứng từ — Sales Order | Step 3 · Phân bổ vào Detail P.O |

## 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 Spray Out Plan | Planner | Outsourcing Planning · `SPRAY OUT List` · `Create Plan` → `Add Spray Out Plan` (card `Plan Details`) |
| Step 1 · Chọn LOT Waiting SPRAY-OUT ZONE · Step 2 · Chọn Repair Inventory · Step 3 · Phân bổ vào Detail P.O | Planner | Outsourcing Planning · `Step 1 · Select Waiting SPRAY-OUT ZONE` · `Step 2 · Select Repair Inventory` · `Step 3 · Allocate to Detail P.O` (`Allocate`, `Remove`, `Auto Allocate`, `Clear`) |
| Lưu nháp · Phát hành Spray Out Plan | Planner | Outsourcing Planning · `Save Draft`, `Release Plan` |
| Duyệt · Từ chối Spray Out Plan | Planner | Outsourcing Planning · `Spray Out Plan detail` (`Approve`, `Reject`) |
| Sinh phiếu Stock Out WH-TRM-01 → Vendor | System (auto) | Outsourcing Planning · khi Approve |
| Duyệt phiếu Stock Out → plan SENT | Warehouse Staff · System (auto) | WMS · `Outbound` (Stock Out); plan SENT, OUT DATE = ngày duyệt |
| Sửa · Xoá nháp · Huỷ Spray Out Plan | Planner | Outsourcing Planning · `Edit plan`, `Revise plan`, `Delete Draft`, `Cancel Plan` |

## Output

| # | Output | Điều kiện sinh ra |
| --- | --- | --- |
| O-1 | Chặn Release — vượt Available / Remaining P.O, thiếu Vendor | Phân bổ không qua kiểm tra ở Step 3 |
| O-2 | Plan `DRAFT` — mở lại Step 3, Release sau | Planner bấm `Save Draft` |
| O-3 | Plan `REJECTED` + lý do — nguồn trả về, lập plan mới | Planner bấm `Reject` plan `NEW` |
| O-5 | Phiếu Stock Out WH-TRM-01 → Vendor gửi WMS (chờ kho duyệt) | Plan chuyển `APPROVED` |
| O-6 | Plan `SENT` — LOT ở NCC (đã trừ WH-TRM-01), chờ Outsourcing Result | Phiếu Stock Out của plan `APPROVED` ở WMS |
| O-7 | Không sửa — hàng đã ở NCC | Plan `SENT` / `RECEIVED` |
| O-8 | Plan sửa ở Step 3 — phiếu Stock Out cập nhật theo số mới | Planner sửa plan `DRAFT` / `NEW` / `APPROVED` |
| O-9 | Plan nháp đã xoá · nguồn trả về | Planner bấm `Delete Draft` |
| O-10 | Không huỷ được — phiếu Stock Out đã APPROVED | Plan `SENT` / `RECEIVED` |
| O-11 | Plan `CANCELLED` — nguồn trả về, phiếu Stock Out chưa duyệt bị huỷ | Planner bấm `Cancel Plan` plan `NEW` / `APPROVED` |

## Thuật ngữ

| Thuật ngữ | Nghĩa trong flow này |
| --- | --- |
| `P.O` | Customer PO — đơn hàng của khách; một Spray Out Plan chứa được nhiều P.O cùng P.O (Month) |
| `P.O (Month)` | Tháng của P.O; mọi P.O trong một plan phải cùng tháng |
| `Waiting SPRAY-OUT ZONE` | Khu chờ gửi sơn: LOT Spray có A + A- đã ghi ở Trimming Result, nằm ở WH-TRM-01 |
| `Repair Inventory` | Hàng Spray đã sửa xong (Repaired) ở Repair / Rework |
| `Available` | Số còn chọn được của LOT / dòng Repair = số nguồn − số các plan khác còn hiệu lực đang giữ |
| `Remaining` | Số còn phải gửi sơn của P.O = ORDER − số các plan Spray Out khác còn hiệu lực đã phân bổ |
| `Vendor` | Nhà cung cấp sơn nhận hàng gia công (vd COVA, MINH HUY) |
| `OUT DATE` | Ngày hàng rời xưởng sang NCC = ngày phiếu Stock Out của plan được duyệt |
| `Stock Out` | Phiếu xuất kho WMS (màn Outbound); hệ thống tự sinh khi Approve Spray Out Plan, xuất LOT / Repair của plan khỏi WH-TRM-01 gửi Vendor |
| `SENT` | Hàng đã rời xưởng, đang ở NCC sơn; nhận về ở Outsourcing Result |
| `A / A-` | Grade hàng đạt (A) và đạt có lỗi nhẹ (A-) |
