Skip to main content

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:


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 field otpCode có 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ộcTrạ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 LotusEmailOtpService hoặ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 LimitFail 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.