# Prod Mapping Pallet — Gộp sub-barcode lên một Pallet BC

> Fine Chemical (FC) · Module WMS · v1.4 · 18/09/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: /wms/prod-mapping-pallet

## 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
- Warehouse Staff
- Warehouse Manager
- 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 | Item · Warehouse/Zone Loc ID · PIC | Master data | B10 |
| B02 | Input | Dữ liệu | Tồn kho theo từng Barcode/QR còn trong kho | System (auto) | B11 |
| B03 | Input | Dữ liệu | Tem Pallet BC (V26…) chưa gắn hàng | Hàng thật trong kho | B22 |
| B04 | Input | Dữ liệu | Thùng/gói mang sub-barcode đang chờ gộp lên pallet | Hàng thật trong kho | B23 |
| B05 | Warehouse Staff | Bắt đầu | Start |  | B06 |
| B06 | Warehouse Staff | Bước | Lọc ngày · trạng thái · kho · Pallet BC → Find · chọn view theo YC hoặc theo Pallet | Web · Product Mapping Pallet | B07 [nhánh tuỳ chọn]; B08 |
| B07 | Warehouse Staff | Bước | Export — xuất danh sách đang lọc theo view đang xem | Web · Product Mapping Pallet | B09 [nhánh tuỳ chọn] |
| B08 | Warehouse Staff | Bước | Tạo Mapping Request → hệ sinh số MPYC-KHOxx-YYMM-NNNNN ở trạng thái SAVED | Web · Product Mapping Pallet | B10 |
| B09 | Output | Dữ liệu | File .xlsx / .csv theo đúng bộ lọc và view đang xem |  | (kết thúc) |
| B10 | Warehouse Staff | Bước | Nhập Request Date · Warehouse · PIC · Item Code → hệ tự điền Item Name · Customer · Loc ID | Web · Product Mapping Pallet | B11 |
| B11 | Warehouse Staff | Bước | Thêm barcode vào YC: Stock · Scan Barcode/QR · Add Row | Web · Product Mapping Pallet | B12 |
| B12 | Warehouse Staff | Điểm quyết định | Barcode đã có trong phiếu? |  | B13 [Có]; B14 [Không] |
| B13 | Warehouse Staff | Bước | Bỏ qua dòng trùng · báo lỗi trùng barcode | System (auto) · Product Mapping Pallet | B14 |
| B14 | Warehouse Staff | Bước | Save → kiểm Request Date · Warehouse/Zone · Item Code → YC = SAVED | Web · Product Mapping Pallet | B15 |
| B15 | Warehouse Staff | Bước | Confirmed → YC = SUBMITTED (không quay lại SAVED từ UI) | Web · Product Mapping Pallet | B16; B17; B18 [nhánh tuỳ chọn] |
| B16 | Output | Dữ liệu | Mapping Request MPYC-… = SUBMITTED kèm danh sách barcode và tổng Quantity |  | (kết thúc) |
| B17 | Warehouse Staff | Điểm quyết định | Slip gắn Request hay độc lập? |  | B19 [Độc lập]; B20 [Từ Request] |
| B18 | Warehouse Staff | Bước | In phiếu YC kèm QR Code dựng từ số YC | Web · Product Mapping Pallet | B21 [nhánh tuỳ chọn] |
| B19 | Warehouse Staff | Bước | Tạo Mapping Slip độc lập — không gắn Request nào | Web · Product Mapping Pallet | B22 |
| B20 | Warehouse Staff | Bước | Từ dòng YC bấm Map → hệ sinh MP-… = SAVED · Linked Request No. tự điền, read-only | Web · Product Mapping Pallet | B22 |
| B21 | Output | Dữ liệu | Phiếu YC in ra, QR = số YC, dán lên hàng để scan |  | (kết thúc) |
| B22 | Warehouse Staff | Bước | Nhập Pallet BC (V26…) · Creation Date · Warehouse · Item Code · PIC | Web · Product Mapping Pallet | B23 |
| B23 | Warehouse Staff | Bước | Thêm sub-barcode: Scan · From Mapping Request · Stock | Web · Product Mapping Pallet | B24 |
| B24 | Warehouse Staff | Điểm quyết định | Barcode đã có trong slip? |  | B25 [Có]; B26 [Không] |
| B25 | Warehouse Staff | Bước | Bỏ qua dòng trùng · báo lỗi trùng barcode | System (auto) · Product Mapping Pallet | B26 |
| B26 | Warehouse Staff | Bước | Save → kiểm Pallet BC · Date · Warehouse · Item Code → slip = SAVED | Web · Product Mapping Pallet | B27 |
| B27 | Warehouse Staff | Bước | Submit → slip = SUBMITTED, chờ Warehouse Manager duyệt | Web · Product Mapping Pallet | B28 [nhánh tuỳ chọn]; B29; B30 |
| B28 | Warehouse Staff | Bước | Remaining > 0 → cảnh báo cam, không chặn Submit | System (auto) · Product Mapping Pallet |  |
| B29 | Output | Dữ liệu | Mapping Slip MP-… = SUBMITTED kèm Pallet BC và danh sách sub-barcode đã gộp |  | (kết thúc) |
| B30 | Warehouse Manager | Bước | Mở slip SUBMITTED · soát Pallet BC ↔ danh sách sub-barcode trong slip | Web · Product Mapping Pallet | B31 |
| B31 | Warehouse Manager | Điểm quyết định | Kỳ kho của phiếu đã chốt? |  | B32 [Đã chốt]; B33 [Chưa] |
| B32 | Warehouse Manager | Bước | Chặn mọi action: Submit · Approve · Cancel · Delete — This action cannot be completed because the affected inventory period is closed through [Close Date] | System (auto) · Product Mapping Pallet |  |
| B33 | Warehouse Manager | Bước | Approve → slip = APPROVED gộp sub-barcode vào Pallet BC ghi nhận nhập kho theo pallet | System (auto) · Product Mapping Pallet | B34; B35 |
| B34 | Output | Dữ liệu | Pallet BC chứa các sub-barcode · tồn kho ghi nhận theo pallet, sẵn sàng nhập vị trí lưu trữ |  | (kết thúc) |
| B35 | Warehouse Manager | Điểm quyết định | Mọi dòng YC Remaining = 0? |  | B36 [Chưa]; B37 [Rồi] |
| B36 | Warehouse Manager | Bước | YC giữ SUBMITTED — còn barcode chưa map hết | System (auto) · Product Mapping Pallet |  |
| B37 | Warehouse Manager | Bước | YC tự chuyển CLOSED | System (auto) · Product Mapping Pallet | B38 |
| B38 | Output | Dữ liệu | Mapping Request MPYC-… = CLOSED (đóng tự động) |  | (kết thúc) |
| B39 | Warehouse Manager | Bắt đầu | Start |  | B40 |
| B40 | Warehouse Manager | Bước | Mở slip APPROVED → Cancel (chỉ khi có quyền) → hộp xác nhận huỷ | Web · Product Mapping Pallet | B41 |
| B41 | Warehouse Manager | Điểm quyết định | Đủ tồn để đảo VÀ chưa có action tiếp theo? |  | B42 [Không]; B43 [Có] |
| B42 | Warehouse Manager | Bước | Chặn huỷ · slip giữ APPROVED báo hàng đã phát sinh giao dịch hoặc đã có action ở màn khác | System (auto) · Product Mapping Pallet | B44 |
| B43 | Warehouse Manager | Bước | Slip = CANCELLED · tách sub- barcode khỏi pallet · đảo tồn YC: Received giảm, Remaining tăng · YC CLOSED quay lại SUBMITTED | System (auto) · Product Mapping Pallet | B45 |
| B44 | Output | Dữ liệu | Slip giữ APPROVED · mapping và tồn kho không đổi |  | (kết thúc) |
| B45 | Output | Dữ liệu | Slip = CANCELLED · sub-barcode tách khỏi pallet · tồn trả về trước khi Approve · YC quay lại SUBMITTED · Remark và Line item sửa được, Approve lại được |  | (kết thúc) |

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

