La plateforme lit Odoo, calcule le rythme de chaque client et met à jour le tableau de bord de chaque personne de l'équipe. Un message WhatsApp prévient à chaque mise à jour, et à part en cas d'urgence. Les merchandisers photographient les rayons avec une application dédiée. L'IA explique et anticipe ; l'équipe appelle et note les réponses.
Ce projet porte sur le suivi commercial. La plateforme est construite pour accueillir d'autres modules plus tard.
Dix branches, chacune détaillée plus bas avec ses schémas et ses exemples. Cliquez pour y aller.
Commandes, dates de livraison, montants, produits
Cadence, statut, date de relance, volumes, CA
Priorités, préparation des appels, alertes
Page de chacun mise à jour, message envoyé
Réponses et photos reviennent dans la plateforme
Les quatre types sont suivis séparément et ne sont jamais additionnés. Partout, l'idée est la même : comparer le temps écoulé depuis la dernière commande au rythme habituel du client. Les règles GMS et CHR sont validées par WADIF.
Supermarchés : Label Vie, Maxi, Hypermarché LV, Hyper U, Aswak Assalam, UExpress… Proxi et Express suivis à part. Supeco exclu pour l'instant.
Restauration collective : ~60 groupes (Newrest, Ansamble, Proxirest…), ~370 sites : cantines, cuisines centrales, cliniques, cités universitaires.
Suivi séparé du CHR. Règles à définir avec WADIF.
Règles à définir. La règle des « 20 jours sans commande » est à confirmer.
On suit le magasin (l'adresse de livraison). Son enseigne se lit dans son nom, sa ville d'après les corrections connues, le nom puis le champ ville d'Odoo. Organisation par zone : Fatem (Casablanca, Mohammedia…), Sofia (Rabat, Kénitra, El Jadida…), Rayan (Tanger, Tétouan), Hayat (Agadir), Driss (Fès, Meknès), Abdelkrim et Loubna (Marrakech), Hassane (toutes les autres villes).
La moyenne des écarts entre les ~10 dernières commandes du magasin.
Écarts 4, 3, 5, 4 → cadence 4 jours
Le nombre de jours qu'on laisse au magasin avant de dire « il aurait dû commander ». C'est la plus petite valeur entre la cadence et 6 jours.
Cadence 3 → seuil 3
Cadence 10 → seuil 6
Moins de 2 commandes → seuil 6
Le compteur de retard : jours sans commande moins le seuil. Négatif, le magasin est dans les temps ; positif, il a dépassé d'autant de jours.
13 jours − seuil 4 = écart 9
| Magasin avec un seuil de 4 jours | Calcul de l'écart | Statut |
|---|---|---|
| 2 jours sans commande | 2 − 4 = −2 | Actif n'apparaît dans aucune liste |
| 4 jours sans commande | 4 − 4 = 0 | Commande attendue |
| 9 jours sans commande | 9 − 4 = 5 | En retard |
| 13 jours sans commande | 13 − 4 = 9 | Problème jamais « inactif » : le magasin est ouvert |
À savoir : le plafond de 6 jours est écrit dans les règles validées du 05/11. Le document n'en donne pas la raison : à demander à WADIF. La cadence se calcule sur les dates de commande, les jours sans commande sur la date de livraison.
On suit le site livré (une adresse de livraison), rattaché à son groupe et à un trajet de livraison du planning.
La médiane est la valeur du milieu. Elle ignore les écarts exceptionnels, comme des vacances.
Écarts : 3, 4, 3, 20, 3
Rangés : 3, 3, 3, 4, 20
Médiane = 3 jours · moyenne ≈ 6,6 jours (faussée par les 20 jours)
15 livraisons font 14 écarts. Rangés, la médiane tombe entre la 7e et la 8e valeur.
3 3 3 3 3 3 3 3 3 4 4 4 4 5
Médiane = 3 → livrée en général tous les 3 jours
Au moins 3 livraisons ? On calcule avec elles.
Au moins 3 livraisons ?
Au moins 2 livraisons ?
Règle fixe : actif jusqu'à 5 jours, attendu le 6e, en retard de 7 à 30, inactif au-delà
Cantine A : 15 livraisons en 8 semaines, on calcule avec elles. Cantine B : 1 seule livraison en 8 semaines, impossible de mesurer un écart, on recule à 6 mois et on trouve 5 livraisons.
j = jours depuis la dernière livraison · c = cadence. Exemple : cantine livrée le lundi, cadence de 4 jours.
| Statut | Règle | Avec c = 4 | Action |
|---|---|---|---|
| Actif | j < c − 1 | 0 à 2 jours | Rien à faire |
| Commande attendue | c − 1 ≤ j ≤ c | 3 ou 4 jours | Appeler la veille de la date prévue |
| En retard | c < j ≤ 1,5 × c | 5 ou 6 jours | Relancer dès 1 jour de retard |
| Inactif | j > 1,5 × c | 7 jours et plus | Étudier le cas du client |
| Arrêté | j > 180 | plus de 6 mois | Client perdu, sauf exception |
Différence avec le GMS : pas de plafond de 6 jours, tout dépend de la cadence de chaque cantine.
La plateforme ne calcule que ce qui est enregistré. Elle lit Odoo sans jamais y écrire, et copie chaque jour les données dans sa propre base, qui garde l'historique.
Clients et sites · commandes confirmées (date de livraison, montant HT) · produits et quantités
Trajets · œufs par article · zones et équipes · enseignes et villes GMS
Réponses des relances · photos de rayon de l'application
Copie du jour et historique. Les corrections données une fois sont mémorisées.
Odoo connaît des unités de vente, pas des œufs. Cette table fait la conversion.
| Produit | Ce que c'est | Œufs par unité |
|---|---|---|
| F | Œuf frais L'Origine, vendu à l'unité | 1 |
| SFC | Œufs sans film en caisse, vendus à l'unité | 1 |
| FP | Vendu à l'unité · sens à confirmer avec WADIF | 1 |
| Caille × 18 | Barquette de 18 œufs de caille | 18 |
| Caisses, plateaux… | à compléter avec Saad | ? |
10 barquettes de caille × 18 = 180 œufs
Un référentiel est une petite table de référence, fournie par WADIF, qui change rarement. Il donne du sens aux chiffres d'Odoo. Sans eux, trois choses sont impossibles :
Odoo voit « 10 barquettes de caille » ; la table des articles dit 18 œufs par barquette.
Odoo connaît la ville, Meknès ; le planning dit : trajet Fès / Meknès / Khémisset, commande le mardi, livraison le mercredi. Une ville voisine est rattachée au trajet le plus proche (« * »), une ville vide est lue dans le nom.
Odoo ne sait pas que tel Label Vie est dans la zone de Fatem ; la table des équipes le dit.
Le tableau de bord de Hassane met en avant, chaque jour, les trajets dont c'est le jour de commande. Les sites sans trajet vont dans « Non affectés ».
| Trajet | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
|---|
| Donnée | Ce qu'elle permettra | Qui |
|---|---|---|
| Bouton « Livrée » dans Odoo | Savoir que le client a vraiment reçu sa marchandise (bon de livraison revenu cacheté) | Saad, Binteg |
| Bouton « Retournée » avec quantité et motif | Mesurer les retours, calculer un CA réel, repérer les retours répétés par client, trajet ou livreur | Saad, Binteg |
| Prix d'achat par article | Calculer la marge par œuf | WADIF |
| Magasins par merchandiser et superviseure | Tableau de bord de chaque membre de l'équipe terrain | WADIF |
| Planning des visites | Taux de visite des magasins | WADIF |
Si les données d'Odoo sont fausses, tous les tableaux de bord le seront aussi. La plateforme lit donc tout ce qui existe dans Odoo (contacts, sites, commandes, produits) et le contrôle chaque matin. Comme elle est en lecture seule, elle ne supprime et ne modifie rien elle-même : elle propose, une personne valide et corrige dans Odoo.
Contacts, sites, commandes, produits
Doublons, manques, incohérences, commandes anormales
Fusionner deux fiches, ville lue dans le nom, trajet le plus proche
Dans Odoo, par une personne désignée
Une correction validée n'est plus jamais redemandée
| Ce que la plateforme contrôle | Exemple | Ce qu'elle propose |
|---|---|---|
| Doublons | Même client écrit autrement : Dolidol, Newrest et SGNR ; même téléphone ou même adresse sur deux fiches | Fusionner les deux fiches |
| Informations manquantes | Site sans ville, sans téléphone, sans e-mail, sans trajet, sans type de client | La ville lue dans le nom du site, le trajet le plus proche |
| Incohérences | Date de livraison vide ou avant la date de commande ; site rattaché à aucun groupe ; client classé dans deux types | La valeur la plus probable, signalée |
| Commandes anormales | Quantité dix fois plus grande que d'habitude (faute de frappe probable), prix très éloigné du prix habituel | Vérifier la commande |
| Produits incomplets | Article sans nombre d'œufs par unité dans le référentiel | Compléter la table des œufs |
| Doublon probable « Newrest Casa » et « NEWREST CASABLANCA » : même téléphone | FusionnerIgnorer |
| Ville manquante « Cantine Agdal Rabat » : ville proposée Rabat | ValiderIgnorer |
| Quantité inhabituelle Clinique Agdal : 4 200 œufs au lieu de ~420 | VérifierNormal |
Sites CHR complets (ville, téléphone, trajet) :
312 ÷ 370 = 84 %
Suivi chaque semaine, pour voir les données s'améliorer. Il s'affiche dans le tableau de bord de la responsable.
Chaque donnée a un responsable : Saad pour les fiches clients et produits dans Odoo, la responsable du projet pour les référentiels et les seuils, Lamiaa et Hassane pour les résultats des relances.
Chacun ne voit que ses données : Fatem sa zone, un merchandiser ses magasins. La direction voit tout. Les droits sont réglés par personne.
On sait qui a saisi ou validé quoi, et quand. L'historique garde chaque version des chiffres ; un chiffre modifié depuis la dernière mise à jour est signalé. Un journal enregistre les accès.
Chaque matin, la plateforme relit Odoo et refait tous les calculs, client par client. Les chiffres restent justes même quand une commande est saisie avec quelques jours de retard. Les 12 mois sont glissants : l'historique d'Odoo suffit dès le premier jour, sans rien attendre.
Commandes des 8 dernières semaines ÷ 8.
20 commandes ÷ 8 = 2,5 par semaine
A : au moins 2 commandes par semaine · B : environ 1 · C : moins de 1.
2,5 par semaine → type A
Dit si c'est un client qui commande souvent ou rarement. Seuils à préciser entre B et C.
Quantités des 8 dernières semaines × œufs par article, ÷ 8.
4 000 œufs frais + 50 barquettes × 18 = 4 900
4 900 ÷ 8 ≈ 612 œufs par semaine
Somme, moyenne, médiane par commande, et moyenne par semaine.
1 000 · 1 200 · 1 100 · 1 000 · 5 000 MAD
CA 12 mois = 9 300 · moyen = 1 860
médian = 1 100 · hebdo = 9 300 ÷ 52 ≈ 179
La médiane sert à comparer les clients : la grosse commande de 5 000 ne la fausse pas. Le CA de chaque semaine est comparé au CA hebdo moyen.
De combien les montants s'écartent de leur moyenne, divisé par la moyenne (coefficient de variation). Stable sous 0,3 · modérée de 0,3 à 0,6 · forte au-dessus.
A : 1 000 · 1 050 · 980 · 1 020 → stable
B : 300 · 2 000 · 500 · 1 800 → forte
Chez un client stable, une petite commande est un vrai signal ; chez un client qui fluctue, c'est normal.
Une cantine sert à peu près le même nombre de repas : si elle commande moins, elle achète peut-être ailleurs.
Commande sous 70 % de la médiane :
médiane 1 000 → commande de 600 = alerte
Œufs −20 % sur 4 semaines :
4 000 → 3 000 = −25 % = alerte
Seuils de 70 % et 20 % à valider.
Le dernier prix payé par produit (F, SFC, FP, caille), s'il date de moins de 60 jours avant la dernière livraison.
Œuf frais payé 1,20 MAD HT → affiché 1,20
Utile quand un client refuse pour le prix.
Ce qu'Odoo dit du client pour la période suivie.
« Commande reçue le 08/11 » : inutile d'appeler
« Devis en attente » : proposition non confirmée
« Annulée » : commandée puis annulée
« Aucune commande » : à appeler
Seuil et écart (branche 1), mois de pointe et nombre de commandes ce mois-là, CA du mois comparé au mois précédent, magasin par magasin.
CA octobre 12 000 → novembre 9 000 = −25 %
Deux niveaux de calcul. Ces calculs regardent chaque client un par un. Les indicateurs (branche 8) regardent le groupe entier : un trajet, une zone, tout un type de client.
Plus de fichiers Excel ni de PDF à ouvrir. Chaque personne a une page à elle : un mini tableau de bord détaillé de son activité. Il se renouvelle au rythme de son suivi. À chaque renouvellement, un message WhatsApp la prévient ; les urgences arrivent à part, tout de suite.
Statuts, dates, volumes
Chaque jour pour le CHR, 2 fois par semaine pour le GMS
Un court résumé et le lien vers la page
Appeler et noter la réponse directement
| Tableau de bord | Lun | Mar | Mer | Jeu | Ven | Sam | Dim | Ce qu'il montre |
|---|---|---|---|---|---|---|---|---|
| Hassane · CHR | ● | ● | ● | ● | ● | ● | ● | Trajets du jour, cantines à appeler |
| Lamiaa · relances | ● | ● | ● | ● | ● | ● | ● | Appels CHR du jour, puis tout le GMS à chaque envoi GMS |
| Fatem · Sofia · zone GMS | 2 fois par semaine · jours à confirmer · + vue week-end le jeudi | Leur zone, leurs merchandisers | ||||||
| Chaque merchandiser | 2 fois par semaine · jours à confirmer | Ses magasins, ses visites, ses photos | ||||||
| Bilan mensuel GMS · Lamiaa | fin de mois · remplace le tableau rempli à la main | Montants jour par jour, CA du mois, objectif | ||||||
| Responsable, direction | chaque semaine et chaque mois | Ventes des 4 types, indicateurs, rapports | ||||||
● renouvellement + message WhatsApp. Le contenu validé des fiches actuelles (les 22 informations de la fiche CHR, les 4 fiches GMS) se retrouve dans les tableaux de bord, sous forme de vues.
| Site · groupe | Ville | Statut | Dernière livraison | Cadence | Œufs / sem. | Résultat de l'appel |
|---|---|---|---|---|---|---|
| Cuisine centrale Sidi Maârouf Groupe A · type A IA : gros client, score de risque 78 | Casablanca | Inactive | 31/10 · 9 j | 4 j | 2 400 | |
| Restaurant d'entreprise Technopark Groupe B · type A | Casablanca | En retard | 04/11 · 5 j | 4 j | 900 | |
| Clinique Agdal Groupe C · type B | Rabat | Attendue | 03/11 · 6 j | 7 j | 420 | |
| Cité universitaire Guéliz Groupe D · type B | Marrakech | Active | 07/11 · 2 j | 6 j | 600 | Commande reçue le 07/11 |
En haut les sites à traiter, puis ceux qui ont commandé, puis les arrêtés. Chaque ligne s'ouvre sur le détail : CA 12 mois, médiane, fluctuation, prix unitaire, alerte volume, historique des appels.
Par zone, puis par ville : Label Vie d'abord, puis les autres enseignes. Statut, dernière commande, jours sans commande, cadence, mois de pointe.
CA par ville, mois courant et précédent, puis magasin par magasin, du plus gros recul au plus petit. 2 à 3 priorités suggérées.
Les magasins déjà en retard, puis ceux dont la commande est attendue dans la période.
Même structure, préparée chaque jeudi pour les commandes du week-end.
Liste proposée, à valider avec WADIF.
Confidentialité : peu de chiffres dans le message, le détail reste sur la page sécurisée. Envoi par l'API officielle WhatsApp Business.
À faire valider par WADIF : le cahier des charges demandait des fichiers Excel et PDF aux colonnes figées. Les tableaux de bord reprennent tout ce contenu, mais ce changement de format doit être accepté par l'équipe.
Odoo dit qui n'a pas commandé. Seul le client peut dire pourquoi. La réponse est notée directement dans le tableau de bord, avec la date et l'auteur ajoutés automatiquement.
Avec sa date de relance
Lamiaa ou Hassane
Choisi dans la liste, ou dicté et rangé par l'IA
Perd-on sur le prix, la qualité ou la livraison ?
Lamiaa appelle la cantine Technopark, en retard de 1 jour. Réponse : « on commande jeudi ». Elle choisit Reportée et note « jeudi 12/11 ». Jeudi, si rien n'est arrivé, la cantine remonte en tête de sa liste.
Les photos ne passent plus par WhatsApp. Les merchandisers utilisent une petite application, intégrée à la plateforme : une photo prise en magasin devient à la fois une preuve de visite et une analyse du rayon.
Le merchandiser choisit le magasin dans sa liste et photographie le rayon depuis son téléphone.
L'application corrige automatiquement la netteté, la lumière et le cadrage.
Si la photo est floue, trop sombre ou ne montre pas le rayon, l'application demande tout de suite de la reprendre.
La photo est liée au magasin, au merchandiser, à la date et à l'heure : c'est l'enregistrement de la visite.
Selon des critères à définir avec WADIF : présence des produits WADIF, rupture, PLV en place, prix affiché, place en rayon.
Dans les tableaux de bord du merchandiser et de sa superviseure. Une rupture déclenche une alerte WhatsApp.
Indicateurs nourris par l'application : taux de visite, magasins non visités depuis plus de 7 jours, couverture photo, présence des produits, ruptures, conformité de la PLV, disponibilité en rayon.
Calculés par type de client, conservés semaine après semaine, comparés à la période précédente, affichés dans les tableaux de bord.
Sites ayant commandé ÷ sites suivis (hors arrêtés)
Trajet Marrakech : 30 ÷ 40 = 75 %
Commandes ÷ sites suivis
52 ÷ 40 = 1,3 commande par site
Commandes des sites A ÷ nombre de sites A
36 ÷ 12 = 3 commandes par site A
Aussi : sites à appeler et couverture des appels (chaque jour), inactifs et arrêtés avec leur CA, sites récupérés et perdus, alertes volume.
Magasins ayant commandé ÷ magasins de la zone (hors « hors zone »)
Zone Sofia : 45 ÷ 70 = 64 % · repère > 60 %
Objectif proposé = mois précédent + 10 %
12 000 → objectif 13 200 · réalisé 11 880 = 90 %
Aussi : respect de la cadence, magasins en retard et en problème, CA par zone et par enseigne, annulations (repère < 5 %), TOP 10 et FLOP 10, magasins récupérés. L'objectif proposé peut être modifié par la responsable avant validation.
| Famille | Indicateurs | Rythme | Phase |
|---|---|---|---|
| Ventes, 4 types | Part de chaque type dans le CA · évolution · œufs vendus · prix moyen par œuf · mix produit · activation · objectif | Semaine, mois | 2 |
| Merchandisers | Activation de leurs magasins · croissance du CA et des œufs · récupération · livraisons par magasin · visites · disponibilité en rayon | Envoi, mois | 2 |
| Superviseures | Progression de l'activation · CA et œufs de la zone · équipe à l'objectif (≥ 90 %) · délai de traitement des problèmes · couverture terrain | Envoi, mois | 2 |
| Relances | Transformation (relancés qui commandent ÷ relancés) · commandes spontanées · répartition des motifs · injoignables répétés | Semaine | 3 |
| Photos de rayon | Couverture photo · présence des produits · ruptures · conformité de la PLV | Semaine | 4 |
| Devenir des commandes | Livrées, non livrées, retournées, annulées · livraison à la date prévue · retard moyen · cas répétés | Semaine, mois | 4 |
| Marge | Marge par œuf et taux de marge | Mois | prix d'achat |
Les calculs restent exacts et fixes. L'IA lit leurs résultats pour expliquer, anticiper et conseiller. Tout reste interne : elle ne parle jamais aux clients, et l'équipe valide.
Prévisions, score de risque, briefing, préparation des appels, évaluation des photos, réponses aux questions, rapports
Cadence, statuts, dates, volumes, CA, indicateurs : règles fixes et vérifiables
À quoi ça ressemble · exemples fictifs
Situation : 9 jours sans livraison, d'habitude tous les 4 jours, environ 2 400 œufs par semaine.
Historique : a reporté la semaine dernière, s'était plainte d'un retard de livraison.
À dire : proposer sa quantité habituelle et vérifier que la livraison du mardi lui convient.
Cantine Technopark : commande attendue jeudi, environ 900 œufs.
Cité universitaire Guéliz : pas de commande attendue (vacances universitaires), ne pas relancer.
Un socle solide, avec le module commercial au centre. La place est prévue pour d'autres modules plus tard, sans rien reconstruire.
Attend : planning, accord sur les tableaux de bord, numéros WhatsApp
Attend : magasins par merchandiser
Attend : quelques semaines d'historique des relances
Attend : critères photo, règles à écrire, boutons dans Odoo
Pour chaque phase : une proposition technique, un délai, un coût, puis une démonstration sur les vraies données de WADIF avant la mise en service.
Aucune écriture dans Odoo. Les corrections restent faites par une personne.
Utilisateur Odoo propre, clé API protégée et révocable à tout moment.
Hébergement connu. Pages accessibles seulement à leur titulaire. Outils tiers vérifiés avant installation.
Toutes les informations des fiches validées restent présentes dans les tableaux de bord.
Odoo relu chaque matin ; un chiffre modifié depuis la dernière mise à jour est signalé.
Seuils, trajets, unités et critères photo réglables par la responsable, sans toucher au code.
Une page simple, recommandée par le cahier des charges, à rédiger avec WADIF et à remettre à toute l'équipe avant le lancement. Elle rassure sur l'usage des données.
Ventes Odoo, référentiels, réponses des relances, photos de rayon. Rien d'autre.
Hébergement connu et nommé. Les données restent chez WADIF et ne servent qu'à WADIF.
Elle résume, prévoit, prépare les appels, évalue les photos, propose des corrections.
Contacter un client, écrire dans Odoo, décider seule. L'équipe valide toujours.
Chacun ses données ; la direction l'ensemble. Accès révocable à tout moment.
Un référent désigné pour toute question ou doute sur une donnée.
| Question | Proposition | |
|---|---|---|
| 1 | Dans Odoo 18, l'état « done » n'existe plus : une commande verrouillée reste à l'état « sale » | Filtrer sur « sale » ; « done » ne remonte rien |
| 2 | « Devis en attente » : seulement les devis brouillons ? | Inclure aussi les devis envoyés au client |
| 3 | Que faire si la date de livraison est vide ? | Prendre la date de commande et le signaler dans les corrections |
| 4 | La catégorie « Restauration collective » est-elle sur le groupe ou sur chaque site ? | Si elle est sur le groupe, les sites en héritent |
| 5 | Droits de l'utilisateur dédié : contacts et ventes suffisent-ils ? | Ajouter la lecture des produits, des unités et, si besoin, des livraisons |
| 6 | Un site à plus de 180 jours est aussi « inactif » | Vérifier « arrêté » en premier |
| 7 | Limites entre B et C : où classer 1,5 commande par semaine ? | A ≥ 2 · B de 1 à moins de 2 · C < 1 |
| 8 | Type A : « au moins 2 » (règles CHR) ou « plus d'une » commande par semaine (indicateurs) ? | Harmoniser sur une seule définition |
| 9 | La cadence compte des jours de livraison, les commandes par semaine comptent des commandes | Choisir une seule base |
| 10 | Alerte volume : en montant HT ou en quantité ? | En œufs, pour ne pas être faussé par une hausse de prix |
| 11 | CA hebdo moyen = CA 12 mois ÷ 52 : faux pour un client de moins d'un an | Diviser par le nombre de semaines depuis sa première commande |
| 12 | Site déjà en retard : sa date de relance est dans le passé | Afficher « dès aujourd'hui » |
| 13 | Site livré chaque jour (cadence de 1) : il n'est jamais « actif » | Fixer une cadence minimale |
| 14 | GMS : cadence sur la date de commande, jours sans commande sur la date de livraison | Confirmer que c'est voulu |
| 15 | « Évaluation semaine X » et N1 donnent le même chiffre | N'en garder qu'un |
| 16 | Règle des 20 jours : pour quels clients ? | À préciser par type |