> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cel-eleague.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Domaines fonctionnels

# Domaines fonctionnels vérifiés

Cette page cartographie les domaines réellement visibles dans le repo, principalement à partir du schéma Convex et des modules métier inspectés.

Elle ne décrit pas encore toutes les règles détaillées de chaque domaine.

## Cartographie Front (code-backed)

* Surface app : `web/src/app/(app)` (expérience joueur).
* Surface auth : `web/src/app/(auth)` (login, signup, onboarding, reset/forgot password, verify email).
* Surface admin : `web/src/app/admin` (opérations d’administration produit).

Les parcours ci-dessus sont observés via la structure de routes du dépôt et servent de base de navigation produit/front dans la documentation.

## Authentification, utilisateurs et profils

Éléments vérifiés :

* tables Auth Convex via `authTables` ;
* table `users` ;
* table `user_profiles` ;
* tokens d’email verification ;
* tokens de reset de mot de passe.

Le modèle utilisateur contient notamment :

* email ;
* username ;
* rôle global `USER`, `ADMIN` ou `MODERATOR` ;
* statut de compte `ACTIVE`, `DEACTIVATED` ou `DELETED` ;
* indicateur premium utilisateur ;
* index de recherche utilisateur.

Le profil joueur contient notamment :

* display name ;
* avatar / bannière / logo ;
* pays ;
* positions préférées ;
* identité EA : plateforme, gamertag, EA player id ;
* Discord ID et téléphone optionnels ;
* indicateur `openToOffers`.

## Clubs et effectifs

Éléments vérifiés :

* table `clubs` ;
* table `club_members` ;
* table `club_stream_links` ;
* module `convex/social/clubs.ts`.

Un club possède notamment :

* un GM utilisateur ;
* un nom ;
* un état actif ;
* des informations EA Club ;
* logo, logo premium, bannière ;
* couleurs primaire/secondaire ;
* description, abréviation, pays ;
* indicateur premium club ;
* index de recherche.

Les membres de club ont un statut :

* `IN_CLUB` ;
* `FREE_AGENT` ;
* `INACTIVE`.

Les rôles d’effectif vérifiés sont :

* `MANAGER` ;
* `CO_MANAGER` ;
* `COACH` ;
* `MEMBER`.

Les liens de stream club supportent actuellement :

* Twitch ;
* YouTube.

## Ligues, saisons et classements

Éléments vérifiés :

* table `leagues` ;
* table `league_clubs` ;
* table `league_player_stats_aggs` ;
* tables de snapshot calendrier.

Une ligue contient notamment :

* nom ;
* logo ;
* saison ;
* région ;
* statut ;
* dates de début/fin ;
* limite de clubs ;
* règles de roster ;
* paramètres de planification ;
* nombre total de reports par club ;
* règles textuelles.

Statuts de ligue vérifiés :

* `INSCRIPTIONS` ;
* `ONGOING` ;
* `COMPLETED` ;
* `CANCELLED` ;
* `ARCHIVED`.

## Matchs, planification, résultats et reports

Éléments vérifiés :

* table `matches` ;
* table `match_results` ;
* table `match_scheduling_propositions` ;
* table de reports de match ;
* table `disputes` ;
* module `convex/competition/matches.ts` repéré ;
* module `convex/competition/match_lineups.ts` inspecté en détail pour les compositions.

Un match contient notamment :

* ligue ;
* club domicile ;
* club extérieur ;
* journée ;
* date planifiée `scheduledAt` ;
* date originale et informations de report ;
* statut ;
* indicateur actif ;
* statut de synchronisation score EA ;
* référence EA match optionnelle ;
* informations de pari.

Les résultats stockent :

* score domicile / extérieur ;
* origine du résultat `NORMAL` ou `CLUB_FORFEIT` ;
* snapshots avant forfait pour restauration ;
* contestation / litige ;
* validation admin ;
* soumissions séparées des GM domicile et extérieur.

Les propositions de planning ont les statuts :

* `PENDING` ;
* `ACCEPTED` ;
* `REJECTED` ;
* `EXPIRED` ;
* `CANCELLED`.