#### B12 · Barcode đã có trong phiếu?

- Warehouse Staff
- Đến từ: B11
- Đi tới [Có]: B13 · Bỏ qua dòng trùng · báo lỗi trùng barcode
- Đi tới [Không]: B14 · Save → kiểm Request Date · Warehouse/Zone · Item Code → YC = SAVED

#### B17 · Slip gắn Request hay độc lập?

- Warehouse Staff
- Đến từ: B15
- Đi tới [Độc lập]: B19 · Tạo Mapping Slip độc lập — không gắn Request nào
- Đi tới [Từ Request]: B20 · Từ dòng YC bấm Map → hệ sinh MP-… = SAVED · Linked Request No. tự điền, read-only

#### B24 · Barcode đã có trong slip?

- Warehouse Staff
- Đến từ: B23
- Đi tới [Có]: B25 · Bỏ qua dòng trùng · báo lỗi trùng barcode
- Đi tới [Không]: B26 · Save → kiểm Pallet BC · Date · Warehouse · Item Code → slip = SAVED

#### B31 · Kỳ kho của phiếu đã chốt?

- Warehouse Manager
- Đến từ: B30
- Đi tới [Đã chốt]: B32 · Chặn mọi action: Submit · Approve · Cancel · Delete — This action cannot be completed because the affected inventory period is closed through [Close Date]
- Đi tới [Chưa]: B33 · Approve → slip = APPROVED gộp sub-barcode vào Pallet BC ghi nhận nhập kho theo pallet

