Парсер банковских выписок

Реальные приложения

Парсер банковских выписок обрабатывает реальные финансовые рабочие процессы: миграцию с MT940 на CAMT для отделов казначейства, автоматическую сверку, конвейеры обеспечения соответствия с редактированием PII, прием SFTP, консолидацию нескольких банков и безопасную пакетную обработку ZIP.

Казначейство: переход с MT940 на CAMT.053

Результат. Во время периода миграции SWIFT (ноябрь 2025 г. – ноябрь 2028 г.) один вызов API обрабатывает как MT940, так и CAMT.053, что устраняет необходимость в отдельных конвейерах анализа.

Казначейские команды по всему миру переходят с MT940 на CAMT.053 в преддверии крайнего срока SWIFT в ноябре 2027 года. Анализатор банковских выписок обрабатывает оба формата с помощью единого 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)

Автоматическая сверка

Результат: фреймы данных, не зависящие от формата, со встроенной дедупликацией сокращают усилия по сопоставлению вручную и позволяют улавливать повторяющиеся записи до того, как они попадут в ваш реестр.

Анализируйте банковские выписки и автоматически сопоставляйте их с внутренними записями. Унифицированный вывод DataFrame делает логику согласования независимой от формата.

from bankstatementparser import CamtParser, Deduplicator

parser = CamtParser("bank_statement.xml")
bank_txns = parser.parse()

# 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)

Конвейеры соответствия и аудита

Результат: Детерминированный вывод и автоматическое редактирование личных данных позволяют создавать готовые к аудиту журналы, которые удовлетворяют нормативным требованиям к воспроизводимости без использования дополнительных инструментов.

Создавайте готовые к аудиту конвейеры с редактированием личных данных и детерминированным выводом. Каждый прогон дает идентичные результаты для одних и тех же входных данных, что соответствует нормативным требованиям воспроизводимости.

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.

Многие банки доставляют выписки через SFTP. Анализируйте напрямую из байтов без записи на диск.

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) создает единый нормализованный набор данных за один вызов.

Консолидируйте выписки из нескольких банков, используя разные форматы, в единый нормализованный набор данных.

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 МБ, отклонение зашифрованного ввода) позволяет безопасно обрабатывать ежемесячные архивы выписок.

Надежно обрабатывайте сжатые архивы выписок с помощью встроенной защиты от ZIP-бомбы.

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 ❯ | Начало работы ❯