À quoi ressemblent les livrables.
Voici le type de documents que vous recevez. Ces exemples sont illustratifs : les fichiers et les données sont fictifs et ne proviennent d’aucun client.

Exemples illustratifs — fichiers et données fictifs. Les données de mes clients restent strictement confidentielles.
La cartographie des données
Avant tout développement, vous recevez le tableau qui décrit chaque champ : d’où il vient, comment il est converti et où il est chargé. Vous le validez ou le corrigez : c’est lui qui fixe le périmètre et le prix.
Livré avec : cartographie, scripts d’extraction, scripts de chargement, flux complets.
| Source | Conversion | Destination | Obligatoire |
|---|---|---|---|
| N° commande | Texte, espaces retirés | commandes.numero | Oui |
| Date | JJ/MM/AAAA → AAAA-MM-JJ | commandes.date | Oui |
| Montant TTC | « 1 234,50 » → 1234.50 | commandes.montant | Oui |
| Client | Rapproché par code client | commandes.client_id | Si connu |
| Pays | « France » → FR | commandes.pays | Non |
| Commentaire | Ignoré | — | Non |
Le rapport de chargement
Après chaque passage, le script indique ce qu’il a fait : lignes lues, chargées, mises à jour et rejetées. Chaque rejet est expliqué, pour que vous sachiez exactement quoi corriger.
| Ligne | Champ | Valeur | Motif |
|---|---|---|---|
| 118 | date | 31/02/2026 | Date inexistante |
| 764 | montant | 12,5,0 | Format numérique invalide |
| 1 205 | numero | C-20418 | Déjà chargée (doublon) |
| 3 377 | client | CL-0091 | Code client inconnu |
| 6 012 | numero | (vide) | Champ obligatoire manquant |
Le script, lisible et commenté
Le code vous est remis. Il est commenté en français, organisé étape par étape (extraction, conversion, chargement) et peut être relancé à chaque nouvel export — ou planifié pour tourner seul. Les identifiants d’accès restent chez vous, dans un fichier de configuration séparé.
Livré avec : conversions, scripts d’extraction et de chargement, flux complets, migrations.
# Étape 2 — Conversion : formats français → formats de la base
def convertir(ligne):
ligne["date"] = datetime.strptime(ligne["date"], "%d/%m/%Y").date()
ligne["montant"] = Decimal(ligne["montant"].replace(" ", "").replace(",", "."))
return ligne
# Étape 3 — Chargement : ajout ou mise à jour, sans doublon
for ligne in lignes_valides:
base.execute(
"INSERT INTO commandes (numero, date, montant) VALUES (%s, %s, %s) "
"ON CONFLICT (numero) DO UPDATE SET montant = EXCLUDED.montant",
(ligne["numero"], ligne["date"], ligne["montant"]),
)
Le suivi et l’alerte e-mail
Avec les contrôles de qualité ou le tableau de suivi, un résumé vous arrive après chaque passage : volumes traités, anomalies par règle, évolution depuis la veille.
Objet : ✅ Chargement du 14/10 — 8 391 lignes, 29 rejets (−12 depuis hier)
Détail joint : rejets_14-10.xlsx
Prix nets, TVA non applicable, art. 293 B du CGI. Après votre commande, le prix est confirmé par écrit sous 12 h ouvrées au vu de vos fichiers et de vos sources, avant tout travail — remboursement intégral si vous refusez un prix révisé. Prix et ajustements de prix
Un export que vous retouchez chaque semaine ?
Envoyez-moi un exemple de fichier ou décrivez votre base : je vous dis gratuitement ce qui peut être automatisé.