doc(diagrammes): ajouter diagrammes Mermaid pour modération
Structure minimaliste : - docs/diagrammes/flux/ : Flowcharts - docs/diagrammes/etats/ : State diagrams - docs/diagrammes/sequence/ : Sequence diagrams - docs/diagrammes/entites/ : Entity-Relationship diagrams Exemples créés pour modération (Section 14) : - Flux de signalement complet - Cycle de vie d'un signalement (13 états) - Processus d'appel créateur - Modèle de données modération (8 entités) Chaque fichier contient uniquement : - Référence vers règle métier - Diagramme Mermaid détaillé - Légende courte Intégration dans navigation MkDocs.
This commit is contained in:
107
docs/diagrammes/entites/modele-moderation.md
Normal file
107
docs/diagrammes/entites/modele-moderation.md
Normal file
@@ -0,0 +1,107 @@
|
||||
# Modèle de données - Modération
|
||||
|
||||
📖 Voir [Règles métier - Section 14 : Modération Flows](../../regles-metier/14-moderation-flows.md)
|
||||
|
||||
## Diagramme
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
USERS ||--o{ REPORTS : "signale"
|
||||
USERS ||--o{ CONTENTS : "crée"
|
||||
USERS ||--o{ MODERATION_BADGES : "possède"
|
||||
USERS ||--o{ APPEALS : "soumet"
|
||||
|
||||
CONTENTS ||--o{ REPORTS : "concerne"
|
||||
CONTENTS ||--o{ SANCTIONS : "sanctionné par"
|
||||
|
||||
REPORTS ||--o| SANCTIONS : "génère"
|
||||
REPORTS ||--o| APPEALS : "fait l'objet de"
|
||||
REPORTS }o--|| MODERATORS : "traité par"
|
||||
|
||||
APPEALS }o--|| MODERATORS : "examiné par"
|
||||
|
||||
SANCTIONS ||--o{ STRIKES : "crée"
|
||||
|
||||
USERS {
|
||||
uuid id PK
|
||||
string email UK
|
||||
string pseudo UK
|
||||
int trust_score
|
||||
string role
|
||||
}
|
||||
|
||||
CONTENTS {
|
||||
uuid id PK
|
||||
uuid creator_id FK
|
||||
string title
|
||||
string status
|
||||
point geo_location
|
||||
boolean is_moderated
|
||||
}
|
||||
|
||||
REPORTS {
|
||||
uuid id PK
|
||||
uuid content_id FK
|
||||
uuid reporter_id FK
|
||||
uuid moderator_id FK
|
||||
string category
|
||||
string status
|
||||
int ai_score
|
||||
int priority
|
||||
string decision
|
||||
}
|
||||
|
||||
SANCTIONS {
|
||||
uuid id PK
|
||||
uuid report_id FK
|
||||
uuid content_id FK
|
||||
uuid creator_id FK
|
||||
string sanction_type
|
||||
int duration_days
|
||||
boolean is_active
|
||||
}
|
||||
|
||||
STRIKES {
|
||||
uuid id PK
|
||||
uuid creator_id FK
|
||||
uuid sanction_id FK
|
||||
int strike_number
|
||||
boolean is_active
|
||||
}
|
||||
|
||||
APPEALS {
|
||||
uuid id PK
|
||||
uuid report_id FK
|
||||
uuid creator_id FK
|
||||
uuid moderator_id FK
|
||||
string ticket_number UK
|
||||
string status
|
||||
string decision
|
||||
}
|
||||
|
||||
MODERATORS {
|
||||
uuid id PK
|
||||
string name
|
||||
string role
|
||||
}
|
||||
|
||||
MODERATION_BADGES {
|
||||
uuid id PK
|
||||
uuid user_id FK
|
||||
string badge_type
|
||||
int reports_validated
|
||||
decimal accuracy_rate
|
||||
boolean is_active
|
||||
}
|
||||
```
|
||||
|
||||
## Légende
|
||||
|
||||
**Entités** :
|
||||
- **REPORTS** : Signalements - 7 catégories (haine, sexuel, illégal, copyright, spam, désinformation, autre), scoring IA 0-100%, priorité CRITIQUE/HAUTE/MOYENNE/BASSE
|
||||
- **SANCTIONS** : Strike (avertissement), Suspension (7j/30j), Ban permanent
|
||||
- **APPEALS** : Appels créateurs - ticket #MOD-YYYY-XXXXX, délai 7j, examen 72h
|
||||
- **STRIKES** : Compteur créateur 1/4 à 4/4 (Strike 4 = ban permanent, expiration 6 mois)
|
||||
- **MODERATION_BADGES** : Bronze (5 validés, 70%), Argent (20 validés, 80%), Or (50 validés, 90%)
|
||||
|
||||
**Statuts REPORTS** : `received` → `transcribing` → `analyzing` → `pending_review` → `in_review` → `validated`/`rejected` → `closed`
|
||||
75
docs/diagrammes/etats/signalement-lifecycle.md
Normal file
75
docs/diagrammes/etats/signalement-lifecycle.md
Normal file
@@ -0,0 +1,75 @@
|
||||
# Cycle de vie d'un signalement
|
||||
|
||||
📖 Voir [Règles métier - Section 14 : Modération Flows](../../regles-metier/14-moderation-flows.md)
|
||||
|
||||
## Diagramme
|
||||
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
[*] --> Reçu: Utilisateur envoie signalement
|
||||
|
||||
Reçu --> EnTranscription: Ajout à la file
|
||||
|
||||
EnTranscription --> EnAnalyseIA: Transcription terminée
|
||||
|
||||
EnAnalyseIA --> EnAttenteModo: Score IA calculé<br/>Priorisé dans la file
|
||||
EnAnalyseIA --> ActionAuto: Score IA >95%<br/>+ Catégorie évidente
|
||||
|
||||
EnAttenteModo --> EnExamen: Modérateur prend en charge
|
||||
|
||||
EnExamen --> Validé: Violation confirmée
|
||||
EnExamen --> Rejeté: Pas de violation
|
||||
|
||||
ActionAuto --> Validé: Sanction automatique
|
||||
|
||||
Validé --> SanctionAppliquée: Notification créateur
|
||||
|
||||
SanctionAppliquée --> EnAppel: Créateur conteste<br/>sous 7 jours
|
||||
SanctionAppliquée --> Clôturé: Pas de contestation<br/>ou délai expiré
|
||||
|
||||
EnAppel --> ExamenAppel: Modérateur senior<br/>examine sous 72h
|
||||
|
||||
ExamenAppel --> AppelAccepté: Sanction annulée
|
||||
ExamenAppel --> AppelRejeté: Sanction maintenue
|
||||
|
||||
AppelAccepté --> Clôturé: Strike retiré<br/>Contenu rétabli
|
||||
AppelRejeté --> Clôturé: Sanction définitive
|
||||
|
||||
Rejeté --> Clôturé: Notification signaleur
|
||||
|
||||
Clôturé --> [*]
|
||||
|
||||
note right of EnAttenteModo
|
||||
File intelligente
|
||||
Tri par priorité:
|
||||
- CRITIQUE (score ≥90)
|
||||
- HAUTE (70-89)
|
||||
- MOYENNE (40-69)
|
||||
- BASSE (<40)
|
||||
end note
|
||||
|
||||
note right of ActionAuto
|
||||
Action immédiate si:
|
||||
- Score IA >95%
|
||||
- Pattern évident
|
||||
- Spam détecté
|
||||
end note
|
||||
|
||||
note right of EnAppel
|
||||
Délai: 7 jours max
|
||||
Ticket unique généré
|
||||
end note
|
||||
```
|
||||
|
||||
## Légende
|
||||
|
||||
**États principaux** :
|
||||
- **Reçu** : Signalement initial (<1s)
|
||||
- **EnTranscription** : Whisper large-v3 (1-20 min)
|
||||
- **EnAnalyseIA** : Score confiance 0-100% (<1 min)
|
||||
- **ActionAuto** : Sanction automatique si score >95%
|
||||
- **EnAttenteModo** : File prioritaire (2h à 72h selon priorité)
|
||||
- **EnExamen** : Modérateur examine (5-20 min)
|
||||
- **SanctionAppliquée** : Notification multi-canal
|
||||
- **EnAppel** : Examen senior (72h max)
|
||||
- **Clôturé** : Archivage 3 ans (RGPD)
|
||||
75
docs/diagrammes/flux/moderation-signalement.md
Normal file
75
docs/diagrammes/flux/moderation-signalement.md
Normal file
@@ -0,0 +1,75 @@
|
||||
# Flux de modération - Processus de signalement
|
||||
|
||||
📖 Voir [Règles métier - Section 14 : Modération Flows](../../regles-metier/14-moderation-flows.md)
|
||||
|
||||
## Diagramme
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start([Utilisateur signale un contenu]) --> Form[Formulaire signalement<br/>7 catégories + commentaire optionnel]
|
||||
Form --> Submit[Envoi signalement]
|
||||
Submit --> Toast[Toast confirmation<br/>Traitement sous 24-48h]
|
||||
|
||||
Submit --> Queue[Ajout file d'attente]
|
||||
Queue --> Transcription[Transcription automatique<br/>Whisper large-v3]
|
||||
Transcription --> AI[Analyse IA<br/>Score confiance 0-100%]
|
||||
|
||||
AI --> Priority{Calcul priorité}
|
||||
Priority -->|Score ≥90| Critical[🔴 CRITIQUE<br/>Traitement <2h]
|
||||
Priority -->|Score 70-89| High[🟠 HAUTE<br/>Traitement <24h]
|
||||
Priority -->|Score 40-69| Medium[🟡 MOYENNE<br/>Traitement <24h]
|
||||
Priority -->|Score <40| Low[⚪ BASSE<br/>Traitement <72h]
|
||||
|
||||
Critical --> AutoAction{Score IA >95%<br/>+ catégorie évidente?}
|
||||
AutoAction -->|Oui| AutoSanction[Action automatique]
|
||||
AutoAction -->|Non| ModReview
|
||||
|
||||
High --> ModReview[Examen modérateur]
|
||||
Medium --> ModReview
|
||||
Low --> ModReview
|
||||
|
||||
ModReview --> Decision{Décision}
|
||||
|
||||
Decision -->|Validé| Sanction[Application sanction<br/>Strike/Suspension/Ban]
|
||||
Decision -->|Rejeté| Reject[Signalement rejeté]
|
||||
|
||||
AutoSanction --> Notify
|
||||
Sanction --> Notify[Notification créateur<br/>Email + Push + In-app]
|
||||
|
||||
Notify --> Creator{Créateur réagit?}
|
||||
Creator -->|Conteste<br/>sous 7 jours| Appeal[Formulaire d'appel<br/>Ticket généré]
|
||||
Creator -->|Accepte ou<br/>pas de réaction| Final1[Sanction définitive]
|
||||
|
||||
Appeal --> SeniorMod[Modérateur senior<br/>Examen sous 72h]
|
||||
SeniorMod --> AppealDecision{Décision appel}
|
||||
|
||||
AppealDecision -->|Accepté| Overturn[Annulation sanction<br/>Strike retiré]
|
||||
AppealDecision -->|Rejeté| Maintain[Maintien sanction]
|
||||
|
||||
Overturn --> Final2[Décision définitive]
|
||||
Maintain --> Final2
|
||||
|
||||
Reject --> NotifyReporter[Notification signaleur<br/>Mise à jour historique]
|
||||
|
||||
Final1 --> End([Fin du processus])
|
||||
Final2 --> End
|
||||
NotifyReporter --> End
|
||||
|
||||
style Critical fill:#ff6b6b,stroke:#c92a2a,color:#fff
|
||||
style High fill:#ff922b,stroke:#d9480f,color:#fff
|
||||
style Medium fill:#ffd43b,stroke:#f59f00,color:#000
|
||||
style Low fill:#e9ecef,stroke:#adb5bd,color:#000
|
||||
style Sanction fill:#fa5252,stroke:#c92a2a,color:#fff
|
||||
style Overturn fill:#51cf66,stroke:#2b8a3e,color:#fff
|
||||
style AutoSanction fill:#ff6b6b,stroke:#c92a2a,color:#fff
|
||||
```
|
||||
|
||||
## Légende
|
||||
|
||||
**Priorités de traitement** :
|
||||
- 🔴 **CRITIQUE** (score ≥90) : <2h - Violence, suicide, danger immédiat
|
||||
- 🟠 **HAUTE** (70-89) : <24h - Haine, harcèlement
|
||||
- 🟡 **MOYENNE** (40-69) : <24h - Spam, contenu inapproprié
|
||||
- ⚪ **BASSE** (<40) : <72h - Qualité audio, tags incorrects
|
||||
|
||||
**Calcul priorité** : `(Score_IA × 0.7) + (Signalements_cumulés × 0.2) + (Fiabilité_signaleur × 0.1)`
|
||||
59
docs/diagrammes/sequence/processus-appel-moderation.md
Normal file
59
docs/diagrammes/sequence/processus-appel-moderation.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# Processus d'appel de modération
|
||||
|
||||
📖 Voir [Règles métier - Section 14 : Modération Flows](../../regles-metier/14-moderation-flows.md)
|
||||
|
||||
## Diagramme
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
actor Créateur
|
||||
participant App as Application Mobile
|
||||
participant API as Backend API
|
||||
participant Email as Service Email
|
||||
actor ModSenior as Modérateur Senior
|
||||
|
||||
Note over Créateur,ModSenior: Notification sanction initiale
|
||||
|
||||
API->>Créateur: Email + Push + In-app<br/>(catégorie + raison + extrait)
|
||||
|
||||
Note over Créateur,ModSenior: Soumission appel (J+0 à J+7)
|
||||
|
||||
Créateur->>App: Clique "Contester cette décision"
|
||||
App->>Créateur: Affiche formulaire d'appel
|
||||
|
||||
Créateur->>App: Remplit formulaire + preuves
|
||||
App->>API: POST /appeals
|
||||
|
||||
API->>API: Génère ticket #MOD-2026-XXXXX
|
||||
|
||||
API->>Email: Email confirmation
|
||||
Email->>Créateur: "Appel traité sous 72h"
|
||||
|
||||
Note over Créateur,ModSenior: Examen modérateur senior (J+0 à J+3)
|
||||
|
||||
ModSenior->>API: Consulte appel
|
||||
API-->>ModSenior: Données complètes<br/>(signalement + arguments + historique)
|
||||
|
||||
alt Appel accepté
|
||||
ModSenior->>API: Accepter appel
|
||||
API->>Email: Email créateur
|
||||
Email->>Créateur: "✅ Appel accepté<br/>Strike retiré"
|
||||
else Appel rejeté
|
||||
ModSenior->>API: Rejeter appel
|
||||
API->>Email: Email créateur
|
||||
Email->>Créateur: "❌ Appel rejeté<br/>Décision définitive"
|
||||
end
|
||||
|
||||
opt Cas complexe (J+3)
|
||||
API->>Email: Email intermédiaire
|
||||
Email->>Créateur: "Examen approfondi<br/>Réponse sous 2 jours"
|
||||
end
|
||||
```
|
||||
|
||||
## Légende
|
||||
|
||||
**Phases** :
|
||||
1. **Notification sanction** : Multi-canal (Email + Push + In-app)
|
||||
2. **Soumission appel** : Délai 7 jours max après sanction, formulaire obligatoire (raison + arguments), preuves optionnelles (max 5 fichiers, 10 MB)
|
||||
3. **Examen senior** : 72h standard, 5 jours si complexe avec notification intermédiaire J+3
|
||||
4. **Décision** : Accepté (strike retiré, contenu rétabli) ou Rejeté (définitif, pas de second appel)
|
||||
21
mkdocs.yml
21
mkdocs.yml
@@ -36,11 +36,16 @@ theme:
|
||||
plugins:
|
||||
- search:
|
||||
lang: fr
|
||||
- glightbox: # Lightbox pour agrandir les images
|
||||
|
||||
markdown_extensions:
|
||||
- admonition
|
||||
- pymdownx.details
|
||||
- pymdownx.superfences
|
||||
- pymdownx.superfences:
|
||||
custom_fences:
|
||||
- name: mermaid
|
||||
class: mermaid
|
||||
format: !!python/name:pymdownx.superfences.fence_code_format
|
||||
- pymdownx.tabbed:
|
||||
alternate_style: true
|
||||
- pymdownx.emoji:
|
||||
@@ -50,6 +55,7 @@ markdown_extensions:
|
||||
- toc:
|
||||
permalink: true
|
||||
- attr_list
|
||||
- md_in_html # Permet d'utiliser du markdown dans du HTML
|
||||
- def_list
|
||||
|
||||
nav:
|
||||
@@ -109,6 +115,15 @@ nav:
|
||||
- Transverse:
|
||||
- '19: Autres Comportements': regles-metier/19-autres-comportements.md
|
||||
- 'Annexe: Post-MVP': regles-metier/ANNEXE-POST-MVP.md
|
||||
- Diagrammes:
|
||||
- Flux:
|
||||
- 'Processus de signalement': diagrammes/flux/moderation-signalement.md
|
||||
- États:
|
||||
- 'Cycle de vie signalement': diagrammes/etats/signalement-lifecycle.md
|
||||
- Séquences:
|
||||
- "Processus d'appel modération": diagrammes/sequence/processus-appel-moderation.md
|
||||
- Entités:
|
||||
- 'Modèle modération': diagrammes/entites/modele-moderation.md
|
||||
- Documentation Légale:
|
||||
- Introduction: legal/README.md
|
||||
- "Conditions Générales d'Utilisation": legal/cgu.md
|
||||
@@ -117,6 +132,10 @@ nav:
|
||||
- 'Charte Créateur': legal/charte-createur.md
|
||||
- 'Mentions Légales': legal/mentions-legales.md
|
||||
- 'Politique de Confidentialité': legal/politique-confidentialite.md
|
||||
- Interfaces:
|
||||
- Vue d'ensemble: interfaces/README.md
|
||||
- Mobile:
|
||||
- Navigation & Architecture: interfaces/mobile/navigation.md
|
||||
- Mobile:
|
||||
- 'Stratégie Permissions': mobile/permissions-strategy.md
|
||||
- 'Validation TestFlight': mobile/testflight-validation-plan.md
|
||||
|
||||
Reference in New Issue
Block a user