Remesas SEPA en Sphere ERP
Sphere ERP · Tesorería · España

Remesas SEPA en Sphere ERP

Una remesa agrupa facturas pendientes de cobro o de pago sobre una cuenta bancaria de la empresa. Sphere genera el archivo XML que acepta el banco y, cuando el banco lo procesa, convierte cada línea en un cobro o un pago que salda la factura y deja su movimiento de tesorería.

Objeto Remesa Bancaria Menú Tesorería → Remesa Bancaria Formatos pain.008.001.02 · pain.001.001.03 Disponible en Web · Escritorio · API

Dos direcciones, un mismo objeto

El tipo de la remesa decide de dónde salen las facturas, qué datos bancarios del tercero hacen falta y qué documento se crea al liquidar.

Adeudo directo · cobros

pain.008
Sentido
El banco retira el importe de la cuenta del cliente y lo abona en la nuestra.
Facturas
Facturas de venta con saldo pendiente.
Exige del cliente
Un mandato SEPA activo con cuenta bancaria e IBAN. El mandato lleva esquema (CORE o B2B) y secuencia (FRST, RCUR, OOFF, FNAL).
Exige de la empresa
IBAN y Identificador de Acreedor en la cuenta bancaria.
Al liquidar crea
Un Recibo (cobro) por cada línea.
Método de pago
Documentos de terceros, asociado a la cuenta de la remesa.

Transferencia · pagos

pain.001
Sentido
Ordenamos al banco que transfiera desde nuestra cuenta a la del proveedor.
Facturas
Facturas de proveedor con saldo pendiente.
Exige del proveedor
Una cuenta bancaria activa con IBAN. No hace falta mandato.
Exige de la empresa
IBAN en la cuenta bancaria. El identificador de acreedor no aplica.
Al liquidar crea
Una Orden de Pago por cada línea.
Método de pago
Documentos propios, asociado a la cuenta de la remesa.

Ciclo de vida de la remesa

Tres acciones mueven la remesa por sus estados. Cada acción sólo está habilitada en los estados que se muestran; el resto del tiempo el botón aparece deshabilitado.

Borrador Draft Proponer líneas añade facturas, sigue en borrador Descargar SEPA genera y guarda el XML Enviada Sent volver a descargar regenera el XML, mismo estado Liquidar remesa crea cobros / pagos Liquidada Settled FileGenerated · nunca se asigna Canceled · sólo manual
Transición que ejecuta una acción Estado declarado en el enum que el código no alcanza Estado sin acción propia: se cambia editando el campo
EstadoProponer líneasDescargar SEPALiquidar remesa
DraftSíSíNo
FileGeneratedNoSíSí
SentNoSíSí
SettledNoNoNo
CanceledNoNoNo

El circuito paso a paso

Es una secuencia real: no se puede liquidar sin haber descargado el archivo, y no se puede descargar sin líneas válidas.

  1. Crear la remesa

    Dónde Tesorería → Remesa Bancaria → Nuevo · API POST /api/remittance

    Al crearla, Sphere rellena el número con la marca de tiempo (REM-20260909-153012), la fecha de hoy, el vencimiento a dos días, el tipo Adeudo directo y el estado Borrador. Lo único que el usuario tiene que elegir es la cuenta bancaria de la empresa y, si corresponde, cambiar el tipo a Transferencia.

    El vencimiento de la remesa es la fecha que va al banco como fecha de cobro o de ejecución solicitada.

  2. Proponer líneas

    Dónde acción «Proponer Líneas» · pide una fecha límite de vencimiento, por defecto la de la remesa

    Sphere busca facturas con saldo pendiente mayor que cero y vencimiento igual o anterior a la fecha límite, y añade una línea por cada una con importe = saldo pendiente. Descarta las que ya están en la remesa y las de terceros sin datos bancarios completos, sin avisar línea por línea. Si no queda ninguna, la acción falla con un mensaje.

    Adeudo directoFacturas de venta. El cliente necesita un mandato activo con cuenta e IBAN.
    TransferenciaFacturas de proveedor. El proveedor necesita una cuenta bancaria activa con IBAN.

    Las líneas también se pueden cargar a mano en la ficha, o desde la API pasando la lista de facturas al crear la remesa. La API no aplica el filtro de vencimiento ni el de datos bancarios: toma las facturas que le mandan.

  3. Descargar SEPA

    Dónde acción «Descargar SEPA» · API GET /api/remittance/{id}/download-sepa

    Primero valida la remesa completa: cuenta de la empresa con IBAN, identificador de acreedor si es adeudo, al menos una línea, y para cada línea que la factura tenga tercero y que el tercero tenga mandato o cuenta con IBAN. Cualquier falta corta la acción con un mensaje que nombra al cliente o proveedor.

    Después genera el XML, lo guarda dentro de la remesa y pasa el estado a Enviada. En la versión web el navegador descarga el archivo como SEPA_DD_<número>.xml o SEPA_CT_<número>.xml. Ese archivo es el que se sube a la banca electrónica.

    Se puede volver a descargar mientras no esté liquidada: regenera el XML y lo pisa.

  4. Liquidar remesa

    Dónde acción «Liquidar Remesa» · API POST /api/remittance/{id}/reconcile · cuando el banco confirmó la remesa

    Vuelve a validar y luego resuelve el método de pago: busca uno activo del tipo que corresponde a la dirección y asociado a la cuenta de la remesa; si no hay, toma cualquiera activo de ese tipo; si tampoco, corta con error de configuración.

    Por cada línea con factura e importe positivo crea, en una sola transacción:

    • El documento de cobro o de pago al tercero de la factura, fechado hoy, en la moneda de la cuenta bancaria, con el comentario «Cobro por adeudo SEPA - Remesa …» o «Pago por transferencia SEPA - Remesa …».
    • El instrumento de pago por el importe de la línea, con el método de pago resuelto. En el adeudo queda marcado como depositado en la cuenta de la remesa.
    • El movimiento de tesorería sobre la cuenta bancaria del método de pago.
    • La aplicación del documento a la factura por el importe de la línea. Es lo que baja el saldo pendiente de la factura.

    La línea queda enlazada a su instrumento y la remesa pasa a Liquidada. Liquidar dos veces no es posible: la acción se deshabilita y la API responde que ya está liquidada.

