Entidades e relacionamentos · Organização

Diagrama

Estrutura da organização

Carregando diagrama…

Ver código Mermaid
erDiagram
  ORG_AREAS ||--o{ ORG_NUCLEUS_AREA_ASSIGNMENTS : "areaId"
  NUCLEI ||--o{ ORG_NUCLEUS_AREA_ASSIGNMENTS : "nucleusId"
  NUCLEI ||--o{ ORG_SUBNUCLEUS_ASSIGNMENTS : "nucleusId"
  ORG_SUBNUCLEI ||--o{ ORG_SUBNUCLEUS_ASSIGNMENTS : "subnucleusId"
  NUCLEI ||--o{ USER_NUCLEI : "nucleusId"
  USERS ||--o{ USER_NUCLEI : "userId"

Modelo físico

O modelo é físico (TypeORM sobre PostgreSQL). Área, núcleo e subnúcleo têm tabelas próprias, cada uma com situação e vigência. O pertencimento do núcleo à área e do subnúcleo ao núcleo fica em tabelas de vínculo com vigência, para que a estrutura de um dia passado possa ser consultada. O vínculo de uma conta com o núcleo, com o papel de membro ou de liderança, fica em user_nuclei, a mesma tabela usada por Identidade e acesso.

Área (org_areas)

AtributoTipoObrigatórioRegra
idUUID, chave primáriaGerado—
siglavarchar(40), únicaSimGravada em maiúsculas, sem espaço nas pontas.
namevarchar(255)SimNome por extenso.
descriptionvarchar(1000)NãoTexto livre.
statusenum ativo, em_desenvolvimento, inativo ou encerradoGeradoNasce ativo.
effectiveFromdataSimPrimeiro dia de vigência.
effectiveTodataNãoÚltimo dia de vigência, inclusive; nulo enquanto vigente.
authorUserIdUUID, FK → users (SET NULL)NãoQuem fez a última escrita.
createdAt, updatedAttimestamptzGerado—

Núcleo (nuclei)

AtributoTipoObrigatórioRegra
idUUID, chave primáriaGerado—
siglavarchar(16), únicaSimGravada em maiúsculas. Identifica o núcleo nas rotas e nas designações.
namevarcharSimNome por extenso.
statusenum ativo, em_desenvolvimento, inativo ou encerradoGeradoNasce ativo.
effectiveFromdata, padrão do banco CURRENT_DATEGeradoPrimeiro dia de vigência.
effectiveTodataNãoÚltimo dia de vigência, inclusive; nulo enquanto vigente.
createdAt, updatedAttimestamptzGerado—

Vínculo do núcleo com a área (org_nucleus_area_assignments)

AtributoTipoObrigatórioRegra
idUUID, chave primáriaGerado—
nucleusIdUUID, FK → nuclei (CASCADE)SimNúcleo ligado.
areaIdUUID, FK → org_areas (RESTRICT)SimÁrea a que o núcleo pertence nesta versão.
effectiveFromdataSimPrimeiro dia do vínculo.
effectiveTodataNãoÚltimo dia do vínculo, inclusive; nulo enquanto aberto.
authorUserIdUUID, FK → users (SET NULL)NãoQuem escreveu o vínculo.
createdAttimestamptzGerado—

Um índice único parcial admite um só vínculo aberto (effectiveTo nulo) por núcleo.

Subnúcleo (org_subnuclei)

AtributoTipoObrigatórioRegra
idUUID, chave primáriaGerado—
codigovarchar(40), únicoSimComeça pela sigla do núcleo seguida de -.
namevarchar(255)SimNome por extenso.
descriptionvarchar(1000)NãoTexto livre.
statusenum ativo, em_desenvolvimento, inativo ou encerradoGeradoNasce ativo.
effectiveFromdataSimPrimeiro dia de vigência.
effectiveTodataNãoÚltimo dia de vigência, inclusive; nulo enquanto vigente.
authorUserIdUUID, FK → users (SET NULL)NãoQuem fez a última escrita.
createdAt, updatedAttimestamptzGerado—

Vínculo do subnúcleo com o núcleo (org_subnucleus_assignments)

AtributoTipoObrigatórioRegra
idUUID, chave primáriaGerado—
subnucleusIdUUID, FK → org_subnuclei (CASCADE)SimSubnúcleo ligado.
nucleusIdUUID, FK → nuclei (RESTRICT)SimNúcleo a que o subnúcleo pertence nesta versão.
effectiveFromdataSimPrimeiro dia do vínculo.
effectiveTodataNãoÚltimo dia do vínculo, inclusive; nulo enquanto aberto.
authorUserIdUUID, FK → users (SET NULL)NãoQuem escreveu o vínculo.
createdAttimestamptzGerado—

Um índice único parcial admite um só vínculo aberto por subnúcleo.

Vínculo da conta com o núcleo (user_nuclei)

AtributoTipoObrigatórioRegra
userIdUUID, FK → users (CASCADE)SimParte da chave primária composta.
nucleusIdUUID, FK → nuclei (CASCADE)SimParte da chave primária composta.
roleenum member ou leader, padrão memberSimleader marca a liderança do núcleo; member, o integrante.
createdAttimestamptzGerado—

Tipo de reunião (meeting_types)

AtributoTipoObrigatórioRegra
codevarchar(16), chave primáriaSimCódigo do catálogo do lsa-gestao, de REU001 a REU011.
namevarchar(255)SimNome do tipo de reunião.
frequencyvarchar(64)NãoFrequência prevista.
formatvarchar(64)NãoFormato previsto.
defaultAgendajsonb, lista de textos, padrão []GeradoItens da pauta padrão.
nucleusApplicableboolean, padrão falseGeradotrue nos tipos que a Página do Núcleo agenda: REU002 a REU005.
createdAt, updatedAttimestamptz(3)Gerado—

Só a importação escreve o catálogo. O tipo de reunião não tem relação com um núcleo específico; a reunião do núcleo o referencia, conforme a Gestão do núcleo.

Relações e cardinalidades

RelaçãoCardinalidadeObrigatóriaIntegridade
Área → vínculos com núcleos1 : NNão, do lado da áreaFK areaId, RESTRICT.
Núcleo → vínculos com área1 : N, no máximo um abertoNão, do lado do núcleoFK nucleusId, CASCADE; índice único parcial.
Núcleo → vínculos com subnúcleos1 : NNão, do lado do núcleoFK nucleusId, RESTRICT.
Subnúcleo → vínculos com núcleo1 : N, no máximo um abertoNão, do lado do subnúcleoFK subnucleusId, CASCADE; índice único parcial.
Núcleo → contas vinculadasN : N por user_nucleiNãoFKs com CASCADE; chave composta impede vínculo repetido.

Ciclo de vida

As unidades nascem na importação do lsa-gestao, com situação ativo. A unidade extinta no lsa-gestao tem a vigência encerrada na data de extinção; se ainda não existe no Hub, não é criada. O encerramento da vigência substitui a exclusão: a unidade encerrada continua consultável nos dias em que esteve vigente. O vínculo da conta com o núcleo é criado pela importação, a partir das lotações e designações vigentes do lsa-gestao. O catálogo de tipos de reunião também nasce na importação. O subnúcleo só é criado quando a sua sigla no lsa-gestao já começa pela sigla do núcleo seguida de -; os demais aparecem no relatório da importação.

Camadas do domínio