# Process Inventory — bản chiếu tồn WMS của các kho công đoạn theo LOT × size

> Fine Chemical (FC) · Module MES · v0.2 · 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/process-inventory

## 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
- System
- 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 | Lô Curing đã xác nhận (Curing Confirmation) |  | B11 |
| B02 | Input | Dữ liệu | Phiếu Stock Out Curing → WH-TRM-01 (APPROVED / CANCELLED) |  | B11 |
| B03 | Input | Dữ liệu | Output đã ghi ở Trimming Result (POP của plan Trimming) |  | B12 |
| B04 | Input | Dữ liệu | LOT Spray đã Trimming (A + A-) — Trimming Result |  | B14 |
| B05 | Input | Dữ liệu | Phiếu Stock Out WH-TRM-01 → NCC sơn (Spray Out Plan) |  | B14 |
| B06 | Input | Dữ liệu | LOT Logo đã Trimming (A + A-) — Trimming Result |  | B16 |
| B07 | Input | Dữ liệu | Hàng đã sửa xong từ Repair / Rework (Pending repair đã Repaired) |  | B18 |
| B08 | Input | Dữ liệu | Plan đang mở giữ hàng (Trimming · Spray Out · Packing) |  | B20 |
| B09 | Planner / Warehouse Staff | Bắt đầu | Cần xem tồn |  | B10 |
| B10 | Planner / Warehouse Staff | Bước | Mở Process Inventory | Web · Process Inventory | B11 |
| B11 | System | Bước | Chiếu tồn Curing Room (WH-CUR-01) | System (auto) · Process Inventory | B12; B13 |
| B12 | System | Bước | Chiếu tồn Waiting Trimming (WH-TRM-01) | System (auto) · Process Inventory | B14; B15 |
| B13 | Output | Dữ liệu | Curing Room — tồn WH-CUR-01 sau khi trừ phiếu APPROVED |  | (kết thúc) |
| B14 | System | Bước | Chiếu tồn Waiting SPRAY-OUT ZONE | System (auto) · Process Inventory | B16; B17 |
| B15 | Output | Dữ liệu | Waiting Trimming — tồn chờ cắt tỉa (WH-TRM-01) |  | (kết thúc) |
| B16 | System | Bước | Chiếu tồn Waiting Packing | System (auto) · Process Inventory | B18; B19 |
| B17 | Output | Dữ liệu | Waiting SPRAY-OUT ZONE — A + A- Spray chờ gửi NCC sơn |  | (kết thúc) |
| B18 | System | Bước | Chiếu tồn Repair Inv List | System (auto) · Process Inventory | B20; B21 |
| B19 | Output | Dữ liệu | Waiting Packing — A + A- Logo chờ đóng gói |  | (kết thúc) |
| B20 | System | Bước | Tính Available từng dòng | System (auto) · Process Inventory | B22; B23 |
| B21 | Output | Dữ liệu | Repair Inv List — hàng đã sửa chờ công đoạn kế |  | (kết thúc) |
| B22 | System | Điểm quyết định | On-hand = 0? |  | B24 [Có]; B25 [Không] |
| B23 | Output | Dữ liệu | Available từng dòng và tổng trên thẻ bể |  | (kết thúc) |
| B24 | System | Bước | Ẩn dòng khỏi bảng | System (auto) · Process Inventory | B26; B27 |
| B25 | Output | Dữ liệu | Dòng còn On-hand — hiện trong bảng |  | (kết thúc) |
| B26 | System | Kết thúc | End |  |  |
| B27 | Output | Dữ liệu | Dòng On-hand = 0 — ẩn khỏi bảng |  | (kết thúc) |
| B28 | Planner / Warehouse Staff | Bắt đầu | Cần lọc hoặc tìm |  | B29 |
| B29 | Planner / Warehouse Staff | Bước | Lọc bể hoặc tìm trong bảng | Web · Process Inventory | B30; B31 |
| B30 | Output | Dữ liệu | Bảng đã lọc theo bể hoặc từ khoá |  | (kết thúc) |
| B31 | Planner / Warehouse Staff | Kết thúc | End |  |  |

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

#### B10 · Mở Process Inventory

- Planner / Warehouse Staff · Web · Process Inventory
- Đến từ: B09
- Đi tới: B11 · Chiếu tồn Curing Room (WH-CUR-01)

