Écran Statistiques : inscriptions, réponses, cotisations et besoins
Nouvel onglet « Statistiques » (/statistiques, COORDINATION), alimenté
par GET /editions/{id}/stats (app/api/stats.py, recalculé à chaque appel,
aucune nouvelle entité) :
- inscriptions : total, 7 derniers jours, évolution cumulée par jour
- réponses : part des bénévoles ayant renseigné chaque information,
artistes les plus demandés
- cotisations : en ligne / sur place / aucune, montants par type,
mécénat, formulaires remplis sans paiement abouti
- besoins face aux bénévoles, par journée de festival : heures × personnes
demandées vs disponibilités déclarées vs affectées ; par poste, places
pourvues (plafonnées à l'effectif idéal de chaque créneau) et rapport
vœux / place
Graphiques SVG maison (components/charts.tsx) avec infobulles au survol
et au clavier, vue tableau pour chacun, palette validée (daltonisme,
contraste), mise en page vérifiée sur ordinateur et mobile. Le mock
calcule les mêmes chiffres et étale les inscriptions du jeu de démo.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
ff57bbd863
commit
ee1f6ed72e
@@ -388,6 +388,68 @@
|
||||
"badge.no_volunteers": "Aucun bénévole ne correspond à cette sélection.",
|
||||
|
||||
"tab.forms": "Inscriptions",
|
||||
"tab.stats": "Statistiques",
|
||||
"stats.kpi.registered": "Bénévoles inscrits · +{count} en 7 jours",
|
||||
"stats.kpi.collected": "Cotisations encaissées en ligne",
|
||||
"stats.kpi.coverage": "Places pourvues · {assigned} / {ideal}",
|
||||
"stats.kpi.withAvailability": "Ont déclaré des disponibilités · sur {total}",
|
||||
"stats.empty": "Aucun bénévole inscrit pour l'instant.",
|
||||
"stats.showTable": "Voir le tableau",
|
||||
"stats.unit.hours": "h",
|
||||
"stats.registrations.title": "Évolution des inscriptions",
|
||||
"stats.registrations.help": "Nombre cumulé de bénévoles en base, par jour d'ajout (formulaire public, import ou ajout à la main).",
|
||||
"stats.registrations.cumulative": "inscrits au total",
|
||||
"stats.registrations.daily": "nouveaux ce jour",
|
||||
"stats.answers.title": "Réponses",
|
||||
"stats.answers.help": "Part des bénévoles ayant renseigné chaque information (formulaire public ou fiche).",
|
||||
"stats.answers.email": "Email",
|
||||
"stats.answers.phone": "Téléphone",
|
||||
"stats.answers.available": "Case « disponible »",
|
||||
"stats.answers.positionWishes": "Vœux de poste",
|
||||
"stats.answers.artistWishes": "Vœux d'artiste",
|
||||
"stats.answers.companionWishes": "Vœux de compagnon",
|
||||
"stats.answers.companionNote": "Compagnon (texte libre)",
|
||||
"stats.answers.photo": "Photo",
|
||||
"stats.answers.comment": "Commentaire",
|
||||
"stats.artists.title": "Artistes que les bénévoles veulent voir",
|
||||
"stats.payments.title": "Cotisations",
|
||||
"stats.payments.help": "En ligne : paiement SumUp confirmé. Sur place : « je paierai sur place » ou case cotisation cochée sans paiement en ligne.",
|
||||
"stats.payments.online": "En ligne",
|
||||
"stats.payments.onSite": "Sur place",
|
||||
"stats.payments.none": "Aucune",
|
||||
"stats.payments.byOption": "Paiements en ligne par type",
|
||||
"stats.payments.noOnline": "Aucun paiement en ligne pour l'instant.",
|
||||
"stats.payments.mecenatTag": "mécénat",
|
||||
"stats.payments.total": "Total",
|
||||
"stats.payments.mecenat": "Dont mécénat : {count} don(s), {amount} (reçus fiscaux).",
|
||||
"stats.payments.unfinished": "{count} formulaire(s) rempli(s) sans paiement abouti : ces personnes ne sont pas comptées parmi les bénévoles (paiement refusé, abandonné ou expiré).",
|
||||
"stats.needs.title": "Besoins et bénévoles",
|
||||
"stats.needs.help": "Heures × personnes demandées par les créneaux, face aux heures de disponibilité déclarées et aux heures déjà affectées — par journée de festival (une soirée qui passe minuit compte pour le jour où elle commence).",
|
||||
"stats.needs.empty": "Aucun créneau défini pour l'instant.",
|
||||
"stats.needs.byDay": "Par jour (heures × personnes)",
|
||||
"stats.needs.byPosition": "Par poste (places = personnes × créneaux)",
|
||||
"stats.needs.min": "Besoin minimal",
|
||||
"stats.needs.ideal": "Besoin idéal",
|
||||
"stats.needs.available": "Disponibilités déclarées",
|
||||
"stats.needs.assigned": "Déjà affecté",
|
||||
"stats.needs.filledWithExtra": "{filled} / {ideal} (+{extra} en sureffectif)",
|
||||
"stats.needs.wishesHint": "Pourvues : places occupées, plafonnées à l'effectif idéal de chaque créneau (« +2 » = bénévoles en sureffectif, non comptés). Vœux / place : nombre de bénévoles qui ont demandé le poste, rapporté aux places idéales. En dessous de 1, le poste aura besoin de bénévoles qui ne l'ont pas choisi.",
|
||||
"stats.col.date": "Date",
|
||||
"stats.col.day": "Jour",
|
||||
"stats.col.answer": "Information",
|
||||
"stats.col.volunteers": "Bénévoles",
|
||||
"stats.col.share": "Part",
|
||||
"stats.col.artist": "Artiste",
|
||||
"stats.col.paymentType": "Type de paiement",
|
||||
"stats.col.amount": "Montant",
|
||||
"stats.col.shifts": "Créneaux",
|
||||
"stats.col.availableVolunteers": "Bénévoles dispo.",
|
||||
"stats.col.position": "Poste",
|
||||
"stats.col.minSlots": "Places min.",
|
||||
"stats.col.idealSlots": "Places idéales",
|
||||
"stats.col.filled": "Pourvues",
|
||||
"stats.col.wishes": "Vœux",
|
||||
"stats.col.wishesPerSlot": "Vœux / place",
|
||||
"form.field.email": "Email",
|
||||
"form.field.phone": "Téléphone",
|
||||
"form.field.positionWishes": "Vœux de poste",
|
||||
|
||||
Reference in New Issue
Block a user