ISO 20022, explicado

Qué es pain.001: iniciación de transferencias ISO 20022

El mensaje ISO 20022 que una empresa envía a su banco para ordenar transferencias: qué es, cómo se estructura, qué versión usar y un ejemplo completo que valida contra el esquema oficial.

pain.001 es el mensaje ISO 20022 que una empresa envía a su banco para ordenar una o varias transferencias. Su nombre completo es Customer Credit Transfer Initiation (iniciación de transferencias del cliente): "pain" es la familia de mensajes de iniciación de pagos, .001 es el número de mensaje y el sufijo, como pain.001.001.09, es la versión. Es XML, se valida contra un esquema oficial (XSD) y sustituye a los formatos CSV propios de cada banco y al mensaje de texto SWIFT MT101.

pain.001 en un minuto#

  • Quién lo envía: una empresa (el ordenante, o un agente que actúa en su nombre) lo envía a su propio banco (la entidad del ordenante).
  • Qué contiene: uno o varios lotes de transferencias, cada uno con una cuenta del ordenante, una fecha de ejecución solicitada y cualquier número de pagos a beneficiarios.
  • Qué se recibe de vuelta: el banco responde con pain.002, el informe de estado de pagos del cliente, que acepta o rechaza el fichero o transacciones concretas con códigos de motivo ISO.
  • Qué ocurre después: una vez aceptado, el banco convierte cada instrucción en mensajes interbancarios como pacs.008, que la empresa nunca ve.
  • Dónde se usa: transferencias SEPA según los reglamentos del EPC, pagos transfronterizos en Swift bajo CBPR+ (pain.001.001.09) y muchos esquemas nacionales. El corpus de ejemplos de Pain001 cubre 42 escenarios en 17 mercados.

Cómo se estructura un mensaje pain.001#

Todas las versiones comparten el mismo esqueleto de tres niveles dentro de un elemento <CstmrCdtTrfInitn>.

Nivel Elemento Qué contiene
1 <GrpHdr> Cabecera de grupo ID del mensaje, fecha y hora de creación, número de transacciones (NbOfTxs), suma de control (CtrlSum), parte iniciadora
2 <PmtInf> Información del pago Un lote: método de pago, fecha de ejecución solicitada, ordenante, cuenta y entidad del ordenante, responsable de los gastos
3 <CdtTrfTxInf> Transacción de transferencia Un pago: referencia de extremo a extremo, importe y divisa, beneficiario, cuenta y entidad del beneficiario, información de remesa

Un fichero puede contener varios lotes <PmtInf>, y cada lote muchos pagos <CdtTrfTxInf>. NbOfTxs y CtrlSum aparecen tanto a nivel de fichero como de lote y deben coincidir con los pagos que cuentan; es uno de los motivos más habituales por los que un banco rechaza un fichero.

Un ejemplo completo de pain.001#

Se trata de una única transferencia SEPA en pain.001.001.09, tomada sin cambios del corpus de ejemplos de Pain001. Valida contra el XSD oficial de ISO 20022. Las partes, los IBAN y los BIC son ficticios.

<?xml version='1.0' encoding='UTF-8'?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09">
  <CstmrCdtTrfInitn>
    <GrpHdr>
      <MsgId>OML-SCT-20260921</MsgId>
      <CreDtTm>2026-09-21T12:00:00</CreDtTm>
      <NbOfTxs>1</NbOfTxs>
      <CtrlSum>2200.00</CtrlSum>
      <InitgPty>
        <Nm>Officine Meccaniche Lombarde SpA</Nm>
        <PstlAdr>
          <PstCd>20123</PstCd>
          <TwnNm>Milano</TwnNm>
          <Ctry>IT</Ctry>
          <AdrLine>Via Torino 15</AdrLine>
        </PstlAdr>
      </InitgPty>
    </GrpHdr>
    <PmtInf>
      <PmtInfId>SCT-20260921-IT-01</PmtInfId>
      <PmtMtd>TRF</PmtMtd>
      <BtchBookg>false</BtchBookg>
      <NbOfTxs>1</NbOfTxs>
      <CtrlSum>2200.00</CtrlSum>
      <PmtTpInf>
        <SvcLvl>
          <Cd>SEPA</Cd>
        </SvcLvl>
      </PmtTpInf>
      <ReqdExctnDt>
        <Dt>2026-09-22</Dt>
      </ReqdExctnDt>
      <Dbtr>
        <Nm>Officine Meccaniche Lombarde SpA</Nm>
        <PstlAdr>
          <PstCd>20123</PstCd>
          <TwnNm>Milano</TwnNm>
          <Ctry>IT</Ctry>
          <AdrLine>Via Torino 15</AdrLine>
        </PstlAdr>
      </Dbtr>
      <DbtrAcct>
        <Id>
          <IBAN>IT48T78971134594OGDKY5VXE41</IBAN>
        </Id>
      </DbtrAcct>
      <DbtrAgt>
        <FinInstnId>
          <BICFI>TLAOIT60</BICFI>
        </FinInstnId>
      </DbtrAgt>
      <ChrgBr>SLEV</ChrgBr>
      <CdtTrfTxInf>
        <PmtId>
          <EndToEndId>OML-2026-0921-01</EndToEndId>
        </PmtId>
        <Amt>
          <InstdAmt Ccy="EUR">2200.00</InstdAmt>
        </Amt>
        <CdtrAgt>
          <FinInstnId>
            <BICFI>MHXHITI0</BICFI>
          </FinInstnId>
        </CdtrAgt>
        <Cdtr>
          <Nm>Fonderia Bresciana Srl</Nm>
          <PstlAdr>
            <PstCd>25121</PstCd>
            <TwnNm>Brescia</TwnNm>
            <Ctry>IT</Ctry>
          </PstlAdr>
        </Cdtr>
        <CdtrAcct>
          <Id>
            <IBAN>IT23J14887404856NF3794IGWXN</IBAN>
          </Id>
        </CdtrAcct>
        <RmtInf>
          <Ustrd>Fattura 117/2026</Ustrd>
        </RmtInf>
      </CdtTrfTxInf>
    </PmtInf>
  </CstmrCdtTrfInitn>
