> ## 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-22: Thanh toán đơn hàng qua QR

> Pet Owner quét mã QR để thanh toán đơn hàng nhằm hoàn tất giao dịch mua sắm

Là một Pet Owner, tôi muốn xem thông tin thanh toán (Mã QR, số tiền, nội dung) để có thể chuyển khoản thanh toán cho đơn hàng của mình.

## Acceptance Criteria (AC)

| Feature | Acceptance Criteria | Ràng buộc & Ghi chú |
| :- | :- | :- |
| **1. Hiển thị Mã QR** | • Mã QR bao gồm đầy đủ thông tin: Ngân hàng, Số tài khoản, Số tiền, Nội dung chuyển khoản. • Có nút bấm "Lưu mã QR" để lưu ảnh vào thư viện thiết bị. | • Mã QR này do hệ thống ILUPET sinh ra. Hệ thống chỉ ghi nhận thanh toán thành công thông qua mã QR này. |
| **2. Thông tin chi tiết** | • Text thông tin bao gồm: Tên ngân hàng, Số tài khoản, Chủ tài khoản, Số tiền (VND), Nội dung chuyển khoản (Memo). • Hệ thống **KHÔNG** cung cấp nút Copy cho các trường thông tin này nhằm bắt buộc người dùng thao tác quét/tải mã QR, giảm rủi ro nhập sai số tiền hoặc nội dung. | • Nội dung chuyển khoản là Mã đơn hàng |
| **3. Đếm ngược (Countdown)** | • Hiển thị đồng hồ đếm ngược (VD: 23:59:59) cho biết thời hạn của mã QR (24 giờ). • Hết thời gian, màn hình mờ đi và thông báo *"Giao dịch đã hết hạn"*, có nút *"Quay lại trang chủ"*. | • Thời gian đếm ngược đồng bộ với Backend. |
| **4. Xác nhận thành công** | • Hệ thống sử dụng cơ chế kiểm tra trạng thái tự động (Adaptive Polling kết hợp Redis Cache, hoặc WebSockets) tuỳ theo kiến trúc Backend để đảm bảo không gây quá tải. • Khi có phản hồi thành công từ Backend, hệ thống tự động chuyển sang màn hình **"Đặt hàng thành công"** (Hiển thị Mã đơn, Nút "Xem đơn hàng", Nút "Tiếp tục mua sắm"). | • Không để user tự bấm nút "Tôi đã chuyển khoản" để tránh các trường hợp giả mạo. Việc xác nhận hoàn toàn do hệ thống kiểm tra tự động. |
| **5. Nút "Huỷ thanh toán"** | • Cung cấp nút để người dùng có thể tự huỷ giao dịch nếu không muốn tiếp tục. • Bấm vào sẽ hiện popup confirm: *"Bạn có chắc chắn muốn huỷ đơn hàng này không?"* | • Bấm "Đồng ý" sẽ huỷ đơn và trả về giỏ hàng. |

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

* **Thoát ứng dụng giữa chừng:**
  * **Flow:** User đang ở trang thanh toán nhưng ấn nút Home thoát ra ngoài hoặc tắt app.
  * **Hệ thống:** Đơn hàng vẫn được lưu lại trạng thái `Chờ thanh toán` trên hệ thống.
  * **Logic:** Khi user mở lại app vào mục "Đơn hàng", có thể bấm vào đơn đang chờ thanh toán để xem lại mã QR (thời gian đếm ngược tiếp tục tính theo thời gian thực từ lúc tạo). Nếu quá hạn, tự động huỷ.
* **Chuyển khoản thiếu tiền:**
  * **Flow:** User quét mã nhưng tự sửa số tiền thấp hơn số tiền yêu cầu.
  * **Hệ thống:** Giao dịch không được hệ thống ghi nhận thành công tự động. Màn hình vẫn ở trạng thái chờ đến khi hết hạn. Tiền khách đã chuyển sẽ được đối soát thủ công sau.

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

1. **Rule 1: Không hỗ trợ App-to-App Deeplink**: Hiện tại hệ thống chưa hỗ trợ nút bấm mở trực tiếp ứng dụng MB Bank (hay các ngân hàng khác) kèm thông tin. Người dùng phải thao tác truyền thống: Lưu ảnh QR -> Mở app ngân hàng -> Quét ảnh hoặc Copy/Paste thủ công.
2. **Rule 2: Chuyển đổi trạng thái đơn**: Sau khi màn hình này chuyển sang "Đặt hàng thành công", đó là lúc Backend mới chính thức thực hiện hàm **Split Order** (Tách đơn) và **Reserve Inventory** (Giữ kho).


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