Exchange Customer PO — Planner đổi hàng đã phân bổ chưa đóng gói của một Customer P.O sang một hoặc nhiều P.O, tự Confirm phiếu EXC; phần đã đổi được hoàn trả cho Packing Planning, phần không đổi ở lại plan nguồn; plan P.O đích dùng MOR của plan nguồn; phiếu DRAFT xoá được, phiếu CONFIRMED huỷ được khi P.O đích chưa đóng gói

Fine Chemical (FC) · Module MES · v0.5 · 14/10/2026 · Flow chuẩn — dùng để triển khai, kiểm thử và phát triển

Process Flow (swimlane)

MES · Exchange Customer PO — Planner đổi hàng chưa đóng gói của một Customer P.O sang một hoặc nhiều P.O, tự Confirm phiếu EXCPhaseInputPlannerOutputKhông — sửaCóChưaConfirm từ phiếu DRAFTCóDRAFTCONFIRMEDKhôngCóPacking Plan RELEASED chưađóng gói hết (P.O nguồn)Customer P.O đích · balance(Sales Order)Start▣ Exchange Customer POTạo phiếu ExchangeCustomer POWeb▣ Exchange Customer POChọn P.O nguồn· hàng theo sizeWeb▣ Exchange Customer POChọn các P.O đích· ReasonWeb▣ Exchange Customer PONhập số đổi theo sizetừng P.O đíchWebSố đổi hợp lệ?Confirm ngay?▣ Exchange Customer POLưu nháp phiếuExchange Customer POWeb▣ Exchange Customer POXác nhận phiếuExchange Customer POWeb▣ Exchange Customer POGhi phiếu EXC ·hoàn trả RemainingSystem (auto)▣ Exchange Customer POTrừ plan nguồn · tạoplan từng P.O đíchSystem (auto)EndCần xoá / huỷ phiếuPhiếu ởtrạng thái nào?▣ Exchange Customer POXoá phiếu nhápExchange Customer POWebHuỷ được?▣ Exchange Customer POHuỷ phiếuExchange Customer POWeb▣ Exchange Customer POXoá plan P.O đích ·trả số plan nguồnSystem (auto)EndPhiếu EXC DRAFT — mở lạisửa đượcRemaining P.O nguồn hoàntrả → Packing PlanningPlan RELEASED cho P.O đích(MOR của plan nguồn) · plannguồn giữ Remaining → ResultPhiếu DRAFT đã xoá — sốphiếu không cấp lạiCancel bị chặn — báo lý dotrên phiếuPhiếu CANCELLED · plan P.Ođích bị xoá · plan nguồnnhận lại sốPlanner tạo phiếu đổi hàng chưa đóng gói của một Customer P.O sang một hoặc nhiều Customer P.O khác. Khi nào: hàng không đạt P.O nguồn nhưng đạt P.O khác, lịch giao đổi, đơn gấp của khách khác, đổi nước đến; áp cho hàng Logo và SPRAY, không áp cho hàng đang ở NCC Spray Out. Không áp: FG đã đóng gói và nhập kho — đổi P.O bằng chức năng exchange của WMS. Thao tác: menu PACKING › Exchange Customer PO › nút "Create Exchange". Kết quả: mở phiếu mới; số phiếu cấp khi lưu. Chưa chốt: tên nút và bố cục theo prototype v0.92, khách chưa xác nhận. Nguồn: Q-20261002-02 (1) · Q-20261002-04 · Q-20261014-01 (2) · MOM 28/09 dòng 12–13Planner chọn P.O nguồn rồi chọn Packing Plan của P.O đó. Thao tác: ô "LOGO / SPRAY *" → "SOURCE CUSTOMER P.O *" → "PACKING PLAN NO. *"; P.O chỉ có một plan thì hệ thống tự chọn. Hệ thống: chỉ liệt kê Packing Plan RELEASED chưa đóng gói hết; một P.O có thể có nhiều plan; số đổi được theo size "Available to exchange" = Plan Qty − đã Record Output (A + A- + C + Pending repair). Hệ thống: khối thông tin P.O (Customer · Model · Base Color · Upper Color (chỉ SPRAY) · AL / INT · Destination · ETD · Sales Order) hiện sẵn với giá trị "—"; chọn Source Customer P.O thì hệ thống điền. Kiểm thử: - Plan 690 đôi đã Record Output 600 → "Available to exchange" còn 90 - P.O 260811-06 chỉ có PKP-20260812-04 → chọn P.O xong, ô Packing Plan No. tự điền Nguồn: Q-20261007-03 (7) · Q-20261014-01 (1, 2) · Q-20261006-06 · prototype v0.92Planner chọn một hoặc nhiều Customer P.O đích và ghi lý do đổi nếu cần. Thao tác: bảng Step 2 mỗi dòng một P.O đích, ô "Target Customer P.O *"; nút "Add Target P.O" thêm dòng, biểu tượng thùng rác xoá dòng; ô "REASON" nhập text, không bắt buộc, chung cho cả phiếu. Hệ thống: chỉ liệt kê P.O cùng Model, Base Color, AL / INT với P.O nguồn (SPRAY thêm Upper Color) và còn balance; P.O đã chọn ở dòng khác không hiện lại; mỗi dòng hiện Customer · Model · Base Color · AL / INT · Destination · ETD · Sales Order · Exchange Qty. Kiểm thử: - P.O nguồn Sandal Black · Black · INT → danh sách P.O đích không có P.O khác màu hoặc AL - Dòng 1 chọn 260811-14 → ô P.O của dòng 2 không còn 260811-14 Nguồn: Q-20261014-01 (3) · Q-20261002-04 · Q-20261006-06 (2) · prototype v0.92Planner nhập số đôi đổi theo size cho từng P.O đích, hoặc để hệ thống tự điền. Thao tác: Step 3, mỗi P.O đích có dòng "Balance · P.O …" và dòng nhập "Exchange → P.O …"; nút "Auto Fill (earliest ETD first)" điền thay. Hệ thống: Auto Fill với mỗi size rót lần lượt cho P.O đích có ETD sớm nhất, tối đa bằng Balance của P.O đó, hết "Available to exchange" thì dừng; cùng ETD theo thứ tự dòng; ghi đè số đã nhập. Hệ thống: "Total exchange" = Σ số đổi các P.O đích theo size; "Remaining · stays with P.O <nguồn>" = Available to exchange − Total exchange. Kiểm thử: - Available W5 60; P.O A ETD 19/08 Balance 50, P.O B ETD 17/08 Balance 140 → Auto Fill: B 60, A 0, Remaining 0 - Nhập A W5 20, B W5 30 → Total exchange 50, Remaining W5 10 Nguồn: Q-20261014-01 (3, 4, 5) · prototype v0.92Hệ thống kiểm phiếu trước khi lưu hoặc xác nhận. Có: đã chọn P.O nguồn và Packing Plan, ít nhất một P.O đích hợp lệ, không P.O nào chọn hai lần, mỗi P.O đích có tổng > 0, số đổi của từng P.O mỗi size ≤ Balance của P.O đó, và Total exchange mỗi size ≤ "Available to exchange". Không: báo lỗi và sửa — "Select the source Customer P.O and the Packing Plan No." · "Select at least one target Customer P.O with the same Model, Base Color and AL / INT." · "P.O <x>: enter the quantity to exchange by size, or remove the row." · "P.O <x> · <size>: exchange quantity exceeds the balance of the P.O (n)." · "<size>: total exchange quantity (n) exceeds the available quantity of <plan> (m)." Kiểm thử: - Available W5 60, nhập P.O A W5 50 và P.O B W5 30 → báo "M3/W5: total exchange quantity (80) exceeds the available quantity of PKP-20260812-04 (60)." - Chọn P.O đích nhưng để trống số → báo "P.O 260811-05: enter the quantity to exchange by size, or remove the row." Không kiểm: REASON để trống vẫn lưu / xác nhận được. Chưa chốt: câu thông báo theo prototype v0.92, khách chưa xác nhận. Nguồn: Q-20261014-01 (3) · Q-20261006-06 · prototype v0.92Planner chọn lưu nháp hay xác nhận ngay. Chưa: cần soát lại → lưu nháp, phiếu DRAFT. Có: số đã đúng → xác nhận, phiếu CONFIRMED. Nguồn: Q-20261002-04 (3)Planner lưu phiếu nháp để làm tiếp sau. Thao tác: nút "Save Draft". Kết quả: phiếu → DRAFT; chưa đổi số nào ở Packing Planning, Packing Result hay WMS; mở lại sửa được. Chưa chốt: phiếu DRAFT có huỷ / xoá được không, và có giữ chỗ số "Available to exchange" không — đề xuất, chưa được xác nhận. Nguồn: Q-20261002-04 (3)Planner tự xác nhận phiếu, không qua bước duyệt. Khi nào: phiếu mới hoặc DRAFT, đã qua kiểm số. Thao tác: nút "Confirm Exchange" → popup "Exchange n pairs from <plan> to <k> P.Os?" (From plan · From P.O · To P.O · Reason · Exchange quantity · Remaining; bảng size từng P.O đích, Total exchange, Remaining) → nút "Confirm Exchange". Kết quả: phiếu → CONFIRMED. Chưa chốt: phiếu CONFIRMED có huỷ hoặc đảo được không. Nguồn: Q-20261002-04 (3) · Q-20261014-01 · prototype v0.92Hệ thống ghi phiếu và hoàn trả balance của P.O nguồn cho Packing Planning. Hệ thống: số phiếu "EXC-<YYYYMMDD>-NN", một phiếu cho mọi P.O đích; Remaining (balance) theo size của P.O nguồn ở Packing Planning cộng lại đúng Total exchange; balance của từng P.O đích giảm số đã nhận. Kết quả: Planner chọn nguồn khác cho phần đã đổi đi của P.O nguồn, lập plan lại ở Packing Planning. Kiểm thử: - Đổi 30 đôi W5 từ P.O 260811-06 sang 260811-04 → Step 3 của Packing Planning: "Remaining" W5 của 260811-06 tăng 30 Chưa chốt: cách đánh số phiếu của màn mới; "EXC-<YYYYMMDD>-NN" lấy theo khung Exchange cũ. Nguồn: Q-20261002-03 · Q-20261014-01 · MOM 28/09 dòng 14Hệ thống chuyển phần hàng đổi từ plan nguồn sang plan mới của từng P.O đích; phần không đổi ở lại plan nguồn. Hệ thống: mỗi P.O đích một Packing Plan RELEASED mới, dòng nguồn ghi "Exchange" và số EXC; Plan Qty của plan nguồn giảm Total exchange theo size; Spray Plan / Spray Result không đổi. Hệ thống: plan P.O đích không tạo MOR mới — mang số MOR đã tạo cho plan nguồn (cột "MOR" hiện "MOR-PK-… · shared"; Packing Result ghi "shared from <plan nguồn> (Exchange EXC-…)"). Kết quả: plan mới hiện ở Packing Result với trạng thái "Waiting"; Remaining (phần không đổi) vẫn thuộc P.O nguồn, plan nguồn tiếp tục đóng gói ở Packing Result. Kiểm thử: - Plan nguồn 690 đôi, đổi 20 cho P.O A và 80 cho P.O B → thêm hai plan RELEASED 20 và 80 đôi; plan nguồn còn 590 đôi "Waiting" ở Packing Result - Plan nguồn có MOR-PK-2603 → hai plan mới hiện "MOR-PK-2603 · shared", không có MOR mới Nguồn: Q-20261014-01 (3, 5) · Q-20261014-02 (1) · Q-20261002-04 · prototype v0.93Trạng thái phiếu quyết định Planner xoá hay huỷ. DRAFT: phiếu chưa đổi số nào → xoá hẳn. CONFIRMED: đã sinh plan cho P.O đích → chỉ huỷ được có điều kiện, phiếu giữ vết CANCELLED. Nguồn: Q-20261014-02 (2)Planner xoá phiếu nháp không dùng nữa. Thao tác: mở phiếu DRAFT › nút "Delete Draft" → popup "Delete draft EXC-…?" → nút "Delete Draft". Kết quả: phiếu biến mất khỏi "Exchange List"; số phiếu đã xoá không cấp lại cho phiếu sau. Kiểm thử: - Xoá EXC-20260811-01 (DRAFT) rồi Confirm phiếu mới → phiếu mới nhận EXC-20260811-02 Nguồn: Q-20261014-02 (2) · prototype v0.93Hệ thống xét phiếu CONFIRMED còn huỷ được không. Có: plan nguồn còn RELEASED; chưa plan P.O đích nào Record Output ở Packing Result; balance của P.O nguồn mỗi size ≥ số đã đổi (phần hoàn trả chưa bị lập plan lại). Không: nút "Cancel Exchange" mờ, phiếu hiện lý do — "Packing output is already recorded for <plan> (P.O <x>) in Packing Result — the exchange cannot be cancelled." · "<size>: the quantity returned to P.O <x> has already been planned again (n of m pairs still open) — revise that plan first." · "The source plan <plan> is no longer Released — the exchange cannot be cancelled." Kiểm thử: - Plan P.O đích PKP-20260811-03 đã Record Output → nút "Cancel Exchange" mờ, hiện câu "Packing output is already recorded for PKP-20260811-03 (P.O 260811-04) …" Nguồn: Q-20261014-02 (2) · prototype v0.93Planner huỷ phiếu đã xác nhận khi việc đổi hàng không còn cần. Thao tác: mở phiếu CONFIRMED › nút "Cancel Exchange" → popup "Cancel exchange EXC-…?" (From plan · From P.O · To P.O · Plans removed · Quantity returned; bảng size từng P.O đích) → nút "Cancel Exchange". Kết quả: phiếu → CANCELLED, ghi thời điểm và người huỷ; phiếu vẫn ở "Exchange List" (lọc "CANCELLED"). Nguồn: Q-20261014-02 (2) · prototype v0.93Hệ thống đưa số lượng về như trước khi đổi. Hệ thống: xoá các Packing Plan của P.O đích sinh từ phiếu; plan nguồn nhận lại Total exchange theo size; balance của từng P.O đích tăng lại, Remaining hoàn trả của P.O nguồn ở Packing Planning giảm lại; MOR của plan nguồn không đổi. Kết quả: plan P.O đích biến mất khỏi Packing Result; plan nguồn đóng gói lại đủ số cũ. Kiểm thử: - Huỷ phiếu 70 đôi (20 + 50) từ PKP-20260812-04 → PKP-20260811-03 / -04 bị xoá, PKP-20260812-04 về lại 690 đôi Nguồn: Q-20261014-02 (2) · prototype v0.93
Bắt đầuđiểm khởi động của luồng
Kết thúcmỗi Bắt đầu đi tới ít nhất một Kết thúc
Bước xử lýdải trên = màn hình thực hiện, ô màu = nền tảng
Điểm quyết địnhmỗi nhánh đi ra đều có nhãn điều kiện
Dữ liệu / chứng từđầu vào ở lane Input, kết quả ở lane Output
Luồng chínhthứ tự bắt buộc của các bước
Nhãn trên hộpWebSystem (auto)

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

