Preguntas

FAQ de Pain001: tesorería, operaciones, ingeniería y auditoría

Respuestas directas para tesoreros, operaciones de pago, ingenieros y auditores, formuladas tal como la gente pregunta realmente.

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#

pain.001 es el mensaje ISO 20022 que un cliente envía a su banco para iniciar transferencias. Es 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.

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.

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.

Swift tenía previsto dejar de aceptar direcciones postales totalmente no estructuradas en los pagos transfronterizos CBPR+ en noviembre de 2026. En agosto de 2026 aplazó esa fecha y anunciará la nueva a más tardar en diciembre de 2026, pero la regla no cambia: las direcciones deben ser estructuradas o híbridas, con elementos discretos como la localidad (<TwnNm>) y el país (<Ctry>) 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.

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#

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.

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.

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 <name> --explain para ver cada regla superada o incumplida.

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.

--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#

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.

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.

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.

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%.

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#

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.

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.

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.