Les litiges ont les statuts :

* `OPEN` ;
* `RESOLVED`.

## Compositions d’avant-match

Éléments vérifiés :

* table `match_lineups` ;
* module `convex/competition/match_lineups.ts` ;
* actions d’audit `SAVE_DRAFT_LINEUP_OVERRIDE` et `SUBMIT_LINEUP_OVERRIDE`.

Une composition contient :

* match ;
* club ;
* formation ;
* assignments par slot ;
* poste détaillé optionnel ;
* statut `draft` ou `submitted` ;
* date de soumission ;
* auteur de soumission.

Les postes détaillés vérifiés dans les lineups sont :

* `GK` ;
* `DG`, `DC`, `DD` ;
* `MDC`, `MC`, `MOC`, `MG`, `MD` ;
* `AG`, `AD`, `BU`.

## Statistiques EA FC et statistiques match

Éléments vérifiés :

* table `match_player_stats` ;
* table `match_team_stats` ;
* table `match_ea_unmatched_player_stats` ;
* tables `ea_api_cache`, `ea_circuit_state`, `ea_signup_tokens`, `ea_sync_metrics`.

Les statistiques joueur contiennent notamment :

* minutes jouées ;
* buts ;
* passes décisives ;
* cartons ;
* note ;
* passes, tacles, récupérations ;
* arrêts ;
* tirs ;
* précision de tir ;
* dribbles ;
* hors-jeu ;
* fautes ;
* pertes de balle ;
* buts encaissés ;
* clean sheets ;
* score de performance ;
* poste et poste détaillé.

Les stats EA non matchées permettent de conserver les lignes EA qui ne correspondent pas automatiquement à un joueur CEL.

## Annonces

Éléments vérifiés :

* table `announcements` ;
* table `announcement_reads` ;
* module `convex/social/announcements.ts`.

Les annonces supportent :

* tags ;
* statuts ;
* ciblage global, club ou ligue ;
* placements dashboard, bannière, all global, mur de club ;
* source de création ;
* fenêtres de publication ;
* lien optionnel ;
* compteur de lecture par utilisateur.
* intégration front : barre d'annonce (`components/announcements/AnnouncementTicker`) et mur club (`components/club/ClubWall`) (non vérifié pour la couverture exhaustive des placements).

## Articles, commentaires et réactions

Éléments vérifiés :

* table `articles` ;
* table `article_comments` ;
* table `article_likes` ;
* table `article_comment_likes` ;
* table `article_comment_dislikes`.

Catégories article vérifiées :

* `MATCH_RECAP` ;
* `PLAYER_PROFILE` ;
* `CLUB_NEWS` ;
* `LEAGUE_UPDATE` ;
* `COMMUNITY` ;
* `GUIDE`.

Statuts article vérifiés :

* `DRAFT` ;
* `PUBLISHED` ;
* `ARCHIVED`.

Sur la surface front :

* route publique : `web/src/app/(app)/journal/[slug]` ;
* lecture des commentaires sur les pages articles ;
* administration dédiée : `web/src/app/admin/articles` et `web/src/app/admin/articles/comments`.

## Notifications, emails et push

Éléments vérifiés :

* table `notifications` ;
* table `push_subscriptions` ;
* table `notification_preferences` ;
* table `email_outbox` ;
* table `email_delivery_logs` ;
* modules de messaging repérés dans `convex/messaging/*`.

Le système supporte :

* notifications in-app ;
* déduplication par `dedupKey` ;
* préférences push ;
* abonnements Web Push ;
* outbox email ;
* logs de livraison Resend.

## Sanctions et modération

Éléments vérifiés :

* table `sanctions` ;
* modèle canonique de sanction personne documenté dans le README ;
* actions d’audit liées aux sanctions.

Les effets vérifiés sont :

* `APP_ACCESS` ;
* `SPORT_ELIGIBILITY` ;
* `VISIBILITY` ;
* `CONTACT`.

Les états de cycle de vie vérifiés sont :

* `ACTIVE` ;
* `ENDED_MANUAL` ;
* `ENDED_EXPIRED` ;
* `ENDED_REPLACED`.

## Transferts et mercato

