# Stock Exchange — Đổi thông tin tồn kho

> Fine Chemical (FC) · Module WMS · v1.5 · 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/stock-exchange

## 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 Master Location (Bin) | Master data | B03 |
| B02 | Input | Dữ liệu | Tồn kho hiện tại (Lot · PO · Barcode · Grade) | Tồn kho | B08 |
| B03 | Warehouse Staff | Bắt đầu | Start |  | B04 |
| B04 | Warehouse Staff | Điểm quyết định | Request hay Slip độc lập? |  | B05 [Slip độc lập]; B06 [Tạo Request] |
| B05 | Warehouse Staff | Bước | Create Exchange Slip (standalone) Stock · Type · giá trị EX | Web · Stock Exchange | B07 |
| B06 | Warehouse Staff | Bước | Create Exchange Request | Web · Stock Exchange | B08 |
| B07 | Warehouse Staff | Bước | Submit for Approval | Web · Stock Exchange | B09 [Slip SUBMITTED] |
| B08 | Warehouse Staff | Bước | Select from Stock (dòng OUT hiện tại) | Web · Stock Exchange | B10 |
| B09 | Warehouse Manager | Điểm quyết định | Kỳ kho của phiếu đã chốt? |  | B11 [Đã chốt]; B12 [Chưa] |
| B10 | Warehouse Staff | Bước | Gán Exchange Type từng dòng (LOT / PO / BARCODE / GRADE) + nhập giá trị EX mới | Web · Stock Exchange | B13 |
| B11 | Output | Dữ liệu | Chặn mọi action: Submit · Approve · Cancel · Delete — This action cannot be completed because the affected inventory period is closed through [Close Date] |  | (kết thúc) |
| B12 | Warehouse Manager | Bước | Approve – Update Stock | Web · Stock Exchange | B14 |
| B13 | Warehouse Staff | Bước | Submit Request | Web · Stock Exchange | B15 [SUBMITTED] |
| B14 | Warehouse Manager | Bước | Ghi Lot/PO/Barcode/Grade mới theo Exchange Type | System (auto) · Stock Exchange | B16; B17 [nhánh tuỳ chọn]; B18 |
| B15 | Warehouse Staff | Bước | Print Request (QR = Request No.) | Web · Stock Exchange | B19 |
| B16 | Output | Dữ liệu | Exchange Slip = APPROVED Tồn kho mang thông tin mới |  | (kết thúc) |
| B17 | Warehouse Staff | Bước | W/H Stock Checking (view-only, tra cứu) | Web · W/H Stock Checking |  |
| B18 | Warehouse Manager | Điểm quyết định | Có dòng đổi Barcode/Lot/PO? |  | B20 [Có]; B21 [Không] |
| B19 | Warehouse Staff | Điểm quyết định | Tạo Slip ở đâu? |  | B22 [Mobile]; B23 [Web] |
| B20 | Warehouse Staff | Bước | In tem mới → dán lên hàng | Web · Exchange Label Issue | B21 |
| B21 | Warehouse Manager | Điểm quyết định | Mọi Slip của Request APPROVED? |  | B24 [Có]; B25 [Không] |
| B22 | Warehouse Staff | Bước | Scan QR Request | Mobile · Stock Exchange | B26 |
| B23 | Warehouse Staff | Bước | Create EX Slip from this Request | Web · Stock Exchange | B27 |
| B24 | Output | Dữ liệu | Request → CLOSED (tự động) |  | (kết thúc) |
| B25 | Output | Dữ liệu | Request giữ SUBMITTED (chờ Slip còn lại) |  | (kết thúc) |
| B26 | Warehouse Staff | Bước | Scan Barcode hàng cần đổi | Mobile · Stock Exchange | B28 |
| B27 | Warehouse Staff | Bước | From Request → lấy dòng của Request | Web · Stock Exchange | B07 |
| B28 | Warehouse Staff | Bước | Make Slip | Mobile · Stock Exchange | B07 |
| B29 | Warehouse Manager | Bắt đầu | Start |  | B30 |
| B30 | Warehouse Manager | Bước | Cancel (Slip đang APPROVED) | Web · Stock Exchange | B31 |
| B31 | Warehouse Manager | Điểm quyết định | Chưa có giao dịch/ action sau khi đổi? |  | B32 [Không]; B33 [Có] |
| B32 | Output | Dữ liệu | Chặn huỷ — Slip giữ APPROVED đã có giao dịch/action sau đổi |  | (kết thúc) |
| B33 | Warehouse Manager | Bước | Slip → CANCELLED khôi phục thông tin cũ | System (auto) · Stock Exchange | B34; B35 |
| B34 | Output | Dữ liệu | Tồn kho về thông tin trước khi đổi |  | (kết thúc) |
| B35 | Output | Dữ liệu | Request đang CLOSED → quay lại SUBMITTED |  | (kết thúc) |

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

#### B04 · Request hay Slip độc lập?

- Warehouse Staff
- Đến từ: B03
- Đi tới [Slip độc lập]: B05 · Create Exchange Slip (standalone) Stock · Type · giá trị EX
- Đi tới [Tạo Request]: B06 · Create Exchange Request

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

