> ## 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.

# US-OWN-18: Mua lại (Re-order)

> Tính năng mua lại nhanh từ lịch sử các đơn hàng cũ

Là một Pet Owner, tôi muốn có tính năng "Mua lại" từ các đơn hàng cũ để nhanh chóng thêm các sản phẩm quen thuộc vào giỏ hàng mà không cần phải tìm kiếm lại từng món.

## Acceptance Criteria (AC)

| Feature | Acceptance Criteria | Ràng buộc & Ghi chú |
| :- | :- | :- |
| **1. Nút tác vụ "Mua lại"** | • Vị trí: Hiển thị trên Order Card (ở Tab Hoàn tất/Đã huỷ) và trong màn hình Chi tiết đơn hàng. • Giao diện: Icon vòng lặp hoặc Nút button rõ ràng. | • Không hiển thị ở các trạng thái đang xử lý (Chờ xác nhận, Đang chuẩn bị, v.v.). |
| **2. Logic thêm sản phẩm** | • Khi nhấn nút, hệ thống truy xuất toàn bộ danh sách Item trong đơn cũ đó. • Tự động đẩy các item đó vào Giỏ hàng hiện tại của khách. • Giữ nguyên **Số lượng** như lần đặt trước. • Cập nhật **Giá tiền** lấy theo giá bán mới nhất hiện tại của Merchant. | • Nếu giỏ hàng đã có sẵn Item A, hệ thống sẽ cộng dồn số lượng. |
| **3. Kiểm tra tính khả dụng (Availability Check)** | • Hệ thống lọc ra các sản phẩm hợp lệ: Còn hàng và Merchant còn kinh doanh (Active). • Các sản phẩm không hợp lệ sẽ bị tự động loại khỏi lượt Re-order. | • Không thêm các sản phẩm đã xoá hoặc ngừng kinh doanh vào giỏ. |
| **4. Xử lý tồn kho thực tế** | • Nếu số lượng trong đơn cũ $>$ tồn kho thực tế hiện tại, hệ thống tự động chốt số lượng thêm vào giỏ bằng đúng số lượng tồn kho tối đa. | • VD: Mua cũ 5, tồn mới 2 -> Chỉ add 2 vào giỏ. |
| **5. Phản hồi và Điều hướng** | • Hiển thị Toast Message tổng kết quá trình xử lý. • **Điều hướng:** Tự động đẩy màn hình sang Trang Giỏ hàng (US-OWN-15) để người dùng tiếp tục checkout. | • User experience phải mượt mà, không giật lag. |

## Luồng ngoại lệ (Exception Flows) & Validations

* **Một phần sản phẩm không khả dụng:**
  * **Flow:** Đơn cũ có Hạt (Còn hàng) và Đồ chơi (Hết hàng). User bấm Mua lại.
  * **Error UI:** Hệ thống chỉ thêm Hạt vào giỏ. Hiển thị Popup cảnh báo: *"Sản phẩm 'Đồ chơi' hiện không còn khả dụng và đã bị loại khỏi giỏ hàng."*
* **Toàn bộ đơn cũ không còn khả dụng:**
  * **Flow:** Tất cả mặt hàng trong đơn cũ đều đã bị xoá hoặc hết hàng.
  * **Error UI:** Không điều hướng sang trang Giỏ hàng. Hiển thị Toast lỗi: *"Rất tiếc, tất cả các sản phẩm trong đơn hàng này hiện đã hết hàng hoặc ngừng kinh doanh."*
* **Cập nhật số lượng theo tồn kho:**
  * **Flow:** User mua lại 5 gói Pate, nhưng Shop chỉ còn 2.
  * **Error UI:** Thêm 2 gói vào giỏ, và báo Toast: *"Pate chỉ còn 2 sản phẩm, chúng tôi đã cập nhật lại số lượng tối đa cho bạn."*

## Quy tắc nghiệp vụ (Business Rules)

1. **Rule 1: Bỏ qua Voucher cũ**: Tính năng Mua lại (Re-order) chỉ sao chép **Mã Sản phẩm** và **Số lượng**. Hệ thống hoàn toàn bỏ qua các Mã Voucher hoặc Giảm giá đã được áp dụng trong lịch sử đơn hàng đó. Người dùng phải tự chọn lại Voucher ở Giỏ hàng.
2. **Rule 2: Cộng dồn Giỏ hàng (Cart Merging)**: Nếu giỏ hàng hiện tại đã có 2 gói Hạt X, và user nhấn Mua lại một đơn cũ có chứa 3 gói Hạt X. Hệ thống sẽ merge thành $2 + 3 = 5$ gói Hạt X trong giỏ. Quá trình merge này phải check lại điều kiện chặn số lượng tồn kho tối đa.


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