Skip to content

notificacion-solicitud-material

¿Buscas qué dicen los datos, no cómo se construyó? Ver hallazgos-de-negocio.md — backlog vivo, cuello de botella real de autorización, folios rechazados sin resolver, y dónde se concentran las órdenes de compra atrasadas. Tablero: Solicitudes de material · Backlog vivo.

Reconstruir vía SQL el filtro que usa "Control de Solicitudes de material v3" (transacción ZTRV098, catálogo EMPRESAS_2.Menus) para cada una de sus pestañas (AU, AB, PR, APG, DISPONIBLE, AC RECHAZADO, OC SIN AU, PXC), validando contra exports reales de la pantalla como baseline — objetivo final: alimentar un bot de notificaciones (varela-bot) sin depender de que alguien abra la pantalla de escritorio a mano.

ZTRV098 es una pantalla VB6 de escritorio, no ASP: no tiene URL en Menus ni SQL propio guardado en Reporte/Consultas. El SQL más cercano encontrado es RP_CTR_SM1/RP_CTR_SM2 ("REPORTE DE CONTROL DE SOLICITUD DE MATERIAL V1/V2"), con columnas casi idénticas a lo que se ve en pantalla — probable origen real de la v3, sin confirmar al 100%.

Pestaña DISPONIBLE — resuelta, 100% cobertura / 87.9% precisión

Baseline real exportado por el usuario (2026-08-13, 842 líneas, 510 folios únicos, SUM(SALDO)=4800), comparado contra el candidato vía diff de conjuntos de folios (no solo conteos).

Hallazgo clave que desbloqueó la validación: ZTRV_Apartado.Ap_Documento es polimórfico (Ap_Tabla/Ap_Documento) — cuando Ap_Tabla='COMPRA', Ap_Documento es el folio de la orden de compra, no el de la solicitud. La columna correcta para volver a la solicitud es Sm_Folio (columna dedicada en la misma tabla). Detalle completo en Calidad de datos.

Query final (v5):

SELECT DISTINCT ap.Sm_Folio AS FOLIO
FROM ZTRV_Apartado ap
INNER JOIN ZTRV_Solicitud_Material sm ON sm.Sm_Folio = ap.Sm_Folio
WHERE ap.Es_Cve_Estado = 'AC'
  AND sm.Es_Cve_Estado NOT IN ('CE', 'FN')

Resultado: 510/510 folios del baseline cubiertos (100% cobertura), 77 folios de más (candidato total 587, 86.9% precisión). Causa dominante de los 77 sobrantes, sin resolver: 71% (55/77) son Ap_Tabla='COMPRA' con cabecera sm.Es_Cve_Estado='PR' — hipótesis sin confirmar de que el apartado está ligado a una orden de compra que aún no llega (no es existencia real disponible ahora mismo). Se probó acotar con d.Es_Cve_Estado='AC' (línea de detalle, join por Pr_Cve_Producto) pero empeoró el resultado (bajó cobertura a 59%, 301/510) — el join por producto entre Apartado y Detalle es frágil (productos repetidos en la misma solicitud, posibles ediciones). Descartado por ahora.

Notebook de cierre del hito: 06_notebook_disponible_solicitud_material.py — corre contra connection_207 (producción), pedido explícito del usuario porque comparaba contra la pantalla en vivo.

Pestañas AB y PR — resueltas contra baseline real (2026-08-13)

Baselines reales exportados por el usuario el mismo día: AB-13-08-2026.xlsx (89 líneas) y PR-13-08-2026.xlsx (165 líneas). Reconciliación a nivel (FOLIO, PRODUCTO).

Hallazgo de esquema: Requisicion_Compra y Orden_Compra son polimórficas igual que ZTRV_Apartado y pueden apuntar directo a 'ZTRV_Solicitud_Material'. Detalle completo en Calidad de datos.

Pestaña Cobertura Precisión
AB 92.13 % 93.18 %
PR 96.97 % 97.56 %

El hallazgo que subió la precisión de PR de 36 % a 97.6 %: Orden_Compra.Es_Cve_Estado='AC' no distingue "a tiempo" de "atrasada" — hay que filtrar además Oc_Fecha_Entrega >= HOY (sin eso, se contaban órdenes vigentes de hasta 2020, nunca cerradas). Ese sería justo el criterio que separa PR de APG, aunque no hay baseline de APG que lo confirme todavía — es inferencia del nombre del indicador, no dato verificado.

Detalle completo, incluyendo diagnóstico de los residuos de precisión, en Solicitud de material.

Notebooks de cierre: 52_notebook_ab_solicitud_material.py, 53_notebook_pr_solicitud_material.py.

Pestaña AU — baseline real conseguido, pero no converge

Con el baseline real (AU-13-08-2026.xlsx, 20 líneas/19 folios — muestra chica) se probó: último Pad_Estado='AU' + cabecera no CE/FN + línea Es_Cve_Estado='AC' + sin apartado/requisición/OC activos. Mejor resultado: 90 % cobertura / ~26 % precisión, sin causa raíz clara para los ~50 sobrantes (se descartaron varias hipótesis: apartados históricos cerrados/cancelados, Sm_Revisar_Oc, Sm_Es_Servicio, antigüedad). Confirmado con un caso real que parte del ruido es inherente a reconciliar contra producción en vivo: a un folio se le creó un apartado activo la misma tarde, después de exportado el baseline. Ver Solicitud de material y PROGRESS.md de este proyecto para el detalle completo del diagnóstico.

Pestañas APG, AC RECHAZADO, OC SIN AU, PXC

Sin baseline exportado — sin empezar. Para APG hay una hipótesis fuerte (orden de compra vigente vencida, ver arriba) heredada del hallazgo de PR, pendiente de validar con un export real de esa pestaña.

Exploración adicional: el flujo de autorización no es monótono

A partir de un caso puntual (folio 23-0001183, Pad_Estado final RZA), se confirmó que el flujo de autorización presupuestal tiene ciclos de retrabajo (RZR→RZRE→RE→AU/RZA), y que 508 folios (58%) con autorización sin resolver siguen con cabecera Es_Cve_Estado='AC'. Detalle completo en Solicitud de material.

También se confirmó que el estado de ZTRV_Solicitud_Material_Detalle varía por línea, independiente de la cabecera — ver Calidad de datos.

Tablas raw subidas al warehouse

ZTRV_Apartado, ZTRV_Presupuesto_Autorizacion_Documento y Requisicion_Compra (las 3 tablas clave de esta reconciliación) ya viven en raw.* de Postgres, 100% reconciliadas contra .207. De paso se encontró que TRIVASADB3 cambió de IP (.200 → .205). Detalle en PROGRESS.md y Warehouse.

Ver también