Files
descarga_factura_transporte/docs/inventario.md
T

4.1 KiB

Inventario del código

Archivos

Archivo Líneas Rol
main.py 134 Demonio orquestador (loop de horarios)
pipeline.py 957 Pipeline core (procesar un correo completo)
sunat_schema.py 521 Parseo de XML SUNAT (Invoice, DespatchAdvice)
pdf_utilities.py 450 Parseo de PDFs (factura, guías)
sapb1_manager.py 322 Comunicación con SAP B1 Service Layer
outlook_utilities.py 228 Comunicación con Microsoft Graph
hana_manager.py 126 Comunicación con SAP HANA directa
database_utilities.py 114 SQLite local (cache de correos)
consulta_rapida.py 115 Script auxiliar para reprocesar correos por ID
email_utilities.py 93 Utilitarios de adjuntos (ZIP, filtrado)
logger_utilities.py 72 Logging a archivo + consola

Dependencias entre archivos

main.py
  └── pipeline.py
        ├── sunat_schema.py
        ├── pdf_utilities.py
        ├── sapb1_manager.py
        │     └── hana_manager.py
        ├── outlook_utilities.py
        ├── email_utilities.py
        │     └── database_utilities.py
        └── database_utilities.py

Flujo de datos

main()
  └── run_pipeline()
        ├── step_authenticate() → token MS Graph
        ├── step_fetch_emails() → emails[]
        └── _procesar_un_correo() (por cada email)
              ├── BD: verificar duplicado
              ├── _descargar_adjuntos() → archivos
              ├── _descomprimir() ZIPs
              ├── _filtrar_y_limpiar() → solo PDF/XML
              ├── _procesar_pdfs() → pdf_cache
              │     └── pdf_utilities.extraer_datos_pdf()
              ├── _procesar_xmls(pdf_cache) → documentos[]
              │     └── sunat_schema.extraer_datos_xml()
              ├── _guardar_resultado(documentos)
              ├── _validate_prices(factura) → (ok, resultados)
              │     └── sapb1_manager.get_delivery_notes()
              │           ├── SL (Service Layer) GET /DeliveryNotes
              │           └── HANA fallback (get_delivery)
              ├── _build_sap_draft(factura, resultados) → draft
              ├── _guardar_draft_json(draft)
              ├── sapb1_manager.create_draft(draft)
              └── outlook_utilities.send_email(notificación)

Problemas conocidos hasta ahora

# Problema Archivo Estado
1 _extraer_serie_numero_desde_texto no limpiaba leading zeros sunat_schema.py ✅ Corregido
2 Al asignar guías por línea, si hay +refs que líneas, las sobrantes se perdían pipeline.py ✅ Corregido
3 SL sin fallback a HANA sapb1_manager.py ✅ Corregido
4 Ctrl+C mostraba traceback main.py ✅ Corregido
5 .env.dev vs .env inconsistente sapb1_manager.py ✅ Corregido
6 HANA_HOST vs HANA_SERVER en .env hana_manager.py ✅ Corregido
7 Columna Cancelled vs CANCELED en HANA hana_manager.py ✅ Corregido

Funciones internas en _procesar_un_correo (pipeline.py)

Función Líneas Propósito
_descargar_adjuntos 107-134 Descarga adjuntos vía Graph API
_descomprimir 136-149 Descomprime ZIPs
_filtrar_y_limpiar 151-191 Filtra PDF/XML, elimina el resto
_procesar_pdfs 193-246 Extrae datos de PDFs, renombra, genera cache
_procesar_xmls 248-377 Procesa XMLs, cruza con PDF, asigna guías
_guardar_resultado 379-408 Guarda JSON con datos extraídos
_build_sap_draft 410-569 Construye payload del draft SAP B1
_validate_prices 571-745 Valida precios contra DeliveryNotes SAP
_build_validation_html 747-775 Genera tabla HTML para notificación
_build_notification_body 777-814 Arma cuerpo del email de notificación
_guardar_draft_json 816-842 Guarda draft JSON para depuración