Phiếu Exchange Customer PODRAFTCONFIRMEDConfirm ExchangeĐã xoáDelete DraftCANCELLEDCancel Exchange — chưa Record Output
◻ DRAFT ◻ CONFIRMED ◻ CANCELLED

Input

#InputLoạiĐi vào bước
I-1Packing Plan RELEASED của P.O nguồn, chưa đóng gói hết — hàng đã phân bổ, chưa đóng gói; kèm MOR vật tư đóng gói của planChứng từ — flow PackingChọn P.O nguồn · hàng theo size
I-2Customer P.O đích theo size — Model, Base Color, Upper Color, AL / INT, ETD, balanceChứng từ — Sales OrderChọn các P.O đích · Reason

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

BướcVai tròMàn hình · nút trên UI (theo prototype v0.93)
Tạo phiếu Exchange Customer PO · Chọn P.O nguồn · hàng theo size · Chọn các P.O đích · Reason · Nhập số đổi theo size từng P.O đíchPlannerExchange Customer PO · Create Exchange · SOURCE CUSTOMER P.O * · PACKING PLAN NO. * · Target Customer P.O * · Add Target P.O · REASON · Exchange → P.O … · Auto Fill (earliest ETD first)
Lưu nháp phiếu Exchange Customer PO · Xác nhận Exchange Customer POPlannerExchange Customer PO · Save Draft · Confirm Exchange
Ghi phiếu EXC · hoàn trả Remaining · Trừ plan nguồn · tạo plan từng P.O đíchSystem (auto)Exchange Customer PO
Xoá phiếu nháp Exchange Customer PO · Huỷ phiếu Exchange Customer POPlannerExchange Customer PO · phiếu DRAFT Delete Draft · phiếu CONFIRMED Cancel Exchange
Xoá plan P.O đích · trả số plan nguồnSystem (auto)Exchange Customer PO

