# Trimming Result — Operator ghi Output từng LOT của plan theo lần (mỗi LOT một nút Enter Output); LOT cần phiếu Stock Out Curing; A + A- tự vào bể chờ công đoạn sau

> Fine Chemical (FC) · Module MES · v0.3 · 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/trimming-result

## 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
- 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 Trimming APPROVED — Trimming Planning |  | B05 |
| B02 | Input | Dữ liệu | Plan sửa / huỷ khi chưa có sản lượng — Trimming Planning |  | B05 |
| B03 | Input | Dữ liệu | Phiếu Stock Out Curing → WH-TRM-01 (theo LOT) |  | B07 |
| B04 | Operator | Bắt đầu | Start |  | B05 |
| B05 | Operator | Bước | Đưa plan lên Trimming Result | System (auto) · Trimming Result | B06 |
| B06 | Operator | Bước | Mở plan, chọn LOT cần nhập Output | Web · Trimming Result | B07 |
| B07 | Operator | Điểm quyết định | LOT có phiếu Stock Out? |  | B08 [Chưa]; B09 [Có] |
| B08 | Output | Dữ liệu | LOT chưa nhập được — "Curing stock not issued" |  | (kết thúc) |
| B09 | Operator | Bước | Nhập Output Matrix theo size | Web · Trimming Result | B10 |
| B10 | Operator | Điểm quyết định | Có hàng grade C? |  | B11 [Có]; B12 [Không] |
| B11 | Operator | Bước | Chia grade C theo lý do lỗi | Web · Trimming Result | B12 |
| B12 | Operator | Bước | Xác nhận Output | Web · Trimming Result | B13 |
| B13 | Operator | Điểm quyết định | Entry hợp lệ? |  | B09 [Không — sửa entry]; B14 [Có] |
| B14 | Operator | Bước | Cộng dồn Output · ghi C Defect Records · PR → RW | System (auto) · Trimming Result | B15; B16; B17 |
| B15 | Output | Dữ liệu | C → Defect Records (theo lý do) PR → Repair / Rework mỗi size |  | (kết thúc) |
| B16 | Output | Dữ liệu | Plan có Output Entry → khoá sửa / huỷ ở Trimming Planning |  | (kết thúc) |
| B17 | Operator | Bước | Nhập kho Trimming WH-TRM-01 (A + A-) | System (auto) · Trimming Result | B18; B19 |
| B18 | Operator | Điểm quyết định | Loại plan? |  | B20 [Spray]; B21 [Logo · OOMG] |
| B19 | Operator | Điểm quyết định | LOT còn Remaining? |  | B09 [Còn — ca sau]; B22 [Hết] |
| B20 | Output | Dữ liệu | LOT Spray (A + A-) → WH-TRM-01 · Waiting SPRAY-OUT ZONE |  | (kết thúc) |
| B21 | Output | Dữ liệu | LOT Logo · OOMG (A + A-) → WH-TRM-01 · Waiting Packing |  | (kết thúc) |
| B22 | Operator | Điểm quyết định | Mọi LOT của plan hết Remaining? |  | B23 [Chưa]; B24 [Đủ] |
| B23 | Output | Dữ liệu | Plan giữ APPROVED — chờ LOT còn lại |  | (kết thúc) |
| B24 | Operator | Bước | Hoàn tất plan Trimming | System (auto) · Trimming Planning | B25; B26 |
| B25 | Output | Dữ liệu | Plan COMPLETED |  | (kết thúc) |
| B26 | Operator | Kết thúc | End |  |  |

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

#### B05 · Đưa plan lên Trimming Result

- Operator · System (auto) · Trimming Result
- Đến từ: B01, B02, B04
- Đi tới: B06 · Mở plan, chọn LOT cần nhập Output

> Hệ thống đưa plan APPROVED lên danh sách Trimming Result, một dòng mỗi plan, kèm mọi LOT plan đã chọn.  
> Hệ thống: cột "PLAN NO." · "LOTS" (đếm LOT) · "P.O (MONTH)" · "ITEM GROUP" · "ITEM" · số theo size · "RECEIVED" · "OUTPUT" · "REMAINING" · "STATUS" (Waiting / Partial / Completed theo cả plan).  
> Hệ thống: plan sửa ở Trimming Planning (chưa có sản lượng) giữ cùng dòng, số cập nhật theo phiếu mới; plan huỷ biến khỏi danh sách.  
> Kiểm thử:  
> - Plan có 3 LOT → danh sách thêm 1 dòng, "LOTS" = "3 LOT(s)"  
> - Sửa plan giảm LOT X 10 đôi → "RECEIVED" của plan giảm 10, cùng Plan No.  
> Nguồn: Q-20261005-06 · Q-20261006-02 (câu 3) · prototype v0.76  

