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