</Document>

Pruebe con sus propios datos en la demo en el navegador: genera un fichero pain.001 a partir de un CSV y lo valida contra el esquema oficial sin que los datos salgan de su equipo.

Versiones de pain.001#

ISO publica una nueva versión cuando cambia el modelo del mensaje. Cada banco y cada esquema aceptan versiones concretas, así que la versión que envíe debe ser la que indique la documentación del canal de su banco.

Versión Notas
pain.001.001.03 El caballo de batalla de SEPA y CGI desde hace años; identifica a los bancos con <BIC>
.04, .05, .06, .07, .08 Versiones de mantenimiento usadas por canales concretos
pain.001.001.09 La versión de 2019 que CBPR+ eligió para Swift; identifica a los bancos con <BICFI> y añade LEI y UETR
.10, .11, .12 Mejoras posteriores a 2019
pain.001.001.13 Publicada por ISO el 19 de marzo de 2026; añade un identificador único de transacción opcional (UnqTxIdr)

La matriz de compatibilidad muestra qué versiones genera, valida y migra Pain001.

Mensaje Sentido Finalidad
pain.001 De la empresa a su banco Ordena transferencias (envía dinero)
pain.002 Del banco a la empresa Informa del estado de un pain.001 o pain.008: aceptado, aceptado parcialmente o rechazado, con códigos de motivo
pain.008 De la empresa a su banco Ordena adeudos directos (cobra dinero en virtud de un mandato)
pacs.008 De banco a banco La transferencia interbancaria en la que se convierte una instrucción pain.001
MT101 Empresa o banco, a través de Swift El antiguo mensaje de texto "Request for Transfer" que pain.001 sustituye. Swift aplazó en agosto de 2026 la retirada del relay interbancario MT101 (Swift); véase de MT101 a pain.001

El glosario define en lenguaje claro el resto del vocabulario ISO 20022.

Por qué los bancos rechazan ficheros pain.001#

Un fichero puede ser XML bien formado y aun así ser rechazado. Las comprobaciones se superponen en capas:

  1. Esquema: el fichero debe validar contra el XSD oficial de su versión.
  2. Calidad de los datos: los IBAN superan sus dígitos de control, los BIC están bien formados, las fechas e importes son válidos, y NbOfTxs y CtrlSum coinciden con los pagos.
  3. Reglas del esquema: SEPA, CBPR+ y los esquemas nacionales añaden sus propias restricciones, como el juego de caracteres permitido o una dirección postal estructurada.
  4. Perfil y canal de su banco: cada banco publica sus propias guías de uso por encima del esquema.

Pain001 comprueba las tres primeras capas antes de que el fichero llegue al banco y deja claro que la cuarta la confirma el banco.

Cómo crear un fichero pain.001#

  • Desde una hoja de cálculo: de Excel a pain.001 convierte una lista de pagos en Excel o CSV en un fichero validado.
  • En el navegador: la demo genera y valida un fichero en local, sin subir nada.
  • Desde código o la línea de comandos: instale la librería pain001 de código abierto y ejecute:
pain001 -t pain.001.001.09 -d payments.csv -o out/

La referencia técnica cubre todas las opciones, y las preguntas frecuentes responden a lo que más preguntan los equipos de tesorería, operaciones e ingeniería.

Fuentes#