# 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](flujo.md) ## 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) ```bash # Clonar el repositorio git clone 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 ```bash # 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 ```bash # 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.