Entidades e relacionamentos · Gestão do núcleo

Diagrama

Reunião, ata, resolução e documento

Carregando diagrama…

Ver código Mermaid
erDiagram
  WORK_ITEMS ||--o| NUCLEUS_MEETINGS : "work_item_id"
  NUCLEI ||--o{ NUCLEUS_MEETINGS : "nucleus_id"
  MEETING_TYPES |o--o{ NUCLEUS_MEETINGS : "type_code"
  WORK_ITEMS ||--o| MEETING_MINUTES : "work_item_id"
  NUCLEI ||--o{ MEETING_MINUTES : "nucleus_id"
  NUCLEI ||--o{ RESOLUTIONS : "nucleus_id"
  MEETING_MINUTES |o--o{ RESOLUTIONS : "meeting_minutes_id"
  RESOLUTIONS |o--o{ RESOLUTIONS : "revokes_id"
  USERS ||--o{ MEETING_MINUTES : "author_user_id"
  USERS ||--o{ RESOLUTIONS : "author_user_id"

O diagrama mostra as chaves estrangeiras das tabelas da Gestão do núcleo. A designação do núcleo como responsável pela reunião é uma referência lógica de work_item_people, sem chave estrangeira, descrita na Área de Trabalho. O catálogo meeting_types está descrito na Organização.

Modelo físico

O modelo é físico (TypeORM sobre PostgreSQL). A reunião do núcleo é um Trabalho do tipo Compromisso, categoria meeting, com o núcleo designado como responsável; a tabela nucleus_meetings acrescenta a ele a natureza, o tipo e o número. A ata e a resolução têm tabelas próprias, ligadas ao núcleo. A ata aponta para a reunião de origem; a resolução pode apontar para a ata de que nasceu e para a resolução que revoga. O documento de cada uma é gerado no próprio Hub, em HTML, a partir do registro; não há arquivo guardado.

Reunião do núcleo (Compromisso meeting)

A reunião usa os campos do Trabalho documentados na Área de Trabalho. Os campos abaixo são os que a Gestão do núcleo lê.

AtributoTipoObrigatórioRegra
kindappointmentSimA reunião é um Compromisso.
categorymeetingSimCategoria de reunião.
titlestringSimTítulo da reunião.
bodytextNãoPauta da reunião.
scheduledAtdata-horaNãoHora marcada; mudar este campo é remarcar.
durationMininteiroNãoDuração prevista.
locationstringNãoLocal; mudar este campo é remarcar.
meetingUrlstringNãoEndereço do encontro remoto, usado em Ingressar; mudar este campo é remarcar.
meetingFormatin_person, remote ou hybridNãoFormato do encontro.
statuspending, completed, cancelled ou postponedGeradoSituação da reunião.
nucleosarray de siglasDerivadoContém a sigla do núcleo designado como responsável.

Número da reunião (nucleus_meetings)

AtributoTipoObrigatórioRegra
idUUID, chave primáriaGerado—
workItemIdUUID, FK → work_items (RESTRICT), únicoSimO Compromisso da reunião; um número por reunião.
nucleusIdUUID, FK → nuclei (RESTRICT)SimNúcleo que agendou.
kindenum ordinaria ou extraordinariaSimAusente na criação, vale extraordinaria.
typeCodevarchar(16), FK → meeting_types (RESTRICT)Na ordináriaTipo do catálogo aplicável ao núcleo; nulo na extraordinária.
seriesvarchar(16)GeradoO código do tipo na ordinária; EXT na extraordinária.
numberintegerGeradoSequencial por núcleo, série e ano.
yearintegerGeradoAno da data marcada da reunião; sem data marcada, o ano corrente no fuso do escritório.
createdAttimestamptz(3)Gerado—

O índice único (nucleusId, series, year, number) impede números repetidos. O número nasce na mesma transação que cria o Compromisso, com a linha do núcleo travada, e é apresentado como NN/AAAA-SÉRIE, por exemplo 03/2026-REU003 ou 01/2026-EXT.

Ata (meeting_minutes)

AtributoTipoObrigatórioRegra
idUUID, chave primáriaGerado—
workItemIdUUID, FK → work_items (RESTRICT), únicoSimReunião de origem; cada reunião tem no máximo uma ata. A ata leva o número da reunião.
nucleusIdUUID, FK → nuclei (RESTRICT)DerivadoNúcleo responsável pela reunião, derivado da designação dela.
contenttext, padrão ''NãoTexto da ata; um parágrafo por deliberação.
agendajsonb, lista de textos, padrão []NãoItens da pauta.
attendeesjsonb, lista de {name, role}, padrão []NãoPresentes, com o papel de cada um na reunião; nome e papel de 1 a 255 caracteres.
absenteesjsonb, lista de {name, role}, padrão []NãoAusentes, com o papel de cada um.
statusenum draft ou registered, padrão draftGeradoPassa a registered no registro.
versionintegerGeradoAumenta a cada salvamento. Na API vigente, a escrita informa a versão que leu; a edição simultânea (RN-GESTAO-043) deixa de recusar por versão, e o destino do campo será definido com o canal de edição simultânea, a criar.
authorUserIdUUID, FK → users (RESTRICT)GeradoQuem criou a ata.
registeredAttimestamptz(3)GeradoInstante do registro; nulo enquanto rascunho.
registeredByUUID, FK → users (SET NULL)GeradoQuem registrou; nulo enquanto rascunho ou após a exclusão do usuário.
createdAt, updatedAttimestamptz(3)Gerado—

Resolução (resolutions)

AtributoTipoObrigatórioRegra
idUUID, chave primáriaGerado—
nucleusIdUUID, FK → nuclei (RESTRICT)SimNúcleo que resolve.
numberintegerGeradoSequencial por núcleo e por ano; exibido com dois dígitos.
yearintegerGeradoAno do registro, no fuso do escritório.
ementavarchar(1000)SimUma linha que resume a resolução; a entrada aceita de 1 a 160 caracteres.
considerandotextSimO problema que motiva a resolução, em um ou mais parágrafos.
comandotextSimA decisão, em parágrafos corridos, sem artigos nem dispositivos numerados.
effectiveFromdateGeradoInício de vigência; sem informação, a data do registro no fuso do escritório.
statusenum vigente, revogada ou cumprida, padrão vigenteGeradoSó sai de vigente.
revokesIdUUID, FK → resolutions (RESTRICT)NãoResolução vigente do mesmo núcleo revogada por esta.
meetingMinutesIdUUID, FK → meeting_minutes (RESTRICT)NãoAta registrada do mesmo núcleo de que a resolução nasceu.
authorUserIdUUID, FK → users (RESTRICT)GeradoQuem registrou a resolução.
createdAt, updatedAttimestamptz(3)Gerado—

O índice único (nucleusId, year, number) impede números repetidos no núcleo; o registro trava a linha do núcleo antes de ler o maior número. O signatário não é coluna: o documento da resolução o mostra com o nome de quem registra e a função “Liderança do Núcleo <nome do núcleo>”.

Relações e cardinalidades

RelaçãoCardinalidadeObrigatóriaIntegridade
Núcleo → reuniões1 : N, pela designação assignee com alvo org_unitDo lado da reunião do núcleoReferência lógica em work_item_people, criada na mesma transação do Compromisso.
Compromisso → número da reunião1 : 0..1Do lado do númeroFK única workItemId, RESTRICT.
Tipo de reunião → números1 : NNão, do lado do númeroFK typeCode, RESTRICT.
Compromisso → ata1 : 0..1Do lado da ataFK única workItemId, RESTRICT.
Núcleo → atas e resoluções1 : NDo lado da ata e da resoluçãoFK nucleusId, RESTRICT.
Ata → resoluções1 : NNãoFK meetingMinutesId, RESTRICT.
Resolução → resolução revogadaN : 0..1NãoFK revokesId, RESTRICT.

Ciclo de vida

A reunião recebe o número no agendamento. A ata, quando existe, nasce em rascunho ligada a uma reunião do núcleo, recebe a edição simultânea dos editores (a criar na API; hoje, salvamentos com controle de versão) e, ao ser registrada, passa a só leitura e ganha página própria de documento. A resolução nasce vigente com o próximo número do núcleo no ano do registro e página própria de documento; enquanto vigente, pode passar a revogada ou a cumprida.

Camadas do domínio