Конфіденційність даних і відповідність
Чи залишають дані мою інфраструктуру?
Ні. Парсер банківських виписок працює як бібліотека без збереження стану. Уся обробка – розбір, редагування ідентифікаційної інформації, видобування архіву – відбувається у вашій локальній пам’яті середовища виконання. Ні викликів 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.
- Матриця відстеження, що відображає вхідні дані проекту для впровадження та перевірки.
Кожен випуск містить CycloneDX SBOM, контрольні суми 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+ МБ) використовує менше ніж у 2 рази більше пам’яті, ніж тест на 10 тис. транзакцій.
Для файлів, розмір яких перевищує 50 МБ (наприклад, пакети між хостами PAIN.001 із понад 100 тисячами платежів), синтаксичний аналізатор передає потоки через тимчасовий файл із видаленням простору імен на основі фрагментів — повний документ ніколи не завантажується в пам’ять.
Як безпечно обробляються архіви ZIP?
iter_secure_xml_entries()перевіряє кожного члена перед вилученням:
- Обмеження розміру запису (за замовчуванням 10 МБ на запис)
- Обмеження загального нестиснутого розміру (за замовчуванням 50 МБ)
- Обмеження ступеня стиснення (за замовчуванням 100:1), щоб запобігти бомбам ZIP
- Відхилення зашифрованого входу
Жоден файл не записується на диск. Байти XML передаються безпосередньо до аналізатора черезfrom_bytes().
Чи можу я аналізувати кілька файлів паралельно?
Так. Використовуйтеparse_files_parallel()який розподіляє роботу між aProcessPoolExecutor:
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 | Відкрита фінансова біржа | .ofx |
OfxParser |
| QFX | Quicken Financial Exchange | .qfx |
QfxParser |
| MT940 | Стандарт SWIFT | .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") автоматично визначаються та об’єднуються в одну підписану суму.
Що таке вихідний формат?
Усі парсери створюють стандартизовані pandas DataFrames із узгодженими типами стовпців:
| Формат | Ключові стовпці |
|---|---|
| CAMT | Amount, Currency, DrCr, Debtor, Creditor, Reference, ValDt, BookgDt, AccountId |
| PAIN.001 | PmtInfId, PmtMtd, InstdAmt, Currency, CdtrNm, EndToEndId, MsgId, CreDtTm, NbOfTxs |
| CSV/OFX/QFX/MT940 | date, description, amount(нормований) |
Ви також можете експортувати у CSV, JSON, Excel або конвертувати у Polars DataFrames.
Робочі процеси Казначейства
Як аналізатор обробляє мультивалютні звіти?
Кожна транзакція зберігає свою початкову валюту без прихованої конвертації.Currencyполе витягується з XMLCcyатрибут на транзакцію. Мультивалютні звіти залишаються без змін. Theget_account_balances()метод повертає початкові та кінцеві залишки на рахунок із оригінальними кодами валют. Міжвалютне узгодження залежить від вашої подальшої логіки, де ви контролюєте джерело обмінного курсу.
Чи підтримує аналізатор як вихідні, так і вхідні формати?
Так.Pain001Parserобробляє файли ініціації кредитних переказів ISO 20022 PAIN.001 (вихідні платежі).CamtParserобробляє файли звітів CAMT.053 від банку до клієнта (вхідні звіти). Обидва підтримують потокове передавання, редагування ідентифікаційної інформації та експорт у CSV, JSON і Excel. використанняdetect_statement_format()щоб автоматично визначити формат.
Що станеться, якщо запис транзакції має неправильний формат?
Поведінка залежить від режиму аналізу:
parse()(пакетний режим) -- Неправильні записи без обов’язкових полів (Amount,Currency, абоCdtDbtInd) пропускаються з журналом попереджень. Решта оператора аналізується нормально.parse_streaming()(потоковий режим) -- Помилки аналізу поширюються негайно як винятки. Без тихої втрати даних. Така швидка поведінка є навмисною для фінансових робочих процесів, де потрібно враховувати кожну транзакцію.
Як працює дедуплікація?
TheDeduplicatorклас виявляє точні дублікати та ймовірні збіги із зрозумілими балами достовірності:
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 Bomb Protection: обмеження ступеня стиснення, обмеження розміру запису, відхилення зашифрованого запису
- Path Traversal Prevention: небезпечний список блокувань шаблонів і розділення символічних посилань
- Перевірка введених даних: обмеження розміру файлу (100 МБ за замовчуванням), перевірка розширення/формату
- Ланцюг поставок: хеш-блоковані залежності SHA-256, CycloneDX SBOM, атестація походження збірки
- Підписані комісії: застосовуються в CI
Як аналізатор банківських виписок порівнюється з pyiso20022?
pyiso20022 — це широкий набір інструментів ISO 20022, який генерує класи даних Python зі схем ISO XML. Він охоплює широкий спектр типів повідомлень ISO 20022 (PACS, PAIN, CAMT, ADMI) із перевіркою схеми. Парсер банківських виписок спеціально створений для аналізу банківських виписок із підтримкою потокового передавання, редагування ідентифікаційної інформації, дедуплікації та уніфікованого 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, що робить його ідеальним для перехідного періоду.