Qué queda creado al liquidar

Una remesa de adeudo con dos facturas, después de liquidar. La de transferencia es simétrica: Orden de Pago en lugar de Recibo, y el instrumento cuelga de la orden.

Remesa Bancaria REM-20260909-153012 Adeudo directo · Liquidada Cuenta ES91 2100 … 4567 guarda el XML pain.008 Línea 1 Factura 0001-00000018 1.210,00 € Línea 2 Factura 0001-00000021 484,00 € Recibo cliente de la factura · hoy Instrumento documento de terceros · depositado Mov. tesorería cuenta del método Aplicación Recibo → Factura · 1.210,00 Recibo cliente de la factura · hoy Instrumento documento de terceros · depositado Mov. tesorería cuenta del método Aplicación Recibo → Factura · 484,00 Saldo pendiente de cada factura = total − aplicado. Tras la aplicación queda en 0 y deja de aparecer en propuestas futuras.

Qué va en el archivo del banco

Un adeudo con una línea, reducido a lo que importa. Cada valor sale de un campo de Sphere; la columna de la derecha dice de cuál.

<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02">
 <CstmrDrctDbitInitn>
  <GrpHdr>
   <MsgId>REM-20260909-153012</MsgId>
   <NbOfTxs>1</NbOfTxs>
   <CtrlSum>1210.00</CtrlSum>
   <InitgPty><Nm>EL FARO SL</Nm></InitgPty>
  </GrpHdr>
  <PmtInf>
   <PmtMtd>DD</PmtMtd>
   <PmtTpInf>
    <LclInstrm><Cd>CORE</Cd></LclInstrm>
    <SeqTp>RCUR</SeqTp>
   </PmtTpInf>
   <ReqdColltnDt>2026-09-11</ReqdColltnDt>
   <CdtrAcct><Id><IBAN>ES9121000418450200051332</IBAN></Id></CdtrAcct>
   <CdtrSchmeId>… <Id>ES23000B12345678</Id> …</CdtrSchmeId>
   <DrctDbitTxInf>
    <PmtId><EndToEndId>LINE-412</EndToEndId></PmtId>
    <InstdAmt>1210.00</InstdAmt>
    <MndtRltdInf>
     <MndtId>MND-2025-0042</MndtId>
     <DtOfSgntr>2025-03-01</DtOfSgntr>
    </MndtRltdInf>
    <Dbtr><Nm>HOTEL PLAYA GOLF SA</Nm></Dbtr>
    <DbtrAcct><Id><IBAN>ES7100300001…</IBAN></Id></DbtrAcct>
    <RmtInf><Ustrd>Factura 0001-00000018</Ustrd></RmtInf>
   </DrctDbitTxInf>
  </PmtInf>
 </CstmrDrctDbitInitn>
