Migration Sylius et Facturation Electronique a Bruxelles : Conformite Peppol pour les E-Commercants Belges
Si vous operez un e-commerce Sylius en Belgique, l'obligation de facturation electronique via Peppol est deja en vigueur depuis le 1er janvier 2026. La periode de tolerance est terminee depuis mars 2026. Chaque facture B2B non conforme vous expose a des amendes. Voici comment mettre votre Sylius en conformite.
L'obligation Peppol en Belgique : ou en est-on ?
La loi du 6 fevrier 2024 a rendu la facturation electronique structuree obligatoire pour toutes les entreprises assujetties a la TVA en Belgique, pour les transactions B2B domestiques :
- 1er janvier 2026 : obligation d'emettre et de recevoir des factures electroniques structurees
- Mars 2026 : fin de la periode de tolerance — les controles et sanctions sont actifs
- Format impose : Peppol BIS Billing 3.0, conforme a la norme europeenne EN 16931
- Transport : reseau Peppol via un Access Point certifie
Les sanctions en vigueur
| Infraction | Amende |
|---|---|
| Premiere infraction | 1 500 EUR |
| Recidive | 3 000 EUR |
| Infractions repetees | 5 000 EUR |
Ces amendes s'appliquent par infraction constatee. Un e-commerce qui emet 100 factures par mois sans passer par Peppol s'expose a des sanctions cumulees considerables.
Peppol dans Sylius : l'architecture technique
Le reseau Peppol fonctionne sur un modele a 4 coins (Four-Corner Model) :
Vendeur (votre Sylius)
|
v
Access Point Expediteur (votre AP: Billit, Hermes, CodaBox, Unifiedpost...)
|
v [Reseau Peppol - protocole AS4]
|
Access Point Destinataire (AP de votre client)
|
v
Acheteur (systeme de votre client)
Votre Sylius doit :
- Generer une facture UBL conforme EN 16931 (Peppol BIS Billing 3.0)
- Transmettre le document UBL a votre Access Point via son API
- Gerer les accuses de reception (Message Level Response, Invoice Response)
- Recevoir les factures entrantes de vos fournisseurs via le meme Access Point
Generation UBL EN 16931 dans Sylius 2.0
La generation d'une facture UBL conforme Peppol BIS Billing 3.0 requiert :
// src/Invoice/PeppolUblGenerator.php
use Tiime\EN16931\Invoice;
use Tiime\EN16931\BusinessTermsGroup\Seller;
use Tiime\EN16931\BusinessTermsGroup\Buyer;
use Tiime\EN16931\DataType\Reference\InvoiceDocumentReference;
class PeppolUblGenerator
{
public function generate(OrderInterface $order): string
{
$invoice = new Invoice(
new InvoiceDocumentReference($order->getNumber()),
new \DateTimeImmutable(),
InvoiceTypeCode::COMMERCIAL_INVOICE,
CurrencyCode::EUR
);
// Identification Peppol du vendeur
$seller = new Seller(
'Votre Societe',
new SellerPostalAddress(/* ... */),
[new SellerIdentifier('0208:0123456789', SchemeIdentifier::ENTERPRISE_NUMBER_BE)]
);
$seller->setVatIdentifier('BE0123456789');
$invoice->setSeller($seller);
// Identification Peppol de l'acheteur
$buyer = new Buyer(/* ... */);
$invoice->setBuyer($buyer);
// Lignes de facture
foreach ($order->getItems() as $item) {
$invoice->addInvoiceLine(/* ... */);
}
// Serialisation UBL
return (new UblWriter())->write($invoice);
}
}
Transmission via Access Point
// src/Invoice/PeppolTransmitter.php
class PeppolTransmitter
{
public function __construct(
private AccessPointClientInterface $apClient,
private string $senderPeppolId, // ex: 0208:0123456789
) {}
public function send(string $ublXml, string $recipientPeppolId): TransmissionReceipt
{
// Chaque Access Point a sa propre API
// Exemple avec un AP generique :
return $this->apClient->sendDocument(
documentType: 'urn:oasis:names:specification:ubl:schema:xsd:Invoice-2',
processId: 'urn:fdc:peppol.eu:2017:poacc:billing:01:1.0',
senderId: $this->senderPeppolId,
recipientId: $recipientPeppolId,
document: $ublXml
);
}
}
Le piege belge : l'identification Peppol
Pour emettre et recevoir sur Peppol, votre entreprise doit etre enregistree avec un Peppol Participant Identifier. En Belgique, c'est generalement base sur votre numero d'entreprise BCE :
- Scheme : 0208 (numero d'entreprise belge)
- Identifiant : votre numero BCE sans les points (ex: 0123456789)
L'enregistrement se fait aupres de votre Access Point. Si vos clients n'ont pas encore d'identifiant Peppol, ils doivent aussi s'enregistrer. En pratique, les grands donneurs d'ordre belges (Colruyt, Delhaize, Proximus, etc.) sont deja sur Peppol depuis 2024.
Cas particulier : e-commerce belge vendant en France
Si votre Sylius opere depuis la Belgique mais vend aussi a des clients francais B2B, vous devez gerer deux canaux :
- Clients belges : facturation via Peppol (UBL)
- Clients francais : facturation via PDP francaise (Factur-X ou UBL)
L'avantage est que les deux systemes utilisent la norme EN 16931. La structure de donnees est identique, seul le canal de transmission differe. Dans Sylius 2.0, on peut implementer un routeur de facturation qui determine automatiquement le canal en fonction du pays du client :
// src/Invoice/InvoiceRouter.php
class InvoiceRouter
{
public function route(InvoiceInterface $invoice): ChannelType
{
$country = $invoice->getBuyerAddress()->getCountryCode();
return match($country) {
'BE' => ChannelType::PEPPOL,
'FR' => ChannelType::PDP_FRANCE,
'DE' => ChannelType::ZUGFERD, // Factur-X = ZUGFeRD
'LU' => ChannelType::PEPPOL, // Luxembourg aussi sur Peppol
default => ChannelType::PDF_CLASSIQUE, // hors EU
};
}
}
Pourquoi Sylius 1.x bloque la conformite Peppol
Les memes raisons que pour la France :
- Les librairies PHP de generation UBL EN 16931 requierent PHP 8.2+ et Symfony 6.4+
- Sylius 1.x sur Symfony 5.4 et PHP 8.1 ne peut pas les utiliser proprement
- Le SyliusInvoicingPlugin 1.x genere uniquement des PDF, pas du UBL
- Le support securite de Sylius 1.14 s'arrete en decembre 2026
La migration vers Sylius 2.0 est un prerequis technique a la conformite Peppol.
Mon intervention a Bruxelles et en Wallonie
J'interviens regulierement en Belgique pour des missions Sylius. Mon approche :
- Audit gratuit via Sylius Upgrade Analyzer — rapport detaille en 48h
- Migration Sylius 2.0 avec les 41 auto-fixers + revue manuelle des points complexes
- Integration Peppol : generation UBL, connexion Access Point, tests d'interoperabilite
- Si ventes en France : ajout du canal PDP francais (Factur-X)
- Mise en production sur site a Bruxelles pour les phases critiques
Je travaille avec les Access Points belges les plus repandus : Billit, Hermes, CodaBox, Unifiedpost. Le choix de l'AP depend de votre volume de factures, de vos integrations existantes (comptabilite, ERP), et de votre budget.
L'obligation est en vigueur. Chaque jour sans conformite Peppol est un jour d'exposition aux sanctions. Contactez-moi pour un audit gratuit de votre projet Sylius et une estimation de la mise en conformite.
