Visão geral da arquitetura
Visão geral da arquitetura do Matcher
Bounded contexts
O Matcher possui sete módulos. Cada um é dono dos seus dados e expõe interfaces limpas para os outros.
- Configuration: O que você está conciliando (contextos, fontes, mapas de campos, regras)
- Discovery: Conexões com fontes de dados externas, detecção de schema e orquestração de extração com o motor Fetcher embarcado
- Ingestion: Entrada de dados (parsing, validação, normalização)
- Matching: O motor (execução de regras, scoring de confiança)
- Exception: Tratamento de itens não conciliados (workflow, roteamento, resolução)
- Governance: Trilhas de auditoria (logs imutáveis para compliance)
- Reporting: Visibilidade (relatórios, exportações, dashboards)
Configuration
Define o que você está conciliando e como. Responsabilidades:- Contextos (o que está sendo conciliado)
- Fontes (de onde os dados vêm)
- Mapas de campos (tradução de campos externos)
- Regras (como fazer o matching)
ReconciliationContext: O escopo da conciliaçãoReconciliationSource: Configuração da fonteFieldMap: Regras de tradução de camposMatchRule: Lógica de matching
Discovery
O bounded context de Discovery gerencia a conectividade com fontes de dados externas, a detecção de schema e a orquestração de extrações com o motor Fetcher embarcado. O Matcher hospeda esse motor no próprio processo; o Fetcher não é um serviço remoto. Responsabilidades:- Gerenciar as conexões com fontes de dados externas
- Detectar e cachear os schemas das fontes
- Executar extrações no próprio processo e encaminhar os resultados diretamente para a Ingestion
- Rastrear os ciclos de vida das conexões e das extrações
FetcherConnection: Conexão com uma fonte externa gerenciada localmente pelo motor embarcadoExtractionRequest: Rastreia o ciclo de vida de uma extração executada pelo motor embarcado
Consulte Discovery para ver como o Discovery se conecta a bancos de dados externos com o motor Fetcher embarcado.
Ingestion
O bounded context de Ingestion lida com a entrada e normalização de dados. Responsabilidades:- Fazer parse de arquivos enviados (CSV, JSON, XML)
- Validar dados de entrada contra schemas configurados
- Normalizar dados externos para uma representação canônica
- Detectar e tratar registros duplicados
- Emitir eventos de domínio quando a ingestão é concluída
IngestionJob: Rastreia o ciclo de vida e status da ingestãoTransaction: Registro canônico de transação normalizado
ingestion.completed: Indica que os dados estão prontos para matching
Matching
O bounded context de Matching contém o motor de conciliação. Responsabilidades:- Carregar regras aplicáveis para um contexto de conciliação
- Executar estratégias de matching (exato, tolerância, fuzzy, baseado em data)
- Calcular scores de confiança
- Criar grupos de match e alocar transações
- Identificar transações não conciliadas
MatchRun: Execução de um job de matchingMatchGroup: Grupo de transações conciliadasMatchItem: Alocação individual de transação
match_group.confirmed: Um grupo de match foi finalizadomatch_group.unmatched: Um match previamente confirmado foi revertidotransaction.pending_review: Um candidato não automático precisa de revisão
Exception management
O bounded context de Exception gerencia transações não resolvidas. Responsabilidades:- Classificar exceções por severidade
- Rotear exceções para equipes internas ou sistemas externos
- Suportar overrides manuais e ajustes
- Rastrear status de resolução e SLAs
- Integrar com ferramentas externas de workflow
Exception: Uma transação não resolvidaResolution: Resultado do tratamento da exceçãoRoutingRule: Lógica de roteamento e escalonamento
- JIRA para rastreamento de issues
- ServiceNow para incidentes pela Table API
- Webhooks para workflows customizados
Governance
O bounded context de Governance preserva a rastreabilidade da conciliação. Responsabilidades:- Registrar fluxos de mutação auditáveis instrumentados em logs de auditoria imutáveis
- Fornecer histórico de auditoria consultável
- Suportar relatórios regulatórios e de compliance
AuditLog: Registro apenas append dos fluxos de mutação auditáveis instrumentados
Reporting
O bounded context de Reporting fornece visibilidade operacional. Responsabilidades:- Gerar relatórios de conciliação
- Expor métricas de dashboard
- Exportar dados de conciliação em múltiplos formatos
Report: Resumo da conciliaçãoDashboard: Métricas operacionais agregadasExportJob: Execução assíncrona de exportação
Fluxo de dados
A conciliação segue um pipeline determinístico através dos bounded contexts:
1
Configuration
Contextos de conciliação, fontes, mapeamentos de campos e regras são definidos através da API.
2
Discovery
O Discovery se conecta a fontes externas, detecta seus schemas e executa extrações no próprio processo com o motor Fetcher embarcado. Os resultados extraídos são encaminhados diretamente para a Ingestion.
3
Ingestion
Arquivos enviados e dados extraídos pelo Discovery são parseados, validados, normalizados e deduplicados. Um evento
ingestion.completed é emitido.4
Matching
Regras de matching são aplicadas às transações elegíveis, produzindo grupos de match com scores de confiança em uma escala inteira de 0 a 100. Grupos EXACT e TOLERANCE com confiança de pelo menos 90 em 100 podem ser confirmados automaticamente; grupos FUZZY e DATE_LAG sempre exigem revisão manual. Itens não conciliados se tornam exceções.
5
Exception handling
Exceções são classificadas, roteadas e resolvidas manualmente ou via sistemas externos. Atualizações de resolução são propagadas de volta ao Matcher.
6
Governance
Fluxos de mutação auditáveis instrumentados através do pipeline são registrados em logs de auditoria imutáveis.
7
Reporting
Usuários acessam relatórios e dashboards mostrando status da conciliação, taxas de match e envelhecimento de exceções.
Componentes de infraestrutura
O Matcher depende dos seguintes serviços de infraestrutura:
Arquitetura de banco de dados
- Resolução de pools específicos por tenant em deployments multi-tenant configurados para separação de dados
- Consistência forte para estado de matching e exceções
- Consistência eventual para views de reporting
Multi-tenancy
O Matcher impõe isolamento estrito de tenants:- Com
AUTH_PROVIDER=plugin-auth, a identidade do tenant é extraída dos claims JWTtenant_idoutenantId - Deployments com
workos, single-tenant ou autenticação desabilitada usam o tenant padrão configurado - Identificadores de tenant nunca são aceitos via parâmetros de request
- O acesso ao banco de dados é delimitado pelo pool de conexões do tenant ativo
- Todas as queries são automaticamente restritas ao tenant ativo
Este modelo previne acesso cruzado de dados entre tenants e suporta requisitos regulatórios e de auditoria.
Padrões de design
Arquitetura hexagonal
Cada bounded context segue o padrão de portas e adaptadores:CQRS-light
Os caminhos de escrita e leitura são separados no nível de serviço:*_commands.gopara mutações de estado*_queries.gopara operações de leitura
Padrão outbox
O Matcher usa políticas de entrega por evento. Eventos apoiados por outbox persistem um registro de outbox e são despachados de forma assíncrona; outros eventos podem usar entrega direta com fallback de outbox quando o circuito está aberto.Próximos passos
Início rápido
Explore a arquitetura através de um exemplo guiado.
Segurança
Revise mecanismos de autenticação, autorização e isolamento de tenant.

