# Packing Result Logo — Packing Operator nhập A / A- / C / Pending repair theo size cho plan RELEASED, Record Output nhiều lần; A + A- tự sinh yêu cầu nhập kho WMS Product Income theo Customer P.O; C ghi Defect Records, Pending repair mở phiếu Repair / Rework, Remaining chưa nhập về balance P.O của Packing Planning Logo

> 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
>
> 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/packing-result-logo

## 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
- Packing Operator
- 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 | Plan RELEASED · Waiting — Packing Planning Logo |  | B04 |
| B02 | Input | Dữ liệu | Plan RELEASED cho P.O đích — Exchange Customer PO |  | B04 |
| B03 | Packing Operator | Bắt đầu | Start |  | B04 |
| B04 | Packing Operator | Bước | Mở plan trên Packing Result | Web · Packing Result Logo | B05 |
| B05 | Packing Operator | Bước | Nhập A / A- / C / Pending repair theo size | Web · Packing Result Logo | B06 |
| B06 | Packing Operator | Điểm quyết định | Entry hợp lệ? |  | B05 [Không — sửa]; B07 [Có] |
| B07 | Packing Operator | Bước | Xác nhận Record Output | Web · Packing Result Logo | B08 |
| B08 | Packing Operator | Bước | Cộng dồn Output · giảm Remaining | System (auto) · Packing Result Logo | B09; B10 |
| B09 | Packing Operator | Bước | Sinh yêu cầu nhập kho theo Customer P.O | System (auto) · Packing Result Logo | B11; B12 |
| B10 | Packing Operator | Điểm quyết định | Còn Remaining? |  | B05 [Có — lần sau]; B13 [Không] |
| B11 | Output | Dữ liệu | A + A- theo Customer P.O → WMS Product Income |  | (kết thúc) |
| B12 | Packing Operator | Bước | Mở phiếu Repair / Rework mỗi size PR > 0 | System (auto) · Packing Result Logo | B14; B15 |
| B13 | Packing Operator | Bước | Đóng plan — Packed | System (auto) · Packing Result Logo | B16 |
| B14 | Output | Dữ liệu | Phiếu Repair / Rework mỗi size PR (Source Packing Logo · Pending repair) |  | (kết thúc) |
| B15 | Packing Operator | Bước | Ghi C vào Defect Records theo lý do | System (auto) · Packing Result Logo | B17; B18 |
| B16 | Packing Operator | Kết thúc | End |  |  |
| B17 | Output | Dữ liệu | Defect Records — C Packing Logo theo lý do (scrap) |  | (kết thúc) |
| B18 | Packing Operator | Bước | Trả Remaining chưa nhập về balance P.O | System (auto) · Packing Result Logo | B19 |
| B19 | Output | Dữ liệu | Remaining chưa nhập → Packing Planning Logo |  | (kết thúc) |

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

#### B04 · Mở plan trên Packing Result

- Packing Operator · Web · Packing Result Logo
- Đến từ: B01, B02, B03
- Đi tới: B05 · Nhập A / A- / C / Pending repair theo size

> Packing Operator mở plan đã duyệt để nhập kết quả đóng gói.  
> Thao tác: Packing Result Logo › bảng "Packing List" › bấm dòng plan.  
> Hệ thống: "Packing List" lọc All / Waiting / Packing / Packed; cột Plan Qty, Recorded, Packed, Remaining, Status.  
> Hệ thống: chỉ plan RELEASED ở Packing Planning Logo có ở đây, kể cả plan cho P.O đích sinh từ Exchange Customer PO; trang có khung "Work Order" (Plan, P.O, WO No., Model, Color, Destination, Plan Qty, Recorded, Remaining) và "Packing Material by Size (Packing BOM)" chỉ xem, kèm chip số MOR của plan.  
> Kết quả: mở "Output Matrix (Item / Size)" để nhập.  
> Kiểm thử:  
> - Plan có MOR-PK-2601 → khung vật tư hiện chip "MOR-PK-2601 · Requested"  
> Nguồn: Q-20261001-06 · Q-20261001-08 · Q-20261002-04 · Q-20261005-02 · prototype v0.70  

#### B05 · Nhập A / A- / C / Pending repair theo size

- Packing Operator · Web · Packing Result Logo
- Đến từ: B04, B06, B10
- Đi tới: B06 · Entry hợp lệ?

