> ## Documentation Index
> Fetch the complete documentation index at: https://tomotek.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Luồng ngoại lệ & Xử lý lỗi

## Danh sách lỗi nghiệp vụ và cách xử lý

| Mã lỗi | Mô tả lỗi | Nguyên nhân | Hành động hệ thống | Hướng dẫn người dùng |
| - | - | - | - | - |
| `STOCK_001` | **Số lượng tồn kho không đủ** | Khi cố gắng xuất nhiều hơn số lượng tồn kho hiện có | Từ chối giao dịch, không ghi log | Vui lòng kiểm tra lại số lượng tồn kho hoặc thực hiện điều chỉnh |
| `STOCK_002` | **Tồn kho bị âm** | Xảy ra khi có trục trặc đồng thời nhiều giao dịch trên cùng sản phẩm | Cho phép hoàn thành giao dịch, tạo cảnh báo mức cao | Yêu cầu kiểm kê và điều chỉnh tồn kho ngay lập tức |
| `STOCK_003` | **Lô hàng đã hết hạn** | Cố gắng xuất hàng từ lô đã hết hạn | Từ chối xuất hàng từ lô này | Chuyển sang lô hàng khác chưa hết hạn. Merchant không được bán, chỉ được huỷ lô hàng đã hết hạn |
| `STOCK_004` | **Nhập trùng lô hàng** | Tạo 2 lô hàng với cùng mã lô nhà cung cấp | Hiển thị cảnh báo, cho phép tiếp tục | Xác nhận đây không phải lỗi nhập trùng lặp |
| `STOCK_005` | **Giá nhập thay đổi** | Giá nhập cùng sản phẩm khác với lần nhập trước > 15% | Hiển thị cảnh báo, cho phép tiếp tục | Xác nhận giá nhập là chính xác |
| `STOCK_006` | **Số lượng lô âm** | Lô hàng có số lượng nhỏ hơn 0 | Tạo cảnh báo hệ thống, khóa lô hàng | Liên hệ kỹ thuật để kiểm tra log hệ thống |
| `STOCK_007` | **Không thể xóa sản phẩm** | Cố gắng xóa sản phẩm đã có giao dịch tồn kho | Từ chối xóa | Chỉ cho phép thay đổi trạng thái thành `Ngừng bán` hoặc `Lưu trữ`. Không thể xóa cứng sản phẩm đã có lịch sử. |
| `STOCK_008` | **Log không khớp** | Hệ thống phát hiện tổng log không khớp với số lượng tồn cuối | Tạo cảnh báo hệ thống cấp cao nhất | Tạm khóa toàn bộ thao tác kho, yêu cầu kiểm kê toàn bộ |

***

## Edge Cases

### 1. Đồng thời nhiều giao dịch trên cùng sản phẩm

* Khi có 2 yêu cầu xuất hàng cùng lúc trên cùng sản phẩm:
  * Giao dịch đầu tiên được xử lý bình thường
  * Giao dịch thứ hai sẽ nhận lỗi `STOCK_001`
  * Không có giao dịch nào được đợi trong hàng đợi

### 2. Hàng bán được trả lại

* Khi khách hàng trả hàng đã bán:
  * Hệ thống không tự động trả lại vào lô hàng cũ
  * Tạo một giao dịch nhập kho riêng biệt với lý do "Trả hàng"
  * Giá vốn lấy theo giá bán của hóa đơn gốc

### 3. Sản phẩm đổi tên

* Khi đổi tên sản phẩm:
  * Tất cả lô hàng cũ sẽ được cập nhật tên mới
  * Tất cả log cũ vẫn giữ nguyên tên lúc tạo giao dịch
  * Sẽ có ghi chú rõ ràng về lịch sử thay đổi tên sản phẩm

***

## Fail-safe

1. **Nếu database bị sập**: Tất cả thao tác ghi sẽ bị chặn, chỉ cho phép xem dữ liệu
2. **Nếu không ghi được log**: Toàn bộ giao dịch sẽ bị rollback hoàn toàn
3. **Nếu phát hiện số liệu không cân bằng**: Hệ thống tự động vào chế độ chỉ đọc
4. **Mọi lỗi ngoại lệ không được liệt kê**: Hệ thống luôn từ chối giao dịch thay vì cho phép thực hiện với dữ liệu sai


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.