← Documentation / Guides
Envoi et réception de factures via Peppol
Connectez le point d'accès Peppol de votre entreprise (Recommand, Storecove ou e-invoice.be) à Nordlet, envoyez des factures et des avoirs via Peppol, suivez leur acheminement et transformez les factures électroniques reçues en factures d'achat.
Peppol est le réseau européen d'échange de factures électroniques structurées entre les entreprises et les organismes publics. Chaque facture transite du point d'accès de l'expéditeur vers celui du destinataire. Nordlet génère des factures et des avoirs au format Peppol BIS Billing 3.0, puis les envoie et les reçoit par l'intermédiaire du compte de point d'accès de votre entreprise.
Peppol fixe les règles régissant l'échange de documents entre points d'accès, mais pas la manière dont votre logiciel communique avec votre propre point d'accès, car chaque fournisseur dispose de sa propre API. Nordlet est compatible avec les fournisseurs suivants :
| Fournisseur | Envoi | Suivi d'acheminement | Réception |
|---|---|---|---|
| Recommand | oui | par webhook et sur demande | oui |
| Storecove | oui | par webhook uniquement | oui |
| e-invoice.be | oui | par webhook et sur demande | oui |
En l'absence de point d'accès, Nordlet génère tout de même le fichier Peppol de chaque facture et avoir émis afin que vous puissiez le télécharger et le transmettre par un autre moyen, mais aucun envoi ni aucune réception n'est effectué.
Prérequis
- Un compte auprès de l'un des fournisseurs ci-dessus, votre entreprise y étant enregistrée sur le réseau Peppol. Chaque fournisseur facture ses services selon sa propre grille tarifaire.
- Dans Nordlet, le numéro de TVA ou le numéro d'immatriculation de l'entreprise, ou son identifiant Peppol (Compte -> Entreprises -> Identifiant Peppol). Chaque client destinataire doit également disposer de l'une de ces informations sur sa fiche partenaire.
Connexion de votre point d'accès
Ouvrez Compte -> Conformité -> UE -> Point d'accès Peppol, sélectionnez votre fournisseur dans Fournisseur, renseignez les champs correspondants comme décrit ci-dessous et enregistrez. Laissez le champ URL de base de l'API vide, sauf si votre fournisseur vous a communiqué une adresse différente. Une fois enregistré, la page affiche l'URL de webhook de votre entreprise : https://api.nordlet.com/v1/peppol/webhooks/{provider}/{companyId}, où {provider} correspond à recommand, storecove ou e-invoice-be et {companyId} à l'identifiant de votre entreprise. Chaque entreprise sur Nordlet possède sa propre URL de webhook.
Nordlet n'accepte un appel de webhook que s'il est prouvé qu'il connaît votre secret de webhook, de sorte qu'un appel ne provenant pas du compte de votre point d'accès est rejeté. Nordlet ne contacte les adresses Internet publiques que lorsqu'il appelle votre point d'accès.
Recommand
- Dans Recommand, ouvrez votre entreprise et copiez son identifiant d'entreprise dans Identifiant de compte au point d'accès.
- Dans Recommand, créez une clé d'API et copiez la clé ainsi que son secret dans Clé d'API et Secret d'API.
- Créez une longue chaîne de caractères aléatoire que vous et Recommand serez les seuls à connaître, puis saisissez-la dans Secret du webhook. Enregistrez.
- Dans Recommand, créez un webhook pour votre entreprise en renseignant l'URL de webhook affichée par Nordlet et le même secret de webhook.
Recommand signe chaque appel de webhook à l'aide de ce secret.
Storecove
- Dans Storecove, créez une entité juridique pour votre entreprise, configurée pour l'envoi et la réception, et copiez son identifiant dans Identifiant de compte au point d'accès.
- Dans Storecove, sous Clés d'API, créez une clé d'API et copiez-la dans Clé d'API. Laissez le champ Secret d'API vide.
- Créez une longue chaîne de caractères aléatoire et saisissez-la dans Secret du webhook. Enregistrez.
- Dans Storecove, configurez un webhook de type push avec l'URL de webhook affichée par Nordlet, protégée par une authentification HTTP de base : n'importe quel nom d'utilisateur, et le secret du webhook comme mot de passe.
Storecove ne propose pas d'appel pour consulter l'état d'un document envoyé. Par conséquent, avec Storecove, le statut d'acheminement provient exclusivement de son webhook et la page de facture ne comporte pas de bouton Vérifier le statut Peppol. Un compte bac à sable (sandbox) Storecove effectue les envois sur le réseau de test Peppol, tandis que les clés d'API de production sont délivrées par le support de Storecove.
e-invoice.be
- Dans l'application e-invoice.be, sous Paramètres de l'API, copiez la clé d'API de votre entreprise dans Clé d'API. Laissez les champs Identifiant de compte au point d'accès et Secret d'API vides. Enregistrez.
- Créez un webhook via l'API d'e-invoice.be (
POST https://api.e-invoice.be/api/webhooks/) en utilisant l'URL de webhook affichée par Nordlet et les événementsdocument.received,document.sentetdocument.sent.failed. - Copiez le
secretrenvoyé par l'API pour ce nouveau webhook dans Secret du webhook dans Nordlet, puis enregistrez à nouveau.
e-invoice.be signe chaque appel de webhook à l'aide de ce secret. Une entreprise en mode bac à sable (sandbox) sur e-invoice.be envoie les documents par e-mail au lieu de les transmettre via le réseau Peppol.
Envoi d'une facture
- Émettez la facture ou l'avoir.
- Vérifiez que le client dispose d'un identifiant Peppol, d'un numéro de TVA ou d'un numéro d'immatriculation sur sa fiche partenaire.
- Sur la page de la facture, dans la section Acheminement, cliquez sur Envoyer via Peppol et confirmez. La section d'acheminement s'affiche pour les factures émises qui ne sont pas encore réglées, et le bouton n'apparaît que si le point d'accès est connecté.
Nordlet génère le fichier Peppol et le transmet à votre point d'accès. La page de la facture affiche alors une section Acheminement Peppol :
| Statut | Signification |
|---|---|
| pending | Transmis au point d'accès ; le point d'accès du client ne l'a pas encore confirmé |
| delivered | Le point d'accès du client a confirmé la réception de la facture |
| rejected | Le client a refusé la facture ; le motif est affiché sous le statut |
| failed | La facture n'a pas pu être acheminée ; le motif est affiché sous le statut lorsque le point d'accès en fournit un |
Le statut se met à jour automatiquement dès que le point d'accès signale un changement via son webhook. Le bouton Vérifier le statut Peppol interroge immédiatement Recommand ou e-invoice.be pour obtenir le statut actuel. Dans le cas d'e-invoice.be, il lit également la réponse du client à la facture, un refus (code de réponse RE) s'affichant comme rejeté. Une facture rejetée ou en échec peut être envoyée à nouveau après correction de la cause. Si le point d'accès refuse net une facture, par exemple parce que le client n'est pas enregistré sur Peppol, Nordlet affiche le motif et la facture demeure non envoyée.
Le bouton XML Peppol situé en haut de la page de facture permet de télécharger le même fichier Peppol sans l'envoyer.
Pour une livraison intracommunautaire, la date d'émission fait office de date de livraison et le pays du client de pays de livraison, conformément aux exigences des règles Peppol.
Réception de factures
Lorsque le point d'accès signale la réception d'un document par le biais de son webhook, Nordlet télécharge le fichier Peppol depuis le point d'accès. Les factures et avoirs reçus par votre entreprise apparaissent dans Achats -> Capture de documents, marqués comme reçus via Peppol depuis l'identifiant Peppol de l'expéditeur. Nordlet analyse lui-même le fichier Peppol, de sorte qu'aucune unité de reconnaissance de documents n'est consommée lors de la réception.
- Ouvrez le document reçu.
- Vérifiez le fournisseur, les dates et les lignes ; sélectionnez le fournisseur parmi vos partenaires ou créez-le.
- Cliquez sur Enregistrer comme brouillon. Nordlet crée un projet de facture d'achat, ou un projet d'avoir d'achat s'il s'agit d'un avoir reçu, auquel le fichier Peppol d'origine est joint. Enregistrez-le comme n'importe quelle autre facture d'achat.
Les lignes d'une facture d'achat Nordlet ne peuvent pas être négatives. Les remises et frais applicables à l'ensemble du document ainsi que les lignes négatives sont répartis sur les lignes soumises au même taux de TVA. Un montant qu'aucune ligne de son taux de TVA ne peut absorber, tel qu'un article retourné dont le taux de TVA ne correspond à aucune autre ligne de la facture, est présenté dans un second tableau : Lignes d'avoir pour une facture reçue, ou Lignes de facture pour un avoir reçu. Ces lignes sont enregistrées sous la forme d'un second document pour le même fournisseur : un avoir d'achat venant en déduction de la nouvelle facture, dont le numéro est suivi du suffixe "-CR", ou une facture d'achat dont le numéro est suivi du suffixe "-INV". Les deux documents combinés correspondent aux totaux du document reçu.
Vérification de l'inscription d'un client sur Peppol
Une requête POST /v1/peppol/participants/lookup accompagnée d'un paramètre partnerId ou participantId ("<schéma>:
Automatisation via l'API
| Tâche | Appel |
|---|---|
| Connecter le point d'accès | POST /v1/declarations/configs/update avec system: "peppol" et le paramètre config contenant provider (recommand, storecove ou e-invoice-be), accountId, apiKey, apiSecret, webhookSecret et éventuellement apiBaseUrl |
| Recevoir le webhook du point d'accès | POST /v1/peppol/webhooks/{provider}/{companyId}, appelé par le point d'accès |
| Télécharger le fichier Peppol | POST /v1/sales/invoices/peppol-xml |
| Envoyer | POST /v1/sales/invoices/peppol-send (code 422 en l'absence de point d'accès) |
| Lire le statut d'acheminement | POST /v1/sales/invoices/peppol-status (code 422 avec Storecove) ; les factures comportent les champs peppolMessageId, peppolStatus, peppolDetail, peppolSentAt et peppolCheckedAt |
| Rechercher les documents reçus | POST /v1/capture/documents/list ; les documents reçus possèdent les attributs provider: "peppol" et senderId |
| Transformer un document en facture d'achat | POST /v1/capture/documents/confirm, avec oppositeLines pour le second document |
Événements de webhook : sale_invoice.peppol_sent, sale_invoice.peppol_delivered, sale_invoice.peppol_rejected, sale_invoice.peppol_failed et document_capture.peppol_received. Consultez la section Conventions de l'API pour en savoir plus sur la gestion des erreurs, l'idempotence et les webhooks.