Коротко: Bank Statement Parser — це бібліотека Python з відкритим кодом, яка аналізує сім форматів банківських виписок (CAMT.053, PAIN.001, CSV, OFX, QFX, MT940 та PDF) у pandas DataFrames. Гібридний PDF pipeline з перевіркою балансу, REST API, збагачення, експорт у бухгалтерію, пропускна здатність 27K+ tx/s.
Bank Statement Parser — це бібліотека Python з відкритим кодом, яка аналізує банківські виписки із семи форматів у структуровані pandas DataFrames. Детерміністичне ядро обробляє структуровані формати локально без мережевих викликів. Опціональний гібридний PDF pipeline маршрутизує через локальні LLM (через Ollama) для цифрових і сканованих виписок.
Для кого це?
- Команди казначейства, які мігрують з MT940 на CAMT.053 і потребують парсер, що обробляє старі та нові формати під час переходу, а також PDF-виписки від банків без структурованого експорту.
- Розробники фінтех-рішень, які будують pipeline звірки, звітності або обліку і хочуть єдину залежність із вбудованою перевіркою балансу, категоризацією та експортом у бухгалтерію.
- Команди комплаєнсу, яким потрібне приховування персональних даних за замовчуванням, детермінований результат та перевірка Золотим правилом, що виявляє розбіжності до потрапляння в бухгалтерію.
- Користувачі plaintext-accounting, які хочуть автоматичне завантаження з PDF банківських виписок напряму в журнали hledger або beancount.
- Будь-хто, хто відмовляється надсилати конфіденційні фінансові дані стороннім SaaS, коли локальний інструмент з відкритим кодом може виконати цю роботу.
Підтримувані формати
| Формат | Стандарт | Типи файлів | Парсер/Метод |
|---|---|---|---|
| CAMT.053 | ISO 20022 Виписка банку для клієнта | .xml |
CamtParser |
| PAIN.001 | ISO 20022 Ініціювання кредитового переказу | .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() |
Усі формати створюють нормалізовані pandas DataFrames з однаковими назвами стовпців, що робить подальшу обробку незалежною від формату.
Ключові можливості
- Гібридний PDF Pipeline:
smart_ingest()маршрутизує PDF через три шляхи — детерміністичне витягування таблиць, текстовий 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()обробляє дерева каталогів з автоматичною крос-файловою дедуплікацією. - Маппінг рахунків: Правила маппінгу рахунків на основі regex із JSON-конфігурації для експорту в бухгалтерію.
- Потоковий аналіз: Обробляйте великі файли (50 МБ+, 50K+ транзакцій) з обмеженою пам’яттю за допомогою
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.
Безпека та конфіденційність
- Приховування персональних даних: Імена, IBAN та адреси маскуються за замовчуванням у CLI. Увімкніть відображення через
--show-pii. - Захист від XXE: XML-аналіз використовує
resolve_entities=False,no_network=True,load_dtd=False. - Захист від ZIP-бомб: Обмеження коефіцієнта стиснення (за замовчуванням 100:1), ліміт розміру запису (10 МБ), відхилення зашифрованих записів.
- Запобігання обходу шляхів: Блокування небезпечних шаблонів та розв’язання символічних посилань.
- Безпека ланцюга постачань: Залежності із SHA-256 hash-блокуванням, CycloneDX SBOM, атестація походження збірки.
- Тільки локальні LLM: Гібридний PDF pipeline використовує Ollama для локального виведення — жодні дані не надсилаються до хмарних API.
Продуктивність
| Метрика | Значення |
|---|---|
| Пропускна здатність CAMT.053 | 27 000+ tx/s |
| Пропускна здатність PAIN.001 | 52 000+ tx/s |
| Затримка на транзакцію (CAMT) | 37 мікросекунд |
| Затримка на транзакцію (PAIN.001) | 19 мікросекунд |
| Час до першого результату | < 2 мс |
| Масштабування пам’яті (1K–50K tx) | Стале (streaming) |
| Покриття тестами | 100% покриття гілок |
| Тести | 718 у 29 тестових файлах |
Почніть роботу
Встановлення та приклади для початку ❯
"GitHub Repository"