Parties
Pessoas e empresas: o cadastro civil compartilhado por todos os outros domínios.
Parties guarda quem existe no mundo real, sem saber de tenant: uma pessoa física ou jurídica, seus perfis, endereços, contatos e participações societárias. Usuários, corretores, contas do grupo e prospects apontam para uma party, então um mesmo documento é cadastrado uma vez só.
É o primeiro domínio da ordem de dependência: não referencia nenhum outro. A única ligação para fora,
party_contacts → memberships, é criada pelo domínio Workforce, dono de memberships.
Tabelas (6)
| Tabela | Para quê |
|---|---|
parties | Raiz do cadastro: uma pessoa ou empresa, com nome legal e documento. |
person_profiles | Dados de pessoa física de uma party (1:1, a PK é a própria party_id). |
company_profiles | Dados de pessoa jurídica de uma party (1:1, a PK é a própria party_id). |
party_addresses | Endereços de uma party; vários por party, distinguidos por kind. |
party_contacts | Contatos (e-mail, telefone…) de uma party, opcionalmente no contexto de uma membership, com finalidade (purpose). |
company_ownerships | Participação societária: quem é sócio de uma empresa, com percentual e período. |
Referência
parties
Raiz do cadastro: uma pessoa ou empresa, com nome legal e documento.
| Coluna | Tipo | Nulo | Observação |
|---|---|---|---|
id | bigint | não | identity (GENERATED ALWAYS) |
kind | text | não | |
legal_name | text | não | |
document_type | text | sim | |
document_number | text | sim | |
document_country | text | sim | |
created_at | timestamptz | não | padrão clock_timestamp() |
updated_at | timestamptz | não | padrão clock_timestamp() |
Chaves estrangeiras
- nenhuma
Referenciada por: broker_prospects, brokers, company_ownerships, company_profiles, party_addresses, party_contacts, person_profiles.
Garantido pelo banco
| Tipo | Nome | Definição |
|---|---|---|
| PK | parties_pkey | PRIMARY KEY (id) |
| UNIQUE | parties_document_key | UNIQUE (document_country, document_type, document_number) |
Fora do banco
kindnão tem CHECK no banco; o tipo de party é validado na aplicação.- Coerência entre
kinde o perfil (person_profilesoucompany_profiles) é regra da aplicação.
person_profiles
Dados de pessoa física de uma party (1:1, a PK é a própria party_id).
| Coluna | Tipo | Nulo | Observação |
|---|---|---|---|
party_id | bigint | não | |
birth_date | date | sim | |
updated_at | timestamptz | não | padrão clock_timestamp() |
Chaves estrangeiras
party_id→parties.id
Referenciada por: users.
Garantido pelo banco
| Tipo | Nome | Definição |
|---|---|---|
| PK | person_profiles_pkey | PRIMARY KEY (party_id) |
Fora do banco
- Nenhuma regra registrada além das constraints acima.
company_profiles
Dados de pessoa jurídica de uma party (1:1, a PK é a própria party_id).
| Coluna | Tipo | Nulo | Observação |
|---|---|---|---|
party_id | bigint | não | |
trade_name | text | sim | |
incorporated_on | date | sim | |
primary_activity_code | text | sim | |
updated_at | timestamptz | não | padrão clock_timestamp() |
Chaves estrangeiras
party_id→parties.id
Referenciada por: company_ownerships, tenant_accounts.
Garantido pelo banco
| Tipo | Nome | Definição |
|---|---|---|
| PK | company_profiles_pkey | PRIMARY KEY (party_id) |
Fora do banco
- Nenhuma regra registrada além das constraints acima.
party_addresses
Endereços de uma party; vários por party, distinguidos por kind.
| Coluna | Tipo | Nulo | Observação |
|---|---|---|---|
id | bigint | não | identity (GENERATED ALWAYS) |
party_id | bigint | não | |
kind | text | não | |
country_code | text | não | |
postal_code | text | sim | |
region | text | sim | |
city | text | sim | |
district | text | sim | |
street | text | sim | |
street_number | text | sim | |
complement | text | sim | |
created_at | timestamptz | não | padrão clock_timestamp() |
updated_at | timestamptz | não | padrão clock_timestamp() |
Chaves estrangeiras
party_id→parties.id
Garantido pelo banco
| Tipo | Nome | Definição |
|---|---|---|
| PK | party_addresses_pkey | PRIMARY KEY (id) |
Fora do banco
- Nenhuma regra registrada além das constraints acima.
party_contacts
Contatos (e-mail, telefone…) de uma party, opcionalmente no contexto de uma membership, com finalidade (purpose).
| Coluna | Tipo | Nulo | Observação |
|---|---|---|---|
id | bigint | não | identity (GENERATED ALWAYS) |
party_id | bigint | não | |
membership_id | bigint | sim | |
kind | text | não | |
label | text | sim | |
value | text | não | |
normalized_value | text | não | |
is_preferred | boolean | não | padrão false |
notifications_enabled | boolean | não | padrão false |
metadata | jsonb | não | padrão '{}'::jsonb |
created_at | timestamptz | não | padrão clock_timestamp() |
updated_at | timestamptz | não | padrão clock_timestamp() |
purpose | text | sim | administrativo | financeiro | comercial | operacional | jurídico |
Chaves estrangeiras
(membership_id, party_id)→memberships (id, party_id)party_id→parties.id
Garantido pelo banco
| Tipo | Nome | Definição |
|---|---|---|
| CHECK | party_contacts_purpose_check | CHECK ((purpose IN ('administrativo', 'financeiro', 'comercial', 'operacional', 'jurídico'))) |
| PK | party_contacts_pkey | PRIMARY KEY (id) |
| UNIQUE | party_contacts_value_key | UNIQUE (party_id, membership_id, kind, normalized_value) |
Fora do banco
- Só um contato preferido por tipo não é garantido pelo banco.
company_ownerships
Participação societária: quem é sócio de uma empresa, com percentual e período.
| Coluna | Tipo | Nulo | Observação |
|---|---|---|---|
id | bigint | não | identity (GENERATED ALWAYS) |
company_party_id | bigint | não | |
owner_party_id | bigint | não | |
ownership_percent | numeric | não | |
started_on | date | não | |
ended_on | date | sim | |
created_at | timestamptz | não | padrão clock_timestamp() |
updated_at | timestamptz | não | padrão clock_timestamp() |
Chaves estrangeiras
company_party_id→company_profiles.party_idowner_party_id→parties.id
Garantido pelo banco
| Tipo | Nome | Definição |
|---|---|---|
| PK | company_ownerships_pkey | PRIMARY KEY (id) |
| UNIQUE | company_ownerships_period_key | UNIQUE (company_party_id, owner_party_id, started_on) |
Fora do banco
- Soma de percentuais e sobreposição de períodos não são verificadas pelo banco;
ended_ontambém não tem CHECK de ordem.