2.3 KiB
2.3 KiB
Módulos
| Archivo | Función |
|---|---|
main.py |
Daemon orquestador. Bucle infinito con horarios configurables, obtiene token, consulta HANA, procesa pendientes (nuevos + reintentos). |
get_token_headless.py |
Login headless via Firefox real. Sin ventana visible. |
get_token.py |
Login SOL via Playwright (headless=False). Navega menú → extrae JWT de sessionStorage['SUNAT.token']. |
consulta_cpe.py |
Consulta API REST api-cpe.sunat.gob.pe. Retorna (data, status_code). Lanza TokenExpiredError en 401. |
hana_manager.py |
Conexión HANA vía hdbcli. Consulta pendientes en OPCH, actualiza flags de descarga. |
gestor_fallas.py |
SQLite fallas_descarga.db. Registro de fallas con conteo de intentos y backoff progresivo (0min → 5min → 15min → ... → 12h, máx 20). |
smb_manager.py |
Monta recurso SMB (mount_smbfs/mount.cifs/net use) y sincroniza PDF/XML al NAS. Limpia JSON/ZIP temporales. |
login_api.py |
Intento de password_grant() / authorization_code directo a SUNAT (sin navegador, generalmente ya no funciona). Se mantiene como referencia. |
logger_utilities.py |
Redirige stdout/stderr a logs/YYYY-MM-DD.log + terminal. Rotación diaria. |
reporte_fallas.py |
Genera resumen textual + 3 gráficos PNG desde fallas_descarga.db. |
token.json |
Token JWT auto-generado con expiración. |
.env |
Credenciales HANA y SUNAT. |
Flujo
main.pyverifica día/horario → renueva token si expiró (get_token_headless → get_token.py headless=False)obtener_pendientes()trae todos los documentos de OPCH dondetienePDF='N'otieneXML='N'- Separa en nuevos (no están en fallas DB) y reintentos (fallas pendientes con backoff cumplido)
- Por cada doc:
consultar_cpe()→ si 401, renueva token y reintenta- Si falla (500/404/etc) →
registrar_falla()con backoff progresivo - Si OK →
descargar_archivo()(XML + PDF + CDR) marcar_pdf_descargado()/marcar_xml_descargado()actualizan HANA- Si era reintento exitoso →
eliminar_falla()
sincronizar_a_smb()monta NAS (si no está montado), copia PDF/XML via rsync (Mac/Linux) o shutil.move (Windows), y elimina JSON/ZIP temporales dedescargas/- Espera intervalo configurado (5 min modo rápido, 1 h modo full) y repite