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é

196 specs, 0 échecs. Conformité PDF/A-3 confirmée par Mustang CLI. Schémas XSD officiels inclus. La CI GitHub valide chaque push avec Mustang.

Ce qui est fait

Fonctionnalités actuelles

🏗️

Modèle de données facture

Invoice, Party, LineItem, Tax — montants en BigDecimal, avoirs, 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

Vérification Luhn SIREN/SIRET, format TVA intracommunautaire, IBAN ISO 13616, format BIC, taux de TVA

↩️

Avoirs (notes de crédit)

TypeCode 381, BillingReference vers la facture d'origine, validation du numéro de facture original

💳

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

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)

Feuille de route

Ce qu'il reste à faire

API PPF B2B (DGFiP)

L'API officielle du portail public de facturation B2B. Sandbox non disponible — la DGFiP la construit. Intégration dès l'ouverture (attendue T2/T3 2026).

En attente

Intégration PDP (Pennylane, autres)

Les PDP certifiés relaient les factures vers le réseau PPF. En attente d'un accès sandbox chez Pennylane. D'autres PDP suivront.

En attente
🔜

Transmission réseau Peppol

Support du réseau paneuropéen Peppol pour les factures UBL 2.1. La génération UBL est déjà faite — la couche de transmission arrive.

Bientôt

Validation Schematron Peppol BIS 3.0

Exécution des règles Schematron Peppol officielles sur les sorties UBL (JAR dédié), en plus de la validation XSD existante.

Fait

Lookup SIRET pour les acheteurs

Lookup automatique du SIRET via l'API Sirene INSEE à partir du SIREN, pour compléter le champ manquant sur les parties acheteuses.

Fait

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