Sur une facture, trois mécanismes produisent le montant final : les remises, le taux de change, et les taxes. Chacun a, dans Odoo, une limite que le commerce réel dépasse régulièrement.
Dix-huit modules communautaires lèvent ces limites — et l'un d'eux est déclaré obsolète par ses propres auteurs, ce qui mérite d'être dit.
Résumé
Cinq modules traitent les remises : jusqu'à trois remises successives par ligne, des remises globales sur la facture entière, une remise en montant fixe, l'affichage du montant remisé et du total avant remise sur le formulaire et le PDF, et le choix de la méthode d'arrondi des taxes par client ou par facture.
Cinq traitent les devises : une liste de prix sur la facture avec sa variante liée aux commandes, une devise par partenaire, le taux de change saisi manuellement en brouillon, le taux affiché sur le document, et les montants en devise d'origine dans la liste des factures.
Six traitent les taxes : l'interdiction de plus d'une TVA par ligne — sur la facture, la commande de vente et la commande d'achat —, la base de calcul affichée dans le pied de facture, des mentions légales portées par la taxe, et leur traduction. Un dernier module, de mise à jour des positions fiscales, est déclaré obsolète par ses auteurs.
L'essentiel
- Trois remises successives par ligne — la cascade du négoce.
- Des remises globales sur toute la facture, en plus des remises de ligne.
- Une remise en montant fixe, et le montant remisé affiché sur le PDF.
- Le taux de change saisi à la main tant que la facture est en brouillon.
- Une seule TVA par ligne, contrôlée jusque sur les commandes.
- La base de calcul visible dans le pied de facture, à côté du montant de taxe.
- Des mentions légales portées par la taxe, et traduisibles.
- Un module déclaré obsolète par ses auteurs : à ne pas installer.
Ce que ces modules ajoutent à l'instance
| Famille | Modules | Nombre |
|---|---|---|
| Remises | account_invoice_triple_discount, account_global_discount, account_invoice_fixed_discount, account_invoice_discount_display_amount, account_invoice_custom_rounding | 5 |
| Devises et tarifs | account_invoice_pricelist, account_invoice_pricelist_sale, account_invoice_currency_by_partner, account_manual_currency, account_invoice_show_currency_rate, account_invoice_tree_currency | 6 |
| Taxes | account_tax_one_vat, account_tax_one_vat_sale, account_tax_one_vat_purchase, account_tax_group_widget_base_amount, account_invoice_tax_note, account_tax_legal_notes_translate | 6 |
| Obsolète | account_invoice_fiscal_position_update | 1 |
Les menus ajoutés : Facturation ▸ Clients ▸ Pricelists et Facturation ▸ Configuration ▸ Gestion ▸ Remises globales.
Les remises : cascade, globale, fixe
La remise en cascade — « 10 % remise de base, moins 5 % volume, moins 2 % paiement comptant » — est la norme dans le négoce et l'industrie. Odoo ne connaît qu'une remise unique par ligne, ce qui oblige à calculer le taux composé à la main et à perdre le détail de la négociation.
account_invoice_triple_discountapplique jusqu'à trois remises successives sur chaque ligne de facture.account_global_discountapplique une ou plusieurs remises globales sur toute la facture — client ou fournisseur —, en plus des remises de ligne.account_invoice_fixed_discountpermet une remise en montant fixe plutôt qu'en pourcentage.account_invoice_discount_display_amountaffiche le montant total remisé et le total avant remise, sur le formulaire et sur le PDF.
Le dernier est celui que réclament les clients : voir ce qu'ils ont économisé. C'est aussi ce que vérifie un acheteur avant de valider une facture — et, à défaut, ce qu'il recalcule à la main en appelant.
account_invoice_custom_rounding traite une question voisine et technique : la méthode d'arrondi des taxes — par ligne ou globale — choisie par client ou par facture plutôt qu'imposée par la société. Certains clients et certains pays l'exigent.
Ces modules sont les équivalents comptables de ceux décrits côté vente dans remises, prix et tarifs : la remise doit exister jusque sur la facture.
Les devises : le taux qu'on subit, et celui qu'on choisit
| Module | Ce qu'il apporte |
|---|---|
account_manual_currency | Le taux de change saisi à la main tant que la facture est en brouillon |
account_invoice_show_currency_rate | Le taux appliqué affiché sur le document |
account_invoice_tree_currency | Des colonnes affichant les montants dans la devise de chaque facture, dans la liste |
account_invoice_currency_by_partner | Une devise par défaut sur le partenaire |
account_invoice_pricelist | Une liste de prix sur la facture, reprise du partenaire |
account_invoice_pricelist_sale | La liste de prix reprise de la commande de vente sur ses factures |
Le premier répond au cas de la couverture de change : l'entreprise a bloqué un taux avec sa banque, et appliquer le taux du jour fausse la marge. Le saisir à la main, en brouillon, est la seule façon de refléter la réalité.
Les deux modules de liste de prix sur la facture corrigent une incohérence : un tarif négocié s'applique au devis, puis la facture créée manuellement l'ignore. Les prix diffèrent entre le document que le client a accepté et celui qu'il reçoit.
La colonne en devise d'origine dans la liste, enfin, est le confort d'une entreprise multi-devises : voir des montants convertis empêche de reconnaître une facture dont on se souvient du montant.
Les taxes : une seule TVA, une base visible, des mentions
Une seule TVA par ligne
account_tax_one_vat impose, quand l'option est activée au niveau de la société, qu'une seule taxe marquée TVA puisse être sélectionnée sur une ligne. Deux extensions étendent ce contrôle aux commandes de vente et aux commandes d'achat.
Deux TVA sur une même ligne ne correspond à aucune réalité fiscale, et produit des déclarations fausses. C'est aussi, rappelons-le, l'un des contrôles qu'impose la norme européenne de facturation électronique — le blocage en amont évite un rejet en aval.
Ce contrôle rejoint ceux de la chaîne Factur-X et EN 16931.
La base de calcul
account_tax_group_widget_base_amount fait apparaître, dans le pied de facture, la base de calcul à côté du montant de chaque groupe de taxes. C'est l'information que vérifie un comptable et que réclame un contrôle : à quel montant hors taxes s'applique ce taux.
Les mentions légales
account_invoice_tax_notepermet d'attacher une mention légale ou informative à une taxe : elle apparaît sur la facture dès que la taxe est utilisée — autoliquidation, exonération, régime particulier.account_tax_legal_notes_translaterend ces mentions traduisibles, ce qui compte dès qu'on facture à l'étranger.
Ces deux modules remplacent une pratique courante et fragile : écrire la mention à la main dans les conditions de la facture, en espérant que personne ne l'oublie sur la suivante.
Un module à ne pas installer
account_invoice_fiscal_position_updateest déclaré obsolète et non maintenu par ses propres auteurs, dans sa documentation. Le relevé le signale, et nous le signalons à notre tour : un module non maintenu dans une chaîne fiscale est un risque sans contrepartie.
Le cas mérite d'être mentionné parce qu'il illustre une réalité du catalogue communautaire : un dépôt contient aussi des modules en fin de vie, conservés pour les migrations en cours. La présence d'un module dans une branche ne vaut pas recommandation.
C'est précisément pourquoi chaque fiche de ce corpus porte la version et la licence relevées sur le dépôt, et signale ce que la documentation du module dit de lui-même.
Limites connues
- Remises en cascade et remise globale se cumulent : décider laquelle le client doit voir, et ne pas empiler les deux sans règle.
- Le taux de change manuel n'est modifiable qu'en brouillon : après comptabilisation, il faut extourner.
- La liste de prix sur la facture suppose des tarifs tenus : sinon elle recalcule sur des règles périmées.
- Le contrôle « une seule TVA » peut bloquer des cas légitimes dans certains régimes : à vérifier avant d'activer au niveau société.
- Les mentions de taxe s'ajoutent à chaque usage : une facture multi-taxes peut accumuler plusieurs mentions.
account_invoice_fiscal_position_updateest obsolète selon ses auteurs : ne pas l'installer.
Identité technique
Les dix-huit modules viennent du dépôt OCA account-invoicing, branche 18.0, en licence AGPL-3 pour l'essentiel. Les remises globales s'appuient sur un socle du dépôt server-ux ; les listes de prix sur la facture dépendent de sale_management.
Les familles voisines : contrôler une facture, avoirs et compensations et remises, prix et tarifs.
Questions fréquentes
Peut-on appliquer plusieurs remises successives sur une ligne ?
Oui : account_invoice_triple_discount permet jusqu'à trois remises successives par ligne de facture — la cascade du négoce, « 10 % de base, moins 5 % volume, moins 2 % comptant ». Odoo n'en connaît qu'une, ce qui oblige à calculer le taux composé à la main et perd le détail de la négociation.
Peut-on figer un taux de change négocié sur une facture ?
Oui, avec account_manual_currency, tant que la facture est en brouillon. C'est le cas de la couverture de change : l'entreprise a bloqué un taux avec sa banque, et appliquer le taux du jour fausserait la marge. Après comptabilisation, il faut extourner.
Pourquoi interdire deux TVA sur une même ligne ?
Parce que cela ne correspond à aucune réalité fiscale et produit des déclarations fausses — c'est aussi l'un des contrôles qu'impose la norme européenne de facturation électronique. account_tax_one_vat l'empêche sur les factures, et deux extensions étendent le contrôle aux commandes de vente et d'achat.
Comment faire apparaître une mention légale liée à une taxe ?
account_invoice_tax_note attache une mention à la taxe elle-même : elle apparaît sur la facture dès que la taxe est utilisée — autoliquidation, exonération, régime particulier. account_tax_legal_notes_translate la rend traduisible. Cela remplace la mention écrite à la main, qu'on oublie sur la facture suivante.
Tous les modules d'un dépôt OCA sont-ils recommandables ?
Non. account_invoice_fiscal_position_update est déclaré obsolète et non maintenu par ses propres auteurs dans sa documentation. Un dépôt contient aussi des modules en fin de vie, conservés pour les migrations en cours : la présence d'un module dans une branche ne vaut pas recommandation.
Se faire accompagner
Les remises et les taxes sont les deux endroits où une facture devient contestable : un client qui ne reconnaît pas le montant remisé appelle, un contrôle qui ne retrouve pas la base de calcul demande des justificatifs.
Nous rendons donc d'abord lisible ce qui est calculé — montant remisé, base de taxe, taux de change appliqué — avant d'ajouter des mécanismes. Une facture qu'on peut expliquer au téléphone se paie plus vite. Voir les prestations d'Atalios Consulting ou demander un rappel.
Pour aller plus loin
- Contrôler une facture : total, doublons, échéances
- Remises, prix et tarifs côté vente
- Factur-X et EN 16931 : la chaîne de génération
En résumé
Trois remises successives au lieu d'une, le taux de change négocié saisi plutôt que subi, une seule TVA par ligne contrôlée jusque sur les commandes, et les mentions légales portées par la taxe. Avec un module signalé comme obsolète par ses propres auteurs — la présence dans un dépôt ne vaut pas recommandation. Parlons de vos factures.