#### B06 · Mở plan, chọn LOT cần nhập Output

- Operator · Web · Trimming Result
- Đến từ: B05
- Đi tới: B07 · LOT có phiếu Stock Out?

> Operator mở plan rồi chọn LOT cần ghi sản lượng; mỗi LOT một nút riêng.  
> Thao tác: Trimming Result › nút "Open Plan" (hoặc quét mã ở ô "Scan Plan / LOT / WO barcode, then Enter") → trang "Trimming — <Plan No.>" › khung "LOTs in plan <Plan No.> (n)" › nút "Enter Output" (lần đầu) / "Add Output" (lần sau) trên dòng LOT.  
> Hệ thống: khung "Trimming Plan" hiện Plan No., P.O (Month), LOTs, Item Group, Item, Next Process, Status, Received · Recorded · Remaining của plan; bảng LOT hiện Lot No., WO No., Item Group, Item, Curing Shift, Curing Date, WI No., số theo size, Received · Recorded · Remaining · Entries · Status; "Output Entries" gom lịch sử mọi LOT.  
> Kết quả: mỗi lần nhập cho một LOT; LOT "Completed" không còn nút, LOT khác của plan vẫn nhập được.  
> Kiểm thử:  
> - Plan 3 LOT, LOT thứ 2 ghi đủ Received → LOT 2 "Completed" (ẩn nút), LOT 1 và 3 vẫn "Enter Output"; plan Status "Partial"  
> Nguồn: Q-20261005-06 · Q-20261006-03 (câu 1) · prototype v0.76  

#### B07 · LOT có phiếu Stock Out?

- Operator
- Đến từ: B03, B06
- Đi tới [Chưa]: B08 · LOT chưa nhập được — "Curing stock not issued"
- Đi tới [Có]: B09 · Nhập Output Matrix theo size

> LOT đã có phiếu Stock Out Curing → WH-TRM-01 APPROVED chưa?  
> Có: "RECEIVED" của LOT = số trên phiếu → hiện nút "Enter Output" / "Add Output".  
> Chưa: LOT chưa đủ ngày curing nên chưa có phiếu → "RECEIVED" = 0, thay nút bằng chữ "Curing stock not issued".  
> Kiểm thử:  
> - Plan 2 LOT, LOT-20260809-AB-02 curing 1 / 2 ngày → dòng LOT đó Received 0 · "Curing stock not issued"; LOT kia "Enter Output"  
> Nguồn: Q-20260930-05 · Q-20261006-02 · prototype v0.76  

#### B09 · Nhập Output Matrix theo size

- Operator · Web · Trimming Result
- Đến từ: B07, B13, B19
- Đi tới: B10 · Có hàng grade C?

> Operator khai sản lượng cắt tỉa của một lần ghi (thường theo ca) theo từng size và phân loại.  
> Thao tác: "Trimming Output Entry" › bảng "Output Matrix (Item / Size)" dòng "A" (First grade) · "A-" (First grade, minor) · "C" (Reject) · "PR" (Pending repair); "Fill A = Open Qty" điền nhanh, "Clear" xoá; khối "Production Record" ghi giờ làm, "Operator / Team Leader", "Remark".  
> Hệ thống: "This Entry" = A + A- + C + PR; "Remaining" = "Received" − "Already Recorded" − "This Entry", tính theo từng size.  
> Hệ thống: màn nhập không ghi lô vật tư / MRO và không kiểm QC HOLD của vật tư.  
> Kiểm thử:  
> - Received W7 = 50, đã ghi 30 → "Fill A = Open Qty" điền A W7 = 20  
> Nguồn: Q-20260928-03 (câu 9) · Q-20260930-02 (câu 3) · prototype v0.51  

#### B10 · Có hàng grade C?

- Operator
- Đến từ: B09
- Đi tới [Có]: B11 · Chia grade C theo lý do lỗi
- Đi tới [Không]: B12 · Xác nhận Output

> Lần ghi có hàng grade C không?  
> Có: dòng "C" > 0 ở bất kỳ size nào → phải chia số C theo lý do lỗi.  
> Không: xác nhận sản lượng luôn.  
> Nguồn: Q-20260929-11 · prototype v0.51  

