Liberación: Métricas de entrega por ciudad y transportadora (octubre 2026)¶
Estado: backend en producción desde 2026-10-30 (primera corrida TODO verificada). Scheduler y ajuste visual de prod apagados a la espera de la revisión de gerencia; despliegue del front a producción por confirmar.
Documentación técnica: Métricas (visión general) · API · Entregas · Panel de administración.
Nuevas funcionalidades¶
ApiLambdaMetricasEntregaCiudad(.NET 10): una corrida (domingo 8:00 o manual) leePedidosInteruna vez y deja un resumen por mes × ciudad × transportadora. Ver el porcentaje de entrega por ciudad ya no consulta la base grande.- Vista Entregas (Mi Tienda): mejor transportadora por ciudad, listas de mejores ciudades por transportadora, tabla nacional con filtros, semáforo y exportación a Excel.
- Panel de administración: parámetros de cálculo (alcance, muestra mínima con ayuda, clasificación de estados), corridas con auditoría y vista previa del ajuste.
- Ajuste visual del porcentaje (spec 005): gerencia define un mínimo y el sitio eleva los porcentajes que muestra, sin cambiar el orden ni tocar los datos reales.
- Infraestructura como código (45 recursos en prod) y tres pipelines (
CI,CD-PreProd,CD-Prodcon aprobación).
Cambios que se notan¶
- Un único cálculo, siempre real: la base y el backend guardan el porcentaje real; el ajuste solo ocurre al mostrar.
- Archivada se resuelve por fecha (entrega con solo fecha de entrega, devolución con solo fecha de devolución) y no se puede escoger como entregada o devuelta.
- TCC oculto hasta que sus guías estén en
PedidosInter. XCargo (D2) no cuenta. - Selector de período retirado: el alcance lo define la corrida, no el usuario.
Correcciones durante la validación¶
- Firma del JWT sin validar (seguridad): la primera versión solo decodificaba el token; las rutas van sin authorizer, así que nadie validaba la firma. Se corrigió con
VerificadorJwtCognitoantes de producción. - La corrida manual nunca se ejecutaba (encontrada en PreProd con CloudWatch y Atlas):
- La autoinvocación serializaba el evento como
Tipoy el handler solo reconocíatipo(el del Scheduler): lo trataba como una petición de API vacía y la corrida quedabaEN_CURSO. Se corrigió conDetectorEventoCorrida(sin distinguir mayúsculas). - Aun reconocida, la manual quedaba
OMITIDA: tomaba el candado al lanzarse y su autoinvocación lo volvía a tomar y lo veía ocupado. El filtro acepta la re-toma con el mismoCorridaId. - Los tests no lo habían detectado porque el doble del repositorio modelaba el candado más simple que el real; ahora lo imita.
- La autoinvocación serializaba el evento como
- Corridas caídas bloqueaban el panel: una
EN_CURSOde más de 20 minutos ahora se muestra como CAÍDA y no deshabilita Lanzar corrida. - Id de corrida vacío y % de ciudad sin leer en el panel (nombres de campo del adaptador).
apiUrlRestde producción apuntaba al gateway de PreProd (environment.ts).- Estados disponibles: el panel solo mostraba los ya configurados; ahora lista todos los observados en la última corrida, con buscador y "Ver más".
- Nombres en el panel: "Actualizado por" y "Solicitada por" mostraban el id de Cognito; ahora el backend los resuelve al nombre del usuario (
Users). - Aviso del ajuste: decía "aplica desde la próxima corrida", pero el ajuste es solo del front y es inmediato.
- Hover: el
titledel navegador tardaba y no se parecía a la UI; se reemplazó por un tooltip propio e instantáneo. - Ajuste por ciudad: general para todas, con porcentaje propio por ciudad (casilla General y ✔ verde); la fórmula siempre se aplica (la lambda guarda y valida las excepciones; el cálculo sigue en el front).
- Ciudades no reconocidas: si el texto libre de
Ciudadno cruza, se prueba la ciudad que viene dentro deDepartamento(CODAZZI/CESAR). - Dropdowns con buscador, hovers que no se pisan y pie de la tabla azul.
- Entregas abre en Medellín y el panel de la ciudad vuelve al ranking comparativo de transportadoras.
Producción: qué se hizo y qué se verificó (2026-10-30)¶
| Paso | Resultado |
|---|---|
terraform apply environments/prod/metricas |
45 recursos, 0 cambios, 0 destrucciones. Función Active en la VPC de prod, timeout 900 s. Scheduler DISABLED |
| CD de prod | Ensayo en verde (#20261030.1); luego soloEnsayo: false |
Publicación del stage Produccion |
A mano con create-deployment; el humo dio 403 hasta que propagó y luego 401 SIN_TOKEN |
| Base | Configuración inicial, índices y módulos 169/170 insertados. La colección del resumen se había creado con otro nombre y se renombró antes de correr |
Primera corrida TODO |
926 476 guías leídas en 1 min 53 s; 464 181 entregas y 363 769 devoluciones; 98,1 % con ciudad resuelta; 25 023 documentos; 1 118 ciudades; meses 2024-11 a 2026-10 |
Porcentajes reales por transportadora en esa corrida: Interrapidísimo 56,6 %, Servientrega 50,6 %, Envía 48,0 %, D2E 39,2 %.
Validación contra la base (solo lectura):
- Entregas:
Pagada452 243 +Entregada1 782 +Archivada10 678, menos 462 de XCargo (excluida) y 60Archivadasin fecha = 464 181, igual que la lambda. - La diferencia entre el total de la corrida y la suma por ciudad (8 875 entregas + 6 497 devoluciones) es 15 372, igual al motivo
SIN_CIUDADde la auditoría. - Devoluciones: la lambda da 1 082 más que el conteo simple de estados porque unifica variantes de texto (p. ej. "Devolución completada" con minúscula). No se comprobó por separado.
Criterios de la spec 004 cumplidos con esta evidencia: CA-10 (≥ 95 % de ciudades resueltas: 98,1 %), CA-11 (corrida TODO en menos de 10 min: 1 min 53 s).
Pendiente¶
- Activar el Scheduler de prod (
ENABLEDen Terraform) y el ajuste visual después de la revisión de gerencia. - Desplegar el front a producción (rama de Angular con las vistas y la corrección de
environment.ts). - Decidir
Facturado,INDEMNIZADAyEN PROCESO DE INDEMNIZACION(siguen como "no cuenta"). - Mejoras en
backlog.md: un solo gateway y deployment del stage (M-130/M-131), índice enFechaCarga(M-124), nota visible del ajuste, que Pedidos lea los parámetros de Priorizar. - Verificar con una llamada autenticada en prod que la lambda alcanza Cognito desde la VPC (la subred es la de inventario, que ya valida JWT).
Documentación¶
- Páginas nuevas: seguridad, ajuste visual, panel de administración y esta entrada.
- Páginas actualizadas: visión general, arquitectura, reglas, operación, API, vista Entregas y guía de módulos (campos
estadoyrolessegún lo observado).