Kiểm Tra Trạng Thái & Yêu Cầu Hoàn Thiện Tính Năng Chuyển GPoint
Ngày cập nhật: 08/07/2026
Loại: Feature Status Review & Completion Request
Ảnh feedback:
- Ảnh thực tế: Màn hình Chỉnh sửa thông tin (Edit Profile)
- Ảnh thực tế: Màn hình Chuyển GPoint Step 1 — Tìm người nhận
1. Trả Lời Câu Hỏi: Tính Năng Chuyển GPoint Đã Hoạt Động Chưa?
❌ Chưa hoàn chỉnh — Tính năng Chuyển GPoint vẫn đang bị khóa và chưa sẵn sàng cho người dùng cuối.
Theo kết quả kiểm tra kỹ thuật từ Audit gần nhất (FULL_PROJECT_AUDIT_2026-05-16), tính năng này có 2 vấn đề nghiêm trọng cần được giải quyết trước khi mở cho người dùng:
2. Các Vấn Đề Kỹ Thuật Còn Tồn Đọng (Blocking Issues)
❌ Vấn đề 1 (P0 — Nghiêm trọng): Backend chưa xác thực OTP đúng cách
Hiện trạng Backend:
- File
lotus-mobile-point-transfer.service.ts(Backend) tại bước xác nhận chuyển điểm đang chỉ kiểm tra xem fieldotpCodecó giá trị rỗng hay không, thay vì thực sự xác thực mã OTP đó có hợp lệ (có khớp với mã đã gửi về email/SĐT người dùng hay không). - Điều này tạo ra lỗ hổng bảo mật nghiêm trọng: bất kỳ ai gọi thẳng API transfer có thể điền bất kỳ ký tự nào vào ô OTP và giao dịch vẫn được thực hiện.
Hiện trạng Mobile App:
- Để ngăn lỗ hổng trên bị khai thác, Mobile App hiện tại đang khóa cứng toàn bộ giao diện chuyển GPoint bằng một thông báo cảnh báo dạng alert ("coming soon") ngay tại
PointScreen.tsx:19. - Người dùng hiện tại không thể mở màn hình Chuyển GPoint từ flow thông thường.
❌ Vấn đề 2: Ràng buộc nghiệp vụ chưa được áp dụng
Theo chính sách đã được phê duyệt (xem review-chinh-sach-app.md), tính năng Chuyển GPoint phải đáp ứng các ràng buộc:
| Ràng buộc | Trạng thái |
|---|---|
| Chỉ mở cho tài khoản từ hạng Gold trở lên | ⏳ Chưa xác nhận áp dụng |
| Áp phí giao dịch (ví dụ: 5% số điểm chuyển) | ⏳ Chưa xác nhận áp dụng |
| Giới hạn số điểm nhận tối đa mỗi tháng/tài khoản | ⏳ Chưa xác nhận áp dụng |
| Xác thực OTP thật qua Email hoặc SMS trước khi chuyển | ❌ Chưa có |
| Idempotency (chống double-submit) & Rate limit | ❌ Chưa có |
3. Yêu Cầu Hoàn Thiện (Action Items)
3.1 Phía Backend — Ưu tiên cao nhất
- Tích hợp
LotusEmailOtpServicehoặc SMS OTP service riêng biệt cho luồng xác nhận giao dịch Chuyển GPoint. - Thay thế logic kiểm tra "otpCode không rỗng" bằng logic xác thực OTP thực sự (so sánh với mã đã gửi, kiểm tra thời gian hết hạn, số lần nhập sai tối đa).
- Thêm cơ chế Idempotency Key để tránh xử lý trùng khi mạng chập chờn.
- Thêm Rate Limit và Fail Count riêng cho endpoint Chuyển GPoint.
- Cấu hình và áp dụng đầy đủ các ràng buộc nghiệp vụ: giới hạn hạng (Gold+), phí giao dịch, giới hạn điểm nhận/tháng.
3.2 Phía Mobile App — Sau khi Backend hoàn thiện
- Mở khóa giao diện Chuyển GPoint trên
PointScreen.tsx(xóa bỏ cảnh báo "coming soon"). - Xây dựng đầy đủ luồng UX 2 bước:
- Bước 1: Tìm kiếm người nhận theo SĐT hoặc Email.
- Bước 2: Nhập số điểm muốn chuyển, xác nhận bằng OTP gửi về email/SĐT của người gửi.
- Hiển thị rõ ràng phí giao dịch trước khi người dùng bấm "Xác nhận".
- Thêm màn hình xác nhận thành công/thất bại với thông tin chi tiết giao dịch.
Checklist Ưu Tiên
- [Backend — P0] Thay logic verify OTP giả bằng xác thực OTP thật cho luồng Chuyển GPoint.
- [Backend — P0] Thêm idempotency, rate limit, fail count cho transfer endpoint.
- [Backend — Cao] Áp dụng kiểm tra hạng thành viên (Gold+) trước khi cho phép chuyển.
- [Backend — Cao] Áp dụng phí giao dịch và giới hạn điểm nhận tối đa/tháng.
- [Mobile — Sau Backend] Mở khóa UI và hoàn thiện luồng UX 2 bước Chuyển GPoint.
- [QA] Kiểm thử end-to-end toàn bộ luồng trước khi mở cho người dùng thật.