# Logistic

# Hướng dẫn tạo Packing List

**Mục đích:** Chức năng Quản lý Packing List hỗ trợ bộ phận Kinh doanh lập chứng từ, theo dõi số lượng hàng hóa theo thùng và quản lý toàn bộ quy trình vận chuyển xuất khẩu — từ khởi tạo đến xuất kho.

**URL:** [Danh sách packing list](https://marketing.tms-s.vn/packing-list)   
**Hướng dẫn tạo Packing List:** [Video hướng dẫn](https://storages.tms-s.vn/f/8130567)

---

<a id="bkmrk--2"></a>

## 🗂️ Mục lục

- [I. **Danh sách Packing List** ](#bkmrk--5)  
     [1. Khối thống kê](#bkmrk--8)  
     [2. Tìm kiếm và lọc dữ liệu](#bkmrk--11)  
     [3. Danh sách các thẻ Packing List](#bkmrk--14)
- [II. **Chức năng tạo và chỉnh sửa Packing List**](#bkmrk--17)  
     [1. Truy cập chức năng](#bkmrk--19)  
     [2. Khai báo Thông tin chung](#bkmrk--22)  
     [3. Điền Tab "Hải quan" (Khai báo quốc tế)](#bkmrk--25)  
     [4. Khai báo Chi tiết hàng hóa (Thùng hàng)](#bkmrk--28)  
     [5. Báo giá &amp; Xác nhận tạo Ship](#bkmrk--31)  
     [Sơ đồ quy trình](#bkmrk--34)

---

<a id="bkmrk--5"></a>

## **I. Danh sách Packing List**

Trang danh sách Packing List chia làm 3 khu vực chính: Thống kê tổng quan, khu vực tìm kiếm &amp; lọc dữ liệu, danh sách các thẻ Packing List

---

<a id="bkmrk--8"></a>

## 1. Khối thống kê

Hiển thị các **chỉ số tổng hợp** dựa trên **toàn bộ dữ liệu Packing List** và **bộ lọc hiện hành**.

<table id="bkmrk-ch%E1%BB%89-s%E1%BB%91-m%C3%B4-t%E1%BA%A3-t%E1%BB%95ng-pk"><thead><tr><th>Chỉ số</th><th>Mô tả</th></tr></thead><tbody><tr><td>**Tổng PKL**</td><td>Tổng số Packing List trong danh sách</td></tr><tr><td>**Tổng thùng**</td><td>Tổng số thùng của tất cả Packing List</td></tr><tr><td>**Tổng SL**</td><td>Tổng số lượng sản phẩm</td></tr><tr><td>**Tổng G.W**</td><td>Tổng Gross Weight (kg)</td></tr></tbody></table>

> Các chỉ số trên là **giá trị cộng dồn** từ tất cả Packing List thỏa điều kiện tìm kiếm và lọc.

---

<a id="bkmrk--11"></a>

## 2. Tìm kiếm và lọc dữ liệu

### 2.1. Ô tìm kiếm

#### Cho phép tìm kiếm theo:

- Mã Packing List / Invoice
- Tên công ty, địa chỉ shipper
- Tên người nhận, địa chỉ, công ty người nhận
- Mã carton
- Mã / Tên đơn hàng
- Người tạo packing list

### 2.2. Bộ lọc trạng thái

#### Dạng dropdown, các giá trị bao gồm:

- Đã tạo ship
- Chưa tạo ship

### 2.3. Bộ lọc theo Shipper của chi nhánh:

#### Dạng dropdown, các giá trị bao gồm:

- Ms Huong (VN)
- ThienDuc (VN)

---

<a id="bkmrk--14"></a>

## 3. Danh sách các thẻ Packing List

Mỗi Packing List được hiển thị dưới dạng **card**, bao gồm các nhóm thông tin sau:

#### 3.1. Thông tin chung

- **Invoice no**
- **Mã Packing List**: Hiển thị chữ nhỏ hơn và dưới chân Invoice no
- **Trạng thái**: Nhãn hiển thị trực quan (Đã tạo ship/ Chưa tạo ship)
- **Tên công ty / Người gửi**

#### 3.2. Thông tin vận chuyển

- **Ngày gửi**
- **Đơn vị vận chuyển** (hiện tại chỉ có FedEx)
- **Quốc gia nhận hàng**
- **Số thùng**

#### 3.3. Thông tin số liệu

<table id="bkmrk-tr%C6%B0%E1%BB%9Dng-%C3%9D-ngh%C4%A9a-s%E1%BB%91-l%C6%B0"><thead><tr><th>Trường</th><th>Ý nghĩa</th></tr></thead><tbody><tr><td>**Số lượng**</td><td>Tổng số sản phẩm</td></tr><tr><td>**N.W (kg)**</td><td>Net Weight – trọng lượng tịnh</td></tr><tr><td>**G.W (kg)**</td><td>Gross Weight – trọng lượng cả bao bì</td></tr><tr><td>**CBM**</td><td>Thể tích hàng hóa (m³)</td></tr></tbody></table>

#### 3.4. Các hành động trên từng thẻ Packing List

<table id="bkmrk-icon-%2F-n%C3%BAt-ch%E1%BB%A9c-n%C4%83ng"><thead><tr><th>Icon / Nút</th><th>Chức năng</th><th>Điều kiện hiển thị</th></tr></thead><tbody><tr><td>👁 Xem</td><td>Xem chi tiết Packing List</td><td>Luôn hiển thị, các thông tin trên trang là read-only</td></tr><tr><td>✏️ Chỉnh sửa</td><td>Chỉnh sửa Packing List</td><td>Chỉ khi **Chưa tạo FedEx** và chưa xuất kho. Nếu book ship hoặc xuất kho thì nút này sẽ bị khóa.  
**Lưu ý**: chức năng chỉnh sửa chỉ dành cho người tạo Packing List đó</td></tr><tr><td>Excel chi tiết</td><td>Download excel chi tiết của packing list</td><td>Luôn hiển thị</td></tr><tr><td>PDF chi tiết</td><td>Download PDF chi tiết của packing list</td><td>Luôn hiển thị</td></tr></tbody></table>

---

<a id="bkmrk--17"></a>

## **II. Chức năng tạo và chỉnh sửa Packing List**

<a id="bkmrk--19"></a>

## 1. Truy cập chức năng

- **Tạo mới:** Tại màn hình danh sách **"Danh sách Packing List"**, nhấn vào nút **+ Tạo Packing List** ở góc trên bên phải để mở giao diện tạo mới.
- **Chỉnh sửa:** Nhấn vào nút **chỉnh sửa** trên từng Packing List để mở giao diện chỉnh sửa (nếu bạn là người tạo Packing List đó).
- **Xem chi tiết**: mọi người dùng đều có thể xem chi tiết.

---

<a id="bkmrk--22"></a>

## 2. Khai báo Thông tin chung

### 2.1 Thông tin cơ bản

- **Số Invoice** *(Bắt buộc)*: Nhập mã invoice của lô hàng.
- **Ngày gửi hàng** *(Bắt buộc)*: Hệ thống mặc định ngày hiện tại. Lưu ý: **không thể chọn ngày trong quá khứ**.
- **Phương thức vận chuyển** *(Bắt buộc khi báo giá)*.
- **Tracking Number**: Trường này sẽ **tự động sinh sau khi Book Shipment**. Bạn có thể nhập thủ công trước, nhưng khi book thành công hệ thống sẽ **cấp mã mới và ghi đè**.
- **Pickup Number** *(Không bắt buộc)*: Nhập nếu có.
- **Ghi chú** *(Không bắt buộc)*: Ghi chú nội bộ cho lô hàng.

### 2.2 Thông tin các bên liên quan

#### 👤 Người gửi (Shipper) — *Bắt buộc khi báo giá*

#### Chọn từ danh sách có sẵn. Sau khi chọn, hệ thống tự động điền:

- Quốc gia, Tên công ty
- Số điện thoại *(chuẩn quốc tế, ví dụ: `+84xxxxxxxxx`)*
- Địa chỉ, City, State/ Province, State/ Province Code
- Thông tin bổ sung *(nếu có)*: EORI, UID

> Khi **chọn từ danh sách**: các trường thông tin tự điền và **bị khóa**, không chỉnh sửa được trừ **sdt** là vẫn có thể chỉnh sửa.

#### 📦 Người nhận (Consignee) — *Bắt buộc khi báo giá*

Thao tác tương tự Người gửi — chọn từ danh sách với đầy đủ các trường thông tin như trên.

> Khi **chọn từ danh sách**: các trường thông tin tự điền và **không bị khóa**, có thể chỉnh sửa trực tiếp.   
>  Khi **tạo mới**: hệ thống mở form nhập liệu đầy đủ. (Tạo mới bằng cách nhập consignee mới vào ô và nhấn enter, sau đó hệ thống sẽ mở form cho chỉnh sửa).

#### 🔔 Đơn vị thông báo (Notify Party)

Thao tác tương tự người nhận (có thể chọn có sẵn hoặc tạo mới, và cho chỉnh sửa thông tin bên dưới khi đã chọn hoặc tạo mới người nhận xong), hoặc sử dụng tùy chọn nhanh:

**🔁 Bật công tắc "Dùng thông tin người nhận"** → Hệ thống tự sao chép toàn bộ thông tin từ mục Người nhận, không cần nhập lại.

- Khi công tắc **bật**: các trường bên dưới bị **khóa**, hiển thị dữ liệu từ Người nhận.
- Khi công tắc **tắt**: chọn từ danh sách hoặc tạo mới độc lập như bình thường.

---

<a id="bkmrk--25"></a>

## 3. Điền Tab "Hải quan" (Khai báo quốc tế)

- Chọn bên thanh toán thuế — có 3 option: **Sender** | **Recipient** | **Third Party**.
- Nếu chọn **Third Party**: phải điền thêm **Account Number** (chỉ được nhập số - bắt buộc) và **Mã số thuế** (không bắt buộc).
- **Nguyên tắc:** Tổng số lượng hàng hóa khai báo trong tab Hải quan phải bằng chính xác tổng số lượng hàng hóa ở tab Hàng hóa.

### Thông tin cần nhập bắt buộc khi báo giá:

<table id="bkmrk-tr%C6%B0%E1%BB%9Dng-b%E1%BA%AFt-bu%E1%BB%99c-m%C3%B4-t"><thead><tr><th>Trường</th><th>Bắt buộc</th></tr></thead><tbody><tr><td>Mô tả hàng hóa</td><td>✅</td></tr><tr><td>HS Code</td><td>❌</td></tr><tr><td>Nước sản xuất</td><td>✅</td></tr><tr><td>Trọng lượng (KG/LB,...)</td><td>✅</td></tr><tr><td>Số lượng (PCS,...)</td><td>✅</td></tr><tr><td>Giá trị hải quan (VND, USD,...)</td><td>✅</td></tr></tbody></table>

---

<a id="bkmrk--28"></a>

## 4. Khai báo Chi tiết hàng hóa (Thùng hàng - Chỉ bắt buộc khi báo giá hoặc có chỉnh sửa).

- Khai báo dãy thùng liên tiếp tại cột **FROM** và **TO**. Hệ thống sẽ tự động điều chỉnh số thứ tự thùng nếu bạn thêm thùng mới và có thể sửa **To** để tạo nhiều thùng cùng 1 đơn hàng.
- Điền các thông tin bắt buộc khi có hàng hóa: **Chọn đơn hàng**, **Số lượng đơn hàng mỗi thùng (Per Ctn)**, **N.W** (Trọng lượng tịnh 1 thùng), **G.W** (Trọng lượng cả bì 1 thùng) và **Kích thước thùng (W, L, H)**. Tất cả các trường số phải lớn hơn 0.
- Các thông tin không bắt buộc: **Mô tả hàng hóa**, **SKU**.
- **Tính năng đặc biệt:** Bạn có thể chọn **"Packing list cho khách hàng"**. Khi chọn, các đơn hàng bên trong sẽ tự động đổ vào thùng, gộp số lượng lại nếu trùng lặp trong 1 Packing List và bị khóa không cho phép chỉnh sửa (bạn có thể vào chức năng **Packing List cho khách hàng** để chỉnh sửa nếu chưa xuất kho).

> **⚠️ Lưu ý:**
> 
> - Đơn hàng được chọn là đơn hàng đã duyệt hoặc hoàn tất.
> - Nếu **FROM = TO**: được thêm nhiều đơn hàng và Packing List cho khách hàng vào thùng.
> - Nếu **FROM ≠ TO**: chỉ được thêm 1 đơn hàng duy nhất vào thùng.
> - Nếu trong thùng đang có FROM = TO và có nhiều đơn hàng.
> - Khi cập nhật lại TO ≠ FROM sẽ có hiện cảnh báo, nếu xác nhận đổi lại TO ≠ FROM sẽ xóa hết các đơn hàng đang có trong thùng trừ đơn hàng đầu tiên
> - Không được tạo quá 1000 thùng trên 1 Packing List.
> - Số lượng đơn hàng: chỉ được điền số nguyên dương.
> - 2 field N.W và G.W sẽ tự động tính theo công thức và có thể chỉnh sửa được.
> - Hệ thống sẽ tự động tính toán và **khóa** các trường: Tổng số lượng (Total), Tổng trọng lượng, và Thể tích (CBM).

> **🧮 Công thức tính:**
> 
> ```
> Tổng SL đơn hàng trong dãy thùng = Tổng số lượng đơn hàng trong 1 thùng * (To - From + 1)
> N.W  = Tổng SL đơn hàng trong dãy thùng × 0.08
> G.W  = N.W + 2
> CBM  = (W × L × H) / 1,000,000 × (TO - FROM + 1)
> 
> ```

---

<a id="bkmrk--31"></a>

## 5. Báo giá &amp; Xác nhận tạo Ship

- Sau khi lưu, tại danh sách PKL (trạng thái **"Chưa tạo ship"**), nhấn vào chi tiết Packing List, nếu tài khoản có quyền sẽ hiện nút báo giá, nhấn nút **Báo giá** để hệ thống lấy bảng giá từ đơn vị vận chuyển (VD: FedEx).
- Lựa chọn gói dịch vụ phù hợp và bấm **Xác nhận**. Lúc này PKL sẽ chuyển sang trạng thái **Đã tạo ship**, phát sinh vận đơn và toàn bộ dữ liệu của PKL sẽ bị khóa, không cho phép chỉnh sửa nữa.   
    **Chi tiết quá trình thực hiện:** [https://book.app.tms-s.vn/books/logistic/page/huong-dan-chuc-nang-booking-shipment-fedex](https://book.app.tms-s.vn/books/logistic/page/huong-dan-chuc-nang-booking-shipment-fedex)

---

<a id="bkmrk--34"></a>

## Sơ đồ quy trình

### Quy trình Packing List — Tạo mới &amp; Cập nhật

[![Quy trình tạo mới & cập nhật](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/scaled-1680-/image-1774248238266.png)](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/image-1774248238266.png)

### Quy trình Packing List — Xử lý đơn hàng bị khóa

[![Quy trình xử lý đơn hàng bị khóa](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/scaled-1680-/image-1774248400593.png)](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/image-1774248400593.png)

# Hướng dẫn chức năng Booking Shipment (FEDEX)

**1. Tổng quan**

Chức năng Booking Shipment cho phép người dùng thực hiện báo giá vận chuyển quốc tế và xác nhận đặt đơn hàng vận chuyển (booking) thông qua đơn vị vận chuyển (hiện tại hỗ trợ **FedEx**),. Kết quả của quá trình này là hệ thống sẽ sinh ra mã vận đơn (AWB/Tracking Number) và khóa dữ liệu Packing List để đảm bảo tính toàn vẹn.

**2. Điều kiện thực hiện**

Để có thể thực hiện booking shipment, Packing List (PKL) cần thỏa mãn các điều kiện sau:

- **Trạng thái:** PKL phải ở trạng thái **Chưa tạo ship**.
- **Thông tin hàng hóa:** Đã nhập đầy đủ chi tiết đóng gói (số thùng, số lượng sản phẩm, trọng lượng N.W, G.W và kích thước).
- **Thông tin hải quan:** Nếu gửi hàng đi nước ngoài (Quốc gia Shipper và Consignee khác nhau), bắt buộc phải nhập đầy đủ danh mục hàng hóa và tổng số lượng khai báo hải quan phải khớp với tổng số lượng ở tab hàng hóa.
- **Quyền hạn:** Người dùng phải có quyền **Chỉnh sửa** mới có thể thực hiện báo giá và booking.

**3. Quy trình thực hiện**

**Bước 1: Truy cập danh sách Packing List**

Người dùng truy cập vào trang **Quản lý Packing List** hoặc **Packing List cho khách hàng**.

- Sử dụng bộ lọc trạng thái "Chưa tạo ship" để tìm các lô hàng cần xử lý.

**Bước 2: Mở Modal Báo giá**

- Vào chi tiết PKL và nhấn nút **"Báo giá"**.

**Bước 3: Lựa chọn dịch vụ vận chuyển**

Hệ thống hiển thị **Modal Dịch vụ vận chuyển** với các thông tin sau:

- **Ngày dự kiến gửi hàng:** Người dùng chủ động lựa chọn ngày gửi (không được chọn ngày trong quá khứ).
- **Danh sách tùy chọn:** Hệ thống sẽ gọi API của FedEx để hiển thị các gói dịch vụ (ví dụ: *FedEx International First, Priority, Economy...*) kèm theo phí vận chuyển và thời gian giao hàng dự kiến tương ứng.
- **Lưu ý:** Chỉ được chọn duy nhất một tùy chọn dịch vụ trong danh sách cung cấp.

**Bước 4: Xác nhận Booking (Confirm Ship)**

- Sau khi chọn dịch vụ, nhấn nút **"Xác nhận lựa chọn"** hoặc **"Confirm"**.
- Hệ thống sẽ tiến hành gửi yêu cầu booking sang FedEx.

**4. Kết quả sau khi Booking thành công**

Sau khi xác nhận thành công, hệ thống sẽ tự động thực hiện các hành động sau:

1. **Cập nhật trạng thái:** Packing List chuyển sang trạng thái **Đã tạo ship**.
2. **Sinh mã vận đơn:** Tự động cập nhật mã **Tracking Number / AWB** vào thông tin PKL.
3. **Khóa dữ liệu:** Tất cả hành động chỉnh sửa thông tin hàng hóa, hải quan và các nút "Báo giá", "Chỉnh sửa" sẽ bị ẩn hoặc khóa lại để không cho phép thay đổi thông tin sau khi đã có vận đơn.
4. **Hành động tiếp theo:** Người dùng có thể thực hiện in nhãn dán hoặc tải file báo cáo chi tiết.

**5. Các quy tắc nghiệp vụ cần lưu ý**

- **Sửa thông tin:** Chỉ được chỉnh sửa PKL khi chưa được book ship. Những thông tin đã được map từ hệ thống (như thông tin khách hàng) sẽ không được phép sửa đổi.
- **Chi phí:** Mức giá hiển thị là dự kiến dựa trên kích thước và trọng lượng khai báo. Mức phí cuối cùng sẽ dựa trên số liệu đo lường thực tế của FedEx khi lấy hàng.
- **Giới hạn:** Mỗi Packing List chỉ được thực hiện duy nhất **1 booking** thành công.
- **Hủy bỏ:** Nếu người dùng nhấn "Hủy" trong modal báo giá, PKL vẫn giữ nguyên trạng thái "Chưa tạo ship" và có thể báo giá lại sau.
- **Hủy báo giá:** Sau khi đã báo giá nếu có thay đổi có thể nhấn hủy và tiến hành báo giá lại.

# Hướng dẫn tạo Packing List cho khách hàng

**Mục đích:** Chức năng Quản lý Packing List cho khách hàng được thiết kế để hỗ trợ bộ phận logistics, xuất nhập khẩu và kho vận trong việc quản lý vòng đời của một lô hàng - từ tạo packing list, nhập kho, phân loại đến xuất kho giao hàng quốc tế đến tay người nhận cuối.

**URL:** [Danh sách Packing List cho khách hàng](https://logistic.tms-s.vn/customer)   
**Hướng dẫn tạo Packing List cho khách hàng:** [Video hướng dẫn](https://storages.tms-s.vn/f/8130569)

---

<a id="bkmrk--2"></a>

## 🗂️ Mục lục

- [I. **Danh sách Packing List cho khách hàng** ](#bkmrk--5)  
     [1. Tìm kiếm và lọc dữ liệu](#bkmrk--8)  
     [2. Danh sách các thẻ Packing List cho khách hàng](#bkmrk--11)
- [II. **Chức năng tạo và chỉnh sửa Packing List cho khách hàng**](#bkmrk--14)  
     [1. Truy cập chức năng](#bkmrk--16)  
     [2. Khai báo Thông tin chung](#bkmrk--19)  
     [3. Điền Tab "Hàng hóa"](#bkmrk--22)  
     [4. Điền Tab "Hải quan" (Khai báo quốc tế)](#bkmrk--25)  
     [5. Báo giá &amp; Xác nhận Book Ship](#bkmrk--28)  
     [Các trường dữ liệu bị khóa (Disable)](#bkmrk--31)  
     [Sơ đồ quy trình](#bkmrk--34)

---

<a id="bkmrk--5"></a>

## **I. Danh sách Packing List cho khách hàng**

Trang danh sách Packing List cho khách hàng chia làm 2 khu vực chính: Khu vực tìm kiếm &amp; Lọc dữ liệu, danh sách các thẻ Packing List

---

<a id="bkmrk--8"></a>

## 1. Tìm kiếm và lọc dữ liệu

#### Ô tìm kiếm, Cho phép tìm kiếm theo:

- Mã Packing List / Invoice
- Tên công ty, địa chỉ shipper
- Tên người nhận, công ty, địa chỉ người nhận
- Mã / Tên đơn hàng
- Người tạo packing list
- Khách hàng (cả tên và địa chỉ)

#### Bộ lọc trạng thái: Dạng dropdown, các giá trị có thể bao gồm:

- Đã đặt ship
- Chưa đặt ship

#### Lọc theo shipper (người gửi): Dạng dropdown, các giá trị bao gồm:

- Ms Huong (VN)
- ThienDuc (VN)

---

<a id="bkmrk--11"></a>

## 2. Danh sách các thẻ Packing List cho khách hàng

#### Thông tin hiển thị trên mỗi dòng Packing List cho khách hàng

- Số invoice
- Mã Packing List (phía dưới số invoice, có cỡ chữ nhỏ hơn)
- Khách hàng (bao gồm Tên và địa chỉ)
- Tổng số thùng
- Người gửi (shipper theo chi nhánh)
- Ngày gửi
- Mã tracking FedEx (nếu đã book ship mới có mã này, nếu chưa có mã thì để trống)
- Đơn vị vận chuyển (nếu chưa chọn thì để trống)
- Tình trạng (Chưa tạo ship, Đã tạo ship)
- Thao tác (Nếu đơn hàng đã có booking thì sẽ có menu huỷ booking)

---

<a id="bkmrk--14"></a>

## **II. Chức năng tạo và chỉnh sửa Packing List cho khách hàng**

<a id="bkmrk--16"></a>

## 1. Truy cập chức năng

- Tạo mới: Tại màn hình danh sách **"Packing List cho Khách hàng"**, nhấn vào nút **+ Tạo Packing List** ở góc trên bên phải để mở giao diện tạo mới.
- Chỉnh sửa: Nhấn vào **Invoice no** hoặc **mã packing list** trên từng Packing List để mở giao diện chỉnh sửa (nếu bạn là người tạo Packing List đó).
- Xem chi tiết: Nhấn vào **Invoice no** hoặc **mã packing list** trên từng Packing List để mở giao diện xem chi tiết (nếu bạn không là người tạo Packing List đó hoặc Packing List đã xuất kho hoặc đã book ship).

---

<a id="bkmrk--19"></a>

## 2. Khai báo Thông tin chung

### 2.1 Thông tin cơ bản

- **Số Invoice** *(Bắt buộc)*: Nhập mã invoice của lô hàng.
- **Ngày gửi hàng** *(Bắt buộc)*: Hệ thống mặc định ngày hiện tại. Lưu ý: **không thể chọn ngày trong quá khứ**. Khi chỉnh sửa **ngày gửi hàng** sẽ có thay đổi ngày gửi tại giao diện map nếu **Packing List cho khách hàng** này được tạo từ đó.
- **Phương thức vận chuyển** *(Bắt buộc khi báo giá)*.
- **Tracking Number**: Trường này sẽ **tự động sinh sau khi Book Shipment**. Bạn có thể nhập thủ công trước, nhưng khi book thành công hệ thống sẽ **cấp mã mới và ghi đè**.
- **Pickup Number** *(Không bắt buộc)*: Nhập nếu có.
- **Ghi chú** *(Không bắt buộc)*: Ghi chú nội bộ cho lô hàng.

### 2.2 Thông tin các bên liên quan

#### 👤 Người gửi (Shipper) — *Bắt buộc khi báo giá*

#### Chọn từ danh sách có sẵn. Sau khi chọn, hệ thống tự động điền:

- Quốc gia, Tên công ty
- Số điện thoại *(chuẩn quốc tế, ví dụ: `+84xxxxxxxxx`)*
- Địa chỉ, City, State/ Province, State/ Province Code
- Thông tin bổ sung *(nếu có)*: EORI, UID

> Khi **chọn từ danh sách**: các trường thông tin tự điền và **bị khóa**, không chỉnh sửa được trừ **số điện thoại** là có thể chỉnh sửa được.   
>  Nếu **Packing list cho khách hàng** này được tạo bằng map thông tin thì khi sửa **Shipper** trong đây (chọn shipper khác) sẽ cập nhật ở giao diện map thông tin đó.

#### 📦 Người nhận (Consignee) — *Bắt buộc khi báo giá*

##### Thao tác tương tự Người gửi — chọn từ danh sách với đầy đủ các trường thông tin như trên.

> Khi **chọn từ danh sách**: các trường thông tin tự điền và **không bị khóa** vẫn cho chỉnh sửa.   
>  Khi **tạo mới**: hệ thống mở form nhập liệu đầy đủ. (Tạo mới bằng cách nhập consignee mới vào ô và nhấn enter, sau đó hệ thống sẽ mở form cho chỉnh sửa).

##### Đối với Packing List khách hàng được tạo từ việc **map đơn hàng với khách hàng**

- Không cho chỉnh sửa **Consignee (Recipient)**, **Phone**, **Address** trực tiếp tại đây. Nếu chỉnh sửa phải quay lại giao diện **Map thông tin khách hàng** để sửa trong thông tin khách hàng.

#### 🔔 Đơn vị thông báo (Notify Party)

Thao tác tương tự consignee (có thể chọn có sẵn hoặc tạo mới, và cho chỉnh sửa thông tin bên dưới khi đã chọn hoặc tạo mới người nhận xong), hoặc sử dụng tùy chọn nhanh:

**🔁 Bật công tắc "Dùng thông tin người nhận"** → Hệ thống tự sao chép toàn bộ thông tin từ mục Người nhận, không cần nhập lại.

- Khi công tắc **bật**: các trường bên dưới bị **khóa**, hiển thị dữ liệu từ Người nhận.
- Khi công tắc **tắt**: chọn từ danh sách hoặc tạo mới độc lập như bình thường.

---

<a id="bkmrk--22"></a>

## 3. Điền Tab "Hàng hóa" (Chỉ bắt buộc khi báo giá hoặc có chỉnh sửa)

- Nhấn nút **+ Thêm thùng** để tạo thùng mới.
- Trong mỗi thùng, nhấn **+ Thêm đơn hàng** rồi chọn đơn hàng tương ứng.
- **Bắt buộc khai báo:** Số lượng, Trọng lượng tịnh (N.W), Trọng lượng cả bì (G.W) và Kích thước thùng (Chiều Dài / Rộng / Cao). Tất cả các trường số phải lớn hơn 0.
- **Các thông tin không bắt buộc:** Mô tả hàng hóa, SKU
- Hệ thống sẽ tự động tính toán các trường: Tổng số lượng (Total), Tổng trọng lượng và Thể tích (CBM).

> **⚠️ Lưu ý:**
> 
> - Để đảm bảo tính duy nhất, trong cùng một thùng không được chọn nhiều đơn hàng trùng nhau.
> - Đơn hàng được chọn là đơn hàng đã duyệt hoặc hoàn tất.
> - Đối với **Packing List cho khách hàng** được tạo bằng cách map thông tin thì khi chỉnh sửa **số lượng** đơn hàng được map sẽ tự cập nhật số lượng bên **giao diện map thông tin**.
> - Nếu **FROM = TO**: được thêm nhiều đơn hàng.
> - Nếu **FROM ≠ TO**: chỉ được thêm 1 đơn hàng duy nhất vào thùng.
> - Không được tạo quá 1000 thùng trên 1 Packing List.
> - 2 field **N.W** và **G.W** sẽ tự động tính theo công thức và có thể chỉnh sửa được.
> - W, H, L: giới hạn nhập tối đa 4 số nguyên dương và 2 số thập phân.

> **🧮 Công thức tính:**
> 
> ```
> Tổng SL đơn hàng trong dãy thùng = Tổng số lượng đơn hàng trong 1 thùng * (To - From + 1)
> N.W  = Tổng SL đơn hàng trong dãy thùng × 0.08
> G.W  = N.W + 2
> CBM  = (W × L × H) / 1,000,000 × (TO - FROM + 1)
> 
> ```

---

<a id="bkmrk--25"></a>

## 4. Điền Tab "Hải quan" (Khai báo quốc tế)

- Chọn bên thanh toán thuế — có 3 option: **Sender | Recipient | Third Party**.
- Nếu chọn **Third Party**: phải điền thêm **Account Number** (chỉ được nhập số - bắt buộc) và **Mã số thuế** (không bắt buộc).
- **Điều kiện bắt buộc:** Nếu Quốc gia của Người gửi khác với Quốc gia của Người nhận, bạn **BẮT BUỘC** phải điền tab này. Nếu cùng quốc gia, có thể bỏ qua.
- **Nguyên tắc:** Tổng số lượng hàng hóa khai báo trong tab Hải quan phải bằng chính xác tổng số lượng hàng hóa ở tab Hàng hóa.

### Thông tin cần nhập bắt buộc khi báo giá:

<table id="bkmrk-tr%C6%B0%E1%BB%9Dng-b%E1%BA%AFt-bu%E1%BB%99c-m%C3%B4-t"><thead><tr><th>Trường</th><th>Bắt buộc</th></tr></thead><tbody><tr><td>Mô tả hàng hóa</td><td>✅</td></tr><tr><td>Nước sản xuất</td><td>✅</td></tr><tr><td>Trọng lượng (KG/LB,...)</td><td>✅</td></tr><tr><td>Số lượng</td><td>✅</td></tr><tr><td>Giá trị hải quan (VND, USD,...)</td><td>✅</td></tr><tr><td>HS Code</td><td>❌</td></tr></tbody></table>

---

<a id="bkmrk--28"></a>

## 5. Báo giá &amp; Xác nhận Book Ship

- Sau khi nhập đầy đủ và hợp lệ cả 3 tab trên, nhấn nút **Báo giá**.
- Hệ thống sẽ kết nối và trả về các gói cước vận chuyển (ví dụ: FedEx International Economy, FedEx Priority...).
- Lựa chọn gói cước phù hợp và bấm **Xác nhận lựa chọn**.
- **Kết quả:** Hệ thống sẽ tự động booking, sinh ra mã vận đơn (Tracking Code), cập nhật trạng thái thành **"Đã tạo ship"** và **khóa toàn bộ dữ liệu của Packing List cho khách hàng này, không cho phép chỉnh sửa bất kỳ thông tin nào nữa.**  
    Chi tiết quá trình thực hiện: [Hướng dẫn báo giá](https://book.app.tms-s.vn/books/logistic/page/huong-dan-chuc-nang-booking-shipment-fedex)

---

<a id="bkmrk--31"></a>

## Các trường dữ liệu bị khóa (Disable)

Để bảo vệ tính toàn vẹn của dữ liệu, hệ thống tự động khóa các trường sau:

**🔒 Khóa thông tin map (Luồng tự động)**Các thông tin đã được map tự động từ hệ thống (bao gồm thông tin Người nhận Consignee, Người gửi Shipper, thông tin Đơn hàng và Số lượng đơn hàng) tuyệt đối không được phép chỉnh sửa. Nếu cố tình xóa thông tin map ở phân hệ gốc, hệ thống sẽ cảnh báo xóa luôn Packing List này.

**🔒 Khóa trường tính toán tự động**Các trường `Tổng SL` (Total Quantity), `Tổng N.W`, `Tổng G.W` và `CBM` bị khóa vì hệ thống tự động tính toán dựa trên số liệu đã nhập.

**🔒 Khóa toàn bộ Packing List cho khách hàng**Khi đã xuất kho hoặc ngay sau khi nhấn "Báo giá", chọn gói cước và xác nhận book ship thành công với FedEx (hệ thống sinh mã Tracking), **toàn bộ dữ liệu của Packing List cho khách hàng sẽ bị khóa cứng**, không cho phép chỉnh sửa bất kỳ thông tin nào nữa.

**🔒 Khóa chỉnh sửa thông tin đơn hàng**Thông tin đơn hàng sẽ được khóa nếu đơn hàng đó đã được nhập kho hoặc được phân loại trong packing list cho khách hàng này.

---

<a id="bkmrk--34"></a>

## Sơ đồ quy trình

### Quy trình Packing List — Tạo mới &amp; Cập nhật

[![image-1774248238266.png](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/scaled-1680-/image-1774248238266.png)](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/image-1774248238266.png)

### Quy trình Packing List — Xử lý đơn hàng bị khóa

[![image-1774248400593.png](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/scaled-1680-/image-1774248400593.png)](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/image-1774248400593.png)

# Hướng dẫn tạo Packing List cho khách hàng bằng chức năng map thông tin khách hàng vào đơn hàng

**Mô tả:** Tài liệu mô tả toàn bộ luồng nghiệp vụ của chức năng Packing List cho khách hàng — từ trang danh sách, liên kết thông tin khách hàng với đơn hàng, tạo và chỉnh sửa Packing List, đến book ship.   
 **Hướng dẫn:** [Video hướng dẫn](https://storages.tms-s.vn/f/8130568)  
 **Các đơn hàng có thể map với khách hàng:** Đơn hàng múi, đơn hàng SA, đơn hàng khách hàng.   
 **URL Packing List cho khách hàng:** [Danh sách Packing List cho khách hàng](https://logistic.tms-s.vn/customer)

---

## Mục lục

- [I.Tiền đề — Liên kết thông tin khách hàng với đơn hàng](#bkmrk--3)  
     [1. Điều kiện truy cập](#bkmrk--5)  
     [2. Tạo khách hàng](#bkmrk--14)  
     [3. Luồng chọn khách hàng và người nhận](#bkmrk--17)  
     [4. Nhập thông tin giao hàng](#bkmrk--20)  
     [5. Lưu liên kết](#bkmrk--23)
- [II. Tạo và chỉnh sửa Packing List](#bkmrk--26)

---

<a id="bkmrk--3"></a>

## I. Tiền đề — Liên kết thông tin khách hàng với đơn hàng

Trước khi tạo Packing List cho khách hàng, thông tin người nhận (Consignee) và đơn hàng cần được liên kết thông qua chức năng **"Thông tin khách hàng"** trên danh sách đơn hàng. Dữ liệu này sẽ được map tự động vào Packing List cho khách hàng và **không thể chỉnh sửa thủ công**.

<a id="bkmrk--5"></a>

### 1. Điều kiện truy cập

- Áp dụng cho các loại đơn hàng đã duyệt: **Múi / SA / Đơn hàng khách hàng**
- Truy cập: Menu thao tác của từng đơn hàng → chọn **"Thông tin khách hàng"**

---

<a id="bkmrk--8"></a>

### 2. Tạo khách hàng

Trong modal **Danh sách khách hàng**, nhấn nút **Thêm khách hàng** để mở form tạo mới. Điền **Tên khách hàng** (bắt buộc, tối đa 255 ký tự), sau đó thêm ít nhất một người nhận bằng nút **Thêm người nhận**.

Mỗi người nhận gồm các trường bắt buộc:

<table id="bkmrk-tr%C6%B0%E1%BB%9Dng-r%C3%A0ng-bu%E1%BB%99c-t%C3%AAn"><thead><tr><th>Trường</th><th>Ràng buộc</th></tr></thead><tbody><tr><td>Tên người nhận</td><td>Tối đa 255 ký tự; nếu chỉ có 1 người nhận, hệ thống tự đề xuất theo tên khách hàng</td></tr><tr><td>Địa chỉ giao hàng</td><td>Duy nhất trong cùng 1 khách hàng, tối đa 255 ký tự</td></tr><tr><td>Số điện thoại</td><td>Đúng định dạng (cho phép dấu +), tối đa 20 ký tự</td></tr><tr><td>Email</td><td>Đúng định dạng, tối đa 255 ký tự</td></tr></tbody></table>

Nhấn **Lưu** để hoàn tất — khách hàng mới sẽ xuất hiện ngay trong danh sách. Nhấn **Hủy** để thoát mà không lưu.

**Lưu ý**: Trong cùng **một khách hàng** có thể thêm nhiều người nhận, nhưng các người nhận **không được trùng địa chỉ**. Đối với trường hợp thêm khách hàng mới, đảm bảo **Họ và tên** cũng như **địa chỉ** của người nhận trong khách hàng đó **không trùng với bất kì người nhận** nào.

---

<a id="bkmrk--11"></a>

### 2.1 Điều kiện chỉnh sửa thông tin khách hàng:

Mỗi người nhận trong nhóm khách hàng chỉ được phép chỉnh sửa khi khách hàng đó không nằm trong bất kì Packing List nào đã được đặt hàng (FedEx)/ đã được Nhập kho/ Xuất kho cho Packing List.

---

<a id="bkmrk--14"></a>

### 2.2 Điều kiện xóa thông tin khách hàng:

Mỗi người nhận trong nhóm khách hàng chỉ được phép xóa khi khách hàng đó không nằm trong bất kì Packing List nào đã được đặt hàng (FedEx)/ đã được Nhập kho/ Xuất kho cho Packing List.

Đối với việc xóa toàn bộ nhóm khách hàng thì chỉ được phép xóa cả nhóm khi không có bất kì người nhận nào nằm trong Packing List đã được đặt hàng (FedEx)/ đã được Nhập kho/ Xuất kho cho Packing List

> **Lưu ý**: Khi xóa người nhận trong nhóm khách hàng, toàn bộ những Danh sách liên kết giữa đơn hàng với người nhận đó sẽ được xóa, đồng thời các Packing List được tạo ra từ các liên kết này cũng được xóa đi trên hệ thống.

---

<a id="bkmrk--17"></a>

### 3. Luồng chọn khách hàng và người nhận

Hộp thoại **Danh sách khách hàng** cho phép:

- Tìm kiếm khách hàng theo tên/ địa chỉ/ email/ số điện thoại
- Tạo khách hàng mới với nhiều người nhận
- Chọn khách hàng hoặc người nhận cụ thể

**Logic lựa chọn:**

<table id="bkmrk-c%C3%A1ch-ch%E1%BB%8Dn-k%E1%BA%BFt-qu%E1%BA%A3-hi"><thead><tr><th>Cách chọn</th><th>Kết quả hiển thị trong hộp thoại liên kết</th></tr></thead><tbody><tr><td>Chọn toàn bộ khách hàng</td><td>Nhiều dòng — mỗi dòng tương ứng 1 người nhận trong nhóm</td></tr><tr><td>Chọn người nhận cụ thể</td><td>1 dòng duy nhất của người nhận đó</td></tr></tbody></table>

> Có thể chọn nhiều người nhận từ nhiều nhóm khách hàng khác nhau.

**Ràng buộc khi tạo/ chỉnh sửa khách hàng:**

<table id="bkmrk-tr%C6%B0%E1%BB%9Dng-b%E1%BA%AFt-bu%E1%BB%99c-r%C3%A0ng"><thead><tr><th>Trường</th><th>Bắt buộc</th><th>Ràng buộc</th></tr></thead><tbody><tr><td>Tên khách hàng</td><td>✅</td><td>Duy nhất trong toàn bộ dữ liệu khách hàng, tối đa 255 ký tự</td></tr><tr><td>Tên người nhận</td><td>✅</td><td>Tối đa 255 ký tự; nếu chỉ có 1 người nhận, hệ thống đề xuất theo tên khách hàng</td></tr><tr><td>Địa chỉ giao hàng</td><td>✅</td><td>Duy nhất trong cùng 1 khách hàng, tối đa 255 ký tự</td></tr><tr><td>Số điện thoại</td><td>✅</td><td>Đúng định dạng (cho phép dấu +), tối đa 20 ký tự</td></tr><tr><td>Email</td><td>✅</td><td>Đúng định dạng, tối đa 255 ký tự</td></tr></tbody></table>

---

<a id="bkmrk--20"></a>

### 4. Nhập thông tin giao hàng

Sau khi xác nhận chọn từ modal Danh sách khách hàng, mỗi thẻ người nhận cần điền:

<table id="bkmrk-tr%C6%B0%E1%BB%9Dng-lo%E1%BA%A1i-b%E1%BA%AFt-bu%E1%BB%99c"><thead><tr><th>Trường</th><th>Loại</th><th>Bắt buộc</th><th>Ràng buộc</th></tr></thead><tbody><tr><td>Người giao hàng</td><td>Select</td><td>✅</td><td>Không được để trống</td></tr><tr><td>Số lượng giao hàng</td><td>Nhập tay</td><td>✅</td><td>Số nguyên dương &gt; 0, tối đa 12 chữ số</td></tr><tr><td>Ngày gửi hàng</td><td>Chọn ngày</td><td>✅</td><td>Không được chọn ngày quá khứ</td></tr></tbody></table>

---

<a id="bkmrk--23"></a>

### 5. Lưu liên kết

- Nhấn **Lưu** → hệ thống kiểm tra validation và lưu dữ liệu liên kết
- Dữ liệu liên kết có thể **xem lại hoặc cập nhật bất kỳ lúc nào** khi mở lại hộp thoại
- Dữ liệu này là **nền tảng để tạo Packing List cho khách hàng**

#### Kết quả sau khi lưu:

- Hệ thống tự động tạo **Packing List cho khách hàng** với các dữ liệu đang có: thông tin người gửi (Shipper), thông tin người nhận (Consignee), tab Hàng hóa sẽ có các đơn hàng được map và số lượng tương ứng.
- Điều kiện để các đơn hàng gộp chung vào 1 Packing List cho khách hàng: **cùng khách hàng**,**cùng địa chỉ**, **cùng ngày nhận**, **cùng nơi ship** và **cùng người tạo liên kết** — mỗi đơn hàng sẽ nằm trong một thùng riêng lẻ.

#### Khi xóa liên kết khách hàng khỏi đơn hàng:

<table id="bkmrk-tr%C6%B0%E1%BB%9Dng-h%E1%BB%A3p-h%C3%A0nh-vi-h"><thead><tr><th>Trường hợp</th><th>Hành vi hệ thống</th></tr></thead><tbody><tr><td>Chưa từng bookship</td><td>Hiển thị hộp thoại xác nhận, cảnh báo thông tin khách hàng sẽ bị xóa khỏi Danh sách người nhận của tất cả đơn hàng liên quan</td></tr><tr><td>Đã từng bookship</td><td>Không cho phép xóa</td></tr><tr><td>Xác nhận xóa</td><td>Nếu trong Packing List(được tạo từ người nhận đang xóa) có nhiều hơn 1 thùng, thì sau khi xác nhận xóa sẽ chỉ xóa đi thùng tương ứng với đơn hàng được map. Ngược lại nếu Packing List chỉ có 1 thùng thì Packing List sẽ bị xóa hoàn toàn.</td></tr></tbody></table>

---

<a id="bkmrk--26"></a>

## III. Tạo và chỉnh sửa Packing List cho khách hàng

Tham khảo tài liệu: [Hướng dẫn tạo Packing List cho khách hàng](https://book.app.tms-s.vn/books/logistic/page/huong-dan-tao-packing-list-cho-khach-hang)

# Xuất/Nhập kho TTD



# Hướng dẫn tồn kho đơn hàng

**Mục đích:** Xem tổng quan số liệu, thông tin tồn kho, lịch sử xuất/nhập, phân loại của đơn hàng trong kho.

**URL:** [Tồn kho thành phẩm](https://warehouse.tms-s.vn/inventory)

---

### 🗂️ Mục lục

[1. **Tìm kiếm và thông tin mỗi đơn hàng**](#muc-1)
  <br> &nbsp;&nbsp;&nbsp;[1.1 Tìm kiếm](#list-1-1)
  <br> &nbsp;&nbsp;&nbsp;[1.2 Thông tin mỗi thẻ đơn hàng](#list-1-2)<br>
[2. **Xem chi tiết đơn hàng**](#muc-2)<br>
[3. **Lịch sử**](#muc-3)
<br> &nbsp;&nbsp;&nbsp;[3.1 Tab thông tin tồn kho](#list-3-1)
<br> &nbsp;&nbsp;&nbsp;[3.2 Tab Lịch sử nhập kho](#list-3-2)
<br> &nbsp;&nbsp;&nbsp;[3.3 Tab Lịch sử xuất kho](#list-3-3)
<br> &nbsp;&nbsp;&nbsp;[3.4 Tab Lịch sử phân loại](#list-3-4)

---
<a id="muc-1"></a>
## 1. Tìm kiếm và danh sách đơn hàng
<a id="list-1-1"></a>
### 1.1. Tìm kiếm

- Nhập từ khóa vào ô tìm kiếm, nhấn **Enter** để gửi tìm kiếm.
- Gợi ý tìm theo:
- **Mã / Tên đơn hàng**
- **Mã Invoice / Packing List**
- **SKU**
- Lọc dữ liệu theo chi nhánh
<a id="list-1-2"></a>
### 1.2. Thông tin mỗi thẻ đơn hàng

| Thông tin    | Mô tả                         |
| ------------ | ----------------------------- |
| Mã đơn hàng  | Mã code của đơn               |
| Tên đơn hàng | Tên / mô tả đơn               |
| PL           | Tổng số Packing List          |
| Thùng        | Tổng số carton                |
| Tồn kho      | Số lượng đang trong kho       |

**Quy tắc sắp xếp:** Đơn hàng còn tồn kho hiển thị đầu danh sách.

---

<a id="muc-2"></a>
## 2. Xem chi tiết đơn hàng

Chi tiết thông tin tồn kho của đơn hàng bao gồm: Thông tin chung, Lịch sử nhập kho, Lịch sử xuất kho, Lịch sử phân loại.

| Tiêu đề     | Mô tả                                                                                  |
| -------------- | -------------------------------------------------------------------------------------- |
| Tổng số lượng  | Tổng số lượng đơn hàng                                                       |
| Tồn kho        | Tổng số lượng còn trong kho                                                  |
| Chưa phân loại | Tổng số lượng chưa phân loại                                                    |
| Đã xuất        | Tổng số lượng xuất kho          |

<a id="muc-3"></a>
## 3. Lịch sử
<a id="list-3-1"></a>
### 3.1 Tab thông tin tồn kho

| Cột                      | Mô tả                |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| Phân loại                | Đã phân loại / Chưa phân loại  |
| Packing List / Invoice    | Mã invoice và mã packing list  |
| Thùng                    | Số thứ tự thùng    |
| Số lượng                 | Số lượng tồn kho đơn hàng trong thùng |
| Ngày nhập                | Ngày nhập kho của PL hoặc ngày nhập kho của đơn hàng|
| Kho                      | Vị trí thùng trong kho|

---

<a id="list-3-2"></a>
### 3.2 Tab lịch sử nhập kho

| Cột               | Mô tả                                         |
| ----------------- | --------------------------------------------- |
| Loại              | Theo PL / Nhập trực tiếp             |
| Mã nhập kho       | Mã phiếu nhập                |
| PL / Invoice / Kiện | Mã invoice, packing list code, kiện trong kho |
| Thùng             | Số thứ tự thùng                      |
| Số lượng          | Số lượng nhập kho |
| Ngày tạo          | Ngày nhập kho                                 |
| Người tạo         | Tên người thực hiện nhập kho                  |

---

<a id="list-3-3"></a>
## 3.3 Tab lịch sử xuất kho

| Cột               | Mô tả                                        |
| ----------------- | -------------------------------------------- |
| Loại              | Theo PL / Xuất trực tiếp            |
| Mã xuất kho       | Mã phiếu xuất               |
| PL / Invoice / Kiện | Mã invoice, packing list code, kiện trong kho              |
| Thùng             | Số thứ tự thùng                      |
| Số lượng          | Số lượng xuất kho     |
| Ngày xuất         | Ngày xuất kho                      |
| Người tạo         | Tên người thực hiện xuất kho                 |

---

<a id="list-3-4"></a>
## 3.4. Tab lịch sử phân loại

| Cột          | Mô tả |
| ------------ | ----------------------------------------------------------------------------------------------------------------------------------- |
| Mã phân loại | Code phân loại |
| Packing List | Mã packing list |
| Thùng        | Số thứ tự thùng |
| Số lượng     | Số lượng giảm: phân loại PL vào kho và ngược lại|
| Loại         | Nhập / Xuất                                                                                                 |
| Ngày tạo     | Ngày tạo phân loại |
| Người tạo    | Tên người thực hiện phân loại |

---

# Hướng dẫn xuất kho Packing List

## Xuất kho Packing List

**Mục đích:** Hỗ trợ nhân viên kho ghi nhận việc xuất thành phẩm theo từng Packing List (PKL) — từ quét mã đến xác nhận phiếu xuất.

**URL:** [Lịch sử xuất kho thành phẩm](https://warehouse.tms-s.vn/lich-su-xuat-kho-thanh-pham)

**Hướng dẫn tạo Xuất kho Packing List**: [Video hướng dẫn](https://storages.tms-s.vn/f/8156175)

---

### 🗂️ Mục lục

[1. **Danh sách lịch sử xuất kho**](#muc-1)
<br> &nbsp;&nbsp;&nbsp;[1.1 Yêu cầu quyền truy cập](#list-1-1)
<br> &nbsp;&nbsp;&nbsp;[1.2 Tìm kiếm lịch sử xuất kho](#list-1-2)
<br> &nbsp;&nbsp;&nbsp;[1.3 Xem chi tiết phiếu xuất](#list-1-3)

[2. **Tạo phiếu xuất kho mới**](#muc-2)
<br> &nbsp;&nbsp;&nbsp;[2.1 Truy cập chức năng](#list-2-1)
<br> &nbsp;&nbsp;&nbsp;[2.2 Quét mã Packing List / Invoice](#list-2-2)
<br> &nbsp;&nbsp;&nbsp;[2.3 Kiểm tra thông tin trước khi xuất](#list-2-3)
<br> &nbsp;&nbsp;&nbsp;[2.4 Xác nhận xuất kho](#list-2-4)
<br> &nbsp;&nbsp;&nbsp;[2.5 Kết quả sau khi lưu](#list-2-5)

[3. **Quy tắc & Điều kiện hệ thống**](#muc-3)
<br> &nbsp;&nbsp;&nbsp;[3.1 Điều kiện quét hợp lệ / không hợp lệ](#list-3-1)
<br> &nbsp;&nbsp;&nbsp;[3.2 Quy tắc xác nhận lưu](#list-3-2)
<br> &nbsp;&nbsp;&nbsp;[3.3 Các thông báo lỗi thường gặp](#list-3-3)

---

<a id="muc-1"></a>
## 1. Danh sách lịch sử xuất kho

Trang chia làm 2 khu vực chính: 
  - Cột trái hiển thị danh sách các Packing List đã xuất
  - Cột phải hiển thị chi tiết phiếu xuất tương ứng

<a id="list-1-1"></a>
### 1.1 Yêu cầu quyền truy cập

| Quyền | Phạm vi |
| --- | --- |
| Xem | Vào được trang danh sách lịch sử xuất kho |
| Chỉnh sửa | Hiển thị và sử dụng được nút "Xuất kho mới" |

> Thiếu quyền **Xem** → trang hiển thị "Từ chối truy cập". Thiếu quyền **Chỉnh sửa** → nút "Xuất kho mới" không khả dụng.

<a id="list-1-2"></a>
### 1.2 Tìm kiếm lịch sử xuất kho

- Ô tìm kiếm nằm ở đầu cột trái, nhấn **Enter** để gửi tìm kiếm.
- Có thể tìm theo:<br>
  Mã Packing List / Invoice No<br>
  Mã xuất kho<br>
  Tên người nhận<br>
  Tên người xuất kho<br>
  Mã hoặc tên đơn hàng

<a id="list-1-3"></a>
### 1.3 Xem chi tiết phiếu xuất

Phần đầu cột phải hiển thị “thanh tổng quan” cho Packing List đang chọn:

| Trường | Mô tả |
| ---- | --- |
| Invoice/Mã PL | Mã invoice, mã Packing List |
| Tổng đơn hàng | Số lượng đơn hàng trong Packing List |
| Đã xuất | Số lượng thành phẩm đã xuất (hiển thị theo chi nhánh đang chọn; có kèm “Tổng xuất”) |
| Tổng thùng | Tổng số thùng (carton) thuộc Packing List |
| Tải Exce | Excel chi tiết theo Packing List |
| Tải PDF | PDF chi tiết theo Packing List |

Nhấp chọn một Packing List trong danh sách bên trái để xem chi tiết ở cột phải:

| Trường | Mô tả |
| --- | --- |
| Mã đơn hàng | Mã định danh đơn hàng |
| SKU | Mã sản phẩm |
| SL Cần | Số lượng lúc tạo PKL |
| SL Xuất | Số lượng thực tế đã xuất |
| Ghi chú | Ghi chú của từng dòng đơn hàng |

> Nếu phiếu có nhiều thùng (carton): hiển thị 5 lịch sử / PKL mỗi trang, 5 đơn hàng / thùng mỗi trang.

---

<a id="muc-2"></a>
## 2. Tạo phiếu xuất kho mới

<a id="list-2-1"></a>
### 2.1 Truy cập chức năng

Đăng nhập hệ thống, vào trang **"Lịch sử xuất kho theo Packing List"**, nhấn nút **"Xuất kho mới"** ở thanh menu bên trái để mở hộp thoại **"Xuất kho Packing List"**.

> **Lưu ý:** Trước khi xuất kho, số lượng nhập kho hoặc phân loại phải khớp với số lượng khi tạo PKL. Nếu có sai lệch, cần nhập kho / phân loại lại cho đúng SL trước khi xuất.

<a id="list-2-2"></a>
### 2.2 Quét mã Packing List / Invoice

**Nhập mã Packing List/ Mã Invoice:** Tại ô "Quét mã Packing List / Invoice", nhập mã rồi nhấn `Enter` để xem thông tin chi tiết.

**Thêm nhiều PKL vào cùng một phiếu:** Có thể quét lần lượt nhiều Packing List trong cùng một lần xuất. Danh sách PKL đã quét hiển thị bên trái hộp thoại. Có thể xóa Packing List khỏi danh sách trước khi xác nhận.

> **Lưu ý:** Nếu xóa một thùng (carton) hoặc một dòng đơn hàng trong hộp thoại, hệ thống loại phần đó khỏi dữ liệu xuất và tính lại tổng — có thể kích hoạt cảnh báo **"Vui lòng kiểm tra trước khi xuất kho"** nếu tổng bị lệch so với PKL gốc.

<a id="list-2-3"></a>
### 2.3 Kiểm tra thông tin trước khi xuất

Với mỗi Packing ListL đã quét, hệ thống hiển thị danh sách thùng (carton), danh sách đơn hàng / SKU trong từng thùng và số lượng Cần:

| Trường | Mô tả |
| --- | --- |
| SL Cần | Hệ thống tự lấy làm số lượng xuất — không cần nhập thủ công |
| Ghi chú | Không bắt buộc — nhập nếu cần cho từng dòng đơn hàng |

> **Cảnh báo phân loại (đỏ):** Nếu thấy _"Vui lòng phân loại lại Packing List! ... khác số lượng đơn hàng được nhập kho"_, cần vào `/phan-loai-thanh-pham` để xử lý trước khi xuất kho.

<a id="list-2-4"></a>
### 2.4 Xác nhận xuất kho

Nhấn nút **"Xuất kho"** ở cuối hộp thoại. Hệ thống hiện hộp thoại **"Xác nhận xuất kho"** với tổng quan trước khi lưu. Xem lại và nhấn **Xác nhận** để hoàn tất.

> **Lưu ý:** hộp thoại không thể đóng bằng cách nhấp ra ngoài hoặc nhấn `Esc`. Phải hoàn tất hoặc hủy rõ ràng bên trong hộp thoại.

<a id="list-2-5"></a>
### 2.5 Kết quả sau khi lưu

Sau khi nhấn **Xác nhận**, hệ thống sẽ:
- Tạo phiếu xuất kho thành công
- Lưu chi tiết xuất theo từng Packing List và từng thùng
- Trừ số lượng đã xuất khỏi tồn kho
- Ghi lịch sử xuất để tra cứu
- Đóng hộp thoại và làm mới danh sách

---

<a id="muc-3"></a>
## 3. Quy tắc & Điều kiện hệ thống

<a id="list-3-1"></a>
### 3.1 Điều kiện quét hợp lệ / không hợp lệ

**Quét hợp lệ** — Packing List được thêm vào danh sách khi:
- Ô nhập không trống
- Hệ thống tìm thấy PKL trong dữ liệu
- Packing List chưa xuất kho
- Packing List có đủ thông tin đơn hàng
- Packing List còn tồn kho để xuất

> **Cách tính tồn để xuất:** Nếu có sẵn dữ liệu tồn, hệ thống dùng giá trị đó; nếu chưa có, tính theo **(tổng đã nhập vào − tổng đã xuất)**.

**Quét không hợp lệ** — hệ thống báo lỗi và bỏ qua:

| Tình huống | Thông báo lỗi |
| --- | --- |
| Ô nhập trống | "Vui lòng không để trống" |
| PKL đã xuất kho hoàn tất | "Packing List đã được xuất kho!" |
| PKL thiếu thông tin để xuất | "Packing List chưa đủ thông tin xuất kho." |
| Không tìm thấy hoặc hết tồn để xuất | "Không tìm thấy Packing List" |
| Quét trùng trong cùng phiếu | "Packing List đã được quét" |

<a id="list-3-2"></a>
### 3.2 Quy tắc xác nhận lưu

**Số lượng:** Hệ thống dùng SL Cần làm cơ sở, kiểm tra điều kiện dựa trên SL Cần và tồn kho trước khi lưu.

**Phân loại thành phẩm:** Nếu số lượng trong PKL không khớp với số lượng đã nhập kho, hệ thống chặn lưu và hiển thị:

> _"Số lượng đơn hàng trong Packing List không bằng với số lượng đơn hàng được nhập kho. Vui lòng phân loại lại Packing List!"_

Cách xử lý: vào `/phan-loai-thanh-pham` để phân loại lại, sau đó quay lại xuất kho.

**Tổng thùng / tổng PCS:** Nếu tổng bị lệch do xóa carton / đơn trong hộp thoại, hệ thống hiển thị:

> _"Vui lòng kiểm tra trước khi xuất kho"_

Cảnh báo sẽ chỉ rõ PKL nào bị lệch và phần tổng nào bị khác.

<a id="list-3-3"></a>
### 3.3 Các thông báo lỗi thường gặp

| Thông báo | Ý nghĩa | Cách xử lý |
| --- | --- | --- |
| Vui lòng không để trống | Chưa nhập mã PKL | Nhập mã / quét QR rồi nhấn Enter |
| Packing List đã được xuất kho! | PKL đã hoàn tất xuất | Chọn PKL khác |
| Packing List chưa đủ thông tin xuất kho. | PKL không có đủ dữ liệu | Kiểm tra lại dữ liệu PKL |
| Không tìm thấy Packing List | PKL không tồn tại hoặc hết tồn | Kiểm tra lại mã PKL / tồn kho |
| Packing List đã được quét | Trùng PKL trong cùng phiếu | Không cần quét lại |
| Số lượng nhập kho / phân loại chưa bằng SL lúc tạo PKL! | Phân loại chưa khớp | Vào `/phan-loai-thanh-pham` làm lại |
| Vui lòng kiểm tra trước khi xuất kho | Tổng thùng / số lượng bị lệch | Kiểm tra lại carton / đơn đã xóa |

# Hướng dẫn phân loại thành phẩm

## Phân loại thành phẩm

**Mục đích:** Ghi nhận việc phân bổ số lượng hàng hóa từ kho vào từng Packing List (PKL) theo đơn hàng thực tế — hỗ trợ 2 luồng: **Nhập kho** (giảm tồn kho) và **Nhập PKL** (tăng phân bổ vào PKL).

**URL:** [Phân loại thành phẩm](https://warehouse.tms-s.vn/phan-loai-thanh-pham)

**Hướng dẫn Phân loại thành phẩm**: [Video hướng dẫn](https://storages.tms-s.vn/f/8156259)

---

### 🗂️ Mục lục

[1. **Danh sách lịch sử phân loại**](#muc-1)
<br> &nbsp;&nbsp;&nbsp;[1.1 Yêu cầu quyền truy cập](#list-1-1)
<br> &nbsp;&nbsp;&nbsp;[1.2 Tìm kiếm và lọc dữ liệu](#list-1-2)
<br> &nbsp;&nbsp;&nbsp;[1.3 Xem chi tiết phiếu phân loại](#list-1-3)

[2. **Tạo phiếu phân loại mới**](#muc-2)
<br> &nbsp;&nbsp;&nbsp;[2.1 Truy cập chức năng](#list-2-1)
<br> &nbsp;&nbsp;&nbsp;[2.2 Quét mã Packing List](#list-2-2)
<br> &nbsp;&nbsp;&nbsp;[2.3 Nhập số lượng phân loại](#list-2-3)
<br> &nbsp;&nbsp;&nbsp;[2.4 Xác nhận lưu](#list-2-4)
<br> &nbsp;&nbsp;&nbsp;[2.5 Kết quả sau khi lưu](#list-2-5)

[3. **Quy tắc & Điều kiện hệ thống**](#muc-3)
<br> &nbsp;&nbsp;&nbsp;[3.1 Điều kiện quét hợp lệ / không hợp lệ](#list-3-1)
<br> &nbsp;&nbsp;&nbsp;[3.2 Quy tắc nhập số lượng và xác nhận lưu](#list-3-2)
<br> &nbsp;&nbsp;&nbsp;[3.3 Các thông báo lỗi thường gặp](#list-3-3)

---

<a id="muc-1"></a>
## 1. Danh sách lịch sử phân loại

Trang chia làm 2 khu vực chính: cột trái hiển thị lịch sử các phiếu phân loại, cột phải hiển thị chi tiết phiếu đang được chọn.

<a id="list-1-1"></a>
### 1.1 Yêu cầu quyền truy cập

| Quyền | Phạm vi |
| --- | --- |
| Xem | Vào được trang danh sách lịch sử phân loại |
| Chỉnh sửa | Hiển thị và sử dụng được các nút "Nhập PKL" / "Nhập kho" |

> Thiếu quyền **Xem** → trang hiển thị "Từ chối truy cập". Thiếu quyền **Chỉnh sửa** → các nút tạo phiếu phân loại mới bị vô hiệu hóa.

<a id="list-1-2"></a>
### 1.2 Tìm kiếm và lọc dữ liệu

**Tìm kiếm nhanh:** Ô tìm kiếm ở đầu cột trái, lọc theo thời gian thực bằng mã phiếu phân loại hoặc mã Packing List.

**Bộ lọc nâng cao:** Nhấn biểu tượng Bộ lọc để mở các tùy chọn:

| Trường lọc | Các giá trị |
| --- | --- |
| Loại phân loại | Tất cả / Nhập kho / Nhập PKL |
| Ngày tạo | Chọn khoảng thời gian |
| Người tạo | Tìm theo tên người tạo phiếu |
| Chi nhánh | Mặc định theo chi nhánh của tài khoản |

Nhấn **Áp dụng** để lọc, nhấn **Xóa lọc** để đặt lại về mặc định.

<a id="list-1-3"></a>
### 1.3 Xem chi tiết phiếu phân loại

Nhấp chọn một phiếu trong danh sách bên trái để xem chi tiết ở cột phải:

| Trường | Mô tả |
| --- | --- |
| Mã đơn hàng / SKU | Thông tin định danh đơn hàng |
| Số lượng đã phân loại | Lượng đã được phân bổ vào PKL |
| Số lượng tồn / chưa phân loại | Lượng còn lại chưa được phân bổ |

---

<a id="muc-2"></a>
## 2. Tạo phiếu phân loại mới

<a id="list-2-1"></a>
### 2.1 Truy cập chức năng

Đăng nhập hệ thống, vào trang **"Phân loại thành phẩm"**. Tại cột trái, chọn loại phân loại:

- Nhấn **NHẬP PKL** → mở cửa sổ "Phân loại nhập PKL" (tăng phân bổ vào PKL).
- Nhấn **NHẬP KHO** → mở cửa sổ "Phân loại nhập kho" (giảm tồn kho).

> **Lưu ý:** Phân loại phải hoàn thành đúng số lượng trước khi xuất kho. Nếu chưa khớp, chức năng xuất kho sẽ báo lỗi và không cho lưu.

<a id="list-2-2"></a>
### 2.2 Quét mã Packing List

**Nhập mã PKL:** Tại ô "Quét mã PackingList / Sản phẩm", quét QR bằng máy quét hoặc gõ mã PKL rồi nhấn `Enter`.

**Thêm nhiều PKL vào cùng một phiếu:** Có thể quét lần lượt nhiều PKL trong cùng một phiên. Danh sách PKL đã quét hiển thị bên trái cửa sổ. Nhấp chọn một PKL để xem chi tiết thùng và đơn hàng ở cột phải. Có thể xóa PKL khỏi danh sách trước khi xác nhận.

> **Lưu ý:** Nếu xóa hết dữ liệu của một PKL, PKL đó sẽ tự động biến mất khỏi danh sách.

<a id="list-2-3"></a>
### 2.3 Nhập số lượng phân loại

Với từng dòng đơn hàng, nhập số lượng vào ô **"Nhập số lượng"**. Hệ thống hiển thị sẵn các chỉ số tham chiếu:

| Ký hiệu | Ý nghĩa |
| --- | --- |
| T | Tổng tồn thành phẩm |
| TP | Tổng thành phẩm đã phân loại |
| L | Tổng thành phẩm chưa phân loại |
| SL cần | Số lượng hệ thống yêu cầu nhập đúng cho dòng đó |

Quy tắc nhập theo từng loại:
- **Nhập PKL:** Tổng nhập cho cùng đơn hàng trong phiên không được vượt quá giá trị **L**.
- **Nhập kho:** Số lượng nhập không được vượt quá số lượng đang có của đơn hàng.

> **Lưu ý:** Nhập 0 → báo lỗi "Vui lòng nhập số lượng lớn hơn 0". Chỉ nhập số nguyên dương. Nhập khác SL cần → hiển thị cảnh báo để kiểm tra lại. Nhập kho: nếu đơn hàng không còn số lượng để xử lý, dòng đó sẽ không hiển thị.

Nhấn icon **thùng rác** để xóa từng dòng hoặc từng thùng nếu cần loại bỏ dữ liệu. Dòng đã xóa sẽ không được tính khi xác nhận.

<a id="list-2-4"></a>
### 2.4 Xác nhận lưu

Nhấn nút **"Xác nhận"** ở cuối cửa sổ. Hệ thống hiển thị popup **"Xác nhận phân loại"** với tổng quan trước khi lưu. Xem lại và nhấn **"Xác nhận"** lần nữa để hoàn tất.

> **Lưu ý:** Không thể đóng cửa sổ bằng cách nhấp ra ngoài hoặc nhấn `Esc`. Phải hoàn tất hoặc hủy rõ ràng bên trong cửa sổ.

Điều kiện lưu thành công: không còn cảnh báo số lượng trên các dòng và có ít nhất 1 dòng hợp lệ để lưu.

<a id="list-2-5"></a>
### 2.5 Kết quả sau khi lưu

Sau khi nhấn **Xác nhận**, hệ thống sẽ tạo phiếu phân loại thành công và cập nhật tồn kho:

| Loại phân loại | Tác động |
| --- | --- |
| Nhập kho | Tồn kho giảm |
| Nhập PKL | Phân bổ vào PKL tăng |

---

<a id="muc-3"></a>
## 3. Quy tắc & Điều kiện hệ thống

<a id="list-3-1"></a>
### 3.1 Điều kiện quét hợp lệ / không hợp lệ

**Quét hợp lệ** — PKL được thêm vào danh sách khi:
- Hệ thống tìm thấy PKL trong dữ liệu
- PKL còn khả dụng để phân loại
- PKL chưa tồn tại trong danh sách phiên hiện tại

**Quét không hợp lệ** — hệ thống báo lỗi và bỏ qua:

| Tình huống | Thông báo lỗi |
| --- | --- |
| Ô nhập trống | "Vui lòng không để trống" |
| Chưa quét PKL | "Vui lòng quét Packing List" |
| PKL đã xuất kho | "Packing List đã xuất kho" |
| Quét trùng trong cùng phiên | "Packing List đã tồn tại trong danh sách" |
| PKL không khả dụng | "Packing List không khả dụng để nhập kho" |
| Không tìm thấy PKL | "Không tìm thấy Packing List" |
| Lỗi hệ thống | "Không thể lấy dữ liệu, vui lòng liên hệ admin" |

<a id="list-3-2"></a>
### 3.2 Quy tắc nhập số lượng và xác nhận lưu

Không nhập 0 — chỉ nhập số nguyên dương.

| Loại | Giới hạn | Thông báo khi vượt |
| --- | --- | --- |
| Nhập PKL | Tổng nhập theo đơn hàng không vượt giá trị L | "Không nhập vượt quá số tồn (X)" |
| Nhập kho | Không vượt số lượng đang có của đơn hàng | "Không nhập vượt quá số lượng đang có của đơn hàng (X)" |

Điều kiện lưu thành công: không còn cảnh báo trên các dòng và có ít nhất 1 dòng hợp lệ.

<a id="list-3-3"></a>
### 3.3 Các thông báo lỗi thường gặp

| Thông báo | Ý nghĩa | Cách xử lý |
| --- | --- | --- |
| Vui lòng nhập số lượng lớn hơn 0 | Đã nhập 0 | Nhập số lớn hơn 0 |
| Không nhập vượt quá số tồn (X) | Vượt tồn chưa phân loại (Nhập PKL) | Giảm số lượng xuống ≤ X |
| Không nhập vượt quá số lượng đang có của đơn hàng (X) | Vượt số lượng đang có (Nhập kho) | Giảm số lượng xuống ≤ X |
| Vui lòng kiểm tra lại số lượng phân loại | Vẫn còn dòng có lỗi | Kiểm tra và sửa lại các dòng cảnh báo |
| Không có dữ liệu hợp lệ để lưu... | Không có dòng nào hợp lệ | Nhập ít nhất 1 dòng hợp lệ |

# Hướng dẫn nhập kho PackingList (TTD)

**Mục đích:** Tài liệu này được xây dựng nhằm mô tả quy trình nhập đơn hàng và hướng dẫn cách nhập số lượng hàng hóa theo dữ liệu trên Packing List, đảm bảo việc nhập liệu chính xác và thống nhất.

**URL:** [Nhập kho thành phẩm](https://warehouse.tms-s.vn/lich-su-nhap-kho-thanh-pham)

**Hướng dẫn tạo Nhập kho Packing List**: [Video hướng dẫn](https://storages.tms-s.vn/f/8156252)

---

<a id="muc-luc"></a>
### 🗂️ Mục lục
- [I. **Danh sách lịch sử nhập kho**](#muc-I)
<br> &nbsp;&nbsp;&nbsp; [1. Truy cập chức năng](#list-1)
<br> &nbsp;&nbsp;&nbsp; [2. Tìm kiếm và xem lịch sử nhập kho](#list-2)
<br>&nbsp;&nbsp;&nbsp; [3. Lọc theo chi nhánh](#list-3)
- [II. **Chức năng tạo phiếu nhập kho mới**](#muc-II)
<br> &nbsp;&nbsp;&nbsp;[1. Mở popup nhập kho](#buoc-1)
<br> &nbsp;&nbsp;&nbsp;[2. Quét hoặc nhập mã Packing List](#buoc-2)
<br> &nbsp;&nbsp;&nbsp;[3. Nhập số lượng thực nhập](#buoc-3)
<br> &nbsp;&nbsp;&nbsp;[4. Xác nhận lưu](#buoc-4)
<br> &nbsp;&nbsp;&nbsp;[5. Kết quả sau khi lưu](#buoc-5)
<br>  &nbsp;&nbsp;&nbsp;[6. Điều kiện quét hợp lệ / không hợp lệ](#dieu-kien)
<br>  &nbsp;&nbsp;&nbsp;[7.Quy tắc nhập số lượng](#quy-tac)
<br>  &nbsp;&nbsp;&nbsp;[8. Thông báo lỗi thường gặp](#loi-thuong-gap)
<br> &nbsp;&nbsp;&nbsp;[9. Trường và hành vi bị khóa / giới hạn](#bi-khoa)
<br> &nbsp;&nbsp;&nbsp;[10. Xuất file Excel / PDF](#xuat-file)

---

<a id="muc-I"></a>
## **I. Danh sách lịch sử nhập kho**
Màn hình hiển thị dạng **2 cột**: cột trái là danh sách Packing List đang có lịch sử nhập kho, cột phải là chi tiết lịch sử nhập kho của Packing List đang được chọn.

---

<a id="list-1"></a>
## 1. Truy cập chức năng

1. ###### Mở menu **Kho TP và khu vực lưu trữ**.
2. ###### Chọn **Lịch sử nhập kho theo Packing List**.
3. ###### Màn hình hiển thị dạng **2 cột**:
   ###### **Cột trái:** Danh sách Packing List đang có lịch sử nhập kho.
   ###### **Cột phải:** Chi tiết lịch sử nhập kho của Packing List đang được chọn.
4. Bấm nút **[Nhập kho mới]** để bắt đầu tạo phiếu nhập kho.

> **⚠️ Lưu ý:** Chỉ khi có quyền chỉnh sửa mới được thực hiện nhập kho. Nếu người dùng không có quyền **[Chỉnh sửa]** thì nút **[Nhập kho mới]** sẽ ẩn đi. Nếu tài khoản không có quyền truy cập, hệ thống hiển thị cảnh báo và tự động chuyển hướng về trang chủ hoặc đăng xuất.

---

<a id="list-2"></a>
## 2. Tìm kiếm và xem lịch sử nhập kho

### 2.1 Tìm kiếm danh sách

Ô tìm kiếm hỗ trợ các trường sau:
- Mã Packing List / Invoice No
- Mã nhập kho
- Tên người nhận
- Tên người nhập kho
- Mã / tên đơn hàng

Nhấn **Enter** hoặc bấm icon kính lúp để thực hiện tìm kiếm. Khi bấm vào ô tìm kiếm, hệ thống hiển thị ghi chú gợi ý các thông tin có thể tìm.

### 2.2 Thông tin hiển thị trên mỗi thẻ Packing List

| Thông tin | Mô tả |
|---|---|
| Invoice No | Tên chính của Packing List |
| Tên người nhận | Thông tin người nhận trong Packing List |
| Tiến độ | SL đã nhập / Cần nhập của Packing List |

**Màu sắc thể hiện mức hoàn thành:**

| Màu | Trạng thái |
|---|---|
| 🟢 Xanh lá | Đã nhập đủ số lượng |
| 🟠 Cam / vàng | Chưa nhập đủ |

### 2.3 Xem chi tiết lịch sử nhập kho

Khi chọn một Packing List từ danh sách bên trái, **Thông tin hiển thị ở đầu trang:** :

- Invoice No + mã Packing List
- Tổng đơn hàng
- Đã nhập / Cần nhập *(màu theo tiến độ)*
- Tổng nhập gộp *(tất cả lượt)*
- Tổng số thùng
- Nút tải **Excel** + **PDF** chi tiết

**Chi tiết từng phiếu nhập kho** hiển thị:

- Mã phiếu nhập kho
- Số thùng đã nhập trong Packing List
- Người nhập
- Ngày nhập

Mỗi phiếu có thể **mở / thu gọn** để xem chi tiết theo thùng và đơn hàng:

| Cột | Mô tả |
|---|---|
| Mã đơn hàng | Mã đơn hàng / Tên đơn hàng |
| SKU | Mã SKU sản phẩm |
| SL Cần | Số lượng cần nhập |
| SL Nhập | Số lượng thực tế đã nhập |
| Ghi chú | Ghi chú của người nhập |

> **📎 Lưu ý:** Trong mỗi phiếu, danh sách **thùng** (carton) cũng có thể mở/thu gọn riêng. Nếu số lượng thùng hoặc đơn hàng vượt ngưỡng, hệ thống phân trang 5 lịch sử/trang và 5 đơn hàng trong 1 thùng/trang.

---

<a id="list-3"></a>
## 3. Lọc theo chi nhánh

- Thanh bên trái có dropdown **chọn chi nhánh**.
- Khi chọn chi nhánh, danh sách Packing List và số lượng đã nhập sẽ được lọc theo chi nhánh đó.
- Tiến độ `Đã nhập` trong header chi tiết cũng phản ánh riêng theo chi nhánh đang chọn.
- Khi không chọn chi nhánh cụ thể, hệ thống hiển thị tổng toàn bộ chi nhánh.

---

<a id="muc-II"></a>
## **II. Chức năng tạo phiếu nhập kho mới**

---

<a id="buoc-1"></a>
## 1. Mở cửa sổ nhập kho

1. Bấm nút **Nhập kho mới** *(màu xanh lá, góc trên bên trái danh sách)*.
2. Cửa sổ **"Nhập kho Packing List"** mở ra gồm 2 cột:
   ###### **Cột trái:** Ô quét / nhập mã + danh sách Packing List đã quét.
   ###### **Cột phải:** Chi tiết thùng và đơn hàng để nhập số lượng thực nhập.

> **⚠️ Lưu ý:** Cửa sổ **không thể đóng bằng phím ESC hoặc click ra ngoài** để tránh mất dữ liệu đang nhập.

---

<a id="buoc-2"></a>
## 2. Quét hoặc nhập mã Packing List

1. Đặt con trỏ vào ô nhập mã phía trên cột trái.
2. **Quét QR code** bằng máy quét hoặc **nhập thủ công** mã Packing List / Invoice No.
3. Nhấn **Enter** hoặc bấm icon tìm kiếm để xác nhận.
4. Nếu hợp lệ, Packing List được thêm vào danh sách đã quét và chi tiết thùng/đơn hàng xuất hiện ở cột phải.
5. Có thể quét **nhiều Packing List** trong cùng một phiên nhập kho.

**Thông tin hiển thị trên mỗi thẻ Packing List đã quét:**

| Thông tin | Mô tả |
|---|---|
| Invoice No + tên người nhận | Định danh Packing List |
| Loại | `B2B` hoặc nhãn type khác |
| Tổng thùng / Tổng PCS / Đã nhập trước | Thống kê nhanh |
| Phương thức vận chuyển + ngày tạo | Thông tin bổ sung |
| Nút **X** | Xóa Packing List khỏi danh sách quét |

---

<a id="buoc-3"></a>
## 3. Nhập số lượng thực nhập

Trên cột phải, hệ thống nhóm chi tiết theo: **Packing List → Thùng → Đơn hàng**.

Mỗi dòng đơn hàng gồm:
- Mã đơn hàng / SKU
- Nhãn `Cần: <số lượng>` *(SL cần nhập thêm = Tổng SL tạo PL − SL đã nhập trước)*
- Ô nhập **SL thực nhập** *(mặc định = SL cần)*
- Ô nhập **Ghi chú** *(tuỳ chọn)*

Có thể **xóa riêng** từng đơn hàng, từng thùng, hoặc cả Packing List bằng nút **X** tương ứng.

> **⚠️ Lưu ý:**
> - Khi xóa hết đơn hàng trong 1 thùng → thùng đó tự bị xóa.
> - Khi xóa hết thùng trong 1 Packing List → Packing List đó bị xóa khỏi danh sách quét.

**Màu sắc ô SL thực nhập:**

| Màu | Điều kiện |
|---|---|
| 🔴 Đỏ | SL nhập = 0 |
| 🟠 Cam | SL nhập > 0 nhưng < SL cần |
| 🟢 Xanh lá | SL nhập ≥ SL cần |

---

<a id="buoc-4"></a>
## 4. Xác nhận lưu

1. Kiểm tra tổng trên header popup: số **PL** và tỉ lệ **Đã nhập / Cần nhập**.
2. Bấm nút **Nhập kho** *(góc dưới cột phải)*.
3. Hệ thống kiểm tra dữ liệu trước khi lưu *(xem mục [Quy tắc nhập số lượng](#quy-tac))*.
4. Hiển thị thông báo nhập kho thành công để người dùng biết dữ liệu đã được ghi nhận.
5. Sau khi lưu thành công, thông báo hiển thị trong **2 giây** rồi tự đóng popup.

---

<a id="buoc-5"></a>
## 5. Kết quả sau khi lưu

Khi lưu thành công:

- Cửa sổ tự đóng.
- Màn hình lịch sử tự **tải lại dữ liệu** mới nhất.
- Packing List vừa nhập phản ánh cập nhật `Đã nhập / Cần nhập`, màu sắc trạng thái đúng, và phiếu nhập mới xuất hiện trong phần chi tiết bên phải.

---

<a id="dieu-kien"></a>
## Điều kiện quét hợp lệ / không hợp lệ

**✅ Trường hợp hợp lệ**

Packing List chỉ được thêm vào danh sách quét khi đáp ứng **tất cả** điều kiện sau:
- Tìm thấy dữ liệu từ hệ thống.
- Không nhập lại PKL đã quét trong phiên hiện tại.

**❌ Trường hợp không hợp lệ**

| Trường hợp | Thông báo hiển thị |
|---|---|
| Ô nhập mã để trống | `Vui lòng không để trống` |
| Trùng mã đã quét trong phiên | `Packing List đã được quét` |
| Đã xuất kho | `Packing List đã xuất kho` |
| Nhập không đúng mã Packing List / Invoice | `Không tìm thấy Packing List` |

---

<a id="quy-tac"></a>
## Quy tắc nhập số lượng và xác nhận lưu

- Mỗi dòng đơn hàng phải nhập số lượng là **số nguyên dương**.
- Hệ thống mặc định đề xuất SL thực nhập theo công thức:

> **🧮 Công thức tính:**
> ```
> SL đề xuất = SL cần trong đơn − SL đã nhập trước đó
> ```

- Trường SL thực nhập chỉ nhận **ký tự số**, định dạng có dấu phân cách hàng nghìn (dấu phẩy).
- Giới hạn tối đa **12 chữ số**, không nhận số thập phân.

**Kiểm tra khi bấm nút Nhập kho:**

| Trường hợp | Kết quả |
|---|---|
| Chưa quét Packing List nào | Hiển thị lỗi, không cho lưu |
| Có dòng SL thực nhập = 0 | Hiển thị lỗi tại dòng đó, không cho lưu |
| Tất cả dòng đã bị xóa hoặc SL = 0 | Không cho lưu |

---

<a id="loi-thuong-gap"></a>
## Thông báo lỗi thường gặp

| Thông báo | Nguyên nhân |
|---|---|
| `Tài khoản chưa có quyền` | Người dùng không có quyền truy cập chức năng |
| `Vui lòng không để trống` | Ô quét mã để trống khi bấm tìm kiếm |
| `Packing List đã được quét` | Mã đã được quét trong phiên hiện tại |
| `Packing List đã xuất kho` | Đã xuất kho thành phẩm |
| `Không tìm thấy Packing List` | Mã không tồn tại trong hệ thống |
| `Vui lòng quét Packing List để tiến hành nhập kho` | Nhấn lưu khi chưa quét PL nào |
| `Vui lòng nhập số lượng lớn hơn 0` | Có dòng đơn hàng SL thực nhập = 0 |
| `Không có dữ liệu hợp lệ để lưu` | Tất cả dòng đã bị xóa hoặc SL = 0 |
| `Không thể lưu nhập kho` | Lỗi hệ thống hoặc dữ liệu chưa đúng |

---

<a id="bi-khoa"></a>
## Các trường và hành vi bị khóa / giới hạn

**🔒 Phân quyền truy cập**

| Cấp độ | Quyền | Hành vi |
|---|---|---|
| Level 0 | Không có quyền | Hiển thị cảnh báo, chặn toàn bộ thao tác, bắt buộc về trang chủ hoặc đăng xuất |
| Level 1 | Chỉ xem | Nút **Nhập kho mới** bị ẩn, không thể tạo phiếu |
| Level 2 | Xem + Chỉnh sửa | Toàn quyền thao tác |

**🔒 Các trạng thái khóa**
- Nút **Nhập kho** bị khóa khi chưa quét PL nào hoặc đang trong quá trình lưu.
- Nút **tải Excel** (danh sách) bị khóa khi danh sách trống.

**🔒 Giới hạn nhập liệu**
- Bảng nhập kho **không đóng** được bằng phím `ESC` hoặc click ra ngoài.
- Ô **Ghi chú:** giới hạn **255 ký tự**.
- Ô **SL thực nhập:** chỉ nhận ký tự số, tối đa **12 chữ số**, không nhận số thập phân.

---

<a id="xuat-file"></a>
## Xuất file Excel / PDF

| Loại xuất | Cách thực hiện |
|---|---|
| Xuất danh sách (Excel) | Bấm nút **tải xuống** *(icon download màu cam)* trên thanh tìm kiếm bên trái. Bị khóa khi danh sách trống. |
| Xuất chi tiết (Excel) | Chọn 1 Packing List → bấm nút **tải Excel** trên header chi tiết bên phải. |
| Xuất chi tiết (PDF) | Chọn 1 Packing List → bấm nút **tải PDF** trên header chi tiết bên phải. |

> Xuất chi tiết bao gồm toàn bộ lịch sử nhập kho của Packing List đó, đầy đủ từng thùng và đơn hàng.



[![Screenshot from 2026-03-23 05-09-33.png](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/scaled-1680-/screenshot-from-2026-03-23-05-09-33.png)](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/screenshot-from-2026-03-23-05-09-33.png)

# Xuất/Nhập kho Logistic



# Hướng dẫn nhập kho PackingList (LOGISTIC)

## 1) Mục đích

Tài liệu này hướng dẫn người dùng thao tác chức năng **Nhập kho Packing List** trên WMS, gồm:
- Tìm kiếm và theo dõi lịch sử nhập kho theo từng Packing List
- Tạo phiếu nhập kho mới bằng quét mã/QR
- Kiểm tra điều kiện hợp lệ khi quét
- Nhập số lượng thực nhập, ghi chú, xác nhận lưu
- Hiểu kết quả sau khi lưu và các thông báo lỗi thường gặp

## 2) URL truy cập

- Menu: `Kho` -> `Lịch sử nhập kho`
- Route: <a target="__blank" href="https://logistic-client.datacenter.tms-s.vn/vi/warehouse-entry">https://logistic-client.datacenter.tms-s.vn/vi/warehouse-entry</a>

## 3) Mục lục

- Truy cập chức năng
- Tìm kiếm và xem lịch sử nhập kho
- Tạo phiếu nhập kho mới
- Điều kiện quét hợp lệ/không hợp lệ
- Quy tắc nhập số lượng và xác nhận lưu
- Kết quả sau khi lưu
- Các thông báo lỗi thường gặp
- Các trường/hành vi bị khóa hoặc giới hạn thao tác

## 4) Truy cập chức năng

1. Mở menu **Kho**.
2. Chọn **Lịch sử nhập kho**.
3. Màn hình hiển thị dạng 2 cột:
   - Cột trái: danh sách Packing List đã/đang có lịch sử nhập kho
   - Cột phải: chi tiết lịch sử theo Packing List đang chọn
4. Bấm **Nhập kho** để mở popup tạo phiếu nhập mới.

## 5) Tìm kiếm và xem lịch sử nhập kho theo Packing List

### 5.1 Tìm kiếm danh sách

- Ô tìm kiếm hỗ trợ theo:
  - Mã Packing List / Invoice No
  - Mã nhập kho
  - Tên người nhận
  - Tên người nhập kho
  - Mã / tên đơn hàng
- Dữ liệu danh sách được phân trang.

### 5.2 Đọc trạng thái nhanh trên danh sách

- Mỗi dòng Packing List hiển thị:
  - Mã Invoice + mã Packing List
  - Người nhận
  - Tiến độ `Đã nhập / Cần nhập`
- Màu sắc thể hiện mức hoàn thành:
  - Đủ số lượng: xanh
  - Chưa đủ: cam

### 5.3 Xem chi tiết lịch sử nhập

Khi chọn 1 Packing List:
- Header chi tiết hiển thị:
  - Tổng đơn hàng
  - `Đã nhập / Cần nhập`
  - Tổng thùng
  - Tổng lượt nhập
- Bên dưới là danh sách từng phiếu nhập kho (mỗi phiếu có mã nhập kho, người nhập, thời gian).
- Mỗi phiếu có thể mở/thu gọn để xem chi tiết theo thùng và đơn hàng:
  - Mã đơn hàng
  - SKU
  - SL cần
  - SL nhập
  - Ghi chú

## 6) Tạo phiếu nhập kho mới (quét mã, chọn danh sách, nhập SL thực nhập, ghi chú)

### 6.1 Mở popup nhập kho

1. Bấm nút **Nhập kho**.
2. Popup hiển thị:
   - Cột trái: ô quét/nhập mã + danh sách Packing List đã quét
   - Cột phải: chi tiết thùng và đơn hàng để nhập số lượng

### 6.2 Quét hoặc nhập mã Packing List

1. Nhập mã hoặc quét QR vào ô quét.
2. Nhấn Enter hoặc bấm icon tìm kiếm.
3. Nếu hợp lệ, Packing List được thêm vào danh sách đã quét.
4. Hệ thống tự chọn Packing List mới quét để thao tác ngay.

### 6.3 Nhập số lượng thực nhập

- Theo từng đơn hàng trong từng thùng:
  - Nhập **SL thực nhập**
  - Nhập **Ghi chú** (nếu cần)
- Có thể xóa:
  - Cả Packing List đã quét
  - Một thùng trong Packing List
  - Một dòng đơn hàng trong thùng

### 6.4 Xác nhận lưu

1. Bấm **Xác nhận nhập kho (x PL)**.
2. Popup xác nhận hiển thị tổng:
   - Số Packing List đang chuẩn bị nhập
   - Tổng `thực nhập / cần nhập`
3. Bấm xác nhận để lưu.

## 7) Điều kiện quét hợp lệ/không hợp lệ

## 7.1 Trường hợp hợp lệ

Packing List chỉ được thêm vào danh sách quét khi:
- Không phải Packing List Customer
- Không trùng với Packing List đã quét trong phiên hiện tại
- Đã xuất thành phẩm thành công từ TTD
- Tìm thấy dữ liệu từ hệ thống

## 7.2 Trường hợp không hợp lệ

Các trường hợp bị chặn khi quét:
- **Trùng mã đã quét**
- **Packing List Customer**
- **Không tìm thấy mã**
- **Đã xuất kho thành phẩm bên Logistic.**
- **Sai process** (chưa đạt điều kiện nghiệp vụ để nhập kho)

## 8) Quy tắc nhập số lượng 

- Mỗi dòng đơn hàng phải nhập số lượng số nguyên không âm.
- Hệ thống mặc định đề xuất SL thực nhập theo công thức:
  - `SL đề xuất = SL cần - SL đã nhập trước đó`
- Khi bấm lưu:
  - Nếu có bất kỳ dòng nào có SL thực nhập = 0 -> không cho lưu
  - Nếu không còn dữ liệu hợp lệ để lưu -> không cho lưu


## 9) Kết quả sau khi lưu

Khi lưu thành công:
- Popup đóng
- Màn hình lịch sử tự tải lại dữ liệu
- Packing List vừa nhập phản ánh lại:
  - Tổng đã nhập
  - Tổng cần nhập
  - Số lượt nhập
  - Danh sách phiếu nhập mới trong phần chi tiết

## 10) Các thông báo lỗi thường gặp

- `Packing List {code} đã được quét`
- `Vui lòng không quét Packing List Customer!`
- `Không tìm thấy Packing List với mã đã nhập`
- `Packing List chưa được xuất kho thành phẩm. Vui lòng xuất kho thành phẩm trước khi nhập kho!`
- `Packing List đã được xuất kho thành phẩm. Vui lòng không nhập kho!`
- `Không thể tìm kiếm Packing List`
- `Vui lòng quét Packing List trước khi lưu`
- `Vui lòng nhập số lượng lớn hơn 0 cho tất cả đơn hàng`
- `Không có dữ liệu hợp lệ để lưu`
- `Không thể lưu nhập kho` (hoặc thông báo lỗi backend trả về)

## 11) Các trường/hành vi bị khóa hoặc giới hạn thao tác

- Nút **Nhập kho** bị khóa nếu người dùng không có quyền chỉnh sửa.
- Không có quyền truy cập khi không khó quyền **View**
- Nút **Xác nhận nhập kho** bị khóa khi:
  - Không có Packing List nào đã quét
  - Đang trong quá trình lưu
  - Người dùng không có quyền chỉnh sửa
- Không thể đóng popup bằng ESC hoặc click ra ngoài (tránh mất dữ liệu nhập).
- Trường SL thực nhập chỉ cho nhập ký tự số, giới hạn tối đa 11 chữ số.
- Ghi chú mỗi dòng giới hạn 255 ký tự.

## 12) Link diagram tham chiếu

- Diagram chi tiết (draw.io): [warehouseentry-data.drawio](https://drive.google.com/file/d/1iHnqv4IiklXjm2Dp283T4sVMP3sWAaKL/view?usp=sharing)



[![Screenshot from 2026-03-23 05-09-33.png](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/scaled-1680-/screenshot-from-2026-03-23-05-09-33.png)](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/screenshot-from-2026-03-23-05-09-33.png)

# Hướng dẫn xuất kho Packing List

# Hướng dẫn sử dụng — Chức năng Xuất Kho Packing List

---

## Mục lục

1. [Mục đích](#1-mục-đích)
2. [URL truy cập](#2-url-truy-cập)
3. [Truy cập chức năng](#3-truy-cập-chức-năng)
4. [Tìm kiếm và xem lịch sử xuất kho theo Packing List](#4-tìm-kiếm-và-xem-lịch-sử-xuất-kho-theo-packing-list)
5. [Tạo phiếu xuất kho mới](#5-tạo-phiếu-xuất-kho-mới)
6. [Điều kiện quét hợp lệ và không hợp lệ](#6-điều-kiện-quét-hợp-lệ-và-không-hợp-lệ)
7. [Quy tắc nhập số lượng và xác nhận lưu](#7-quy-tắc-nhập-số-lượng-và-xác-nhận-lưu)
8. [Kết quả sau khi lưu](#8-kết-quả-sau-khi-lưu)
9. [Các thông báo lỗi thường gặp](#9-các-thông-báo-lỗi-thường-gặp)
10. [Các trường và hành vi bị khóa hoặc giới hạn thao tác](#10-các-trường-và-hành-vi-bị-khóa-hoặc-giới-hạn-thao-tác)

---

## 1. Mục đích

Chức năng **Xuất kho Packing List** cho phép nhân viên kho ghi nhận việc xuất hàng thực tế ra khỏi kho theo từng Packing List (PKL). Sau khi xác nhận, hệ thống tự động:

- Tạo phiếu xuất kho có mã định danh riêng.
- Trừ số lượng hàng đã xuất khỏi tồn kho.
- Ghi lịch sử xuất để tra cứu về sau.

---

## 2. URL truy cập

| Ngôn ngữ | Đường dẫn |
|---|---|
| Tiếng Việt | `/vi/warehouse-export` |
| Tiếng Anh | `/en/warehouse-export` |

---

## 3. Truy cập chức năng

### Yêu cầu quyền

Tài khoản đăng nhập phải được cấp **quyền `View`** đối với trang `/warehouse-export`. Nếu không có quyền, hệ thống hiển thị trang **"Từ chối truy cập"** và không cho phép vào.

Để thực hiện tạo phiếu xuất, tài khoản cần thêm **quyền `Edit`**. Nếu chỉ có quyền `View`, nút **"Xuất kho mới"** sẽ bị vô hiệu hóa (màu xám, không bấm được).

### Cách truy cập

1. Đăng nhập vào hệ thống.
2. Trên thanh điều hướng bên trái, chọn **"Xuất kho"**.
3. Trang hiển thị giao diện chia hai cột:
   - **Cột trái:** Danh sách Packing List đã và đang được xuất kho.
   - **Cột phải:** Chi tiết lịch sử xuất của Packing List đang chọn.

---

## 4. Tìm kiếm và xem lịch sử xuất kho theo Packing List

### Tìm kiếm Packing List

- Ô tìm kiếm nằm ở đầu cột trái.
- Nhập **mã Packing List** hoặc **tên người nhận** để lọc danh sách.
- Danh sách cập nhật theo thời gian thực khi nhập.

### Xem lịch sử xuất của một Packing List

1. Nhấp vào một dòng Packing List trong danh sách bên trái.
2. Cột phải hiển thị toàn bộ các lượt xuất của PKL đó, bao gồm:

| Thông tin | Mô tả |
|---|---|
| Mã phiếu xuất | Mã định danh của từng lần xuất |
| Người thực hiện | Họ tên người tạo phiếu |
| Thời gian tạo | Ngày giờ tạo phiếu |
| Số thùng (carton) | Số lượng thùng đã xuất trong lần đó |
| Chi tiết thùng | Mã đơn hàng, SKU, số lượng cần / thực xuất, ghi chú |

### Trạng thái Packing List

| Trạng thái | Ý nghĩa |
|---|---|
| *(Chưa có lượt xuất)* | PKL chưa được xuất lần nào |
| Đã xuất một phần | Đã xuất nhưng chưa đủ toàn bộ số lượng yêu cầu |
| Đã xuất hoàn tất | Tổng số lượng thực xuất đã đủ hoặc bằng số lượng cần |

---

## 5. Tạo phiếu xuất kho mới

### Bước 1 — Mở cửa sổ tạo phiếu

- Nhấn nút **"Xuất kho mới"** (màu xanh lá, góc trên phải cột trái).
- Cửa sổ **"Xuất kho Packing List"** hiện ra.

> Nút bị vô hiệu hóa nếu tài khoản không có quyền `Edit`. Xem mục [10](#10-các-trường-và-hành-vi-bị-khóa-hoặc-giới-hạn-thao-tác).

---

### Bước 2 — Quét mã hoặc nhập mã Packing List

Trong cửa sổ xuất kho, có ô nhập ở đầu với nhãn **"Quét QR Code hoặc nhập mã Packing List"**.

**Cách nhập:**
- Dùng máy quét QR để quét trực tiếp → mã tự điền vào ô.
- Hoặc gõ tay mã PKL (ví dụ: `#PL-2025-0047`) rồi nhấn **Enter**.

**Sau khi quét thành công:**
- Thông tin Packing List hiện ra bên dưới: mã invoice, người nhận, số thùng, danh sách chi tiết đơn hàng trong từng thùng.
- Có thể **quét thêm nhiều Packing List khác** vào cùng một phiếu xuất bằng cách lặp lại thao tác quét.

---

### Bước 3 — Xem chi tiết và điều chỉnh số lượng thực xuất

Sau khi quét, mỗi Packing List hiển thị danh sách thùng hàng. Mỗi thùng chứa các dòng đơn hàng với các cột:

| Cột | Mô tả |
|---|---|
| Mã đơn hàng / SKU | Định danh sản phẩm trong thùng |
| Số lượng cần (Cần:) | Số lượng theo kế hoạch cần xuất |
| SL thực xuất | Số lượng thực tế nhân viên nhập vào — **có thể chỉnh sửa** |
| Ghi chú | Ghi chú tự do theo từng dòng đơn hàng — **tùy chọn** |

**Cách điều chỉnh:**
- Nhấp vào ô **"SL thực xuất"** và nhập số lượng mong muốn.
- Hệ thống tự tính lại tổng PCS xuất ở thanh tiêu đề (`X / Y PCS`).
- Nhập **Ghi chú** nếu cần (không bắt buộc).

---

### Bước 4 — Xác nhận xuất kho

1. Nhấn nút **"Xác nhận xuất kho (N PL)"** ở cuối cửa sổ.
2. Hộp thoại xác nhận hiện ra với tóm tắt:
   - Tổng số Packing List đang xuất.
   - Tổng số thành phẩm.
3. Nhấn **"Xác nhận"** để lưu, hoặc **"Hủy"** để quay lại chỉnh sửa.

---

## 6. Điều kiện quét hợp lệ và không hợp lệ

### ✅ Quét hợp lệ — Packing List được thêm vào danh sách khi

| Điều kiện | Chi tiết |
|---|---|
| Mã tồn tại trong hệ thống | QR code hoặc mã PKL được tìm thấy |
| Còn tồn kho để xuất | Ít nhất một dòng đơn hàng trong PKL còn số lượng tồn kho > 0 |
| Chưa quét trong phiếu hiện tại | PKL đó chưa có trong danh sách đang quét |
| Chưa hoàn tất xuất kho | Trạng thái PKL chưa phải "Đã xuất hoàn tất" |

### ❌ Quét không hợp lệ — Hệ thống báo lỗi và bỏ qua khi

| Trường hợp | Thông báo hiển thị |
|---|---|
| Ô nhập trống, nhấn Enter | *"Vui lòng không để trống"* |
| Mã không tồn tại hoặc không tìm thấy | *"Không tìm thấy Packing List"* |
| PKL không còn tồn kho (tất cả dòng = 0) | *"Không tìm thấy Packing List"* |
| PKL đã được quét trước đó trong cùng phiếu | *"Packing List đã được quét"* |
| PKL đã xuất kho hoàn tất trước đây | *"Packing List đã được xuất kho"* |

---

## 7. Quy tắc nhập số lượng và xác nhận lưu

### Quy tắc nhập SL thực xuất

| Quy tắc | Chi tiết |
|---|---|
| Phải lớn hơn 0 | Không được để 0 hoặc để trống |
| Không được vượt quá "Số lượng cần" | SL thực xuất ≤ SL cần xuất theo kế hoạch |
| Phân loại hàng phải khớp | Số lượng đơn hàng trong PKL phải bằng số lượng đã được nhập kho trước đó |

> **Giải thích quy tắc thứ 3:** Trước khi xuất kho, hàng phải được **phân loại thành phẩm** (classification). Nếu số lượng phân loại không khớp với số lượng nhập kho, hệ thống coi dữ liệu chưa hợp lệ và không cho lưu.

### Điều kiện để nút "Xác nhận xuất kho" cho phép lưu

Tất cả các điều kiện sau phải đồng thời thỏa mãn:

- [x] Đã quét ít nhất **1 Packing List**.
- [x] Tất cả dòng đơn hàng có **SL thực xuất > 0**.
- [x] Không có dòng nào có **SL thực xuất > SL cần**.
- [x] Không có thùng hàng hoặc đơn hàng bị **xóa một phần** (xóa thùng con nhưng còn thùng cha).
- [x] Số lượng phân loại của tất cả đơn hàng **khớp với số lượng nhập kho**.

---

## 8. Kết quả sau khi lưu

Sau khi nhấn **"Xác nhận"** trong hộp thoại xác nhận:

1. **Phiếu xuất kho được tạo** — hệ thống sinh mã phiếu xuất duy nhất.
2. **Tồn kho được trừ** — số lượng thực xuất bị trừ khỏi kho tự động (xử lý ngầm, không chặn giao diện).
3. **Lịch sử được ghi** — phiếu xuất xuất hiện trong cột phải khi chọn PKL tương ứng.
4. **Danh sách tự làm mới** — cột trái cập nhật lại danh sách, Packing List vừa xuất hiển thị đúng trạng thái mới.
5. **Cửa sổ tự đóng** — cửa sổ "Xuất kho Packing List" đóng lại.

### Trạng thái Packing List sau khi lưu

| Trường hợp | Trạng thái mới |
|---|---|
| Tổng SL thực xuất = SL cần (tất cả dòng) | **Đã xuất hoàn tất** |
| Tổng SL thực xuất < SL cần (có dòng còn thiếu) | **Đã xuất một phần** |

---

## 9. Các thông báo lỗi thường gặp

### Lỗi khi quét mã

| Thông báo | Nguyên nhân | Cách xử lý |
|---|---|---|
| *"Vui lòng không để trống"* | Nhấn Enter khi ô nhập đang trống | Nhập mã trước khi nhấn Enter |
| *"Không tìm thấy Packing List"* | Mã không tồn tại, hoặc PKL không còn tồn kho | Kiểm tra lại mã PKL, hoặc xác nhận hàng đã được nhập kho chưa |
| *"Packing List đã được quét"* | PKL đó đã có trong danh sách hiện tại | Không cần quét lại, kiểm tra danh sách bên dưới |
| *"Packing List đã được xuất kho"* | PKL đã được xuất hoàn tất trong quá khứ | PKL này không thể xuất thêm |

### Lỗi khi nhập số lượng

| Thông báo | Nguyên nhân | Cách xử lý |
|---|---|---|
| *"Vui lòng nhập số lượng lớn hơn 0"* | Ô SL thực xuất bằng 0 hoặc bỏ trống | Nhập số lượng ≥ 1 |
| *"Vui lòng không xuất vượt quá số lượng cần"* | SL thực xuất > SL cần theo kế hoạch | Giảm số lượng về ≤ SL cần |

### Lỗi khi xác nhận lưu

| Thông báo | Nguyên nhân | Cách xử lý |
|---|---|---|
| *"Chưa có packing list nào được quét"* | Nhấn xác nhận khi chưa quét PKL nào | Quét ít nhất một PKL trước |
| *"Số lượng đơn hàng trong Packing List không bằng với số lượng đơn hàng được nhập kho. Vui lòng phân loại lại Packing List!"* | PKL chưa được phân loại thành phẩm hoặc phân loại chưa đủ | Vào chức năng **Phân loại thành phẩm**, hoàn thành phân loại cho PKL đó rồi quay lại xuất kho |

---

## 10. Các trường và hành vi bị khóa hoặc giới hạn thao tác

### Nút bị vô hiệu hóa theo quyền

| Nút / Thao tác | Điều kiện bị khóa |
|---|---|
| Nút **"Xuất kho mới"** | Tài khoản không có quyền `Edit` |
| Toàn bộ cửa sổ tạo phiếu | Tài khoản không có quyền `Edit` |

### Giới hạn trong cửa sổ tạo phiếu xuất

| Hành vi | Giải thích |
|---|---|
| Không thể đóng cửa sổ bằng phím Esc | Hệ thống chặn để tránh mất dữ liệu đang nhập |
| Không thể đóng cửa sổ bằng cách nhấp ra ngoài | Tương tự — phải bấm nút **Đóng / Hủy** hoặc **Xác nhận** |
| Dòng đơn hàng có SL cần = 0 tự động ẩn | Những dòng không còn gì để xuất không hiện lên để tránh nhầm lẫn |
| Thùng hàng bị ẩn nếu toàn bộ dòng bên trong có SL = 0 | Thùng trống không hiện trong danh sách |
| Packing List đã xuất hoàn tất không quét lại được | Hệ thống từ chối với thông báo *"Packing List đã được xuất kho"* |

---

[![](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/scaled-1680-/image-1774258477343-drawio.png)](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/image-1774258477343-drawio.png)

# Hướng dẫn phân loại Packing List

# Hướng dẫn sử dụng — Chức năng Phân loại Thành phẩm

---

## Mục lục

1. [Mục đích](#1-mục-đích)
2. [URL truy cập](#2-url-truy-cập)
3. [Mục lục chức năng trên trang](#3-mục-lục-chức-năng-trên-trang)
4. [Truy cập chức năng](#4-truy-cập-chức-năng)
5. [Tìm kiếm và xem lịch sử phân loại](#5-tìm-kiếm-và-xem-lịch-sử-phân-loại)
6. [Tạo phiếu phân loại mới](#6-tạo-phiếu-phân-loại-mới)
7. [Điều kiện quét hợp lệ và không hợp lệ](#7-điều-kiện-quét-hợp-lệ-và-không-hợp-lệ)
8. [Quy tắc nhập số lượng và xác nhận lưu](#8-quy-tắc-nhập-số-lượng-và-xác-nhận-lưu)
9. [Kết quả sau khi lưu](#9-kết-quả-sau-khi-lưu)
10. [Các thông báo lỗi thường gặp](#10-các-thông-báo-lỗi-thường-gặp)
11. [Các trường và hành vi bị khóa hoặc giới hạn thao tác](#11-các-trường-và-hành-vi-bị-khóa-hoặc-giới-hạn-thao-tác)

---

## 1. Mục đích

Chức năng **Phân loại thành phẩm** dùng để ghi nhận việc phân bổ số lượng hàng hóa từ kho vào từng Packing List theo đơn hàng thực tế. Có **3 loại phân loại**:

| Loại | Ý nghĩa | Tồn kho thay đổi |
|---|---|---|
| **Nhập kho** | Hàng từ PKL chuyển vào kho chung (phân loại để giảm bớt dư thừa) | ↓ Giảm |
| **Nhập PKL** | Hàng từ kho phân bổ vào PKL (bổ sung đủ số lượng còn thiếu) | ↑ Tăng |
| **Nhập PKL Customer** | Chuyển hàng từ một PKL gốc sang PKL khách hàng | Cập nhật chéo |

> **Lưu ý quan trọng:** Phân loại phải hoàn thành **trước khi xuất kho**. Nếu bỏ qua bước này, chức năng Xuất kho sẽ báo lỗi *"Phân loại chưa khớp"* và không cho lưu phiếu xuất.

---

## 2. URL truy cập

| Ngôn ngữ | Đường dẫn |
|---|---|
| Tiếng Việt | `/vi/finished-product-classification` |
| Tiếng Anh | `/en/finished-product-classification` |

---

## 3. Mục lục chức năng trên trang

Trang được chia làm hai cột:

- **Cột trái:** Lịch sử các phiếu phân loại đã tạo — tìm kiếm, lọc, chọn để xem chi tiết.
- **Cột phải:** Chi tiết từng phiếu được chọn — hiển thị danh sách đơn hàng, số lượng phân loại, số lượng tồn.

Phía trên cột trái có **3 nút tạo phiếu mới**:

| Nút | Loại phân loại |
|---|---|
| Nhập kho | Phân loại nhập kho (giảm tồn) |
| Nhập PKL | Phân loại nhập PKL (tăng tồn) |
| Nhập PKL Customer | Phân loại chuyển sang PKL khách hàng |

---

## 4. Truy cập chức năng

### Yêu cầu quyền

| Quyền | Cho phép làm gì |
|---|---|
| `View` | Vào trang, xem lịch sử, xem chi tiết |
| `Edit` | Tạo phiếu phân loại mới (3 nút phân loại mới được kích hoạt) |

Nếu không có quyền `View`, hệ thống hiển thị trang **"Từ chối truy cập"**.  
Nếu chỉ có quyền `View` (không có `Edit`), các nút **Nhập kho / Nhập PKL / Nhập PKL Customer** bị vô hiệu hóa.

### Yêu cầu tài khoản

Tài khoản đăng nhập **phải được gán Chi nhánh**. Nếu chưa được gán, khi cố quét mã hệ thống sẽ báo lỗi:  
*"Tài khoản chưa được gán Chi nhánh. Vui lòng liên hệ Admin."*

---

## 5. Tìm kiếm và xem lịch sử phân loại

### Tìm kiếm theo mã

- Nhập mã phiếu hoặc mã Packing List vào ô tìm kiếm ở đầu cột trái.

### Lọc nâng cao

Nhấn biểu tượng **Bộ lọc** (góc trên cột trái) để mở bảng lọc:

| Trường lọc | Mô tả |
|---|---|
| Loại phân loại | Tất cả / Nhập PKL / Nhập kho |
| Từ ngày | Ngày tạo phiếu (định dạng `dd-mm-yyyy`) |
| Đến ngày | Ngày tạo phiếu (định dạng `dd-mm-yyyy`) |
| Người tạo | Tên người tạo phiếu |

Nhấn **"Áp dụng"** để lọc, **"Xóa lọc"** để đặt lại.

> Khi có bộ lọc đang hoạt động, biểu tượng Bộ lọc hiển thị dấu chấm màu để nhắc nhở.

### Xem chi tiết phiếu

1. Nhấp vào một phiếu trong danh sách bên trái.
2. Cột phải hiển thị chi tiết phiếu đó:

| Thông tin | Mô tả |
|---|---|
| Mã phiếu | Mã định danh phiếu phân loại |
| Loại | Badge hiển thị: **Nhập kho** / **Nhập PKL** / **Nhập PKL Customer** |
| Người tạo | Họ tên người thực hiện |
| Thời gian tạo | Ngày giờ tạo phiếu |
| Mã đơn hàng / SKU | Tên và mã định danh sản phẩm |
| SL phân loại | Số lượng đã phân loại trong lần này |
| SL tồn | Số lượng tồn kho sau phân loại |
| SL cần | Số lượng cần phân loại theo kế hoạch |

Nhấn **"Chi tiết"** trên từng dòng đơn hàng để xem danh sách chi tiết theo từng thùng và Packing List.

---

## 6. Tạo phiếu phân loại mới

### 6.1. Phân loại Nhập kho (`Nhập kho`)

Dùng khi hàng đã được **nhập vào kho nhiều hơn đơn hàng yêu cầu**, cần phân loại để điều chỉnh về đúng số lượng.

**Bước 1 — Mở cửa sổ phân loại**

Nhấn nút **"Nhập kho"** → cửa sổ **"Phân loại nhập kho"** (viền xanh lá) mở ra.

**Bước 2 — Quét mã Packing List**

- Ô nhập ở trên cùng: *"Quét mã PKL"*.
- Dùng máy quét QR hoặc nhập tay mã PKL → nhấn **Enter**.
- Thông tin PKL và danh sách thùng hàng / đơn hàng hiện ra bên dưới.
- Có thể quét thêm nhiều PKL khác vào cùng một phiếu.

**Bước 3 — Nhập số lượng phân loại**

Mỗi dòng đơn hàng hiển thị:

| Cột | Ý nghĩa |
|---|---|
| Mã / Tên đơn hàng | Định danh sản phẩm |
| SL cần | Số lượng hệ thống tính cần phân loại (`nhập kho − đơn hàng`) |
| SL thực phân loại | **Nhập tay** — số lượng thực tế phân loại |

> **Cột trái:** Nhấp vào một PKL trong danh sách để xem chi tiết thùng hàng của PKL đó ở cột phải.

**Bước 4 — Xác nhận**

- Kiểm tra tổng `X / Y PCS` ở thanh tiêu đề cửa sổ.
- Nhấn **"Xác nhận"** → hộp thoại xác nhận hiện ra → nhấn **"Xác nhận"** lần nữa để lưu.

---

### 6.2. Phân loại Nhập PKL (`Nhập PKL`)

Dùng khi **đơn hàng còn thiếu số lượng nhập kho**, cần phân bổ thêm hàng từ kho vào PKL.

**Bước 1 — Mở cửa sổ phân loại**

Nhấn nút **"Nhập PKL"** → cửa sổ **"Phân loại nhập PKL"** (viền xanh dương) mở ra.

**Bước 2 — Quét mã Packing List**

Thao tác tương tự mục 6.1. Hệ thống tự động tính:

- **SL cần** = `đơn hàng − nhập kho` (số lượng còn thiếu).
- **SL gợi ý** = số lượng tồn kho còn có thể phân bổ cho đơn hàng này (đã trừ các PKL khác đang quét).

**Bước 3 — Nhập / điều chỉnh số lượng**

- Hệ thống tự điền SL gợi ý vào ô. Có thể sửa lại nếu cần.
- Validation nếu cùng một đơn hàng xuất hiện trên nhiều PKL, hệ thống kiểm tra tổng cộng không vượt quá tồn kho.

**Bước 4 — Xác nhận** — tương tự mục 6.1.

---

### 6.3. Phân loại Nhập PKL cho khách hàng (`Nhập PKL Customer`)

Dùng để chuyển hàng từ **PKL nguồn (inbound)** sang **PKL cho khách hàng (customer)**.

**Bước 1 — Mở cửa sổ**

Nhấn nút **"Nhập PKL Customer"** → cửa sổ có **2 ô quét riêng biệt**.

**Bước 2 — Quét PKL nguồn (bên trái)**

- Ô **"Quét mã PKL"**: quét QR hoặc nhập mã PKL gốc (PKL chứa hàng trong kho).
- PKL được thêm vào danh sách bên trái.

**Bước 3 — Quét PKL khách hàng (bên phải)**

- Ô **"Quét mã Packing List Customer"**: quét QR hoặc nhập mã PKL khách hàng.
- Chỉ chấp nhận **PKL loại Customer** — nếu quét PKL thường sẽ báo lỗi: *"Vui lòng quét Packing List Customer."*

**Bước 4 — Nhập số lượng và xác nhận** — tương tự các bước trên.

---

## 7. Điều kiện quét hợp lệ và không hợp lệ

### ✅ Quét hợp lệ — PKL được thêm vào khi

| Điều kiện | Chi tiết |
|---|---|
| Mã tồn tại | QR code / mã PKL được tìm thấy trong hệ thống |
| Chưa xuất kho | Trạng thái PKL không phải `completed_outbound` hoặc `partial_outbound` |
| Chưa có trong danh sách | PKL chưa được quét trong phiếu đang làm |
| Tài khoản có chi nhánh | Người dùng đã được gán chi nhánh |

### ❌ Quét không hợp lệ — Hệ thống báo lỗi khi

| Trường hợp | Thông báo |
|---|---|
| Ô nhập trống | *"Vui lòng không để trống"* |
| Mã không tồn tại | *"Không tìm thấy Packing List"* |
| PKL đã được xuất kho | *"Packing List đã xuất kho"* |
| PKL đã có trong danh sách | *"Packing List đã tồn tại trong danh sách"* |
| PKL không khả dụng (mọi thùng đều trống) | *"Packing List không khả dụng"* |
| Quét PKL thường vào ô PKL Customer | *"Vui lòng quét Packing List Customer."* |
| Tài khoản chưa có chi nhánh | *"Tài khoản chưa được gán Chi nhánh. Vui lòng liên hệ Admin."* |

---

## 8. Quy tắc nhập số lượng và xác nhận lưu

### Quy tắc chung cho mọi loại phân loại

| Quy tắc | Chi tiết |
|---|---|
| Phải lớn hơn 0 | Không được để trống hoặc nhập 0 |
| Chỉ nhập số nguyên dương | Không nhập số thập phân, chữ cái, ký tự đặc biệt |
| Tối đa 12 chữ số | Hệ thống tự chặn khi vượt giới hạn |

### Quy tắc riêng theo loại

**Nhập kho (giảm tồn):**
- SL thực phân loại ≤ SL nhập kho của đơn hàng đó.
- Lỗi nếu vượt: *"Không nhập vượt quá số lượng đang có của đơn hàng (X)"*

**Nhập PKL (tăng tồn):**
- Tổng SL phân loại của cùng một đơn hàng trên nhiều PKL ≤ tổng tồn kho khả dụng.
- Lỗi nếu vượt: *"Không nhập vượt quá số tồn (X)"*
- Validation chạy theo thời gian thực khi nhập — thông báo lỗi hiện ngay dưới ô nhập.

### Điều kiện để lưu phiếu thành công

Tất cả điều kiện sau phải đồng thời thỏa mãn:

- [x] Đã quét ít nhất **1 Packing List**.
- [x] Tất cả dòng đơn hàng (không bị xóa, không trống) có **SL > 0**.
- [x] Không có dòng nào còn **cảnh báo lỗi** (ô noti không rỗng).
- [x] Tài khoản có **chi nhánh hợp lệ**.
- [x] Phiên đăng nhập **còn hiệu lực**.

---

## 9. Kết quả sau khi lưu

Sau khi xác nhận thành công:

1. **Phiếu phân loại được tạo** — mã phiếu duy nhất được sinh tự động.
2. **Tồn kho cập nhật:**
   - **Nhập kho:** tồn kho **giảm** theo SL phân loại.
   - **Nhập PKL:** tồn kho **tăng** theo SL phân loại.
3. **Lịch sử cập nhật** — phiếu mới xuất hiện đầu danh sách bên trái với badge loại tương ứng.
4. **Cửa sổ tự đóng** — màn hình chính tự làm mới.

### Trạng thái Packing List sau phân loại

| Trường hợp | Trạng thái |
|---|---|
| Tổng SL thực phân loại = SL cần (tất cả dòng) | **Phân loại hoàn tất** (`completed_classification`) |
| Tổng SL thực phân loại < SL cần (có dòng còn thiếu) | **Phân loại một phần** (`partial_classification`) |

> PKL ở trạng thái **phân loại một phần** vẫn có thể xuất kho nhưng hệ thống sẽ báo không khớp nếu tổng số lượng đơn hàng chưa đủ.

---

## 10. Các thông báo lỗi thường gặp

### Lỗi khi quét mã

| Thông báo | Nguyên nhân | Cách xử lý |
|---|---|---|
| *"Vui lòng không để trống"* | Nhấn Enter khi ô trống | Nhập mã trước khi Enter |
| *"Không tìm thấy Packing List"* | Mã không tồn tại | Kiểm tra lại mã PKL |
| *"Packing List đã xuất kho"* | PKL đã được xuất hoàn tất | PKL này không phân loại được nữa |
| *"Packing List đã tồn tại trong danh sách"* | Quét trùng | Không cần quét lại |
| *"Packing List không khả dụng"* | PKL không còn dữ liệu hợp lệ | Kiểm tra lại trạng thái PKL |
| *"Tài khoản chưa được gán Chi nhánh..."* | Tài khoản thiếu cấu hình | Liên hệ Admin để gán chi nhánh |

### Lỗi khi nhập số lượng

| Thông báo | Nguyên nhân | Cách xử lý |
|---|---|---|
| *"Vui lòng nhập số lượng lớn hơn 0"* | Ô để trống hoặc nhập 0 | Nhập số ≥ 1 |
| *"Không nhập vượt quá số lượng đang có của đơn hàng (X)"* | SL > SL nhập kho (mode Nhập kho) | Giảm SL về ≤ X |
| *"Không nhập vượt quá số tồn (X)"* | Tổng SL vượt tồn kho (mode Nhập PKL) | Giảm SL về ≤ X |

### Lỗi khi xác nhận lưu

| Thông báo | Nguyên nhân | Cách xử lý |
|---|---|---|
| *"Vui lòng kiểm tra lại số lượng phân loại"* | Còn dòng có SL = 0 hoặc có lỗi validation | Kiểm tra và sửa các ô đang báo lỗi |
| *"Không có dữ liệu hợp lệ để lưu"* | Tất cả thùng/đơn hàng đã bị xóa hoặc trống | Quét lại PKL và nhập số lượng |
| *"Phiên đăng nhập không hợp lệ..."* | Session hết hạn | Tải lại trang và đăng nhập lại |
| *"Không thể tạo phiếu phân loại"* | Lỗi từ phía hệ thống | Thử lại, hoặc liên hệ bộ phận kỹ thuật |

---

## 11. Các trường và hành vi bị khóa hoặc giới hạn thao tác

### Nút bị vô hiệu hóa theo quyền

| Nút / Thao tác | Điều kiện bị khóa |
|---|---|
| Nút **Nhập kho** | Tài khoản không có quyền `Edit` |
| Nút **Nhập PKL** | Tài khoản không có quyền `Edit` |
| Nút **Nhập PKL Customer** | Tài khoản không có quyền `Edit` |

### Hành vi bị giới hạn trong cửa sổ phân loại

| Hành vi | Giải thích |
|---|---|
| Không thể đóng bằng phím **Esc** | Hệ thống chặn để tránh mất dữ liệu đang nhập |
| Không thể đóng bằng cách nhấp ra ngoài | Tương tự — phải bấm **Hủy** hoặc **Xác nhận** |
| Dòng đơn hàng có SL nhập kho = 0 tự động bị ẩn / đánh dấu xóa | Không hiển thị những dòng không liên quan |
| Thùng hàng tự động bị xóa khi tất cả đơn hàng bên trong bị xóa | Dọn dẹp giao diện tự động |
| PKL tự động bị xóa khỏi danh sách khi tất cả thùng bị xóa | Tương tự |
| Ô SL thực phân loại chỉ nhận số nguyên | Không nhập được số thập phân hoặc chữ |
| Giới hạn 12 chữ số cho ô số lượng | Hệ thống tự chặn khi nhập quá |
| Validation lỗi hiển thị khi nhập | Không cần nhấn Xác nhận mới thấy lỗi |

### Lưu ý về xóa thùng hàng / đơn hàng

Trong cửa sổ phân loại, có nút **xóa** (thùng rác) ở cạnh mỗi thùng hàng và đơn hàng:

- Xóa thùng hàng → tất cả đơn hàng trong thùng đó bị bỏ qua khi lưu.
- Xóa đơn hàng → đơn hàng đó bị bỏ qua khi lưu.
- Khi tất cả thùng của một PKL bị xóa → PKL đó tự động biến mất khỏi danh sách.
- **Thao tác này không thể hoàn tác** trong phiếu hiện tại — nếu xóa nhầm, cần đóng cửa sổ và tạo lại.

---

# Hướng dẫn tồn kho đơn hàng (LOGISTIC)

## 1) Mục đích

Tài liệu này hướng dẫn người dùng thao tác **Đơn hàng tồn kho** trên WMS, gồm:

- Tìm kiếm danh sách đơn hàng có tồn kho (logistic transfer)
- Xem nhanh **Tồn kho** và **Tổng số lượng (Order)** trên từng thẻ đơn
- Chọn đơn để xem **tổng quan số liệu** và **lịch sử xuất nhập / phân loại** theo từng tab
- Hiểu phân trang và các thông báo lỗi thường gặp

## 2) URL truy cập

- Menu: **Kho** → mục tương ứng chức năng tồn kho đơn hàng (theo quyền được gán trên hệ thống)
- <a target="__blank" href="https://logistic-client.datacenter.tms-s.vn/vi/warehouse-inventory">https://logistic-client.datacenter.tms-s.vn/vi/warehouse-inventory</a>

## 3) Mục lục

- Truy cập chức năng
- Tìm kiếm và danh sách đơn hàng tồn kho
- Xem chi tiết đơn hàng (thống kê + bảng lịch sử)
- Tab Thông tin tồn kho
- Tab Lịch sử nhập kho
- Tab Lịch sử xuất kho
- Tab Lịch sử phân loại
- Phân trang
- Các thông báo lỗi thường gặp
- Quyền truy cập và giới hạn
- Sơ đồ luồng (Diagram)

## 4) Truy cập chức năng

1. Đăng nhập WMS với tài khoản được cấp quyền xem màn tồn kho.
2. Mở nhóm menu **Kho**, chọn mục **Đơn hàng tồn kho** (hoặc tên hiển thị theo quyền trên menu).
3. Màn hình chia **2 cột**:
   ###### **Trái:** danh sách đơn hàng + ô tìm kiếm
   ###### **Phải:** chi tiết đơn đang chọn (thống kê + các tab lịch sử)

## 5) Tìm kiếm và danh sách đơn hàng tồn kho

### 5.1 Tìm kiếm

- Nhập từ khóa vào ô tìm kiếm, nhấn **Enter** để gửi tìm kiếm.
- Gợi ý: tìm theo:
-   **Mã đơn**
- **Sản phẩm**
-  **Sku** 


### 5.2 Danh sách đơn hàng (Left Panel)

Mỗi thẻ hiển thị:

- **Mã đơn hàng**
- Trạng thái **Còn hàng** (badge)
- **Tồn kho:** số lượng hàng đang có trong kho
- **Tổng số lượng:** số lượng khi tạo đơn hàng

Hệ thống có thể **tự chọn đơn đầu tiên** trong danh sách khi tải xong; khi đổi trang/tìm kiếm, nếu đơn đang chọn không còn trong danh sách thì sẽ chọn lại đơn hợp lệ đầu tiên.

## 6) Xem chi tiết đơn hàng

Khi chọn một đơn ở cột trái, cột phải hiển thị:

### 6.1 Thông tin định danh

- **Mã đơn** và **tên đơn / mô tả**

### 6.2 Bốn ô thống kê

| Ô | Ý nghĩa (theo giao diện) |
|---|-------------------------|
| **Tổng số lượng** | Tổng số lượng đơn hàng (Order) |
| **Tồn kho** | Số lượng còn trong kho |
| **Chưa phân loại** | Số lượng chưa phân loại (theo dữ liệu hệ thống) |
| **Đã xuất** | Tổng số lượng xuất (đồng bộ từ tổng hợp lịch sử khi tải dữ liệu chi tiết) |

### 6.3 Khối “Lịch sử xuất nhập kho”

Phía dưới là vùng bảng với **4 tab**; mỗi lần **đổi tab**, hệ thống **tải dữ liệu** tương ứng (trang 1).  
Phạm vi dữ liệu theo ngữ cảnh **kho logistic transfer**

## 7) Tab **Thông tin tồn kho**

Hiển thị phân bổ tồn theo dòng (nếu có dữ liệu), các cột gồm:

- **Phân loại:** Đã phân loại / Chưa phân loại
- **Packing List / Invoice**
- **Thùng**
- **Số lượng**
- **Ngày nhập** (cập nhật)
- **Kho**

Nếu không có dữ liệu: hiển thị **Không có dữ liệu tồn kho**.

## 8) Tab **Lịch sử nhập kho**

Các cột gồm:

- **Loại:** Theo PL / Trực tiếp
- **Mã nhập kho**
- **PL / Invoice / Kiện**
- **Thùng**
- **Số lượng** (hiển thị dạng **+** số lượng nhập)
- **Ngày tạo**
- **Người tạo**

Không có dữ liệu: **Không có lịch sử nhập kho**.

## 9) Tab **Lịch sử xuất kho**

Các cột gồm:

- **Loại:** Theo PL / Trực tiếp
- **Mã xuất kho**
- **PL / Invoice / Kiện**
- **Thùng**
- **Số lượng** (hiển thị dạng **-** số lượng xuất)
- **Ngày xuất**
- **Người tạo**

Không có dữ liệu: **Không có lịch sử xuất kho**.

## 10) Tab **Lịch sử phân loại**

Các cột gồm:

- **Mã phân loại**
- **Packing List**
- **Thùng**
- **Số lượng** (có dấu **+** hoặc **-** tùy loại điều chỉnh)
- **Loại:** Nhập / Xuất (theo badge)
- **Ngày tạo**
- **Người tạo**

Không có dữ liệu: **Không có lịch sử phân loại**.

## 11) Phân trang

- **Danh sách đơn bên trái:** phân trang theo cấu hình API (kích thước trang do hệ thống trả về).
- **Bảng trong từng tab:** mặc định **20 dòng/trang**; nếu có nhiều hơn một trang, thanh phân trang hiển thị **dưới bảng** của tab đang mở.

## 12) Các thông báo lỗi thường gặp

- `Không thể tải danh sách đơn hàng tồn kho` — lỗi khi gọi API danh sách đơn.
- `Không thể tải dữ liệu chi tiết` — lỗi khi tải dữ liệu một trong các tab lịch sử.

## 13) Quyền truy cập và giới hạn

- Màn hình được bọc **kiểm tra quyền**; không đủ quyền sẽ không vào được trang (theo cấu hình WMS).
- Chức năng này **xem và tra cứu** lịch sử; không mô tả thao tác chỉnh sửa tồn kho trực tiếp trên màn này (nhập/xuất/phân loại thực hiện ở các màn chuyên biệt khác).

## 14) Sơ đồ luồng (Mermaid)

### 14.1 Flow tổng quan – tra cứu tồn kho đơn hàng
<a href="https://drive.google.com/file/d/1nTFBmTbjoprVm1lSH0-8ONbxiF0-pWhK/view?usp=sharing">
 Warehouse-Inventory Diagram
</a>

[![Screenshot from 2026-03-23 23-05-14.png](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/scaled-1680-/screenshot-from-2026-03-23-23-05-14.png)](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/screenshot-from-2026-03-23-23-05-14.png)