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 transação única fica sempre no lado esquerdo. Para uma agregação, coloque no lado esquerdo a fonte que traz o lançamento consolidado.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. O Matcher as aplica em contextos 1:N:
Exemplo: regra de divisão com alocação
Em um contexto1:N, cada transação do lado direito precisa passar nas verificações da regra contra a transação do lado esquerdo. Uma regra que compara valores apenas corresponde pernas iguais ao total, então uma regra de divisão desliga matchAmount e deixa a alocação verificar o total. As regras TOLERANCE sempre comparam valores.
cURL
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 do lado esquerdo corresponde a muitas transações do lado direito.
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
Lado esquerdo (extrato bancário):
Lado direito (lançamentos do ledger):
Resultado: correspondência 1:3 com alocação total
Correspondência por agregação (muitos para um)
Muitas transações correspondem a uma transação consolidada. Isso usa o tipo de contexto
1:N com a fonte consolidada no lado esquerdo. Não existe 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
Lado direito (ponto de venda):
Lado esquerdo (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
DRY_RUN informa as estatísticas dela, mas não armazena grupos de correspondência. Para listar grupos de correspondência, execute com COMMIT.
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 e revoga um grupo CONFIRMED. Nos dois casos, as transações dele voltam para UNMATCHED. Revogar um grupo CONFIRMED também retira os residuais de itens em aberto dele, anula as variações de tarifa dele e retira as exceções que ele levantou, na mesma transação. Você deve enviar o parâmetro de query contextId e um reason no corpo.
cURL
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.
- Coletar: para cada transação do lado esquerdo, o Matcher coleta as transações do lado direito que passam nas verificações da regra contra ela.
- Alocar: o Matcher aloca as transações coletadas na ordem de classificação e para quando o valor restante fica dentro da tolerância de alocação. Ele ignora uma transação em outra moeda. Ele aloca apenas transações com o sinal de liquidação do
signConventiondo contexto: o sinal da transação do lado esquerdo comSAME(o padrão), o sinal oposto comOPPOSITE. - 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.
Um grupo tem no máximo 4 transações por lado. O Matcher ignora um bucket que tem mais de 40 transações em qualquer lado. Apenas regras EXACT e TOLERANCE rodam em contextos N:M.
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 transação liquidou a mais uma obrigação que uma execução anterior carregou em aberto. O Matcher mostra 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 e leia as estatísticas da execução. Uma execução de teste não armazena grupos de correspondência.
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.

