[{"data":1,"prerenderedAt":227},["ShallowReactive",2],{"\u002Fv5\u002Fdodock\u002Fdeveloppeurs\u002Fextensions-declarations-intra-communautaires":3,"section:\u002Fv5\u002Fdodock\u002Fdeveloppeurs\u002Fextensions-declarations-intra-communautaires":226},{"id":4,"title":5,"body":6,"description":214,"extension":215,"meta":216,"navigation":217,"path":222,"seo":223,"stem":224,"__hash__":225},"docs\u002F1.v5\u002F3.dodock\u002F10.developpeurs\u002Fextensions-declarations-intra-communautaires.md","Étendre les lignes des déclarations intra-communautaires (hook france_intra_eu_line_extensions)",{"type":7,"value":8,"toc":208},"minimark",[9,14,19,32,55,58,62,113,151,155,184,188,204],[10,11,13],"h1",{"id":12},"étendre-les-lignes-des-déclarations-intra-communautaires","Étendre les lignes des déclarations intra-communautaires",[15,16,18],"h2",{"id":17},"principe","Principe",[20,21,22,23,27,28,31],"p",{},"Une application ajoute des colonnes aux lignes de calcul des déclarations intra-communautaires en déclarant des fonctions dans le hook ",[24,25,26],"code",{},"france_intra_eu_line_extensions"," de son ",[24,29,30],{},"hooks.py"," :",[33,34,39],"pre",{"className":35,"code":36,"language":37,"meta":38,"style":38},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# hooks.py de l'application\nfrance_intra_eu_line_extensions = [\"mon_app.regional.intra_eu.entrepreneur\"]\n","python","",[24,40,41,49],{"__ignoreMap":38},[42,43,46],"span",{"class":44,"line":45},"line",1,[42,47,48],{},"# hooks.py de l'application\n",[42,50,52],{"class":44,"line":51},2,[42,53,54],{},"france_intra_eu_line_extensions = [\"mon_app.regional.intra_eu.entrepreneur\"]\n",[20,56,57],{},"Chaque entrée est le chemin (dotted path) d'une fonction appelée à chaque préparation de la déclaration, avec la déclaration et ses lignes de calcul.",[15,59,61],{"id":60},"signature-de-lextension","Signature de l'extension",[33,63,65],{"className":35,"code":64,"language":37,"meta":38,"style":38},"def entrepreneur(declaration, computation_lines):\n    return {\n        \"columns\": [{\"fieldname\": \"entrepreneur\", \"label\": \"Entrepreneur\"}],\n        \"values\": {\n            row.source_row: {\"entrepreneur\": f\"ENT {row.source_name}\"}\n            for row in computation_lines\n        },\n    }\n",[24,66,67,72,77,83,89,95,101,107],{"__ignoreMap":38},[42,68,69],{"class":44,"line":45},[42,70,71],{},"def entrepreneur(declaration, computation_lines):\n",[42,73,74],{"class":44,"line":51},[42,75,76],{},"    return {\n",[42,78,80],{"class":44,"line":79},3,[42,81,82],{},"        \"columns\": [{\"fieldname\": \"entrepreneur\", \"label\": \"Entrepreneur\"}],\n",[42,84,86],{"class":44,"line":85},4,[42,87,88],{},"        \"values\": {\n",[42,90,92],{"class":44,"line":91},5,[42,93,94],{},"            row.source_row: {\"entrepreneur\": f\"ENT {row.source_name}\"}\n",[42,96,98],{"class":44,"line":97},6,[42,99,100],{},"            for row in computation_lines\n",[42,102,104],{"class":44,"line":103},7,[42,105,106],{},"        },\n",[42,108,110],{"class":44,"line":109},8,[42,111,112],{},"    }\n",[114,115,116,138],"ul",{},[117,118,119,122,123,126,127,130,131,134,135,137],"li",{},[24,120,121],{},"columns"," : liste de dictionnaires ",[24,124,125],{},"{\"fieldname\", \"label\"}",". Si ",[24,128,129],{},"label"," est omis, le ",[24,132,133],{},"fieldname"," est utilisé comme libellé. La première extension qui déclare un ",[24,136,133],{}," le conserve ; les doublons des extensions suivantes sont ignorés.",[117,139,140,143,144,147,148,150],{},[24,141,142],{},"values"," : dictionnaire indexé par le ",[24,145,146],{},"source_row"," de la ligne de calcul, chaque entrée étant un dictionnaire ",[24,149,133],{}," → valeur. Seules les valeurs correspondant aux colonnes déclarées sont conservées.",[15,152,154],{"id":153},"stockage-et-cycle-de-vie","Stockage et cycle de vie",[114,156,157,164,174,177],{},[117,158,159,160,163],{},"Les colonnes sont stockées dans le champ ",[24,161,162],{},"extension_columns"," (JSON, masqué) de la déclaration « France Intra-EU Declaration ».",[117,165,166,167,170,171,173],{},"Les valeurs sont stockées dans le champ ",[24,168,169],{},"extension_values"," (JSON) de chaque ligne de calcul (« France Intra-EU Computation Line »), associées par ",[24,172,146],{},".",[117,175,176],{},"Les extensions sont exécutées à chaque préparation de la déclaration. Une nouvelle préparation sans l'extension supprime ses colonnes et ses valeurs.",[117,178,179,180],{},"Une extension qui lève une exception est journalisée (log d'erreur « Intra-EU line extension failed: ",[181,182,183],"chemin",{}," », avec la déclaration en référence) et la préparation se poursuit sans elle : la déclaration reste celle de Dokos, les colonnes supplémentaires appartiennent à l'application.",[15,185,187],{"id":186},"où-les-colonnes-apparaissent","Où les colonnes apparaissent",[114,189,190,196,201],{},[117,191,192,193,173],{},"Dans le formulaire de la déclaration, sous la ligne de calcul concernée, sous la forme ",[24,194,195],{},"Label : valeur",[117,197,198,199,173],{},"Dans l'état de contrôle, en note de la facture, à la suite de la note de retard ou de régularisation, sous la forme ",[24,200,195],{},[117,202,203],{},"Dans l'export des lignes de calcul (CSV ou Excel), en colonnes supplémentaires ajoutées en fin de fichier.",[205,206,207],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":38,"searchDepth":45,"depth":51,"links":209},[210,211,212,213],{"id":17,"depth":51,"text":18},{"id":60,"depth":51,"text":61},{"id":153,"depth":51,"text":154},{"id":186,"depth":51,"text":187},"Le hook france_intra_eu_line_extensions permet à une application d'ajouter des colonnes aux lignes de calcul des déclarations intra-communautaires françaises (DES, état récapitulatif TVA) ; ces colonnes apparaissent dans le formulaire, dans l'état de contrôle et dans l'export des lignes.","md",{"reviewed":217,"last_verified":218,"sources":219},true,"2026-11-04",[220,221],"dokos@v5-dev:erpnext\u002Fregional\u002Ffrance\u002Fintra_eu\u002Fextensions.py","dokos@v5-dev:erpnext\u002Fhooks.py","\u002Fv5\u002Fdodock\u002Fdeveloppeurs\u002Fextensions-declarations-intra-communautaires",{"title":5,"description":214},"1.v5\u002F3.dodock\u002F10.developpeurs\u002Fextensions-declarations-intra-communautaires","VsIFhghWxR2GWYpBzzX4Nvhss_A9QfqYMHmofenlr8A",{},1793871961883]