Pain001

Respuestas directas para tesoreros, operaciones de pago, ingenieros y auditores. Las preguntas están formuladas tal como la gente las plantea realmente. Para más detalle técnico, consulte la referencia técnica.


Para responsables de tesorería y finanzas#

¿Qué es pain.001, en un párrafo?

pain.001 es el mensaje ISO 20022 que un cliente envía a su banco para iniciar transferencias — el sucesor XML de formatos como SWIFT MT101 y los archivos planos nacionales. Su banco lo valida contra un esquema y un reglamento antes de aceptarlo. Pain001 (el software) produce esos archivos a partir de los datos que usted ya tiene y demuestra que son válidos antes de que los presente.

¿Cuál es la diferencia entre pain.001 y pain.008?

La dirección del flujo. pain.001 inicia transferencias — usted envía dinero. pain.008 inicia adeudos domiciliados — usted cobra dinero que se le debe en virtud de un mandato. Pain001 genera ambos: diez versiones de pain.001 (de .001.03 a .001.12) y pain.008.001.02.

Seguimos enviando archivos MT101. ¿Cuán urgente es la migración?

Urgente. SWIFT retiró los mensajes MT de las categorías 1, 2 y 9 para instrucciones de pago interbancarias transfronterizas en noviembre de 2025; los canales corporativos que aún aceptan MT lo hacen a discreción de cada banco y con tiempo prestado. El loader MT101 convierte los flujos MT101 existentes en pain.001 validado sin volver a teclear nada.

¿Qué significa para nosotros el plazo de direcciones estructuradas de noviembre de 2026?

Desde finales de noviembre de 2026, las direcciones postales totalmente no estructuradas dejan de aceptarse en los pagos transfronterizos CBPR+; las direcciones deben ser estructuradas o híbridas — elementos discretos como la localidad () y el país () en lugar de líneas de texto libre. Si sus datos maestros guardan las direcciones como bloques de texto, el trabajo está en sus datos, no en su conexión bancaria. Empiece por ahí. El informe 2026 cubre el calendario en detalle.

¿Cuánto cuesta Pain001?

Nada. El núcleo tiene doble licencia Apache-2.0 / MIT; los paquetes complementarios son Apache-2.0. El uso comercial, la modificación y la redistribución están todos permitidos. Como referencia de escala, solo el SDK de traducción de SWIFT se lista en €10,000–30,000 al año.


Para operaciones de pago#

¿Por qué rechazan los bancos los archivos de pago?

Cuatro causas recurrentes: violaciones de esquema (elemento erróneo, versión errónea, espacio de nombres erróneo), identificadores incorrectos (fallos de suma de control del IBAN, BIC mal formados), totales de control rotos (NbOfTxs / CtrlSum que no coinciden con las transacciones) y caracteres fuera del juego latino de ISO 20022. Pain001 comprueba las cuatro antes de que exista un archivo: validación JSON Schema por registro, comprobaciones de IBAN mod-97 y BIC ISO 9362, totales de control recalculados, transliteración del juego de caracteres y validación XSD final del XML renderizado.

¿Podemos validar un archivo sin generar nada?

Sí — pain001 --dry-run (o el subcomando validate, o POST /api/v1/validate). El código de salida 0 significa válido; 1 significa que la validación falló, con errores a nivel de campo. Intégrelo en la CI o en una lista de comprobación previa al envío.

¿Qué reglamentos SEPA están cubiertos?

Cinco reglamentos de esquema vienen integrados: SEPA Credit Transfer (sepa-sct), SEPA Instant (sepa-inst), SEPA Direct Debit Core (sepa-sdd), SEPA B2B (sepa-b2b) y transferencia transfronteriza (xborder-ct). Use --scheme --explain para ver cada regla superada o incumplida.

Nuestros datos viven en Excel. ¿Dónde está la trampa?

Excel convierte silenciosamente en números las cadenas con aspecto de IBAN. El loader de Excel lee .xlsx/.xlsm directamente y se detiene en seco si las columnas de IBAN contienen celdas numéricas — la corrupción se detecta al cargar, no en el banco.

¿Cómo maneja un lote de 500,000 filas?

--streaming procesa la entrada en bloques con memoria acotada (por defecto 1,000 transacciones), cada uno emitido como su propio archivo XML con totales de control correctamente recalculados. La API REST ofrece POST /api/v1/generate/async con consulta de trabajos por la misma razón.


Para ingenieros y arquitectos#

¿Cómo lo integramos — biblioteca, CLI o API?

Las tres existen como superficies de primera clase: una API de Python tipada, una CLI con códigos de salida aptos para CI y un microservicio FastAPI (pain001 serve) con endpoints síncronos, de trabajos asíncronos, de salud y de métricas de Prometheus. Debajo hay el mismo pipeline de validación, por lo que los resultados nunca divergen entre superficies.

¿La generación de XML es realmente segura frente al redondeo de flotantes?

Los importes son decimal.Decimal de extremo a extremo en la generación y en la validación del esquema — analizados como decimales exactos, sumados como decimales exactos, renderizados sin representación flotante. Los totales de control se recalculan a partir de los registros validados, nunca se confían a la entrada.

¿Cuál es la postura de seguridad?

Todo el análisis de XML pasa por defusedxml (que bloquea los ataques XXE y de expansión de entidades); no hay lxml en el árbol de dependencias. Las entradas pasan un validador contra path traversal. La imagen Docker se ejecuta sin privilegios de root. Se genera un SBOM CycloneDX para las releases del núcleo, y la detección de plugins de terceros puede desactivarse por completo con PAIN001_DISABLE_PLUGINS=1.

¿Cómo se garantiza la calidad?

Cobertura de líneas y de ramas al 100% como control estricto de CI en el núcleo (verificable: 3,828 líneas, 926 ramas al 100%), mypy estricto, cobertura de docstrings al 100%, análisis de seguridad con Bandit y pip-audit, y escaneo con CodeQL. Los paquetes complementarios mantienen la misma disciplina de cobertura al 100%.

¿Podemos extenderlo para un formato propietario?

Sí — cuatro grupos de puntos de entrada para plugins (pain001.loaders, pain001.validators, pain001.schemes, pain001.writers). El loader de Excel es en sí mismo un plugin que usa el protocolo público, por lo que sirve también como implementación de referencia.


Para auditores y cumplimiento#

¿Podemos reproducir un archivo generado el trimestre pasado?

Sí. Fije la versión del paquete, reproduzca la misma entrada y la salida es determinista. Como la cadena de herramientas es de código abierto, la pista de auditoría se extiende hasta la propia ruta del código — no solo hasta una certificación del proveedor.

¿Los datos de pago salen de nuestro entorno?

No. Cada componente — CLI, biblioteca, API REST, servidor MCP, LSP — se ejecuta localmente. No hay telemetría, ni llamadas a SaaS, ni servicio de validación externo. El servidor MCP habla solo stdio y sus 17 herramientas están todas anotadas como de solo lectura e idempotentes.

¿Quién mantiene Pain001?

Sebastien Rousseau, líder de ingeniería fintech radicado en Londres, con contribuidores de la comunidad. El desarrollo es público en GitHub, las releases se publican en PyPI y el registro de cambios se versiona con cada release.