Resumen
El tipo de contexto controla la cardinalidad de la coincidencia. Matcher admite tres tipos de contexto:
No existe un tipo de contexto
N:1 separado. La coincidencia por agregación (muchos orígenes a un destino) usa el tipo de contexto 1:N en la dirección de agregación. El mismo tipo de contexto cubre tanto la división como la agregación.Cómo funciona
Dos mecanismos controlan el comportamiento de división y agregación:
- Tipo de contexto: determina la cardinalidad de la coincidencia (
1:1,1:NoN:M). - Flags de asignación de la regla: controlan cómo Matcher distribuye los montos dentro de un grupo de coincidencia.
Mapeo de tipos de contexto
Configuración de asignación de la regla
Todos los tipos de regla aceptan flags de asignación en suconfig:
Ejemplo: regla de tolerancia con asignación
cURL
Matcher acepta y valida
matchScore y matchBaseScore. Ambas claves siguen siendo reservadas/inertes. No cambian la puntuación de confianza calculada. Matcher siempre calcula la confianza a partir de los pesos internos fijos de los componentes (monto 40, moneda 30, fecha 20, referencia 10). Consulta Puntuación de confianza.Cómo crear un contexto 1:N
Para habilitar la coincidencia por división o por agregación, crea un contexto con el tipo
1:N:
cURL
Coincidencia por división 1:N
Una transacción de origen coincide con varias transacciones de destino.
Casos de uso comunes
- Pago masivo: una sola transferencia bancaria que cubre varias facturas
- Nómina: un solo débito bancario para varios pagos de salario
- Liquidación: un solo pago del gateway para varios pedidos
Ejemplo: pago masivo de facturas
Origen (extracto bancario):
Destinos (asientos del ledger):
Resultado: coincidencia 1:3 con asignación completa
Coincidencia por agregación (muchos a uno)
Varias transacciones de origen coinciden con una transacción de destino. Esta es la dirección de agregación del tipo de contexto
1:N. No es un tipo N:1 separado.
Casos de uso comunes
- Depósitos bancarios: varios cheques depositados como un solo crédito
- Liquidaciones de tarjetas: lote diario de transacciones como un solo depósito
- Consolidación de efectivo: varios recibos de caja registradora a un solo depósito
Ejemplo: depósito consolidado
Orígenes (punto de venta):
Destino (extracto bancario):
Resultado: coincidencia 3:1 con asignación completa
Coincidencia N:M de muchos a muchos
Varias transacciones de origen coinciden con varias transacciones de destino. Este es el patrón más complejo.
Casos de uso comunes
- Neteo intercompañía: varias facturas neteadas contra varios pagos
- Liquidaciones de operaciones: compensación compleja con ejecuciones parciales
- Reconocimiento de ingresos: varias entregas contra varios anticipos
Ejemplo: neteo intercompañía
Orígenes (cuentas por pagar de la Empresa A):
Destinos (cuentas por cobrar de la Empresa A):
Resultado: coincidencia 2:2, $18,000 en total coincidente
Para habilitar la coincidencia N:M, crea un contexto con el tipo
N:M:
cURL
Cómo ejecutar y revisar las coincidencias
Después de configurar el contexto y las reglas, dispara una ejecución de coincidencia y revisa los grupos resultantes.
Ejecutar la coincidencia
cURL
Ver el historial de ejecuciones de coincidencia
cURL
Ver los grupos de coincidencia de una ejecución
Debes enviar el parámetro de query stringcontextId. La respuesta es una lista de grupos de coincidencia paginada por cursor, cada uno con sus transacciones coincidentes (en todas las cardinalidades) y sus puntuaciones de confianza.
cURL
Romper (deshacer) un grupo de coincidencia
Para revertir un grupo incorrecto, deshaz la coincidencia. Matcher rechaza un grupoPROPOSED con un motivo, y sus transacciones vuelven a UNMATCHED. Para un grupo CONFIRMED, Matcher además revierte los efectos sobre residuos y partidas abiertas que aplicó la confirmación, de forma atómica junto con la revocación del grupo y la devolución de sus transacciones. Debes enviar el parámetro de query string contextId y un reason en el cuerpo.
cURL
WITHDRAWN terminal. Queda como historial, pero no es neteable y ninguna otra ejecución la arrastra. Matcher verifica la reversibilidad antes de cambiar nada. El endpoint devuelve 409 Conflict si un asiento activo posterior todavía se apoya en el residuo. También devuelve ese error si una obligación activa más reciente entraría en conflicto con la restauración de una partida terminal en la misma identidad. En ambos casos deja el grupo, las transacciones y las partidas abiertas sin cambios.
Algoritmo de coincidencia
El algoritmo depende del tipo de contexto.
Asignación secuencial determinista 1:N
Para los escenarios de división y agregación (1:N), Matcher usa asignación secuencial determinista:
- Ordenar: Matcher ordena las transacciones de forma determinista para asegurar resultados reproducibles entre ejecuciones.
- Iterar: el motor recorre los candidatos en orden de prioridad.
- Asignar: Matcher distribuye los montos según el ajuste
allocationDirection(LEFT_TO_RIGHToRIGHT_TO_LEFT). - Seguir los residuos: Matcher hace seguimiento de los montos que quedan sin asignar. Si
allowPartialestrue, Matcher limita un tramo que se excede al monto restante. Una división con cobertura insuficiente igual expone una excepción de diagnóstico.
Solucionador de coincidencia de conjuntos N:M
Para los escenariosN:M, Matcher no asigna de forma secuencial. Usa un solucionador acotado de selección de subconjuntos. El solucionador agrupa los candidatos por la identidad de coincidencia de la regla. Luego busca un subconjunto de transacciones del lado izquierdo y un subconjunto de transacciones del lado derecho que concilien entre sí. El solucionador limita la cardinalidad por lado.
La selección se mantiene determinista sobre la entrada ordenada. Cada grupo propuesto debe superar el control fijo de confianza (puntuación mínima 60). Ninguna transacción cae en dos grupos propuestos dentro de una misma ejecución. En las reglas TOLERANCE, la clave nmDeductionBand permite que el solucionador admita un subconjunto de pagos que paga de menos un subconjunto de facturas dentro de la banda.
Motivos de excepción
Las transacciones que Matcher no puede conciliar por completo se exponen como excepciones tipificadas:SPLIT_INCOMPLETE: existen asignaciones pero no cubren por completo el monto de destino, sin importarallowPartial.OVER_SETTLED: un tramo liquidó de más. Matcher expone el remanente liquidado de más como una discrepancia tipificada.
reason.
Mejores prácticas
Empieza con 1:N antes de N:M
Empieza con 1:N antes de N:M
La coincidencia de muchos a muchos es compleja. Empieza con patrones más simples y habilita N:M solo cuando sea necesario.
Usa la tolerancia de asignación para el redondeo
Usa la tolerancia de asignación para el redondeo
Las pequeñas diferencias de redondeo son comunes en los pagos divididos. Configura allocationToleranceValue en unos pocos centavos para evitar excepciones falsas.
Habilita la asignación parcial de forma deliberada
Habilita la asignación parcial de forma deliberada
Configura allowPartial en true solo cuando esperas coincidencias parciales. Esto evita coincidencias falsas por datos incompletos.
Haz una ejecución de prueba antes de confirmar
Haz una ejecución de prueba antes de confirmar
Prueba siempre la coincidencia por división y por agregación primero en modo DRY_RUN para verificar los resultados de asignación.
Monitorea los residuos
Monitorea los residuos
Haz seguimiento de los montos residuales en el tiempo. Los residuos crecientes pueden indicar problemas sistemáticos de coincidencia.
Próximos pasos
Reglas de coincidencia
Configura reglas y ajustes de asignación.
Seguridad
Seguridad y control de acceso.

