Кратко: SWIFT прекратит поддержку MT940 к ноябрю 2028 года. Bank Statement Parser работает и с MT940, и с CAMT.053 через единый API. Ваш pipeline разбора будет работать и во время перехода, и после него.
Почему эта миграция важна
SWIFT отказывается от устаревших форматов сообщений MT в пользу более расширенного стандарта ISO 20022. Для казначейских и финансовых команд это означает, что ваши pipeline обработки банковских выписок должны перейти с MT940 на CAMT.053 до наступления жёстких сроков.
График миграции SWIFT
| Дата | Веха | Вл��яние |
|---|---|---|
| Ноябрь 2025 | Завершение сосуществования MT-MX для трансграничных платежей | Сообщения PACS теперь только в ISO 20022 |
| Ноябрь 2026 | Структурированные/гибридные адреса обязательны; мультиинструкционные MT101 отклоняются; Фаза 1 управления делами | Форматы адресов должны соответствовать; некоторые MT-сообщения будут отклонены |
| Конец 2026 | Начало подписки на получение CAMT.052/.053/.054 | Финансовые учреждения могут начать получать нативные ISO-выписки |
| Ноябрь 2027 | Все финансовые учреждения должны принимать CAMT.053 нативно | SWIFT прекращает конвертацию MT в ISO; ваши системы должны разбирать CAMT напрямую |
| Ноябрь 2028 | Полное прекращение MT940/MT942/MT950/MT900/MT910 | Устаревшие форматы выписок более не доступны; CAMT.052/.053/.054 — единственный вариант |
Что меняется в вашем коде
Раньше: только MT940
from bankstatementparser import Mt940Parser
parser = Mt940Parser("statement.mt940")
df = parser.parse()
Теперь: оба формата с автоопределением
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
Функция detect_statement_format() определяет, является ли файл MT940, CAMT.053, PAIN.001 или другим поддерживаемым форматом. Функция create_parser() возвращает нужный парсер. Ваш последующий код работает одинаково независимо от исходного формата.
CAMT.053 и MT940: ключевые различия
| Характеристика | MT940 | CAMT.053 |
|---|---|---|
| Полнота данных | Ограниченные поля | В 3–5 раз больше данных на транзакцию |
| Набор символов | Ограниченный (кодировка SWIFT) | Полный Unicode |
| Структура | Плоский текст с тегами | XML с пространствами имён |
| Отчётность по балансам | Только начальный/конечный | Несколько типов балансов |
| Ссылки | Одно поле ссылки | Несколько типов ссылок |
| Валюты | Базовая поддержка | Полная мультивалютность с обменными курсами |
Как помогает Bank Statement Parser
- Единый API: разбор MT940, CAMT.053 и PDF-выписок с одним workflow, формирующим единообразный DataFrame.
- Автоопределение: не нужно заранее знать формат.
detect_statement_format()определяет его автоматически. - Гибридный PDF-pipeline: банки, предоставляющие только PDF-выписки в период перехода, обрабатываются через
smart_ingest()с автоматической проверкой баланса. - Независимость от пространств имён: работает с любым вариантом CAMT.053 (001.02, 001.04 или обёртки банков) без настройки.
- Мультивалютная проверка:
verify_balance_multi_currency()проверяет Золотое правило по каждой группе валют — важно для мультивалютных CAMT-выписок. - Streaming: обработка больших CAMT-файлов (50 МБ+, 50 000+ транзакций) с ограниченной памятью.
- Экспорт в бухгалтерию: прямой экспорт в журналы hledger или beancount для казначейского учёта.
- Тестирование миграции: параллельный запуск обоих парсеров на одном диапазоне дат для проверки согласованности результатов перед переключением.
Начало работы
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
Для PDF-выписок от банков, ещё не предоставляющих структурированный CAMT-экспорт:
from bankstatementparser.hybrid import smart_ingest
result = smart_ingest("statement.pdf")
assert result.verification.status == "VERIFIED"
Сравнить с альтернативами ❯ | Смотрите реальные сценарии использ��вания ❯