Autor: Iker Acevedo¶
Fecha creacion: 2026-10-18
Estado: desarrollo
Caso de uso: RecibirResultadoUseCase¶
Aplicacion/CasosUso/RecibirResultadoUseCase.cs — ruta /webhooks/ws-inter/flujo-guia.
Procesa lo que ws-inter devuelve por cada guía solicitada.
Reglas¶
- Idempotente. El mismo callback dos veces, o uno más viejo que el ya guardado (
consultado_en), se ignora. - Correlación. Primero por la
refque enviamos; si el proveedor no la devuelve, por número de guía. Si larefpertenece a otra guía, el resultado se cuenta como inválido y no se mezcla. - Motivo nuevo solo si cambió. Se compara el hash (
HuellaMotivos) de la lista completa de motivos. Si cambió:$set PedidosInter.MotivoNovedadIntery nueva entrada en el historial (tope 50). Si no cambió, solo contadores y fechas. - Orden de escritura. Primero
PedidosInter, despuésSeguimientoNovedadesInter: si algo falla entre los dos, el reintento del proveedor vuelve a ver "hubo cambio" y completa lo que faltó. - Errores. Cuerpo ilegible →
PayloadInvalidoException(400). Resultado inválido o guía desconocida → se cuenta y la llamada sigue en 200 (reintentarlo no lo arreglaría). Falla de Mongo → excepción → 500 para que el proveedor reintente. - Error del proveedor (
statusdistinto deok): la solicitud quedaFallidacon el texto del error, se cuenta enConErrorProveedory no se toca el motivo ya guardado ni el pedido. No es lo mismo queencontrado:false(NoEncontrada).
Qué se extrae de la respuesta — ExtractorMotivoNovedad¶
- Último motivo: el de fecha más reciente de
motivos. - Geo: solo la del evento del
flujoque trae ese motivo. Si ese evento no la tiene, el motivo se muestra sin URL: nunca se usa la ubicación de otro evento, porque sería la de otro intento de entrega. - Texto de
MotivoNovedadInter:MOTIVO - URL de Google Maps(soloMOTIVOsi no hay geo). Si la geo no trae URL se construyehttps://www.google.com/maps?q=lat,lngcon cultura invariante (punto decimal). - Guía
encontrado:false→ solicitudNoEncontrada; no se toca el pedido.
Pruebas¶
test/ApiLambdaNovedadesInter.Tests/Aplicacion/RecibirResultadoUseCaseTests.cs y Dominio/ExtractorMotivoNovedadTests.cs
(usan la respuesta real de la guía 240063616541 como fixture).