# Diagrama de Flujo - Descarga Adjuntos Correos CPE ```mermaid graph TD Start((INICIO
main.py)) --> Init[setup_logger + limpiar_logs_antiguos
init_db SQLite] Init --> Loop{while _running} Loop --> RotarLog[rotar_log - rotacion diaria] RotarLog --> CheckDay{Dia activo?
weekdays 0-4} CheckDay -->|No| SleepDay[Esperar hasta
proximo dia activo] SleepDay --> Loop CheckDay -->|Si| CheckTime{Dentro de
horario?} CheckTime -->|No| SleepTime[Esperar hasta
06:30] SleepTime --> Loop CheckTime -->|Si| Token[obtener_token
MSAL - renueva cada 50min] Token --> LoopAccounts subgraph LoopAccounts [Bucle por cada Cuenta de Correo - config.mails] direction TB Process[procesar_cuenta] Process --> GetEmails[get_emails
Graph API] GetEmails --> FilterNew[filtrar_correos_nuevos
SQLite - IDs ya procesados] FilterNew --> HasNew{Hay correos
nuevos?} HasNew -->|No| Skip[Sin correos nuevos] HasNew -->|Si| EmailLoop subgraph EmailLoop [Bucle por cada Correo Nuevo con Adjuntos] direction TB Download[download_attachments
Graph API] Download --> Unzip[procesar_adjuntos_email
Descomprimir ZIP + filtrar PDF/XML] Unzip --> ExtractMeta[procesar_adjuntos_enriquecidos
obtener_datos_xml + extraer_texto_pdf] ExtractMeta --> Classify{Clasificar
metadatos} Classify -->|Completos| Rename[renombrar_archivos_por_metadata
F001.xml -> RUC-01-F001.xml] Classify -->|Parciales| Evaluar[mover_a_evaluar
revision manual] Classify -->|Vacios| Delete[limpiar_carpeta_descarga] Rename --> MoveResult[mover_validos_a_resultado
a /resultado/empresa] MoveResult --> Cleanup[limpiar_carpeta_descarga] end Skip --> SMBSync EmailLoop --> SMBSync[sincronizar_a_smb
rsync a carpeta compartida] end LoopAccounts --> ExportJSON[guardar_json
/output_json/timestamp.json] ExportJSON --> Sleep[Esperar intervalo
segundos - 5min o 1hr] Sleep --> Loop Loop -->|senal SIGTERM/SIGINT| Stop((FIN)) style Start fill:#f9f,stroke:#333,stroke-width:2px style Stop fill:#f9f,stroke:#333,stroke-width:2px style Loop fill:#e3f2fd,stroke:#1565c0,stroke-width:2px style LoopAccounts fill:#e1f5fe,stroke:#01579b,stroke-dasharray: 5 5 style EmailLoop fill:#fff3e0,stroke:#e65100 style SMBSync fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px style Classify fill:#fce4ec,stroke:#c62828 ``` ## Flujo resumido 1. **Inicio**: Configura logger con rotacion diaria, limpia logs viejos (>30 dias), inicializa SQLite 2. **Loop principal**: Verifica dia activo y horario antes de procesar 3. **Token**: Obtiene/renueva token OAuth de Microsoft Graph (valido 60 min) 4. **Por cada cuenta de correo**: - Consulta correos via Graph API - Filtra los ya procesados (SQLite) - Descarga adjuntos, descomprime ZIPs - Extrae metadata de XML y PDF (con fallback a LLM/Ollama) - Clasifica: completos (renombrar+mover), parciales (evaluar/), vacios (eliminar) 5. **SMB**: Sincroniza archivos procesados a carpeta compartida via rsync 6. **Exporta**: Guarda resultados en JSON con timestamp 7. **Duerme**: Espera el intervalo configurado (5min rapido / 1hr full)