# language: fr

@moderation @sanctions
Fonctionnalité: Sanctions et notifications de modération

  # 14.3 - Sanctions

  Contexte:
    Étant donné que je suis un créateur de contenu
    Et que j'ai publié un contenu

  # 14.3.1 - Notification au créateur (multi-canal)

  Scénario: Notification multi-canal après sanction
    Étant donné que mon contenu a été modéré
    Quand la sanction est appliquée
    Alors je reçois une notification sur 3 canaux:
      | canal           | timing              | contenu                                    |
      | Push            | Immédiat            | "Votre contenu a été modéré"               |
      | In-app          | Au prochain lancement| Popup détaillée avec bouton "Voir détails" |
      | Email           | Dans l'heure        | Notification complète avec lien d'appel    |
    Et chaque canal contient un lien vers les détails complets

  Scénario: Notification push immédiate
    Étant donné que mon contenu vient d'être modéré
    Quand la sanction est appliquée
    Alors je reçois une notification push immédiate
    Et le message est court: "⚠️ Votre contenu a été modéré"
    Et je peux cliquer pour voir les détails
    Et la notification utilise Firebase Cloud Messaging (Android) ou APNs (iOS)
    Et le coût est de 0€

  Scénario: Popup in-app au prochain lancement
    Étant donné que mon contenu a été modéré
    Quand j'ouvre l'application
    Alors une popup détaillée s'affiche automatiquement
    Et la popup contient:
      | élément                  | description                        |
      | Titre du contenu         | "Mon podcast #42"                  |
      | Icône d'avertissement    | ⚠️                                 |
      | Catégorie violée         | 🚫 Haine & violence                |
      | Sanction                 | Strike 2/4 - Suspension 7 jours    |
      | Bouton "Voir détails"    | Redirige vers page détaillée       |
      | Bouton "Compris"         | Ferme la popup                     |
    Et je ne peux pas fermer la popup sans l'avoir vue

  Scénario: Email de notification complet dans l'heure
    Étant donné que mon contenu a été modéré à 14:00
    Quand la sanction est appliquée
    Alors je reçois un email avant 15:00 (dans l'heure)
    Et l'objet de l'email est "Modération de votre contenu \"[Titre du contenu]\""
    Et l'email contient toutes les informations détaillées
    Et le coût est d'environ 0.001€ par email (Brevo, Resend)

  # 14.3.2 - Détail de la sanction

  Scénario: Email de notification complet et structuré
    Étant donné que mon contenu "Mon podcast #42" a été modéré
    Quand je reçois l'email de notification dans l'heure suivant la sanction
    Alors l'email contient la structure exacte suivante:
      """
      Objet : Modération de votre contenu "Mon podcast #42"

      Bonjour @mon_pseudo,

      Votre contenu "Mon podcast #42" publié le 15/01/2026 a été modéré.

      ─────────────────────────────────────
      📋 DÉTAILS DE LA SANCTION
      ─────────────────────────────────────

      Catégorie violée : 🚫 Haine & violence (Article 3.2 CGU)
      Raison détaillée : Propos discriminatoires envers un groupe de personnes

      ─────────────────────────────────────
      🔊 PASSAGE PROBLÉMATIQUE
      ─────────────────────────────────────

      Timestamp : 3:42-4:15 (33 secondes)
      Transcription : "[passage problématique surligné en rouge]"

      ─────────────────────────────────────
      ⚠️ SANCTION APPLIQUÉE
      ─────────────────────────────────────

      Strike actuel : 2/4
      Conséquence : Suspension de votre compte pendant 7 jours
      Date de fin : 22/01/2026

      Que se passe-t-il ensuite ?
      • Strike 3 : Suspension 30 jours
      • Strike 4 : Ban définitif

      ─────────────────────────────────────
      📝 RECOURS
      ─────────────────────────────────────

      Vous pouvez contester cette décision sous 7 jours :
      [Lien formulaire d'appel]

      Cordialement,
      L'équipe RoadWave
      """
    Et l'email est envoyé via le service Brevo ou Resend
    Et le coût d'envoi est d'environ 0.001€ par email
    Et l'email contient un lien direct vers le formulaire d'appel pré-rempli

  Scénario: Page détaillée de la sanction in-app
    Étant donné que je clique sur "Voir détails" dans la notification
    Quand la page détaillée s'affiche
    Alors je vois les 6 éléments obligatoires:
      | élément                    | contenu                                            |
      | 1. Catégorie violée        | 🚫 Haine & violence (Article 3.2 CGU)             |
      | 2. Raison détaillée        | Explication claire et non juridique                |
      | 3. Extrait audio           | Timestamp exact: 3:42-4:15                         |
      | 4. Transcription           | Texte problématique surligné en rouge              |
      | 5. Gravité                 | Strike actuel + conséquences (Strike 2/4, 7j susp) |
      | 6. Recours                 | Lien formulaire d'appel + délai 7j                 |

  Scénario: Affichage du passage problématique avec timestamp
    Étant donné que la page détaillée de la sanction est affichée
    Quand je consulte l'extrait audio concerné
    Alors le timestamp exact est affiché: "3:42-4:15"
    Et je peux écouter uniquement cette portion de l'audio
    Et un player audio intégré permet l'écoute du passage
    Et la transcription correspondante est affichée en dessous
    Et les mots/phrases problématiques sont surlignés en rouge

  Scénario: Référence précise aux CGU
    Étant donné que la sanction fait référence à l'Article 3.2 des CGU
    Quand je clique sur "Article 3.2"
    Alors je suis redirigé vers la section correspondante des CGU
    Et la section "Haine & violence" est mise en évidence
    Et je peux lire exactement ce qui est interdit
    Et cela m'aide à comprendre mon erreur

  Scénario: Gravité de la sanction avec système de strikes
    Étant donné que c'est mon 2ème strike
    Quand je consulte les détails de la sanction
    Alors je vois clairement "Strike 2/4"
    Et les conséquences sont explicitées:
      """
      Strike 2/4 - Suspension 7 jours

      Que se passe-t-il ensuite?
      - Strike 3: Suspension 30 jours
      - Strike 4: Ban définitif

      Comment éviter les strikes?
      - Lire et respecter les règles de la communauté
      - Réhabilitation: -1 strike tous les 6 mois sans incident
      """
    Et je comprends l'escalade des sanctions

  # 14.3.3 - Processus d'appel

  Scénario: Accès au formulaire d'appel depuis la notification
    Étant donné que j'ai reçu une notification de modération
    Quand je clique sur "Contester cette décision"
    Alors je suis redirigé vers le formulaire d'appel
    Et le formulaire est pré-rempli avec les informations de la sanction
    Et je peux commencer à rédiger mon appel

  Scénario: Accès au formulaire d'appel depuis "Mes sanctions"
    Étant donné que j'ai reçu une sanction il y a 2 jours
    Quand j'ouvre "Profil créateur > Mes sanctions"
    Alors je vois la liste de mes sanctions
    Et chaque sanction a un bouton "Faire appel" (si délai <7j)
    Et je peux accéder au formulaire d'appel

  Scénario: Structure du formulaire d'appel
    Étant donné que j'ouvre le formulaire d'appel
    Quand le formulaire s'affiche
    Alors je vois les champs suivants:
      | champ                  | type                    | obligatoire | description                         |
      | Sanction contestée     | Pré-rempli (readonly)   | oui         | "Strike 2 - Podcast #42"            |
      | Raison de l'appel      | Texte (50-1000 car)     | oui         | Explication courte de la contestation |
      | Arguments détaillés    | Zone texte enrichie     | oui         | Arguments complets                  |
      | Preuves                | Upload fichiers         | non         | Max 5 fichiers, 10 MB total         |
    Et tous les champs obligatoires sont marqués d'un astérisque

  Scénario: Validation du formulaire d'appel
    Étant donné que je remplis le formulaire d'appel
    Quand je clique sur "Soumettre l'appel"
    Alors le système valide les champs obligatoires
    Et si un champ obligatoire est vide, une erreur s'affiche
    Et si la raison fait moins de 50 caractères, une erreur s'affiche
    Et si tout est valide, l'appel est soumis

  Scénario: Confirmation après soumission de l'appel
    Étant donné que j'ai soumis un appel valide
    Quand l'appel est enregistré
    Alors un numéro de ticket unique est généré: "#MOD-2026-00142"
    Et un email de confirmation est envoyé:
      """
      Votre appel #MOD-2026-00142 a été reçu.
      Nous l'examinerons sous 72h maximum.
      Vous serez notifié de la décision par email et in-app.
      """
    Et le statut de l'appel est "En cours d'examen"
    Et je peux suivre le statut dans "Mes sanctions"

  Scénario: Délai de soumission de 7 jours maximum
    Étant donné que j'ai reçu une sanction le 2026-01-15
    Quand j'essaie de faire appel le 2026-01-25 (10 jours plus tard)
    Alors le formulaire d'appel est désactivé
    Et un message s'affiche:
      """
      Le délai de 7 jours pour faire appel est dépassé.
      Cette décision est désormais définitive.
      """
    Et je ne peux plus contester la sanction

  Scénario: Bouton "Faire appel" visible si délai respecté
    Étant donné que j'ai reçu une sanction il y a 3 jours
    Quand je consulte "Mes sanctions"
    Alors le bouton "Faire appel" est actif
    Et un compteur indique "4 jours restants pour faire appel"
    Et je peux cliquer pour soumettre un appel

  # 14.3.4 - Délai de réponse pour appel

  Scénario: SLA de 72h garanti pour appel standard
    Étant donné que j'ai soumis un appel standard le lundi à 10:00
    Quand l'appel est en cours de traitement
    Alors un modérateur senior est assigné
    Et l'appel doit être traité avant jeudi 10:00 (72h - 3 jours ouvrés)
    Et je reçois une réponse dans ce délai

  Scénario: Appel complexe avec notification intermédiaire
    Étant donné que j'ai soumis un appel complexe
    Et que le traitement nécessite plus de 72h
    Quand 3 jours se sont écoulés
    Alors je reçois un email de notification intermédiaire:
      """
      Votre appel #MOD-2026-00142 est en cours d'examen approfondi.
      Nous vous répondrons sous 2 jours maximum.
      """
    Et l'appel est traité sous 5 jours ouvrés au total
    Et un modérateur senior + admin modération examinent le cas

  Scénario: Appel CRITIQUE traité en 24h
    Étant donné que j'ai reçu une suspension longue ou un ban
    Et que je soumets un appel
    Quand l'appel est classé en priorité CRITIQUE
    Alors l'admin modération traite l'appel sous 24h
    Et je reçois une réponse rapide
    Et le cas est examiné en priorité absolue

  Scénario: Réponse finale détaillée - Appel accepté
    Étant donné que mon appel est accepté
    Quand je reçois la réponse finale
    Alors l'email contient:
      | élément               | contenu                                        |
      | Décision              | Annulation de la sanction                      |
      | Justification         | Explication de pourquoi l'appel est accepté    |
      | Actions               | Strike retiré, suspension annulée, contenu rétabli |
      | Définitif             | "Cette décision est définitive"                |
    Et le strike est retiré de mon compte
    Et le contenu est rétabli sur la plateforme
    Et je peux continuer normalement

  Scénario: Réponse finale détaillée - Appel rejeté
    Étant donné que mon appel est rejeté
    Quand je reçois la réponse finale
    Alors l'email contient:
      | élément               | contenu                                        |
      | Décision              | Maintien de la sanction                        |
      | Justification         | Explication de pourquoi l'appel est rejeté     |
      | Actions               | Sanction maintenue, strike conservé            |
      | Définitif             | "Cette décision est définitive"                |
    Et la sanction reste active
    Et je ne peux pas faire de second appel
    Et je dois respecter la suspension

  Scénario: Réponse finale - Réduction de sanction
    Étant donné que mon appel est partiellement accepté
    Quand je reçois la réponse finale
    Alors la décision est "Réduction de sanction"
    Et l'email explique:
      """
      Après examen de votre appel, nous reconnaissons des circonstances atténuantes.
      La sanction est réduite:
      - Strike 2 → Strike 1
      - Suspension 7 jours → Suspension 3 jours

      Cette décision est définitive.
      """
    Et le strike est réduit
    Et la suspension est raccourcie
    Et je suis notifié de la nouvelle date de fin

  Scénario: Suivi du statut de l'appel in-app
    Étant donné que j'ai soumis un appel
    Quand je consulte "Mes sanctions"
    Alors je vois le statut actuel de l'appel:
      | statut                  | badge                | couleur |
      | En cours d'examen       | En cours 🔍          | orange  |
      | Appel accepté           | Accepté ✓            | vert    |
      | Appel rejeté            | Rejeté ✗             | rouge   |
      | Sanction réduite        | Partiellement accepté| bleu   |
    Et une notification badge m'alerte quand le statut change

  # Transparence et traçabilité

  Scénario: Historique complet des sanctions visible
    Étant donné que je suis un créateur
    Quand j'ouvre "Profil créateur > Mes sanctions"
    Alors je vois la liste complète de mes sanctions passées:
      | colonne              | description                              |
      | Date                 | 15/01/2026                               |
      | Contenu              | "Mon podcast #42"                        |
      | Catégorie            | 🚫 Haine & violence                      |
      | Sanction             | Strike 2 - Suspension 7j                 |
      | Statut               | Active / Terminée / Annulée              |
      | Appel                | Aucun / Accepté / Rejeté                 |
    Et les sanctions sont triées par date décroissante

  Scénario: Conformité DSA - Transparence obligatoire
    Étant donné que le système de sanction est en place
    Quand un audit DSA est effectué
    Alors chaque sanction contient:
      | élément DSA                              | présent |
      | Référence précise à la règle violée      | oui     |
      | Explication claire et compréhensible     | oui     |
      | Preuve (extrait + transcription)         | oui     |
      | Possibilité de recours (appel)           | oui     |
      | Délai de recours clairement indiqué      | oui     |
      | Réponse motivée au recours               | oui     |
    Et le système est conforme au Digital Services Act

  # Pas de second appel

  Scénario: Décision définitive après premier appel
    Étant donné que mon premier appel a été rejeté
    Quand j'essaie de faire un second appel
    Alors le bouton "Faire appel" est désactivé
    Et un message s'affiche: "Cette décision est définitive. Aucun second appel n'est possible."
    Et je ne peux plus contester la sanction
    Et je dois respecter la décision finale

  # Coût des notifications

  Scénario: Coût des notifications multi-canal
    Étant donné que 100 sanctions sont appliquées en un mois
    Quand on calcule le coût des notifications
    Alors le coût total est d'environ 0.10€:
      | canal   | coût unitaire | coût pour 100 |
      | Email   | 0.001€        | 0.10€         |
      | Push    | 0€            | 0€            |
      | In-app  | 0€            | 0€            |
    Et le coût est négligeable même à grande échelle
