Le point de départ
Le back-office France d'un fournisseur d'énergie européen faisait tourner ses opérations sur des scripts lancés à la main, plusieurs familles de notebooks accumulées au fil des années, des exports quotidiens recopiés d'un système à l'autre et un ETL que l'éditeur ne supportait plus. Le calcul financier mensuel du gaz, pour 17 000 sites, tournait dans un batch Python 3.6 de six scripts enchaînés par des fichiers CSV, douze heures d'exécution, sans supervision ni reprise en cas d'échec.
Le recouvrement partait d'un export manuel de l'ERP SAP chaque matin. Les refacturations de dépassement de capacité étaient saisies à la main dans le CRM Salesforce. Les corrections de données se faisaient au cas par cas, sans historique ni retour arrière. Le coût n'était pas seulement du temps machine : c'était du temps d'équipe passé à faire tourner des traitements plutôt qu'à en exploiter les résultats, et du revenu qui se perdait dans des saisies que personne ne pouvait vérifier.
Ce qui a été construit : la responsabilité de bout en bout
Comprendre le métier, construire, migrer, vérifier et faire fonctionner. Cinq transformations qui se cumulent.
Relier et faire fonctionner les systèmes
Six systèmes intégrés (le CRM Salesforce, l'ERP SAP, des gestionnaires de réseau, des plateformes externes), 19 code locations Dagster, une soixantaine de traitements, une vingtaine d'outils métier, déployés par CI/CD et supervisés par une page de statut et des sondes.
Prendre en charge des opérations financières
Le calcul financier mensuel du gaz pour 17 000 sites (le Provisional Financial Summary, en mode provisoire puis définitif), le rapprochement du recouvrement entre SAP et Salesforce six fois par jour, et plus de 120 k€ de dépassements de capacité refacturés en deux mois, chaque ligne validée par un humain avant d'être écrite dans Salesforce.
Corriger ce qui touche directement l'activité
Une anomalie de recouvrement d'une dizaine de k€ détectée par le pipeline et corrigée ; un contrôle des abonnements qui produisait 97 % de faux positifs, ramené à environ 150 anomalies réelles ; près de 50 000 écritures de correction dans Salesforce en trois campagnes, avec sauvegarde horodatée, contrôle ligne à ligne et script d'annulation.
Rendre les équipes autonomes
Vingt outils en libre-service que les équipes lancent directement, sans passer par l'IT. Sur cinq mois, près de 1 800 exécutions, automatiques ou à la demande, dont plus de 150 rapports de facturation demandés par le métier. Une question d'assujettissement fiscal qui demandait deux à trois semaines de travail d'équipe devient un traitement disponible en un run.
Moderniser l'existant sans rupture
Une douzaine de notebooks manuels remplacés, une tâche Windows coupée, un export de facturation doublé à côté d'un ETL en fin de vie. Le batch Python 3.6 a été réécrit et validé en deux temps : un harnais de non-régression sur un mois d'archive (12 fichiers sur 12 conformes, plus de 100 tests), puis un run en parallèle de l'ancien sur un mois réel, sorties identiques sur les 5 fichiers produits, aux écarts attendus et documentés près. 53 comportements hérités ont été arbitrés un par un. Le travail comprend l'exploitation et la transmission aux équipes.
Ce que ça change dans l'activité, mesuré en production
Temps libéré, erreurs corrigées, refacturations traitées, autonomie et fiabilité. Des jours de traitement ramenés à une trentaine de minutes ne sont qu'une preuve parmi les autres.
| Processus | Avant | Après |
|---|---|---|
| Calcul financier mensuel du gaz, 17 000 sites | batch Python 3.6 lancé à la main, 12 heures | 7 minutes, en self-service, sorties identiques à l'ancien |
| Capture des fichiers du gestionnaire de réseau | script et tâche Windows, 44 minutes par passage | 6 secondes, 4 passages par jour |
| Recouvrement, de l'ERP SAP vers le CRM Salesforce | un export manuel chaque jour, puis traitement | 6 exécutions par jour, 0 geste manuel, près de 350 exécutions sur 5 mois, une anomalie d'une dizaine de k€ détectée et corrigée |
| Refacturation des dépassements de capacité | saisie manuelle | plus de 120 k€ refacturés en deux mois, chaque ligne validée par un humain |
| Corrections de masse dans le CRM Salesforce | au cas par cas, sans historique ni retour arrière | près de 50 000 écritures en trois campagnes, contrôlées ligne à ligne, 0 échec inexpliqué |
| Clients assujettis à une taxe sur le gaz | une question récurrente, 2 à 3 semaines de travail d'équipe | une page en libre-service, la réponse en un run |
| Contrôle des identifiants d'entreprises, 32 000 numéros | une API limitée, des heures d'attente | 0 appel d'API, 100 % d'accord sur l'échantillon de test |
| Surveillance des abonnements | 97 % de faux positifs | environ 150 anomalies réelles, toutes à traiter |
| Export de facturation sur un ETL en fin de vie | un job non supporté, séquence fragile | pipeline Python en double-run à côté de l'ancien, 93 à 100 % de documents identiques (bascule en cours) |
| Outils en libre-service | 10 pages en juin, cinq familles de notebooks manuels | 20 pages en septembre, les notebooks remplacés un pour un |
Calcul financier mensuel du gaz, 17 000 sites
Avantbatch Python 3.6 lancé à la main, 12 heures
Après7 minutes, en self-service, sorties identiques à l'ancien
Capture des fichiers du gestionnaire de réseau
Avantscript et tâche Windows, 44 minutes par passage
Après6 secondes, 4 passages par jour
Recouvrement, de l'ERP SAP vers le CRM Salesforce
Avantun export manuel chaque jour, puis traitement
Après6 exécutions par jour, 0 geste manuel, près de 350 exécutions sur 5 mois, une anomalie d'une dizaine de k€ détectée et corrigée
Refacturation des dépassements de capacité
Avantsaisie manuelle
Aprèsplus de 120 k€ refacturés en deux mois, chaque ligne validée par un humain
Corrections de masse dans le CRM Salesforce
Avantau cas par cas, sans historique ni retour arrière
Aprèsprès de 50 000 écritures en trois campagnes, contrôlées ligne à ligne, 0 échec inexpliqué
Clients assujettis à une taxe sur le gaz
Avantune question récurrente, 2 à 3 semaines de travail d'équipe
Aprèsune page en libre-service, la réponse en un run
Contrôle des identifiants d'entreprises, 32 000 numéros
Avantune API limitée, des heures d'attente
Après0 appel d'API, 100 % d'accord sur l'échantillon de test
Surveillance des abonnements
Avant97 % de faux positifs
Aprèsenviron 150 anomalies réelles, toutes à traiter
Export de facturation sur un ETL en fin de vie
Avantun job non supporté, séquence fragile
Aprèspipeline Python en double-run à côté de l'ancien, 93 à 100 % de documents identiques (bascule en cours)
Outils en libre-service
Avant10 pages en juin, cinq familles de notebooks manuels
Après20 pages en septembre, les notebooks remplacés un pour un
Les durées, les volumes et les montants sont relevés dans les journaux d'exécution, l'historique de l'orchestrateur et le CRM Salesforce, puis arrondis. Les 12 heures du batch d'origine sont un constat terrain, l'ancien traitement ne mesurait pas ses runs. L'équipe métier estime que le recouvrement automatisé libère l'équivalent de deux temps pleins : c'est son estimation, pas une mesure, et elle est présentée comme telle.
Ce que ça montre pour votre cas
Une plateforme de données ne vaut que par ce qu'elle change dans la journée des équipes : des opérations qu'elles lancent elles-mêmes, des chiffres qu'elles peuvent vérifier, du revenu qui ne se perd plus dans des saisies. La méthode est transférable à tout back-office qui tourne sur des scripts hérités, des notebooks et des exports manuels entre un CRM et un ERP : mesurer l'existant, migrer en parallèle avec preuve d'identité, garder l'humain sur les décisions financières, transférer l'exploitation. Voir l'offre Data Engineering.
Des scripts hérités, des exports à la main entre vos systèmes, un batch que personne n'ose toucher ?
Dites-le tel quel. Le premier échange sert à qualifier, pas à vendre.
Décrire votre situation