Descripción general
La cardinalidad de la coincidencia se controla mediante el tipo de contexto. Matcher soporta tres tipos de contexto:
No existe un tipo de contexto
N:1 separado. La coincidencia agregada (muchos orígenes a un destino) es simplemente el tipo de contexto 1:N aplicado en la dirección de agregación: el mismo tipo de contexto cubre tanto la división como la agregación.Cómo funciona
El comportamiento de división y agregación se controla mediante dos mecanismos:
- Tipo de contexto — determina la cardinalidad de la coincidencia (
1:1,1:NoN:M). - Flags de asignación en la regla — controlan cómo se distribuyen los montos dentro de un grupo de coincidencia.
Mapeo de tipo de contexto
Configuraciones de asignación en reglas
Todos los tipos de regla aceptan flags de asignación en suconfig:
Ejemplo: regla de tolerancia con asignación
cURL
matchScore y matchBaseScore se aceptan y validan pero son reservados/inertes — no cambian la puntuación de confianza calculada. La confianza siempre se calcula a partir de los pesos de componentes internos fijos (monto 40, moneda 30, fecha 20, referencia 10). Consulta Puntuación de confianza.Creando un contexto 1:N
Para habilitar coincidencia dividida o agregada, crea un contexto con tipo
1:N:
cURL
Coincidencia dividida 1:N
Una transacción de origen coincide con múltiples transacciones de destino.
Casos de uso comunes
- Pago masivo: Una transferencia cubriendo múltiples facturas
- Nómina: Un débito bancario para múltiples pagos de salario
- Liquidación: Un pago de pasarela para múltiples órdenes
Ejemplo: pago masivo de facturas
Origen (Extracto bancario):
Destinos (Asientos contables):
Resultado: Coincidencia 1:3 con asignación completa
Coincidencia agregada (muchos a uno)
Múltiples 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: Múltiples cheques depositados como un crédito
- Liquidaciones de tarjeta: Lote diario de transacciones como un depósito
- Consolidación de efectivo: Múltiples recibos de caja a un 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 muchos a muchos
Múltiples transacciones de origen coinciden con múltiples transacciones de destino. Este es el patrón más complejo.
Casos de uso comunes
- Compensación intercompañía: Múltiples facturas compensadas contra múltiples pagos
- Liquidaciones comerciales: Compensación compleja con llenados parciales
- Reconocimiento de ingresos: Múltiples entregas contra múltiples anticipos
Ejemplo: compensación intercompañía
Orígenes (Cuentas por pagar Empresa A):
Destinos (Cuentas por cobrar Empresa A):
Resultado: Coincidencia 2:2, $18,000 total coincidido
Para habilitar coincidencia N:M, crea un contexto con tipo
N:M:
cURL
Ejecutando y revisando coincidencias
Después de configurar el contexto y las reglas, inicia una ejecución de coincidencia y revisa los grupos resultantes.
Ejecutar coincidencia
cURL
Ver historial de ejecuciones
cURL
Ver los grupos de coincidencia de una ejecución
El parámetro de consultacontextId es obligatorio. La respuesta es una lista paginada por cursor de grupos de coincidencia, cada uno con sus transacciones coincididas (en todas las cardinalidades) y sus puntajes de confianza.
cURL
Deshacer (desemparejar) un grupo de coincidencia
Para revertir un grupo incorrecto, usa unmatch. Un grupoPROPOSED se rechaza con un motivo y sus transacciones vuelven a UNMATCHED. Para un grupo CONFIRMED, Matcher también revierte los efectos residuales/de partida abierta que aplicó esa confirmación, de forma atómica con la revocación del grupo y la devolución de sus transacciones. El parámetro de consulta contextId es obligatorio, y se envía un reason en el cuerpo.
cURL
WITHDRAWN: permanece como historial, pero no se puede compensar ni llevar a otra ejecución. Matcher verifica que la reversión sea posible antes de cambiar nada. Si una entrada posterior aún activa sigue sobre el residual, o una obligación más reciente y activa entraría en conflicto con restaurar una partida terminal con la misma identidad, el endpoint devuelve 409 Conflict y deja sin cambios el grupo, las transacciones y las partidas abiertas.
Algoritmo de coincidencia
El algoritmo depende del tipo de contexto.
1:N — asignación secuencial determinista
Para escenarios de split y agregación (1:N), Matcher usa asignación secuencial determinista:
- Ordenar: Las transacciones se ordenan de forma determinista para asegurar resultados reproducibles entre ejecuciones.
- Iterar: El motor recorre los candidatos en orden de prioridad.
- Asignar: Los montos se distribuyen según la configuración de
allocationDirection(LEFT_TO_RIGHToRIGHT_TO_LEFT). - Rastrear residuos: Cualquier monto no asignado restante se rastrea. Si
allowPartialestrue, un tramo que se excede se recorta al monto restante; un split con cobertura incompleta aún genera una excepción de diagnóstico.
N:M — solucionador de coincidencia de conjuntos
Para escenariosN:M, Matcher no asigna de forma secuencial. Usa un solucionador acotado de selección de subconjuntos: los candidatos se agrupan por la identidad de coincidencia de la regla, y el solucionador busca un subconjunto de transacciones del lado izquierdo y un subconjunto del lado derecho que se concilien entre sí, con cardinalidad limitada por lado. La selección es determinista sobre la entrada ordenada, cada grupo propuesto debe superar el umbral fijo de confianza (puntuación mínima de 60), y ninguna transacción cae en dos grupos propuestos dentro de una misma ejecución. En reglas TOLERANCE, la clave nmDeductionBand permite al solucionador admitir un subconjunto de pagos que paga de menos un subconjunto de facturas dentro de la banda.
Razones de excepción
Las transacciones que no pueden conciliarse por completo aparecen como excepciones tipadas:SPLIT_INCOMPLETE— existen asignaciones pero no cubren completamente el monto objetivo, independientemente deallowPartial.OVER_SETTLED— un tramo excedió lo que estaba liquidando; el remanente sobreliquidado se registra como una excepción tipada.
reason.
Mejores prácticas
Comienza con 1:N antes de N:M
Comienza con 1:N antes de N:M
La coincidencia muchos a muchos es compleja. Comienza con patrones más simples y habilita N:M solo cuando sea necesario.
Usa tolerancia de asignación para redondeos
Usa tolerancia de asignación para redondeos
Las pequeñas diferencias de redondeo son comunes en pagos divididos. Configura allocationToleranceValue en unos pocos centavos para evitar excepciones falsas.
Habilita asignación parcial deliberadamente
Habilita asignación parcial deliberadamente
Solo configura allowPartial como true cuando se esperan coincidencias parciales. Esto previene coincidencias falsas de datos incompletos.
Ejecuta dry-run antes de confirmar
Ejecuta dry-run antes de confirmar
Siempre prueba la coincidencia dividida y agregada en modo DRY_RUN primero para verificar los resultados de asignación.
Monitorea los residuos
Monitorea los residuos
Rastrea los montos residuales a lo largo del tiempo. Los residuos crecientes pueden indicar problemas sistemáticos de coincidencia.
Próximos pasos
Reglas de coincidencia
Configura reglas y configuraciones de asignación.
Seguridad
Seguridad y control de acceso.

