Visão geral do modelo
Os 11 domínios, a ordem de dependência entre eles e a lista das 71 tabelas.
O modelo de dados descreve 71 tabelas em 11 domínios. Cada domínio é um pacote (packages/<domínio>) cujas entities
geram o schema, e cada domínio tem a sua primeira migration, na ordem abaixo. A ordem é a direção das dependências:
um domínio só referencia os anteriores. Quando uma FK precisa apontar para um domínio posterior, quem a cria é o
domínio posterior (por exemplo, tenants → platform_tenant_blueprints é criada por Authorization).
| # | Domínio | Tabelas | Migration | Depende de |
|---|---|---|---|---|
| 1 | Parties | 6 | 0001_parties | — |
| 2 | Credentials | 2 | 0002_credentials | — |
| 3 | Tenancy | 2 | 0003_tenancy | Parties |
| 4 | Identity | 6 | 0004_identity, 0014_identity-platform-logins | Parties, Credentials, Tenancy |
| 5 | Financial Institutions | 3 | 0005_financial-institutions | Tenancy, Credentials |
| 6 | Product Catalog | 5 | 0006_product-catalog | Financial Institutions |
| 7 | Brokers | 6 | 0007_brokers | Parties, Tenancy, Financial Institutions |
| 8 | Authorization | 19 | 0008_authorization, 0012, 0013, 0017 (teto de escopo) | Identity, Tenancy, Brokers |
| 9 | Workforce | 17 | 0009_workforce | Authorization e anteriores |
| 10 | Onboarding | 1 | 0010_onboarding | Parties, Brokers, Workforce |
| 11 | Bank Users | 4 | 0011_bank-users | Identity, Workforce, Brokers, Financial Institutions, Credentials |
Depois dos domínios vêm as migrations de infraestrutura, fora do modelo de dados: 0015_idempotency (2 tabelas,
ver Idempotência) e 0016_work (8 tabelas, ver Background work).
Regras de fronteira
- Parties, Credentials e Identity não conhecem tenant.
- Toda tabela de tenant carrega
tenant_id. Quando uma linha aponta para outra que também é de tenant, a FK é composta e incluitenant_iddos dois lados, então as duas pontas ficam sempre no mesmo tenant (ver Garantias do banco). - Trabalho acima dos tenants (plataforma) mora em tabelas próprias
platform_*, nunca emtenant_idnulo ou com valor sentinela. - Quando uma coluna só faria sentido para alguns casos, o modelo prefere uma tabela própria a uma coluna anulável
(por exemplo,
invitation_session_contexts).
Como ler as páginas de domínio
Cada página traz um diagrama ER pequeno com as relações principais e, para cada tabela:
- colunas, com tipo, nulidade, padrão e as notas do modelo;
- chaves estrangeiras, com as colunas dos dois lados (FKs compostas aparecem inteiras) e quem referencia a tabela;
- garantido pelo banco: PK, UNIQUE, índices únicos parciais (as unicidades "uma ativa por vez"), CHECK, EXCLUDE, triggers e colunas geradas, exatamente como estão no schema migrado;
- fora do banco: regras do modelo que o banco não impõe e que cabem à aplicação, ou que ainda não são garantidas.
Nenhuma FK é DEFERRABLE e nenhuma tem ação em cascata (ON DELETE/ON UPDATE são NO ACTION). FKs compostas com
colunas anuláveis usam MATCH SIMPLE: a verificação é pulada enquanto alguma coluna da FK for nula.
Todas as tabelas
| Tabela | Domínio | Para quê |
|---|---|---|
parties | Parties | Raiz do cadastro: uma pessoa ou empresa, com nome legal e documento. |
person_profiles | Parties | Dados de pessoa física de uma party (1:1, a PK é a própria party_id). |
company_profiles | Parties | Dados de pessoa jurídica de uma party (1:1, a PK é a própria party_id). |
party_addresses | Parties | Endereços de uma party; vários por party, distinguidos por kind. |
party_contacts | Parties | Contatos (e-mail, telefone…) de uma party, opcionalmente no contexto de uma membership, com finalidade (purpose). |
company_ownerships | Parties | Participação societária: quem é sócio de uma empresa, com percentual e período. |
credentials | Credentials | A credencial em si: método (method), identificador externo e ciclo de vida (expiração, último uso, revogação). |
credential_versions | Credentials | Cada versão do segredo: hash ou texto cifrado, quem criou e por quê, e o estado da versão. |
tenants | Tenancy | O tenant: identificador público (uid), slug, nome da operação e o blueprint de origem. |
tenant_accounts | Tenancy | Um CNPJ do grupo dentro do tenant (party de empresa), com rótulo opcional. |
users | Identity | Identidade global de uma pessoa; no máximo um usuário por party. |
user_logins | Identity | Identificadores de login no namespace de um tenant (CPF, CNPJ, e-mail, código, username). |
platform_logins | Identity | Identificadores de login do operador de plataforma (username ou e-mail), sem tenant; únicos globalmente enquanto ativos. |
user_credentials | Identity | Liga um usuário às suas credenciais de login; uma credencial pertence a um único usuário. |
sessions | Identity | Sessão autenticada: usuário, login e credencial usados, dados do cliente, expiração e revogação. |
refresh_tokens | Identity | Tokens de renovação de uma sessão: só o SHA-256 é guardado, com uso único e encadeamento (replaced_by). |
financial_institutions | Financial Institutions | Catálogo global de IFs, com código opcional e único. |
financial_institution_accounts | Financial Institutions | Vínculo de um CNPJ do tenant com uma IF; único por par (CNPJ, IF). |
financial_institution_credentials | Financial Institutions | Credencial técnica de um vínculo CNPJ × IF, por ambiente, no mesmo tenant do vínculo. |
product_groups | Product Catalog | Agrupamento opcional de produtos. |
products | Product Catalog | Produto do catálogo global, com grupo opcional. |
operation_types | Product Catalog | Tipos de operação, catálogo independente com código único. |
financial_institution_products | Product Catalog | Oferta de um produto por uma IF; única por (IF, produto). |
financial_institution_account_products | Product Catalog | Habilitação de uma oferta para um vínculo CNPJ × IF; única por (vínculo, oferta). |
brokers | Brokers | Identidade global do corretor (party), com identificador público. |
tenant_brokers | Brokers | O corretor dentro de um tenant, com código no tenant e desativação. |
broker_affiliations | Brokers | Histórico da hierarquia entre corretores do mesmo tenant (corretor e corretor-pai), com início e fim; uma afiliação aberta por corretor. |
tenant_broker_accounts | Brokers | Com quais CNPJs do grupo o corretor tem termo assinado (N:N), com vigência. |
store_codes | Brokers | Registro dos códigos de loja e de seu dono: a conta do grupo na IF ou o corretor. |
broker_store_codes | Brokers | Qual código de loja o corretor usa em cada IF e em qual regime, com vigência [valid_from, valid_until) sem sobreposição. |
permissions | Authorization | Projeção do registry de permissões gerado pelos @Requires dos use cases: código <domínio>.<recurso>.<ação>, escopo e descrição. |
permission_use_cases | Authorization | Quais use cases exigem cada permissão; sincronizado no deploy. |
permission_changes | Authorization | Auditoria prevista de mudanças no catálogo de permissões (commit, autor, aprovador, quem fez o deploy). |
access_profiles | Authorization | Perfil de acesso do tenant (broker_id nulo) ou de um corretor. |
access_profile_permissions | Authorization | Permissões de um perfil. |
access_profile_templates | Authorization | Template de perfil do tenant, versionado: perfis ligados herdam as permissões ao vivo. |
access_profile_template_permissions | Authorization | Permissões da versão atual de um template de tenant. |
access_profile_template_changes | Authorization | Cada edição confirmada de um template: versões de origem e destino, permissões adicionadas e removidas, motivo e autor. |
access_profile_template_change_decisions | Authorization | Para cada perfil afetado por uma edição de template: acompanhou (followed) ou desvinculou (detached), e quantos usuários foram afetados. |
platform_tenant_blueprints | Authorization | Formato de tenant mantido pela plataforma; criar um tenant é escolher um blueprint. |
platform_access_profile_templates | Authorization | Templates de perfil de um blueprint, copiados para access_profile_templates quando o tenant é criado. |
platform_access_profile_template_permissions | Authorization | Permissões de um template de plataforma. |
platform_access_profiles | Authorization | Perfis acima dos tenants (por exemplo, suporte ou administração da plataforma). |
platform_access_profile_permissions | Authorization | Permissões de um perfil de plataforma; só permissões de escopo platform. |
platform_grants | Authorization | Operador de plataforma: usuário, perfil de plataforma, quem concedeu e por quê. |
platform_invitations | Authorization | Convite para operar a plataforma. |
platform_invitation_deliveries | Authorization | Cada tentativa de envio de um convite de plataforma; reenvio é uma linha nova. |
platform_invitation_delivery_events | Authorization | Linha do tempo bruta do provedor de envio; um webhook repetido não duplica (dedup_key). |
session_contexts | Authorization | Operador de plataforma atuando dentro de um tenant, com motivo. |
memberships | Workforce | Pessoa × tenant: usuário, party e quem concedeu ou removeu. |
membership_access_profiles | Workforce | Perfil do tenant concedido à membership para o tenant inteiro, com vigência. |
membership_brokers | Workforce | Atuar como usuário de um corretor, com um perfil daquele corretor. |
teams | Workforce | Time do tenant (agrupamento comercial ou organizacional). |
membership_teams | Workforce | Pessoa no time, com um perfil do tenant e vigência [valid_from, valid_until) sem sobreposição para o mesmo par (time, membership). |
membership_portfolios | Workforce | Carteira: um corretor atendido por uma pessoa num time, coberta por uma membership_teams da mesma pessoa, time e tenant. |
team_financial_institution_accounts | Workforce | Contextos que um time atende: time → vínculo CNPJ × IF existente, com vigência sem sobreposição para o mesmo par. |
team_hierarchies | Workforce | Aresta organizacional temporal entre duas participações em time (subordinado e superior), com motivo. |
portfolio_transfers | Workforce | Cabeçalho imutável de uma transferência manual de carteiras, com ator, motivo e data efetiva; uid identifica a operação idempotente. |
portfolio_transfer_items | Workforce | Cada corretor transferido: carteira de origem e de destino do mesmo corretor e tenant; uma carteira só aparece uma vez como origem e uma vez como destino. |
invitations | Workforce | Convite para um tenant: canal, destino, SHA-256 do token, estado e validade. |
invitation_grants | Workforce | O que o aceite do convite vai criar: perfil do tenant, atuação em corretor, time ou carteira. |
invitation_session_contexts | Workforce | Existe só quando um operador de plataforma, dentro de um session_context, emite o convite. |
invitation_deliveries | Workforce | Cada tentativa de envio de um convite de tenant; reenvio é uma linha nova; exatamente um solicitante. |
invitation_delivery_events | Workforce | Linha do tempo bruta do provedor de envio; webhook repetido não duplica. |
session_memberships | Workforce | Em qual tenant uma sessão está atuando; fonte do contexto de tenant da transação. |
session_membership_brokers | Workforce | Existe só quando a sessão atua como usuário de um corretor; trocar de corretor abre uma nova session_memberships. |
broker_prospects | Onboarding | Prospect de corretor no tenant: documento, contato, quem captou e quem digitou, e o corretor resultante da conversão. |
user_banks | Bank Users | O login de uma pessoa numa IF, com sua credencial; um aberto por (usuário, IF). |
bank_user_assignments | Bank Users | Atribuição de um usuário bancário a um corretor do tenant, com vigência por dia [valid_from, valid_until), o código de loja sob o qual foi criado e a atuação de origem (origin_membership_broker_id). |
bank_user_transfers | Bank Users | Registro da transferência de um usuário bancário entre corretores do mesmo tenant: atribuição de origem e de destino, data efetiva, ator e motivo. |
bank_credential_deliveries | Bank Users | Revelação da senha bancária no portal: uma por versão da credencial (a PK é credential_version_id), com quem viu e quando (clock_timestamp()). |