VOC support #2880
Updated by harry harry 2 months ago
Link design: https://www.figma.com/design/rKpXzV8hRJIgtVK4QtJqi8/B2C?node-id=5-2&p=f&t=WWaYJCpFurEZqYkn-0 ==================== TỔNG QUAN CHỨC NĂNG ==================== Hệ thống gồm 2 màn hình: 1. Màn hình quay số 2. Màn hình hiển thị kết quả (trang trúng thưởng có hiệu ứng pháo hoa) Luồng người dùng: Quét QR → Trang quay số → Quay & xác định giải thưởng → Lưu kết quả vào DB local → Hiển thị trang kết quả ==================== QUY TẮC CHUNG ==================== - Kết quả quay số PHẢI được quyết định và lưu ở backend (database local). - Mỗi thiết bị chỉ được quay MỘT LẦN DUY NHẤT. - Nếu thiết bị đã quay → chặn không cho quay nữa. - Nếu giải thưởng trong ngày đã hết → hiển thị thông báo “Hôm nay đã hết giải thưởng”. - Khi quay trúng → chuyển sang trang thành công, hiển thị giải thưởng + hiệu ứng pháo hoa. ==================== QUY ĐỊNH THỜI GIAN ==================== - Thời gian diễn ra sự kiện: 22/01/2026 → 25/01/2026 - Thời gian quay mỗi ngày: 12:00 → 17:00 - Timezone mặc định: Asia/Bangkok (giờ Thái Lan) - Cấu trúc phải dễ mở rộng để hỗ trợ thêm timezone khác trong tương lai (ví dụ: Philippines) ==================== CẤU TRÚC GIẢI THƯỞNG ==================== | Giải thưởng | Mã | Số lượng | |---------------|---------|----------| | Giải Nhất | GRAND | 5 | | Giải Nhì | SECOND | 1000 | | Giải Ba | THIRD | 2000 | - Tổng số lượng giải thưởng phải được chia theo cấu trúc : giải 2: 200/200/300/300, giải: 3: 400/400/600/600 . đều cho 4 ngày. - Ví dụ: Giải Nhất = 5 → chia hợp lý (1–2 giải mỗi ngày). - Số lượng giải thưởng còn lại theo NGÀY phải được lưu trong database. ==================== LOGIC QUAY SỐ (CỐT LÕI) ==================== Khi người dùng bấm “QUAY”: 1. Kiểm tra thời gian hợp lệ (ngày + giờ + timezone) 2. Xác định thiết bị người dùng (device fingerprint hoặc device ID đã hash) 3. Kiểm tra thiết bị đã quay chưa → Nếu rồi thì từ chối 4. Kiểm tra số lượng giải thưởng trong ngày → Nếu tất cả giải đều = 0 thì từ chối 5. Random giải thưởng: - Chỉ random trong các giải còn số lượng trong ngày - Tỷ lệ trúng tỉ lệ thuận với số lượng giải còn lại 6. Khi đã xác định giải: - Trừ số lượng giải trong ngày - Lưu kết quả quay (deviceId, prizeCode, timestamp) 7. Trả kết quả thành công kèm thông tin giải thưởng