v1.5 · vérifié par les validateurs officiels

Des factures Factur-X conformes,
en TypeScript, sans rien deviner.

Un SDK pur — zéro dépendance native, compatible edge et serverless — pour générer, valider, embarquer et lire des factures Factur-X au profil EN 16931, avec les règles françaises de la réforme. Chaque promesse est jugée par un validateur officiel, pas par nous.

pnpm add facturx-sdk
Lire le guide de la réforme

Jugé par les outils de référence, à chaque commit

  • XSDFactur-X EN 16931
  • CENschematron EN 16931 · CII
  • Factur-Xschematron profil 1.09
  • BR-FRschematron Flux 2 V1.3.0
  • veraPDFPDF/A-3b
  • ZUGFeRDcorpus KoSIT, 30 fichiers
0
tests, tous exécutés avant publication
0/26
règles françaises BR-FR — les 4 autres relèvent de l'annuaire
0
factures d'autres outils lues et ré-émises sans perte
0
dépendance native — edge, serverless, navigateur

Validateur en ligne · gratuit

Déposez une facture, obtenez le verdict des règles officielles.

Les trois schematrons — EN 16931, Factur-X et BR-FR — s'exécutent dans votre navigateur. Le fichier ne part sur aucun serveur, et chaque anomalie arrive avec son code de règle et l'endroit exact du document.

Ouvrir le validateur

PDF Factur-X ou XML CII · aucun compte, votre fichier ne bouge pas

Trois appels, et la conformité n'est plus votre problème.

Montants en entiers, totaux calculés puis vérifiés, erreurs typées avec le chemin exact du champ. Le SDK ne corrige jamais en silence.

import { cents, computeTotals, percent, quantity, unitPrice, assertValidInvoice } from 'facturx-sdk';

const draft = {
  id: 'F-2026-0001', issueDate: '2026-09-11', typeCode: '380', currency: 'EUR',
  operationCategory: 'services',                       // nature de l'opération (réforme)
  seller: { name: 'Atelier Exemple SAS', siren: '443061841', vatId: 'FR64443061841',
            address: { postCode: '75011', city: 'Paris', countryCode: 'FR' } },
  buyer:  { name: 'Client Démo SARL', siren: '732829320',
            electronicAddress: { value: '732829320', scheme: '0225' },   // routage plateforme
            address: { postCode: '69002', city: 'Lyon', countryCode: 'FR' } },
  delivery: { date: '2026-09-10' },
  lines: [{ id: '1', name: 'Conseil', quantity: quantity(20000), unitCode: 'DAY',
            unitPrice: unitPrice(8000000), netAmount: cents(160000),
            tax: { category: 'S', rate: percent('20') } }],
  paymentTerms: { dueDate: '2026-10-11', latePenaltyRate: percent('10'),
                  recoveryIndemnity: cents(4000), earlyPaymentDiscount: 'none' },
};

const invoice = assertValidInvoice({ ...draft, ...computeTotals(draft) });
// sinon : FacturXValidationError { issues: [{ code: 'BR-CO-15', path: 'totals.taxInclusiveAmount', … }] }

Conçu pour ne rien laisser au hasard.

Jamais d'arrondi silencieux

Centimes, quantités et prix en entiers, produits en bigint, arrondi commercial unique. Les totaux que vous fournissez sont vérifiés — un TTC qui ne colle pas est une erreur nommée, pas une valeur corrigée à votre place.

Erreurs typées, chemin exact

BR-CO-15 @ totals.taxInclusiveAmount. Codes officiels EN 16931 et AFNOR, prêts pour votre formulaire.

Règles françaises officielles

22 règles BR-FR de la norme XP Z12-012 : SIREN, cadre de facturation, notes légales, adresses 0225, TVA sur les débits.

Les trois syntaxes du socle

Factur-X, CII nu et UBL : tout profil, tout préfixe, pièces jointes, acomptes, avoirs. Une même facture lue en CII et en UBL rend le même objet. Éprouvé sur 30 factures d'autres outils, ré-émises conformes.

Statuts du cycle de vie

Les quatre statuts transmissibles au portail public — l'annexe officielle n'en connaît pas d'autres pour une facture —, les 40 motifs de refus normalisés, et le message CDV écrit et relu, validé contre le schéma CDAR d'UN/CEFACT.

La facture, dessinée

Depuis la 1.5, le SDK produit aussi la page lisible — en-tête, lignes, totaux, TVA, mentions légales, pagination. Celles-ci viennent de la même source que le XML : le lisible et le structuré ne peuvent pas diverger.

Une commande, pas un programme

npx facturx-sdk validate facture.pdf — le format est reconnu seul, chaque anomalie arrive avec son chemin, et le code de sortie permet de bloquer une facture dans une chaîne automatique.

Sécurité par défaut

Pas de DTD ni d'entité externe, profondeur et tailles bornées, aucune exécution de contenu. SECURITY.md

Edge, serverless, navigateur

Aucune API Node dans l'entrée principale ; pdf-lib uniquement dans facturx-sdk/pdf. Un handler Request → Response suffit pour Next.js, Hono ou Cloudflare Workers — l'exemple est dans le dépôt.

Où le SDK se place dans la réforme

Recevoir des factures structurées devient obligatoire pour toutes les entreprises, puis les émettre selon la taille, via une plateforme agréée. Le SDK est la brique format et conformité ; la plateforme, la brique transport.

  1. Réception pour toutes les entreprises · émission pour les grandes entreprises et ETI
  2. Émission pour les PME, TPE et micro-entreprises
XML CII EN 16931, PDF/A-3 Factur-X
Validation EN 16931 + règles FR, erreurs typées
Mentions de la réforme, acomptes, avoirs, pièces jointes
Lecture des trois syntaxes du socle : Factur-X, CII, UBL
Statuts du cycle de vie : règles officielles, message CDV écrit et relu
Rendu de la page lisible depuis le modèle, puis embarquement
Ligne de commande facturx : valider, résumer, extraire
Envoi à une plateforme agréée, e-reporting, annuaire
Conversion d'un PDF quelconque en PDF/A
Écriture UBL, autres profils Factur-X en écriture

Écrit noir sur blanc dans le guide de la réforme et le journal des 50 décisions.

Commencez par une facture.

Cinq exemples exécutés en intégration continue : émission depuis un modèle JSON, réception d'un dossier de PDF, handler HTTP, acomptes → facture définitive.

pnpm add facturx-sdk
Parcourir les exemples