> Planner hoặc Warehouse Staff mở màn để xem tồn các kho công đoạn theo LOT × size; màn chỉ đọc.  
> Thao tác: Process Inventory › năm thẻ bể "Curing Room" · "Waiting Trimming" · "Waiting SPRAY-OUT ZONE" · "Waiting Packing" · "Repair Inv List" (mỗi thẻ hiện mã kho, số đôi và "<n> LOT(s)"); bảng "Process Inventory by LOT": "Warehouse" · "Location" · "Plan No." · "LOT No." · "WO No." · "Model" · "Base Color" · "Logo / Spray" · "Grade" · "IN Date" · các cột size · "On-hand" · "Available".  
> Hệ thống: màn không có nút ghi — không kiểm kê, không chuyển hàng; kiểm kê và giao dịch kho làm ở WMS. Cột size chỉ hiện size có On-hand > 0 ở các dòng đang hiển thị.  
> Kết quả: hệ thống dựng năm bể ở các bước kế tiếp.  
> Kiểm thử:  
> - Không có dòng nào còn On-hand → bảng hiện "No stock matches the filter."  
> Nguồn: Q-20260917-19 (câu 2) · Q-20261012-02 (câu 3) · prototype v0.88  

#### B11 · Chiếu tồn Curing Room (WH-CUR-01)

- System · System (auto) · Process Inventory
- Đến từ: B10, B01, B02
- Đi tới: B12 · Chiếu tồn Waiting Trimming (WH-TRM-01)
- Đi tới: B13 · Curing Room — tồn WH-CUR-01 sau khi trừ phiếu APPROVED

> Hệ thống chiếu tồn phòng Curing, kho công đoạn "WH-CUR-01 / Curing", theo LOT × size và đã trừ phần xuất sang kho Trimming.  
> Hệ thống: "On-hand" của LOT theo size = tồn LOT ở WH-CUR-01 − tổng phiếu Stock Out Curing → WH-TRM-01 đang APPROVED của LOT, không âm; "Available" = số nhỏ hơn giữa Available của LOT ở Curing Checking và On-hand; "IN Date" = ngày curing của LOT; "Location" = "Curing Room".  
> Kết quả: phiếu CANCELLED (sửa số, bỏ LOT hoặc huỷ plan Trimming) không còn tính nên phần đó tự trở về Curing Room.  
> Kiểm thử:  
> - LOT tồn 1.600 đôi, phiếu APPROVED 510 → On-hand Curing Room 1.090  
> - Huỷ plan đó → phiếu CANCELLED → On-hand Curing Room 1.600  
> Nguồn: Q-20261012-02 (câu 2, 3) · Q-20261009-09 (câu 2) · Q-20260930-05 · prototype v0.88  

#### B12 · Chiếu tồn Waiting Trimming (WH-TRM-01)

- System · System (auto) · Process Inventory
- Đến từ: B03, B11
- Đi tới: B14 · Chiếu tồn Waiting SPRAY-OUT ZONE
- Đi tới: B15 · Waiting Trimming — tồn chờ cắt tỉa (WH-TRM-01)

> Hệ thống chiếu tồn chờ cắt tỉa ở kho "WH-TRM-01 / Trimming": hàng đã xuất khỏi Curing Room cho plan Trimming và chưa được ghi output.  
> Hệ thống: mỗi phiếu Stock Out Curing đang APPROVED là một dòng; "On-hand" theo size = số trên phiếu − output (POP) đã ghi ở Trimming Result cho LOT × plan đó, không âm; "Plan No." = plan Trimming của phiếu; "WO No." lấy từ ô Notes của phiếu; "Available" = 0 vì toàn bộ số đã giữ cho plan Trimming đang mở.  
> Kết quả: dòng hết On-hand thì ẩn; phiếu CANCELLED thì dòng biến mất và số trở về Curing Room.  
> Kiểm thử:  
> - Phiếu 510 đôi APPROVED, Trimming Result đã ghi output 300 → On-hand Waiting Trimming 210  
> - Ghi đủ 510 → On-hand 0, dòng ẩn  
> Nguồn: Q-20261012-02 (câu 2) · Q-20260930-04 (lượt 2) · prototype v0.88  

#### B14 · Chiếu tồn Waiting SPRAY-OUT ZONE

- System · System (auto) · Process Inventory
- Đến từ: B04, B05, B12
- Đi tới: B16 · Chiếu tồn Waiting Packing
- Đi tới: B17 · Waiting SPRAY-OUT ZONE — A + A- Spray chờ gửi NCC sơn

