# Kiểm thử Xử lý trùng lặp (Duplicate Handling)

## Mục đích (Purpose)
Đảm bảo hệ thống phát hiện và xử lý chính xác các trường hợp dữ liệu bị trùng lặp theo quy tắc nghiệp vụ. Kiểm thử này giúp duy trì sự "sạch sẽ" và duy nhất của các thực thể quan trọng (như Khách hàng, Sản phẩm, Tài khoản), ngăn chặn dữ liệu rác và các lỗi logic do trùng lặp gây ra.

## Kiến thức cần có (Required Knowledge)
- Hiểu về các trường dữ liệu duy nhất (Unique Fields) của từng thực thể.
- Nắm vững quy tắc chống trùng lặp: Trùng lặp tuyệt đối (Exact match) vs Trùng lặp tương đối (Fuzzy match).
- Phân biệt giữa Cảnh báo (Warning) và Chặn (Error) khi có trùng lặp.
- Hiểu về cơ chế gộp dữ liệu (Data Merging/Deduplication) nếu hệ thống hỗ trợ.
- Kiến thức về xử lý chuỗi (Case sensitivity, Whitespace, Accent marks).

## Quy trình thực hiện (Process)
1. **Xác định tiêu chí trùng lặp:** Liệt kê các trường hoặc tổ hợp các trường xác định một bản ghi là duy nhất (ví dụ: Email, hoặc Số CMND + Ngày cấp).
2. **Kiểm thử Trùng lặp khi tạo mới:** Thử tạo một bản ghi có thông tin giống hệt bản ghi đã tồn tại.
3. **Kiểm thử Trùng lặp khi cập nhật:** Thử sửa một bản ghi hiện có thành thông tin trùng với một bản ghi khác.
4. **Kiểm thử Xử lý chuỗi (String normalization):** Kiểm tra xem các trường hợp khác biệt về khoảng trắng, viết hoa/thường, hoặc dấu tiếng Việt có bị coi là trùng lặp không (ví dụ: `nguyen van a` vs `Nguyen Van A`).
5. **Kiểm thử Cảnh báo trùng lặp:** Nếu nghiệp vụ cho phép trùng nhưng cần cảnh báo, xác minh thông báo xuất hiện và cho phép người dùng xác nhận tiếp tục hoặc hủy bỏ.
6. **Kiểm thử Gộp dữ liệu (Merge):** Nếu có tính năng gộp, xác minh dữ liệu từ hai bản ghi trùng được tổng hợp lại chính xác và bản ghi cũ bị xóa/ẩn đúng cách.

## Checklist
### Phát hiện trùng lặp
- [ ] Hệ thống chặn và báo lỗi khi nhập trùng dữ liệu cho các trường Unique.
- [ ] Quy tắc trùng lặp áp dụng đúng cho cả trường hợp nhập tay trên UI và Import từ file.
- [ ] Các trường hợp trùng lặp do viết hoa/viết thường (Case-insensitive) được xử lý đúng theo yêu cầu.
- [ ] Khoảng trắng thừa ở đầu/cuối chuỗi không làm hệ thống hiểu nhầm là dữ liệu khác nhau.

### Thông báo & Trải nghiệm
- [ ] Thông báo lỗi trùng lặp hiển thị rõ ràng, chỉ ra trường nào bị trùng và (nếu có thể) bản ghi nào đang bị trùng.
- [ ] Người dùng không bị mất dữ liệu đã nhập khi gặp lỗi trùng lặp (hệ thống giữ lại thông tin trên form để sửa).

### Tính toàn vẹn khi Gộp/Xóa
- [ ] Khi gộp bản ghi, các dữ liệu lịch sử (Orders, Comments, Transactions) của bản ghi phụ được chuyển sang bản ghi chính đầy đủ.
- [ ] Bản ghi bị coi là trùng và bị xóa không còn xuất hiện trong các danh sách hiển thị và báo cáo.

## Output mong đợi (Expected Output)
- Danh sách các quy tắc chống trùng lặp (Deduplication Rules) đã được kiểm chứng.
- Bộ Test Scenarios bao phủ các kịch bản trùng lặp biên và xử lý chuỗi.
- Báo cáo về các lỗ hổng cho phép nhập trùng dữ liệu rác vào hệ thống.
