diff --git a/docs/diagrammes/entites/modele-global.md b/docs/diagrammes/entites/modele-global.md new file mode 100644 index 0000000..d278ef6 --- /dev/null +++ b/docs/diagrammes/entites/modele-global.md @@ -0,0 +1,68 @@ +# Modèle de données - Entités globales + +📖 Entités de base utilisées dans tous les domaines métier + +## Diagramme + +```mermaid +erDiagram + USERS ||--o{ CONTENTS : "crée" + USERS ||--o{ SUBSCRIPTIONS : "s'abonne à" + USERS ||--o{ LISTENING_HISTORY : "écoute" + + CONTENTS ||--o{ LISTENING_HISTORY : "écouté" + CONTENTS }o--|| USERS : "créé par" + + USERS { + uuid id PK + string email UK + string pseudo UK + date birthdate + string role + timestamp created_at + boolean email_verified + } + + CONTENTS { + uuid id PK + uuid creator_id FK + string title + string audio_url + string status + string age_rating + string geo_type + point geo_location + string[] tags + int duration_seconds + timestamp published_at + boolean is_moderated + } + + SUBSCRIPTIONS { + uuid id PK + uuid subscriber_id FK + uuid creator_id FK + timestamp subscribed_at + } + + LISTENING_HISTORY { + uuid id PK + uuid user_id FK + uuid content_id FK + uuid creator_id FK + boolean is_subscribed + decimal completion_rate + int last_position_seconds + string source + timestamp listened_at + } +``` + +## Légende + +**Entités de base** : + +- **USERS** : Utilisateurs plateforme - Rôles : `listener`, `creator`, `moderator`, `admin` +- **CONTENTS** : Contenus audio - Status : `draft`, `pending_review`, `published`, `moderated`, `deleted` - Geo-type : `geo_ancre` (70% geo), `geo_contextuel` (50% geo), `geo_neutre` (20% geo) - Age rating : `all`, `13+`, `16+`, `18+` +- **SUBSCRIPTIONS** : Abonnements créateurs - Utilisé pour filtrer recommandations et calculer engagement +- **LISTENING_HISTORY** : Historique écoutes - Source : `recommendation`, `search`, `direct_link`, `profile`, `history`, `live_notification`, `audio_guide` - Utilisé pour scoring recommandation et statistiques créateur diff --git a/docs/diagrammes/entites/modele-moderation.md b/docs/diagrammes/entites/modele-moderation.md index 3655233..bdeeca9 100644 --- a/docs/diagrammes/entites/modele-moderation.md +++ b/docs/diagrammes/entites/modele-moderation.md @@ -1,43 +1,29 @@ # Modèle de données - Modération -📖 Voir [Règles métier - Section 14 : Modération Flows](../../regles-metier/14-moderation-flows.md) +📖 Voir [Règles métier - Section 14 : Modération Flows](../../regles-metier/14-moderation-flows.md) | [Entités globales](modele-global.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--|| USERS : "signalé par" + REPORTS }o--|| CONTENTS : "concerne" + REPORTS }o--|| MODERATORS : "traité 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--|| CONTENTS : "sanctionne" + SANCTIONS }o--|| USERS : "sanctionne créateur" SANCTIONS ||--o{ STRIKES : "crée" - USERS { - uuid id PK - string email UK - string pseudo UK - int trust_score - string role - } + APPEALS }o--|| REPORTS : "conteste" + APPEALS }o--|| USERS : "soumis par" + APPEALS }o--|| MODERATORS : "examiné par" - CONTENTS { - uuid id PK - uuid creator_id FK - string title - string status - point geo_location - boolean is_moderated - } + STRIKES }o--|| USERS : "attribué à" + STRIKES }o--|| SANCTIONS : "provient de" + + MODERATION_BADGES }o--|| USERS : "possédé par" REPORTS { uuid id PK @@ -45,10 +31,16 @@ erDiagram uuid reporter_id FK uuid moderator_id FK string category + text comment string status + text transcription int ai_score int priority string decision + timestamp created_at + timestamp reviewed_at + timestamp closed_at + boolean is_auto_action } SANCTIONS { @@ -58,6 +50,10 @@ erDiagram uuid creator_id FK string sanction_type int duration_days + text reason + text excerpt_timestamp + timestamp applied_at + timestamp expires_at boolean is_active } @@ -66,6 +62,8 @@ erDiagram uuid creator_id FK uuid sanction_id FK int strike_number + timestamp applied_at + timestamp expires_at boolean is_active } @@ -76,13 +74,22 @@ erDiagram uuid moderator_id FK string ticket_number UK string status + text reason + text arguments + text moderator_justification string decision + timestamp created_at + timestamp reviewed_at + timestamp closed_at } MODERATORS { uuid id PK string name string role + int reviews_count + decimal avg_review_time_minutes + timestamp last_active } MODERATION_BADGES { @@ -90,18 +97,21 @@ erDiagram uuid user_id FK string badge_type int reports_validated + int reports_rejected decimal accuracy_rate + timestamp obtained_at + timestamp last_audit_at 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%) +**Entités spécifiques modération** : -**Statuts REPORTS** : `received` → `transcribing` → `analyzing` → `pending_review` → `in_review` → `validated`/`rejected` → `closed` +- **REPORTS** : Signalements - 7 catégories (`hate_violence`, `sexual_content`, `illegal`, `copyright`, `spam`, `misinformation`, `other`) - Status : `received` → `transcribing` → `analyzing` → `pending_review` → `in_review` → `validated`/`rejected` → `closed` - Scoring IA 0-100%, priorité calculée +- **SANCTIONS** : Sanctions créateurs - Types : `warning`, `strike`, `suspension_7d`, `suspension_30d`, `ban_permanent` - Durée selon type (7j, 30j, permanent) +- **STRIKES** : Compteur strikes - 1/4 à 4/4 (Strike 4 = ban permanent) - Expiration après 6 mois +- **APPEALS** : Appels sanctions - Ticket format `#MOD-YYYY-XXXXX` - Status : `pending`, `in_review`, `accepted`, `rejected`, `expired` - Délai soumission 7j, traitement 72h (standard) ou 5j (complexe) +- **MODERATORS** : Modérateurs - Rôles : `junior_moderator`, `senior_moderator`, `admin_moderation` +- **MODERATION_BADGES** : Badges contributeurs - Types : `bronze` (5 validés, 70%), `silver` (20 validés, 80%), `gold` (50 validés, 90%) - Audit trimestriel révocation si critères non respectés diff --git a/mkdocs.yml b/mkdocs.yml index cbb2989..5c758fd 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -123,6 +123,7 @@ nav: - Séquences: - "Processus d'appel modération": diagrammes/sequence/processus-appel-moderation.md - Entités: + - 'Modèle global': diagrammes/entites/modele-global.md - 'Modèle modération': diagrammes/entites/modele-moderation.md - Documentation Légale: - Introduction: legal/README.md