> Hệ thống chiếu tồn A + A- của plan Trimming loại Spray, đã cắt tỉa và chưa gửi NCC sơn, ở kho "WH-TRM-01 / Trimming".  
> Hệ thống: A + A- đã "Confirm Output" ở Trimming Result của plan loại Spray được cộng vào bể theo LOT × size, cột "Logo / Spray" = Spray, chưa có Customer P.O; "Available" = "On-hand" − phần các Spray Out Plan đang mở giữ.  
> Kết quả: hàng rời bể khi phiếu Stock Out WH-TRM-01 → NCC sơn của Spray Out Plan được kho duyệt ở WMS (APPROVED), trừ theo size.  
> Kiểm thử:  
> - LOT 1.826 đôi, Spray Out Plan mở giữ 640 → Available 1.186, On-hand vẫn 1.826  
> - Phiếu Stock Out 640 đôi được duyệt → On-hand 1.186  
> Chưa chốt: prototype v0.88 hiện chỉ trừ "Available" theo plan, chưa trừ "On-hand" khi phiếu Stock Out được duyệt.  
> Nguồn: Q-20261012-02 (câu 3) · Q-20260930-04 · Q-20261005-03 · prototype v0.88  

#### B16 · Chiếu tồn Waiting Packing

- System · System (auto) · Process Inventory
- Đến từ: B06, B14
- Đi tới: B18 · Chiếu tồn Repair Inv List
- Đi tới: B19 · Waiting Packing — A + A- Logo chờ đóng gói

> Hệ thống chiếu tồn A + A- của plan Trimming loại Logo, đã cắt tỉa và chờ đóng gói, ở kho "WH-TRM-01 / Trimming".  
> Hệ thống: A + A- đã "Confirm Output" ở Trimming Result của plan loại Logo được cộng vào bể theo LOT × size, cột "Logo / Spray" = Logo, chưa có Customer P.O; "Available" = "On-hand" − phần các Packing Plan Logo đang mở giữ.  
> Kết quả: Planner chọn hàng ở Packing Planning Logo thì "Available" giảm tương ứng.  
> Kiểm thử:  
> - LOT 220 đôi, Packing Plan Logo mở giữ 90 → Available 130, On-hand 220  
> Chưa chốt: lúc nào "On-hand" của bể này giảm (khi plan giữ hàng hay khi hàng thật sự rời kho) — prototype v0.88 mới trừ "Available".  
> Nguồn: Q-20261012-02 (câu 3) · Q-20260930-04 · prototype v0.88  

#### B18 · Chiếu tồn Repair Inv List

- System · System (auto) · Process Inventory
- Đến từ: B07, B16
- Đi tới: B20 · Tính Available từng dòng
- Đi tới: B21 · Repair Inv List — hàng đã sửa chờ công đoạn kế

> Hệ thống chiếu hàng đã sửa xong ở Repair / Rework, đang chờ công đoạn kế.  
> Hệ thống: phiếu Repair / Rework có trạng thái Repaired và số sửa tốt > 0 (phiếu do Pending repair của các màn sau Injection tự sinh, Source "<Process> · Pending repair") được cộng vào bể theo LOT × size; cột "Warehouse" hiện "—" vì bể này chưa có mã kho; "Available" = "On-hand" − phần các Spray Out Plan và Packing Plan đang mở giữ ở Step 2. Hàng C không vào bể vì đi Defect Records.  
> Kết quả: Planner chọn dòng Repair ở Step 2 của plan thì "Available" giảm tương ứng.  
> Kiểm thử:  
> - Phiếu Repair / Rework sang Repaired, sửa tốt 12 đôi → Repair Inv List thêm 12  
> - Spray Out Plan chọn dòng Repair đó 8 đôi → Available còn 4  
> Chưa chốt: mã kho của bể "Repair Inv List" và lúc nào "On-hand" giảm — prototype v0.88 để "—" và chỉ trừ "Available".  
> Chưa chốt: nơi nhận hàng Repaired phụ thuộc Source ("Spray Out · Pending repair" và "Packing Spray · Pending repair" đi Packing Planning Spray; "Trimming · Pending repair" đi Outsourcing Planning hoặc Packing Planning Logo) nhưng "Repair Inv List" là một bể chung — chưa rõ có tách theo công đoạn kế không (OQ-122, OQ-126).  
> Nguồn: Q-20261013-01 · Q-20260930-04 · prototype v0.91 (mã kho "—")  

