Visão geral
O tipo de contexto controla a cardinalidade da correspondência. O Matcher oferece três tipos de contexto:
Não existe um tipo de contexto
N:1 separado. A correspondência por agregação (muitas fontes para um destino) usa o tipo de contexto 1:N na direção de agregação. O mesmo tipo de contexto cobre tanto a divisão quanto a agregação.Como funciona
Dois mecanismos controlam o comportamento de divisão e agregação:
- Tipo de contexto: determina a cardinalidade da correspondência (
1:1,1:NouN:M). - Flags de alocação da regra: controlam como o Matcher distribui os valores dentro de um grupo de correspondência.
Mapeamento dos tipos de contexto
Configurações de alocação da regra
Todos os tipos de regra aceitam flags de alocação no seuconfig:
Exemplo: regra de tolerância com alocação
cURL
O Matcher aceita e valida
matchScore e matchBaseScore. As duas chaves continuam reservadas/inertes. Elas não mudam a pontuação de confiança calculada. O Matcher sempre calcula a confiança a partir dos pesos internos fixos dos componentes (valor 40, moeda 30, data 20, referência 10). Veja Pontuação de confiança.Criar um contexto 1:N
Para habilitar a correspondência por divisão ou agregação, crie um contexto com o tipo
1:N:
cURL
Correspondência 1:N por divisão
Uma transação da fonte corresponde a várias transações do destino.
Casos de uso comuns
- Pagamento em lote: uma única transferência cobrindo várias faturas
- Folha de pagamento: um débito bancário para vários pagamentos de salário
- Liquidação: um repasse do gateway para vários pedidos
Exemplo: pagamento de faturas em lote
Fonte (extrato bancário):
Destinos (lançamentos do ledger):
Resultado: correspondência 1:3 com alocação total
Correspondência por agregação (muitos para um)
Várias transações da fonte correspondem a uma transação do destino. Essa é a direção de agregação do tipo de contexto
1:N. Não é um tipo N:1 separado.
Casos de uso comuns
- Depósitos bancários: vários cheques depositados como um único crédito
- Liquidações de cartão: lote diário de transações como um único depósito
- Consolidação de caixa: vários comprovantes de caixa para um único depósito
Exemplo: depósito consolidado
Fontes (ponto de venda):
Destino (extrato bancário):
Resultado: correspondência 3:1 com alocação total
Correspondência N:M muitos para muitos
Várias transações da fonte correspondem a várias transações do destino. Esse é o padrão mais complexo.
Casos de uso comuns
- Netting entre empresas: várias faturas compensadas contra vários pagamentos
- Liquidações de negociação: compensação complexa com execuções parciais
- Reconhecimento de receita: várias entregas contra vários adiantamentos
Exemplo: netting entre empresas
Fontes (contas a pagar da Empresa A):
Destinos (contas a receber da Empresa A):
Resultado: correspondência 2:2, US$ 18.000 conciliados no total
Para habilitar a correspondência N:M, crie um contexto com o tipo
N:M:
cURL
Executar e revisar correspondências
Depois de configurar o contexto e as regras, dispare uma execução de correspondência e revise os grupos resultantes.
Executar a correspondência
cURL
Ver o histórico de execuções de correspondência
cURL
Ver os grupos de correspondência de uma execução
Você deve enviar o parâmetro de querycontextId. A resposta é uma lista de grupos de correspondência paginada por cursor, cada um contendo suas transações conciliadas (em todas as cardinalidades) e as pontuações de confiança.
cURL
Quebrar (desfazer) um grupo de correspondência
Para reverter um grupo incorreto, desfaça a correspondência. O Matcher rejeita um grupoPROPOSED com um motivo, e as transações dele voltam para UNMATCHED. Para um grupo CONFIRMED, o Matcher também reverte os efeitos de residual e de itens em aberto que a confirmação aplicou, de forma atômica com a revogação do grupo e a devolução das transações. Você deve enviar o parâmetro de query contextId e um reason no corpo.
cURL
WITHDRAWN terminal. Ele permanece como histórico, mas não é compensável e nenhuma outra execução o carrega. O Matcher verifica a reversibilidade antes de mudar qualquer coisa. O endpoint retorna 409 Conflict se um lançamento vivo posterior ainda se apoia no residual. Ele também retorna esse erro se uma obrigação viva mais recente entrar em conflito com a restauração de um item terminal na mesma identidade. Nos dois casos, ele deixa o grupo, as transações e os itens em aberto inalterados.
Algoritmo de correspondência
O algoritmo depende do tipo de contexto.
Alocação sequencial determinística 1:N
Para cenários de divisão e agregação (1:N), o Matcher usa alocação sequencial determinística:
- Ordenar: o Matcher ordena as transações de forma determinística para garantir resultados reprodutíveis entre execuções.
- Iterar: o motor percorre os candidatos na ordem de prioridade.
- Alocar: o Matcher distribui os valores conforme a configuração
allocationDirection(LEFT_TO_RIGHTouRIGHT_TO_LEFT). - Acompanhar residuais: o Matcher acompanha qualquer valor que sobre sem alocação. Se
allowPartialétrue, o Matcher limita ao valor restante uma perna que ultrapassa. Uma divisão coberta a menos ainda gera uma exceção de diagnóstico.
Solver de correspondência de conjuntos N:M
Para cenáriosN:M, o Matcher não aloca sequencialmente. Ele usa um solver limitado de seleção de subconjuntos. O solver agrupa os candidatos pela identidade de correspondência da regra. Depois ele procura um subconjunto de transações da esquerda e um subconjunto de transações da direita que conciliem entre si. O solver limita a cardinalidade por lado.
A seleção continua determinística sobre a entrada ordenada. Cada grupo proposto deve passar pelo filtro fixo de confiança (pontuação mínima 60). Nenhuma transação cai em dois grupos propostos dentro de uma execução. Nas regras TOLERANCE, a chave nmDeductionBand deixa o solver admitir um subconjunto de pagamentos que paga a menos um subconjunto de faturas dentro da faixa.
Motivos de exceção
As transações que o Matcher não consegue conciliar por completo aparecem como exceções tipadas:SPLIT_INCOMPLETE: existem alocações, mas elas não cobrem por completo o valor do destino, independentemente deallowPartial.OVER_SETTLED: uma perna ultrapassou o que liquidou. O Matcher apresenta o excedente liquidado a mais como uma quebra tipada.
reason.
Boas práticas
Comece com 1:N antes de N:M
Comece com 1:N antes de N:M
A correspondência muitos para muitos é complexa. Comece com padrões mais simples e habilite N:M apenas quando for necessário.
Use a tolerância de alocação para arredondamentos
Use a tolerância de alocação para arredondamentos
Pequenas diferenças de arredondamento são comuns em pagamentos divididos. Defina allocationToleranceValue com alguns centavos para evitar exceções falsas.
Habilite a alocação parcial de forma deliberada
Habilite a alocação parcial de forma deliberada
Defina allowPartial como true apenas quando você espera correspondências parciais. Isso evita correspondências falsas vindas de dados incompletos.
Simule antes de efetivar
Simule antes de efetivar
Sempre teste primeiro a correspondência por divisão e agregação no modo DRY_RUN para conferir os resultados da alocação.
Monitore os residuais
Monitore os residuais
Acompanhe os valores residuais ao longo do tempo. Residuais crescentes podem indicar problemas sistemáticos de correspondência.
Próximos passos
Regras de correspondência
Configure as regras e as opções de alocação.
Segurança
Segurança e controle de acesso.

