[{"data":1,"prerenderedAt":994},["ShallowReactive",2],{"\u002Fnext\u002Fapplications\u002Fdokos-data-hub":3,"section:\u002Fnext\u002Fapplications\u002Fdokos-data-hub":993},{"id":4,"title":5,"body":6,"description":968,"extension":969,"meta":970,"navigation":972,"path":989,"seo":990,"stem":991,"__hash__":992},"docs\u002F2.next\u002F2.applications\u002F3.dokos-data-hub.md","Dokos Data Hub",{"type":7,"value":8,"toc":946},"minimark",[9,13,17,20,25,45,70,73,77,122,126,142,147,263,274,278,393,396,400,404,494,498,504,552,557,561,574,578,632,640,644,650,727,741,748,752,832,836,847,851,865,937],[10,11,5],"h1",{"id":12},"dokos-data-hub",[14,15,16],"p",{},"Dokos Data Hub reçoit les fichiers que vos partenaires déposent sur un serveur SFTP. Il lit chaque fichier et crée les documents correspondants dans Dokos. Il convient aux échanges de données informatisés (EDI) : commandes, avis d'expédition, référentiels, relevés. Il envoie aussi des exports planifiés vers un serveur SFTP ou un stockage cloud.",[14,18,19],{},"L'application n'a pas encore de traduction française. Ses écrans et ses types de documents s'affichent en anglais.",[21,22,24],"h2",{"id":23},"comment-un-fichier-devient-un-document","Comment un fichier devient un document",[26,27,28,29,32,33,35,36,38,39,41,42,44],"mermaid",{},"\nflowchart LR\n    S[Serveur SFTP",[30,31],"br",{},"du partenaire] -->|relève planifiée| C[DDH Connection]\n    C --> M{Une DDH Mapping",[30,34],{},"correspond au nom ?}\n    M -- Non --> K[Fichier laissé",[30,37],{},"sur le serveur]\n    M -- Oui --> F[DDH Inbound File",[30,40],{},"statut Fetched]\n    F --> P[Lecture et création",[30,43],{},"des documents]\n    P --> D[(Documents Dokos)]\n    P --> R[Completed ou Failed]\n",[46,47,48,57,63],"ul",{},[49,50,51,52,56],"li",{},"Une ",[53,54,55],"strong",{},"DDH Connection"," décrit un serveur SFTP, le dossier à relever et la fréquence de relève.",[49,58,51,59,62],{},[53,60,61],{},"DDH Mapping"," décrit un format de fichier et le type de document à créer. Son motif de nom de fichier est le seul filtre : un fichier qu'aucune correspondance active ne reconnaît reste sur le serveur, sans être téléchargé.",[49,64,65,66,69],{},"Chaque fichier reconnu crée une ",[53,67,68],{},"DDH Inbound File",". Un fichier déjà reçu, avec le même contenu, n'est pas repris. Data Hub choisit la première correspondance active de la connexion dont le motif correspond.",[14,71,72],{},"Le planificateur de tâches relève les connexions et traite les fichiers. Il doit être actif sur le site.",[21,74,76],{"id":75},"prérequis","Prérequis",[46,78,79,82,85,104],{},[49,80,81],{},"L'application Dokos Data Hub est installée sur votre site.",[49,83,84],{},"Vous avez l'adresse du serveur SFTP, un identifiant, et un mot de passe ou une clé SSH.",[49,86,87,88,91,92,96,97,99,100,103],{},"Le type de document cible a un champ de type ",[53,89,90],{},"Lien"," nommé ",[93,94,95],"code",{},"ddh_inbound_file",", qui pointe vers ",[53,98,68],{},". Sans ce champ, la correspondance ne s'enregistre pas. Ajoutez-le si besoin avec un ",[53,101,102],{},"Champ personnalisé",".",[49,105,106,107,110,111,110,114,117,118,121],{},"Si le partenaire envoie des archives (",[93,108,109],{},".zip",", ",[93,112,113],{},".tar",[93,115,116],{},".gz","), créez d'abord un stockage ",[53,119,120],{},"DDH S3 Storage"," (AWS S3 ou Azure Blob Storage). Une connexion sans stockage refuse les archives.",[21,123,125],{"id":124},"exemple-relever-les-livraisons-dun-transporteur","Exemple : relever les livraisons d'un transporteur",[14,127,128,129,132,133,110,136,139,140,103],{},"Dokompany reçoit chaque nuit un fichier CSV de son transporteur (fictif) : ",[93,130,131],{},"LIVRAISONS_20261031.csv",". Chaque ligne donne un numéro de colis, une date de livraison et un code statut (",[93,134,135],{},"LIV",[93,137,138],{},"RET","). Dokompany veut une fiche par colis dans un type de document personnalisé « Suivi colis », qui a le champ ",[93,141,95],{},[143,144,146],"h3",{"id":145},"créer-la-connexion","Créer la connexion",[148,149,150,159,169,186,204,217,228,257],"ol",{},[49,151,152,153,155,156,158],{},"Ouvrez l'espace ",[53,154,5],{},", puis ",[53,157,55],{},", et créez une connexion.",[49,160,161,162,165,166,103],{},"Saisissez un ",[53,163,164],{},"Title",", par exemple ",[93,167,168],{},"Transporteur",[49,170,171,172,175,176,110,179,182,183,103],{},"Dans l'onglet ",[53,173,174],{},"Connection",", renseignez ",[53,177,178],{},"Host",[53,180,181],{},"Port"," (22 par défaut) et ",[53,184,185],{},"Username",[49,187,188,189,192,193,110,196,199,200,203],{},"Choisissez l'",[53,190,191],{},"Authentication Method"," : ",[53,194,195],{},"Password",[53,197,198],{},"SSH Key"," ou ",[53,201,202],{},"SSH Certificate",". Renseignez le secret correspondant.",[49,205,171,206,209,210,213,214,103],{},[53,207,208],{},"Paths",", renseignez le ",[53,211,212],{},"Remote Path",", le dossier à relever, par exemple ",[93,215,216],{},"\u002Fdepot\u002Flivraisons",[49,218,219,220,223,224,227],{},"Renseignez ",[53,221,222],{},"Archive Path"," pour y déplacer les fichiers traités, et ",[53,225,226],{},"Error Path"," pour les fichiers en échec. Ces deux champs sont facultatifs.",[49,229,171,230,233,234,237,238,241,242,245,246,249,250,165,253,256],{},[53,231,232],{},"Schedule & Retention",", choisissez le ",[53,235,236],{},"Schedule Type",". ",[53,239,240],{},"Interval"," relève toutes les N minutes (",[53,243,244],{},"Polling Interval (minutes)",", 5 par défaut). ",[53,247,248],{},"Cron"," suit une ",[53,251,252],{},"Cron Expression",[93,254,255],{},"0 6 * * *"," pour 6 h chaque jour.",[49,258,259,260,103],{},"Enregistrez, puis cliquez sur ",[53,261,262],{},"Test Connection",[14,264,265,266,269,270,273],{},"Le message ",[53,267,268],{},"Connection Successful"," confirme l'accès au dossier. Le bouton ",[53,271,272],{},"Create Test File"," dépose un fichier texte dans le dossier pour tester la chaîne complète.",[143,275,277],{"id":276},"créer-la-correspondance","Créer la correspondance",[148,279,280,286,296,307,316,330,340,365,378,390],{},[49,281,282,283,285],{},"Ouvrez ",[53,284,61],{}," et créez une correspondance.",[49,287,161,288,290,291,293,294,103],{},[53,289,164],{}," et choisissez la ",[53,292,174],{}," ",[93,295,168],{},[49,297,171,298,233,301,293,304,103],{},[53,299,300],{},"File Identification",[53,302,303],{},"File Format",[53,305,306],{},"CSV",[49,308,219,309,192,312,315],{},[53,310,311],{},"File Name Pattern (regex)",[93,313,314],{},"^LIVRAISONS_.*\\.csv$",". Ce motif est une expression régulière. Il décide aussi des fichiers relevés sur le serveur. Laissez-le vide pour accepter tous les fichiers de la connexion.",[49,317,318,319,110,322,325,326,329],{},"Réglez ",[53,320,321],{},"File Encoding",[53,323,324],{},"CSV Delimiter"," et ",[53,327,328],{},"CSV Has Header"," selon le fichier.",[49,331,171,332,335,336,339],{},[53,333,334],{},"Target",", choisissez la ",[53,337,338],{},"Target DocType"," « Suivi colis ».",[49,341,342,343,192,346,110,349,199,352,355,356,325,358,360,361,364],{},"Choisissez la ",[53,344,345],{},"Duplicate Handling",[53,347,348],{},"Create new",[53,350,351],{},"Update existing",[53,353,354],{},"Skip",". Pour ",[53,357,351],{},[53,359,354],{},", renseignez la ",[53,362,363],{},"Match Field",", par exemple le champ du numéro de colis.",[49,366,171,367,370,371,374,375,103],{},[53,368,369],{},"Field Mappings",", ajoutez une ligne par champ : la colonne source dans ",[53,372,373],{},"Source Path",", le champ cible dans ",[53,376,377],{},"Target Field",[49,379,380,381,384,385,103],{},"Pour traduire le code statut, ajoutez une ligne dans ",[53,382,383],{},"Code List Mappings",". Elle utilise une ",[386,387,389],"a",{"href":388},"#traduire-des-codes-avec-une-liste-de-codes","liste de codes",[49,391,392],{},"Enregistrez.",[14,394,395],{},"Au passage suivant, chaque ligne du fichier crée une fiche « Suivi colis ».",[21,397,399],{"id":398},"référence-des-correspondances","Référence des correspondances",[143,401,403],{"id":402},"formats-de-fichier","Formats de fichier",[405,406,407,427],"table",{},[408,409,410],"thead",{},[411,412,413,418,423],"tr",{},[414,415,416],"th",{},[53,417,303],{},[414,419,420],{},[53,421,422],{},"Root Path",[414,424,425],{},[53,426,373],{},[428,429,430,450,463,476],"tbody",{},[411,431,432,437,440],{},[433,434,435],"td",{},[53,436,306],{},[433,438,439],{},"Ignoré",[433,441,442,443,445,446,449],{},"Nom de la colonne. Sans en-tête (",[53,444,328],{}," décoché), utilisez ",[53,447,448],{},"Column Number"," (à partir de 1).",[411,451,452,457,460],{},[433,453,454],{},[53,455,456],{},"XML",[433,458,459],{},"Chemin de l'élément qui contient un enregistrement",[433,461,462],{},"Chemin relatif à l'enregistrement",[411,464,465,470,473],{},[433,466,467],{},[53,468,469],{},"JSON",[433,471,472],{},"Chemin de la liste des enregistrements",[433,474,475],{},"Clé relative à l'enregistrement",[411,477,478,483,485],{},[433,479,480],{},[53,481,482],{},"Fixed Width",[433,484,439],{},[433,486,487,488,325,491,103],{},"Chaque champ est défini par ",[53,489,490],{},"Start Position",[53,492,493],{},"Length",[143,495,497],{"id":496},"lignes-de-champs","Lignes de champs",[14,499,500,501,503],{},"Une ligne ",[53,502,369],{}," a ces options :",[46,505,506,512,518],{},[49,507,508,511],{},[53,509,510],{},"Required"," : le fichier échoue si la valeur manque.",[49,513,514,517],{},[53,515,516],{},"Default Value"," : la valeur utilisée si la source est vide.",[49,519,520,192,523,110,526,110,529,110,532,110,535,538,539,541,542,165,545,548,549,103],{},[53,521,522],{},"Transform",[53,524,525],{},"Uppercase",[53,527,528],{},"Lowercase",[53,530,531],{},"Strip",[53,533,534],{},"Date (ISO)",[53,536,537],{},"Date Format"," (avec un ",[53,540,537],{}," au format ",[93,543,544],{},"strftime",[93,546,547],{},"%d\u002F%m\u002F%Y",") ou ",[53,550,551],{},"Custom",[14,553,554,556],{},[53,555,551],{}," exécute du code Python saisi dans la correspondance. Réservez cette option aux administrateurs.",[143,558,560],{"id":559},"traduire-des-codes-avec-une-liste-de-codes","Traduire des codes avec une liste de codes",[14,562,500,563,565,566,569,570,573],{},[53,564,383],{}," lit un code dans le fichier et le remplace par le nom d'un document Dokos. Elle s'appuie sur une ",[53,567,568],{},"Liste de codes"," de Dokos. Si le code est inconnu et que ",[53,571,572],{},"Fallback to Default"," est coché, la valeur par défaut de la liste de codes s'applique.",[143,575,577],{"id":576},"doublons-et-import-en-masse","Doublons et import en masse",[405,579,580,595],{},[408,581,582],{},[411,583,584,588,591],{},[414,585,586],{},[53,587,345],{},[414,589,590],{},"Effet",[414,592,593],{},[53,594,363],{},[428,596,597,609,621],{},[411,598,599,603,606],{},[433,600,601],{},[53,602,348],{},[433,604,605],{},"Crée toujours un document.",[433,607,608],{},"Facultatif",[411,610,611,615,618],{},[433,612,613],{},[53,614,351],{},[433,616,617],{},"Met à jour le document trouvé, sinon le crée.",[433,619,620],{},"Obligatoire",[411,622,623,627,630],{},[433,624,625],{},[53,626,354],{},[433,628,629],{},"Ignore l'enregistrement si un document existe, sinon le crée.",[433,631,620],{},[14,633,634,637,638,103],{},[53,635,636],{},"Bulk Insert (bypass ORM)"," écrit directement en base, sans validations, sans règles de nommage et sans événements. Il accélère les gros fichiers. Il ne fonctionne pas avec ",[53,639,351],{},[21,641,643],{"id":642},"suivre-les-fichiers-reçus","Suivre les fichiers reçus",[14,645,646,647,649],{},"La liste ",[53,648,68],{}," montre chaque fichier reçu avec son statut :",[405,651,652,662],{},[408,653,654],{},[411,655,656,659],{},[414,657,658],{},"Statut",[414,660,661],{},"Signification",[428,663,664,674,684,694,704,717],{},[411,665,666,671],{},[433,667,668],{},[53,669,670],{},"Fetched",[433,672,673],{},"Le fichier est relevé et attend son traitement.",[411,675,676,681],{},[433,677,678],{},[53,679,680],{},"Mapping Resolved",[433,682,683],{},"Une correspondance est choisie.",[411,685,686,691],{},[433,687,688],{},[53,689,690],{},"Processing",[433,692,693],{},"Les documents sont en cours de création.",[411,695,696,701],{},[433,697,698],{},[53,699,700],{},"Completed",[433,702,703],{},"Le traitement est terminé.",[411,705,706,711],{},[433,707,708],{},[53,709,710],{},"Failed",[433,712,713,714,103],{},"Le traitement a échoué. Le motif est dans ",[53,715,716],{},"Error Message",[411,718,719,724],{},[433,720,721],{},[53,722,723],{},"Skipped",[433,725,726],{},"Aucune correspondance active ne reconnaît le nom du fichier au moment du traitement.",[14,728,729,730,732,733,736,737,740],{},"Sur un fichier ",[53,731,710],{},", corrigez la correspondance, puis cliquez sur ",[53,734,735],{},"Retry",". Le bouton ",[53,738,739],{},"Download raw file"," télécharge le fichier d'origine.",[14,742,743,744,747],{},"Pour traiter un fichier reçu par un autre moyen, cliquez sur ",[53,745,746],{},"Upload a document"," dans la liste, puis choisissez la connexion.",[21,749,751],{"id":750},"erreurs-fréquentes","Erreurs fréquentes",[405,753,754,764],{},[408,755,756],{},[411,757,758,761],{},[414,759,760],{},"Message",[414,762,763],{},"Solution",[428,765,766,779,793,806,819],{},[411,767,768,773],{},[433,769,770],{},[93,771,772],{},"Target DocType {X} must have a field named 'ddh_inbound_file'",[433,774,775,776,778],{},"Ajoutez le champ lien ",[93,777,95],{}," au type de document cible.",[411,780,781,786],{},[433,782,783],{},[93,784,785],{},"Match Field is required when Duplicate Handling is set to '{X}'",[433,787,219,788,790,791,103],{},[53,789,363],{},", ou choisissez ",[53,792,348],{},[411,794,795,800],{},[433,796,797],{},[93,798,799],{},"Bulk Insert is not compatible with 'Update existing' duplicate handling.",[433,801,802,803,805],{},"Décochez ",[53,804,636],{},", ou changez la gestion des doublons.",[411,807,808,813],{},[433,809,810],{},[93,811,812],{},"Connection {X} received an archive but has no S3 Storage configured.",[433,814,219,815,818],{},[53,816,817],{},"Cloud Storage"," sur la connexion.",[411,820,821,826],{},[433,822,823],{},[93,824,825],{},"Required field '{X}' has no value in source record.",[433,827,828,829,831],{},"Complétez le fichier, ou décochez ",[53,830,510],{}," sur la ligne.",[21,833,835],{"id":834},"conservation-des-fichiers","Conservation des fichiers",[14,837,838,839,842,843,846],{},"Cochez ",[53,840,841],{},"Auto-delete Archived Files"," sur la connexion pour supprimer les fichiers du dossier d'archive après ",[53,844,845],{},"Delete After (days)"," jours (30 par défaut). Le nettoyage a lieu une fois par jour.",[21,848,850],{"id":849},"envoyer-des-exports-planifiés","Envoyer des exports planifiés",[14,852,51,853,856,857,860,861,864],{},[53,854,855],{},"DDH Export"," produit un fichier à partir d'un rapport (",[53,858,859],{},"Report",") ou d'une requête Insights (",[53,862,863],{},"Insights Query","), puis le dépose sur une destination.",[148,866,867,872,885,903,925],{},[49,868,282,869,871],{},[53,870,855],{}," et créez un export.",[49,873,171,874,233,877,880,881,884],{},[53,875,876],{},"Source",[53,878,879],{},"Source Type"," et la source. ",[53,882,883],{},"Run As User"," fixe les droits utilisés pour lire les données.",[49,886,171,887,233,890,192,892,110,894,199,897,899,900,103],{},[53,888,889],{},"File",[53,891,303],{},[53,893,306],{},[53,895,896],{},"XLSX",[53,898,469],{},". Renseignez le ",[53,901,902],{},"File Name Template",[49,904,171,905,908,909,912,913,915,916,548,919,538,921,924],{},[53,906,907],{},"Destination",", choisissez ",[53,910,911],{},"SFTP"," (avec une ",[53,914,174],{}," et un ",[53,917,918],{},"Remote Directory",[53,920,817],{},[53,922,923],{},"Storage",").",[49,926,171,927,908,930,110,933,199,935,103],{},[53,928,929],{},"Schedule",[53,931,932],{},"Manual",[53,934,240],{},[53,936,248],{},[14,938,939,942,943,103],{},[53,940,941],{},"Skip If No Data"," n'envoie rien quand la source est vide. Chaque envoi crée une ",[53,944,945],{},"DDH Outbound File",{"title":947,"searchDepth":948,"depth":949,"links":950},"",1,2,[951,952,953,958,964,965,966,967],{"id":23,"depth":949,"text":24},{"id":75,"depth":949,"text":76},{"id":124,"depth":949,"text":125,"children":954},[955,957],{"id":145,"depth":956,"text":146},3,{"id":276,"depth":956,"text":277},{"id":398,"depth":949,"text":399,"children":959},[960,961,962,963],{"id":402,"depth":956,"text":403},{"id":496,"depth":956,"text":497},{"id":559,"depth":956,"text":560},{"id":576,"depth":956,"text":577},{"id":642,"depth":949,"text":643},{"id":750,"depth":949,"text":751},{"id":834,"depth":949,"text":835},{"id":849,"depth":949,"text":850},"Recevoir des fichiers EDI par SFTP et créer automatiquement les documents correspondants dans Dokos, et envoyer des exports planifiés : connexions, correspondances, suivi des fichiers.","md",{"icon":971,"reviewed":972,"last_verified":973,"sources":974},"i-lucide-arrow-down-to-line",true,"2026-10-31",[975,976,977,978,979,980,981,982,983,984,985,986,987,988],"dokos_data_hub@develop:dokos_data_hub\u002Fhooks.py","dokos_data_hub@develop:dokos_data_hub\u002Fdokos_data_hub\u002Fdoctype\u002Fddh_connection\u002Fddh_connection.json","dokos_data_hub@develop:dokos_data_hub\u002Fdokos_data_hub\u002Fdoctype\u002Fddh_connection\u002Fddh_connection.py","dokos_data_hub@develop:dokos_data_hub\u002Fdokos_data_hub\u002Fdoctype\u002Fddh_connection\u002Fddh_connection.js","dokos_data_hub@develop:dokos_data_hub\u002Fdokos_data_hub\u002Fdoctype\u002Fddh_mapping\u002Fddh_mapping.json","dokos_data_hub@develop:dokos_data_hub\u002Fdokos_data_hub\u002Fdoctype\u002Fddh_mapping\u002Fddh_mapping.py","dokos_data_hub@develop:dokos_data_hub\u002Fdokos_data_hub\u002Fdoctype\u002Fddh_field_mapping_row\u002Fddh_field_mapping_row.json","dokos_data_hub@develop:dokos_data_hub\u002Fdokos_data_hub\u002Fdoctype\u002Fddh_code_list_mapping_row\u002Fddh_code_list_mapping_row.json","dokos_data_hub@develop:dokos_data_hub\u002Fdokos_data_hub\u002Fdoctype\u002Fddh_inbound_file\u002Fddh_inbound_file.json","dokos_data_hub@develop:dokos_data_hub\u002Fdokos_data_hub\u002Fdoctype\u002Fddh_inbound_file\u002Fddh_inbound_file.py","dokos_data_hub@develop:dokos_data_hub\u002Fdokos_data_hub\u002Fdoctype\u002Fddh_s3_storage\u002Fddh_s3_storage.json","dokos_data_hub@develop:dokos_data_hub\u002Fworkspace_sidebar\u002Fdokos_data_hub.json","dokos_data_hub@develop:dokos_data_hub\u002Fdokos_data_hub\u002Fdoctype\u002Fddh_export\u002Fddh_export.json","erpnext@develop:erpnext\u002Fedi\u002Fdoctype\u002Fcode_list","\u002Fnext\u002Fapplications\u002Fdokos-data-hub",{"title":5,"description":968},"2.next\u002F2.applications\u002F3.dokos-data-hub","twZK9t_UNscoN1U-PzeIfIYEzE3OppN0MAkTf4Za01c",{},1793871720375]