#### B20 · Tính Available từng dòng

- System · System (auto) · Process Inventory
- Đến từ: B08, B18
- Đi tới: B22 · On-hand = 0?
- Đi tới: B23 · Available từng dòng và tổng trên thẻ bể

> Hệ thống tính "Available" của từng dòng bể và cộng "On-hand" cho thẻ bể.  
> Hệ thống: Available = On-hand − phần các plan đang mở giữ (Trimming, Spray Out, Packing), theo size, không âm; plan bị Reject hoặc Cancelled thì nhả phần đã giữ. Thẻ bể = tổng On-hand (đôi) của các dòng trong bể và số LOT.  
> Kết quả: hai cột "On-hand" và "Available" của bảng, hai số trên thẻ bể.  
> Kiểm thử:  
> - On-hand 220, plan mở giữ 90 → Available 130  
> - Plan đó bị Cancelled → Available 220  
> Nguồn: Q-20261012-02 (câu 3) · prototype v0.88  

#### B22 · On-hand = 0?

- System
- Đến từ: B20
- Đi tới [Có]: B24 · Ẩn dòng khỏi bảng
- Đi tới [Không]: B25 · Dòng còn On-hand — hiện trong bảng

> Dòng của bể còn hàng tồn không?  
> Có: tổng "On-hand" của dòng = 0 ở mọi size → dòng không hiện trong bảng và không tính vào thẻ bể.  
> Không: "On-hand" > 0 ở ít nhất một size → dòng hiện.  
> Kiểm thử:  
> - Phiếu 510, output ghi đủ 510 → dòng Waiting Trimming của LOT ẩn  
> - Còn 1 đôi ở một size → dòng hiện  
> Nguồn: prototype v0.88  

#### B24 · Ẩn dòng khỏi bảng

- System · System (auto) · Process Inventory
- Đến từ: B22
- Đi tới: B26 · End
- Đi tới: B27 · Dòng On-hand = 0 — ẩn khỏi bảng

> Hệ thống bỏ dòng đã hết tồn khỏi bảng.  
> Kết quả: dòng rời bảng "Process Inventory by LOT"; khi bể nhận thêm hàng cho LOT đó thì dòng hiện lại.  
> Nguồn: prototype v0.88  

#### B29 · Lọc bể hoặc tìm trong bảng

- Planner / Warehouse Staff · Web · Process Inventory
- Đến từ: B28
- Đi tới: B30 · Bảng đã lọc theo bể hoặc từ khoá
- Đi tới: B31 · End

> Planner hoặc Warehouse Staff thu hẹp bảng theo bể hoặc theo từ khoá.  
> Thao tác: bấm một thẻ bể (bấm lại thẻ đang chọn để bỏ lọc) hoặc ô chọn "All locations" hoặc ô tìm "Search warehouse, plan, LOT, WO or model".  
> Hệ thống: lọc theo bể và tìm từ khoá trong mã kho, "Location", "Plan No.", "LOT No.", số phiếu, "WO No.", "Model", "Base Color"; thẻ bể luôn hiện tổng của cả bể, không đổi theo từ khoá.  
> Kết quả: dòng đếm "<n> row(s)"; không dòng nào khớp thì bảng hiện "No stock matches the filter."  
> Kiểm thử:  
> - Chọn bể "Waiting Packing", gõ mã LOT chỉ có ở bể Curing Room → "0 row(s)"  
> Nguồn: prototype v0.88  

## Input

| # | Input | Loại | Đi vào bước |
| --- | --- | --- | --- |
| I-1 | Lô Curing đã xác nhận (Curing Confirmation) | Kết quả sản xuất — MES | Chiếu tồn Curing Room (WH-CUR-01) |
| I-2 | Phiếu Stock Out Curing → WH-TRM-01 (APPROVED / CANCELLED) | Phiếu kho — MES Trimming Planning / Curing Confirmation | Chiếu tồn Curing Room · Chiếu tồn Waiting Trimming |
| I-3 | Output đã ghi ở Trimming Result (POP của plan Trimming) | Kết quả sản xuất — MES | Chiếu tồn Waiting Trimming |
| I-4 | LOT Spray đã Trimming (A + A-) — Trimming Result | Kết quả sản xuất — MES | Chiếu tồn Waiting SPRAY-OUT ZONE |
| I-5 | Phiếu Stock Out WH-TRM-01 → NCC sơn (Spray Out Plan) | Phiếu kho — WMS | Chiếu tồn Waiting SPRAY-OUT ZONE |
| I-6 | LOT Logo đã Trimming (A + A-) — Trimming Result | Kết quả sản xuất — MES | Chiếu tồn Waiting Packing |
| I-8 | Hàng đã sửa xong từ Repair / Rework (Repaired) | Kết quả — MES Repair / Rework | Chiếu tồn Repair Inv List |
| I-9 | Plan đang mở giữ hàng (Trimming · Spray Out · Packing) | Kế hoạch — MES | Tính Available từng dòng |

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

