GeorgeandClaude Sonnet 5.5 d4c1e0a264 se agrega README y se completa y corrige la documentación
README en la raíz con instalación, uso, estructura e índice de docs. Nuevos
docs/hana_manager.md y docs/outlook_utilities.md. Se renombran los .mkd a .md
y se corrigen construir_draft y validar_precios, que describían lógica ya
inexistente (CUADRO_VALOR_REFERENCIAL, use_sap_prices). Se actualizan los
docstrings obsoletos y las cifras de líneas del inventario.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 22:03:38 -05:00

descarga_factura_transporte

Demonio que descarga las facturas de transporte (PDF/XML SUNAT) recibidas en un buzón de Office 365, valida sus precios contra SAP Business One y crea el borrador (Draft) de la factura de compra. Al terminar, notifica el resultado por correo al remitente.

Qué hace con cada correo

Bandeja de entrada (Microsoft Graph)
  → descarga adjuntos, descomprime ZIP, se queda con PDF/XML
  → extrae datos de PDF y XML y asigna las guías de remisión por línea
  → valida precios de cada guía contra SAP (Service Layer, con fallback a HANA)
  → crea el Draft en SAP B1 si todos los precios coinciden
  → envía correo con el resultado (Draft creado / error / precios no coinciden)

Cada correo se registra en una base SQLite (emails.db) y no se vuelve a procesar. Detalle del flujo en docs/pipeline.md.

Requisitos

  • Python 3.11 o superior.
  • Acceso a: Microsoft Graph (app registrada en Azure AD), SAP B1 Service Layer y SAP HANA.

Instalación

python -m venv venv
source venv/bin/activate          # Windows: venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env              # y completar los valores

El .env nunca se sube a git. Todas las variables están documentadas en .env.example. Al arrancar, config_validator termina con un error claro si falta alguna obligatoria.

Uso

python main.py                    # demonio; consulta los últimos 2 días (--dias 2)
python main.py --dias 5           # ventana de búsqueda de 5 días
python tools/consulta_rapida.py --set <nombre>   # reprocesar correos por ID (sets en tools/ids_prueba.json)

El demonio trabaja por bloques horarios (cada 1, 5, 30 o 60 minutos según la hora) y duerme fuera de ellos. Los bloques están en HORARIOS de main.py y se explican en docs/main.md.

Carpetas de salida (ignoradas por git)

Ruta Contenido
adjuntos/ PDF/XML descargados (DOWNLOAD_FOLDER)
resultado/ JSON de datos extraídos y de drafts, para depuración (OUTPUT_FOLDER)
logs/ Log con rotación diaria y 30 días de historial. LOG_LEVEL controla el nivel
emails.db Correos ya procesados

Estructura del proyecto

Módulo Rol
main.py Demonio y horarios
pipeline.py Orquesta el proceso de cada correo
adjuntos.py, documentos.py, persistencia.py Descarga de adjuntos, extracción de PDF/XML, guardado de JSON
draft_sap.py, notificaciones.py Validación de precios y construcción del Draft; cuerpo de los correos
outlook_utilities.py, sapb1_manager.py, hana_manager.py Clientes de Microsoft Graph, SAP Service Layer y SAP HANA
sunat_schema.py, pdf_utilities.py Lectura de XML SUNAT y de PDF
database_utilities.py, email_utilities.py SQLite local; ZIP y filtrado de adjuntos
logger_manager.py, config_validator.py, pipeline_utils.py Logging, validación del .env, utilidades
tools/ Scripts manuales (consulta_rapida.py, aberio.http, datos de prueba)
tests/ Scripts de prueba manual y correos de ejemplo (tests/correos_prueba/)

Documentación

Documento Tema
docs/inventario.md Archivos, dependencias, flujo de datos y bugs corregidos
docs/main.md Demonio y horarios
docs/pipeline.md Flujo por correo y funciones por módulo
docs/procesar_pdfs.md / docs/procesar_xmls.md Extracción de datos de PDF y XML
docs/validar_precios.md Validación de precios contra SAP
docs/construir_draft.md Construcción del Draft SAP B1
docs/outlook_utilities.md Cliente de Microsoft Graph
docs/hana_manager.md Consultas directas a SAP HANA
S
Description
No description provided
Readme
2.2 MiB
0 Stars 1 Watchers 0 Forks
Languages
Python 88%
HTML 10.3%
PowerShell 1.7%