Classements
Cette page regroupe les règles de classement vérifiées dans le code Convex.
Sources principales :
convex/schema.ts
convex/competition/leagues.ts
convex/competition/league_mutations.ts
convex/competition/match_result_mutations.ts
Données d’agrégat
league_clubs porte les indicateurs de championnat :
leagueId, clubId, division, points, matchesPlayed, wins, draws, losses, goalsFor, goalsAgainst, goalDifference, position.
Mise à jour incrémentale (updateLeagueStandings) :
- victoire :
+3
- nul :
+1
- défaite :
+0
La version inverse utilise la valeur négative symétrique lors des correctifs (réversion/annulation).
recalculateLeagueStandingsCore reconstruit ces valeurs depuis les matchs validés/terminés.
Tie-break canonique (confirmé)
Le tri canonique est appliqué dans sortStandings :
points décroissant
goalDifference décroissant
goalsFor décroissant
clubId lexicographique croissant
Statuts prise en compte
Les calculs utilisent les états de match normalisés en minuscule, notamment :
Le runtime traite completed comme un état final compatible avec les données
historiques/importées. Les mutations actuelles de résultat (validateResult,
validation concordante des GMs, validation automatique et écriture admin)
produisent validated ; aucun chemin d’écriture actif audité ne produit
completed.
Cycle de classement
Quand un résultat devient final (validated) :
- contributions d’un match ajoutées,
- tri recalculé,
- positionnement stocké.
Quand un résultat est retiré ou corrigé :
- application inverse (
-1, -goalFor, etc. via le même moteur),
- recomposition selon le tri canonique.
Données dérivées
Le classement alimente notamment les exports palmarès saison et les vues de progression avec les champs déjà listés dans league_clubs.
Données joueur
Les statistiques saison joueur sont calculées à l’exécution depuis
match_player_stats, en excluant les lignes invalidées et les matchs qui ne
sont pas actifs ou terminés. getLeaguePlayerSeasonStats agrège notamment buts,
passes, minutes, cartons, évaluations et nombre de matchs distincts.
league_player_stats_aggs est une table legacy conservée pour migration et
restauration de snapshots. Elle n’est plus la source runtime des statistiques
joueur et est explicitement purgée lors de la suppression des données calendrier
d’une ligue.
Une correction de score modifie le classement club via
updateLeagueStandings. Elle ne réécrit pas automatiquement les statistiques
joueur : celles-ci changent uniquement quand les lignes
match_player_stats sont modifiées, invalidées ou restaurées.
Précautions
- Les lectures acceptent également les variantes historiques en majuscules
VALIDATED et COMPLETED dans les requêtes qui reconstruisent les agrégats.
- L’arbitrage de litiges, les forfaits et la propagation des sanctions sont
documentés dans leurs pages dédiées ; leurs moteurs réappliquent ou
reconstruisent le classement lorsque nécessaire.
Last modified on July 16, 2026