Entidades e relacionamentos · Entrevistas
Diagrama
Carregando diagrama…
Ver código Mermaid
erDiagram
PESSOA ||--o{ ENTREVISTA : "cliente"
USUARIO |o--o{ ENTREVISTA : "autor"
PESSOA {
uuid id PK
}
USUARIO {
uuid id PK
}
ENTREVISTA {
uuid id PK
string legacyId UK
uuid clientPersonId FK
uuid authorUserId FK
string[] nucleos
string subjectSlug
string subjectName
string area
text notes
date consultationDate
boolean flagInitialStudy
boolean flagAppealResearch
string status
datetime createdAt
datetime updatedAt
datetime deletedAt
}
O diagrama mostra as chaves estrangeiras de cliente e autoria da entrevista. Pessoa e Usuário pertencem a outros domínios e aparecem apenas com suas chaves. Núcleos são armazenados como siglas em uma lista; histórico e juntadas usam referências próprias descritas abaixo.
Modelo físico
A tabela consultations guarda a entrevista nativa. O catálogo de assuntos fornece classificação e sugestão de encaminhamento. O histórico é compartilhado em history_entries; o dossiê e os documentos pertencem ao acervo da pessoa. A integração com o Projuris Legado pertence ao módulo próprio e não cria uma segunda entidade de Entrevista.
Entrevista (consultations)
| Atributo | Tipo | Obrigatório | Regra |
|---|---|---|---|
id | UUID, chave primária | Gerado | Identificador nativo da entrevista. |
legacyId | varchar(255), anulável, único | Não | Identificador canônico do registro no Projuris; preserva a correspondência com a origem sem substituir o UUID nativo. |
nucleos | text[], padrão lista vazia, índice GIN | Sim na entrada | Pelo menos uma sigla existente; normalização e deduplicação no serviço. |
subjectSlug | varchar(80), anulável, indexado | Não | Assunto do catálogo. |
subjectName | varchar(255), anulável | Derivado | Nome do assunto selecionado. |
area | enum consultation_area, anulável | Derivado | previdenciario, civil ou trabalho. |
clientPersonId | UUID, FK para people, indexado | Sim | Pessoa cliente; não muda após a criação. Exclusão física da pessoa: RESTRICT. |
clientName | varchar(255), anulável | Derivado | Nome ou razão social da pessoa no momento da criação; não é ressincronizado pela edição. |
notes | text, anulável | Não | Relato; entrada limitada a 100.000 caracteres. |
consultationDate | date, não nulo | Padrão do servidor | Data civil do atendimento; na criação, ausência usa o dia em America/Recife. |
flagInitialStudy | boolean, padrão false | Não na entrada | Marca de estudo inicial. |
flagAppealResearch | boolean, padrão false | Não na entrada | Marca de pesquisa de recurso. |
status | enum consultation_status, padrão ABERTA, indexado | Padrão do servidor | Alterado pela operação de transição. |
originUoSigla | varchar(40), anulável, indexado | Derivado | Unidade de origem copiada da pessoa na criação. |
authorUserId | UUID, anulável, FK para users, indexado | Derivado | Usuário autor; exclusão física do usuário usa SET NULL. |
searchText | text, padrão string vazia | Derivado | Texto normalizado para busca, limitado a 1.000 caracteres pelo serviço; fora do contrato público. |
summary | text, anulável | Gerado sob demanda | Resumo guardado; excluído da leitura comum e da serialização da entrevista. |
deletedAt | timestamptz(3), anulável, indexado | Não | Instante da exclusão lógica; fora do contrato público. |
deletedBy | UUID, anulável | Não | Identificador do usuário da exclusão lógica; fora do contrato público. |
createdAt | timestamptz(3) | Gerado | Instante de cadastro; base da ordenação e dos filtros de período. |
updatedAt | timestamptz(3) | Gerado | Instante da atualização. |
O índice composto createdAt, id atende à paginação. A obrigatoriedade de pelo menos um núcleo é validada na escrita; a lista de siglas não equivale a uma tabela de junção com chaves estrangeiras.
As situações são ABERTA, EM_ANALISE, CONCLUIDA_COM_DIREITO, CONCLUIDA_SEM_DIREITO e ARQUIVADA. As transições estão em Regras de negócio.
Campos da Ficha da Pessoa em implementação
Estado: em implementação na API.
| Atributo | Tipo | Obrigatório | Regra |
|---|---|---|---|
code | varchar(20), único, não nulo | Gerado | Código ENT-AAAA-NNN…: ano da data da entrevista e sequência de no mínimo três dígitos dentro desse ano. Entrevistas existentes recebem o código pela ordem de data, criação e identificador. |
title | varchar(255), anulável | Não | Título da entrevista. |
interviewerUserId | UUID, anulável, FK → users (SET NULL), indexado | Não | Usuário que conduziu a entrevista; precisa existir. |
Registro de histórico (history_entries)
O histórico compartilhado identifica a entrevista por resourceType = consultation e resourceId. Essa é uma referência lógica, sem FK específica para consultations.
| Atributo | Tipo | Obrigatório | Regra |
|---|---|---|---|
id | UUID, chave primária | Gerado | Identificador do registro de histórico. |
resourceType | varchar(64) | Sim | consultation para eventos da entrevista. |
resourceId | varchar(255) | Sim | Identificador da entrevista. |
resourceLabel | varchar(255), anulável | Não | Rótulo do recurso. |
action | enum history_action | Sim | Natureza da operação. |
eventType | varchar(100) | Sim | Identificador específico do evento. |
summary | varchar(500) | Sim | Descrição breve da operação. |
changes | jsonb, padrão lista vazia | Gerado | Diferenças de campos; formato na API Reference. |
metadata | jsonb, padrão objeto vazio | Gerado | Contexto adicional do evento. |
actorKind | enum user, machine ou system | Sim | Natureza da identidade autora do evento. |
actorUserId | UUID, anulável, FK para users | Não | Exclusão física do usuário usa SET NULL. |
actorLabel | varchar(255) | Sim | Identificação de exibição do autor. |
requestId | varchar(64), anulável | Não | Correlação interna; fora do contrato público. |
occurredAt | timestamptz(3), padrão instante corrente | Gerado | Momento do acontecimento. |
createdAt | timestamptz(3) | Gerado | Momento do registro no histórico. |
O histórico é acrescentado às operações, sem edição dos registros anteriores. Seus índices combinam recurso, data e identificador, além de autor, data e identificador.
Juntada — representação de leitura
A consulta do dossiê projeta registros compartilhados de dossier_entries com relationType = entrevista e relationRef igual ao UUID da entrevista. Não cria uma entidade persistida exclusiva deste domínio. Os tipos abaixo são os do objeto retornado.
| Atributo | Tipo | Obrigatório | Regra |
|---|---|---|---|
id | UUID | Sim | Identificador da juntada. |
documentId | UUID | Sim | Documento juntado. |
personId | UUID | Sim | Pessoa dona do dossiê. |
category | string de categoria | Sim | Classificação documental. |
suggestedCategory | string ou null | Não | Classificação sugerida. |
relationType | string | Sim neste recorte | entrevista. |
relationRef | string | Sim neste recorte | UUID da entrevista. |
relationLabel | string ou null | Não | Rótulo da relação. |
authorUserId | UUID | Sim | Autor da juntada. |
authorName | string | Sim | Nome do autor na juntada. |
nucleos | string[] | Sim | Siglas registradas na juntada. |
associationId | string ou null | Não | Referência associativa da juntada. |
originUoSigla | string ou null | Não | Unidade de origem da juntada. |
createdAt | string ISO 8601 | Sim | Instante da juntada. |
document | objeto ou null | Não | Resumo do documento apenas quando legível. |
document.id | UUID | Com documento | Identificador do documento. |
document.originalName | string | Com documento | Nome original do arquivo. |
Relações e cardinalidades
| Relação | Cardinalidade | Obrigatória | Integridade |
|---|---|---|---|
| Entrevista → Pessoa cliente | N:1 | Sim para a entrevista | FK clientPersonId, RESTRICT na exclusão física da pessoa. |
| Entrevista → Usuário autor | N:0..1 | Não no armazenamento | FK authorUserId, SET NULL na exclusão física do usuário. |
| Entrevista → Núcleos | N:N, por lista de siglas | Ao menos um por entrevista na escrita | Validação no serviço; lista sem FKs por elemento. |
| Entrevista → Histórico | 1:0..N | Não por FK | Referência lógica resourceType, resourceId. |
| Entrevista → Juntadas | 1:0..N | Não | Referência lógica relationType, relationRef; o documento mantém sua própria autorização. |
| Entrevista → Processos | 1:0..N | Vínculo opcional para o processo | cases.consultationId; exclusão física da entrevista usa SET NULL. |
| Entrevista → Trabalhos | 1:0..N | Vínculo opcional para o trabalho | work_items.consultationId; exclusão física da entrevista usa SET NULL. |
Ciclo de vida
A criação atribui identificador, autor, estado inicial, datas e derivações. A edição mantém a pessoa cliente e atualiza apenas campos enviados. A situação muda por operação própria, com histórico transacional.
A exclusão é lógica: preenche deletedAt e deletedBy, preserva a linha e retira o registro das consultas. As políticas ON DELETE descritas acima se referem a exclusões físicas no banco, não ao arquivamento nem à exclusão lógica da entrevista.
Integração com Projuris Legado
A consulta ao acervo externo pertence ao domínio Projuris Legado. Somente a incorporação explícita persiste uma Entrevista em consultations, identificada pelo UUID nativo e pelo legacyId opcional e único. A integração não mantém tabela local de cópia do acervo externo.