Visión general de la arquitectura

Contextos acotados
Matcher tiene seis módulos. Cada uno posee sus datos y expone interfaces limpias hacia los demás.
- Configuración: Qué estás conciliando (contextos, fuentes, mapeos de campos, reglas)
- Ingesta: Obtención de datos (análisis, validación, normalización)
- Conciliación: El motor (ejecución de reglas, puntuación de confianza)
- Excepciones: Manejo de elementos no conciliados (flujo de trabajo, enrutamiento, resolución)
- Gobernanza: Registros de auditoría (logs inmutables para cumplimiento)
- Reportes: Visibilidad (informes, exportaciones, dashboards)
Configuración
Define qué estás conciliando y cómo. Maneja:- Contextos (qué se está conciliando)
- Fuentes (de dónde vienen los datos)
- Mapeos de campos (traducción de campos externos)
- Reglas (cómo conciliar)
ReconciliationContext: El alcance de la conciliaciónReconciliationSource: Configuración de la fuenteFieldMap: Reglas de traducción de camposMatchRule: Lógica de conciliación
Ingesta
El contexto acotado de Ingesta maneja la entrada y normalización de datos. Responsabilidades:- Analizar archivos subidos (CSV, JSON, XML)
- Validar datos entrantes contra esquemas configurados
- Normalizar datos externos a una representación canónica
- Detectar y manejar registros duplicados
- Emitir eventos de dominio cuando la ingesta se completa
IngestionJob: Rastrea el ciclo de vida y estado de la ingestaRawImport: Carga original subidaCanonicalTransaction: Registro de transacción normalizado
IngestionCompleted: Indica que los datos están listos para conciliación
Conciliación
El contexto acotado de Conciliación contiene el motor de reconciliación. Responsabilidades:- Cargar reglas aplicables para un contexto de conciliación
- Ejecutar estrategias de conciliación (exacta, tolerancia, basada en fecha)
- Calcular puntajes de confianza
- Crear grupos de conciliación y asignar transacciones
- Identificar transacciones no conciliadas
MatchRun: Ejecución de un trabajo de conciliaciónMatchGroup: Grupo de transacciones conciliadasMatchItem: Asignación individual de transacción
MatchConfirmed: Un grupo de conciliación ha sido finalizadoTransactionUnmatched: Una transacción no pudo ser conciliada
Gestión de excepciones
El contexto acotado de Excepciones gestiona las transacciones no resueltas. Responsabilidades:- Clasificar excepciones por severidad
- Enrutar excepciones a equipos internos o sistemas externos
- Soportar anulaciones manuales y ajustes
- Rastrear estado de resolución y SLAs
- Integrarse con herramientas externas de flujo de trabajo
Exception: Una transacción no resueltaResolution: Resultado del manejo de la excepciónRoutingRule: Lógica de enrutamiento y escalamiento
- JIRA para seguimiento de incidencias
- ServiceNow para incidentes críticos
- Webhooks para flujos de trabajo personalizados
Gobernanza
El contexto acotado de Gobernanza preserva la trazabilidad de la conciliación. Responsabilidades:- Registrar todas las acciones del sistema en logs de auditoría inmutables
- Proporcionar historial de auditoría consultable
- Soportar reportes regulatorios y de cumplimiento
AuditLog: Registro de solo adición de actividad del sistema
Reportes
El contexto acotado de Reportes proporciona visibilidad operacional. Responsabilidades:- Generar informes de conciliación
- Exponer métricas de dashboard
- Exportar datos de conciliación en múltiples formatos
Report: Resumen de conciliaciónDashboard: Métricas operacionales agregadasExportJob: Ejecución de exportación asíncrona
Flujo de datos
La conciliación sigue un pipeline determinístico a través de los contextos acotados:
Configuración
Los contextos de conciliación, fuentes, mapeos de campos y reglas se definen a través de la API.
Ingesta
Los datos externos se suben o se obtienen. Los archivos se analizan, validan, normalizan y deduplican. Se emite un evento
IngestionCompleted.Conciliación
Las reglas de conciliación se aplican a las transacciones elegibles, produciendo grupos de conciliación con puntajes de confianza. Las conciliaciones de alta confianza se aprueban automáticamente. Los elementos no conciliados se convierten en excepciones.
Manejo de excepciones
Las excepciones se clasifican, enrutan y resuelven ya sea manualmente o a través de sistemas externos. Las actualizaciones de resolución se propagan de vuelta a Matcher.
Componentes de infraestructura
Matcher depende de los siguientes servicios de infraestructura:
| Componente | Propósito | Uso |
|---|---|---|
| PostgreSQL | Almacén de datos principal | Datos de dominio con aislamiento de esquema por tenant |
| Redis | Caché y coordinación | Deduplicación, bloqueos, claves de idempotencia |
| RabbitMQ | Broker de mensajes | Comunicación asíncrona entre contextos |
Arquitectura de base de datos
- Aislamiento de esquema por tenant para fuerte separación de datos
- Consistencia fuerte para estado de conciliación y excepciones
- Consistencia eventual para vistas de reportes
Multi-tenancy
Matcher aplica estricto aislamiento de tenants:- La identidad del tenant se extrae exclusivamente de los claims del JWT
- Los identificadores de tenant nunca se aceptan a través de parámetros de solicitud
- El acceso a la base de datos se limita a través de la resolución de esquemas
- Todas las consultas se restringen automáticamente al tenant activo
Este modelo previene el acceso a datos entre tenants y soporta requisitos regulatorios y de auditoría.
Patrones de diseño
Arquitectura hexagonal
Cada contexto acotado sigue el patrón de puertos y adaptadores:CQRS-light
Los caminos de escritura y lectura se separan a nivel de servicio:*_command.gopara mutaciones de estado*_query.gopara operaciones de lectura
Patrón Outbox
La publicación de eventos sigue el patrón outbox:- El estado de dominio y los registros outbox se persisten atómicamente
- Workers en segundo plano publican eventos a RabbitMQ
- Los eventos se marcan como procesados después de la entrega exitosa

