Multi-tenancy
A Organization é a principal fronteira de isolamento da plataforma. Cada loja física operada separadamente é uma organização tenant distinta no primeiro vertical.Modelo conceitual
- User: pessoa autenticada.
- CustomerAccount: relação comercial, assinatura e limite de tenants.
- AccountMembership: vínculo administrativo ou financeiro com a conta.
- OrganizationGroup: agrupamento opcional para navegação e relatórios aprovados.
- Organization: tenant, loja e proprietária dos dados operacionais.
- Membership: vínculo do usuário com uma organização, incluindo papel e permissões.
- OperatingLocation: endereço principal da organização; não representa outra loja cobrável.
Regra comercial
A assinatura base poderá incluir uma organização ativa. Organizações adicionais poderão consumir entitlements e gerar cobrança extra no futuro. O valor não está definido nesta fase.Dados pertencentes ao tenant
Cada organização possui seus próprios:- Membros e permissões.
- Perfil, endereço e timezone.
- Serviços e versões de preço.
- Profissionais, escalas e intervalos.
- Contatos, tags e campos personalizados.
- Inbox, conversas e mensagens.
- Conexão de WhatsApp.
- Agendamentos e notificações.
- Agentes, conhecimento e plugins.
Isolamento em camadas
organizationId.
Webhooks e canais
CadaChannelConnection pertence a exatamente uma organização.
No piloto inicial, cada organização possui um WhatsApp Business principal próprio.
A organização é resolvida usando o mapeamento interno da conexão. Um identificador de tenant enviado no payload externo nunca é considerado autoridade.
Workers
O worker não possui um tenant global ativo. Cada job:- Valida o envelope.
- Carrega a organização.
- Cria um contexto isolado.
- Revalida o ownership dos registros.
- Executa a operação.
- Destrói o contexto.
Regras
- A organização selecionada no frontend não é autorização.
- Ser proprietário da conta não concede leitura automática de dados de todas as organizações.
OrganizationGroupnão é uma fronteira de segurança.- Cache, arquivos, filas, logs e realtime incluem escopo de organização.
- Testes de integração devem tentar acessar dados de uma organização irmã e confirmar a negação.
- Plugins externos não recebem acesso direto ao banco principal.
- Relatórios consolidados exigem serviço e permissão próprios, retornando somente dados agregados aprovados.