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