Endurecimiento y release de GatewayQR: observabilidad de tráfico, configuración externalizada, fixes de seguridad revisados con doble juez, y un E2E completo con el beneficio aplicado de punta a punta.
War (E2E-validado) + templates de config externa, publicado en GitHub. Cambios de consola/gateway, sin cambios que rompan el pago.
Fix trx.mensaje_varios: un autorizador inalcanzable ya no aborta el guardado del trx (recorte a 500).
Un log dedicado que registra cada JSON que cruza un límite de integración, con origen → destino, una línea por evento.
trafico con AsyncAppender neverBlock=true, cada llamada en try/catch, additivity=false.X-Api-Key/Apikey jamás llega al log (verificado: 0 en el E2E).Ahora se puede verificar la config efectiva en cada boot — justo lo que faltaba cuando el emulador quedó mal configurado.
server.emulador.*, app.beneficioscenter.*, datasource, puerto y perfiles.set (••••da7c) — solo los últimos 4, y set (oculto) si el secreto es ≤4 chars.application*.yml (packagingExcludes). La config sale toda del archivo externo.application-dev.yml.example (con emulador) y application-prod.yml.example (sin emulador).endpoint_name) → habría roto el arranque con perfil prod.-D van antes de -jar. Si van después del war, Boot 1.5 los ignora y usa la config interna (era un bug latente del comando de deploy).java -Dspring.profiles.active=prod \
-Dspring.config.location=file:<ruta>/application-prod.yml \
-jar gatewayqr-20260921.war
Doble juez ciego + fix + re-juicio. Los 7 hallazgos de Ronda 1, resueltos y re-verificados.
HttpEntity/headers a DEBUG (existía desde 2024).CHANGE_ME en los yml internos; enmascarado seguro para secretos cortos.endpoint_name) + .gitignore de configs con secretos..yo-rc.json). El scrub los saca hacia adelante, no del pasado.Se levantaron los dos sistemas y se disparó un pago QR real. El traffic.log capturó todo el ida y vuelta:
| POS → GatewayQR | intención de pago |
| GatewayQR → BeneficiosCenter | resolver · branchId "1" |
| BeneficiosCenter → GatewayQR | beneficio 10% · $1000 · code 999 |
| GatewayQR → Autorizador:TECSO | intención + benefits_methods_data |
| Autorizador → GatewayQR | approved (emulador) |
| Emulador → GatewayQR | webhook-pago (callback async) |
| GatewayQR → BeneficiosCenter | resultado (Flujo 2) → encolado |
ALTER TABLE trx ALTER COLUMN mensaje_varios varchar(500) NULL;releases/20260921/application-prod.yml — estructura externalizada + valores reales de infra, con CHANGE_ME en los 4 secretos (a completar en el deploy).setup-emulador-qa.sql — filas mínimas de ruteo para levantar el emulador en un QA nuevo.