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 transacción única siempre está en el lado izquierdo. Para una agregación, pon en el lado izquierdo el origen que trae el asiento consolidado.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. Matcher los aplica en contextos 1:N:
Ejemplo: regla de división con asignación
En un contexto1:N, cada transacción del lado derecho debe pasar los controles de la regla contra la transacción del lado izquierdo. Una regla que compara montos solo coincide con tramos iguales al total, así que una regla de división desactiva matchAmount y deja que la asignación verifique el total. Las reglas TOLERANCE siempre comparan montos.
cURL
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 del lado izquierdo coincide con muchas transacciones del lado derecho.
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
Lado izquierdo (extracto bancario):
Lado derecho (asientos del ledger):
Resultado: coincidencia 1:3 con asignación completa
Coincidencia por agregación (muchos a uno)
Muchas transacciones coinciden con una transacción consolidada. Esto usa el tipo de contexto
1:N con el origen consolidado en el lado izquierdo. No existe 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
Lado derecho (punto de venta):
Lado izquierdo (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
DRY_RUN informa sus estadísticas, pero no guarda grupos de coincidencia. Para listar grupos de coincidencia, ejecuta con COMMIT.
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 y revoca un grupo CONFIRMED. En ambos casos, sus transacciones vuelven a UNMATCHED. Revocar un grupo CONFIRMED también retira sus residuales de partidas abiertas, anula sus variaciones de comisión y retira las excepciones que generó, en la misma transacción. Debes enviar el parámetro de query string contextId y un reason en el cuerpo.
cURL
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.
- Recolectar: para cada transacción del lado izquierdo, Matcher recolecta las transacciones del lado derecho que pasan los controles de la regla contra ella.
- Asignar: Matcher asigna las transacciones recolectadas en el orden de clasificación y se detiene cuando el monto restante queda dentro de la tolerancia de asignación. Omite una transacción en otra moneda. Asigna solo transacciones con el signo de liquidación del
signConventiondel contexto: el signo de la transacción del lado izquierdo conSAME(el predeterminado), el signo opuesto conOPPOSITE. - 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í.
Un grupo tiene como máximo 4 transacciones por lado. Matcher omite un bucket que tiene más de 40 transacciones en cualquiera de los lados. Solo las reglas EXACT y TOLERANCE se ejecutan en contextos N:M.
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: una transacción liquidó de más una obligación que una ejecución anterior arrastró abierta. 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 y lee las estadísticas de la ejecución. Una ejecución de prueba no guarda grupos de coincidencia.
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.

