La fonctionnalité de routage des e-invoices par unité économique via des hooks est disponible à partir de la version de développement de E-transactions.
Lorsqu'une e-invoice est générée par l'application E-transactions, elle peut désormais être interceptée par d'autres applications installées sur le site. Le routage se fait par unité économique : chaque application peut déterminer, en fonction de l'unité économique d'origine, vers quel point de traitement (endpoint, service externe, configuration) l'e-invoice doit être dirigée.
Ce mécanisme s'adresse aux situations suivantes :
hooks.py de votre applicationDans le fichier hooks.py de votre application (par exemple mon_app/hooks.py), déclarez un point d'extension pour le routage :
etransactions_einvoice_routing = "mon_app.utils.etransactions_routage.router_les_einvoices"
La fonction référencée par le hook doit accepter le doctype E-invoice en cours de génération et retourner le routage applicable. La fonction est appelée par le générateur E-transactions au moment de la construction de l'e-invoice.
def router_les_einvoices(doc, method=None):
"""Décide du point de traitement d'une e-invoice selon l'unité économique.
Args:
doc (Einvoice): Document E-invoice en cours de génération.
method (str, optional): Nom de la méthode appelante.
Returns:
dict | None: Configuration de routage ou None pour conserver le comportement par défaut.
"""
unite_economique = doc.company
if unite_economique == "Maison Verte SARL":
return {
"endpoint": "https://facturation.maison-verte.example/api/etransactions",
"config": "Paramètres de connexion Maison Verte",
}
if unite_economique == "Bureau Moderne":
return {
"endpoint": "https://compta.bureau-moderne.example/api/reception",
"config": "Paramètres de connexion Bureau Moderne",
}
return None
Le hook est volontairement non bloquant :
None pour une e-invoice donnée, E-transactions continue avec le routage standard pour cette unité économique.Le groupe Maison Verte SARL exploite deux sociétés distinctes dans Dokos : « Maison Verte SARL » (distribution) et « Bureau Moderne » (ensemblier). Chaque société doit transmettre ses e-invoices à un service de réception dédié.
groupe_maison_verte/hooks.py :etransactions_einvoice_routing = "groupe_maison_verte.etransactions.routage.router_par_unite"
groupe_maison_verte/etransactions/routage.py :def router_par_unite(doc, method=None):
unite = doc.company
mapping = {
"Maison Verte SARL": {
"endpoint": "https://facturation.maison-verte.example/api/etransactions",
"config": "Config MV",
},
"Bureau Moderne": {
"endpoint": "https://compta.bureau-moderne.example/api/reception",
"config": "Config BM",
},
}
return mapping.get(unite)
https://facturation.maison-verte.example/api/etransactions. Pour « Bureau Moderne », l'e-invoice est envoyée vers https://compta.bureau-moderne.example/api/reception.