Cas d'usage › AGFC

Création d'une plateforme de gestion pour une association sportive

AGFC

Football corporatif, Genève

127
articles de règlement comme source unique
50
écrans, de la feuille de match à la facturation
1 589
tests automatisés au vert

Le dimanche soir, quelqu'un ressaisit les résultats, refait le classement, et cherche dans le règlement si le joueur aligné avait le droit de jouer. Ce quelqu'un est bénévole, et il a un métier par ailleurs.

Type de projet Produits IA
Durée Chantier pluriannuel, livré par vagues
Expertises Règles métier issues d'un corpus réglementaire
Logiciel de gestion sur mesure
Multilingue et conformité suisse
Tests automatisés de bout en bout
Technos Django 5
Django REST Framework
React
PostgreSQL / PostGIS
Celery
WeasyPrint

Contexte et enjeux

L'association fait vivre un championnat entier : calendrier, feuilles de match, désignation des arbitres, licences, transferts, suspensions, classements, promotions. Tout est écrit, dans cinq documents et environ 127 articles.

Écrit, donc à retrouver. Pour chaque décision, il faut remettre la main sur le bon article, l'appliquer, puis répercuter la conséquence dans le classement, les indemnités et les convocations. Une erreur en début de chaîne se propage sans que personne ne la voie, et ressort trois semaines plus tard quand un club conteste.

Le trésorier, lui, édite les factures des clubs à la main et pointe les virements reçus un par un. L'arbitre attend son indemnité et finit par la réclamer.

Le tout en trois langues officielles, avec des données qui doivent rester en Suisse et des factures au standard national.

Ce qu'on a fait

Faire du règlement la source unique

Approche : spécifier chaque règle à partir de son article

Chaque règle est écrite à partir de l'article qui la fonde, codée, puis couverte par des tests qui échouent si elle se casse. Classements, forfaits, qualifications, fair-play, promotions : le moteur applique le texte, pas l'interprétation retenue l'an dernier.

Prouver que le moteur dit vrai

Focus : comparer la sortie du logiciel au championnat réel

Nous avons rejoué une saison entière du site officiel dans le moteur et comparé les résultats ligne à ligne. Un moteur de règles qui n'a jamais été confronté au réel est une hypothèse, pas un outil.

Construire des chaînes plutôt que des écrans

Focus : la conséquence part avec l'événement

Une feuille de match validée termine le match, met à jour le classement, déclenche les indemnités d'arbitrage et prévient les clubs. Une licence suspendue bloque l'alignement du joueur partout où il pourrait l'être. Une équipe placée dans une ligue recalcule le classement et garde la trace de la demande.

Traiter l'argent au standard du pays

Technologies : QR-factures suisses au standard SIX, rapprochement bancaire CAMT.053

Les factures partent au format que les banques suisses attendent, et les paiements reçus se rapprochent automatiquement des factures émises. Les notes de frais du comité passent par une double validation.

Tenir sur le terrain, sans réseau et en trois langues

Technologies : Django 5, React, PostgreSQL avec PostGIS, PWA hors ligne, WeasyPrint

La feuille de match se remplit au bord du terrain même sans connexion, puis se synchronise. Huit rôles distincts encadrent qui voit et fait quoi, du gestionnaire de club au trésorier. Interface en français, allemand et italien, hébergement suisse, conformité nLPD.

Conclusion

Cinquante écrans couvrent aujourd'hui la vie de l'association, de l'inscription d'une équipe jusqu'à la facture envoyée à son club. Le comité constate au lieu de recalculer.

Un audit interne mené en août 2026 a cherché les enchaînements rompus entre deux écrans et nous les avons réparés un par un. La suite compte 1 589 tests automatisés au vert, et une saison bac à sable permet au comité d'essayer une manipulation sans toucher au championnat réel.

Le règlement écrit est devenu le comportement du logiciel. Une association gouvernée par des bénévoles ne peut pas reposer sur la mémoire de trois personnes, et celle-ci n'en dépend plus. La charpente est prête pour d'autres associations : les articles changent, le moteur reste.

Le dimanche soir, la feuille de match validée fait le reste toute seule. Le bénévole peut fermer son ordinateur.

Ce que ça a changé

Quand le comité change, l'association ne repart pas de zéro. Les règles qu'elle applique sont écrites, testées, et ne dépendent plus de qui était là l'année d'avant.

Détails techniques

Treize modules métier côté serveur : comptes et rôles, compétitions, équipes et licences, matchs et désignations, discipline, finances, notifications, terrains, moteur de règles.
Django 5 et Django REST Framework côté serveur, React et TanStack Query côté interface, cinquante écrans.
PostgreSQL avec PostGIS pour la géolocalisation des terrains, Redis et Celery pour les traitements différés.
Application installable qui fonctionne hors ligne pour la feuille de match, avec stockage local et synchronisation au retour du réseau.
Contrôle d'accès à huit rôles, chacun limité à son club ou à son association.
QR-factures au standard suisse SIX et rapprochement bancaire CAMT.053.
Traductions français, allemand et italien côté serveur comme côté interface, documents officiels générés en PDF avec WeasyPrint.
Hébergement en Suisse, conformité nLPD.

Un projet similaire ?

Discutons de vos enjeux et voyons ce qui pourrait vous faire gagner du temps chez vous.