Seguridad

Cómo protegemos sus datos financieros

TL;DR: Bank Statement Parser procesa todos los datos de forma local, redacta PII por defecto, refuerza el análisis XML contra ataques XXE, ejecuta LLMs localmente vía Ollama y se distribuye con dependencias SHA-256 bloqueadas con hash y un SBOM CycloneDX.

Seguridad por diseño

Bank Statement Parser está diseñado para procesar datos financieros sensibles. Cada decisión de diseño prioriza la seguridad, la privacidad y la auditabilidad.

Cero dependencia de la nube

Todo el procesamiento ocurre localmente dentro de su entorno de ejecución. Los analizadores deterministas no realizan llamadas de red. El pipeline híbrido para PDF usa Ollama para inferencia local de LLM — ningún dato se envía a APIs en la nube. Los analizadores XML están configurados explícitamente con no_network=True, resolve_entities=False y load_dtd=False para impedir cualquier acceso saliente.

Redacción de PII

La información de identificación personal (nombres, IBANs, direcciones postales) se redacta automáticamente en la salida CLI y en modo streaming. Esto está activado por defecto.

Seguridad XML (protección XXE)

Todo el análisis XML usa lxml con ajustes reforzados:

Seguridad de archivos ZIP

iter_secure_xml_entries() valida cada miembro ZIP antes de la extracción:

Prevención de cruce de rutas

La validación de entrada bloquea rutas de archivo peligrosas:

Verificación de saldo (Regla de Oro)

Cada extracción de PDF se verifica con la ecuación: opening balance + credits − debits == closing balance. Los resultados se etiquetan como VERIFIED, DISCREPANCY o FAILED. Las discrepancias pueden revisarse de forma interactiva con --type review.

Salida determinista

Para formatos estructurados (CAMT, PAIN.001, CSV, OFX, QFX, MT940), dado el mismo archivo de entrada, el analizador produce una salida byte a byte idéntica en cada ejecución. Sin aleatoriedad, sin inferencia de modelo, sin muestreo heurístico. Esto es fundamental para:

Seguridad de la cadena de suministro

Verificar localmente

python -m pytest                          # 718 tests, 100% branch coverage
python scripts/verify_locked_hashes.py    # SHA-256 hash verification
git log --show-signature -1               # Verify commit signature