se agrega la rotación de log y se actualiza la documentación del proyecto
This commit is contained in:
1 parent
cf2c1ee147
commit
372e6fe7f8
13 files changed
+459
-97
No files matched your search
@@ -0,0 +1,76 @@
|
||||
# Diagrama de Flujo - Descarga Adjuntos Correos CPE
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
Start((<b>INICIO</b><br/>main.py)) --> Init[setup_logger + limpiar_logs_antiguos<br/>init_db SQLite]
|
||||
Init --> Loop{<b>while _running</b>}
|
||||
|
||||
Loop --> RotarLog[rotar_log - rotacion diaria]
|
||||
RotarLog --> CheckDay{Dia activo?<br/>weekdays 0-4}
|
||||
CheckDay -->|No| SleepDay[Esperar hasta<br/>proximo dia activo]
|
||||
SleepDay --> Loop
|
||||
|
||||
CheckDay -->|Si| CheckTime{Dentro de<br/>horario?}
|
||||
CheckTime -->|No| SleepTime[Esperar hasta<br/>06:30]
|
||||
SleepTime --> Loop
|
||||
|
||||
CheckTime -->|Si| Token[obtener_token<br/>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<br/>Graph API]
|
||||
GetEmails --> FilterNew[filtrar_correos_nuevos<br/>SQLite - IDs ya procesados]
|
||||
FilterNew --> HasNew{Hay correos<br/>nuevos?}
|
||||
HasNew -->|No| Skip[Sin correos nuevos]
|
||||
HasNew -->|Si| EmailLoop
|
||||
|
||||
subgraph EmailLoop [Bucle por cada Correo Nuevo con Adjuntos]
|
||||
direction TB
|
||||
Download[download_attachments<br/>Graph API]
|
||||
Download --> Unzip[procesar_adjuntos_email<br/>Descomprimir ZIP + filtrar PDF/XML]
|
||||
Unzip --> ExtractMeta[procesar_adjuntos_enriquecidos<br/>obtener_datos_xml + extraer_texto_pdf]
|
||||
|
||||
ExtractMeta --> Classify{Clasificar<br/>metadatos}
|
||||
Classify -->|Completos| Rename[renombrar_archivos_por_metadata<br/>F001.xml -> RUC-01-F001.xml]
|
||||
Classify -->|Parciales| Evaluar[mover_a_evaluar<br/>revision manual]
|
||||
Classify -->|Vacios| Delete[limpiar_carpeta_descarga]
|
||||
|
||||
Rename --> MoveResult[mover_validos_a_resultado<br/>a /resultado/empresa]
|
||||
MoveResult --> Cleanup[limpiar_carpeta_descarga]
|
||||
end
|
||||
|
||||
Skip --> SMBSync
|
||||
EmailLoop --> SMBSync[sincronizar_a_smb<br/>rsync a carpeta compartida]
|
||||
end
|
||||
|
||||
LoopAccounts --> ExportJSON[guardar_json<br/>/output_json/timestamp.json]
|
||||
ExportJSON --> Sleep[Esperar intervalo<br/>segundos - 5min o 1hr]
|
||||
Sleep --> Loop
|
||||
|
||||
Loop -->|senal SIGTERM/SIGINT| Stop((<b>FIN</b>))
|
||||
|
||||
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)
|
||||
Reference in new issue
Block a user