Tournevia

Formats CSV

Colonnes, unités et règles pour importer livraisons et véhicules, et contenu de l’export de répartition.

1. Règles communes aux deux imports

  • Le fichier est en UTF-8, séparé par des virgules, avec une ligne d’en-têtes. Une marque d’ordre d’octets UTF-8 est acceptée. Un fichier séparé par des points-virgules, comme l’enregistre souvent un tableur configuré en français, est refusé : enregistrez-le de nouveau avec des virgules.
  • Les en-têtes doivent correspondre exactement aux listes ci-dessous, dans cet ordre. Gardez les noms techniques des colonnes en anglais, y compris dans un fichier français. Des colonnes facultatives peuvent suivre, dans l’ordre indiqué pour chaque fichier.
  • 250 lignes de données et 1 Mio au maximum par fichier.
  • active vaut true ou false, en minuscules.
  • Les nombres entiers ne contiennent que des chiffres : ni signe, ni séparateur décimal, ni espace, ni unité.
  • Les codes d’équipement sont séparés par |. Chaque code commence par une majuscule et n’utilise que A–Z, 0–9 et _, jusqu’à 40 caractères ; 30 codes au plus par enregistrement, sans doublon. Laissez la cellule vide s’il n’y a pas d’équipement. À l’écran, aperçu d’import compris, TAIL_LIFT s’affiche Hayon élévateur et REFRIGERATED Caisse frigorifique ; les autres codes s’affichent tels quels.
  • Les codes de client, de dépôt et de lieu sont ceux enregistrés dans Tournevia (Clients, Paramètres › Dépôts et lieux). Un code inconnu est une erreur.

2. Fichier des livraisons

ColonneContenuRègle
external_idVotre identifiant de livraison1 à 100 caractères, unique dans l’entreprise. Peut rester vide quand la numérotation des livraisons est configurée : la ligne reçoit le prochain numéro
service_dateJour de livraisonObligatoire, AAAA-MM-JJ
activeLivraison sélectionnable ou nontrue ou false
addressAdresse ou description de l’entrée1 à 500 caractères ; peut rester vide si la ligne désigne un client dans customer
latitudeLatitude de l’entréeDécimal avec un point, de −90 à 90 ; vide avec longitude si inconnue
longitudeLongitude de l’entréeDécimal avec un point, de −180 à 180 ; vide avec latitude si inconnue
time_window_startDébut du créneau de livraisonObligatoire, ISO 8601 avec décalage, le jour service_date
time_window_endFin du créneau de livraisonObligatoire, après le début, le jour service_date
service_secondsTemps passé à l’arrêt, en secondesDe 0 à 28800
weight_kgPoids, en kgEntier ≥ 0
volume_dm3Volume, en dm³ (litres)Entier ≥ 0
pallet_eur_unitsPalettes EuropeEntier ≥ 0
pallet_ind_unitsPalettes industriellesEntier ≥ 0
loading_length_mmLongueur de chargement, en mmEntier ≥ 0
required_skillsÉquipement exigé du véhiculeCodes séparés par |, ou vide
instructionsInstructions de livraison1000 caractères au plus ; peut être vide
priorityColonne facultativeDe 0 à 100 ; une cellule vide vaut 0
customerColonne facultative : code d’un client enregistréVide pour aucun client
ships_fromColonne facultative : code du dépôt où la livraison est chargéeUn dépôt, pas un autre lieu ; vide : n’importe quel véhicule

Les colonnes facultatives suivent dans l’ordre priority, customer, ships_from. Un fichier peut s’arrêter après n’importe laquelle : priority seule, priority,customer, ou les trois.

Les horaires sont au format ISO 8601 avec leur décalage UTC, en heure locale Europe/Paris, à la seconde, par exemple 2026-09-23T08:00:00+02:00. Un horaire qui n’existe pas à Paris, ou un décalage qui ne correspond pas à la date, est refusé. Une livraison ne part que d’un dépôt : ships_from ne peut pas désigner un lieu comme le domicile d’un chauffeur, ni un dépôt d’exemple.

Exemple de ligne issu du fichier examples/orders.csv du kit :

DEMO-ORDER-001,2026-09-23,true,"Synthetic delivery entrance A, Paris",48.841,2.386,2026-09-23T08:00:00+02:00,2026-09-23T11:30:00+02:00,1200,1820,6900,4,0,3200,TAIL_LIFT|REFRIGERATED,Fictional fixture. Do not dispatch.

D’où vient le repère de chaque livraison

L’aperçu indique pour chaque ligne d’où vient son repère, et les compte sous Repères des livraisons :

  • Repère du fichier : les coordonnées de la ligne. Elles arrivent non vérifiées : vérifiez chaque entrée avant le calcul.
  • Entrée du client … : la ligne n’a pas de coordonnées et désigne un client enregistré dans customer, ou son adresse est exactement celle d’un client actif (sans tenir compte des majuscules ni des espaces). La ligne reprend l’entrée enregistrée du client. Seule l’entrée vérifiée d’un client arrive vérifiée.
  • Trouvé d’après l’adresse · correspondance N % : quand la recherche d’adresses est activée, une ligne sans coordonnées ni client reçoit un point proposé si la recherche trouve un numéro ou une voie avec une correspondance d’au moins 60 %. Ce point désigne le bâtiment et arrive non vérifié : vérifiez l’entrée. Les recherches d’un fichier disposent de 20 secondes au total ; si la recherche est indisponible ou manque de temps, l’aperçu l’indique et les lignes restantes n’ont pas de repère.
  • Sans repère : la livraison est importée avec le statut Emplacement manquant ; placez son repère après l’import.

