5.3 KiB
Estrategia De Leitura De Relatorios Sem Acoplar O Hot Path
Objetivo
Definir como o orquestrador-admin deve ler dados operacionais para relatorios sem transformar o orquestrador-product em backend sincrono de dashboard.
Esta etapa fixa a topologia de leitura.
A materializacao concreta dessa topologia foi definida em docs/architecture/admin-report-materialization-strategy.md.
Decisao
Os relatorios administrativos devem ser servidos a partir de um read model administrativo assincrono.
Em outras palavras:
- O
productcontinua escrevendo o estado operacional primario. - Uma camada de sincronizacao fora do hot path materializa dados de leitura para relatorio.
- O
adminconsulta apenas esse read model, nunca as tabelas operacionais live doproductem uma request web do painel.
Topologia alvo
product operational writes
|
v
sync/export boundary outside hot path
|
v
admin reporting read model
|
v
admin report APIs and dashboard
Regras obrigatorias
1. Sem query direta do painel no banco operacional do produto
Nao e permitido que uma rota web do painel administrativo execute consultas pesadas ou agregacoes diretamente nas tabelas operacionais do product.
Isso inclui:
- scans amplos em
orders,rental_contracts,rental_payments,conversation_turns - joins ad hoc para dashboard em tempo de request
- leituras que disputem lock, cache ou I/O com o atendimento
2. Leitura eventual, nao transacional
O painel administrativo deve operar com consistencia eventual.
Consequencia pratica:
- relatorios mostram o dado consolidado mais recente disponivel
- a UI deve exibir metadados de frescor, como
updated_at,generated_atousource_watermark - o sistema nao promete refletir cada evento operacional no mesmo instante em que ele acontece
3. Materializacao fora do hot path
Toda consolidacao, enriquecimento, agregacao ou recorte temporal deve acontecer em processo assincrono.
Exemplos validos de processo assincrono:
- job agendado
- worker orientado a eventos
- pipeline incremental por cursor
- rotina batch com watermark
4. Read model proprio do admin
O admin deve ter sua propria superficie de leitura para relatorios.
Essa superficie pode morar:
- no banco administrativo
- em um schema analitico separado
- em tabelas materializadas especificas para relatorio
O importante nesta etapa nao e o lugar fisico, e sim a regra:
- a query do painel le um read model pronto
- a transformacao do dado acontece antes da request do usuario interno
5. Escrita administrativa continua proibida
A estrategia de leitura nao muda a fronteira de escrita.
Portanto:
- o
adminnao escreve diretamente nas tabelas operacionais doproduct - qualquer acao de governanca que altere operacao deve seguir fluxo proprio, versionado e auditavel
Responsabilidades por servico
orquestrador-product
Responsavel por:
- persistir o estado operacional primario
- manter ids tecnicos, timestamps e chaves publicas necessarias para reconciliacao
- expor uma fronteira segura para exportacao ou sincronizacao
- continuar respondendo ao atendimento sem depender do
admin
orquestrador-admin
Responsavel por:
- armazenar ou consultar o read model de relatorio
- servir rotas administrativas de relatorio
- informar frescor e origem do dado para a UI
- aplicar filtros e agregacoes sobre a superficie de leitura consolidada
O que a UI deve assumir
As telas administrativas de relatorio devem nascer com a expectativa de dado consolidado e nao de espelho instantaneo do operacional.
Consequencia pratica:
- cada relatorio deve carregar carimbo de atualizacao
- um refresh manual dispara no maximo uma rotina de sincronizacao, nunca uma query pesada live no produto
- empty states e avisos de defasagem fazem parte do contrato visual
Padrao de frescor inicial
Enquanto a implementacao completa nao chega, os datasets operacionais ficam classificados em metas de frescor no contrato compartilhado:
near_real_timepara vendas, revisoes e locacaointra_hourpara estoque, telemetria e entregas de integracao
Essas metas servem para orientar UX, monitoracao e futuras implementacoes da sincronizacao. Elas nao significam leitura live do banco operacional.
O que fica explicitamente proibido
- dashboard administrativo consultando
productpor HTTP sincrono a cada abertura de pagina - admin executando agregacao pesada em banco primario de atendimento durante request web
- relatorios dependendo de lock em tabela operacional para responder ao usuario interno
- uso de payload bruto e PII fora do contrato compartilhado de dados operacionais
Consequencias positivas
- protege latencia do atendimento
- reduz risco de regressao operacional por carga analitica
- permite evoluir relatorios com independencia do runtime conversacional
- facilita observabilidade de frescor e falha da sincronizacao
- prepara o terreno para ETL incremental, snapshots sanitizados e views dedicadas sem quebrar o painel
Decisao complementar ja tomada
A topologia acima agora foi materializada assim:
etl_incrementalcomo fronteira de sincronizacaosnapshot_tableno admin para persistencia de leituradedicated_viewsobre snapshots para servir APIs e dashboard- sem replica operacional do banco do produto nesta fase