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.
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.
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
# 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 contacterBesoin 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