Skip to main content
A conciliação do mundo real muitas vezes envolve transações que não correspondem 1:1. Um único pagamento pode cobrir várias faturas, ou vários depósitos podem se consolidar em um lançamento bancário. O Matcher trata esses cenários complexos com a correspondência por divisão e agregação.

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:
  1. Tipo de contexto: determina a cardinalidade da correspondência (1:1, 1:N ou N:M).
  2. Flags de alocação da regra: controlam como o Matcher distribui os valores dentro de um grupo de correspondência.
Não existe uma configuração “divisão” ou “agregação” separada no contexto. O tipo de contexto define os padrões permitidos, e a config da regra controla o comportamento de alocação.

Mapeamento dos tipos de contexto

Configurações de alocação da regra

Todos os tipos de regra aceitam flags de alocação no seu config:

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
Referência da API: Criar contexto

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 query contextId. 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 grupo PROPOSED 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
Se a reversão do grupo confirmado remove a última contribuição viva por trás de uma obrigação, aquele item em aberto vira 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:
  1. Ordenar: o Matcher ordena as transações de forma determinística para garantir resultados reprodutíveis entre execuções.
  2. Iterar: o motor percorre os candidatos na ordem de prioridade.
  3. Alocar: o Matcher distribui os valores conforme a configuração allocationDirection (LEFT_TO_RIGHT ou RIGHT_TO_LEFT).
  4. 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ários N: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 de allowPartial.
  • OVER_SETTLED: uma perna ultrapassou o que liquidou. O Matcher apresenta o excedente liquidado a mais como uma quebra tipada.
Você pode filtrar a lista de exceções por esses valores de reason.

Boas práticas


A correspondência muitos para muitos é complexa. Comece com padrões mais simples e habilite N:M apenas quando for necessário.
Pequenas diferenças de arredondamento são comuns em pagamentos divididos. Defina allocationToleranceValue com alguns centavos para evitar exceções falsas.
Defina allowPartial como true apenas quando você espera correspondências parciais. Isso evita correspondências falsas vindas de dados incompletos.
Sempre teste primeiro a correspondência por divisão e agregação no modo DRY_RUN para conferir os resultados da alocação.
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.