Primeros pasos

Comience a crear aplicaciones seguras con el Analizador de extractos bancarios

Requisitos

Instalación

pip install bankstatementparser

Para soporte de DataFrames de Polars:

pip install bankstatementparser[polars]

Inicio rápido

Detectar automáticamente y analizar cualquier formato

from bankstatementparser import create_parser, detect_statement_format

fmt = detect_statement_format("transactions.ofx")
parser = create_parser("transactions.ofx", fmt)
df = parser.parse()  # pandas DataFrame
print(df.head())

Esto funciona con archivos .xml (CAMT/PAIN.001), .csv, .ofx, .qfx, .mt940 y .sta.

Analizar CAMT.053

from bankstatementparser import CamtParser

parser = CamtParser("statement.xml")
transactions = parser.parse()

Analizar PAIN.001

from bankstatementparser import Pain001Parser

parser = Pain001Parser("payment.xml")
payments = parser.parse()

Streaming de archivos grandes

Para archivos con miles de transacciones, use streaming para mantener la memoria acotada:

parser = CamtParser("large_statement.xml")
for transaction in parser.parse_streaming(redact_pii=True):
    process(transaction)  # La memoria permanece constante

Análisis en memoria

Analice desde bytes sin E/S de disco -- útil para flujos de trabajo SFTP o API:

xml_bytes = download_from_sftp()
parser = CamtParser.from_bytes(xml_bytes, source_name="daily.xml")
transactions = parser.parse()

Procesamiento de archivos en paralelo

Analice múltiples archivos simultáneamente:

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), "filas")

Deduplicación

Detecte duplicados exactos y coincidencias sospechosas con puntuaciones de confianza:

from bankstatementparser import CamtParser, Deduplicator

parser = CamtParser("statement.xml")
dedup = Deduplicator()
result = dedup.deduplicate(dedup.from_dataframe(parser.parse()))

print(f"Únicos: {len(result.unique_transactions)}")
print(f"Duplicados exactos: {len(result.exact_duplicates)}")
print(f"Coincidencias sospechosas: {len(result.suspected_matches)}")

Procesamiento seguro de ZIP

Procese archivos XML comprimidos con comprobaciones de seguridad integradas (protección contra bombas, rechazo de entradas cifradas):

from bankstatementparser import iter_secure_xml_entries, CamtParser

for entry in iter_secure_xml_entries("statements.zip"):
    parser = CamtParser.from_bytes(entry.xml_bytes, source_name=entry.source_name)
    print(f"{entry.source_name}: {len(parser.parse())} transacciones")

Exportación

parser = CamtParser("statement.xml")
parser.export_csv("output.csv")
parser.export_json("output.json")

# Polars (requiere bankstatementparser[polars])
polars_df = parser.to_polars()

Uso de la CLI

# Analizar y mostrar
python -m bankstatementparser.cli --type camt --input statement.xml

# Exportar a CSV
python -m bankstatementparser.cli --type camt --input statement.xml --output transactions.csv

# Streaming con PII visible
python -m bankstatementparser.cli --type camt --input statement.xml --streaming --show-pii

Opciones de la CLI:

Configuración del entorno de desarrollo local

git clone https://github.com/sebastienrousseau/bankstatementparser.git
cd bankstatementparser
python3 -m venv .venv && source .venv/bin/activate
pip install poetry && poetry install --with dev

Ejecutar la suite de pruebas:

pytest

Referencia de la API

Clases de analizadores

Clase Formato Importación
CamtParser CAMT.053 (ISO 20022) from bankstatementparser import CamtParser
Pain001Parser PAIN.001 (ISO 20022) from bankstatementparser import Pain001Parser
CsvStatementParser CSV from bankstatementparser import CsvStatementParser
OfxParser OFX from bankstatementparser import OfxParser
QfxParser QFX from bankstatementparser import QfxParser
Mt940Parser MT940 from bankstatementparser import Mt940Parser

Funciones de utilidad

Función Propósito
detect_statement_format(path) Detectar automáticamente el formato del archivo
create_parser(path, fmt) Crear el analizador apropiado
parse_files_parallel(paths) Analizar múltiples archivos simultáneamente
iter_secure_xml_entries(zip_path) Iterar entradas ZIP de forma segura

Clases de datos

Clase Propósito
Deduplicator Detectar transacciones duplicadas
DeduplicationResult Resultado con únicos, exactos y coincidencias sospechosas
InputValidator Validar rutas de archivos y formatos
Transaction Registro de transacción normalizado
FileResult Resultado del análisis en paralelo
ZipXMLSource Envoltorio de miembro ZIP

Excepciones

Excepción Cuándo se lanza
ParserError Fallos de análisis
ExportError Fallos de exportación (CSV/JSON/Excel)
ValidationError Fallos de validación de entrada
ZipSecurityError Fallos de comprobación de seguridad ZIP