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.
activevauttrueoufalse, 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 queA–Z,0–9et_, 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_LIFTs’affiche Hayon élévateur etREFRIGERATEDCaisse 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
| Colonne | Contenu | Règle |
|---|---|---|
external_id | Votre identifiant de livraison | 1 à 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_date | Jour de livraison | Obligatoire, AAAA-MM-JJ |
active | Livraison sélectionnable ou non | true ou false |
address | Adresse ou description de l’entrée | 1 à 500 caractères ; peut rester vide si la ligne désigne un client dans customer |
latitude | Latitude de l’entrée | Décimal avec un point, de −90 à 90 ; vide avec longitude si inconnue |
longitude | Longitude de l’entrée | Décimal avec un point, de −180 à 180 ; vide avec latitude si inconnue |
time_window_start | Début du créneau de livraison | Obligatoire, ISO 8601 avec décalage, le jour service_date |
time_window_end | Fin du créneau de livraison | Obligatoire, après le début, le jour service_date |
service_seconds | Temps passé à l’arrêt, en secondes | De 0 à 28800 |
weight_kg | Poids, en kg | Entier ≥ 0 |
volume_dm3 | Volume, en dm³ (litres) | Entier ≥ 0 |
pallet_eur_units | Palettes Europe | Entier ≥ 0 |
pallet_ind_units | Palettes industrielles | Entier ≥ 0 |
loading_length_mm | Longueur de chargement, en mm | Entier ≥ 0 |
required_skills | Équipement exigé du véhicule | Codes séparés par |, ou vide |
instructions | Instructions de livraison | 1000 caractères au plus ; peut être vide |
priority | Colonne facultative | De 0 à 100 ; une cellule vide vaut 0 |
customer | Colonne facultative : code d’un client enregistré | Vide pour aucun client |
ships_from | Colonne facultative : code du dépôt où la livraison est chargée | Un 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
| Colonne | Contenu | Règle |
|---|---|---|
fleet_number | Votre identifiant de véhicule | Obligatoire, 1 à 40 caractères, unique dans l’entreprise |
active | Véhicule sélectionnable ou non | true ou false |
height_mm | Hauteur du véhicule, en mm | De 1 à 10000 |
width_mm | Largeur du véhicule, en mm | De 1 à 10000 |
length_mm | Longueur du véhicule, en mm | De 1 à 50000 |
gross_weight_kg | Poids total utilisé pour le routage, en kg | De 1 à 100000 |
axle_load_kg | Charge à l’essieu, en kg | De 1 à 40000 |
axle_count | Nombre d’essieux | De 2 à 12 |
weight_kg | Charge utile en poids, en kg | Entier ≥ 0, au plus gross_weight_kg |
volume_dm3 | Capacité en volume, en dm³ | Entier ≥ 0 |
pallet_eur_units | Capacité en palettes Europe | Entier ≥ 0 |
pallet_ind_units | Capacité en palettes industrielles | Entier ≥ 0 |
loading_length_mm | Longueur de chargement disponible, en mm | Entier ≥ 0 |
skills | Équipement du véhicule | Codes séparés par |, ou vide |
monday … sunday | Horaires de travail de chaque jour de la semaine, une colonne par jour : monday, tuesday, wednesday, thursday, friday, saturday, sunday | 07: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_minor | Coût fixe par tournée, en centimes d’euro | Entier ≥ 0 |
per_km_minor | Tarif kilométrique, en centimes d’euro par km | Entier ≥ 0 |
per_hour_minor | Tarif horaire, en centimes d’euro par heure | Entier ≥ 0 |
max_stops | Colonne facultative | De 1 à 250 ; vide pour aucune limite |
max_distance_m | Colonne facultative, en mètres | De 1 à 2000000 ; vide pour aucune limite |
max_driving_seconds | Colonne facultative, en secondes | De 1 à 90000 ; vide pour aucune limite |
start | Colonne facultative : code du dépôt ou lieu où le véhicule démarre et est chargé | Vide : le dépôt principal |
end | Colonne facultative : code du dépôt ou lieu où il finit sa journée | Vide : 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,32504. Prévisualiser puis importer
- 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.
- Choisissez Prévisualiser le CSV. La prévisualisation n’enregistre rien.
- 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.
- Corrigez le fichier, choisissez-le à nouveau et prévisualisez jusqu’à ce qu’aucune ligne ne soit en erreur.
- Choisissez Importer les livraisons ou Importer les véhicules. Les lignes sont enregistrées ensemble, en une seule étape.
- 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,customeretships_frompour une livraison, les limites de tournée etstart,endpour 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.
| Colonne | Contenu |
|---|---|
plan_id, plan_version | Le plan exporté et sa version |
exported_at | Heure du téléchargement |
service_date | Jour planifié |
vehicle | Numéro de flotte |
vehicle_departure, vehicle_return | Départ du véhicule et fin de sa tournée |
start_place, end_place | Codes du dépôt ou lieu où la tournée commence et finit |
sequence | Numéro de l’arrêt dans la tournée, à partir de 1 |
order, address | Identifiant et adresse de la livraison |
latitude, longitude | Coordonnées vérifiées de l’entrée |
time_window_start, time_window_end | Le créneau de la livraison |
arrival, service_start, stop_departure | Arrivée prévue, début de livraison et départ de l’arrêt |
service_seconds | Durée de livraison, en secondes |
weight_kg, volume_dm3, pallet_eur_units, pallet_ind_units, loading_length_mm | Les quantités de la livraison |
required_skills | Codes d’équipement exigés, séparés par | |
instructions | Instructions 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.