Akretion est l'auteur d'une librairie Python pour Factur-X dont l'une des fonctionnalités est de générer une facture Factur-X à partir d'une facture PDF traditionnelle et d'un fichier XML au format CrossIndustryInvoice. Ainsi, les logiciels écrits en Python - Odoo par exemple - peuvent générer une facture Factur-X très facilement en une seule ligne de code. En suivant cet exemple, des librairies Factur-X sont apparues dans d'autres langages de programmation, notamment PHP, Java, etc...
Mais certains langages de programmation ne disposent pas encore d'une librairie native pour Factur-X. Devant ce constat et dans le but d'aider à l'adoption de la norme Factur-X par tous les éditeurs de logiciels, Akretion a développé un webservice permettant, en une seule requête HTTP, de générer une facture PDF Factur-X à partir d'une facture PDF traditionnelle et d'un fichier XML. Ainsi, les logiciels développés dans des langages de programmation pour lesquels il n'existe pas encore de librairie pour Factur-X disposent maintenant d'une solution simple et efficace pour générer des factures Factur-X. Mauvaise nouvelle : à partir de maintenant, il n'y a plus d'excuse pour ne pas générer des factures au format Factur-X !
Concrètement, il faut envoyer une requête HTTP POST de type multipart/form-data contenant la facture PDF, le fichier XML et les éventuelles pièces jointes additionnelles. La réponse contient la facture PDF au format Factur-X. Tous les profils de la norme Factur-X sont supportés. Ce webservice est fourni directement avec notre librairie Python factur-x (cf fichier bin/facturx-webservice) ; il utilise la librairie Flask.
Ce webservice a été déployé à des fins de test sur un serveur du FNFE-MPE. Pour l'essayer, vous pouvez utiliser l'outil curl qui est un client HTTP en ligne de commande. Voici un exemple d'utilisation du webservice :
curl -X POST -F 'pdf=@facture_pdfa.pdf' -F 'xml=@factur-x.xml' -F 'attachment1=@pv_recette.pdf' -o facture_fx.pdf https://ws.fnfe-mpe.org/generate_facturx
Vous trouverez ci-dessous un schéma représentant le déploiement de ce webservice dans un environnement de production :