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ả
Page được support ngôn ngữ tiếng anh.
====================
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 .
- 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