118 lines
3.6 KiB
Markdown
118 lines
3.6 KiB
Markdown
# 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
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
## 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 <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
|
||
|
|
|
||
|
|
```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.
|