Factur-X : la facture électronique

Depuis le 1er septembre 2026, toute entreprise française assujettie à la TVA doit savoir recevoir une facture électronique, et les grandes entreprises comme les entreprises de taille intermédiaire doivent émettre les leurs sous cette forme. Les plus petites suivent le 1er septembre 2027. Une facture qui n'est qu'une belle page cesse de compter comme une facture, et ne pas en émettre par voie électronique coûte 50 € par facture, jusqu'à 15 000 € par an.

Une facture électronique n'est pas un PDF envoyé par courriel. C'est la facture écrite sous forme d'entrées qu'une machine lit, dans l'une des trois formes que la réforme française accepte : deux d'entre elles sont des fichiers XML sans aucune page, et la troisième est Factur-X, un PDF qui contient ce XML à l'intérieur. Factur-X est la seule des trois qu'une personne peut encore ouvrir et lire, et c'est la plus employée en France.

Ce fichier en est une. Une personne l'ouvre et voit la page : la prestation, la taxe à vingt pour cent, cinq mille cent euros à payer. Le logiciel de comptabilité ouvre le même fichier, y trouve la facture jointe et lit ces mêmes montants sans que personne les retape. Les deux ne peuvent pas se contredire, puisqu'il n'y a qu'un seul document — et ce qu'il contient est imprimé plus bas sur cette page, ressorti du fichier même qui est proposé ici.

Ce qui va à l'intérieur est à vous de le choisir. Cette bibliothèque écrit n'importe lequel des cinq niveaux de détail que la norme définit : Minimum, les quelques entrées qu'un document doit avoir pour être comptabilisé ; Basic WL, la tête d'une facture sans ses lignes ; Basic, les lignes en plus ; EN 16931, tout ce que la norme européenne demande ; et Extended, tout cela encore, y compris ce que seuls certains métiers emploient. Elle écrit le fichier en PDF/A-3, la forme qu'une facture garde pour être classée des années durant, joint votre XML sous le nom que vous lui donnez, et déclare dans le document même que la pièce jointe est la facture et non un fichier qui l'accompagne. La même facture s'écrit depuis Rust, depuis Python, ou sous la forme de la description qu'un de vos programmes envoie à notre adresse.

Et ce qui va à l'intérieur doit correspondre à ce que le document en dit. Un fichier qui déclare une facture EN 16931 et qui en contient une au niveau Minimum n'est pas un fichier que nous écrivons : la facture est relue avant que le document ne sorte, et le document est refusé plutôt qu'envoyé en se contredisant. De même pour une facture jointe sous un nom auquel le document ne rattache aucun fichier, et pour un fichier qui n'est pas une facture du tout. Ce que la facture dit à l'intérieur est à vous et n'est pas jugé ici — mais les deux moitiés du fichier ne peuvent plus dire des choses différentes.

Ce que montre cet exemple

  • Une page : la prestation, la taxe à vingt pour cent et cinq mille cent euros à payer — et la même facture à l'intérieur du fichier, écrite dans le XML que lit un logiciel de comptabilité.
  • Le document disant ce qu'il contient : une facture, Factur-X version 1.0, le niveau de détail Minimum, jointe sous factur-x.xml et tenue pour la donnée propre du document — et n'importe lequel des cinq niveaux de détail, de Minimum à Extended, écrit de la même façon.
  • Remis à veraPDF, un programme gratuit qui n'a pris aucune part à son écriture, comme fichier bon pour une conservation longue — et la facture qu'il contient ressortie et comparée à ce qui était fourni.

Le code source complet

Rien n'est omis et rien n'est simplifié : c'est le programme exactement tel qu'il tourne, pour le développeur qui utilise cette bibliothèque. La troisième est la description elle-même : une simple liste de ce que la page doit dire, et c'est elle qu'on envoie au service.

Voir le code Rust Voir le code Python Voir le code JSON

Le document lui-même

Ouvrir le document en anglais Ouvrir le document en français

Factur-X : la facture électronique, première page

Optimisé, ce document pèse 23.0 ko — au moins 80 % de moins que ce qu'écriraient la plupart des générateurs de PDF

Le document est plus léger qu'avant, et chaque page a exactement le même aspect. Voir la ligne de ce document dans le tableau de tous les exemples.

La facture cachée dans ce fichier

Rien ici n'est écrit à côté de la facture : ceci est la pièce jointe elle-même, ses 1 977 octets, ressortie du fichier ci-dessus comme un logiciel de comptabilité la ressort. La facture l'attache sous le nom factur-x.xml, déclare que c'est une facture conforme à la version 1.0 de la spécification, à son niveau de détail MINIMUM, et l'annonce comme la donnée propre de la facture, et non comme un fichier qui voyage avec elle.

