> ## 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-MER-CLI-16: Đăng ký Merchant bằng mã giới thiệu

> [!NOTE]
>
> **Cập nhật v.1.6.0:** Áp dụng cơ chế đăng ký bằng Mã giới thiệu (Referral Code) để phân bổ hoa hồng.

> Là một Merchant mới, Tôi muốn đăng ký tài khoản bằng mã giới thiệu, Để tôi có thể tạo tài khoản hệ thống và người giới thiệu được ghi nhận quyền lợi tương ứng.

## Điều kiện tiên quyết (Pre-conditions)

* Người dùng chưa có tài khoản trên hệ thống.
* Mã giới thiệu phải đã được tạo và đang trong trạng thái **Hoạt động** (Active) trên hệ thống.

## Quy trình Đăng ký hoàn chỉnh

```mermaid theme={null}
flowchart TB
    A[Màn hình Đăng ký Đối tác] --> B[Nhập Tên, SĐT, Loại hình, Email, Mã giới thiệu]
    B --> C{Nhấn nút Đăng ký}
    C --> D[Kiểm tra tính hợp lệ của thông tin]
    D -->|Email đã đăng ký vai trò cao| E[Thông báo lỗi: Email này đã được đăng ký. Vui lòng đăng nhập]
    D -->|Mã không hợp lệ / vô hiệu hóa| F[Thông báo lỗi ngay dưới field: Mã không hợp lệ, hãy thử mã khác]
    D -->|Thông tin hợp lệ| G[Gửi email xác thực đến địa chỉ email]
    G --> H[Thông báo: Hãy kiểm tra email và nhấn vào link xác nhận để hoàn tất đăng ký]
    H --> I[Người dùng nhấn link xác nhận trong email]
    I -->|Link hết hạn| J[Thông báo: Link xác nhận đã hết hạn, vui lòng thực hiện lại quy trình đăng ký]
    I -->|Link hợp lệ| K[Chuyển đến Màn hình Thiết lập mật khẩu]
    K --> L[Nhập mật khẩu + Xác nhận mật khẩu]
    L --> M{Nhấn Lưu mật khẩu}
    M --> N[Tạo tài khoản Đối tác mới]
    N --> O[Ghi nhận mã giới thiệu vào thông tin tài khoản]
    O --> P[Thông báo thành công: Đăng ký tài khoản thành công!]
    P --> Q[Tự động điều hướng về Màn hình Đăng nhập]
```

## Giao diện Màn hình Đăng ký

| Trường thông tin | Yêu cầu & Ràng buộc |
| - | - |
| **Tên chủ cửa hàng** | - Trường **Bắt buộc** (Required)  - Nhập đầy đủ họ và tên chủ cửa hàng/phòng khám |
| **Số điện thoại** | - Trường **Bắt buộc** (Required)  - Chỉ cho phép nhập số, định dạng số điện thoại hợp lệ |
| **Loại hình** | - Trường **Bắt buộc** (Required)  - Dropdown hoặc Radio button chọn một trong hai: **Merchant** hoặc **Clinic** |
| **Email** | - Trường **Bắt buộc** (Required)  - Validate định dạng email hợp lệ (`example@domain.com`)  - **Lưu ý:** Email này có thể đã đăng ký dưới vai trò Pet Owner. Tuy nhiên, nếu email đã đăng ký dưới vai trò cao hơn (Merchant, Clinic, Admin) thì sẽ không được phép đăng ký thêm. |
| **Mã giới thiệu** | - Trường **Bắt buộc** (Required)  - Input yêu cầu **đúng 4 ký tự**  - Chỉ cho phép nhập chữ (A-Z) và số  - **Tự động chuyển ký tự thường thành in hoa** khi người dùng nhập (Auto-uppercase)  - Ví dụ: `TOMO` |
| **Nút Đăng ký** | - `Disabled` (Xám/không click được) nếu thiếu thông tin bắt buộc hoặc định dạng sai  - `Enabled` (Clickable) khi tất cả các trường đã được nhập đúng định dạng |

> Hiển thị hiệu ứng loading khi người dùng nhấn Đăng ký để tránh spam click.

## Xác thực Email

| Trạng thái | Xử lý |
| - | - |
| Link còn hiệu lực | Điều hướng người dùng đến màn hình **Thiết lập mật khẩu** |
| Link đã hết hạn | Hiển thị thông báo: `Link xác nhận đã hết hạn, vui lòng thực hiện lại quy trình đăng ký`  Hiệu lực link: 24h |

## Màn hình Thiết lập mật khẩu

Giao diện bao gồm:

* Trường Mật khẩu (Password) với icon ẩn/hiện mật khẩu
* Trường Xác nhận mật khẩu (Confirm Password) với icon ẩn/hiện mật khẩu

### Quy tắc validation mật khẩu:

| Quy tắc | Mô tả |
| - | - |
| Độ dài | Tối thiểu 8 ký tự |
| Khớp nhau | Xác nhận mật khẩu phải trùng khớp với mật khẩu |
| Lỗi | Hiển thị: `Mật khẩu xác nhận không khớp` |

> Nút **Lưu mật khẩu** chỉ sáng lên khi tất cả quy tắc trên được thỏa mãn.

## Hoàn tất Đăng ký

Khi nhấn **Lưu mật khẩu**:

1. Hệ thống khởi tạo tài khoản theo loại hình đã chọn (Merchant/Clinic) với các thông tin đã cung cấp
2. **Ghi nhận mã giới thiệu** vào thông tin tài khoản (để tính Commission/Reward sau này)
3. Hiển thị Toast message: `Đăng ký tài khoản thành công!`
4. Tự động điều hướng về Màn hình Đăng nhập (Login)

## Xử lý lỗi & Ngoại lệ

| Trường hợp lỗi | Xử lý |
| - | - |
| Lỗi kết nối server | Hiển thị thông báo: `Hệ thống đang bận, vui lòng thử lại sau` |
| Loading state | Hiển thị hiệu ứng loading khi người dùng nhấn **Đăng ký** và **Lưu mật khẩu** để tránh việc spam click |
| Mã giới thiệu bị vô hiệu hóa sau khi người dùng nhập nhưng trước khi submit | Kiểm tra lại trạng thái mã ngay trước khi tạo tài khoản |


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