Skip to main content

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.

Formule de points

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 :
  1. points décroissant
  2. goalDifference décroissant
  3. goalsFor décroissant
  4. clubId lexicographique croissant

Statuts prise en compte

Les calculs utilisent les états de match normalisés en minuscule, notamment :
  • validated
  • completed
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