Конфиденциальность данных и соответствие требованиям
Покидают ли какие-либо данные мою инфраструктуру?
Нет. Анализатор банковских выписок работает как библиотека без сохранения состояния. Вся обработка — анализ, редактирование PII, извлечение архива — происходит в вашей локальной памяти времени выполнения. Никаких вызовов API, облачных сервисов и телеметрии. XML-парсеры усиленыno_network=True, блокируя весь исходящий доступ на уровне парсера. Ваши финансовые данные никогда не покидают вашу среду.
Как работает редактирование личных данных?
Чувствительные поля маскируются до того, как они достигнут логики вашего приложения. Парсер идентифицирует имена должников, имена кредиторов, номера IBAN и почтовые адреса, заменяя их на***REDACTED***в режиме консольного вывода и потоковой передачи.
- Редактирование включено по умолчанию в режиме вывода CLI и потоковой передачи.
- Экспорт файлов (CSV, JSON, Excel) сохраняет неотредактированные данные для последующей обработки.
- Включите получение полных данных с помощью
--show-piiв CLI илиredact_pii=Falseв API.
Является ли процесс извлечения детерминированным?
Да — при каждом запуске выводятся идентичные байты. Учитывая один и тот же входной файл, синтаксический анализатор каждый раз выдает один и тот же результат. Никакой случайности, никакого модельного вывода, никакой эвристической выборки. CI обеспечивает детерминизм с помощью 467 тестов при 100% покрытии ветвей, включая фаззинг на основе свойств с помощью гипотезы.
Каким стандартам соответствия соответствует проект?
В рамках проекта ведется документация, соответствующая стандарту ISO 13485, с полной отслеживаемостью:
- Количественный Реестр рисков с оценкой тяжести/вероятности и оценкой остаточного риска.
- План проверки и валидации, состоящий из 19 этапов и 5 этапов.
- Процедура контроля изменений с протоколами оценки воздействия и отката.
- Регистр SOUP, охватывающий все зависимости с уровнями риска и отслеживанием EOL.
- Матрица прослеживаемости, отображающая входные данные проекта для реализации и проверки.
Каждый выпуск включает в себя SBOM CycloneDX, контрольные суммы SHA-256 и подтверждение происхождения сборки GitHub.
Производительность и масштабируемость
Насколько быстро работает анализатор банковских выписок?
Пороги производительности проверяются в CI при каждом коммите:
| Метрика | Ценить |
|---|---|
| CAMT.053 пропускная способность | 27 000+ транзакций в секунду |
| Пропускная способность PAIN.001 | 52 000+ транзакций в секунду |
| Задержка каждой транзакции (CAMT) | 37 микросекунд |
| Задержка каждой транзакции (PAIN.001) | 19 микросекунд |
| Время первого результата | < 2 мс |
Как обрабатываются большие файлы?
Потоковая передача с ограниченной памятью — протестировано при 50 000 транзакций на файл. Использованиеparse_streaming()для постепенной обработки XML-файлов. Каждая транзакция выдается в виде словаря; элементы очищаются после обработки, чтобы предотвратить рост памяти. Память не масштабируется в зависимости от размера файла: тест с транзакциями 50 КБ (более 25 МБ) использует менее чем в два раза больше памяти, чем тест с транзакциями 10 КБ.
Для файлов, размер которых превышает 50 МБ (например, пакеты PAIN.001 между хостами с более чем 100 тысячами платежей), анализатор обрабатывает временный файл с разделением пространства имен на основе фрагментов — полный документ никогда не загружается в память.
Как безопасно обрабатываются ZIP-архивы?
iter_secure_xml_entries()проверяет каждого члена перед извлечением:
- Ограничение размера записи (по умолчанию 10 МБ на запись)
- Общий максимальный размер несжатого изображения (по умолчанию 50 МБ)
- Предельная степень сжатия (по умолчанию 100:1) для предотвращения ZIP-бомбы.
- Отклонение зашифрованного ввода
Ни один файл не записывается на диск. Байты XML передаются непосредственно в анализатор черезfrom_bytes().
Могу ли я анализировать несколько файлов параллельно?
Да. Используйтеparse_files_parallel()который распределяет работу поProcessPoolExecutor:
from bankstatementparser import parse_files_parallel
results = parse_files_parallel([
"statements/jan.xml",
"statements/feb.xml",
"statements/mar.xml",
])
for r in results:
print(r.path, r.status, len(r.transactions), "rows")
Поддерживаемые форматы
Какие форматы банковских выписок поддерживаются?
| Формат | Стандартный | Типы файлов | Класс парсера |
|---|---|---|---|
| CAMT.053 | Заявление банка к клиенту ISO 20022 | .xml |
CamtParser |
| БОЛЬ.001 | Инициирование кредитного перевода ISO 20022 | .xml |
Pain001Parser |
| CSV-файл | Общий банковский экспорт | .csv |
CsvStatementParser |
| ОФКС | Открытая финансовая биржа | .ofx |
OfxParser |
| QFX | Ускорить финансовый обмен | .qfx |
QfxParser |
| МТ940 | Стандарт СВИФТ | .mt940, .sta |
Mt940Parser |
Обрабатывает ли анализатор диалекты CAMT.053, специфичные для банка?
Да — по своей конструкции не зависит от пространства имен. Перед обработкой анализатор удаляет пространства имен XML, обрабатывая любой вариант CAMT.053 (camt.053.001.02, camt.053.001.04или проприетарные банковские оболочки) без настройки для конкретного пространства имен. XPath запрашивает структуру целевого элемента, а не URI пространства имен.
Для банков, которые упаковывают CAMT в индивидуальный конверт, используйтеfrom_string()илиfrom_bytes()для подачи внутреннего документа напрямую.
Могу ли я сопоставить собственные заголовки столбцов CSV со стандартной схемой?
Да — автоматическая нормализация, нулевая конфигурация.CsvStatementParserраспознает распространенные варианты заголовков:"Date", "Transaction Date", "Booking Date"все карты вdateполе."Amount", "Value", "Sum"сопоставить сamount. Разделить столбцы кредита/дебета (например,"Credit"и"Debit") обнаруживаются и объединяются в одну подписанную сумму автоматически.
Какой формат вывода?
Все парсеры создают стандартизированные DataFrames pandas с согласованными типами столбцов:
| Формат | Ключевые столбцы |
|---|---|
| КАМТ | Amount, Currency, DrCr, Debtor, Creditor, Reference, ValDt, BookgDt, AccountId |
| БОЛЬ.001 | PmtInfId, PmtMtd, InstdAmt, Currency, CdtrNm, EndToEndId, MsgId, CreDtTm, NbOfTxs |
| CSV/OFX/QFX/MT940 | date, description, amount(нормализованный) |
Вы также можете экспортировать в CSV, JSON, Excel или конвертировать в Polars DataFrames.
Рабочие процессы казначейства
Как парсер обрабатывает мультивалютные операторы?
Каждая транзакция сохраняет свою исходную валюту — без неявной конвертации.Currencyполе извлекается из XMLCcyатрибут каждой транзакции. Мультивалютные выписки остаются без изменений.get_account_balances()Метод возвращает начальные и конечные балансы по счету с исходными кодами валют. Межвалютная сверка остается на усмотрение вашей последующей логики, где вы контролируете источник обменного курса.
Поддерживает ли парсер исходящие и входящие форматы?
Да.Pain001Parserобрабатывает файлы инициации кредитного перевода ISO 20022 PAIN.001 (исходящие платежи).CamtParserобрабатывает файлы выписок банка-клиента CAMT.053 (входящая отчетность). Оба поддерживают потоковую передачу, редактирование личных данных и экспорт в CSV, JSON и Excel. Использоватьdetect_statement_format()для автоматического определения формата.
Что происходит, если запись транзакции имеет неправильный формат?
Поведение зависит от режима синтаксического анализа:
parse()(пакетный режим) -- Неверные записи, в которых отсутствуют обязательные поля (Amount,Currency, илиCdtDbtInd) пропускаются с журналом предупреждений. Остальная часть оператора анализируется нормально.parse_streaming()(режим потоковой передачи) -- Ошибки анализа распространяются немедленно как исключения. Никакой тихой потери данных. Такое отказоустойчивое поведение предназначено для финансовых рабочих процессов, где необходимо учитывать каждую транзакцию.
Как работает дедупликация?
Deduplicatorкласс обнаруживает точные дубликаты и предполагаемые совпадения с объяснимыми показателями достоверности:
from bankstatementparser import CamtParser, Deduplicator
parser = CamtParser("statement.xml")
dedup = Deduplicator()
result = dedup.deduplicate(dedup.from_dataframe(parser.parse()))
print(f"Unique: {len(result.unique_transactions)}")
print(f"Exact duplicates: {len(result.exact_duplicates)}")
print(f"Suspected matches: {len(result.suspected_matches)}")
Установка и совместимость
Как установить анализатор банковских выписок?
pip install bankstatementparser
Для дополнительной поддержки Polars DataFrame:
pip install bankstatementparser[polars]
Какие версии Python поддерживаются?
Python версий с 3.9 по 3.14. Все версии проверены в CI 467 тестами при 100% покрытии ветвей.
Каковы зависимости?
Библиотека имеет 5 прямых зависимостей:
lxml-- Анализ XML с усилением безопасности -pandas-- DataFrames и манипулирование данными -openpyxl-- Экспорт в Excel -pydantic-- Проверка данных и модели -defusedxml-- XXE-защита
Все зависимости имеют версии с хеш-блокировкой SHA-256. CycloneDX SBOM отображает каждый компонент времени выполнения.
Работает ли он на macOS, Linux и Windows?
Да. Библиотека работает в macOS, Linux и Windows (через WSL). Он не имеет зависимостей от конкретной платформы.
Воспроизводимость и безопасность
Как проверить воспроизводимость?
python -m pytest # 467 tests, 100% branch coverage
python scripts/verify_locked_hashes.py # SHA-256 hash verification
git log --show-signature -1 # Verify commit signature
Какие встроенные средства защиты?
- Защита XXE:
resolve_entities=False,no_network=True,load_dtd=False - Защита от ZIP-бомбы: ограничения степени сжатия, ограничения размера записи, отклонение зашифрованной записи.
- Предотвращение обхода пути: черный список опасных шаблонов и разрешение символических ссылок.
- Проверка ввода: ограничения на размер файла (по умолчанию 100 МБ), проверка расширения/формата.
- Цепочка поставок: зависимости с хеш-блокировкой SHA-256, CycloneDX SBOM, подтверждение происхождения сборки.
- Подписанные коммиты: принудительно в CI.
Чем анализатор банковских выписок отличается от pyiso20022?
pyiso20022 — это обширный набор инструментов ISO 20022, который генерирует классы данных Python из XML-схем ISO. Он охватывает широкий спектр типов сообщений ISO 20022 (PACS, PAIN, CAMT, ADMI) с проверкой схемы. Анализатор банковских выписок специально создан для анализа банковских выписок с поддержкой потоковой передачи, редактирования PII, дедупликации и унифицированного API для шести форматов, включая форматы, отличные от ISO (CSV, OFX, QFX, MT940). Если вам необходимо проанализировать банковские выписки в DataFrames с безопасностью производственного уровня, используйте анализатор банковских выписок. Если вам нужно работать с полным каталогом сообщений ISO 20022, используйте pyiso20022.
Каковы сроки перехода на SWIFT ISO 20022?
SWIFT опубликовал график поэтапной миграции:
- Ноябрь 2026 г.: структурированные и гибридные адреса станут обязательными. Сообщения с несколькими инструкциями MT101 будут отклонены. Начинается Фаза 1 управления делами.
- Ноябрь 2027 г.: все финансовые учреждения должны иметь возможность получать выписки CAMT.053 в исходном виде. SWIFT прекратит преобразование MT в формат ISO.
- Ноябрь 2028 г.: полное прекращение поддержки MT940, MT942, MT950, MT900 и MT910. Они будут заменены эквивалентами CAMT.052, CAMT.053 и CAMT.054.
Анализатор банковских выписок поддерживает как устаревший формат MT940, так и современные форматы CAMT.053/PAIN.001, что делает его идеальным для переходного периода.