#### B35 · Mọi dòng YC Remaining = 0?

- Warehouse Manager
- Đến từ: B33
- Đi tới [Chưa]: B36 · YC giữ SUBMITTED — còn barcode chưa map hết
- Đi tới [Rồi]: B37 · YC tự chuyển CLOSED

#### B41 · Đủ tồn để đảo VÀ chưa có action tiếp theo?

- Warehouse Manager
- Đến từ: B40
- Đi tới [Không]: B42 · Chặn huỷ · slip giữ APPROVED báo hàng đã phát sinh giao dịch hoặc đã có action ở màn khác
- Đi tới [Có]: B43 · Slip = CANCELLED · tách sub- barcode khỏi pallet · đảo tồn YC: Received giảm, Remaining tăng · YC CLOSED quay lại SUBMITTED

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

#### Mapping Request (MPYC-KHOxx-YYMM-NNNNN)

`SAVED` → `SUBMITTED` → `CLOSED`

Bước chuyển:

- `SAVED` -- Confirmed --> `SUBMITTED`
- `SUBMITTED` -- Auto: mọi dòng Remaining = 0 --> `CLOSED`
- `CLOSED` -- Slip liên kết bị Cancel — Remaining tăng lại --> `SUBMITTED` (quay lại)
- `SAVED` -- Delete Request --> `Đã xoá`

#### Mapping Slip (MP-KHOxx-YYMM-PNNN)

`SAVED` → `SUBMITTED` → `APPROVED` → `CANCELLED`

Bước chuyển:

- `SAVED` -- Submit --> `SUBMITTED`
- `SUBMITTED` -- Approve — gộp lên Pallet BC --> `APPROVED`
- `APPROVED` -- Cancel — đủ tồn & chưa có action sau --> `CANCELLED`
- `CANCELLED` -- Sửa Remark / Line item → Approve lại --> `APPROVED` (quay lại)
- `SAVED` -- Delete Slip (cả khi CANCELLED) --> `Đã xoá`

- `CANCELLED` (Mapping Slip (MP-KHOxx-YYMM-PNNN)) → kéo hàng Mapping Request (MPYC-KHOxx-YYMM-NNNNN) quay lại

Ghi chú trên sơ đồ:

- Kỳ kho đã chốt thì chặn mọi action

## Input

| # | Input | Loại | Đi vào bước |
| --- | --- | --- | --- |
| I-1 | Item (Item Code → Item Name, Customer), Warehouse/Zone, Loc ID, PIC | Master data | Nhập thông tin Mapping Request |
| I-2 | Tồn kho theo từng Barcode/QR còn trong kho — nguồn của Stock popup | Dữ liệu hệ thống | Thêm barcode vào danh sách YC |
| I-3 | Tem Pallet BC (`V26…`) chưa gắn hàng | Hàng vật lý | Nhập Pallet BC trên Mapping Slip |
| I-4 | Thùng/gói mang sub-barcode đang chờ gộp lên pallet | Hàng vật lý | Thêm sub-barcode vào slip (Scan · From Mapping Request · Stock) |

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

