Hisotial de cambios¶
Historial de cambios, nuevas funcionalidades y correcciones del sistema LogiGho.
Formato de entrada¶
## [version o fecha] — Descripción corta
### Nuevas funcionalidades
- Descripción de qué se agregó
### Cambios
- Descripción de qué cambió
### Correcciones
- Descripción de bugs corregidos
### Documentación
- Qué se documentó en esta entrega
[2026-09-09] — Cotizador con/sin recaudo: Envía real + Strategy + reglas de forma de pago¶
Nuevas funcionalidades¶
- Envía ahora cotiza real en
ApiLambdaCotizarEnvia— antes el orquestador estimaba geográfico porque el request no traía los campos de cuenta requeridos y no se distinguía el error de negocio del éxito. - Con/sin recaudo en las 3 transportadoras (
Common.ConRecaudo): antes solo existía visualmente para Envía y ni siquiera se aplicaba de verdad. - Backend: patrón Strategy (
ICotizadorProveedor+RegistroCotizadores) para desacoplar cada transportadora del orquestador.DirectFunctionbajó de ~200 a ~55 líneas. - Backend:
EnviaCuentaResolverresuelve la cuenta de Envía (2 cuentas globales) segúnConRecaudo— con la semántica invertida de Envía (Crédito = con recaudo, Contraentrega = sin recaudo). - Front: paso 3 del modal de creación de pedidos extraído a
PasoCotizacionComponent, con badge de tarifa más económica y botón de desglose crudo (gateado por rol, no por backend). - Front: nuevo módulo
reglas-modalidad-pago.ts— single source of truth de cómo el switch de recaudo se traduce a "Forma de pago" por transportadora en el paso 4 (Guía).
Correcciones¶
- Envía respondía
200 OKcon error de negocio (peso fuera de rango, etc.) y el orquestador lo leía como cotización válida con flete $0 — nuevaEnviaLiquidacionException. - Interrapidísimo: el cliente HTTP mandaba
ValorContraPagoen el campo que debía llevarValorDeclarado— separados en el DTO y el mapeo. EliminadoIdFormaPago(campo muerto). - Bug de producción: guía de Envía quedaba forzada a
FORMA DE PAGO = CREDITO/APLICA CONTRA PAGO = NOsin importar el switch del usuario, por un bloque de cálculo duplicado engenerarGuia(). Corregido centralizando la regla enreglas-modalidad-pago.ts.
Documentación¶
- Actualizados
ApiLambdaOrquestadorCotizaciones.md,ApiLambdaCotizarEnvia.md,ApiLambdaCotizarInterrapidisimo.md,ApiLambdaGenerarCotizacion.md. - Nuevo ADR-001 — Strategy para cotizadores y semántica de recaudo.
- Nuevas páginas front: paso-cotizacion.md, cotizacion-service.md, reglas-modalidad-pago.md. Actualizado
modal-creacion-pedidos.component.md.
[2026-09-02] — DevolucionesMasivo: confiabilidad de Inter (token real, reintentos, fallback cruzado)¶
Correcciones¶
- Token de Inter vencía en 20 minutos según el código, en 30 segundos según Inter real (confirmado decodificando el JWT que devuelve
GenerarTokenTemporal) — causaba 401 masivos en cargas de más de 30s de duración._tokenVencebajado a 20s. - Fallos HTTP de
ClienteInter(rastreo y estados) no dejaban ningún rastro en logs cuando Inter respondía distinto de 2xx — ahora se logueastatusCodey cuerpo de la respuesta en cada intento fallido. - Sin reintentos ante
429/5xxde Inter: ahora hasta 4 intentos con backoff exponencial + jitter, respetandoRetry-After. - Tráfico sostenido sin pausas entre tandas (
SemaphoreSlimsin cortes) podía seguir gatillando 429 con lotes de 200+ guías — ahora hay pausa configurable entre tanda y tanda (PAUSA_ENTRE_PETICIONES_INTER_MS). - Guías rechazadas por la transportadora asignada (
ErrorConsultaExterna, ej. 400 explícito) o sin ningún formato reconocido (GuiaNoExisteEnSistema) no se reintentaban contra otra transportadora — solo cubríaSinGuiaOriginalEnRespuesta. Ahora los 3 motivos disparan el fallback cruzado, con Inter primero por volumen.
Cambios¶
CONCURRENCIA_INTERpor defecto bajada de 10 a 5 en código y en ambos entornos (prod/preprod).
Documentación¶
- ADR-005 con el diagnóstico completo. Actualizados
clientes-transportadora.md,worker-handler.mdy la tabla de variables de entorno del módulo.
[2026-07-27] — Pancake: doble escritura de páginas, fix de ventana y endpoint on-demand¶
Nuevas funcionalidades¶
- Endpoint on-demand
ApiLambdaConsultarEstadisticasPagina(API GatewayPOST): trae estadísticas frescas de una página (hoy / ayer / rango personalizado) sin persistir, con fallback de token de página. ApiLambdaListarPaginasPancakeahora hace doble escritura Mongo + Aurora MySQL.
Correcciones¶
- Ventana
cierre_dia_anterior:untilcorregido de00:00:00del día siguiente a**23:59:59** del mismo día — Pancake ya no arrastra gasto del otro día.
Documentación¶
- Nueva página Endpoint on-demand (API) en Backend → Integración Pancake; actualizadas las páginas de
ListarPaginasPancake(SQL) yCalcularVentanaTiempo(fixuntil).
[2026-07-13] — Integración Pancake (estadísticas de campañas)¶
Nuevas funcionalidades¶
- Pipeline serverless de 5 lambdas .NET 8 que recolecta las estadísticas de campañas de Pancake (
pages.fm) 4 veces al día (7am/9am/2pm/5pm hora Colombia), orquestado con AWS Step Functions y agendado con EventBridge Scheduler. - Doble escritura de estadísticas por campaña: MongoDB + RDS Aurora MySQL (patrón Composite, best-effort, UPSERT idempotente, modo inerte plug-and-play).
Documentación¶
- Nueva sección Backend → Integración Pancake: visión general con diagrama de arquitectura, una página por lambda, orquestación (Step Functions + ASL + EventBridge) y guía de operación (ejecución manual, agregar franjas, monitoreo y troubleshooting).