⚠️ Phát hiện cao nhất — §2 xung đột policy
Trang admin §2 nói chống trùng theo CẶP (1 SBD nhiều SĐT / 1 SĐT nhiều SBD vẫn cấp). Nhưng REQ §5.2/§7.4 + CODE chặn theo CÁ NHÂN (1 SBD/1 voucher, 1 SĐT/1 voucher).
test-dedup.mjs xác nhận lệch ở 2/4 tình huống → cần owner chốt policy.
Bảng tổng hợp theo mục
2
✅ Đạt (§1, §3a)
4
⚠️ Lệch/một phần
3
❌ Chưa implement
| Mục | Nội dung | Phương pháp | Kết quả |
|---|---|---|---|
| §1 | Triết lý (2 lớp online + cửa hàng) | Audit | ✅ Phản ánh đúng |
| §2 | Chống trùng theo CẶP (SBD+SĐT) | Logic test | ⚠️ XUNG ĐỘT (code chặn cá nhân) |
| §3a | Rate-limit theo scope | Logic test | ✅ Cơ chế đúng · ⚠️ default lệch |
| §3b | Trần voucher/IP/giờ (ISSUE_LIMIT) | Audit | ❌ Chưa implement |
| §4 | Chặn tay IP/CIDR (BLOCKED 403) | Audit | ❌ Chưa implement |
| §5 | Lưu IP thật (source_ip_plain, ADMIN_SHOW_PII) | Audit | ❌ Chưa implement (chỉ hash) |
| §6 | Cửa hàng offline — chốt chặn thật | Audit | ⚠️ Quy trình thủ công |
| §7 | Bảng trạng thái trả về | Audit | ⚠️ 3/6 status có |
| §8 | Biến môi trường cấu hình | Audit | ⚠️ 6/8 biến có hiệu lực |
Chi tiết test/audit theo mục
Kết luận & ưu tiên xử lý
- §2 — XUNG ĐỘT POLICY (cao nhất): trang admin (chặn cặp) mâu thuẫn REQ §5.2 + code (chặn cá nhân). Owner chốt một hướng; nếu theo trang admin → phải SỬA CODE + unique index
ux_claims_campaign_cand_phone. - §3b, §4, §5 chưa implement: nếu cần trần voucher/IP, blocklist, soi IP thật → code bổ sung; nếu không → sửa trang admin để khỏi mô tả tính năng chưa có.
- §7, §8: bổ sung status (
ISSUE_LIMIT,BLOCKED,NOT_ELIGIBLE) + env (RL_ISSUE_IP,ADMIN_SHOW_PII) đi kèm khi làm §3b/§4/§5. - §3a default: set env
RL_*đúng spec trang hoặc sửaRL_DEFAULTS.