Pular para o conteúdo principal
Esta integração é opcional. O Matcher é um produto independente que funciona de forma autônoma. Use este guia apenas se você quiser integrar o Matcher com o Midaz Ledger.
O Matcher pode se integrar nativamente com o Midaz Ledger, permitindo a reconciliação contínua de transações do ledger contra fontes externas como extratos bancários e gateways de pagamento.

Visão geral


A integração com o Midaz oferece:
  • Acesso direto ao ledger: Consulte transações diretamente do Midaz sem necessidade de exportar arquivos
  • Sincronização em tempo real: Sincronização automática de transações conforme os lançamentos são registrados
  • Autenticação unificada: Sistema único de autenticação via lib-auth
  • Isolamento de tenants: Arquitetura de schema-por-tenant garante a separação de dados

Pré-requisitos


Antes de configurar a integração com o Midaz:
  • Instância do Midaz Ledger em execução e acessível
  • Credenciais de API com permissões de leitura de transações
  • Conectividade de rede entre o Matcher e o Midaz
  • Configuração de tenant correspondente em ambos os sistemas

Configuração


Variáveis de ambiente

Configure o Matcher para conectar à sua instância do Midaz:
# Conexão com o Midaz
MIDAZ_BASE_URL=https://api.midaz.example.com
MIDAZ_GRPC_ADDRESS=midaz-grpc.example.com:50051

# Autenticação (compartilhada com o Midaz)
AUTH_SERVICE_URL=https://auth.example.com
AUTH_CLIENT_ID=matcher-service
AUTH_CLIENT_SECRET=your-secret

# Configurações de conexão
MIDAZ_CONNECTION_TIMEOUT=30s
MIDAZ_REQUEST_TIMEOUT=60s
MIDAZ_MAX_RETRIES=3

Criar source do Midaz

Crie um source do tipo MIDAZ através da API de configuração de sources.
Referência da API: Criar source

Configurações do source

ConfiguraçãoTipoDescrição
ledger_idStringID do ledger de destino no Midaz
account_filter.typeStringFiltro por tipo de conta (ASSET, LIABILITY, etc.)
account_filter.path_prefixStringPrefixo do caminho da conta a incluir
account_filter.accountsArrayIDs de contas específicas a incluir
sync_modeStringrealtime ou batch
lookback_daysIntegerDias de dados históricos a incluir
exclude_pendingBooleanExcluir lançamentos pendentes

Autenticação


O Matcher usa o mesmo sistema de autenticação que o Midaz através da biblioteca compartilhada lib-auth.

Autenticação serviço-a-serviço

O Matcher se autentica no Midaz usando credenciais de cliente OAuth 2.0:
# A troca de tokens acontece automaticamente
# Matcher solicita: POST /oauth/token
{
 "grant_type": "client_credentials",
 "client_id": "matcher-service",
 "client_secret": "your-secret",
 "scope": "ledger:read transactions:read"
}

Escopos necessários

EscopoPermissão
ledger:readLer metadados do ledger
transactions:readLer lançamentos de transações
accounts:readLer informações de contas

Contexto do tenant

Todas as requisições incluem o header de contexto do tenant:
X-Tenant-ID: tenant_001
Isso garante que as transações sejam consultadas do schema correto do tenant.

Consultando transações


Sincronização automática

Com sync_mode: realtime, o Matcher se inscreve nos eventos do Midaz e recebe as transações assim que são registradas. Quando uma transação é criada no Midaz, ele publica um evento na fila de mensagens. O Matcher consome o evento, armazena a transação localmente e a coloca na fila para matching—tudo sem intervenção manual.
Ingestão orientada a eventos

Filtros de consulta

Filtre transações ao sincronizar:
{
  "date_from": "2024-01-01",
  "date_to": "2024-01-31",
  "filters": {
    "operation_types": [
      "CREDIT",
      "DEBIT"
    ],
    "min_amount": 100.0,
    "currencies": [
      "USD",
      "EUR"
    ],
    "metadata": {
      "source_system": "treasury"
    }
  }
}

Mapeamento de transações


As transações do Midaz são automaticamente mapeadas para o schema do Matcher:
Campo MidazCampo MatcherObservações
idtransaction_idID único do lançamento
amountamountValor decimal
asset_codecurrencyCódigo de moeda ISO
created_atdateData do lançamento
descriptionreferenceDescrição do lançamento
metadata.external_refexternal_idReferência externa, se presente
operationtypeCREDIT ou DEBIT

Mapeamento de campos personalizado

Sobrescreva o mapeamento padrão para casos de uso específicos:
{
  "settings": {
    "field_mapping": {
      "reference": "metadata.invoice_number",
      "counterparty": "metadata.vendor_name",
      "external_id": "metadata.bank_reference"
    }
  }
}

Isolamento de tenants


O Matcher herda o modelo de isolamento schema-por-tenant do Midaz.

Como funciona

  1. Cada tenant possui um schema PostgreSQL dedicado
  2. Todas as consultas são limitadas ao schema do tenant
  3. O pool de conexões mantém o contexto do schema
  4. Não é possível acesso a dados entre tenants
Database: matcher_db
├── tenant_001 (schema)
│ ├── transactions
│ ├── matches
│ └── exceptions
├── tenant_002 (schema)
│ ├── transactions
│ ├── matches
│ └── exceptions
└── shared (schema)
 ├── field_maps
 └── rules_templates

Resolução do tenant

O tenant é determinado a partir do token de autenticação:
{
  "sub": "user_123",
  "tenant_id": "tenant_001",
  "roles": [
    "reconciliation_admin"
  ]
}

Tratamento de erros


Erros de conexão

{
  "error": "MIDAZ_CONNECTION_ERROR",
  "message": "Failed to connect to Midaz at midaz-grpc.example.com:50051",
  "details": {
    "retry_count": 3,
    "last_error": "connection refused"
  },
  "suggestion": "Check network connectivity and Midaz service status"
}

Erros de autenticação

{
  "error": "MIDAZ_AUTH_ERROR",
  "message": "Failed to authenticate with Midaz",
  "details": {
    "status_code": 401,
    "reason": "invalid_client"
  },
  "suggestion": "Verify client credentials and required scopes"
}

Erros de sincronização

{
  "error": "MIDAZ_SYNC_ERROR",
  "message": "Partial sync failure",
  "details": {
    "total_expected": 5000,
    "fetched": 4500,
    "failed_batches": [
      {
        "batch": 10,
        "error": "timeout"
      }
    ]
  },
  "suggestion": "Retry failed batches or increase timeout"
}

Boas práticas


Habilite sync_mode: realtime para contextos com reconciliação diária. Isso garante que as transações estejam disponíveis para matching imediatamente após o registro.
Use account_filter.path_prefix para limitar as transações às contas relevantes. Isso reduz o volume de dados e melhora o desempenho do matching.
Configure lookback_days com base no seu ciclo de reconciliação. Reconciliação diária geralmente precisa de 7-14 dias; mensal precisa de 45-60 dias.
Acompanhe o atraso entre os registros no Midaz e a disponibilidade no Matcher. Alto atraso pode indicar acúmulo na fila ou problemas de processamento.
Armazene dados relevantes para matching nos campos de metadados do Midaz (números de fatura, referências bancárias) e mapeie-os para campos do Matcher para melhores taxas de correspondência.

Próximos passos