Files
descarga_adjuntos_correos_cpe/docs/flujo.md
T

3.3 KiB

Diagrama de Flujo - Descarga Adjuntos Correos CPE

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)