Arquitetura em resumo
O que roda
| Componente | Papel |
|---|---|
| API | Atende toda requisição. Todas as regras de negócio vivem aqui. |
| Frota de workers | Executa trabalhos assíncronos — cargas em massa, recomputações, comparação em escala |
| Banco de dados | Guarda todos os dados e aplica o isolamento entre organizações. |
| Cache e fila | Estado de sessão, cache de permissões, coordenação de trabalhos. |
| Provedor de identidade | Autenticação federada. Usuários e grupos nascem aqui, nunca na plataforma. |
| Console | A interface web. Apenas apresentação. |
| Camada de IA | O endpoint governado e o assistente embutido. Apenas apresentação. |
A API é o único lugar onde regras de negócio existem. O console e a camada de IA são irmãos sobre ela, sem nenhuma — e é por isso que não podem discordar sobre uma regra, e por que um novo consumidor herda todas as garantias automaticamente.
Como uma requisição flui
Três propriedades merecem atenção.
As políticas ABAC são avaliadas duas vezes. Uma antes de qualquer dado ser carregado, para as condições que não precisam do registro — quem você é, o que está fazendo, de onde está chamando — e outra sobre cada registro depois de carregado, para as condições que dependem do próprio registro. Um registro que você pediu diretamente é recusado com 403; um registro apenas referenciado por outro é removido da resposta, e as contagens das listas refletem a remoção.
O contexto da organização é estabelecido antes de qualquer dado ser tocado, e o banco de dados o aplica. Uma consulta que esquece de filtrar devolve nada, não tudo.
O mascaramento é o último passo, aplicado uma vez, sobre o que a resposta contém. Não é implementado por endpoint, e é isso que torna impossível contorná-lo chamando outro.
Características de armazenamento
- Toda tabela de negócio guarda histórico completo de versões, sem lacunas e sem sobreposições.
- O log de auditoria é somente-adição; o banco recusa atualizações e exclusões, e lacunas na sequência são detectáveis.
- A busca é atendida pela própria indexação de texto e similaridade do banco de dados — sem cluster de busca separado para operar ou sincronizar.
Trabalho assíncrono
Cargas em massa e recomputações rodam na frota de workers, não numa requisição. O trabalho é dividido em blocos que workers reivindicam independentemente, então um worker que morre no meio perde no máximo um bloco e outro o reivindica. Acrescentar workers acrescenta vazão sem reconfigurar o trabalho.
A seguir
Última verificação no commit d3c2586b (2026-08-03)