Output

#OutputĐiều kiện sinh ra
O-1Phiếu EXC DRAFT — mở lại sửa đượcPlanner lưu nháp
O-2Remaining (balance) của P.O nguồn được hoàn trả → Packing Planning, Planner lập plan lại cho P.O nguồnPhiếu CONFIRMED
O-3Mỗi P.O đích một Packing Plan RELEASED mới → Packing Result (Waiting), không tạo MOR mới — mang số MOR của plan nguồn; plan nguồn giảm Total exchange, phần Remaining không đổi vẫn thuộc P.O nguồn và tiếp tục đóng góiPhiếu CONFIRMED
O-4Phiếu DRAFT đã xoá — số phiếu không cấp lạiPlanner bấm Delete Draft
O-5Cancel bị chặn — phiếu hiện lý doPlan P.O đích đã Record Output, hoặc Remaining hoàn trả của P.O nguồn đã được lập plan lại, hoặc plan nguồn không còn RELEASED
O-6Phiếu CANCELLED — plan P.O đích bị xoá khỏi Packing Result, plan nguồn nhận lại số, balance hai phía trả về như trước khi đổi; MOR plan nguồn không đổiPlanner bấm Cancel Exchange trên phiếu CONFIRMED còn huỷ được

Thuật ngữ

Thuật ngữNghĩa trong flow này
P.O nguồn · P.O đíchCustomer P.O đang giữ hàng · Customer P.O nhận hàng đổi sang
EXCPhiếu Exchange Customer PO, số EXC-<YYYYMMDD>-NN
ReasonLý do đổi, nhập text, không bắt buộc, một ô chung cho cả phiếu
Available to exchangeSố đổi được theo size của Packing Plan nguồn = Plan Qty − đã Record Output (A + A- + C + Pending repair)
Balance · P.O …Số P.O đích còn cần theo size (Remaining ở Packing Planning)
Total exchangeΣ số đổi các P.O đích theo size; mỗi size ≤ Available to exchange
Remaining · stays with P.O …Available to exchange − Total exchange: phần không đổi, ở lại plan nguồn của P.O nguồn và vẫn đóng gói ở Packing Result
Auto Fill (earliest ETD first)Mỗi size rót lần lượt cho P.O đích có ETD sớm nhất, tối đa Balance của P.O đó, hết Available to exchange thì dừng; cùng ETD theo thứ tự dòng
Remaining (balance) hoàn trảSố đã đổi đi được cộng lại vào Remaining của P.O nguồn ở Packing Planning để lập plan lại
AL / INTThị trường của P.O — P.O đích phải trùng với P.O nguồn
MORMaterial Out Request vật tư đóng gói, tạo khi Release plan nguồn; plan P.O đích sinh từ Exchange dùng chung MOR đó (hiện "MOR-PK-… · shared")
FGThành phẩm đã đóng gói và nhập kho thành phẩm — không đổi P.O ở màn này, dùng chức năng exchange của WMS