> ## 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-16: Xác nhận đơn hàng

> Pet Owner xác nhận thông tin giao hàng, thanh toán và kiểm tra lại danh sách đặt hàng

Là một Pet Owner, tôi muốn xác nhận thông tin giao hàng, chọn phương thức thanh toán và kiểm tra lại danh sách chủng loại sản phẩm để hoàn tất việc đặt hàng.

## Acceptance Criteria (AC)

| Feature | Acceptance Criteria | Ràng buộc & Ghi chú |
| :- | :- | :- |
| **1. Thông tin Nhận hàng** | • Hiển thị địa chỉ mặc định của người dùng, tên người nhận và Số điện thoại. • Cung cấp nút thay đổi địa chỉ (Điều hướng về module Profile/Địa chỉ). | • Bắt buộc phải có địa chỉ thì mới được đặt hàng. |
| **2. Danh sách Sản phẩm** | • Liệt kê các sản phẩm được chọn từ giỏ hàng, gom theo từng Merchant. • Chi tiết: Ảnh, Tên SP, Số lượng, Đơn giá. • Cung cấp ô "Lời nhắn" (Note) cho từng Merchant. | • Textbox lời nhắn tối đa 200 ký tự. |
| **3. Phí Vận chuyển** | • Tùy thuộc vào Cấu hình Giao hàng của Merchant (US-MER-30). • **Dùng ViettelPost:** Hệ thống tự tính phí ship và cộng vào hóa đơn. • **Tự vận chuyển:** Phí ship trên hóa đơn hiển thị là `0đ` kèm thông báo: *"Shop sẽ liên hệ để báo phí ship và thu ngoài"*. | • Khách hàng không được quyền chọn phương thức vận chuyển. |
| **4. Voucher & Giảm giá** | • **Shop Voucher:** Áp dụng giảm giá riêng cho các sản phẩm của Shop đó. • **Hệ thống Voucher:** Áp dụng giảm tổng đơn. • Nút chọn Voucher (Chỉ hiện các voucher đủ điều kiện). | • Không cho phép chọn cùng lúc 2 voucher của cùng 1 Shop. |
| **5. Phương thức thanh toán** | • Thanh toán 100% qua hình thức quét mã QR. | • Không hỗ trợ COD. |
| **6. Bảng kê Tổng tiền** | • Liệt kê: Tổng tiền hàng, Tổng phí vận chuyển (cộng dồn), Tổng giảm giá. • Tính ra: **Tổng thanh toán** = Tiền hàng + Phí Ship - Giảm giá. | • **Tổng thanh toán** $\ge 0$. |
| **7. Đặt hàng** | • Nhấn nút "Đặt hàng". Hệ thống tạo mã đơn hàng sơ bộ. • Chuyển sang màn hình "Thanh toán QR" (US-OWN-22). | • Mã đơn hàng phải sinh tự động và Unique. |

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

* **Thiếu thông tin địa chỉ:**
  * **Validation:** Nhấn "Đặt hàng" nhưng user chưa cài đặt địa chỉ nhận hàng.
  * **Error UI:** Scroll màn hình lên vùng Địa chỉ và hiển thị Tooltip: *"Vui lòng thêm địa chỉ nhận hàng trước khi tiếp tục."*
* **Sản phẩm hết hàng phút chót:**
  * **Flow:** API gọi check tồn kho cuối cùng trả về lỗi hết hàng cho 1 item.
  * **Error UI:** Trả người dùng về màn hình Giỏ hàng (US-OWN-15) với thông báo: *"Sản phẩm \[Tên SP] vừa hết hàng. Vui lòng kiểm tra lại giỏ hàng."*
* **Chưa thanh toán / Quá hạn thanh toán:**
  * **Flow:** User tới bước thanh toán QR nhưng thoát app hoặc không chuyển khoản trong vòng 24 giờ.
  * **Error UI:** Đơn hàng tự động bị huỷ. Thông báo: *"Đơn hàng đã bị huỷ do quá hạn thanh toán. Vui lòng đặt lại."*

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

1. **Rule 1: Chuyển hướng thanh toán**: Sau khi check tồn kho thành công, user không nhìn thấy "Đặt hàng thành công" ngay mà bắt buộc phải qua bước Thanh toán (Pending Payment). Việc tách đơn chỉ diễn ra **SAU KHI** đã nhận được tiền.
2. **Rule 2: Inventory Check (Kiểm tra kho)**: Tại thời điểm nhấn "Đặt hàng", hệ thống chỉ kiểm tra số lượng tồn kho chứ **chưa Reserve**. Việc Reserve chỉ xảy ra khi quá trình thanh toán hoàn tất (để tránh giam kho vô ích khi user không trả tiền).


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