ADR-0005 · Aviso WebSocket propio del matcher al terminar (match_completed)¶
- Estado: aceptado
- Decisores: mvaliente
- Fecha de la decisión: 2026-08-15
- Relacionado: ADR-17 del paquete
Confirmacion Automatica(la preasignación que este aviso hace visible a tiempo)
Contexto y problema¶
La pantalla de confirmación de cobros recarga el extracto cuando llega
sync_sucessfull, que marca el fin de la conciliación. Pero el matcher de
ADR-17 recién arranca ahí y tarda —medido el 2026-08-14: 12 segundos para
las 47 solicitudes de una cuenta—, así que la recarga leía el extracto antes de
que existiera un solo U_MatchDraft y la preselección llegaba tarde salvo por
casualidad. Suscribir la pantalla a la sala al montar (fix del 14/08) no
alcanzó: el aviso al que reaccionaba seguía siendo el equivocado.
Opciones consideradas¶
- Evento interno nuevo
auto-confirm.match.completed→ broadcast WSmatch_completeden la sala de conciliación — elegida. - Retrasar
sync_sucessfullhasta que el matcher termine — acopla la conciliación al matcher y castiga a las cuentas donde el matcher no corre. - Polling del front tras
sync_sucessfull— tráfico ciego y una espera arbitraria que igual puede quedarse corta.
Decisión¶
El matcher anuncia el fin de cada corrida con un evento interno nuevo
(events/match-completed.event.ts), emitido en el finally de
procesarCuenta: el aviso sale también cuando no había solicitudes y cuando la
corrida falló, porque quien espera necesita saber que ya no hay más
escrituras en camino — un aviso condicionado al éxito dejaría al front
esperando para siempre. La corrida omitida por el guard enCurso no anuncia
(sale antes del try).
Un listener nuevo (notifications/bank-match-notifications.listener.ts) lo
traduce al broadcast WS match_completed en la misma sala de
sync_sucessfull: quien escucha uno escucha el otro, sin una suscripción nueva
que mantener. El listener vive en notifications para que el matcher no
conozca la infraestructura de WS — el mismo criterio por el que la conciliación
emite bank.sync.completed sin saber que el matcher existe.
Los dos avisos siguen haciendo falta. sync_sucessfull pone la lista en
pantalla y apaga el spinner; match_completed trae la marca del sugerido. Y el
segundo no siempre llega (matcher apagado, cuenta fuera de
AUTO_CONFIRM_ACCOUNTS), así que el front no puede depender solo de él: su
recarga es silenciosa (sin spinner, sin pisar la lista si falla) y filtrada
por accountCode, porque el aviso es de sala y llega también por cuentas
ajenas.
Consecuencias¶
- La preselección aparece sola ~12 s después del sync, sin apretar nada.
- Un oyente que falle no puede volver
erroruna corrida ya registrada: la emisión va en su propiotryy nunca propaga. scripts/correr-matcher.tsarma su propioEventEmitter2(corre fuera de Nest); el aviso ahí no llega a ningún front, y está bien: es una herramienta de diagnóstico.