> Packing Operator nhập kết quả đóng gói của lần này theo size.  
> Thao tác: "Output Matrix (Item / Size)" › dòng "A" (First grade), "A-" (First grade, minor), "C" (Reject), "PR" (Pending repair); "Fill A = Open Qty" điền A bằng Remaining, "Clear" xoá.  
> Hệ thống: "This Entry = A + A- + C + Pending repair"; "Remaining = Plan Qty − Already Recorded − This Entry"; ô C > 0 hiện khối "Defect Reason Breakdown (grade C)" với mỗi lý do một dòng "Defect Reason" · "Qty" · "Defect Detail" và nút "Add Defect Line".  
> Kiểm thử:  
> - Plan W5 60 đôi, nhập A 50 · C 2 · PR 6 → This Entry 58, Remaining 2  
> - C 2 chia lý do "Color mismatch" 2 → khối lý do cân  
> Chưa chốt: danh sách Defect Reason đang dùng chung với Outsourcing Result (OQ-128).  
> Nguồn: Q-20261001-06 · Q-20261013-01 · prototype v0.91  

#### B06 · Entry hợp lệ?

- Packing Operator
- Đến từ: B05
- Đi tới [Không — sửa]: B05 · Nhập A / A- / C / Pending repair theo size
- Đi tới [Có]: B07 · Xác nhận Record Output

> Hệ thống kiểm lần nhập trước khi ghi.  
> Có: tổng This Entry > 0, mỗi size This Entry ≤ Remaining và grade C đã chia đủ lý do → mở popup "Record packing output for …?".  
> Không: báo lỗi và sửa — tổng bằng 0 → "Enter A / A- / C / Pending repair before recording output."; vượt → "This Entry is more than Remaining at <size>."; C chưa chia đủ lý do → "Grade C quantity recorded — map the defect quantity to a defect reason."  
> Kiểm thử:  
> - Remaining của một size bằng 2, nhập A 3 → báo "This Entry is more than Remaining at …", không ghi  
> - C 6, chưa có dòng lý do → báo lỗi lý do, không ghi  
> Nguồn: Q-20261013-01 · prototype v0.91  

#### B07 · Xác nhận Record Output

- Packing Operator · Web · Packing Result Logo
- Đến từ: B06
- Đi tới: B08 · Cộng dồn Output · giảm Remaining

