Files

62 lines
2.5 KiB
Markdown
Raw Permalink Normal View History

2026-07-17 12:21:31 -05:00
```mermaid
flowchart TD
subgraph Daemon["🚀 Daemon (main.py)"]
A["Inicio"] --> B{"Día activo y<br>en horario?"}
B -->|No| C["Esperar"]
C --> B
B -->|Sí| D["Token válido?"]
D -->|No| E["get_token_headless()<br>headless=True<br>→ get_token.py headless=False"]
2026-07-17 12:21:31 -05:00
E --> F["token.json"]
D -->|Sí| F
end
subgraph HANA["📊 Obtener pendientes"]
F --> G["Consultar HANA<br>obtener_pendientes()"]
G --> H["542 documentos<br>en OPCH"]
H --> I["Filtrar contra<br>fallas_descarga.db"]
I --> J["🆕 Nuevos<br>(sin falla previa)"]
I --> K["🔄 Reintentos<br>(fallas pendientes)"]
end
subgraph Nuevos["📄 Procesar nuevos"]
L["Por cada nuevo:"] --> M["consultar_cpe()<br>GET api-cpe.sunat.gob.pe<br>/v1/.../{ruc}-{tipo}-{serie}-{num}-2"]
M --> N{"Status?"}
N -->|200| O["descargar_archivo()<br>XML (02) / PDF (01) / CDR (03)"]
O --> P["ZIP → extraer en<br>descargas/"]
P --> Q["marcar_pdf/xml_descargado()<br>UPDATE HANA OPCH"]
Q --> R["✅ OK"]
N -->|401| S["⚠️ TokenExpiredError"]
S --> T["Renovar token"]
T --> M
N -->|500/404/otros| U["registrar_falla()<br>→ SQLite con backoff"]
end
subgraph Reintentos["🔄 Procesar reintentos"]
V["Por cada reintento<br>(backoff cumplido):"] --> W["consultar_cpe()"]
W --> X{"Status?"}
X -->|200| Y["descargar_archivo()"]
Y --> Z["marcar_pdf/xml_descargado()"]
Z --> AA["eliminar_falla()<br>DELETE FROM fallas"]
AA --> AB["✅ OK + 🗑️ quitado de SQLite"]
X -->|401| AC["Renovar token → reintentar"]
X -->|500/404/otros| AD["actualizar_falla()<br>incrementar intento<br>→ próximo backoff"]
end
AD --> AF["sincronizar_a_smb()<br>montar SMB<br>rsync PDF/XML → NAS<br>limpiar JSON/ZIP"]
AF --> AE["Esperar intervalo<br>→ próximo ciclo"]
R --> AF
U --> AD
AB --> AF
style A fill:#1a1a2e,stroke:#e94560,color:#fff
style E fill:#16213e,stroke:#0f3460,color:#fff
style G fill:#0f3460,stroke:#e94560,color:#fff
style M fill:#533483,stroke:#e94560,color:#fff
style O fill:#1a1a2e,stroke:#e94560,color:#fff
style P fill:#16213e,stroke:#0f3460,color:#fff
style Q fill:#0f3460,stroke:#e94560,color:#fff
style U fill:#3d0000,stroke:#ff4444,color:#fff
style AA fill:#003300,stroke:#44ff44,color:#fff
style AD fill:#3d0000,stroke:#ff4444,color:#fff
```