| Bước | Vai trò | Màn hình |
| --- | --- | --- |
| Lọc From/To date · trạng thái YC · trạng thái phiếu · kho · Pallet BC → Find · chọn view theo YC hoặc theo Pallet | Warehouse Staff | Product Mapping Pallet · Web |
| Export — xuất danh sách đang lọc theo view đang chọn (tuỳ chọn) | Warehouse Staff | Product Mapping Pallet · Web |
| Tạo Mapping Request → hệ sinh số `MPYC-KHOxx-YYMM-NNNNN` ở trạng thái `SAVED` | Warehouse Staff | Product Mapping Pallet · Web |
| Nhập Request Date · Warehouse/Zone · PIC · Item Code → hệ tự điền Item Name · Customer · Loc ID | Warehouse Staff | Product Mapping Pallet · Web |
| Thêm barcode vào YC: Stock popup · Scan Barcode/QR · Add Row thủ công | Warehouse Staff | Product Mapping Pallet · Web |
| Bỏ qua dòng trùng · báo lỗi trùng barcode | System (auto) | Product Mapping Pallet |
| Save → kiểm Request Date · Warehouse/Zone · Item Code → YC = `SAVED` | Warehouse Staff | Product Mapping Pallet · Web |
| Confirmed → YC = `SUBMITTED` (không quay lại `SAVED` từ UI) | Warehouse Staff | Product Mapping Pallet · Web |
| In phiếu YC kèm QR Code dựng từ số YC (tuỳ chọn) | Warehouse Staff | Product Mapping Pallet · Web |
| Tạo Mapping Slip độc lập — không gắn Request nào | Warehouse Staff | Product Mapping Pallet · Web |
| Từ dòng YC bấm Map → hệ sinh `MP-KHOxx-YYMM-PNNN` = `SAVED` · Linked Request No. tự điền, read-only | Warehouse Staff | Product Mapping Pallet · Web |
| Nhập Pallet BC (`V26…`) · Creation Date · Warehouse · Item Code · PIC | Warehouse Staff | Product Mapping Pallet · Web |
| Thêm sub-barcode vào slip: Scan · From Mapping Request · Stock popup | Warehouse Staff | Product Mapping Pallet · Web |
| Save → kiểm Pallet BC · Creation Date · Warehouse · Item Code → slip = `SAVED` | Warehouse Staff | Product Mapping Pallet · Web |
| Remaining > 0 → cảnh báo cam, không chặn Submit | System (auto) | Product Mapping Pallet |
| Submit → slip = `SUBMITTED`, chờ Warehouse Manager duyệt | Warehouse Staff | Product Mapping Pallet · Web |
| Mở slip `SUBMITTED` · soát Pallet BC ↔ danh sách sub-barcode trong slip | Warehouse Manager | Product Mapping Pallet · Web |
| Approve → slip = `APPROVED` · gộp sub-barcode vào Pallet BC · ghi nhận nhập kho theo pallet | System (auto) | Product Mapping Pallet |
| YC giữ `SUBMITTED` khi còn barcode chưa map hết; YC tự chuyển `CLOSED` khi mọi dòng Remaining = 0 | System (auto) | Product Mapping Pallet |
| Kỳ kho của phiếu đã chốt → chặn mọi action (Submit · Approve · Cancel · Delete) với thông báo `This action cannot be completed because the affected inventory period is closed through [Close Date]` | System (auto) | Product Mapping Pallet |
| Mở slip `APPROVED` → Cancel (chỉ hiện khi có quyền) → hộp xác nhận huỷ | Warehouse Manager | Product Mapping Pallet · Web |
| Slip = `CANCELLED` · tách sub-barcode khỏi Pallet BC · đảo tồn · YC: Received giảm, Remaining tăng, YC `CLOSED` quay lại `SUBMITTED`. Remark và Line item trên slip đã huỷ vẫn sửa được, sửa xong Approve lại được | System (auto) | Product Mapping Pallet |

## Output

| # | Output | Điều kiện sinh ra |
| --- | --- | --- |
| O-1 | File `.xlsx` / `.csv` theo đúng bộ lọc và view đang xem | Bấm Export khi danh sách đang lọc có ít nhất một dòng |
| O-2 | Mapping Request `MPYC-…` = `SUBMITTED` kèm danh sách barcode và tổng Quantity | Bấm Confirmed và đã đủ Request Date · Warehouse/Zone · Item Code |
| O-3 | Phiếu YC in ra, QR = số YC, dán lên hàng để scan | Bấm In phiếu YC trên Modal Request hoặc icon in ở dòng danh sách |
| O-4 | Mapping Slip `MP-…` = `SUBMITTED` kèm Pallet BC và danh sách sub-barcode đã gộp | Bấm Submit và đã đủ Pallet BC · Creation Date · Warehouse · Item Code |
| O-5 | Pallet BC chứa các sub-barcode · tồn kho ghi nhận theo pallet, sẵn sàng nhập vị trí lưu trữ | Warehouse Manager duyệt slip — duyệt là gộp và ghi nhận ngay |
| O-6 | Mapping Request `MPYC-…` = `CLOSED` (đóng tự động) | Mọi dòng của YC có Remaining = 0 sau khi slip liên kết được duyệt |
| O-7 | *Ngoại lệ:* Slip giữ `APPROVED` · mapping và tồn kho không đổi | Huỷ bị chặn vì hàng theo Pallet BC đã phát sinh giao dịch sau khi nhập kho, hoặc record đã có action tiếp theo ở màn khác |
| O-8 | *Ngoại lệ:* Slip = `CANCELLED` · sub-barcode tách khỏi pallet · tồn trả về trước khi Approve · YC `CLOSED` quay lại `SUBMITTED` | Người có quyền huỷ xác nhận trên hộp thoại và tồn theo Pallet BC còn đủ để đảo |
