{# Documentation fonctionnelle — visible uniquement pour ROLE_ADMIN #}

Guide du site LPF'26

Référence réservée aux administrateurs : règles métier, parcours joueurs et outils back-office. Cette section n’est pas visible par les autres joueurs.

Inscription, équipes et invitations
  • Inscription (/inscription) : le joueur 1 crée son compte, son équipe (nom), son surnom et peut indiquer l’e-mail du partenaire.
  • Un e-mail de confirmation est envoyé au joueur 1 ; une invitation part au joueur 2 si l’e-mail est renseigné (lien valable 3 jours, renouvelable depuis l’admin).
  • Invitation (/invitation/{token}) : le joueur 2 crée son compte et rejoint l’équipe existante.
  • Compte (/mon-compte) : profil, mot de passe, logo d’équipe, invitation d’un partenaire si l’équipe n’est pas complète (2 joueurs max.).
  • Depuis le début de la compétition : nom d’équipe et buteur verrouillés pour les joueurs.
Cotisation (10 € / joueur)
  • Chaque joueur doit avoir cotisationPayee activé en admin (utilisateur EasyAdmin) pour pronostiquer — un e-mail de confirmation est envoyé automatiquement au joueur.
  • Sans cotisation : bandeau rouge, formulaires de prono grisés, message sur les cartes match.
  • Le choix du buteur sur l’accueil est aussi bloqué tant que la cotisation n’est pas validée.
  • Contact virement : variable COTISATION_WIRE_PHONE (modale du bandeau).
Buteur et points buteur
  • Chaque joueur cotisé choisit un buteur (accueil ou compte) avant verrouillage au début de la compétition.
  • À chaque but : palier fixe selon le nombre de joueurs ayant choisi ce buteur — 1 → 50 pts, 2 → 40, 3-4 → 30, 5-7 → 20, 8+ → 10.
  • Le palier est recalculé au moment du but (évolution possible tant que les choix ne sont pas verrouillés).
  • Les points buteur s’ajoutent au classement équipe (cumul des deux joueurs).
  • Recalcul : php bin/console app:rescore:buteur-goals après changement de sélections ou import de buts.
Pronostics
  • Accueil : dernière journée terminée + prochaine journée (cartes match).
  • Matchs (/matchs) : tous les matchs par journée ; saisie directe du score domicile / extérieur.
  • Pronos (/pronostics) : vue liste de tous les matchs et pronos du joueur.
  • Modification possible tant que le match est SCHEDULED et que l’heure de coup d’envoi n’est pas passée.
  • Sur chaque carte : le joueur voit aussi le/les pronos de son partenaire (même équipe).
  • Match terminé : lien « Voir tous les pronos » → détail public des pronos du match.
Cotes
  • Calculées à chaque enregistrement de prono pour un match (tous joueurs ayant pronostiqué).
  • Mode one_n_two (défaut) : trois cotes 1 / N / 2 selon la popularité de chaque issue (formule proportion + ajustement, plafond ×5, arrondi à 2 décimales).
  • Mode exact_score : coefficient = total pronos ÷ pronos sur le même score (plafond ×5, arrondi à 2 décimales).
  • Carte match : cotes 1 / N / 2 (coteDomicile, coteNul, coteExterieur) ou min/moy/max en mode score exact.
  • Recalcul global après changement de mode : php bin/console app:match:rescore-all.
  • Points finaux = points de base × cote, arrondis à l’entier (ex. 10 × 3,25 → 33 pts).
Points de base (par match)
  • Barème LPF24 : score exact 30 pts, bon 1/N/2 10 pts, faux 0 pt (champs pointsScoreExact, pointsBonResultat, pointsMauvaisResultat — modifiables par match).
  • Avec cote max ×5 : jusqu’à 150 pts (exact) ou 50 pts (bon résultat) par joueur et par match.
  • Recalcul automatique quand un prono est saisi/modifié ou quand le score réel du match est renseigné (sync / admin).
{{ bigballs_term('name') }}
  • Si les deux joueurs d’une même équipe pronostiquent le même score sur un match, chacun est marqué « {{ bigballs_term('name')|lower }} » sur ce match.
  • Classement : tenté = les 2 joueurs de l’équipe ont le même prono sur le match ; réussi = ce score commun est exact.
  • En cas d’égalité au classement : critère de départage après les scores exacts et bons résultats (plus de {{ bigballs_term('name_plural')|lower }} = mieux classé).
Classement
  • Classement (/classement) : snapshots par match terminé, ordre : points totaux → scores exacts → bons résultats → {{ bigballs_term('name_plural')|lower }} → nom d’équipe.
  • Fiche équipe : historique, membres, stats agrégées.
  • Groupes des pays (/groupes) : classements de poules calculés à partir des matchs de groupe.
  • Les snapshots sont reconstruits à chaque rescoring d’un match.
Relances pronostic automatiques
  • Commande cron : php bin/console app:push:pronostic-reminders (ex. toutes les 5–10 min, fuseau Europe/Paris).
  • Cible : joueurs cotisation payée, sans prono sur le match, match pas encore commencé, relance pas déjà envoyée avec succès.
  • Heure d’envoi : coup d’envoi entre 10h et minuit → relance 1 h avant ; entre 0h et 10h → relance la veille à 22h.
  • Canal : push si abonnement actif (une relance par match), sinon e-mail (une seule relance par journée calendaire, avant le premier match oublié).
  • Historique : Relances pronostic (admin).
Messages manuels (push / e-mail)
  • Page Messages manuels : envoi à tous les joueurs actifs ou à une sélection.
  • Canaux : push et/ou e-mail ; titre, corps, lien optionnel.
  • Push : nécessite clés VAPID (app:generate-vapid-keys) et abonnements joueurs (compte → notifications).
  • Historique des envois sur la même page.
Administration EasyAdmin
  • Back-office : utilisateurs (rôles, cotisation), équipes, matchs, pronos, pays, buteurs, invitations.
  • Sync CDM 2026 : pays, matchs, buteurs, buts (API Football) depuis le menu admin.
  • Scores réels saisis ou synchronisés → déclenchement du rescoring et du classement.
  • Rôles : ROLE_ADMIN (admin + ce guide), ROLE_SUPER_ADMIN pour la synchro avancée.