jose_test_deploy / README.md
jjeampierjs's picture
Upload README.md
0447c0a verified

🏦 Analizador de Comprobantes Bancarios

📋 Descripción del Proyecto

Esta aplicación web desarrollada en Streamlit permite extraer información específica de comprobantes bancarios utilizando Amazon Textract, un servicio de AWS especializado en extracción de texto y análisis de documentos. La aplicación puede procesar imágenes de comprobantes y extraer automáticamente datos como montos, números de operación, fechas, y más información relevante.

🎯 Funcionalidades Principales

  • ✅ Extracción automática de texto de comprobantes bancarios
  • ✅ Análisis inteligente de formularios y tablas
  • ✅ Reconocimiento de patrones específicos bancarios
  • ✅ Exportación de datos extraídos en formato JSON
  • ✅ Interfaz web intuitiva con vista previa de documentos

🛠️ Tecnologías Utilizadas

Librerías Principales

  • Streamlit: Framework para crear aplicaciones web interactivas
  • boto3: SDK oficial de AWS para Python (interacción con servicios AWS)
  • PIL (Pillow): Procesamiento y manipulación de imágenes
  • pandas: Manipulación y análisis de datos estructurados
  • re: Expresiones regulares para extracción de patrones

Servicios AWS

  • Amazon Textract: Servicio de extracción de texto y análisis de documentos

📁 Estructura del Código

1. Clase BankingReceiptAnalyzer

Propósito: Gestiona la comunicación con AWS Textract para el análisis de documentos.

Método __init__(self)

def __init__(self):
  • Función: Constructor que inicializa la conexión con AWS Textract
  • Consumo de librería: Utiliza boto3.client() para crear cliente de Textract
  • Configuración: Lee credenciales desde st.secrets (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION)
  • Manejo de errores: Valida credenciales y maneja excepciones de conexión

Método analyze_document_with_forms(self, image_bytes)

def analyze_document_with_forms(self, image_bytes: bytes) -> Dict[str, Any]:
  • Función: Análisis avanzado de documentos con reconocimiento de formularios y tablas
  • Consumo AWS: Utiliza textract.analyze_document() con características:
    • FORMS: Detecta pares clave-valor en formularios
    • TABLES: Reconoce estructuras tabulares
  • Parámetros: Recibe bytes de la imagen del documento
  • Retorno: Diccionario con bloques de texto estructurados o mensaje de error

Método extract_text_simple(self, image_bytes)

def extract_text_simple(self, image_bytes: bytes) -> Dict[str, Any]:
  • Función: Extracción básica de texto línea por línea
  • Consumo AWS: Utiliza textract.detect_document_text() (método más simple)
  • Procesamiento: Filtra bloques de tipo 'LINE' para obtener texto legible
  • Uso: Ideal para documentos con texto simple sin estructura compleja

2. Clase BankingDataExtractor

Propósito: Procesa el texto extraído y identifica campos específicos bancarios usando patrones.

Método extract_banking_fields(text)

@staticmethod
def extract_banking_fields(text: str) -> Dict[str, str]:
  • Función: Extrae información bancaria específica usando expresiones regulares
  • Consumo de librería: Utiliza re.search() para patrones regex
  • Campos detectables:
    • 💰 Importe enviado (S/ XXX.XX)
    • 🏦 Entidad destino (nombre del banco)
    • 💳 Comisión (S/ X.XX)
    • 📊 ITF (Impuesto a las Transacciones Financieras)
    • 🔢 Número de operación
    • 📝 Tipo de operación
    • 📅 Fecha y hora
    • ✅ Estado de operación

Patrones de Búsqueda Ejemplo:

'importe_enviado': [
    r'Importe enviado\s*S/\s*(\d+\.?\d*)',
    r'S/\s*(\d+\.?\d*)',
    r'Monto\s*S/\s*(\d+\.?\d*)'
]

Método _extract_account_numbers(text, fields)

@staticmethod
def _extract_account_numbers(text: str, fields: Dict[str, str]) -> None:
  • Función: Identifica números de cuenta origen y destino
  • Patrones: Busca formatos como "•1234", "Cuenta 123456789"
  • Lógica: Asigna primera cuenta como origen y segunda como destino

Método _extract_bank_names(text, fields)

@staticmethod
def _extract_bank_names(text: str, fields: Dict[str, str]) -> None:
  • Función: Detecta nombres de bancos peruanos comunes
  • Bancos soportados: BBVA, Plin, BCP, Interbank, Scotiabank, BanBif
  • Método: Búsqueda case-insensitive en el texto

3. Función display_extracted_banking_data(fields)

Propósito: Presenta los datos extraídos en una interfaz visual organizada.

  • Consumo Streamlit: Utiliza st.metric(), st.dataframe(), st.columns()
  • Funcionalidades:
    • Métricas destacadas (importe, entidad, estado)
    • Tabla detallada con todos los campos
    • Indicadores de estado (detectado/no detectado)
    • Botón de descarga en formato JSON
  • Exportación: Genera archivo JSON con timestamp y estadísticas de completitud

