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>
This commit is contained in:
1 parent
74be942a3e
commit
b1b6f70983
9 files changed
+249
-60
No files matched your search
@@ -0,0 +1,79 @@
|
||||
# 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`](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
|
||||
|
||||
```bash
|
||||
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`](.env.example). Al arrancar, `config_validator` termina con un error claro si falta alguna obligatoria.
|
||||
|
||||
## Uso
|
||||
|
||||
```bash
|
||||
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`](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`](docs/inventario.md) | Archivos, dependencias, flujo de datos y bugs corregidos |
|
||||
| [`docs/main.md`](docs/main.md) | Demonio y horarios |
|
||||
| [`docs/pipeline.md`](docs/pipeline.md) | Flujo por correo y funciones por módulo |
|
||||
| [`docs/procesar_pdfs.md`](docs/procesar_pdfs.md) / [`docs/procesar_xmls.md`](docs/procesar_xmls.md) | Extracción de datos de PDF y XML |
|
||||
| [`docs/validar_precios.md`](docs/validar_precios.md) | Validación de precios contra SAP |
|
||||
| [`docs/construir_draft.md`](docs/construir_draft.md) | Construcción del Draft SAP B1 |
|
||||
| [`docs/outlook_utilities.md`](docs/outlook_utilities.md) | Cliente de Microsoft Graph |
|
||||
| [`docs/hana_manager.md`](docs/hana_manager.md) | Consultas directas a SAP HANA |
|
||||
Reference in new issue
Block a user