#### B11 · Chia grade C theo lý do lỗi

- Operator · Web · Trimming Result
- Đến từ: B10
- Đi tới: B12 · Xác nhận Output

> Operator chia toàn bộ số grade C theo lý do lỗi.  
> Thao tác: khối "Defect Reason Breakdown (grade C)" › mỗi lý do một dòng "Defect Reason" · "Qty" · "Defect Detail"; nút "Add Defect Line".  
> Hệ thống: đầu khối hiện "Grade C" · "Mapped" · "Unmapped"; tổng "Qty" các dòng phải bằng tổng C.  
> Chặn khi: chưa có dòng → "Grade C quantity recorded — map the defect quantity to a defect reason."; lệch tổng → "Defect reason breakdown (4) must equal the grade C quantity (5)."  
> Kiểm thử:  
> - C = 5, dòng Shrink mark 3 + Air bubble / porosity 1 → báo lệch 4 ≠ 5; sửa dòng 2 thành 2 → "Balanced"  
> Nguồn: Q-20260929-11 · prototype v0.51  

#### B12 · Xác nhận Output

- Operator · Web · Trimming Result
- Đến từ: B11, B10
- Đi tới: B13 · Entry hợp lệ?

> Operator xác nhận sản lượng của lần ghi.  
> Thao tác: nút "Confirm Output" → popup "Confirm Trimming output?" (Plan No., LOT No., Process, Next Process, This Entry, Remaining, lý do lỗi, bảng A · A- · C · PR theo size) → "Confirm & Save"; "Cancel" để sửa tiếp.  
> Hệ thống: popup chỉ mở khi entry qua bước kiểm tra kế tiếp.  
> Nguồn: Q-20260929-11 · prototype v0.51  

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

- Operator
- Đến từ: B12
- Đi tới [Không — sửa entry]: B09 · Nhập Output Matrix theo size
- Đi tới [Có]: B14 · Cộng dồn Output · ghi C Defect Records · PR → RW

> Hệ thống kiểm tra entry trước khi mở popup xác nhận.  
> Có: tổng "This Entry" > 0, không size nào làm "Remaining" < 0 và grade C đã chia đủ lý do → mở popup.  
> Không: báo lỗi trên màn nhập, không mở popup: "Enter a quantity in at least one grade row." · "Recorded output exceeds the received quantity." · lỗi của Defect Reason Breakdown.  
> Kiểm thử:  
> - Remaining W7 = 50, nhập A 45 + C 6 → "Recorded output exceeds the received quantity."  
> - Mọi ô = 0 → "Enter a quantity in at least one grade row."  
> Nguồn: prototype v0.51  

#### B14 · Cộng dồn Output · ghi C Defect Records · PR → RW

- Operator · System (auto) · Trimming Result
- Đến từ: B13
- Đi tới: B15 · C → Defect Records (theo lý do) PR → Repair / Rework mỗi size
- Đi tới: B16 · Plan có Output Entry → khoá sửa / huỷ ở Trimming Planning
- Đi tới: B17 · Nhập kho Trimming WH-TRM-01 (A + A-)

> Hệ thống ghi entry vào LOT, cộng dồn sản lượng và ghi hàng lỗi.  
> Hệ thống: "Recorded" += "This Entry"; "Remaining" = "Received" − "Recorded"; entry thêm một dòng ở bảng "Output Entries".  
> Kết quả: LOT "Waiting" → "Partial" (còn Remaining) hoặc "Completed" (Remaining = 0); C vào Defect Records một dòng / lý do và không sinh phiếu Repair / Rework; mỗi size PR > 0 sinh một phiếu Repair / Rework mang "LOT No.", Source "Trimming · Pending repair", còn PR không vào Defect Records.  
> Kết quả: thông báo dạng "… entry #1: 105 pairs recorded at Trimming · 1,495 pairs remaining".  
> Kết quả: từ entry đầu tiên, plan bị khoá "Edit Plan" và "Cancel Plan" ở Trimming Planning.  
> Kiểm thử:  
> - Received 500, ca 1 ghi 300, ca 2 ghi 200 → Remaining 0, "Completed"  
> - Một entry ghi đủ 500 → từ "Waiting" sang thẳng "Completed"  
> Nguồn: Q-20260929-04 (OQ-05) · Q-20260929-11 · Q-20261013-01 · prototype v0.91  

#### B17 · Nhập kho Trimming WH-TRM-01 (A + A-)