La recherche d’adresses est activée quand l’installation a son propre service d’adresses, ou quand un administrateur active le service de l’IGN dans Paramètres › Recherche d’adresses.

Lignes à vérifier

L’aperçu signale, sans bloquer l’import, les lignes à contrôler. Elles sont comptées sous Lignes à vérifier, et Seulement les lignes à vérifier les affiche seules. Une ligne est signalée quand :

  • sa date de livraison est passée ;
  • son adresse est introuvable, ou la recherche n’a trouvé que la commune ou une correspondance incertaine ;
  • la latitude et la longitude semblent inversées ;
  • son point est à plus de 100 km du dépôt d’où elle part, ou du plus proche de vos dépôts ;
  • la même adresse a un autre point à plus de 300 m dans le fichier ;
  • son point est à plus de 50 m de l’entrée enregistrée de son client.

Les textes exacts figurent dans Messages et solutions.

3. Fichier des véhicules

ColonneContenuRègle
fleet_numberVotre identifiant de véhiculeObligatoire, 1 à 40 caractères, unique dans l’entreprise
activeVéhicule sélectionnable ou nontrue ou false
height_mmHauteur du véhicule, en mmDe 1 à 10000
width_mmLargeur du véhicule, en mmDe 1 à 10000
length_mmLongueur du véhicule, en mmDe 1 à 50000
gross_weight_kgPoids total utilisé pour le routage, en kgDe 1 à 100000
axle_load_kgCharge à l’essieu, en kgDe 1 à 40000
axle_countNombre d’essieuxDe 2 à 12
weight_kgCharge utile en poids, en kgEntier ≥ 0, au plus gross_weight_kg
volume_dm3Capacité en volume, en dm³Entier ≥ 0
pallet_eur_unitsCapacité en palettes EuropeEntier ≥ 0
pallet_ind_unitsCapacité en palettes industriellesEntier ≥ 0
loading_length_mmLongueur de chargement disponible, en mmEntier ≥ 0
skillsÉquipement du véhiculeCodes séparés par |, ou vide
monday … sundayHoraires de travail de chaque jour de la semaine, une colonne par jour : monday, tuesday, wednesday, thursday, friday, saturday, sunday07:30-17:00, en heure locale de Paris ; la fin suit le début le même jour. Vide : le véhicule ne travaille pas ce jour-là
fixed_minorCoût fixe par tournée, en centimes d’euroEntier ≥ 0
per_km_minorTarif kilométrique, en centimes d’euro par kmEntier ≥ 0
per_hour_minorTarif horaire, en centimes d’euro par heureEntier ≥ 0
max_stopsColonne facultativeDe 1 à 250 ; vide pour aucune limite
max_distance_mColonne facultative, en mètresDe 1 à 2000000 ; vide pour aucune limite
max_driving_secondsColonne facultative, en secondesDe 1 à 90000 ; vide pour aucune limite
startColonne facultative : code du dépôt ou lieu où le véhicule démarre et est chargéVide : le dépôt principal
endColonne facultative : code du dépôt ou lieu où il finit sa journéeVide : là où il a démarré

Les colonnes facultatives viennent par groupes : aucune, les trois limites, ou les trois limites suivies de start,end. Un véhicule de votre flotte ne peut pas démarrer ni finir à un dépôt d’exemple.

Les jours de repos et les autres horaires d’une date ne figurent pas dans le fichier : saisissez-les dans Flotte. Un nouvel import du véhicule les conserve. Le travail de nuit n’est pas pris en charge.

Exemple de ligne issu du fichier examples/vehicles.csv du kit (du lundi au vendredi, 7 h 30 – 17 h) :

TRUCK-DEMO-01,true,3600,2550,9600,19000,11500,2,9500,42000,18,0,7200,TAIL_LIFT|REFRIGERATED,07:30-17:00,07:30-17:00,07:30-17:00,07:30-17:00,07:30-17:00,,,8500,72,3250

4. Prévisualiser puis importer

  1. Dans Livraisons ou Flotte, choisissez Importer un CSV, puis déposez votre fichier dans la zone prévue, ou cliquez sur cette zone pour le choisir.
  2. Choisissez Prévisualiser le CSV. La prévisualisation n’enregistre rien.
  3. Lisez les compteurs Nouvelle, Modifiée, Inchangée, Lignes à vérifier (pour les livraisons) et Lignes en erreur, puis les messages par ligne et par colonne.
  4. Corrigez le fichier, choisissez-le à nouveau et prévisualisez jusqu’à ce qu’aucune ligne ne soit en erreur.
  5. Choisissez Importer les livraisons ou Importer les véhicules. Les lignes sont enregistrées ensemble, en une seule étape.
  6. Après un import de livraisons, Vérifier les repères importés et Placer les repères manquants ouvrent les livraisons correspondantes.