Éléments vérifiés :

* table `transfer_windows` ;
* table `transfers` ;
* table `premium_contract_breaks` ;
* module `convex/social/transfers_core.ts` repéré.

Types de transfert vérifiés :

* `INVITATION` ;
* `JOIN_REQUEST` ;
* `TRANSFER_REQUEST` ;
* `KICK` ;
* `LEAVE`.

Statuts de transfert vérifiés :

* `PENDING` ;
* `APPROVED` ;
* `EXECUTED` ;
* `REJECTED` ;
* `CANCELLED` ;
* `EXPIRED`.

## Forfaits club

Éléments vérifiés :

* table `club_forfeits` ;
* champs forfait dans `match_results` ;
* actions d’audit `DECLARE_CLUB_FORFEIT`, `CANCEL_CLUB_FORFEIT`, `APPLY_CLUB_FORFEIT`.

Le modèle de forfait club supporte :

* un club concerné ;
* une ligue ;
* une saison optionnelle ;
* un déclarant ;
* un scope ;
* une date d’effet ;
* un statut actif ou annulé ;
* une raison et une note admin.

## Paris / pronostics

Éléments vérifiés :

* table `bets` ;
* champs `bettable` et `bettingWave` sur les matchs ;
* actions d’audit liées aux paris.

Types de prédiction vérifiés :

* `HOME` ;
* `DRAW` ;
* `AWAY` ;
* `EXACT_SCORE`.

Statuts de pari vérifiés :

* `PENDING` ;
* `WON` ;
* `LOST` ;
* `CANCELLED`.

## Récompenses, palmarès, MVP, meilleur GK, TOTS et TOTW

Éléments vérifiés :

* table `season_awards` ;
* table `season_award_previews` ;
* table `season_award_entries` ;
* table `award_recipients` ;
* table `team_of_the_week` ;
* table `team_of_the_week_players` ;
* module `convex/competition/season_awards.ts` ;
* module `convex/lib/season_mvp.ts` ;
* frontend `web/src/app/admin/season-awards/_hooks/use-season-awards.ts` ;
* frontend `web/src/app/(app)/palmares/[awardId]/page.tsx` repéré ;
* composant `web/src/components/club/ClubPalmaresTab.tsx` repéré ;
* composant `web/src/components/club/ClubChampionCelebration.tsx` repéré.

Catégories de palmarès saison vérifiées :

* `CHAMPION` ;
* `RUNNER_UP` ;
* `SEASON_MVP` ;
* `BEST_GK` ;
* `TOTS`.

Types de bénéficiaires historiques vérifiés :

* `season_champion` ;
* `season_runner_up` ;
* `season_mvp` ;
* `best_gk` ;
* `tots` ;
* `totw` ;
* `motm`.

Positionnement front (awards / palmarès / TOTW / TOTS) :

* page publique palmarès : `web/src/app/(app)/palmares/[awardId]` ;
* page publique TOTW : `web/src/app/(app)/totw` ;
* présentation palmarès en profil club : `web/src/components/club/ClubPalmaresTab.tsx` ;
* administration : `web/src/app/admin/season-awards` pour la gestion générale des awards et `web/src/app/admin/totw` pour la gestion TOTW.

## Uploads et médias

Éléments vérifiés :

* table `upload_objects` ;
* lifecycle upload utilisé dans le module club ;
* cache YouTube live `youtube_live_cache`.

## Stripe et premium

Éléments vérifiés :

* dépendances Stripe côté racine ;
* table `stripe_webhook_log` ;
* table `stripe_customer_index` ;
* champs premium sur `users` et `clubs` ;
* table `premium_contract_breaks`.

Les règles produit exactes du premium doivent encore être documentées après lecture des modules Stripe/premium.

## Audit logs et système

Éléments vérifiés :

* table `audit_logs` ;
* table `system_settings` ;
* table `cron_executions` ;
* table `migration_runs`.

Les audit logs couvrent de nombreuses actions : clubs, ligues, matchs, résultats, litiges, sanctions, transferts, paris, utilisateurs, articles, commentaires, lineups, streams, palmarès et forfaits.
