TL;DR: Bank Statement Parser es una biblioteca Python de código abierto que analiza siete formatos de extractos bancarios (CAMT.053, PAIN.001, CSV, OFX, QFX, MT940 y PDF) en pandas DataFrames. Pipeline híbrido para PDF con verificación de saldo, REST API, enriquecimiento, exportación contable, más de 27K tx/s de rendimiento.
Bank Statement Parser es una biblioteca Python de código abierto que analiza extractos bancarios en siete formatos y los convierte en pandas DataFrames estructurados. El núcleo determinista procesa formatos estructurados de forma local sin llamadas de red. El pipeline híbrido opcional para PDF recurre a LLMs locales (vía Ollama) para extractos digitales y escaneados.
¿Para quién es esto?
- Equipos de tesorería que migran de MT940 a CAMT.053 y necesitan un analizador que maneje formatos antiguos y nuevos durante la transición, además de extractos PDF de bancos que no ofrecen exportaciones estructuradas.
- Desarrolladores fintech que crean pipelines de conciliación, informes o contabilidad y desean una única dependencia con verificación de saldo, categorización y exportación contable integradas.
- Equipos de cumplimiento que necesitan redacción de PII por defecto, salida determinista y verificación de la Regla de Oro que detecte discrepancias antes de llegar al libro mayor.
- Usuarios de contabilidad en texto plano que desean ingesta automatizada desde extractos bancarios en PDF directamente a diarios hledger o beancount.
- Cualquier persona que se niegue a enviar datos financieros sensibles a un SaaS de terceros cuando una herramienta local de código abierto puede hacer el trabajo.
Formatos admitidos
| Formato | Estándar | Tipos de archivo | Analizador/Método |
|---|---|---|---|
| CAMT.053 | ISO 20022 Extracto banco-a-cliente | .xml |
CamtParser |
| PAIN.001 | ISO 20022 Iniciación de transferencia de crédito | .xml |
Pain001Parser |
| CSV | Exportaciones bancarias genéricas | .csv |
CsvStatementParser |
| OFX | Open Financial Exchange | .ofx |
OfxParser |
| QFX | Quicken Financial Exchange | .qfx |
QfxParser |
| MT940 | Estándar SWIFT | .mt940, .sta |
Mt940Parser |
| Extractos digitales y escaneados | .pdf |
smart_ingest() |
Todos los formatos producen pandas DataFrames normalizados con nombres de columna consistentes, lo que hace que el procesamiento posterior sea independiente del formato.
Capacidades clave
- Pipeline híbrido para PDF:
smart_ingest()enruta los PDF por tres rutas — extracción determinista de tablas, texto-LLM o visión-LLM — con verificación automática de saldo mediante la Regla de Oro. - Detección automática de formato:
detect_statement_format()identifica el formato;create_parser()instancia el analizador correcto. - Verificación de saldo: Comprobación de la Regla de Oro (
opening + credits − debits == closing) con estado VERIFIED/DISCREPANCY/FAILED. - Verificación multidivisa:
verify_balance_multi_currency()agrupa transacciones por divisa para verificación independiente. - REST API: Microservicio FastAPI con endpoints
/ingesty/healthpara despliegues en producción. - Enriquecimiento: Categorización de transacciones con LLM y esquemas configurables (13 categorías Plaid por defecto).
- Revisión interactiva: Revise discrepancias con acciones aceptar/editar/omitir/eliminar mediante
--type review. - Exportación contable:
to_hledger()yto_beancount()para flujos de contabilidad en texto plano. - Escaneo masivo:
scan_and_ingest()procesa árboles de carpetas con deduplicación automática entre archivos. - Mapeo de cuentas: Reglas de mapeo de cuentas basadas en regex desde configuración JSON para exportación contable.
- Análisis en streaming: Procese archivos grandes (50 MB+, 50K+ transacciones) con memoria acotada usando
parse_streaming(). - Procesamiento paralelo: Analice varios archivos de forma concurrente con
parse_files_parallel()usando ProcessPoolExecutor. - Deduplicación:
transaction_hashidempotente (huella MD5) para ingesta incremental segura. - Análisis en memoria:
from_string()yfrom_bytes()para flujos de trabajo SFTP y API sin E/S de disco. - Procesamiento ZIP seguro:
iter_secure_xml_entries()con límites de ratio de compresión, límites de tamaño de entrada y rechazo de entradas cifradas. - Exportación: CSV, JSON, Excel (
.xlsx), Polars DataFrames, diarios hledger y beancount.
Seguridad y privacidad
- Redacción de PII: Nombres, IBANs y direcciones se enmascaran por defecto en la salida CLI. Active con
--show-pii. - Protección XXE: El análisis XML usa
resolve_entities=False,no_network=True,load_dtd=False. - Protección contra ZIP Bomb: Límites de ratio de compresión (100:1 por defecto), límites de tamaño de entrada (10 MB), rechazo de entradas cifradas.
- Prevención de cruce de rutas: Lista de bloqueo de patrones peligrosos y resolución de enlaces simbólicos.
- Seguridad de la cadena de suministro: Dependencias con bloqueo hash SHA-256, CycloneDX SBOM, certificación de procedencia de compilación.
- Solo LLMs locales: El pipeline híbrido para PDF usa Ollama para inferencia local — ningún dato se envía a APIs en la nube.
Rendimiento
| Métrica | Valor |
|---|---|
| Rendimiento CAMT.053 | 27.000+ tx/s |
| Rendimiento PAIN.001 | 52.000+ tx/s |
| Latencia por transacción (CAMT) | 37 microsegundos |
| Latencia por transacción (PAIN.001) | 19 microsegundos |
| Tiempo hasta el primer resultado | < 2 ms |
| Escalado de memoria (1K-50K tx) | Constante (streaming) |
| Cobertura de pruebas | 100% cobertura de ramas |
| Pruebas | 718 en 29 archivos de prueba |
Empiece a construir
Comience con la instalación y ejemplos ❯
"Repositorio GitHub"