Avant le choix d’un fichier, l’import montre ses étapes — 1 Choisir un fichier, 2 Prévisualiser, 3 Importer et, pour les livraisons, 4 Vérifier les emplacements — avec l’étape en cours signalée, et Colonnes du fichier : la ligne d’en-tête exacte, les colonnes facultatives à part. Copier la ligne d’en-tête la copie. Télécharger le modèle enregistre un fichier CSV qui ne contient que cette ligne (tournevia-deliveries.csv ou tournevia-vehicles.csv), en UTF-8 avec une marque d’ordre d’octets pour qu’un tableur garde les accents. Le modèle contient toutes les colonnes facultatives : quand vous réimportez un fichier corrigé, une cellule vide dans l’une d’elles rétablit sa valeur par défaut.

Toute erreur bloque le fichier entier : rien n’est enregistré tant que chaque ligne n’est pas valide. Une ligne d’en-têtes incorrecte est signalée par « En-têtes attendus exactement : …, éventuellement suivis de : … » avec les deux listes attendues. Un fichier séparé par des points-virgules est signalé par « Ce fichier sépare ses colonnes par des points-virgules ; Tournevia lit des virgules. Enregistrez-le avec la virgule comme séparateur, puis prévisualisez-le de nouveau. » Les autres messages liés au fichier figurent dans Messages et solutions.

Réimporter un fichier corrigé

Un identifiant qui existe déjà ne bloque plus l’import :

  • Une ligne aux mêmes valeurs est Inchangée et conserve l’enregistrement, y compris la vérification de son entrée.
  • Une ligne aux valeurs différentes est Modifiée. L’aperçu nomme ce qu’elle change, par exemple « Durée de service · Créneau de livraison ». La modification n’est enregistrée qu’à la confirmation de l’import.
  • Une livraison modifiée sans coordonnées dans le fichier garde son repère enregistré et sa vérification (Repère enregistré conservé). Le même point redonné garde aussi sa vérification ; un point déplacé est à vérifier de nouveau.
  • Une colonne facultative absente du fichier garde les valeurs enregistrées : priority, customer et ships_from pour une livraison, les limites de tournée et start, end pour un véhicule. Une cellule vide dans une colonne présente rétablit la valeur par défaut, comme tout autre changement.
  • Un véhicule modifié garde ses jours de repos.

Par l’API, une ligne pour un enregistrement existant reste refusée sans le paramètre update_existing=true.

5. Export de répartition

Exporter le CSV télécharge le plan Prêt actuel sous le nom plan-<identifiant du plan>-v<version>.csv, avec une ligne par arrêt desservi, dans l’ordre des tournées. Les livraisons non affectées n’y figurent pas. Chaque téléchargement vérifie à nouveau que le plan est Prêt, à jour et valide.

ColonneContenu
plan_id, plan_versionLe plan exporté et sa version
exported_atHeure du téléchargement
service_dateJour planifié
vehicleNuméro de flotte
vehicle_departure, vehicle_returnDépart du véhicule et fin de sa tournée
start_place, end_placeCodes du dépôt ou lieu où la tournée commence et finit
sequenceNuméro de l’arrêt dans la tournée, à partir de 1
order, addressIdentifiant et adresse de la livraison
latitude, longitudeCoordonnées vérifiées de l’entrée
time_window_start, time_window_endLe créneau de la livraison
arrival, service_start, stop_departureArrivée prévue, début de livraison et départ de l’arrêt
service_secondsDurée de livraison, en secondes
weight_kg, volume_dm3, pallet_eur_units, pallet_ind_units, loading_length_mmLes quantités de la livraison
required_skillsCodes d’équipement exigés, séparés par |
instructionsInstructions de livraison
planning_notice« Estimation de planification. Vérifiez les accès routiers actuels et les exigences des conducteurs. Péages non inclus. »

Tous les horaires sont en ISO 8601 Europe/Paris avec leur décalage. L’avertissement de planification est rédigé dans la langue de votre compte ; pour un plan d’exemples, il commence par « Données d’exemple, pas pour la route. ». Les colonnes de livraison portent les mêmes noms que dans l’import des livraisons.

L’interface choisit la mise en forme selon sa langue :

  • Interface en anglais : UTF-8 avec des virgules.
  • Interface en français : UTF-8 avec une marque d’ordre d’octets, des points-virgules et une virgule décimale dans les coordonnées, pour les tableurs qui utilisent la virgule décimale, comme Excel en français.

Les cellules de texte qui commencent par =, +, - ou @ (y compris après des espaces) sont écrites précédées d’une apostrophe, pour qu’un tableur ne les exécute pas comme des formules. Si vous modifiez un plan après l’avoir exporté, il repasse en Brouillon : marquez-le de nouveau Prêt et remplacez le fichier transmis à chacun.

Sur cette page