Bank Statement Parser решает реальные финансовые задачи: загрузка PDF-выписок, миграция MT940-to-CAMT, автоматическая сверка с проверкой баланса, pipeline комплаенса, экспорт в plaintext-accounting, развёртывание REST API, массовое сканирование и консолидация данных из нескольких банков.
Загрузка PDF-выписок
Результат: разбор цифровых и сканированных PDF-выписок с автоматической проверкой баланса — без облачных API, данные не покидают вашу машину.
Гибридный PDF-pipeline направляет каждый PDF по оптимальному пути извлечения и проверяет каждый результат.
from bankstatementparser.hybrid import smart_ingest
result = smart_ingest("statement.pdf")
print(result.source_method) # "deterministic" | "llm" | "vision"
print(result.verification.status) # VERIFIED | DISCREPANCY | FAILED
# Review discrepancies interactively
# bankstatementparser --type review --input result.json
Массовая обработка выписок
Результат: сканирование деревьев каталогов (сотни PDF, XML, CSV) с автоматической дедупликацией между файлами за один вызов.
from bankstatementparser.hybrid import scan_and_ingest
batch = scan_and_ingest("statements/2026/", pattern="**/*.pdf")
print(f"Files: {len(batch.results)}, Unique txns: {batch.unique_count}")
Казначейство: миграция MT940 на CAMT.053
Результат: один вызов API обрабатывает и MT940, и CAMT.053 в окне миграции SWIFT (ноябрь 2025 — ноябрь 2028). Отдельные pipeline разбора не нужны.
Казначейские команды по всему миру переходят с MT940 на CAMT.053 до дедлайна SWIFT в ноябре 2027 года. Bank Statement Parser работает с обоими форматами через единый API, что делает переход бесшовным.
from bankstatementparser import create_parser, detect_statement_format
# Process both MT940 and CAMT.053 with the same code
for file in daily_statement_files:
fmt = detect_statement_format(file)
parser = create_parser(file, fmt)
df = parser.parse()
load_to_treasury_system(df)
Автоматическая сверка с проверкой баланса
Результат: DataFrames, не зависящие от формата, с проверкой по Золотому правилу и дедупликацией выявляют ошибки и дубли до попадания в книгу учёта.
Разбирайте банковские выписки, проверяйте балансы и автоматически сопоставляйте с внутренними записями.
from bankstatementparser import CamtParser, Deduplicator
from bankstatementparser.hybrid import verify_balance_multi_currency
parser = CamtParser("bank_statement.xml")
bank_txns = parser.parse()
# Verify balances per currency
verification = verify_balance_multi_currency(bank_txns)
for ccy, result in verification.items():
assert result.status == "VERIFIED", f"{ccy} balance mismatch!"
# Deduplicate before reconciliation
dedup = Deduplicator()
result = dedup.deduplicate(dedup.from_dataframe(bank_txns))
clean_txns = result.unique_transactions
# Match against internal records
unmatched = reconcile(clean_txns, internal_ledger)
Plaintext-accounting (hledger / beancount)
Результат: автоматическая загрузка PDF-выписок и экспорт категоризированных транзакций в журналы hledger или beancount.
from bankstatementparser.hybrid import smart_ingest
from bankstatementparser.enrichment import Categorizer
from bankstatementparser.export import to_hledger
result = smart_ingest("statement.pdf")
categorizer = Categorizer()
enriched = categorizer.categorize_batch(result.transactions)
journal = to_hledger(enriched, account="Assets:Bank:Checking")
Развёртывание REST API
Результат: развёртывание Bank Statement Parser как микросервиса, принимающего файлы выписок по HTTP и возвращающего структурированный JSON.
# Start the API server
bankstatementparser-api --port 8000
# Ingest a statement
curl -X POST http://localhost:8000/ingest \
-F "file=@statement.pdf"
Pipeline комплаенса и аудита
Результат: детерминированный вывод, автоматическое маскирование PII и проверка по Золотому правилу создают аудит-готовые журналы, соответствующие требованиям воспроизводимости.
from bankstatementparser import CamtParser
parser = CamtParser("statement.xml")
# Stream with PII redacted for audit logs
for txn in parser.parse_streaming(redact_pii=True):
audit_log.write(txn)
# Export full data for secure internal processing
parser.export_csv("archive/statement.csv")
SFTP-to-DataFrame
Результат: разбор напрямую из байтов без дискового ввода-вывода — нативная интеграция в SFTP и API-сценарии подключения к банку.
from bankstatementparser import CamtParser
xml_bytes = sftp_client.read("daily_statement.xml")
parser = CamtParser.from_bytes(xml_bytes, source_name="daily.xml")
df = parser.parse()
Консолидация нескольких банков
Результат: параллельный разбор HSBC (CAMT), Barclays (MT940), Revolut (CSV), Wise (OFX) и Chase (PDF) формирует единый нормализованный набор данных.
from bankstatementparser import parse_files_parallel
results = parse_files_parallel([
"hsbc/camt053.xml",
"barclays/mt940.sta",
"revolut/transactions.csv",
"wise/statement.ofx",
])
all_transactions = pd.concat([r.transactions for r in results if r.status == "success"])
Пакетная обработка ZIP-архивов
Результат: встроенная защита от ZIP-бомб (лимит 100:1, ограничение 10 МБ на запись, отклонение зашифрованных записей) позволяет безопасно обрабатывать ежемесячные архивы выписок.
from bankstatementparser import iter_secure_xml_entries, CamtParser
for entry in iter_secure_xml_entries("monthly_statements.zip"):
parser = CamtParser.from_bytes(entry.xml_bytes, source_name=entry.source_name)
df = parser.parse()
save_to_warehouse(entry.source_name, df)
Сравнить с альтернативами ❯ | Спланировать миграцию на ISO 20022 ❯ | Начать работу ❯