Premier module libre de facturation électronique pour Odoo

Posté par  (site web personnel) . Édité par Benoît Sibaud, Xavier Teyssier, Nÿco et palm123. Modéré par ZeroHeure. Licence CC By‑SA.
41
26
mar.
2016
Bureautique

Certains d'entre-vous ont peut-être créé leur société et ont alors été confrontés aux joies de la comptabilité… Cette dépêche les intéressera particulièrement ! Le développement de ce premier module libre de facturation électronique pour Odoo est le fruit d'une histoire amusante que je vais vous raconter.

Logo Odoo

NdM. : pour mémoire, Odoo est un progiciel libre de gestion intégré, anciennement connu sous le nom d'OpenERP.

Sommaire

Le problème

Un week-end de septembre 2015, quelques jours avant la date limite de dépôt de la liasse fiscale (la déclaration fiscale qui sert de base au calcul de l'impôt sur les sociétés) de notre SS2L Akretion, un de mes associés, développeur Odoo lui aussi, termine sa comptabilité de l'année écoulée pour pouvoir éditer son bilan. « Terminer » n'est pas le bon terme, je devrai plutôt dire « commence sa comptabilité », en tout cas en ce qui concerne la saisie des factures fournisseur !

Saisir ses factures fournisseur dans son logiciel comptable, même s'il s'appelle Odoo, n'est pas une partie de plaisir, et il a donc attendu la dernière minute pour s'y mettre. Il doit notamment saisir de nombreux billets de train achetés sur Capitaine Train dont il a l'historique dans sa boite mail avec le justificatif de paiement sous forme de fichier PDF en pièce jointe.

La solution

Et comme tout bon développeur, il est un peu paresseux. Plutôt que de se mettre à la tâche, il tente de développer un script pour automatiser ce travail ingrat et rébarbatif. Après quelques heures de travail, le script est au point : il prend les reçus PDF de CapitaineTrain, extrait le texte du PDF, récupère les informations pertinentes (date, descriptif du trajet, montant) via des expressions régulières et créé la facture fournisseur dans Odoo !

Si cela marche pour les billets de train, cela doit aussi pouvoir marcher pour les factures de téléphone mobile, d'accès Internet, de loyer, etc. Autant de factures qu'il faut saisir chaque mois dans son logiciel comptable ! L'idée est lancée.

Le produit

Elle aboutit au développement du module Odoo account_invoice_import annoncé comme un cadeau de Noël à la communauté Odoo et disponible sur le projet account-invoicing de l'Odoo Community Association (OCA). Ce module utilise la bibliothèque Python invoice2data qui contient des templates pour de nombreux fournisseurs, dont beaucoup de fournisseurs français.

Dès janvier 2016, j'équipe nos clients utilisateurs d'Odoo de ce nouveau module et je leur montre comment ils peuvent importer leurs factures de téléphone mobile, d'électricité, leurs billets de train… Ainsi que les factures de notre SS2L !

Un mois après le déploiement de ce nouveau module, ma société met à jour son serveur Odoo vers une nouvelle version et adopte un nouveau moteur de rapport pour les factures. La mise en page de la facture est complètement revue, et les expressions régulières destinées à extraire les informations de la facture PDF pour créer la facture fournisseur dans Odoo ne fonctionnent plus !

Un obstacle

Après à peine un mois d'utilisation, on atteint déjà les limites du système : tout changement dans la mise en page de la facture du fournisseur impose de mettre à jour le template d'import. Pour éviter cet écueil, il faut passer à la facturation électronique !

Et me voilà reparti à coder. Dans la seconde partie de la dépêche vous apprendrez certains principes de la facturation électronique, en particulier le format ZUGFeRD, et comment il est possible de générer et d'importer des factures électroniques ZUGFeRD dans Odoo.

Aujourd'hui, quand une entreprise reçoit une facture PDF par courriel, le comptable va visualiser la facture avec son logiciel de lecture PDF préféré et, ensuite, il va saisir manuellement la facture dans le logiciel comptable de l’entreprise pour générer les écritures comptables dans le journal d’achats. Pour éviter cela, il faut automatiser l’import des factures fournisseur dans le logiciel comptable, ce qui nécessite d’avoir des données structurées sur la facture afin de pouvoir l’importer de façon fiable dans le logiciel comptable de l’entreprise.

Le format PDF est parfait pour visualiser ou imprimer une facture, mais il ne fournit pas d’informations structurées sur la facture. Pour cela, mieux vaut utiliser un fichier XML. Il existe deux standards internationaux pour les factures XML :

La solution serait-elle d’envoyer des factures sous forme de fichiers XML par courriel ? Peut-être pas. En effet, si votre entreprise est équipée d’un logiciel comptable moderne capable de générer des factures sous forme de fichiers XML, comment être sûr que vos clients possèdent un logiciel comptable moderne capable de lire de telles factures XML ? Et si votre client ne peut pas lire vos factures, il y a fort à parier que vous ne serez jamais payé ! C’est pour résoudre ce problème que le standard ZUGFeRD a été inventé. Ce standard fournit une solution intelligente et pragmatique à ce problème : il définit une façon d’intégrer un fichier XML à l’intérieur de la facture PDF. Avec l’arrivée de la norme PDF/A-3 en 2012, il est devenu possible d’intégrer un ou plusieurs fichiers de n'importe quel format à l’intérieur d’un document PDF (sous Acrobat Reader, il faut cliquer sur l’icône représentant un trombone pour lister les fichiers intégrés dans le document PDF ; si vous connaissez des lecteurs PDF libres capables de lister les fichiers intégrés, signalez-les en commentaire !). Ainsi, une facture au format ZUGFeRD est simplement une facture PDF avec un fichier XML embarqué au format Cross Industry Invoice (CII).

L’Allemagne est l’auteur du standard ZUGFeRD et elle incite ses entreprises à envoyer leurs factures dans ce format. À partir du 1er janvier 2017, les grandes entreprises fournisseur de l’État français auront l’obligation d’envoyer à l’administration des factures électroniques, et cette obligation sera étendue progressivement à toutes les entreprises jusqu’au 1er janvier 2020. En France, le FNFE-MPE (Forum National de la Facture Electronique et des Marchés Publics Electroniques, qui n'a pas encore de site web !) coordonne la standardisation des factures électroniques et adopte la même approche technique que le standard ZUGFeRD : un fichier XML standardisé embarqué dans une facture PDF. Ce communiqué de presse annonce que la France et l’Allemagne travaillent ensemble pour adopter un standard commun pour les factures électroniques.

Certains pays, comme par exemple la Belgique, ont choisi une autre approche : le format belge de facture électronique e-fff spécifie que la facture est un fichier XML au format UBL à l'intérieur duquel on intègre le fichier PDF. C'est exactement l'inverse de l'approche franco-allemande ! Si vous n'avez pas de logiciel comptable moderne capable de lire la facture XML, vous ne pourrez même pas accéder au fichier PDF pour voir la facture, c'est la double peine ! Une histoire belge en quelque sorte… Aux Pays-Bas, la norme UBL a également été choisie ; la pratique semble être d'envoyer à la fois le fichier XML et le fichier PDF côte à côte.

J'ai développé le support de la norme ZUGFeRD à la fois pour la génération des factures client (module account_invoice_zugferd) et pour l’import des factures fournisseur (module account_invoice_import_zugferd) dans Odoo. Ces développements sont publiés sous la licence AGPL dans le projet account-invoicing de l’Odoo Community Association (OCA) sur Github. Ce screencast en anglais (22 minutes, format OGV) offre une démonstration de l’utilisation d’Odoo à la fois pour l'import de factures PDF normales, mais aussi pour la génération de factures électroniques ZUGFeRD et leur import dans Odoo. J'ai également développé un module d'import de factures XML au format UBL (module account_invoice_import_ubl).

Ces modules sont la première implémentation libre de la norme ZUGFeRD en Python. C'est aussi à ma connaissance la première implémentation libre de la norme ZUGFeRD dans un ERP opensource. Le module utilise la bibliothèque Python PyPDF2 pour l'ajout du fichier XML à l'intérieur du fichier PDF et pour toutes les autres contraintes imposées sur le fichier PDF par la norme ZUGFeRD. C'est une alternative au module Odoo propriétaire itis_account_invoice_zugferd vendu au prix de 800 € sur l'App Store d'Odoo et qui nécessite Java pour la génération de la facture ZUGFeRD.

Les factures électroniques sont amenées à remplacer les factures papier, tout comme le courrier électronique est en passe de remplacer le courrier postal. Selon le gouvernement français, la généralisation de la facturation électronique devrait générer des économies de 335 millions d’euros pour les entreprises françaises et de 375 millions d'euros pour l’État (cf. cet article).

Aller plus loin

  • # Merci !

    Posté par  . Évalué à 6.

    Encore une fois, je suis impressionné par le boulot fait sur Odoo par la société Akretion.
    Pour ma part je me suis déjà servi de plusieurs de vos modules pour divers projets (dernièrement ooor et pos_customer_display et peut-être d'autres sans savoir que c'est de vous !).
    Merci pour tout ça et bonne continuation à vous.

  • # Lecteurs PDF capables de voir les documents intégrés

    Posté par  . Évalué à 9.

    Okular (le lecteur de PDF de KDE) informe de la présence d’un fichier intégré à un PDF via une petite notification et permet d’y accéder via cette dernière, ou en passant par Fichier → Fichiers intégrés.

    Écrit en Bépo selon l’orthographe de 1990

  • # Les factures dans le "low cost"

    Posté par  (site web personnel) . Évalué à 2.

    il prend les reçus PDF de CapitaineTrain, extrait le texte du PDF, récupère les informations pertinentes (date, descriptif du trajet, montant) via des expressions régulières et créé la facture fournisseur dans Odoo ! (…) Si cela marche pour les billets de train, cela doit aussi pouvoir marcher pour les factures de téléphone mobile, d'accès Internet, de loyer, etc. Autant de factures qu'il faut saisir chaque mois dans son logiciel comptable ! L'idée est lancée.

    Il a de la chance d'avoir des PDF. Parfois, même pas de PDF! (genre AirBnb)
    du coup, me voila à "imprimer en PDF" des mails venant de grosses boites, alors pour que ce soit standardisé…
    La gestion manuelle des factures, c'est juste chiant, des fois on se demande si on est en 2016.

    En tous cas sympa de voir qu'il y a une forme d'avance, même si ce passage fait peur (je prend le cas belge pour de l'humour tellement c'est délirant) :

    Ce communiqué de presse annonce que la France et l’Allemagne travaillent ensemble pour adopter un standard commun pour les factures électroniques.

    Le problème est qu'on construit un truc qu'on appelle "Union Européenne", dans un truc qu'on appelle "Monde".
    C'est vraiment dommage d'encore une fois ne pas arriver à se mettre d'accord sur une norme internationale (après, quand je vois qu'on n'est même pas encore foutus de se mettre d'accord entre US et EU pour une bête date de changement d'heure… Je me dis que la connerie dans les volontés de faire "sa" norme n'est pas encore tuée).

  • # Akretion

    Posté par  . Évalué à 3.

    J'ai une question concernant l'entreprise Akretion : quel est le business model ? Vous programmez des modules à la demande pour des clients, c'est ça ? Et vous leur facturez les modules, que vous mettez en open source ?

    Je suis curieux de savoir pour comprendre comment faire à la fois de l'open source et suffisamment de chiffre d'affaires pour payer les factures. Il existe différents business model dans le monde de l'open source, j'aimerais juste savoir quel est le votre. Merci.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.