- Warehouse Manager
- Đến từ: B07
- Đi tới [Đã chốt]: B11 · 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]: B12 · Approve – Update Stock

#### B18 · Có dòng đổi Barcode/Lot/PO?

- Warehouse Manager
- Đến từ: B14
- Đi tới [Có]: B20 · In tem mới → dán lên hàng
- Đi tới [Không]: B21 · Mọi Slip của Request APPROVED?

#### B19 · Tạo Slip ở đâu?

- Warehouse Staff
- Đến từ: B15
- Đi tới [Mobile]: B22 · Scan QR Request
- Đi tới [Web]: B23 · Create EX Slip from this Request

#### B21 · Mọi Slip của Request APPROVED?

- Warehouse Manager
- Đến từ: B20, B18
- Đi tới [Có]: B24 · Request → CLOSED (tự động)
- Đi tới [Không]: B25 · Request giữ SUBMITTED (chờ Slip còn lại)

#### B31 · Chưa có giao dịch/ action sau khi đổi?

- Warehouse Manager
- Đến từ: B30
- Đi tới [Không]: B32 · Chặn huỷ — Slip giữ APPROVED đã có giao dịch/action sau đổi
- Đi tới [Có]: B33 · Slip → CANCELLED khôi phục thông tin cũ

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

#### Exchange Request

`SAVED` → `SUBMITTED` → `CLOSED`

Bước chuyển:

- `SAVED` -- Submit Request --> `SUBMITTED`
- `SUBMITTED` -- Auto: mọi Slip liên kết APPROVED --> `CLOSED`
- `CLOSED` -- Slip liên kết bị Cancel — quay lại chờ đổi --> `SUBMITTED` (quay lại)
- `SAVED` -- Delete Request --> `Đã xoá`

#### Exchange Slip

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

Bước chuyển:

- `SAVED` -- Submit for Approval --> `SUBMITTED`
- `SUBMITTED` -- Approve – Update Stock --> `APPROVED`
- `APPROVED` -- Cancel — chưa có giao dịch/action sau --> `CANCELLED`
- `CANCELLED` -- Sửa Remark / Line item → Approve lại --> `APPROVED` (quay lại)
- `SAVED` -- Delete --> `Đã xoá`

- `CANCELLED` (Exchange Slip) → kéo hàng Exchange Request quay lại

Ghi chú trên sơ đồ:

- Chặn Cancel nếu đã có giao dịch/action sau khi đổi, hoặc kỳ kho đã chốt

## Input

| # | Input | Loại | Đi vào bước |
| --- | --- | --- | --- |
| I-1 | Item Master, Warehouse, Location (Bin) | Master data | Mọi dòng hàng, header Request/Slip |
| I-2 | Tồn kho hiện tại (Lot No · PO No · Barcode · Grade) | Tồn kho | Select from Stock — điền thông tin OUT của dòng |

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

| Bước | Vai trò | Màn hình |
| --- | --- | --- |
| Create Exchange Request · Select from Stock · Gán Exchange Type từng dòng + nhập giá trị EX mới | Warehouse Staff | Stock Exchange · Web |
| Submit Request · Print Request (QR) | Warehouse Staff | Stock Exchange · Web |
| Scan QR Request · Scan Barcode hàng cần đổi · Make Slip | Warehouse Staff | Stock Exchange · Mobile |
| Create EX Slip from this Request · From Request | Warehouse Staff | Stock Exchange · Web |
| Create Exchange Slip (standalone) | Warehouse Staff | Stock Exchange · Web |
| Submit for Approval | Warehouse Staff | Stock Exchange · Web |
| In tem mới → dán lên hàng (dòng đổi Barcode / Lot / PO) | Warehouse Staff | Exchange Label Issue · Web |
| W/H Stock Checking (tra cứu, tuỳ chọn) | Warehouse Staff | W/H Stock Checking · Web |
| Approve – Update Stock · Cancel | Warehouse Manager | Stock Exchange · Web |
| 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) | Stock Exchange |

## Output

| # | Output | Điều kiện sinh ra |
| --- | --- | --- |
| O-1 | Exchange Request: `SAVED` → `SUBMITTED` → `CLOSED` | CLOSED tự động khi mọi Exchange Slip liên kết đều `APPROVED` |
| O-2 | Exchange Slip = `APPROVED` | Manager bấm Approve – Update Stock khi Slip đang `SUBMITTED` |
| O-3 | Tồn kho mang Lot No / PO No / Barcode / Grade mới, theo Exchange Type của từng dòng | Ngay khi Approve |
| O-4 | Tem mới dán trên hàng | Sau Approve, chỉ với dòng đổi Barcode / Lot / PO |
| O-5 | Request giữ `SUBMITTED` | Request còn Slip liên kết chưa `APPROVED` |
| O-6 | *Ngoại lệ:* Slip = `CANCELLED`, tồn kho về thông tin trước khi đổi, Request đang CLOSED quay về SUBMITTED — hoặc bị chặn huỷ | Slip đang `APPROVED`; chặn nếu đã có giao dịch trên hàng sau khi đổi, hoặc đã có action ở màn khác |