| Bước | Vai trò | Màn hình · nút trên UI |
| --- | --- | --- |
| Mở Process Inventory | Planner / Warehouse Staff | Process Inventory · năm thẻ bể; bảng `Process Inventory by LOT` (màn không có nút ghi) |
| Lọc bể hoặc tìm trong bảng | Planner / Warehouse Staff | Process Inventory · bấm thẻ bể; ô chọn `All locations`; ô tìm `Search warehouse, plan, LOT, WO or model` |
| Chiếu tồn Curing Room · Chiếu tồn Waiting Trimming · Chiếu tồn Waiting SPRAY-OUT ZONE · Chiếu tồn Waiting Packing · Chiếu tồn Repair Inv List · Tính Available từng dòng · Ẩn dòng khỏi bảng | System (auto) | Process Inventory · cột `On-hand`, `Available`; thẻ bể |

## Output

| # | Output | Điều kiện sinh ra |
| --- | --- | --- |
| O-1 | Curing Room — tồn WH-CUR-01 sau khi trừ phiếu APPROVED | LOT còn tồn ở phòng Curing |
| O-2 | Waiting Trimming — tồn chờ cắt tỉa (WH-TRM-01) | Có phiếu Stock Out Curing APPROVED chưa ghi hết output |
| O-3 | Waiting SPRAY-OUT ZONE — A + A- Spray chờ gửi NCC sơn | Plan Trimming loại Spray đã Confirm Output |
| O-4 | Waiting Packing — A + A- Logo chờ đóng gói | Plan Trimming loại Logo đã Confirm Output |
| O-5 | Repair Inv List — hàng đã sửa chờ công đoạn kế | Phiếu Repair / Rework Repaired, số sửa tốt > 0 |
| O-6 | Available từng dòng và tổng trên thẻ bể | Luôn tính khi mở màn |
| O-7 | Dòng còn On-hand — hiện trong bảng | On-hand > 0 ở ít nhất một size |
| O-8 | Dòng On-hand = 0 — ẩn khỏi bảng | On-hand = 0 ở mọi size |
| O-9 | Bảng đã lọc theo bể hoặc từ khoá | Bấm thẻ bể, chọn `All locations` hoặc gõ ô tìm |

## Thuật ngữ

| Thuật ngữ | Nghĩa trong flow này |
| --- | --- |
| `On-hand` | Tồn thực của dòng theo size trong kho công đoạn, lấy từ tồn WMS |
| `Available` | On-hand − phần các plan đang mở giữ (Trimming, Spray Out, Packing), không âm |
| `WH-CUR-01 / Curing` | Kho công đoạn (Process warehouse) của phòng Curing; kiểm kê làm ở kho này bên WMS |
| `WH-TRM-01 / Trimming` | Kho công đoạn của Trimming — một kho giữ ba bể: Waiting Trimming, Waiting SPRAY-OUT ZONE, Waiting Packing (bể Repair Inv List chưa có mã kho) |
| `Stock Out Curing` | Phiếu Stock Out của WMS xuất LOT từ WH-CUR-01 sang WH-TRM-01 cho plan Trimming; ô Notes ghi WO |
| `POP` | Sản lượng đã ghi (Production Output) ở Trimming Result |
| `Confirm Output` | Nút xác nhận output ở Trimming Result; A + A- được nhập vào kho WH-TRM-01 |
| `Repaired` | Trạng thái phiếu Repair / Rework đã sửa xong |
| `NCC sơn` | Nhà cung cấp gia công sơn (Vendor của Spray Out Plan) |
| `WMS` | Hệ kho: giữ tồn kho công đoạn, duyệt phiếu Stock Out, kiểm kê |