Le niveau de détail Minimum contient ce qui se lit ci-dessous : qui vend et sous quel numéro il est immatriculé, qui achète, le numéro de la facture et le jour où elle a été émise, la monnaie, et les trois totaux — hors taxe, la taxe elle-même, et le montant à payer. Les niveaux plus complets ajoutent les lignes de la facture, les adresses, les coordonnées de paiement et le reste.

<?xml version="1.0" encoding="UTF-8"?>
<rsm:CrossIndustryInvoice
    xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
    xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
  <rsm:ExchangedDocumentContext>
    <ram:GuidelineSpecifiedDocumentContextParameter>
      <ram:ID>urn:factur-x.eu:1p0:minimum</ram:ID>
    </ram:GuidelineSpecifiedDocumentContextParameter>
  </rsm:ExchangedDocumentContext>
  <rsm:ExchangedDocument>
    <ram:ID>1964413</ram:ID>
    <ram:TypeCode>380</ram:TypeCode>
    <ram:IssueDateTime>
      <udt:DateTimeString format="102">20260714</udt:DateTimeString>
    </ram:IssueDateTime>
  </rsm:ExchangedDocument>
  <rsm:SupplyChainTradeTransaction>
    <ram:ApplicableHeaderTradeAgreement>
      <ram:SellerTradeParty>
        <ram:Name>Olivier Pons</ram:Name>
        <ram:SpecifiedLegalOrganization>
          <ram:ID schemeID="0002">123456789</ram:ID>
        </ram:SpecifiedLegalOrganization>
        <ram:PostalTradeAddress>
          <ram:CountryID>FR</ram:CountryID>
        </ram:PostalTradeAddress>
      </ram:SellerTradeParty>
      <ram:BuyerTradeParty>
        <ram:Name>ACME Ltd</ram:Name>
      </ram:BuyerTradeParty>
    </ram:ApplicableHeaderTradeAgreement>
    <ram:ApplicableHeaderTradeDelivery/>
    <ram:ApplicableHeaderTradeSettlement>
      <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
      <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
        <ram:TaxBasisTotalAmount>4250.00</ram:TaxBasisTotalAmount>
        <ram:TaxTotalAmount currencyID="EUR">850.00</ram:TaxTotalAmount>
        <ram:GrandTotalAmount>5100.00</ram:GrandTotalAmount>
        <ram:DuePayableAmount>5100.00</ram:DuePayableAmount>
      </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
    </ram:ApplicableHeaderTradeSettlement>
  </rsm:SupplyChainTradeTransaction>
</rsm:CrossIndustryInvoice>

Des exemples voisins de celui-ci

Une feuille qui mesure ce qu'elle annonce

Trois règles — centimètres, pouces et points — sur une page qui dit à ce qui l'imprime de la sortir exactement à la taille où elle a été dessinée, et de ne rien proposer d'autre. Posez un mètre ruban sur la feuille imprimée et vous pourrez vérifier vous-même.

Un registre dont chaque page dit d'où elle vient

Deux séances reliées en un seul fichier. Chaque page a son propre relevé — ce qu'elle est, de quelle main elle a été écrite, le jour où elle l'a été — la photographie de la deuxième page en a un aussi, et chaque transcription est rattachée à la page qu'elle transcrit plutôt qu'au fichier entier.

Un fichier qui explique ses entrées

La référence d'un service d'archives, le département dont le document vient, la date jusqu'à laquelle il doit être gardé et sa classification, portés dans un fichier qu'une archive accepte encore. Aucune règle d'archivage ne sait ce qu'est une date de conservation, donc chaque entrée porte une description d'elle-même, et c'est cette description qui fait accepter à un contrôleur un fait que vous seul avez inventé.

Un bon de livraison qui connaît sa commande

Chaque ligne du bon contient la commande pour laquelle elle a été prélevée, le code article et l'étagère d'où elle vient, et n'imprime rien de tout cela. L'endroit où le chauffeur signe contient la tournée et la camionnette, et un autre, à côté du repère de pliage, ne contient rien que son propre emplacement.

Un document qui se lit à voix haute

Deux pages qui contiennent une copie d'elles-mêmes que personne ne voit : voici un titre, voici un tableau, et voici dans quel ordre les lire. Le logiciel qui lit le document à voix haute suit cette copie plutôt que l'ordre où les traits ont été dessinés, et saute le titre courant. Sur la page, rien ne change à l'œil.

Une liste dont les images parlent aussi

Une liste de pièces dont la première colonne est une image plutôt qu'un mot. Chaque image donne la phrase qu'on entend à sa place, si bien que rien de cette liste n'échappe à qui ne la voit pas. Sur la page, les images restent de simples images.

Tous les exemples, par sujet