Aller au contenu principal

Statistiques & Calculs

Cette page documente toutes les métriques et formules utilisées dans les sections CSM et Media Buyer.

Constantes globales​

ConstanteValeurDescription
PARIS_TZEurope/ParisToutes les limites de dates calculées en heure de Paris
NOV_1_20252025-11-01Point de départ des métriques globales (IR, historique dépenses)
EXCLUDED_BRANCH_CODES['1001', '1197']Succursales toujours exclues des calculs
EXCLUDED_STATUSES['Hors zone', 'Faux numéro', 'Doublon', 'Déjà client chez nous']Statuts de leads non facturables

Classification des leads​

leadsFacturés = leads WHERE leadStatus NOT IN EXCLUDED_STATUSES OR leadStatus IS NULL
leadsNonFacturés = leads WHERE leadStatus IN EXCLUDED_STATUSES

Classification des rendez-vous​

Parmi tous les leads où leadStatus = 'Rdv pris' :

rdvPris = COUNT(leads WHERE leadStatus = 'Rdv pris')
rdvMisAJour = COUNT(rdvPris WHERE appointmentStatus IS NOT NULL AND appointmentStatus ≠ '')
rdvPasVenu = COUNT(rdvPris WHERE appointmentStatus = 'Pas venu')
rdvEnAttente = COUNT(rdvPris WHERE appointmentStatus IS NULL OR appointmentStatus = '')
rdvPositif = COUNT(rdvPris WHERE appointmentStatus NOT IN ('Pas venu','En attente',
'Suivi appareillage','Non appareillable','Échec d''appareillage'))
rdvHonorés = rdvPris - rdvPasVenu - rdvEnAttente

Seuil de données suffisantes​

Une succursale a suffisamment de données quand au moins 50% de ses rendez-vous ont été mis à jour :

hasEnoughData = (rdvMisAJour / rdvPris) ≥ 0,5

Les métriques dépendant des résultats de rendez-vous (coût/appareil, crPositif, crEntonnoir) sont null pour les succursales qui n'atteignent pas ce seuil.

Taux de conversion​

MétriqueFormuleDescription
CR PhoningrdvPris / leadsFacturés% de leads ayant conduit à un rendez-vous
CR No-showrdvPasVenu / rdvPris% de rendez-vous non honorés
CR PositifrdvPositif / rdvHonorés% de rendez-vous honorés qui étaient positifs
CR EntonnoirrdvPositif × 0,8 / leadsFacturésTaux de conversion global de l'entonnoir

Le facteur × 0,8 modélise le taux d'appareillage de 80% (fraction des rendez-vous positifs aboutissant à la vente d'un appareil auditif).

Appareils vendus​

appareilsVendus = rdvPositif × 0,8 × 1,95
  • × 0,8 → taux d'appareillage de 80%
  • × 1,95 → nombre moyen d'appareils vendus par appareillage réussi (les deux oreilles en moyenne)

Résolution du prix du lead​

Pour chaque succursale, le prix du lead est résolu dans l'ordre de priorité suivant :

  1. Enregistrement billing-branch verrouillé le plus récent : billingBranches[0].price
  2. Valeur par défaut de la succursale : branch.leadPrice
  3. null → succursale exclue des calculs de coût/revenu

Montant facturé​

montantFacturé = leadsFacturés × prixLead

Coût par appareil​

coûtParAppareil = montantFacturé / appareilsVendus

Calculé uniquement quand hasEnoughData = true et appareilsVendus > 0.
Seuil critique : coûtParAppareil > 300 €

Revenu potentiel​

revenupotentiel = rdvPositif × 0,8 × 1100 × 1,95
  • 1100 = revenu moyen par appareil vendu (€)
  • × 0,8 × 1,95 = même formule que les appareils vendus

Dépenses publicitaires​

Les dépenses brutes sont récupérées depuis meta_statistics et google_statistics par succursale et par jour.

Coefficient media : les campagnes Meta avec mode = 'media' sont multipliées par 1,15 pour tenir compte des frais d'agence :

dépensesAjustées = dépenses × (mode === 'media' ? 1,15 : 1)

Total des dépenses par succursale = somme de toutes les dépenses journalières ajustées (Meta + Google).

CPL (Coût par lead)​

cpl = totalDépenses / totalLeads

IR (Taux de retour sur investissement)​

Calculé depuis le 1er novembre 2025 (non limité au mois en cours) :

ir = (leadsFacturés_depuis_nov1 × prixLead) / totalDépenses_depuis_nov1

Un ratio > 1,0 signifie que le chiffre d'affaires de facturation dépasse les dépenses publicitaires → succursale rentable.

Succursales actives​

Les succursales actives sont comptées par jour en utilisant une moyenne journalière :

activesParJour[date] = UNION des succursales avec active=1 dans meta_statistics
OU active=1 dans google_statistics pour cette date

succursalesActives = MOYENNE(|activesParJour[date]| pour chaque date de la période)

Fenêtres des périodes de suivi​

Chaque onglet de suivi limite les données de leads à une fenêtre temporelle relative à la date du premier lead de la succursale :

OngletÂge depuis le premier leadFenêtre de données
recent300–29 joursDate premier lead → aujourd'hui
days3030–89 joursDate premier lead → date premier lead + 30 jours
days9090–364 joursDate premier lead → date premier lead + 90 jours
annual365+ joursDate premier lead → date premier lead + 365 jours

État du portfolio​

Une succursale est ON un jour donné si elle a un enregistrement meta_statistics avec active = 1 pour cette date.

actives = succursales avec active=1 aujourd'hui
inactives = totalSuccursales - actives
pct = count / totalSuccursales × 100

Clients OFF​

Une succursale est un client OFF si elle est inactive depuis 60+ jours consécutifs :

joursInactifs = aujourd'hui - dernièreDateActiveMetaStatistics
clientOff = joursInactifs ≥ 60

Abus d'invalidité​

Une succursale présente un abus d'invalidité si plus de 20% de ses leads sont non facturables :

pctInvalides = invalides / totalLeads
abus = pctInvalides > 0,20

Calculs delta (mois sur mois)​

La période de comparaison est la même plage de jours dans le mois précédent (limitée au dernier jour du mois précédent si nécessaire) :

delta = null si valeurPrécédente = 0
= (valeurActuelle - valeurPrécédente) / valeurPrécédente × 100 sinon