Кратко: Bank Statement Parser — это библиотека Python с открытым исходным кодом, которая разбирает семь форматов банковских выписок (CAMT.053, PAIN.001, CSV, OFX, QFX, MT940 и PDF) в DataFrames pandas. Гибридный PDF-pipeline с проверкой баланса, REST API, обогащение данных, экспорт в бухгалтерию, пропускная способность 27 000+ транзакций/с.
Bank Statement Parser — это библиотека Python с открытым исходным кодом, которая разбирает банковские выписки семи форматов в структурированные DataFrames pandas. Детерминированное ядро обрабатывает структурированные форматы локально, без сетевых вызовов. Опциональный гибридный PDF-pipeline направляет запросы через локальные LLM (через Ollama) для цифровых и сканированных выписок.
Для кого это?
- Казначейские команды, переходящие с MT940 на CAMT.053, которым нужен парсер для старых и новых форматов в период миграции, а также для PDF-выписок от банков без структурированного экспорта.
- Разработчики финтех-приложений, создающие pipeline сверки, отчётности или учёта, которым нужна одна зависимость со встроенной проверкой баланса, категоризацией и экспортом в бухгалтерию.
- Команды комплаенса, которым требуется маскирование PII по умолчанию, детерминированный вывод и проверка по Золотому правилу для выявления расхождений до попадания в книгу учёта.
- Пользователи plaintext-accounting, которые хотят автоматически загружать PDF-выписки в журналы hledger или beancount.
- Любой, кто не готов отправлять конфиденциальные данные в сторонний SaaS, когда есть локальный инструмент с открытым кодом.
Поддерживаемые форматы
| Формат | Стандарт | Типы файлов | Парсер/Метод |
|---|---|---|---|
| CAMT.053 | ISO 20022 Bank-to-Customer Statement | .xml |
CamtParser |
| PAIN.001 | ISO 20022 Credit Transfer Initiation | .xml |
Pain001Parser |
| CSV | Общий банковский экспорт | .csv |
CsvStatementParser |
| OFX | Open Financial Exchange | .ofx |
OfxParser |
| QFX | Quicken Financial Exchange | .qfx |
QfxParser |
| MT940 | Стандарт SWIFT | .mt940, .sta |
Mt940Parser |
| Цифровые и сканированные выписки | .pdf |
smart_ingest() |
Все форматы создают нормализованные DataFrames pandas с едиными именами столбцов. Дальнейшая обработка не зависит от формата.
Ключевые возможности
- Гибридный PDF-pipeline:
smart_ingest()направляет PDF по трём путям — детерминированное извлечение таблиц, Text-LLM или Vision-LLM — с автоматической проверкой баланса по Золотому правилу. - Автоопределение формата:
detect_statement_format()определяет формат;create_parser()создаёт нужный парсер. - Проверка баланса: Золотое правило (
opening + credits − debits == closing) со статусами VERIFIED/DISCREPANCY/FAILED. - Мультивалютная проверка:
verify_balance_multi_currency()группирует транзакции по валютам для независимой проверки. - REST API: микросервис FastAPI с эндпоинтами
/ingestи/healthдля промышленного развёртывания. - Обогащение данных: категоризация транзакций на основе LLM с подключаемыми схемами (по умолчанию 13 категорий Plaid).
- Интерактивный просмотр: разбор расхождений с действиями accept/edit/skip/delete через
--type review. - Экспорт в бухгалтерию:
to_hledger()иto_beancount()для plaintext-accounting. - Массовое сканирование:
scan_and_ingest()обрабатывает деревья каталогов с автоматической дедупликацией между файлами. - Маппинг счетов: правила маппинга счетов на основе регулярных выражений из JSON-конфигурации для экспорта в бухгалтерию.
- Потоковый разбор: обработка больших файлов (50 МБ+, 50 000+ транзакций) с ограниченной памятью через
parse_streaming(). - Параллельная обработка: разбор нескольких файлов одновременно через
parse_files_parallel()с ProcessPoolExecutor. - Дедупликация: идемпотентный
transaction_hash(MD5-отпечаток) для безопасной инкрементальной загрузки. - Разбор в памяти:
from_string()иfrom_bytes()для SFTP и API-сценариев без дискового ввода-вывода. - Безопасная обработка ZIP:
iter_secure_xml_entries()с лимитом степени сжатия, ограничением размера записи и отклонением зашифрованных записей. - Экспорт: CSV, JSON, Excel (
.xlsx), Polars DataFrames, журналы hledger и beancount.
Безопасность и конфиденциальность
- Маскирование PII: имена, IBAN и адреса маскируются по умолчанию в выводе CLI. Включите полные данные через
--show-pii. - Защита от XXE: XML-парсинг использует
resolve_entities=False,no_network=True,load_dtd=False. - Защита от ZIP-бомб: лимит степени сжатия (100:1 по умолчанию), ограничение размера записи (10 МБ), отклонение зашифрованных записей.
- Предотвращение обхода путей: блокировка опасных шаблонов и разрешение символических ссылок.
- Безопасность цепочки поставок: зависимости с SHA-256 hash-lock, CycloneDX SBOM, аттестация происхождения сборки.
- Только локальные LLM: гибридный PDF-pipeline использует Ollama для локального инференса — данные не отправляются в облачные API.
Производительность
| Метрика | Значение |
|---|---|
| Пропускная способность CAMT.053 | 27 000+ транзакций/с |
| Пропускная способность PAIN.001 | 52 000+ транзакций/с |
| Задержка на транзакцию (CAMT) | 37 микросекунд |
| Задержка на транзакцию (PAIN.001) | 19 микросекунд |
| Время до первого результата | < 2 мс |
| Масштабирование памяти (1K–50K транзакций) | Постоянное (streaming) |
| Покрытие тестами | 100% покрытие ветвей |
| Тесты | 718 в 29 тестовых файлах |
Начните работу
Перейти к установке и примерам ❯
"GitHub Repository"