```mermaid graph TD Start((INICIO
main.py)) --> Init[Configurar Logger y
Base de Datos SQLITE] Init --> Auth[Obtener Token de Acceso
Outlook API] subgraph MailConfigLoop [Bucle por cada Cuenta de Correo en config.json] direction TB GetEmails[Consultar correos del día
outlook_utilities.get_emails] GetEmails --> FilterNew[Filtrar correos no procesados
email_services.filtrar_correos_nuevos] subgraph EmailLoop [Bucle por cada Correo Nuevo con Adjuntos] direction TB Download[Descargar adjuntos a /adjuntos/temp
outlook_utilities.download_attachments] Download --> Unzip[Descomprimir ZIPs y filtrar archivos
email_services.procesar_adjuntos_email] subgraph DataExtraction [Extracción de Metadatos] direction LR ParseXML[Parsear XML
document_processor.obtener_datos_xml] ParsePDF[Parsear PDF multilínea
pdf_utilities.obtener_datos_pdf] end Unzip --> DataExtraction DataExtraction --> Grouping[Lógica de Agrupación y Renombrado
file_manager.procesar_renombrado_agrupado] Grouping --> Rename[Renombrado físico de archivos
F001.xml -> RUC-01-F001.xml] Rename --> MoveLocal[Mover archivos agrupados a /resultado/
file_manager.mover_archivos_a_resultado] end FilterNew --> EmailLoop EmailLoop --> SMBSync[Sincronización SMB
smb_utils.sincronizar_a_smb] subgraph SMBSteps [Proceso SMB] direction LR Mount[Montar Unidad según SO
mount_smbfs / net use] --> Rsync[Ejecutar rsync -av
--remove-source-files] end SMBSync --- SMBSteps end Auth --> MailConfigLoop MailConfigLoop --> ExportJSON[Exportar resultados finales a JSON
/output_json/YYYY-MM-DD.json] ExportJSON --> End((FIN)) style Start fill:#f9f,stroke:#333,stroke-width:2px style End fill:#f9f,stroke:#333,stroke-width:2px style MailConfigLoop fill:#e1f5fe,stroke:#01579b,stroke-dasharray: 5 5 style EmailLoop fill:#fff3e0,stroke:#e65100 style SMBSync fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px ```