Esta referência documenta a interface de linha de comando, a API Python, o microsserviço REST e o pipeline de validação do pain001 v0.0.58. Cada flag, endpoint e comportamento listado aqui foi extraído do código entregue, não de aspirações.
O Pain001 suporta 12 definições de mensagem ISO 20022: de pain.001.001.03 a pain.001.001.13 (Customer Credit Transfer Initiation, onze versões) e pain.008.001.02 (Customer Direct Debit Initiation).
1. Interface de linha de comando#
O executável pain001 agrupa suas funcionalidades em subcomandos. Executá-lo apenas com flags de geração invoca generate implicitamente, de modo que a automação existente continua funcionando.
| Subcomando | Finalidade |
|---|---|
generate |
Converte um arquivo de dados em XML ISO 20022 validado contra o esquema (comando padrão). |
validate |
Valida os dados de entrada sem gravar XML. |
versions [--json] |
Lista todas as 11 definições de mensagem suportadas. |
inspect |
Mostra os campos obrigatórios e opcionais de um tipo de mensagem. |
init |
Gera um modelo CSV inicial para um tipo de mensagem. |
serve [--host] [--port] [--reload] |
Inicia o microsserviço REST FastAPI (requer o extra api). |
mcp |
Inicia o servidor Model Context Protocol embutido (5 ferramentas; o servidor completo com 17 ferramentas é distribuído como pain001-mcp). |
plugins list / show / disable |
Inspeciona e gerencia os plugins descobertos de loader, validador, esquema e writer. |
Opções de generate
| Flag | Descrição |
|---|---|
-t, --xml-message-type |
Definição de mensagem, por exemplo pain.001.001.09. |
-d, --data |
Dados de entrada: .csv, .json, .jsonl, .db / .sqlite, .parquet, ou criptografados com PGP .gpg / .asc. |
-o, --output-dir |
Diretório que recebe o XML gerado. |
-m, --template / -s, --schema |
Substitui o template Jinja2 ou o esquema XSD incluídos. |
-c, --config |
Carrega padrões de um perfil de configuração (--profile, --show-config). |
--dry-run (alias --validate-only) |
Valida a entrada contra o JSON Schema, o XSD e o rulebook de esquema sem gravar saída. |
--scheme |
Aplica um rulebook de esquema: sepa-sct, sepa-inst, sepa-sdd, sepa-b2b ou xborder-ct. |
--explain --scheme-format {text,json} |
Relata cada regra de esquema aprovada ou reprovada, em formato legível por pessoas ou por máquinas. |
--streaming / --chunk-size |
Processamento em blocos com memória limitada para lotes grandes (padrão de 1,000 transações por bloco; cada bloco vira seu próprio arquivo XML com NbOfTxs e CtrlSum recalculados). |
--emit-metrics |
Emite métricas de execução legíveis por máquina para pipelines de observabilidade. |
Os códigos de saída são amigáveis à CI: 0 sucesso, 1 falha de validação, 2 erro de uso.
2. API Python#
from pain001.core.core import process_files
# Generate a validated pain.001.001.09 file from CSV
process_files(
xml_message_type="pain.001.001.09",
xml_template_file_path="template.xml",
xsd_schema_file_path="schema.xsd",
data_file_path="payments.csv",
output_dir="out",
)
Todo documento gerado passa por três camadas antes de ser gravado:
- Validação de entrada — cada registro é verificado contra o JSON Schema do tipo de mensagem, com normalização de aliases de campo e verificações sintáticas de IBAN e BIC.
- Rulebook de esquema (opcional) — regras de SEPA SCT, SEPA Instant, SEPA SDD Core, SEPA B2B ou transferência de crédito transfronteiriça.
- Validação XSD — o XML renderizado é validado contra o esquema oficial ISO 20022 via
xmlschemaantes que um único byte seja gravado em disco.
Os valores monetários são tratados como decimal.Decimal durante a geração do XML e a validação de esquema — nunca como floats IEEE 754 — e os totais de controle NbOfTxs / CtrlSum são recalculados a partir dos registros validados, em vez de aceitos da entrada.
Além da geração de pain.001, a biblioteca principal também traz um parser e gerador de relatórios de status pain.002 (para que você possa ler a resposta de aceite/rejeição do banco) e um parser e gerador de extratos camt.053 para a conciliação de fim de dia, além de um VersionMapper que migra registros entre versões de mensagem.
3. Microsserviço REST#
pip install "pain001[api]"
pain001 serve --host 0.0.0.0 --port 8000
Todos os endpoints são montados em /api/v1 (com um alias sem versão /api):
| Método e caminho | Finalidade |
|---|---|
GET /api/v1/health |
Sonda de liveness. |
POST /api/v1/validate |
Valida registros; retorna erros em nível de campo. |
POST /api/v1/generate |
Geração síncrona de XML. |
POST /api/v1/generate/async |
Enfileira um lote grande para geração em segundo plano. |
GET /api/v1/status/{job_id} |
Consulta um job assíncrono. |
GET /api/v1/download/{job_id} |
Baixa o XML concluído. |
DELETE /api/v1/jobs/{job_id} |
Remove um job concluído. |
GET /metrics |
Métricas Prometheus. |
A documentação interativa é servida em /api/docs (Swagger UI), /api/redoc e /api/reference (Scalar), com o documento OpenAPI em /openapi.json.
4. Normalização de entrada#
O Pain001 converte exportações do mundo real em registros válidos antes da validação:
- Aliases de campo — nomes de coluna comuns de ERP são mapeados para campos canônicos (por exemplo,
amount→payment_amount). - Normalização de IBAN / BIC — espaços removidos, caixa normalizada e, em seguida, verificação (mod-97 da ISO 13616 para IBANs, estrutura da ISO 9362 para BICs).
- Datas — parsing ISO 8601
YYYY-MM-DDpara datas de execução. - Valores — encaminhados por
decimal.Decimal; valores malformados reprovam na validação em vez de serem arredondados silenciosamente. - Conjunto de caracteres — auxiliares de transliteração reduzem o conteúdo ao conjunto de caracteres latinos ISO 20022 aceito por SWIFT e SEPA.
5. Arquitetura de plugins#
A suíte é extensível por meio de quatro grupos de entry points: pain001.loaders, pain001.validators, pain001.schemes e pain001.writers. O pain001-loader-xlsx registra-se por esse mecanismo e é descoberto automaticamente na instalação; o pain001-loader-mt101 é uma biblioteca de parsing autônoma consumida diretamente (e pela ferramenta convert_mt101 do servidor MCP). Um interruptor de emergência — PAIN001_DISABLE_PLUGINS=1 — desativa por completo a descoberta de plugins de terceiros em ambientes restritos.
6. Portões de qualidade#
A biblioteca principal é desenvolvida sob portões rígidos e verificáveis: cobertura de linhas e de ramificações de 100% imposta na CI (--cov-fail-under=100), tipagem mypy estrita, cobertura de docstrings de 100% e linting de segurança (Bandit, pip-audit). Um SBOM CycloneDX é gerado para cada build de release.
Continue com o Guia de instalação, o servidor MCP para agentes de IA ou o glossário de pagamentos.