</Document>
MsgId
Número de la remesa.
CtrlSum
Suma de los importes de las líneas.
InitgPty · Cdtr
Nombre de la cuenta bancaria de la empresa, sin acentos ni caracteres fuera del juego SEPA.
LclInstrm · SeqTp
Esquema y secuencia del mandato del primer tercero de la remesa. Se aplican a todo el archivo.
ReqdColltnDt
Vencimiento de la remesa. En transferencias es ReqdExctnDt.
CdtrAcct · CdtrAgt
IBAN y BIC de la cuenta de la empresa.
CdtrSchmeId
Identificador de acreedor SEPA de la cuenta de la empresa.
EndToEndId
Identificador interno de la línea. Sirve para casar la devolución del banco con la línea.
InstdAmt
Importe de la línea. En transferencias lleva el atributo de moneda de la cuenta.
MndtId · DtOfSgntr
Referencia y fecha de firma del mandato activo del cliente.
Dbtr · DbtrAcct
Nombre del cliente y el IBAN de la cuenta del mandato. En transferencias es el proveedor y su cuenta activa.
RmtInf
«Factura …» o «Pago factura …» con la referencia del documento.

Dónde vive cada pieza

PiezaUbicaciónQué hace
ModeloCore/Sphere.Module/Model/Treasury/Remesa, sus líneas, el mandato del cliente y los parámetros de la propuesta.
Lógica compartidaRemittanceViewController.csLas tres acciones, la validación, la resolución del método de pago y la liquidación. Común a Blazor y Win.
BlazorRemittanceBlazorViewController.csSe engancha a «Descargar SEPA» y hace que el navegador baje el XML guardado.
WinRemittanceWinViewController.csLo mismo con diálogo de guardar archivo.
Archivo del bancoSepaXmlService.csConstruye el pain.008 y el pain.001 a partir de la remesa.
Movimiento de tesoreríaTreasuryHelper.csCrea el movimiento sobre la cuenta bancaria del método de pago, para cualquier cobro o pago de Sphere.
API RESTRemittanceController.csReplica el circuito completo para clientes externos y Flutter.

Endpoints

LlamadaRutaEfecto
GET/api/remittanceLista con tipo, estado, cuenta, total y cantidad de líneas.
GET/api/remittance/{id}Ficha con líneas, factura, saldo pendiente y tercero.
POST/api/remittanceCrea la remesa con cuenta, tipo, vencimiento y lista de facturas. Cada línea toma el saldo pendiente.
GET/api/remittance/{id}/download-sepaValida, genera el XML, lo guarda, pasa a Enviada y devuelve el archivo.
POST/api/remittance/{id}/reconcileLiquida: crea cobros o pagos, aplicaciones y movimientos, y pasa a Liquidada.

Lo que conviene saber antes de tocarlo

Comportamientos verificados en el código actual que un usuario o un desarrollador puede no esperar.

El estado «Archivo generado» existe pero no se usa

Descargar el archivo lleva la remesa de Borrador directamente a Enviada. Nada distingue «generé el XML» de «lo subí al banco». Si se quiere ese matiz, hay que asignar el estado intermedio en la descarga y dejar Enviada para una acción aparte.

Los cobros y pagos se fechan hoy, no al vencimiento

El documento, el instrumento y la aplicación llevan la fecha del día en que se pulsa Liquidar. Si el banco procesó la remesa días antes, la fecha contable no coincide con la del extracto.

El importe de la línea se fija al proponer

La línea copia el saldo pendiente del momento. Si la factura se cobra parcialmente por otra vía antes de liquidar, la aplicación se hace igual por el importe de la línea. La validación no vuelve a comparar contra el saldo.

El esquema y la secuencia del archivo salen del primer mandato

Si conviven en la misma remesa un mandato CORE y uno B2B, o un FRST con varios RCUR, el archivo lleva los del primero para todas las líneas. Para remesas mixtas conviene separarlas por esquema y secuencia.

La lógica está duplicada entre el controller XAF y la API

Validación, resolución del método de pago y liquidación viven dos veces, línea por línea idénticas. Un cambio en una tiene que replicarse en la otra hasta que se extraigan a un servicio.

El instrumento es un documento, también en transferencias

Los dos tipos de método de pago que usa la liquidación se materializan como documento bancario. En el adeudo queda depositado en la cuenta de la remesa; en la transferencia queda como documento propio. Es lo que muestra la cartera de tesorería.

Para verlo andando

El tenant de demo hostelera trae 35 remesas. Las de referencia son HOR-PAIN001-202607 (pagos a proveedores) y HOR-PAIN008-202607 (adeudos a clientes), ambas con su XML guardado.