Aller au contenu principal
SXN Labs
Open Source

einvoicing : Facturation électronique EN 16931 pour Ruby

Gem Ruby open source pour générer des factures Factur-X (PDF/A-3), CII D16B et UBL 2.1. Cible la réforme française de facturation électronique B2B de septembre 2026 et la norme EN 16931.

EN 16931 Factur-X PDF/A-3 CII D16B UBL 2.1 Ruby ≥ 3.2
C'est quoi ?

Qu'est-ce que einvoicing ?

🏛️ La réforme 2026

À partir de septembre 2026, toutes les factures B2B françaises devront être transmises électroniquement via une plateforme certifiée (PPF ou PDP). Les PDF non structurés et le papier ne seront plus acceptés.

💎 Une gem Ruby

einvoicing permet à n'importe quelle application Ruby ou Rails de générer des factures conformes, sans dépendre d'un SaaS tiers ni de traitements manuels.

📄 Factur-X PDF/A-3

Factur-X intègre un XML structuré (CII D16B) dans un PDF standard. L'humain lit le PDF, la machine lit le XML. Les deux dans un seul fichier. Validé par Mustang (PDF:valid XML:valid).

✅ Validé & testé

307 specs, 0 échec. Conformité PDF/A-3 confirmée par Mustang CLI. Schémas XSD officiels inclus. La CI GitHub valide chaque push avec Mustang. Le lot de test maison de 15 factures hostiles (multi-taux, autoliquidation, 500 lignes, taux DOM, devise étrangère) passe les contrôles XSD, conteneur et arithmétique EN 16931.

Ce qui est fait

Fonctionnalités actuelles

🏗️

Modèle de données facture

Invoice, Party, LineItem, Tax, avec montants en BigDecimal, avoirs et moyens de paiement (IBAN, BIC)

📋

Générateur XML CII D16B

XML Cross Industry Invoice conforme EN 16931, profil Factur-X EN16931

📋

Générateur XML UBL 2.1

Conforme Peppol BIS Billing 3.0, BuyerReference, PaymentMeans, TaxCurrencyCode

📎

Embedding Factur-X PDF/A-3

Intègre le XML CII dans n'importe quel PDF. Profil ICC sRGB inclus pour la conformité OutputIntent PDF/A-3

🔍

Validateurs B2B français

Luhn SIREN/SIRET, numéros de TVA des 27 États membres, IBAN ISO 13616, BIC, taux français métropole, DOM et Corse (2,1 %, 8,5 %, 1,75 %, 1,05 %, 13 %, 0,9 %)

🧾

Catégories de TVA EN 16931

S, Z, E, AE, K, G, O avec motif d'exonération (BT-120) et code VATEX (BT-121) : autoliquidation, intracommunautaire, export, franchise en base art. 293 B

Remises et frais au niveau document

BG-20 / BG-21 avec motif, code motif, base et pourcentage. La base taxable et la TVA de chaque catégorie sont ajustées (BR-CO-10 à BR-CO-13)

🏦

Acompte et retenue de garantie

TotalPrepaidAmount (BT-113) déduit du net à payer sans toucher à la base taxable ni à la TVA (BR-CO-16)

↩️

Avoirs (notes de crédit)

TypeCode 381, référence BG-3 lisible par machine vers la facture d'origine (BT-25/BT-26), validation du numéro d'origine

💱

Devise de comptabilisation de la TVA

TaxCurrencyCode (BT-6) et total de TVA dans la devise de comptabilisation (BT-111) en CII et UBL (BR-53)

🏛️

Profil Chorus Pro

Profil :chorus_pro pour la génération CII, avec schemeID SIRET au lieu du code ISO 6523 pour l'identification des parties

💳

Moyens de paiement

IBAN, BIC, code de type de paiement (virement SEPA, etc.) dans CII et UBL

🌍

Messages d'erreur i18n

Codes d'erreur symboliques { field:, error:, message: } avec traductions anglais et français

🛤️

Concern Rails Invoiceable

Concern ActiveRecord clé en main, validateur configurable, mapping to_einvoice

🔌

Client Chorus Pro / PPF

OAuth2 (client_credentials), deposit_flux pour l'upload de PDF Factur-X, suivi du statut des factures

🤖

CI GitHub avec validation Mustang

Chaque push lance rspec + génère une facture exemple + la valide avec Mustang CLI

🔍

Lookup SIRET via l'API gouvernementale française

Einvoicing::FR::SiretLookup.find(siren) et enrich!(party), sans authentification, stdlib uniquement

Validation Schematron Peppol BIS 3.0

Einvoicing::Validators::Peppol.validate_ubl(xml) : Saxon-HE + XSLT officiel Peppol, 0 erreur sur les factures valides

🧩

API de façade haut niveau

Einvoicing.xml, .validate, .embed, .process : interface en une ligne pour tout le pipeline

Démarrage rapide

Démarrage rapide

# Gemfile

gem "einvoicing"

# Construire une facture

invoice = Einvoicing::Invoice.new(

invoice_number: "FAC-2026-001",

issue_date: Date.today,

currency: "EUR",

seller: Einvoicing::Party.new(...),

buyer: Einvoicing::Party.new(...),

lines: [Einvoicing::LineItem.new(...)]

)


# Valider, générer le XML, intégrer dans le PDF

errors = Einvoicing::Validators::FR.validate(invoice)

xml = Einvoicing::Formats::CII.generate(invoice)

pdf_out = Einvoicing::Formats::FacturX.embed(pdf_in, xml)

Utilisée en production, pas seulement testée

Elle génère des factures Factur-X PDF/A-3 conformes chez nos clients, à chaque transaction.

Vous voulez l'intégrer dans votre app ?

Besoin d'aide pour intégrer la génération Factur-X dans votre application Ruby on Rails ? Contactez-nous.

Nous contacter

Besoin d'intégrer Factur-X dans votre SI Rails ?

On a déjà fait le boulot pour 5 clients. Discutons de votre cas en 30 minutes.

Prendre rendez-vous

Vérifier gratuitement un PDF Factur-X dans votre navigateur