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