[{"data":1,"prerenderedAt":530},["ShallowReactive",2],{"\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Frapprochement-bancaire-types-de-pieces":3,"section:\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Frapprochement-bancaire-types-de-pieces":529},{"id":4,"title":5,"body":6,"description":518,"extension":519,"meta":520,"navigation":103,"path":525,"seo":526,"stem":527,"__hash__":528},"docs\u002F2.next\u002F3.dodock\u002F10.developpeurs\u002Frapprochement-bancaire-types-de-pieces.md","Rapprochement bancaire — Types de pièces extensibles",{"type":7,"value":8,"toc":508},"minimark",[9,13,18,40,44,55,286,290,293,344,348,393,397,400,415,418,422,426,429,452,455,459,486,490,504],[10,11,5],"h1",{"id":12},"rapprochement-bancaire-types-de-pièces-extensibles",[14,15,17],"h2",{"id":16},"principe","Principe",[19,20,21,22,26,27,30,31,34,35,39],"p",{},"Le dialogue « Créer une pièce » de l'outil de rapprochement bancaire propose deux types natifs : ",[23,24,25],"strong",{},"Saisie de paiement"," et ",[23,28,29],{},"Écriture au journal",". Il lit ses types dans un ",[23,32,33],{},"registre"," JavaScript : ",[36,37,38],"code",{},"erpnext.accounts.bank_reconciliation.voucher_types",". Une application peut y inscrire ses propres types de pièces, avec leurs champs de dialogue, leurs conditions d'affichage et leur logique de création côté serveur.",[14,41,43],{"id":42},"enregistrer-un-type-de-pièce","Enregistrer un type de pièce",[19,45,46,47,50,51,54],{},"Inscrivez votre type dans le registre ",[23,48,49],{},"avant"," le chargement du bundle de l'outil de rapprochement (typiquement via un hook ",[36,52,53],{},"boot"," ou un script global de votre application) :",[56,57,62],"pre",{"className":58,"code":59,"language":60,"meta":61,"style":61},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","frappe.provide(\"erpnext.accounts.bank_reconciliation.voucher_types\");\n\nerpnext.accounts.bank_reconciliation.voucher_types[\"Loan Repayment\"] = {\n  is_applicable: (bank_transaction) => bank_transaction.deposit > 0,\n  get_fields: (dialog_manager) => [\n    \u002F\u002F champs de dialogue affichés pour ce type\n  ],\n  create: (dialog_manager, values, allow_edit) =>\n    frappe.xcall(\"lending.api.create_loan_repayment\", { ... }),\n};\n","js","",[36,63,64,98,105,142,182,202,209,217,245,280],{"__ignoreMap":61},[65,66,69,73,77,81,84,87,90,92,95],"span",{"class":67,"line":68},"line",1,[65,70,72],{"class":71},"sTEyZ","frappe",[65,74,76],{"class":75},"sMK4o",".",[65,78,80],{"class":79},"s2Zo4","provide",[65,82,83],{"class":71},"(",[65,85,86],{"class":75},"\"",[65,88,38],{"class":89},"sfazB",[65,91,86],{"class":75},[65,93,94],{"class":71},")",[65,96,97],{"class":75},";\n",[65,99,101],{"class":67,"line":100},2,[65,102,104],{"emptyLinePlaceholder":103},true,"\n",[65,106,108,111,113,116,118,121,123,126,128,131,133,136,139],{"class":67,"line":107},3,[65,109,110],{"class":71},"erpnext",[65,112,76],{"class":75},[65,114,115],{"class":71},"accounts",[65,117,76],{"class":75},[65,119,120],{"class":71},"bank_reconciliation",[65,122,76],{"class":75},[65,124,125],{"class":71},"voucher_types[",[65,127,86],{"class":75},[65,129,130],{"class":89},"Loan Repayment",[65,132,86],{"class":75},[65,134,135],{"class":71},"] ",[65,137,138],{"class":75},"=",[65,140,141],{"class":75}," {\n",[65,143,145,148,151,154,158,160,164,167,169,172,175,179],{"class":67,"line":144},4,[65,146,147],{"class":79},"  is_applicable",[65,149,150],{"class":75},":",[65,152,153],{"class":75}," (",[65,155,157],{"class":156},"sHdIc","bank_transaction",[65,159,94],{"class":75},[65,161,163],{"class":162},"spNyl"," =>",[65,165,166],{"class":71}," bank_transaction",[65,168,76],{"class":75},[65,170,171],{"class":71},"deposit ",[65,173,174],{"class":75},">",[65,176,178],{"class":177},"sbssI"," 0",[65,180,181],{"class":75},",\n",[65,183,185,188,190,192,195,197,199],{"class":67,"line":184},5,[65,186,187],{"class":79},"  get_fields",[65,189,150],{"class":75},[65,191,153],{"class":75},[65,193,194],{"class":156},"dialog_manager",[65,196,94],{"class":75},[65,198,163],{"class":162},[65,200,201],{"class":71}," [\n",[65,203,205],{"class":67,"line":204},6,[65,206,208],{"class":207},"sHwdD","    \u002F\u002F champs de dialogue affichés pour ce type\n",[65,210,212,215],{"class":67,"line":211},7,[65,213,214],{"class":71},"  ]",[65,216,181],{"class":75},[65,218,220,223,225,227,229,232,235,237,240,242],{"class":67,"line":219},8,[65,221,222],{"class":79},"  create",[65,224,150],{"class":75},[65,226,153],{"class":75},[65,228,194],{"class":156},[65,230,231],{"class":75},",",[65,233,234],{"class":156}," values",[65,236,231],{"class":75},[65,238,239],{"class":156}," allow_edit",[65,241,94],{"class":75},[65,243,244],{"class":162}," =>\n",[65,246,248,251,253,256,258,260,263,265,267,270,273,276,278],{"class":67,"line":247},9,[65,249,250],{"class":71},"    frappe",[65,252,76],{"class":75},[65,254,255],{"class":79},"xcall",[65,257,83],{"class":71},[65,259,86],{"class":75},[65,261,262],{"class":89},"lending.api.create_loan_repayment",[65,264,86],{"class":75},[65,266,231],{"class":75},[65,268,269],{"class":75}," {",[65,271,272],{"class":75}," ...",[65,274,275],{"class":75}," }",[65,277,94],{"class":71},[65,279,181],{"class":75},[65,281,283],{"class":67,"line":282},10,[65,284,285],{"class":75},"};\n",[14,287,289],{"id":288},"contrat-de-chaque-entrée","Contrat de chaque entrée",[19,291,292],{},"Une entrée du registre peut définir trois fonctions :",[294,295,296,308,328],"ul",{},[297,298,299,304,305,307],"li",{},[23,300,301],{},[36,302,303],{},"get_fields(dialog_manager)"," — renvoie un tableau de champs de dialogue supplémentaires affichés sous le sélecteur « Type de document ». Utilisez ",[36,306,194],{}," pour accéder au contexte (compte bancaire, transaction sélectionnée) si nécessaire.",[297,309,310,315,316,319,320,323,324,327],{},[23,311,312],{},[36,313,314],{},"is_applicable(bank_transaction)"," — renvoie ",[36,317,318],{},"true","\u002F",[36,321,322],{},"false"," pour masquer ou afficher ce type selon la transaction. Par exemple, ne proposer « Remboursement de prêt » que pour les dépôts (",[36,325,326],{},"bank_transaction.deposit > 0",").",[297,329,330,335,336,339,340,343],{},[23,331,332],{},[36,333,334],{},"create(dialog_manager, values, allow_edit)"," — effectue l'appel serveur et renvoie ",[23,337,338],{},"la transaction bancaire réconciliée",". Si ",[36,341,342],{},"allow_edit"," est vrai (chemin « Éditer en pleine page »), renvoyez le brouillon pour que l'utilisateur puisse le compléter avant soumission ; la réconciliation est alors déclenchée automatiquement après soumission.",[14,345,347],{"id":346},"comportement-de-linterface","Comportement de l'interface",[294,349,350,361,367,374],{},[297,351,352,353,356,357,360],{},"Le menu déroulant ",[23,354,355],{},"Type de document"," est rafraîchi pour chaque transaction : les types non applicables via ",[36,358,359],{},"is_applicable"," sont masqués.",[297,362,363,364,366],{},"Les types enregistrés par d'autres applications ",[23,365,49],{}," le chargement de l'outil sont conservés, et les types natifs (Saisie de paiement, Écriture au journal) restent toujours en premier dans la liste.",[297,368,369,370,373],{},"Les champs supplémentaires définis par ",[36,371,372],{},"get_fields"," sont injectés avant le bloc « Détails de la transaction ».",[297,375,376,377,380,381,384,385,388,389,392],{},"Le bouton ",[23,378,379],{},"Valider"," et l'action ",[23,382,383],{},"Éditer en pleine page"," utilisent la même fonction ",[36,386,387],{},"create_voucher(values, allow_edit)",", qui appelle ",[36,390,391],{},"create"," du type sélectionné.",[14,394,396],{"id":395},"réconciliation-après-soumission-pleine-page","Réconciliation après soumission (pleine page)",[19,398,399],{},"Si un type de pièce propose l'édition en pleine page, l'utilisateur peut corriger le brouillon avant de le soumettre. À la soumission :",[401,402,403,406,409],"ol",{},[297,404,405],{},"Le document est enregistré comme brouillon.",[297,407,408],{},"L'utilisateur est redirigé vers le formulaire complet.",[297,410,411,412,76],{},"À la soumission, la transaction bancaire est automatiquement réconciliée avec ce document — ",[23,413,414],{},"une seule fois",[19,416,417],{},"Ce comportement s'applique aux types natifs et aux types inscrits avant le chargement de l'outil : Dodock ajoute le suivi de soumission aux DocTypes présents dans le registre à ce moment.",[419,420,421],"mermaid",{},"\nsequenceDiagram\n  participant U as Comptable\n  participant D as Dialogue de rapprochement\n  participant S as Serveur\n  U->>D: Sélectionne une transaction\n  D->>D: Filtre les types via is_applicable\n  U->>D: Choisit « Remboursement de prêt »\n  D->>U: Affiche les champs spécifiques (get_fields)\n  U->>D: Remplit les champs\n  alt Soumission directe\n    U->>D: Clique « Soumettre »\n    D->>S: create(values, allow_edit=false)\n    S-->>D: Transaction bancaire réconciliée\n    D->>U: Mise à jour des cartes + fermeture\n  else Édition pleine page\n    U->>D: Clique « Éditer en pleine page »\n    D->>S: create(values, allow_edit=true)\n    S-->>D: Document brouillon\n    D->>U: Ouvre le formulaire\n    U->>S: Soumet le document\n    S->>S: Réconcilie la transaction bancaire\n  end\n",[14,423,425],{"id":424},"cas-dusage-remboursement-de-prêt","Cas d'usage — Remboursement de prêt",[19,427,428],{},"Exemple fictif : une application de prêts inscrit un type « Loan Repayment » :",[294,430,431,439,444],{},[297,432,433,435,436,438],{},[36,434,359],{}," : ",[36,437,318],{}," uniquement pour les dépôts (remboursements reçus).",[297,440,441,443],{},[36,442,372],{}," : ajoute un champ « prêt » obligatoire pour rattacher le remboursement au contrat.",[297,445,446,448,449,451],{},[36,447,391],{}," : appelle une méthode serveur de l'application (ici ",[36,450,262],{},") qui crée l'écriture de remboursement et renvoie la transaction réconciliée.",[19,453,454],{},"Le comptable voit « Loan Repayment » dans le sélecteur de type de pièce pour les transactions entrantes et peut créer le remboursement sans quitter le rapprochement bancaire.",[14,456,458],{"id":457},"points-de-vigilance","Points de vigilance",[294,460,461,467,470,476],{},[297,462,463,464,466],{},"Le type doit être inscrit ",[23,465,49],{}," le chargement du bundle de l'outil de rapprochement. Privilégiez un hook déclenché tôt dans le cycle de vie de l'application cliente.",[297,468,469],{},"Le nom du type dans le registre est la clé utilisée pour l'affichage dans le sélecteur. Évitez les doublons avec les types natifs.",[297,471,472,473,475],{},"Si ",[36,474,359],{}," n'est pas défini, le type est proposé pour toutes les transactions.",[297,477,478,479,481,482,485],{},"La fonction ",[36,480,391],{}," doit ",[23,483,484],{},"toujours"," renvoyer la transaction bancaire réconciliée (chemin direct) ou le brouillon (pleine page) pour que l'outil puisse mettre à jour l'interface.",[14,487,489],{"id":488},"référence","Référence",[294,491,492,498],{},[297,493,494,495],{},"Fichier concerné : ",[36,496,497],{},"erpnext\u002Fpublic\u002Fjs\u002Fbank_reconciliation_tool\u002Fdialog_manager.js",[297,499,500,501],{},"Tests : ",[36,502,503],{},"erpnext\u002Ftests\u002Fjs\u002Fbank_reconciliation_dialog_manager.test.mjs",[505,506,507],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}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":61,"searchDepth":68,"depth":100,"links":509},[510,511,512,513,514,515,516,517],{"id":16,"depth":100,"text":17},{"id":42,"depth":100,"text":43},{"id":288,"depth":100,"text":289},{"id":346,"depth":100,"text":347},{"id":395,"depth":100,"text":396},{"id":424,"depth":100,"text":425},{"id":457,"depth":100,"text":458},{"id":488,"depth":100,"text":489},"Ajouter vos propres types de pièces au dialogue Créer une pièce de l'outil de rapprochement bancaire grâce à un registre JavaScript.","md",{"reviewed":103,"last_verified":521,"sources":522},"2026-11-04",[523,524],"dokos@develop:erpnext\u002Fpublic\u002Fjs\u002Fbank_reconciliation_tool\u002Fdialog_manager.js","dokos@develop:erpnext\u002Ftests\u002Fjs\u002Fbank_reconciliation_dialog_manager.test.mjs","\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Frapprochement-bancaire-types-de-pieces",{"title":5,"description":518},"2.next\u002F3.dodock\u002F10.developpeurs\u002Frapprochement-bancaire-types-de-pieces","BgIoLr9r-8l0pcb6jVMImWMhKdtFl0varHyn__eMziA",{},1793871749907]