← Documentación / Guías
Envío y recepción de facturas con Peppol
Conecte el propio punto de acceso Peppol de su empresa (Recommand, Storecove o e-invoice.be) a Nordlet, envíe facturas y notas de crédito a través de Peppol, realice un seguimiento de su entrega y convierta las facturas electrónicas recibidas en facturas de compra.
Peppol es la red europea para el intercambio de facturas electrónicas estructuradas entre empresas y organismos públicos. Cada factura viaja desde el punto de acceso del emisor hasta el punto de acceso del receptor. Nordlet genera facturas y notas de crédito conformes a Peppol BIS Billing 3.0, y las envía y recibe a través de la cuenta del punto de acceso de su propia empresa.
Peppol establece las reglas sobre cómo los puntos de acceso intercambian documentos entre sí, pero no sobre cómo su software se comunica con su propio punto de acceso: cada proveedor cuenta con su propia API. Nordlet funciona con estos proveedores:
| Proveedor | Envía | Estado de entrega | Recibe |
|---|---|---|---|
| Recommand | sí | por webhook y bajo demanda | sí |
| Storecove | sí | solo por webhook | sí |
| e-invoice.be | sí | por webhook y bajo demanda | sí |
Sin un punto de acceso, Nordlet sigue generando el archivo Peppol de cada factura emitida y nota de crédito para que pueda descargarlo y transmitirlo por otro medio; no envía ni recibe nada.
Requisitos previos
- Una cuenta con uno de los proveedores anteriores, con su empresa registrada en Peppol a través de este. Cada proveedor cobra por su servicio; consulte su propia lista de precios.
- En Nordlet, el NIF (VAT number) o número de registro de la empresa, o su ID de Peppol (Cuenta → Empresas → ID de Peppol). Cada cliente al que le envíe documentos también necesita uno de estos datos en su tarjeta de socio.
Conexión de su punto de acceso
Abra Cuenta → Cumplimiento normativo → UE → Punto de acceso Peppol, elija su proveedor en Proveedor, complete los campos correspondientes a dicho proveedor tal como se describe a continuación y guarde los cambios. Deje la URL base de la API (API base URL) vacía a menos que su proveedor le haya proporcionado una dirección diferente. Tras guardar, la página muestra la URL de webhook (Webhook URL) de su empresa: https://api.nordlet.com/v1/peppol/webhooks/{provider}/{companyId}, donde {provider} es recommand, storecove o e-invoice-be y {companyId} es el ID de su empresa. Cada empresa en Nordlet tiene su propia URL de webhook.
Nordlet acepta una llamada de webhook únicamente cuando se verifica que conoce su secreto de webhook, por lo que cualquier llamada que no provenga de la cuenta de su punto de acceso será rechazada. Nordlet solo se comunica con direcciones de internet públicas cuando llama a su punto de acceso.
Recommand
- En Recommand, abra su empresa y copie su ID de empresa en ID de cuenta en el punto de acceso.
- En Recommand, cree una clave de API (API key) y copie la clave y su secreto en Clave de API y Secreto de API.
- Invente un texto largo y aleatorio que solo usted y Recommand conozcan, e introdúzcalo en Secreto de webhook. Guarde los cambios.
- En Recommand, cree un webhook para su empresa utilizando la URL de webhook que muestra Nordlet y el mismo secreto de webhook.
Recommand firma cada llamada de webhook con ese secreto.
Storecove
- En Storecove, cree una entidad jurídica (legal entity) para su empresa, configurada para enviar y recibir, y copie su ID en ID de cuenta en el punto de acceso.
- En Storecove, en la sección Claves de API (API Keys), cree una clave de API y cópiela en Clave de API. Deje el Secreto de API vacío.
- Invente un texto largo y aleatorio e introdúzcalo en Secreto de webhook. Guarde los cambios.
- En Storecove, configure un webhook de inserción (push webhook) con la URL de webhook que muestra Nordlet, protegido mediante autenticación básica HTTP: cualquier nombre de usuario y el secreto de webhook como contraseña.
Storecove no dispone de ninguna función para consultar el estado de un documento enviado, por lo que con este proveedor el estado de entrega procede exclusivamente de su webhook y la página de la factura no muestra el botón Comprobar estado en Peppol. Una cuenta de pruebas (sandbox) de Storecove realiza los envíos en la red de pruebas de Peppol; las claves de API de producción se obtienen a través del soporte de Storecove.
e-invoice.be
- En la aplicación de e-invoice.be, en Configuración de la API (API Settings), copie la clave de API de su empresa en Clave de API. Deje vacíos el ID de cuenta en el punto de acceso y el Secreto de API. Guarde los cambios.
- Cree un webhook mediante la API de e-invoice.be (
POST https://api.e-invoice.be/api/webhooks/) indicando la URL de webhook que muestra Nordlet y los eventosdocument.received,document.sentydocument.sent.failed. - Copie el
secretque devuelve la API para el nuevo webhook en el campo Secreto de webhook de Nordlet y vuelva a guardar.
e-invoice.be firma cada llamada de webhook con ese secreto. Una empresa de pruebas en e-invoice.be envía los documentos por correo electrónico en lugar de transmitirlos a través de Peppol.
Envío de una factura
- Emita la factura o nota de crédito.
- Compruebe que el cliente disponga de un ID de Peppol, NIF o número de registro en su tarjeta de socio.
- En la página de la factura, dentro de la sección Entrega, haga clic en Enviar a través de Peppol y confirme la acción. La sección de entrega se muestra para las facturas emitidas que aún no están pagadas, y el botón solo aparece cuando el punto de acceso está conectado.
Nordlet genera el archivo Peppol y lo entrega a su punto de acceso. A continuación, la página de la factura muestra la sección Entrega en Peppol:
| Estado | Significado |
|---|---|
| pending | Entregado al punto de acceso; el punto de acceso del cliente aún no lo ha confirmado |
| delivered | El punto de acceso del cliente confirmó la recepción de la factura |
| rejected | El cliente rechazó la factura; el motivo se muestra debajo del estado |
| failed | No se pudo entregar la factura; el motivo se muestra debajo del estado si el punto de acceso proporciona uno |
El estado se actualiza automáticamente cuando el punto de acceso informa de un cambio a través de su webhook. La opción Comprobar estado en Peppol solicita a Recommand o e-invoice.be el estado actual de forma inmediata; en el caso de e-invoice.be, también lee la respuesta de la factura del cliente, y un rechazo (código de respuesta RE) se muestra como rechazado. Una factura rechazada o con error de envío se puede volver a enviar tras corregir la causa. Si el punto de acceso rechaza la factura de inmediato, por ejemplo porque el cliente no está registrado en Peppol, Nordlet muestra el motivo y la factura permanece sin enviar.
El botón XML de Peppol situado en la parte superior de la página de la factura permite descargar ese mismo archivo Peppol sin enviarlo.
Una entrega intracomunitaria lleva la fecha de emisión como fecha de entrega y el país del cliente como país de entrega, tal como exigen las reglas de Peppol.
Recepción de facturas
Cuando el punto de acceso informa sobre un documento recibido a través de su webhook, Nordlet descarga el archivo Peppol del punto de acceso. Las facturas y notas de crédito que recibe su empresa aparecen en Compras → Captura de documentos, marcadas como recibidas a través de Peppol desde el ID de Peppol del emisor. Nordlet lee directamente el archivo Peppol, por lo que la recepción no consume créditos de reconocimiento de documentos.
- Abra el documento recibido.
- Revise el proveedor, las fechas y las líneas; seleccione el proveedor de entre sus socios o créelo si no existe.
- Haga clic en Guardar borrador. Nordlet crea un borrador de factura de compra, o un borrador de nota de crédito de compra en el caso de haber recibido una nota de crédito, con el archivo Peppol original adjunto. Regístrela como lo haría con cualquier otra factura de compra.
Las líneas de las facturas de compra en Nordlet no pueden ser negativas. Los descuentos y cargos aplicables a todo el documento, así como las líneas negativas, se distribuyen proporcionalmente entre las líneas que tienen el mismo tipo de IVA. Un importe que ninguna línea con su mismo tipo de IVA pueda absorber, como la devolución de un artículo cuyo tipo de IVA no figure en ninguna otra línea de la factura, se muestra en una segunda tabla: Líneas de notas de crédito para una factura recibida, o Líneas de facturas para una nota de crédito recibida. Esas líneas se guardan como un segundo documento para el mismo proveedor: una nota de crédito de compra vinculada a la nueva factura, con la numeración "<número de documento>-CR", o una factura de compra con la numeración "<número de documento>-INV". Ambos documentos sumados coinciden con los totales del documento recibido.
Comprobación del registro de un cliente en Peppol
POST /v1/peppol/participants/lookup con un partnerId o un participantId ("
Realización de las mismas operaciones a través de la API
| Tarea | Llamada |
|---|---|
| Conectar el punto de acceso | POST /v1/declarations/configs/update con system: "peppol" y el objeto config que contenga provider (recommand, storecove o e-invoice-be), accountId, apiKey, apiSecret, webhookSecret y, de manera opcional, apiBaseUrl |
| Recibir el webhook del punto de acceso | POST /v1/peppol/webhooks/{provider}/{companyId}, invocado por el punto de acceso |
| Descargar el archivo Peppol | POST /v1/sales/invoices/peppol-xml |
| Enviar | POST /v1/sales/invoices/peppol-send (devuelve 422 si no hay un punto de acceso configurado) |
| Consultar el estado de entrega | POST /v1/sales/invoices/peppol-status (devuelve 422 con Storecove); las facturas devuelven los campos peppolMessageId, peppolStatus, peppolDetail, peppolSentAt, peppolCheckedAt |
| Buscar documentos recibidos | POST /v1/capture/documents/list; los documentos recibidos tienen provider: "peppol" y senderId |
| Convertir un documento en factura de compra | POST /v1/capture/documents/confirm, empleando oppositeLines para el segundo documento |
Eventos de webhook: sale_invoice.peppol_sent, sale_invoice.peppol_delivered, sale_invoice.peppol_rejected, sale_invoice.peppol_failed y document_capture.peppol_received. Consulte las convenciones de la API para obtener información sobre errores, idempotencia y webhooks.