> Packing Operator xác nhận ghi kết quả lần nhập.  
> Thao tác: nút "Record Output" → popup (Packing Plan · P.O · Model · This Entry · C → Defect Records · Pending repair · Pending repair → Repair / Rework · Remaining after entry) → nút "Record Output".  
> Kết quả: thêm một dòng ở "Output Entries" (#, A, A-, C, Pending repair, Total, Recorded At, By); nhập được nhiều lần tới khi Remaining = 0.  
> Kiểm thử:  
> - Ghi lần đầu → thông báo "<plan> · output entry #1 recorded" kèm "C … pairs → Defect Records" và "Pending repair → n Repair / Rework record(s)"  
> Nguồn: Q-20261001-06 · Q-20261013-01 · prototype v0.91  

#### B08 · Cộng dồn Output · giảm Remaining

- Packing Operator · System (auto) · Packing Result Logo
- Đến từ: B07
- Đi tới: B09 · Sinh yêu cầu nhập kho theo Customer P.O
- Đi tới: B10 · Còn Remaining?

> Hệ thống cộng dồn kết quả và cập nhật Remaining của plan.  
> Hệ thống: Recorded = Σ (A + A- + C + Pending repair) các lần; Remaining = Plan Qty − Recorded; lần nhập đầu mà còn Remaining thì Status "Packing".  
> Kết quả: plan đã có Record Output thì không còn "Revision" ở Packing Planning Logo.  
> Kiểm thử:  
> - Lần đầu ghi 58 / 60 đôi → Status "Packing", Remaining 2, plan không còn nút "Revision"  
> Chưa chốt: Pending repair trừ vào Remaining của plan hay plan chỉ Packed khi đủ A + A- + C (OQ-127).  
> Nguồn: Q-20261001-06 · prototype v0.91  

#### B09 · Sinh yêu cầu nhập kho theo Customer P.O

- Packing Operator · System (auto) · Packing Result Logo
- Đến từ: B08
- Đi tới: B11 · A + A- theo Customer P.O → WMS Product Income
- Đi tới: B12 · Mở phiếu Repair / Rework mỗi size PR > 0

> Hệ thống sinh yêu cầu nhập kho thành phẩm cho phần A + A- của lần nhập.  
> Hệ thống: số theo size = A + A- của lần Record Output, mang Customer P.O, WO, Model, Destination của plan.  
> Kết quả: yêu cầu nhập kho sang WMS Product Income để kho nhập FG theo Customer P.O; MES không có bước nhận FG riêng.  
> Kiểm thử:  
> - Lần nhập A 50 · A- 4 · C 2 · PR 6 → yêu cầu nhập kho 54 đôi  
> Chưa chốt: mỗi lần Record Output sinh một yêu cầu riêng hay gộp theo P.O, và quan hệ với Product Income Request tạo từ Sales Order; prototype v0.70 chưa có bước này.  
> Nguồn: Q-20261002-02 (2) · Q-20260929-04 (OQ-02)  

#### B10 · Còn Remaining?

- Packing Operator
- Đến từ: B08
- Đi tới [Có — lần sau]: B05 · Nhập A / A- / C / Pending repair theo size
- Đi tới [Không]: B13 · Đóng plan — Packed

> Hệ thống xét plan còn hàng chưa nhập kết quả không.  
> Có: Remaining > 0 → plan giữ Status "Packing", Packing Operator nhập lần sau.  
> Không: Remaining = 0 → plan "Packed", nút đổi thành "All quantity recorded".  
> Nguồn: Q-20261001-06 · prototype v0.70  

#### B12 · Mở phiếu Repair / Rework mỗi size PR > 0

- Packing Operator · System (auto) · Packing Result Logo
- Đến từ: B09
- Đi tới: B14 · Phiếu Repair / Rework mỗi size PR (Source Packing Logo · Pending repair)
- Đi tới: B15 · Ghi C vào Defect Records theo lý do

> Hệ thống tự mở phiếu Repair / Rework cho hàng Pending repair của lần nhập; PR không quay lại balance P.O và không vào Defect Records.  
> Khi nào: lần Record Output có "Pending repair" > 0 ở ít nhất một size.  
> Hệ thống: mỗi size PR > 0 sinh một phiếu RW-…, trạng thái Pending, Source "Packing Logo · Pending repair", mang LOT No., WO, SO của plan; popup hiện "Pending repair → Repair / Rework" kèm "n record(s) · Source Packing Logo · Pending repair".  
> Kết quả: thông báo "… · Pending repair → n Repair / Rework record(s)"; QC xử lý tiếp ở màn Repair / Rework.  
> Kiểm thử:  
> - PR W5 10 + W7 20 → 2 phiếu "Packing Logo · Pending repair" (qty 10 và 20)  
> Chưa chốt: hàng Repaired của "Packing Logo · Pending repair" chưa có Repair Inv List đích (OQ-126).  
> Nguồn: Q-20261013-01 · prototype v0.91  

#### B13 · Đóng plan — Packed

- Packing Operator · System (auto) · Packing Result Logo
- Đến từ: B10
- Đi tới: B16 · End

> Hệ thống đóng plan khi mọi số của plan đã có kết quả.  
> Kết quả: Status "Packed"; "Output Matrix" khoá nhập; cột "Packed" của "Packing List" = Σ (A + A-).  
> Kiểm thử:  
> - Lần sau bấm "Fill A = Open Qty" rồi "Record Output" → Status "Packed", Remaining 0  
> Nguồn: Q-20261001-06 · CHANGELOG v0.58 · prototype v0.70  

#### B15 · Ghi C vào Defect Records theo lý do

- Packing Operator · System (auto) · Packing Result Logo
- Đến từ: B12
- Đi tới: B17 · Defect Records — C Packing Logo theo lý do (scrap)
- Đi tới: B18 · Trả Remaining chưa nhập về balance P.O

> Hệ thống ghi hàng C của lần nhập vào Defect Records theo từng lý do lỗi; C là scrap nên không sinh phiếu Repair / Rework.  
> Khi nào: lần Record Output có C > 0.  
> Hệ thống: mỗi lý do một dòng Defect Records, Process "Packing Logo", mang WO, SO, số lượng, lý do; lỗi ở bước kiểm tra nếu số lý do khác tổng C.  
> Kiểm thử:  
> - C 10, lý do "Color mismatch" 10 → Defect Records thêm 1 dòng Process "Packing Logo" qty 10, Repair / Rework không thêm phiếu từ C  
> Nguồn: Q-20261013-01 · prototype v0.91  

#### B18 · Trả Remaining chưa nhập về balance P.O

- Packing Operator · System (auto) · Packing Result Logo
- Đến từ: B15
- Đi tới: B19 · Remaining chưa nhập → Packing Planning Logo

> Hệ thống trả phần Remaining chưa ghi nhận về balance của P.O để Planner lập plan khác cho WO ở Packing Planning Logo; Pending repair không nằm trong phần trả về.  
> Hệ thống: trang kết quả hiện "Remaining goes back to Packing Planning Logo for another plan of this WO"; balance P.O cộng lại số Remaining theo size.  
> Kiểm thử:  
> - Plan 690, ghi 85 (A 40 + A- 5 + C 10 + PR 30) → Remaining 605 được nhắc trả về Packing Planning Logo  
> Chưa chốt: Remaining chưa nhập được trả về lúc nào — prototype mới hiện dải nhắc, chưa cộng lại balance.  
> Nguồn: Q-20261001-06 · Q-20261013-01 · prototype v0.91  

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

#### Packing Result

`WAITING` → `PACKING` → `PACKED`

Bước chuyển:

- `WAITING` -- Record Output — còn Remaining --> `PACKING`
- `PACKING` -- Record Output — hết Remaining --> `PACKED`
- `WAITING` -- Record Output một lần hết Remaining --> `PACKED` (quay lại)

## Input

| # | Input | Loại | Đi vào bước |
| --- | --- | --- | --- |
| I-1 | Packing Plan `RELEASED` ở Packing Planning Logo, trạng thái Waiting — mỗi plan một Customer P.O, kèm MOR vật tư đóng gói | Chứng từ — flow Packing Planning Logo | Mở plan trên Packing Result |
| I-2 | Packing Plan `RELEASED` cho P.O đích, sinh khi phiếu Exchange Customer PO `CONFIRMED` — mang số MOR của plan nguồn; bị xoá khi phiếu bị Cancel Exchange (chỉ khi plan chưa Record Output) | Chứng từ — flow Exchange Customer PO | Mở plan trên Packing Result |

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

| Bước | Vai trò | Màn hình · nút trên UI |
| --- | --- | --- |
| Mở plan trên Packing Result · Nhập A / A- / C / Pending repair theo size · Xác nhận Record Output | Packing Operator | Packing Result Logo · `Packing List` · `Output Matrix (Item / Size)` (`Fill A = Open Qty`, `Clear`, `Record Output`) |
| Cộng dồn Output · giảm Remaining · Sinh yêu cầu nhập kho theo Customer P.O · Mở phiếu Repair / Rework mỗi size PR > 0 · Ghi C vào Defect Records theo lý do · Trả Remaining chưa nhập về balance P.O · Đóng plan — Packed | System (auto) | Packing Result Logo |

## Output

| # | Output | Điều kiện sinh ra |
| --- | --- | --- |
| O-1 | Yêu cầu nhập kho thành phẩm A + A- theo Customer P.O và size → WMS Product Income | Mỗi lần Record Output có A + A- > 0 |
| O-2 | Phiếu Repair / Rework mỗi size PR > 0 (Source `Packing Logo · Pending repair`) | Record Output có Pending repair > 0 |
| O-3 | Defect Records — C của Packing Result theo lý do (Process `Packing Logo`), không sinh phiếu sửa | Record Output có C > 0 |
| O-4 | Remaining chưa nhập → balance P.O ở Packing Planning Logo để Planner lập plan khác cho WO | Plan còn Remaining sau Record Output |

## Thuật ngữ

| Thuật ngữ | Nghĩa trong flow này |
| --- | --- |
| `P.O` | Customer P.O — đơn hàng của khách; mỗi Packing Plan thuộc đúng một P.O |
| `Plan Qty` | Tổng Allocated của plan theo size (Daily Packing Q'ty) — căn cứ tính Remaining ở Packing Result và vật tư của MOR |
| `Output Matrix · A / A- / C / PR` | Bảng nhập kết quả đóng gói theo size: A loại 1 · A- loại 1 lỗi nhẹ · C loại · PR (Pending repair) chờ sửa |
| `This Entry · Remaining` | This Entry = A + A- + C + Pending repair của lần nhập; Remaining = Plan Qty − Already Recorded − This Entry |
| `Waiting · Packing · Packed` | Trạng thái plan ở Packing Result: chưa nhập · đã nhập, còn Remaining · Remaining = 0 |
| `Exchange Customer PO (EXC)` | Chức năng riêng đổi hàng giữa các Customer P.O — xem flow Exchange Customer PO |
