Vue d'ensemble
Flux métier
Les parcours utilisateur de bout en bout
Chaque flux représente un parcours complet, du déclencheur à la résolution.
Flux 1 — Onboarding établissement
sequenceDiagram
actor Admin as Admin Wcare
participant API as API Wcare
participant DB as PostgreSQL
participant Mail as Resend (email)
actor Etab as Établissement
Admin->>API: Créer établissement (nom, type, adresse)
API->>DB: INSERT establishment
API->>DB: INSERT user (role: establishment_admin)
API->>Mail: Envoyer magic link
Mail->>Etab: Email avec lien de connexion
Etab->>API: Clic magic link → session créée
Etab->>API: Premier accès dashboardÉtapes détaillées
- L'admin Wcare remplit le formulaire de création d'établissement
- Le système crée l'établissement + un compte utilisateur
establishment_admin - Un magic link est envoyé par email (validité : 24h)
- L'établissement clique → session créée → accès au dashboard
- L'établissement peut immédiatement créer ses WC et générer ses QR codes
Flux 2 — Création d'un WC et son QR code
sequenceDiagram
actor Etab as Établissement
participant API as API Wcare
participant DB as PostgreSQL
participant QR as QR Generator
Etab->>API: Créer WC (nom, localisation)
API->>DB: INSERT toilet
API->>QR: Générer QR code (toiletId + token)
QR-->>API: QR code SVG/PNG
API-->>Etab: WC créé + QR code preview
Etab->>API: Personnaliser QR (logo, couleurs)
API->>QR: Régénérer avec personnalisation
Etab->>API: Télécharger PDF pour impressionLocalisation optionnelle
L'établissement peut préciser la localisation du WC pour faciliter l'intervention :
| Type d'établissement | Exemples de localisation |
|---|---|
| Hôtel | "1er étage, à côté de la chambre 15" |
| Restaurant | "Salle principale, fond à droite" |
| Entreprise | "Bâtiment B, 3e étage" |
| Petit commerce | (pas nécessaire — un seul WC) |
Flux 3 — Signalement d'un problème (flux principal)
sequenceDiagram
actor User as Utilisateur
participant Page as Page signalement
participant API as API Wcare
participant Guard as Anti-spam
participant DB as PostgreSQL
participant Notif as Notifications
User->>Page: Scan QR code → ouverture URL
Page->>API: GET /report/{toiletId}/{token}
API->>Guard: Vérifier token + rate limit + géoloc
Guard-->>API: OK / BLOCKED
alt Bloqué
API-->>Page: Erreur (spam détecté)
else Autorisé
API-->>Page: Page de signalement + problèmes prédéfinis
User->>Page: Sélectionne un problème (ou texte libre)
Page->>API: POST /report
API->>Guard: Vérifier anti-spam (fingerprint, cooldown)
API->>DB: INSERT report
API->>Notif: Déclencher notifications
Notif->>Notif: WhatsApp + Email + In-app
API-->>Page: Confirmation "Merci !"
endProblèmes prédéfinis (par défaut)
| Catégorie | Exemples |
|---|---|
| Propreté | Toilettes sales, sol mouillé, mauvaise odeur |
| Consommables | Plus de papier toilette, plus de savon, plus d'essuie-mains |
| Équipement | Chasse d'eau cassée, robinet qui fuit, lumière HS |
| Autre | Texte libre (max 200 caractères) |
L'établissement peut personnaliser cette liste selon ses besoins.
Flux 4 — Réception et traitement d'un signalement
stateDiagram-v2
[*] --> NOUVEAU
NOUVEAU --> VU : Établissement ouvre le signalement
VU --> EN_COURS : Intervention démarrée
EN_COURS --> RESOLU : Problème corrigé
VU --> IGNORE : Faux signalement / spam
NOUVEAU --> IGNORE : Auto-détecté spamCycle de vie d'un signalement
- NOUVEAU — Signalement reçu, notifications envoyées
- VU — L'établissement a pris connaissance
- EN_COURS — Intervention en cours
- RÉSOLU — Problème traité
- IGNORÉ — Faux signalement ou spam détecté
Flux 5 — Rotation de token QR (anti-abus)
sequenceDiagram
participant Cron as Cron Job
participant DB as PostgreSQL
participant QR as QR Generator
Cron->>DB: Sélectionner tokens expirés
Cron->>DB: Générer nouveaux tokens
Note over Cron,QR: Le QR physique ne change pas
Note over Cron,QR: Seul le token dans l'URL change
Note over Cron,QR: L'ancien token redirige vers le nouveauLa rotation de token permet d'invalider les photos de QR codes prises à distance. Voir Sécurité anti-spam pour les détails.