diff --git a/Systeme-Anti-Triche.-.md b/Systeme-Anti-Triche.-.md new file mode 100644 index 0000000..a9282e9 --- /dev/null +++ b/Systeme-Anti-Triche.-.md @@ -0,0 +1,212 @@ +# ๐ Systรจme Anti-Triche + +> QR code rotatif, tokens uniques et mรฉcanismes de protection de la file. + +--- + +## Problรฉmatique + +Dans une file d'attente classique (numรฉro papier), plusieurs fraudes sont possibles : + +| Fraude | Description | Impact | +|:-------|:------------|:-------| +| **Partage de lien** | Un patient partage le lien d'inscription ร un ami | L'ami rejoint sans รชtre prรฉsent | +| **Inscription ร distance** | Un patient s'inscrit depuis chez lui | Occupe une place sans รชtre lร | +| **Double inscription** | Un patient s'inscrit plusieurs fois | Monopolise la file | +| **Usurpation** | Quelqu'un prend la place d'un autre | Injustice pour les autres | + +--- + +## Solution : Token QR Rotatif + +### Principe + +Le QR code affichรฉ au cabinet contient un **token unique** qui change rรฉguliรจrement. Pour rejoindre la file, le patient doit scanner le QR code **physiquement prรฉsent** au cabinet. + +``` +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ โ +โ ROTATION DU TOKEN QR (exemple : toutes les 30 minutes) โ +โ โ +โ 08:00 08:30 09:00 09:30 10:00 โ +โ โ โ โ โ โ โ +โ โผ โผ โผ โผ โผ โ +โ โโโโโโ โโโโโโ โโโโโโ โโโโโโ โโโโโโ โ +โ โ T1 โ โ T2 โ โ T3 โ โ T4 โ โ T5 โ โ +โ โโโโโโ โโโโโโ โโโโโโ โโโโโโ โโโโโโ โ +โ โ โ โ โ โ โ +โ โ โ โ โ โ โ +โ โผ โผ โผ โผ โผ โ +โ QR code QR code QR code QR code QR code โ +โ affichรฉ affichรฉ affichรฉ affichรฉ affichรฉ โ +โ change change change change change โ +โ โ +โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ +โ โ +โ Patient A scanne T2 ร 08:45 โ โ Token valide โ Rejoint la file โ +โ Patient A partage le lien ร 09:05 โ โ T2 expirรฉ โ Rejetรฉ โ +โ โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +``` + +### Fonctionnement Technique + +``` +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ โ +โ 1. GรNรRATION โ +โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ +โ โ qrToken = crypto.randomBytes(32).toString('hex') โ โ +โ โ qrTokenExpiresAt = now() + rotationMinutes โ โ +โ โ โ Stockรฉ dans table `clinics` โ โ +โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ +โ โ +โ 2. ENCODAGE DANS LE QR CODE โ +โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ +โ โ URL = https://app.queuemed.fr/queue/{qrToken} โ โ +โ โ โ Le token EST l'URL d'accรจs โ โ +โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ +โ โ +โ 3. VALIDATION ร L'INSCRIPTION โ +โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ +โ โ if (clinic.qrToken !== submittedToken) โ โ REJETร โ โ +โ โ if (clinic.qrTokenExpiresAt < now()) โ โ EXPIRร โ โ +โ โ else โ โ ACCEPTร, crรฉer queueEntry โ โ +โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ +โ โ +โ 4. ROTATION AUTOMATIQUE โ +โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ +โ โ Toutes les N minutes (configurable par cabinet) : โ โ +โ โ โ Nouveau token gรฉnรฉrรฉ โ โ +โ โ โ QR code affichรฉ se met ร jour โ โ +โ โ โ Anciens liens deviennent invalides โ โ +โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ +โ โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +``` + +--- + +## Configuration par Cabinet + +Le mรฉdecin peut configurer la frรฉquence de rotation pour chaque cabinet : + +| Frรฉquence | Cas d'usage | Sรฉcuritรฉ | UX Patient | +|:-----------|:------------|:---------|:-----------| +| **5 min** | Cabinet trรจs frรฉquentรฉ, risque de fraude รฉlevรฉ | ๐ข๐ข๐ข Maximale | โ ๏ธ QR change souvent | +| **15 min** | Cabinet standard, bonne affluence | ๐ข๐ข รlevรฉe | ๐ข Confortable | +| **30 min** | Cabinet calme, risque faible (dรฉfaut) | ๐ข Bonne | ๐ข๐ข Trรจs confortable | +| **60 min** | Cabinet peu frรฉquentรฉ | ๐ก Modรฉrรฉe | ๐ข๐ข๐ข Aucune gรชne | +| **24h** | Cabinet de confiance, pas de fraude | ๐ด Minimale | ๐ข๐ข๐ข Aucune gรชne | +| **0 (dรฉsactivรฉ)** | Pas de rotation | โ Aucune | โ | + +### Recommandation + +> Pour la plupart des cabinets, **30 minutes** offre le meilleur compromis entre sรฉcuritรฉ et confort d'utilisation. + +--- + +## Protections Supplรฉmentaires + +### Anti-Double Inscription + +``` +Patient scanne le QR code + โ + โผ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ Vรฉrification du patientToken existant โ +โ โ +โ SELECT * FROM queue_entries โ +โ WHERE clinicId = ? AND patientToken = ? โ +โ AND status IN ('waiting', 'called') โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค +โ โ +โ Rรฉsultat trouvรฉ ? โโโโ OUI โโโถ โ Dรฉjร โ +โ โ inscrit โ +โ NON โ +โ โ โ +โ โผ โ +โ โ Crรฉer nouvelle entrรฉe โ +โ โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +``` + +### Token Patient Unique + +Chaque patient reรงoit un `patientToken` unique (cookie de session) qui empรชche : +- La double inscription depuis le mรชme appareil +- L'usurpation de position d'un autre patient + +### Taille Maximum de File + +| Paramรจtre | Dรฉfaut | Description | +|:-----------|:-------|:------------| +| `maxQueueSize` | 50 | Nombre max de patients en attente | + +Quand la file est pleine, les nouveaux patients voient un message : + +``` +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ โ +โ โ ๏ธ File d'attente complรจte โ +โ โ +โ Le cabinet a atteint sa capacitรฉ โ +โ maximale. Veuillez rรฉessayer plus โ +โ tard ou contacter le cabinet. โ +โ โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +``` + +--- + +## Rotation Manuelle + +Le mรฉdecin peut forcer une rotation immรฉdiate du token QR depuis l'interface : + +``` +Bouton "๐ Forcer rotation" dans la fiche cabinet + โ + โผ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ 1. Gรฉnรจre un nouveau token alรฉatoire โ +โ 2. Met ร jour qrToken en DB โ +โ 3. Recalcule qrTokenExpiresAt โ +โ 4. Le QR code affichรฉ change โ +โ 5. Anciens liens โ invalides โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +``` + +**Cas d'usage :** Si le mรฉdecin suspecte qu'un patient a partagรฉ le lien, il peut forcer la rotation pour invalider immรฉdiatement tous les anciens liens. + +--- + +## Scรฉnarios de Fraude et Rรฉponses + +| Scรฉnario | Tentative | Rรฉponse QueueMed | +|:---------|:----------|:-----------------| +| Partage de lien WhatsApp | Patient A envoie le lien ร Patient B | Token expirรฉ โ B rejetรฉ | +| Screenshot du QR | Photo du QR envoyรฉe ร distance | Token expirรฉ โ Rejetรฉ | +| Inscription depuis chez soi | Patient connaรฎt l'URL du cabinet | Token requis โ Impossible | +| Bot d'inscription | Script automatisรฉ | Rate limiting + token | +| Double inscription | Mรชme patient, 2 appareils | patientToken unique โ Bloquรฉ | + +--- + +## Limites Connues + +| Limite | Description | Mitigation | +|:-------|:------------|:-----------| +| Fenรชtre de validitรฉ | Pendant la durรฉe du token, le lien fonctionne | Rรฉduire la rotation | +| Mรชme rรฉseau WiFi | Partage possible si mรชme rรฉseau | Rotation courte | +| Prรฉsence physique | Ne vรฉrifie pas la gรฉolocalisation | Rotation + surveillance | + +> **Note :** Le systรจme anti-triche n'est pas infaillible mais rend la fraude suffisamment difficile pour dรฉcourager la grande majoritรฉ des tentatives. La rotation courte (5-15 min) est recommandรฉe pour les cabinets ร risque. + +--- + +