HORARIOS pasa a 5 bloques que siguen cubriendo las 24 horas: 00:00-06:30 cada
30 minutos (antes 00:00-05:00 cada 60 s y 05:00-06:30 cada 30 min) y
18:30-24:00 cada 60 minutos (antes dos bloques iguales). El día no cambia.
De madrugada un correo puede esperar hasta 30 minutos y los reintentos por
SAP fuera de línea, uno por ciclo, van igual de espaciados.
Se ordena el formato de la lista, test_horarios fija el primer y el último
minuto de cada bloque (y que nunca se devuelva None en el día), y se
actualizan docs/main.md, la guía de despliegue y el CHANGELOG.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- Nueva página docs/sapb1_manager.md: sesión, funciones, clasificación de
errores (SapNoDisponible frente a rechazo de SAP), búsqueda de facturas
existentes y cómo se ubica una guía.
- procesar_pdfs.md y procesar_xmls.md usaban los nombres anteriores a la
división de pipeline.py (_procesar_pdfs, _ruta_carpeta...) y números de
línea que envejecen; ahora apuntan a documentos.py.
- inventario.md: árbol de dependencias con los módulos nuevos.
- pipeline.md: _procesar_factura, importes_coinciden, hana_disponible y
buscar_factura_existente; validar_precios.md, hana_manager.md, main.md y
procesar_xmls.md con las notas que faltaban; README sin la cifra de pruebas
vieja.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Era una colección de peticiones de prueba al Service Layer con usuario,
contraseña y base de producción en texto plano.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
La comparación abs(a - b) < 0.01 no era fiable por la coma flotante: el mismo
céntimo se aceptaba o rechazaba según el importe (431.41 contra 431.40 se
rechazaba y 624.39 contra 624.38 se aceptaba). pipeline_utils.importes_coinciden
redondea la diferencia a 2 decimales, lo que muestra un comprobante, y admite
hasta 1 céntimo. Se usa en la validación de precios y en la comparación del
valor referencial. Con datos reales de SAP (49 líneas) ningún resultado cambió.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- deploy/: scripts de PowerShell para instalar el servicio (cuenta de servicio
con acceso a la ruta de red, reinicio automático, parada con Ctrl+C,
rotación de la salida, PYTHONUTF8), actualizar a una versión etiquetada o
volver a una anterior, y desinstalar.
- docs/despliegue_windows.md: requisitos, instalación, operación, rollback y
problemas frecuentes.
- tools/verificar_conexiones.py: comprueba .env, Graph, SAP, HANA y la ruta de
red sin modificar nada.
- CHANGELOG.md, README e inventario; pyproject.toml pasa a 1.2.0.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
El sistema contesta a quien envió el correo con la plantilla que corresponda.
Por defecto (NOTIFICACION_MODO=prueba) la respuesta va solo al equipo con el
asunto "[PRUEBA → remitente]"; en modo real va al remitente con copia oculta
al equipo. El correo técnico (tablas de SAP, JSON) pasa a ir solo al equipo.
- respuesta_proveedor.py: contextos de las plantillas, envío y protecciones
(remitente desconocido o sin dominio, propio buzón, no-reply, mensajes
automáticos, respuestas a notificaciones, límite de 3 por remitente/24 h).
- observaciones.py: motivos de rechazo con título, filas y cómo corregir
(borrador de textos); también para correos sin comprobante válido.
- Un error de SAP/HANA o un fallo inesperado no se le comunica al proveedor y
ya no tumba el ciclo; "guía no encontrada" exige que HANA responda.
- outlook_utilities: es_mensaje_automatico y copia oculta en send_email.
- seguimiento: notificacion_destinatario (con migración) y
contar_respuestas_correo.
- config_validator anuncia el modo activo; documentación y pruebas.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Nueva tabla comprobantes (creada en init_db) y módulo seguimiento.py: cada
comprobante recibe un código ABR-AAMMDD-NNNNN que conserva si reaparece en
otro correo, más su resultado (aceptado/rechazado/error) y el estado de la
notificación. El pipeline lo registra por factura sin bloquear el flujo si el
seguimiento falla. Las pruebas usan una BD temporal para no tocar emails.db.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Los scripts manuales pasan a tools/ y los correos de ejemplo a
tests/fixtures/. Suite de 95 pruebas: caracterización de la extracción sobre
los 46 correos (resultados esperados en tests/golden/, fuera de la carpeta
que descargar_correos_prueba borra), unitarias de draft_sap, notificaciones,
documentos, adjuntos y config_validator, y flujo completo de
_procesar_un_correo con SAP/HANA/Outlook simulados. pytest como dependencia
dev y configuración en pyproject.toml.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
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>