En bref : Bank Statement Parser est une bibliothèque Python open source qui analyse sept formats de relevés bancaires (CAMT.053, PAIN.001, CSV, OFX, QFX, MT940 et PDF) en DataFrames pandas. Pipeline PDF hybride avec vérification du solde, API REST, enrichissement, export comptable, débit de 27 000+ tx/s.
Bank Statement Parser est une bibliothèque Python open source qui analyse les relevés bancaires dans sept formats et les convertit en DataFrames pandas structurés. Le moteur déterministe traite les formats structurés en local, sans aucun appel réseau. Le pipeline PDF hybride optionnel passe par des LLM locaux (via Ollama) pour les relevés numériques et scannés.
À qui s'adresse cette bibliothèque ?
- Équipes de trésorerie qui migrent de MT940 vers CAMT.053 et ont besoin d'un analyseur capable de gérer les anciens et les nouveaux formats pendant la transition, ainsi que les relevés PDF de banques sans export structuré.
- Développeurs fintech qui créent des pipelines de rapprochement, de reporting ou de comptabilité et veulent une seule dépendance avec vérification du solde, catégorisation et export comptable intégrés.
- Équipes de conformité qui exigent un masquage des données personnelles par défaut, une sortie déterministe et une vérification par la Règle d'or qui signale les écarts avant qu'ils n'atteignent le grand livre.
- Utilisateurs de comptabilité en texte brut qui souhaitent une ingestion automatisée des relevés bancaires PDF directement dans des journaux hledger ou beancount.
- Toute personne qui refuse d'envoyer des données financières sensibles à un SaaS tiers quand un outil local et open source peut faire le travail.
Formats pris en charge
| Format | Standard | Types de fichiers | Analyseur / Méthode |
|---|---|---|---|
| CAMT.053 | ISO 20022 Relevé banque-client | .xml |
CamtParser |
| PAIN.001 | ISO 20022 Initiation de virement | .xml |
Pain001Parser |
| CSV | Exports bancaires génériques | .csv |
CsvStatementParser |
| OFX | Open Financial Exchange | .ofx |
OfxParser |
| QFX | Quicken Financial Exchange | .qfx |
QfxParser |
| MT940 | Standard SWIFT | .mt940, .sta |
Mt940Parser |
| Relevés numériques et scannés | .pdf |
smart_ingest() |
Tous les formats produisent des DataFrames pandas normalisés avec des noms de colonnes cohérents. Le traitement en aval est ainsi indépendant du format.
Fonctionnalités clés
- Pipeline PDF hybride :
smart_ingest()achemine les PDF via trois voies — extraction déterministe de tableaux, text-LLM ou vision-LLM — avec vérification automatique du solde par la Règle d'or. - Détection automatique du format :
detect_statement_format()identifie le format ;create_parser()instancie le bon analyseur. - Vérification du solde : contrôle par la Règle d'or (
opening + credits − debits == closing) avec statut VERIFIED/DISCREPANCY/FAILED. - Vérification multi-devises :
verify_balance_multi_currency()regroupe les transactions par devise pour une vérification indépendante. - API REST : microservice FastAPI avec les endpoints
/ingestet/healthpour les déploiements en production. - Enrichissement : catégorisation des transactions par LLM avec schémas modulables (Plaid 13 catégories par défaut).
- Revue interactive : parcourez les écarts avec des actions accepter/modifier/ignorer/supprimer via
--type review. - Export comptable :
to_hledger()etto_beancount()pour les flux de comptabilité en texte brut. - Scan en masse :
scan_and_ingest()traite des arborescences de dossiers avec déduplication inter-fichiers automatique. - Mappage de comptes : règles de mappage de comptes basées sur des regex depuis un fichier JSON pour l'export comptable.
- Analyse en streaming : traitez de gros fichiers (50 Mo+, 50 000+ transactions) avec une mémoire bornée via
parse_streaming(). - Traitement parallèle : analysez plusieurs fichiers simultanément avec
parse_files_parallel()via ProcessPoolExecutor. - Déduplication :
transaction_hashidempotent (empreinte MD5) pour une ingestion incrémentale fiable. - Analyse en mémoire :
from_string()etfrom_bytes()pour les flux SFTP et API sans E/S disque. - Traitement ZIP sécurisé :
iter_secure_xml_entries()avec limites de taux de compression, plafonds de taille d'entrée et rejet des entrées chiffrées. - Export : CSV, JSON, Excel (
.xlsx), DataFrames Polars, journaux hledger et beancount.
Sécurité et confidentialité
- Masquage des données personnelles : les noms, IBAN et adresses sont masqués par défaut dans la sortie CLI. Activez l'affichage avec
--show-pii. - Protection XXE : l'analyse XML utilise
resolve_entities=False,no_network=True,load_dtd=False. - Protection contre les ZIP bombs : limites de taux de compression (100:1 par défaut), plafonds de taille d'entrée (10 Mo), rejet des entrées chiffrées.
- Prévention de la traversée de chemin : liste de blocage de motifs dangereux et résolution des liens symboliques.
- Sécurité de la chaîne d'approvisionnement : dépendances verrouillées par hash SHA-256, CycloneDX SBOM, attestation de provenance de build.
- LLM locaux uniquement : le pipeline PDF hybride utilise Ollama pour l'inférence locale — aucune donnée envoyée vers des API cloud.
Performance
| Métrique | Valeur |
|---|---|
| Débit CAMT.053 | 27 000+ tx/s |
| Débit PAIN.001 | 52 000+ tx/s |
| Latence par transaction (CAMT) | 37 microsecondes |
| Latence par transaction (PAIN.001) | 19 microsecondes |
| Temps jusqu'au premier résultat | < 2 ms |
| Mise à l'échelle mémoire (1 000 à 50 000 tx) | Constante (streaming) |
| Couverture des tests | 100 % des branches |
| Tests | 718 sur 29 fichiers de test |
Commencer
Démarrez avec l'installation et les exemples ❯
"Dépôt GitHub"