Créez et lisez des factures Peppol BIS Billing 3.0 depuis .NET.
Peppol BIS Billing 3.0 est un CIUS fondé sur EN 16931 – techniquement la même structure UBL que XRechnung, distinguée par l'identifiant de spécification (BT-24). Avec FactoorSharp, les deux sortent du même modèle de facture, en C# et en VB.NET.
Cette page traite du niveau document : créer, lire, identifier. L'envoi sur le réseau Peppol relève d'un Access Point – ce que cela implique est détaillé plus bas.
FacturXInvoice.SetLicense("VOTRE-CLE-DE-LICENCE");
var invoice = FacturXInvoice.CreateInvoice(
"RE-2025-0042",
new DateTime(2025, 9, 3),
CurrencyCodes.EUR);
invoice.SetSeller("BikeTech GmbH", "10115", "Berlin", "Radweg 12", CountryCodes.DE);
invoice.SetBuyer("City Bikes AG", "20457", "Hamburg", "Hafenstraße 45", CountryCodes.DE);
// identifier la facture comme Peppol BIS Billing 3.0 au lieu d'une XRechnung (BT-24)
invoice.SpecificationIdentifier = SpecificationIdentifiers.PeppolBisBilling30;
// Peppol ne connaît pas la syntaxe CII : UBL est donc indiqué explicitement
invoice.Save("peppol-invoice.xml", ZUGFeRDVersion.Version25, Profile.XRechnung, ZUGFeRDFormats.UBL);
FacturXInvoice.SetLicense("VOTRE-CLE-DE-LICENCE")
Dim invoice = FacturXInvoice.CreateInvoice(
"RE-2025-0042",
New DateTime(2025, 9, 3),
CurrencyCodes.EUR)
invoice.SetSeller("BikeTech GmbH", "10115", "Berlin", "Radweg 12", CountryCodes.DE)
invoice.SetBuyer("City Bikes AG", "20457", "Hamburg", "Hafenstraße 45", CountryCodes.DE)
' identifier la facture comme Peppol BIS Billing 3.0 au lieu d'une XRechnung (BT-24)
invoice.SpecificationIdentifier = SpecificationIdentifiers.PeppolBisBilling30
' Peppol ne connaît pas la syntaxe CII : UBL est donc indiqué explicitement
invoice.Save("peppol-invoice.xml", ZUGFeRDVersion.Version25, Profile.XRechnung, ZUGFeRDFormats.UBL)
Peppol BIS Billing 3.0
Identifiant de spécification (BT-24), processus métier (BT-23) et sortie UBL – à partir du même modèle de facture que ZUGFeRD et XRechnung.
Identifiants de participant
Adresses électroniques du vendeur et de l'acheteur (BT-34 / BT-49) avec leur schéma – numéro de TVA, GLN et les autres codes EAS.
XRechnung et Peppol en parallèle
Un objet facture, trois formats cibles : XRechnung, XRechnung avec l'extension KoSIT et Peppol BIS Billing 3.0.
Factures entrantes
Lisez les factures UBL, reconnaissez le référentiel utilisé grâce à BT-24 et exploitez les identifiants de participant.
XRechnung ou Peppol BIS Billing 3.0 ? Même socle, identifiant différent
Les deux sont des CIUS (Core Invoice Usage Specification) fondés sur EN 16931 et utilisent
la même structure UBL. Ce qui les distingue est l'identifiant de spécification BT-24, présent
dans le XML sous la forme cbc:CustomizationID.
Concrètement : si vous produisez déjà des XRechnung, Peppol ne demande ni second modèle de facture ni seconde bibliothèque – seulement un autre identifiant à l'enregistrement.
BT-24 n'est pas une liste de codes fermée : les CIUS d'autres États membres peuvent également
être posés via SpecificationIdentifier sous forme d'URN.
// Le même modèle de facture, trois formats cibles – distingués par le seul BT-24 :
// 1. XRechnung (valeur par défaut du profil XRechnung, identifiant posé automatiquement)
invoice.Save("xrechnung.xml", ZUGFeRDVersion.Version25, Profile.XRechnung);
// 2. XRechnung avec l'extension KoSIT
invoice.SpecificationIdentifier = SpecificationIdentifiers.XRechnung30Extension;
invoice.Save("xrechnung-extension.xml", ZUGFeRDVersion.Version25, Profile.XRechnung);
// 3. Peppol BIS Billing 3.0
invoice.SpecificationIdentifier = SpecificationIdentifiers.PeppolBisBilling30;
invoice.Save("peppol-invoice.xml", ZUGFeRDVersion.Version25, Profile.XRechnung, ZUGFeRDFormats.UBL);
' Le même modèle de facture, trois formats cibles – distingués par le seul BT-24 :
' 1. XRechnung (valeur par défaut du profil XRechnung, identifiant posé automatiquement)
invoice.Save("xrechnung.xml", ZUGFeRDVersion.Version25, Profile.XRechnung)
' 2. XRechnung avec l'extension KoSIT
invoice.SpecificationIdentifier = SpecificationIdentifiers.XRechnung30Extension
invoice.Save("xrechnung-extension.xml", ZUGFeRDVersion.Version25, Profile.XRechnung)
' 3. Peppol BIS Billing 3.0
invoice.SpecificationIdentifier = SpecificationIdentifiers.PeppolBisBilling30
invoice.Save("peppol-invoice.xml", ZUGFeRDVersion.Version25, Profile.XRechnung, ZUGFeRDFormats.UBL)
Ce que Peppol exige en plus
L'identifiant de spécification ne suffit pas à transformer une XRechnung en facture Peppol valide. Peppol BIS Billing 3.0 exige deux éléments qui restent facultatifs dans une XRechnung simple.
Pour les XRechnung adressées aux acheteurs publics allemands, BT-10 contient généralement déjà le Leitweg-ID – cette exigence est donc le plus souvent satisfaite d'emblée.
// Identifiants de participant du vendeur et de l'acheteur (BT-34 / BT-49).
// On utilise couramment le numéro de TVA (schéma 9930 pour l'Allemagne) ou un GLN (schéma 0088).
invoice.SetSellerElectronicAddress("DE123456789", ElectronicAddressSchemeIdentifiers.GermanyVatNumber);
invoice.SetBuyerElectronicAddress("DE987654321", ElectronicAddressSchemeIdentifiers.GermanyVatNumber);
// Peppol BIS Billing 3.0 exige qu'au moins un de ces deux champs soit renseigné
invoice.ReferenceOrderNo = "PROJ-4711"; // référence de l'acheteur, BT-10
// ou bien :
invoice.OrderNo = "PO-2026-0042"; // référence de commande, BT-13
' Identifiants de participant du vendeur et de l'acheteur (BT-34 / BT-49).
' On utilise couramment le numéro de TVA (schéma 9930 pour l'Allemagne) ou un GLN (schéma 0088).
invoice.SetSellerElectronicAddress("DE123456789", ElectronicAddressSchemeIdentifiers.GermanyVatNumber)
invoice.SetBuyerElectronicAddress("DE987654321", ElectronicAddressSchemeIdentifiers.GermanyVatNumber)
' Peppol BIS Billing 3.0 exige qu'au moins un de ces deux champs soit renseigné
invoice.ReferenceOrderNo = "PROJ-4711" ' référence de l'acheteur, BT-10
' ou bien :
invoice.OrderNo = "PO-2026-0042" ' référence de commande, BT-13
Traiter les factures Peppol entrantes
La lecture fonctionne exactement comme pour ZUGFeRD et XRechnung. Le référentiel employé par l'émetteur figure dans BT-24 ; les identifiants de participant sont portés par les parties.
Les adresses électroniques ne se limitent pas au vendeur et à l'acheteur – le modèle de données en prévoit sur 19 termes métier, partout où une partie apparaît dans le document.
var invoice = FacturXInvoice.Load("peppol-invoice.xml");
// Quel référentiel a été utilisé ? BT-24 figure comme cbc:CustomizationID dans le document.
if (invoice.SpecificationIdentifier == SpecificationIdentifiers.PeppolBisBilling30)
{
var sellerEndpoint = invoice.Seller.ElectronicAddress; // BT-34
var buyerEndpoint = invoice.Buyer.ElectronicAddress; // BT-49
}
Dim invoice = FacturXInvoice.Load("peppol-invoice.xml")
' Quel référentiel a été utilisé ? BT-24 figure comme cbc:CustomizationID dans le document.
If invoice.SpecificationIdentifier = SpecificationIdentifiers.PeppolBisBilling30 Then
Dim sellerEndpoint = invoice.Seller.ElectronicAddress ' BT-34
Dim buyerEndpoint = invoice.Buyer.ElectronicAddress ' BT-49
End If
Là où FactoorSharp s'arrête : l'Access Point
Peppol comporte deux volets que l'on confond souvent : le document et le réseau. FactoorSharp couvre le premier – il crée, lit et identifie les documents Peppol BIS Billing 3.0. Le second, c'est-à-dire le transport sur le réseau Peppol via AS4, relève d'un Access Point.
Avec FactoorSharp
- Créer et lire du Peppol BIS Billing 3.0 (UBL)
- Poser et exploiter l'identifiant de spécification BT-24
- Processus métier BT-23 – posé automatiquement à l'enregistrement
- Identifiants de participant BT-34 / BT-49 avec leur schéma EAS
- Renseigner les champs obligatoires BT-10 / BT-13
- ZUGFeRD, Factur-X et XRechnung à partir du même modèle
Ce pour quoi un Access Point est nécessaire
- Envoi et réception sur le réseau Peppol (AS4)
- Enregistrement en tant que participant Peppol
- Recherche du destinataire via SMP et SML
- Certificats et accusés de réception
Cette répartition des rôles est courante et pratique : l'Access Point transporte ce que votre application produit. FactoorSharp garantit que le document transmis respecte les règles avant qu'il ne quitte la maison.
Cas d'usage typiques
- Facturer des partenaires ailleurs dans l'UE qui reçoivent via Peppol
- Alimenter un Access Point existant en documents
- Étendre une intégration XRechnung existante à Peppol
- Traiter les factures UBL entrantes issues du réseau Peppol
Adapté à
- Systèmes ERP et de gestion commerciale
- Plateformes e-commerce et SaaS
- Portails de facturation et middleware
- Applications métier .NET sur mesure
Ce que vous y gagnez
- Un seul modèle de facture pour ZUGFeRD, XRechnung et Peppol
- Aucune seconde bibliothèque pour UBL
- Une validation avant l'envoi plutôt qu'un rejet par le destinataire
- Une API .NET claire plutôt qu'une logique XML maison
Questions fréquentes
Non. FactoorSharp travaille au niveau du document : il crée, lit et valide des documents Peppol BIS Billing 3.0. L'envoi sur le réseau Peppol passe par AS4 et suppose un Access Point ainsi qu'un enregistrement en tant que participant Peppol.
En pratique, la répartition est nette : votre application produit le document avec FactoorSharp, l'Access Point le transporte.
Les deux sont des CIUS fondés sur EN 16931 et utilisent la même structure UBL. Ce qui les distingue est l'identifiant de spécification BT-24 (cbc:CustomizationID). XRechnung est la norme allemande pour les acheteurs publics, Peppol BIS Billing 3.0 le référentiel des échanges sur le réseau Peppol.
Peppol exige en outre des identifiants de participant pour les deux parties (BT-34 / BT-49) et au moins un des champs BT-10 ou BT-13.
ZUGFeRDFormats.UBL à l'enregistrement. Pour Peppol, c'est indispensable, car Peppol BIS Billing 3.0 ne connaît pas la syntaxe CII.ElectronicAddressSchemeIdentifiers ; les adresses électroniques ne se limitent pas au vendeur et à l'acheteur.Peppol BIS Billing 3.0 dans votre application .NET ?
Démarrez avec FactoorSharp en quelques minutes, ou consultez directement les licences et les tarifs.