TL;DR: A SWIFT vai descontinuar o MT940 até novembro de 2028. O Bank Statement Parser lida com MT940 e CAMT.053 com uma única API, para que seu pipeline de análise funcione durante a transição e depois dela.
Por Que Esta Migração É Importante
A SWIFT está descontinuando os formatos de mensagens MT legados em favor do padrão ISO 20022, mais rico. Para equipes de tesouraria e finanças, isso significa que seus pipelines de processamento de extratos bancários devem evoluir de MT940 para CAMT.053 antes dos prazos finais.
Cronograma de Migração SWIFT
| Data | Marco | Impacto |
|---|---|---|
| Novembro de 2025 | Coexistência MT-MX encerrada para pagamentos transfronteiriços | Mensagens PACS agora são apenas ISO 20022 |
| Novembro de 2026 | Endereços estruturados/híbridos obrigatórios; MT101 multi-instrução rejeitado; Fase 1 de Gerenciamento de Casos | Formatos de endereço devem estar em conformidade; algumas mensagens MT serão rejeitadas |
| Final de 2026 | Opt-in para receber CAMT.052/.053/.054 | Instituições financeiras podem começar a receber extratos ISO nativos |
| Novembro de 2027 | Todas as IFs devem receber CAMT.053 nativamente | SWIFT para de converter formato MT para ISO; seus sistemas devem analisar CAMT diretamente |
| Novembro de 2028 | MT940/MT942/MT950/MT900/MT910 totalmente descontinuados | Formatos de extrato legados não estarão mais disponíveis; CAMT.052/.053/.054 são a única opção |
O Que Muda no Seu Código
Antes: Somente MT940
from bankstatementparser import Mt940Parser
parser = Mt940Parser("statement.mt940")
df = parser.parse()
Depois: Ambos os Formatos com Detecção Automática
from bankstatementparser import create_parser, detect_statement_format
fmt = detect_statement_format("statement.xml") # or .mt940
parser = create_parser("statement.xml", fmt)
df = parser.parse() # Same DataFrame schema regardless of format
A função detect_statement_format() identifica se o arquivo é MT940, CAMT.053, PAIN.001 ou qualquer outro formato suportado. A função create_parser() retorna o parser correto. Seu código posterior funciona de forma idêntica, independente do formato de origem.
CAMT.053 vs MT940: Principais Diferenças
| Recurso | MT940 | CAMT.053 |
|---|---|---|
| Riqueza de dados | Campos limitados | 3-5x mais dados por transação |
| Conjunto de caracteres | Limitado (charset SWIFT) | Unicode completo |
| Estrutura | Texto simples com tags | XML com namespaces |
| Relatório de saldo | Apenas abertura/fechamento | Múltiplos tipos de saldo |
| Referências | Campo de referência único | Múltiplos tipos de referência |
| Tratamento de moeda | Básico | Multimoeda completo com taxas de câmbio |
Como o Bank Statement Parser Ajuda
- API Unificada: Analise MT940, CAMT.053 e extratos em PDF com o mesmo fluxo de trabalho, gerando saída DataFrame consistente.
- Detecção Automática: Não é preciso saber o formato de antemão.
detect_statement_format()identifica automaticamente. - Pipeline Híbrido de PDF: Bancos que fornecem apenas extratos em PDF durante a transição são atendidos por
smart_ingest()com verificação automática de saldo. - Agnóstico a Namespace: Lida com qualquer variante CAMT.053 (001.02, 001.04 ou wrappers específicos de bancos) sem configuração.
- Verificação Multimoeda:
verify_balance_multi_currency()executa a Golden Rule por grupo de moeda — essencial para extratos CAMT multimoeda. - Streaming: Processe arquivos CAMT grandes (50 MB+, 50K+ transações) com memória limitada.
- Exportação Contábil: Exporte direto para formato journal hledger ou beancount para contabilidade de tesouraria.
- Testes de Migração: Execute ambos os parsers lado a lado no mesmo período para verificar a consistência da saída antes de migrar.
Começando
pip install bankstatementparser
from bankstatementparser import create_parser, detect_statement_format
# Works with MT940 today, CAMT.053 tomorrow, PDF anytime
for file in bank_statement_files:
fmt = detect_statement_format(file)
parser = create_parser(file, fmt)
df = parser.parse()
process(df) # Your code doesn't change
Para extratos em PDF de bancos que ainda não oferecem exportações estruturadas em CAMT:
from bankstatementparser.hybrid import smart_ingest
result = smart_ingest("statement.pdf")
assert result.verification.status == "VERIFIED"