# Inventory Approve — Duyệt / huỷ duyệt Slip tập trung

> Fine Chemical (FC) · Module WMS · v1.3 · 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/inventory-approve

## 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 | Warehouse · Line Transaction · Status | Master data | B03 |
| B02 | Input | Dữ liệu | Slip SUBMITTED / APPROVED / CANCELLED từ mọi màn có Slip cần duyệt | Màn nghiệp vụ | B04 |
| B03 | Warehouse Manager | Bắt đầu | Start |  | B04 |
| B04 | Warehouse Manager | Bước | Search / Filter (Warehouse · Transaction · Status · Line · Slip No) | Web · Inventory Approve | B05; B06 [nhánh tuỳ chọn] |
| B05 | Warehouse Manager | Bước | Chọn 1 hoặc nhiều Slip (checkbox) | Web · Inventory Approve | B07 |
| B06 | Warehouse Manager | Bước | Double-click dòng → mở màn gốc của Slip | Web · Inventory Approve |  |
| B07 | Warehouse Manager | Bước | Approve (Slip SUBMITTED / CANCELLED) | Web · Inventory Approve | B08 |
| B08 | Warehouse Manager | Điểm quyết định | Từng Slip: đạt điều kiện màn gốc? |  | B09 [Không]; B10 [Có] |
| B09 | Warehouse Manager | Bước | Slip giữ nguyên trạng thái · ghi lỗi | System (auto) · Inventory Approve | B11 |
| B10 | Warehouse Manager | Bước | Slip → APPROVED cập nhật tồn kho + Request theo logic màn gốc | System (auto) · Inventory Approve | B12 [nhánh tuỳ chọn]; B11 |
| B11 | Warehouse Manager | Bước | Báo kết quả lô X thành công · Y lỗi | System (auto) · Inventory Approve | B13; B14 |
| B12 | Warehouse Staff | Bước | W/H Stock Checking (view-only, tra cứu) | Web · W/H Stock Checking |  |
| B13 | Output | Dữ liệu | Slip đạt = APPROVED tồn kho & Request cập nhật |  | (kết thúc) |
| B14 | Output | Dữ liệu | Slip lỗi giữ nguyên trạng thái + danh sách Slip No lỗi |  | (kết thúc) |
| B15 | Warehouse Manager | Bắt đầu | Start |  | B16 |
| B16 | Warehouse Manager | Bước | Cancel (Slip đang APPROVED) | Web · Inventory Approve | B17 |
| B17 | Warehouse Manager | Điểm quyết định | Từng Slip: đạt điều kiện huỷ màn gốc? |  | B18 [Không]; B19 [Có] |
| B18 | Warehouse Manager | Bước | Slip giữ APPROVED · ghi lỗi | System (auto) · Inventory Approve | B20 |
| B19 | Warehouse Manager | Bước | Slip → CANCELLED đảo tồn kho + Request theo logic màn gốc | System (auto) · Inventory Approve | B20 |
| B20 | Warehouse Manager | Bước | Báo kết quả lô X thành công · Y lỗi | System (auto) · Inventory Approve | B21; B22 |
| B21 | Output | Dữ liệu | Slip đạt = CANCELLED tồn kho & Request đảo lại |  | (kết thúc) |
| B22 | Output | Dữ liệu | Slip lỗi giữ APPROVED + danh sách Slip No lỗi |  | (kết thúc) |

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

#### B08 · Từng Slip: đạt điều kiện màn gốc?

- Warehouse Manager
- Đến từ: B07
- Đi tới [Không]: B09 · Slip giữ nguyên trạng thái · ghi lỗi
- Đi tới [Có]: B10 · Slip → APPROVED cập nhật tồn kho + Request theo logic màn gốc

#### B17 · Từng Slip: đạt điều kiện huỷ màn gốc?

- Warehouse Manager
- Đến từ: B16
- Đi tới [Không]: B18 · Slip giữ APPROVED · ghi lỗi
- Đi tới [Có]: B19 · Slip → CANCELLED đảo tồn kho + Request theo logic màn gốc

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

#### Slip (mọi màn nghiệp vụ)

`SUBMITTED` → `APPROVED` → `CANCELLED`

Bước chuyển:

- `SUBMITTED` -- Approve — đạt điều kiện --> `APPROVED`
- `APPROVED` -- Cancel — đủ điều kiện & chưa có action sau --> `CANCELLED`
- `CANCELLED` -- Approve lại --> `APPROVED` (quay lại)

Ghi chú trên sơ đồ:

- Không đạt điều kiện màn gốc — Slip giữ nguyên (guard kỳ chốt §1.8 không áp ở màn này)

## Input

| # | Input | Loại | Đi vào bước |
| --- | --- | --- | --- |
| I-1 | Warehouse, Line, Transaction, Status | Master data | Search / Filter |
| I-2 | Slip SUBMITTED / APPROVED / CANCELLED từ mọi màn có Slip cần duyệt (Stock In, Return From Line, Other In, Stock Out, Return To Supplier, Other Out, Product Income, Goods Delivery, Goods Return, Stock Transfer, Stock Exchange) | Chứng từ màn nghiệp vụ | Search / Filter — danh sách Slip |

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

| Bước | Vai trò | Màn hình |
| --- | --- | --- |
| Search / Filter (Warehouse · Transaction · Status · Line · Slip No) | Warehouse Manager | Inventory Approve · Web |
| Double-click dòng → mở màn gốc của Slip | Warehouse Manager | Inventory Approve · Web |
| Chọn 1 hoặc nhiều Slip · Approve | Warehouse Manager | Inventory Approve · Web |
| Kiểm điều kiện từng Slip theo màn gốc · Slip → APPROVED · cập nhật tồn kho + Request · báo kết quả lô | System (auto) | Inventory Approve |
| W/H Stock Checking (tra cứu, tuỳ chọn) | Warehouse Staff | W/H Stock Checking · Web |
| Chọn Slip đang APPROVED · Cancel | Warehouse Manager | Inventory Approve · Web |
| Kiểm điều kiện huỷ từng Slip theo màn gốc · Slip → CANCELLED · đảo tồn kho + Request · báo kết quả lô | System (auto) | Inventory Approve |

## Output

| # | Output | Điều kiện sinh ra |
| --- | --- | --- |
| O-1 | Slip = `APPROVED`; tồn kho và Request liên kết cập nhật theo logic màn gốc | Slip đang `SUBMITTED` / `CANCELLED` và đạt điều kiện Approve của màn gốc |
| O-2 | Slip lỗi giữ nguyên trạng thái + danh sách Slip No lỗi (X thành công · Y lỗi) | Slip trong lô không đạt điều kiện của màn gốc — các Slip đạt vẫn được duyệt |
| O-3 | *Ngoại lệ:* Slip = `CANCELLED`; tồn kho và Request liên kết đảo lại theo logic màn gốc | Slip đang `APPROVED` và đạt điều kiện huỷ của màn gốc |
| O-4 | *Ngoại lệ:* Slip lỗi giữ `APPROVED` + danh sách Slip No lỗi | Slip trong lô không đạt điều kiện huỷ của màn gốc |
