Files

Descarga Adjuntos Correos CPE

Daemon que descarga automáticamente adjuntos de correos electrónicos (facturas, boletas, notas de crédito) desde Microsoft Outlook, extrae metadatos de archivos XML/PDF, y los sincroniza a una carpeta compartida SMB.

Arquitectura

Diagrama de Flujo

Requisitos

  • Docker y Docker Compose
  • Python 3.12 (solo para ejecución local sin Docker)
  • Acceso a Microsoft Graph API (credenciales de Azure AD)
  • Servidor SMB/CIFS en la red local

Instalación

Con Docker (recomendado)

# Clonar el repositorio
git clone <url-del-repositorio>
cd descarga_adjuntos_correos_cpe

# Crear los directorios necesarios
mkdir -p logs data adjuntos resultado output_json

# Configurar archivos (ver configuracion.md)
# Editar config.json y scheduler.json

# Construir y ejecutar
docker compose build
docker compose up -d

Sin Docker

# Crear entorno virtual
python -m venv venv
source venv/bin/activate  # Linux/Mac
# venv\Scripts\activate   # Windows

# Instalar dependencias
pip install -r requirements.txt

# Ejecutar
python main.py

Estructura del Proyecto

├── main.py                 # Punto de entrada - daemon principal
├── config.json             # Configuracion de credenciales y rutas
├── config_loader.py        # Carga de config.json en dataclasses
├── config_model.py         # Definicion del esquema de configuracion
├── scheduler.json          # Horarios y dias de operacion
├── outlook_utilities.py    # Autenticacion MSAL y descarga de correos
├── email_services.py       # Filtrado de correos y descompresion ZIP
├── document_processor.py   # Extraccion de metadata de XML
├── pdf_utilities.py        # Extraccion de texto y regex de PDFs
├── llm_processor.py        # Fallback con LLM (Ollama) para PDFs
├── file_manager.py         # Renombrado, movimiento y limpieza de archivos
├── database_utilities.py   # SQLite para tracking de correos procesados
├── smb_manager.py          # Montaje y sincronizacion SMB
├── logger_utilities.py     # Sistema de logging con rotacion diaria
├── Dockerfile              # Imagen Docker
├── docker-compose.yml      # Orquestacion del servicio
├── logs/                   # Archivos de log diarios
├── data/                   # Base de datos SQLite
├── adjuntos/               # Descarga temporal de adjuntos
├── resultado/              # Archivos procesados y renombrados
├── output_json/            # Exportacion JSON de resultados
└── tests/                  # Suite de pruebas

Comandos Utiles

# Ver logs en tiempo real
docker compose logs -f descarga-cpe

# Ver ultimas lineas de log
docker compose logs --tail=50 descarga-cpe

# Detener el servicio
docker compose stop descarga-cpe

# Reiniciar el servicio
docker compose restart descarga-cpe

# Reconstruir tras cambios en el codigo
docker compose build descarga-cpe && docker compose up -d descarga-cpe

# Verificar estado del contenedor
docker compose ps descarga-cpe

# Ejecutar pruebas
python -m pytest tests/ -v

Scheduler

El daemon opera segun los horarios definidos en scheduler.json:

Horario Intervalo Modo
06:30 - 13:15 5 minutos rapido
13:15 - 14:00 1 hora full
14:00 - 17:30 5 minutos rapido
17:30 - 21:30 1 hora full

Dias activos: Lunes a Viernes (0-4)

Logs

Los archivos de log se guardan en logs/ con formato YYYY-MM-DD.log. La rotacion es automatica al cambiar de dia. Los logs con mas de 30 dias se eliminan automaticamente al iniciar el daemon.