Files
descarga_xml_sunat/docs/MODULES.md
T

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

  1. main.py verifica día/horario → renueva token si expiró (get_token_headless → get_token.py headless=False)
  2. obtener_pendientes() trae todos los documentos de OPCH donde tienePDF='N' o tieneXML='N'
  3. Separa en nuevos (no están en fallas DB) y reintentos (fallas pendientes con backoff cumplido)
  4. 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()
  5. 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 de descargas/
  6. Espera intervalo configurado (5 min modo rápido, 1 h modo full) y repite