4. Función process_banking_receipt(uploaded_file, analyzer)

Propósito: Orquesta el proceso completo de análisis de un comprobante.

  • Consumo PIL: Utiliza Image.open() para mostrar vista previa
  • Funcionalidades:
    • Vista previa del documento subido
    • Dos métodos de análisis (Tabs):
      • Análisis avanzado con formularios
      • Extracción simple de texto
    • Procesamiento de bytes del archivo
    • Manejo de errores y estados de carga

5. Función main()

Propósito: Función principal que construye la interfaz de usuario completa.

  • Consumo Streamlit: Utiliza múltiples componentes:
    • st.title(), st.markdown(): Títulos y contenido
    • st.sidebar: Panel lateral informativo
    • st.file_uploader(): Subida de archivos
    • st.columns(): Layout en columnas
  • Validaciones: Verifica credenciales AWS antes de continuar
  • Tipos de archivo: Soporta JPG, PNG, PDF

FUNCIONAMIENTO

🧠 Dos "servicios" o capas distintas en el proceso

🔹 1. OCR con IATextract (extract_text_simple)

  • Es el servicio de reconocimiento de texto (OCR) de AWS Textract.

  • Detecta el texto visual en una imagen escaneada (como un comprobante bancario).

  • No interpreta lo que ese texto significa, solo lo reconoce y lo devuelve como líneas o palabras.

  • Es como un escáner con visión artificial inteligente, que ve:

    "Importe enviado S/ 1250.00"
    

🔹 2. Servicio tipo “tag” semánticoBankingDataExtractor

  • Es un servicio personalizado, hecho por ti (o el desarrollador).

  • Usa expresiones regulares para “etiquetar” o clasificar partes del texto como:

    • importe_enviado, fecha, comisión, etc.
  • Es como un motor de reglas semánticas que dice:

    Importe enviado S/ X, eso es el campo importe_enviado.”


🧪 Definicion:

AWS Textract es como un lector que lee el contenido de una carta (OCR), BankingDataExtractor es un asistente que resalta lo importante con marcadores: el nombre del remitente, la fecha, el asunto, etc.


🧩 Diagrama:

🖼️ Imagen JPG/PDF
     │
     ▼
🧠 AWS Textract (OCR IA)
     └──▶ Texto plano
              │
              ▼
🧾 BankingDataExtractor (Regex/tagger)
              └──▶ Datos estructurados clave-valor

✅ Conclusión:

Se usan 2 servicios: uno (Textract) es como un OCR con inteligencia artificial que extrae el texto visible, y el otro (el extractor con regex) etiqueta o clasifica semánticamente ese texto para obtener información útil y estructurada.

🔧 Configuración y Uso

1. Configuración de AWS

Archivo: secrets.toml (Streamlit)

[aws]
AWS_ACCESS_KEY_ID = "tu_access_key"
AWS_SECRET_ACCESS_KEY = "tu_secret_key"
AWS_DEFAULT_REGION = "us-east-1"

2. Instalación de Dependencias

pip install streamlit boto3 pillow pandas

3. Ejecución

streamlit run app.py

📊 Flujo de Trabajo

  1. Carga de Documento: Usuario sube imagen del comprobante
  2. Procesamiento AWS: Textract extrae texto y estructura
  3. Análisis de Patrones: Regex identifica campos bancarios específicos
  4. Visualización: Streamlit muestra datos extraídos
  5. Exportación: Descarga opcional en JSON

🎯 Casos de Uso

  • ✅ Automatización de contabilidad empresarial
  • ✅ Reconciliación bancaria automatizada
  • ✅ Digitalización de comprobantes físicos
  • ✅ Auditorías y reportes financieros
  • ✅ Integración con sistemas ERP

⚠️ Consideraciones Importantes

Limitaciones de AWS Textract

  • Costo: Servicio pagado por documento procesado
  • Calidad: Requiere imágenes claras y bien iluminadas
  • Idioma: Optimizado para texto en español/inglés

Seguridad

  • Credenciales AWS deben mantenerse seguras
  • Los documentos se procesan temporalmente en AWS
  • No se almacenan datos permanentemente

🚀 Mejoras Futuras

  • 🔄 Procesamiento por lotes (múltiples comprobantes)
  • 🤖 Machine Learning personalizado para patrones específicos
  • 📱 Versión móvil optimizada
  • 🔐 Autenticación de usuarios
  • 📈 Dashboard de estadísticas

📞 Soporte

Para consultas técnicas o mejoras al código, contactar al desarrollador: @JoseJeampierJaraSalas1997


Nota: Este proyecto utiliza Amazon Textract, no Amazon Rekognition. Textract está especializado en extracción de texto y análisis de documentos, mientras que Rekognition se enfoca en reconocimiento de imágenes, caras y objetos.