Service FTP : Format de données attendu Le point FTP contient deux sous-dossiers afin de permettre au service de traiter les données reçues : work : Dossier dans lequel les ZIP réceptionnés seront décompressés afin d'être traités histo : Dossier contenant l'ensemble des ZIP réceptionnés et traités format des ZIP : {yyyy-MM-dd} {HH}h{mm}m{ss}s.zip Exemple : 2022-09-26 16h56m03s.zip Le service scanne automatiquement la racine du point FTP afin de détecter et traiter tout nouveau ZIP. Format des données envoyés en FTP Toutes les données envoyées via FTP, quelles que soient leurs types, doivent être compressées en ZIP au préalable. Le ZIP n'a pas besoin d'avoir un nommage spécifique, il doit juste être compressé en ZIP "classique" (Extension ".zip" et niveau de compression "normale"). Une fois généré, le ZIP doit être déposé à la racine du point FTP afin que notre service puisse le détecter. Une fois la réception du ZIP terminé, celui-ci sera alors décompressé afin d'être traité. Télécharger l'exemple de ZIP avec les données au format JSON : exemple_complet_json.zip Télécharger l'exemple de ZIP avec les données au format CSV : exemple_complet_csv.zip Structure du ZIP attendu Le ZIP peut contenir les éléments suivants : Un fichier de données des clients (voir détails) Un fichier de données des articles (voir détails) Un dossier contenant les fiches techniques des articles* (voir détails) Un dossier contenant les fiches de données de sécurité des articles* (voir détails) Un dossier contenant les photos des articles* (voir détails) Un dossier contenant les photos des clients** (voir détails) * : Le fichier de données articles doit être inclus dans le zip pour que ce dossier soit traité ** : Le fichier de données clients doit être inclus dans le zip pour que ce dossier soit traité Exemple de contenu de fichier ZIP clients.csv articles.csv /FT 00012.pdf 00245.pdf /FDS 00012.pdf /photo 00012.jpg 00245.jpg /client 8054.jpg Télécharger l'exemple : exemple_complet_csv.zip Fichier de données clients Encodage Les fichiers de données peuvent être encodé en : UTF-8 ANSI (Windows-1252, CP-1252, Latin-1, ISO-8859-1) Nommage Le service FTP accepte les données dans les formats suivants : JSON CSV Le fichier d'import des données clients peut être nommé comme ci-après (l'extension du fichier n'est pas prise en compte) : cli client clients Exemple de nom pour le fichier clients cli.csv clients.json Format JSON Le fichier JSON doit contenir une liste de clients. Liste des propriétés d'un client : Propriété Type Description Exemple d'utilisation Reference string(13) Référence du client "Reference": "8054" Designation string(60) Nom du client "Designation": "Mairie de Perpignan" OffreDePrix list Liste les références des produits dans l'offre de prix du client "OffreDePrix": ["00000001", "aaa1"] Historique list Liste les références des produits dans l'historique du client "Historique": ["00000001"] Les propriétés reference  et  designation sont obligatoires afin que le client en question soit traité. Exemple complet avec 2 clients au format JSON [ { "Reference": "8054", "Designation": "Mairie de Perpignan", "OffreDePrix": ["00000001", "aaa1"], "Historique": ["00000001"] }, { "Reference": "84513", "Designation": "EHPAD de Perpignan", "Historique": ["aaa1"] } ] Télécharger l'exemple : exemple_complet_2_clients.json Format CSV Le fichier CSV doit contenir une liste de clients. L'ensemble des entêtes peuvent être défini sous différent nommage (ex: "ref" ou "référence") et l'ordre n'importe pas. Chaque entête / valeur doivent être séparé par un ";" (point virgule) ou "," (virgule). Liste des entêtes du fichier CSV / propriétés d'un client : Entête Type Description Reference string(13) Référence du client Designation string(60) Nom du client OffreDePrix list Liste les références des produits dans l'offre de prix du client Historique list Liste les références des produits dans l'historique du client Les entêtes reference  et  designation sont obligatoires afin que le fichier CSV soit traité Exemple d'entêtes valides Reference;Designation;offreDePrix;Historique désignation;référence;offre de prix;historique nom;ref.;offre;histo titre;réf Voir les règles REGEX des entêtes Référence : ^\s*((cli|client|organn?isation|soci[ée]t[ée])?[s]?\s*(r(e|é)f[.]?|r(e|é)f(e|é)rence)[s]?|(r(e|é)f[.]?|r(e|é)f(e|é)rence)[s]?\s*(du|de|l[']?)?\s*(cli|client|organn?isation|soci[ée]t[ée])?[s]?)\s*$ Désignation : ^\s*((cli|client|organn?isation|soci[ée]t[ée])[s]?\s*(d(e|é)signation|titre|nom|libell(e|é))[s]?|(d(e|é)signation|titre|nom|libell(e|é))[s]?\s*(du|de|l[']?)?\s*(cli|client|organn?isation|soci[ée]t[ée])?[s]?)\s*$ Offre de prix : ^\s*((cli|client|organn?isation|soci[ée]t[ée])?[s]?\s*(offre)[s]?\s*(du|de|l[']?)?\s*(prix)?|(offre)[s]?\s*(du|de|l[']?)?\s*(prix)?\s*(du|de|l[']?)?\s*(cli|client|organn?isation|soci[ée]t[ée])?[s]?)\s*$ Historique : ^\s*((cli|client|organn?isation|soci[ée]t[ée])?[s]?\s*(histo[.]?|historique)[s]?|(histo[.]?|historique)[s]?\s*(du|de|l[']?)?\s*(cli|client|organn?isation|soci[ée]t[ée])?[s]?)\s*$ Exemple complet avec 2 clients au format CSV Designation;Reference;offreDePrix;Historique 8054;Mairie de Perpignan;00000001,aaa1;00000001 84513;EHPAD de Perpignan;;aaa1 Télécharger l'exemple : exemple_complet_2_clients.csv Fichier de données articles Encodage Les fichiers de données peuvent être encodé en : UTF-8 ANSI (Windows-1252, CP-1252, Latin-1, ISO-8859-1) Nommage Le service FTP accepte les données dans les formats suivants : JSON CSV Le fichier d'import des données articles peut être nommé comme suivant (l'extension du fichier n'est pas prise en compte) : art article produits Exemple de nom pour le fichier articles art.csv articles.json Format JSON Le fichier JSON doit contenir une liste d'articles. Liste des propriétés d'un article: Propriété Type Description Exemple d'utilisation Reference string(13) Référence de l'article "Reference": "00000001" ReferenceGroupe string(13) Référence groupe de l'article "ReferenceGroupe": "00000001A" Designation string(60) Nom de l'article "Designation": "Dégraissant spray" Description string(MAX) Description de l'article "Description": "Dégraissant en spray de 500ml..." Dosage string(MAX) Dosage recommandée  de l'article "Dosage": "Prêt à l'emploi" Temperature string(MAX) Température recommandée  de l'article "Temperature": "Température ambiante" UrlFT string(MAX) Chemin alternatif vers la fiche technique* "UrlFT": "PDF/ft-degraissant.pdf" UrlFDS string(MAX) Chemin alternatif vers la fiche de sécurité* "UrlFDS": "PDF/degraissant-fiche-secu.pdf" UrlImage string(MAX) Chemin alternatif vers l'image* "UrlImage": "images/degraissant.jpg" Les propriétés reference  et  designation sont obligatoires afin que l'article en question soit traité. *Les champs UrlFT, UrlFDS et UrlImage peuvent être utilisés pour indiquer au service de récupérer un PDF ou JPG via une méthode différente que celle définie (voir détails) : Chemin différent que celui attendu par le service Ce chemin doit être relatif au dossier zip et doit finir par ".pdf" ou ".jpg" ex: "UrlFT": "FT/degraissant.pdf" Url permettant de télécharger le fichier  A VENIR  Cette url doit commencer par "http" ex: "UrlImage": "https://exemple.com/images/articles/14875.jpg" Fichier au format base64   A VENIR  La valeur doit commencer par "data:application/pdf;base64," ou "data:image/jpeg;base64," ex: "UrlImage": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAUwBTAAD/4RGs..." Exemple complet avec 2 articles au format JSON [ { "Reference": "00000001", "ReferenceGroupe": "00000001A", "Designation": "Dégraissant spray", "Description": "Dégraissant en spray de 500ml...", "Dosage": "Prêt à l'emploi", "Temperature": "Température ambiante" }, { "Reference": "aaa1", "Designation": "Désinfectant 5L", "Description": "Bidon de 5L de désinfectant...", "Dosage": "0,2 à 1 %", "Temperature": "à l'eau chaude" }, ] Télécharger l'exemple : exemple_complet_2_articles.json Format CSV Le fichier CSV doit contenir une liste d'articles. L'ensemble des entêtes peuvent être défini sous différent nommage (ex: "ref" ou "référence") et l'ordre n'importe pas. Chaque entête / valeur doivent être séparé par un ";" (point virgule) ou "," (virgule). Liste des entêtes du fichier CSV / propriétés d'un article: Entête Type Description Reference string(13) Référence de l'article ReferenceGroupe string(13) Référence groupe de l'article Designation string(60) Nom de l'article Description string(MAX) Description de l'article Dosage string(MAX) Dosage recommandée  de l'article Temperature string(MAX) Température recommandée de l'article Les entêtes reference  et  designation sont obligatoires afin que le fichier CSV soit traité Exemple d'entêtes valides Reference;ReferenceGroupe;Designation;Description;Dosage;Temperature désignation;référence;référence groupe;dosage;température nom;ref.;dosage;temp titre;réf Voir les règles REGEX des entêtes Référence : ^\s*((produit|art|article)?[s]?\s*(r(e|é)f[.]?|r(e|é)f(e|é)rence)[s]?|(r(e|é)f[.]?|r(e|é)f(e|é)rence)[s]?\s*(du|de|l[']?)?\s*(produit|art|article)?[s]?)\s*$ Référence groupe : ^\s*((produit|art|article)?[s]?\s*(r(e|é)f[.]?|r(e|é)f(e|é)rence)[s]?\s*(grp[.]|groupe)[s]?|(r(e|é)f[.]?|r(e|é)f(e|é)rence)[s]?\s*\s*(grp[.]|groupe)[s]?\s*(du|de|l[']?)?\s*(produit|art|article)?[s]?)\s*$ Désignation : ^\s*((produit|art|article)[s]?\s*(d(e|é)signation|titre|nom|libell(e|é))[s]?|(d(e|é)signation|titre|nom|libell(e|é))[s]?\s*(du|de|l[']?)?\s*(produit|art|article)?[s]?)\s*$ Description : ^\s*((produit|art|article)[s]?\s*(description|d(e|é)tail)[s]?|(d(e|é)signation|titre|nom)[s]?\s*(du|de|l[']?)?\s*(produit|art|article)?[s]?)\s*$ Dosage : ^\s*((produit|art|article)?[s]?\s*(dosage)[s]?|(dosage)[s]?\s*(du|de|l[']?)?\s*(produit|art|article)?[s]?)\s*$ Température : ^\s*((produit|art|article)?[s]?\s*(temp[.]?|temp(e|é)rature)[s]?|(temp[.]?|temp(e|é)rature)[s]?\s*(du|de|l[']?)?\s*(produit|art|article)?[s]?)\s*$ Exemple complet avec 2 articles au format CSV Reference;ReferenceGroupe;Designation;Description;Dosage;Temperature 00000001;00000001A;Dégraissant spray;Dégraissant en spray 500ml...;Prêt à l'emploi;Température ambiante aaa1;;Désinfectant 5L;Bidon de 5L de désinfectant...;0,2 à 1 %;à l'eau chaude Télécharger l'exemple : exemple_complet_2_articles.csv Dossiers des documents des articles Dossier fiches technique Ce dossier permet de stocker les fiches techniques au format PDF des articles ajoutés / modifiés dans le fichier de données article. Les PDF doivent être nommés avec la référence de l'article concerné. Exemple de PDF contenu dans le dossier 00000001.pdf aaa1.pdf Télécharger l'exemple : exemple_dossier_ft.zip Le dossier peut être défini sous différents nommage (ex: "ft" ou "fiches techniques") Voir la règle REGEX de nom du dossier ^(ft|fiches?(\s*|-)?tech(nique)?)$ Dossier fiches de données de sécurité Ce dossier permet de stocker les fiches de données de sécurité au format PDF des articles ajoutés / modifiés dans le fichier de données article. Les PDF doivent être nommés avec la référence de l'article concerné. Exemple de PDF contenu dans le dossier 00000001.pdf aaa1.pdf Télécharger l'exemple : exemple_dossier_fds.zip Le dossier peut être défini sous différents nommages (ex: "fds" ou "fiches de sécurité") Voir la règle REGEX de nom du dossier ^(fds|fiches?(\s*|-)?(de)?(\s*|-)?s['ée]cu(rit['ée]e?)?)$ Dossier photo Ce dossier permet de stocker les photos au format JPG des articles ajoutés / modifiés dans le fichier de données article. Les photos doivent être nommées avec la référence de l'article concerné. Exemple de photos contenu dans le dossier 00000001.jpg aaa1.jpg Télécharger l'exemple : exemple_dossier_photo.zip Le dossier peut être défini sous différents nommages (ex: "img" ou "photos") Voir la règle REGEX de nom du dossier ^(photo|img|image|picture)s?$ Dossiers des documents des clients Dossier client Ce dossier permet de stocker les photos au format JPG des articles ajoutés / modifiés dans le fichier de données client. Les photos doivent être nommées avec la référence du client concerné. Exemple de photos contenu dans le dossier 8054.jpg 84513.jpg Télécharger l'exemple : exemple_dossier_client.zip Le dossier peut être défini sous différents nommages (ex: "cli" ou "clients") Voir la règle REGEX de nom du dossier ^cli(ents?)?$