My App
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

  1. L'admin Wcare remplit le formulaire de création d'établissement
  2. Le système crée l'établissement + un compte utilisateur establishment_admin
  3. Un magic link est envoyé par email (validité : 24h)
  4. L'établissement clique → session créée → accès au dashboard
  5. 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 impression

Localisation optionnelle

L'établissement peut préciser la localisation du WC pour faciliter l'intervention :

Type d'établissementExemples 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 !"
    end

Problèmes prédéfinis (par défaut)

CatégorieExemples
PropretéToilettes sales, sol mouillé, mauvaise odeur
ConsommablesPlus de papier toilette, plus de savon, plus d'essuie-mains
ÉquipementChasse d'eau cassée, robinet qui fuit, lumière HS
AutreTexte 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é spam

Cycle de vie d'un signalement

  1. NOUVEAU — Signalement reçu, notifications envoyées
  2. VU — L'établissement a pris connaissance
  3. EN_COURS — Intervention en cours
  4. RÉSOLU — Problème traité
  5. 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 nouveau

La rotation de token permet d'invalider les photos de QR codes prises à distance. Voir Sécurité anti-spam pour les détails.

On this page