- Operator · System (auto) · Trimming Result
- Đến từ: B14
- Đi tới: B18 · Loại plan?
- Đi tới: B19 · LOT còn Remaining?

> Hệ thống tự nhập kho Trimming ngay khi entry được lưu; Operator không bấm nút chuyển.  
> Hệ thống: kho công đoạn "WH-TRM-01 / Trimming" giữ hai loại tồn theo LOT / size — chờ cắt tỉa (nhận từ phiếu Stock Out Curing) và đã cắt tỉa.  
> Hệ thống: trừ tồn chờ cắt tỉa của LOT đúng A + A- + C + PR của entry; cộng tồn đã cắt tỉa A + A-, mang "LOT No." và "P.O (Month)" của plan, chưa có Customer P.O.  
> Kết quả: C ra khỏi WH-TRM-01 sang Defect Records, PR ra khỏi WH-TRM-01 sang Repair / Rework; màn Process Inventory hiện mã kho WH-TRM-01.  
> Kiểm thử:  
> - LOT chờ cắt tỉa 500; plan Spray ghi A 80 · A- 20 · C 5 → chờ cắt tỉa còn 395; Waiting SPRAY-OUT ZONE (WH-TRM-01) thêm 100 đôi  
> Nguồn: Q-20260930-04 · Q-20260928-03 (câu 6) · Q-20260929-11  

#### B18 · Loại plan?

- Operator
- Đến từ: B17
- Đi tới [Spray]: B20 · LOT Spray (A + A-) → WH-TRM-01 · Waiting SPRAY-OUT ZONE
- Đi tới [Logo · OOMG]: B21 · LOT Logo · OOMG (A + A-) → WH-TRM-01 · Waiting Packing

> Tồn đã cắt tỉa A + A- nằm ở vị trí nào của WH-TRM-01 tuỳ loại plan.  
> Spray: vị trí "Waiting SPRAY-OUT ZONE", nguồn của Outsourcing Planning.  
> Logo · OOMG: vị trí "Waiting Packing", nguồn "1 · Waiting Packing (Trimming Result)" của Packing Planning Logo.  
> Nguồn: Q-20260929-04 · Q-20260929-12 · Q-20260930-04  

#### B19 · LOT còn Remaining?

- Operator
- Đến từ: B17
- Đi tới [Còn — ca sau]: B09 · Nhập Output Matrix theo size
- Đi tới [Hết]: B22 · Mọi LOT của plan hết Remaining?

> LOT còn phải cắt tỉa không?  
> Còn: "Remaining" > 0 → ghi tiếp ở ca sau bằng "Add Output".  
> Hết: "Remaining" = 0 → LOT "Completed", ẩn "Add Output".  
> Kiểm thử:  
> - Còn 1 đôi ở một size → vẫn hiện "Add Output"  
> Nguồn: Q-20260929-11 · prototype v0.51  

#### B22 · Mọi LOT của plan hết Remaining?

- Operator
- Đến từ: B19
- Đi tới [Chưa]: B23 · Plan giữ APPROVED — chờ LOT còn lại
- Đi tới [Đủ]: B24 · Hoàn tất plan Trimming

> Hệ thống xét plan đã xong chưa sau mỗi lần ghi.  
> Chưa: còn LOT có "Remaining" > 0 → plan giữ APPROVED.  
> Đủ: mọi LOT của plan có "Remaining" = 0 → hoàn tất plan.  
> Kiểm thử:  
> - Plan 3 LOT, 2 LOT "Completed" → APPROVED; LOT thứ 3 "Completed" → COMPLETED  
> Nguồn: Q-20260930-02 (câu 2)  

#### B24 · Hoàn tất plan Trimming

- Operator · System (auto) · Trimming Planning
- Đến từ: B22
- Đi tới: B25 · Plan COMPLETED
- Đi tới: B26 · End

> Hệ thống tự đóng plan khi mọi LOT đã cắt tỉa xong; Planner không bấm nút đóng.  
> Kết quả: plan APPROVED → COMPLETED; plan bị khoá sửa và huỷ như plan đã có sản lượng.  
> Kiểm thử:  
> - Plan COMPLETED bấm "Edit Plan" → "This plan has production results and cannot be edited."  
> Nguồn: Q-20260930-02 (câu 2) · Q-20260925-04  

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

#### LOT trong plan (Trimming Result)

`WAITING` → `PARTIAL` → `COMPLETED`

Bước chuyển:

- `WAITING` -- Confirm Output — còn Remaining --> `PARTIAL`
- `PARTIAL` -- Remaining = 0 --> `COMPLETED`
- `WAITING` -- Confirm Output — ghi đủ trong một lần --> `COMPLETED` (quay lại)

#### Plan Trimming

`APPROVED` → `COMPLETED`

Bước chuyển:

- `APPROVED` -- Mọi LOT Remaining = 0 --> `COMPLETED`

## Input

| # | Input | Loại | Đi vào bước |
| --- | --- | --- | --- |
| I-1 | Plan Trimming `APPROVED` — các LOT và Plan Qty theo size | Kế hoạch — flow Trimming Planning | Đưa plan lên Trimming Result |
| I-2 | Plan sửa (giữ Plan No.) hoặc huỷ khi chưa có sản lượng | Kế hoạch — flow Trimming Planning | Đưa plan lên Trimming Result |
| I-3 | Phiếu Stock Out Curing → WH-TRM-01 APPROVED của từng LOT — số theo size là "RECEIVED" của LOT | Phiếu kho — flow Trimming Planning / Curing Confirmation | LOT có phiếu Stock Out? |

## 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, chọn LOT cần nhập Output · Nhập Output Matrix theo size · Chia grade C theo lý do lỗi · Xác nhận Output | Operator | Trimming Result · `Open Plan` → `LOTs in plan …` · `Enter Output` / `Add Output` từng LOT · `Defect Reason Breakdown (grade C)` · `Confirm Output` → `Confirm & Save` |
| Đưa plan lên Trimming Result · Cộng dồn Output · ghi Defect Records · Nhập kho Trimming WH-TRM-01 · Hoàn tất plan Trimming | System (auto) | Trimming Result |

## Output

| # | Output | Điều kiện sinh ra |
| --- | --- | --- |
| O-1 | LOT chưa nhập được — "Curing stock not issued" | LOT chưa có phiếu Stock Out Curing (chưa đủ ngày curing) |
| O-2 | Defect Records — grade C (scrap) theo lý do, không sinh phiếu sửa; mỗi size PR (Pending repair) > 0 sinh một phiếu Repair / Rework, mang LOT No. (Source `Trimming · Pending repair`) | Confirm Output có C hoặc PR > 0 |
| O-3 | Plan có Output Entry → khoá Edit Plan / Cancel Plan ở Trimming Planning | Entry đầu tiên của plan được lưu |
| O-4 | LOT Spray (A + A-) → WH-TRM-01 · Waiting SPRAY-OUT ZONE, chưa có Customer P.O — nguồn của Outsourcing Planning | Mỗi lần Confirm Output của plan loại Spray |
| O-5 | LOT Logo · OOMG (A + A-) → WH-TRM-01 · Waiting Packing, chưa có Customer P.O — nguồn của Packing Planning Logo | Mỗi lần Confirm Output của plan loại Logo hoặc OOMG |
| O-6 | Plan giữ `APPROVED` — chờ LOT còn lại | Sau Confirm Output, plan còn LOT có Remaining > 0 |
| O-7 | Plan = `COMPLETED` — hệ thống tự chuyển, plan khoá sửa / huỷ | Mọi LOT của plan có Remaining = 0 |

## Thuật ngữ

| Thuật ngữ | Nghĩa trong flow này |
| --- | --- |
| `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 |
| `Stock Out Curing` | Phiếu xuất LOT từ kho Curing sang kho "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 |
| `Output Matrix` | Bảng nhập sản lượng theo size: A (First grade) · A- (First grade, minor) · C (Reject) · PR (Pending repair) |
| `Grade C` | Hàng "Reject" là scrap — bắt buộc chia theo lý do ở Defect Reason Breakdown, vào Defect Records, không sinh phiếu Repair / Rework |
| `PR` (Pending repair) | Hàng chờ sửa — mỗi size sinh một phiếu Repair / Rework, không vào Defect Records, không vào bể chờ công đoạn sau |
| `Received` / `Recorded` / `Remaining` | Số trên phiếu Stock Out Curing của LOT · tổng đã ghi · số còn phải cắt tỉa = Received − Recorded |
| `Waiting SPRAY-OUT ZONE` | Bể chờ A + A- của plan Spray ở WH-TRM-01, nguồn của Outsourcing Planning |
| `Waiting Packing` | Bể chờ A + A- của plan Logo và OOMG ở WH-TRM-01, nguồn của Packing Planning Logo |
