Entidades e relacionamentos · Entrevistas

Diagrama

Entrevista: pessoa cliente e autoria

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)

AtributoTipoObrigatórioRegra
idUUID, chave primáriaGeradoIdentificador nativo da entrevista.
legacyIdvarchar(255), anulável, únicoNãoIdentificador canônico do registro no Projuris; preserva a correspondência com a origem sem substituir o UUID nativo.
nucleostext[], padrão lista vazia, índice GINSim na entradaPelo menos uma sigla existente; normalização e deduplicação no serviço.
subjectSlugvarchar(80), anulável, indexadoNãoAssunto do catálogo.
subjectNamevarchar(255), anulávelDerivadoNome do assunto selecionado.
areaenum consultation_area, anulávelDerivadoprevidenciario, civil ou trabalho.
clientPersonIdUUID, FK para people, indexadoSimPessoa cliente; não muda após a criação. Exclusão física da pessoa: RESTRICT.
clientNamevarchar(255), anulávelDerivadoNome ou razão social da pessoa no momento da criação; não é ressincronizado pela edição.
notestext, anulávelNãoRelato; entrada limitada a 100.000 caracteres.
consultationDatedate, não nuloPadrão do servidorData civil do atendimento; na criação, ausência usa o dia em America/Recife.
flagInitialStudyboolean, padrão falseNão na entradaMarca de estudo inicial.
flagAppealResearchboolean, padrão falseNão na entradaMarca de pesquisa de recurso.
statusenum consultation_status, padrão ABERTA, indexadoPadrão do servidorAlterado pela operação de transição.
originUoSiglavarchar(40), anulável, indexadoDerivadoUnidade de origem copiada da pessoa na criação.
authorUserIdUUID, anulável, FK para users, indexadoDerivadoUsuário autor; exclusão física do usuário usa SET NULL.
searchTexttext, padrão string vaziaDerivadoTexto normalizado para busca, limitado a 1.000 caracteres pelo serviço; fora do contrato público.
summarytext, anulávelGerado sob demandaResumo guardado; excluído da leitura comum e da serialização da entrevista.
deletedAttimestamptz(3), anulável, indexadoNãoInstante da exclusão lógica; fora do contrato público.
deletedByUUID, anulávelNãoIdentificador do usuário da exclusão lógica; fora do contrato público.
createdAttimestamptz(3)GeradoInstante de cadastro; base da ordenação e dos filtros de período.
updatedAttimestamptz(3)GeradoInstante 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.

AtributoTipoObrigatórioRegra
codevarchar(20), único, não nuloGeradoCó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.
titlevarchar(255), anulávelNãoTítulo da entrevista.
interviewerUserIdUUID, anulável, FK → users (SET NULL), indexadoNãoUsuá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.

AtributoTipoObrigatórioRegra
idUUID, chave primáriaGeradoIdentificador do registro de histórico.
resourceTypevarchar(64)Simconsultation para eventos da entrevista.
resourceIdvarchar(255)SimIdentificador da entrevista.
resourceLabelvarchar(255), anulávelNãoRótulo do recurso.
actionenum history_actionSimNatureza da operação.
eventTypevarchar(100)SimIdentificador específico do evento.
summaryvarchar(500)SimDescrição breve da operação.
changesjsonb, padrão lista vaziaGeradoDiferenças de campos; formato na API Reference.
metadatajsonb, padrão objeto vazioGeradoContexto adicional do evento.
actorKindenum user, machine ou systemSimNatureza da identidade autora do evento.
actorUserIdUUID, anulável, FK para usersNãoExclusão física do usuário usa SET NULL.
actorLabelvarchar(255)SimIdentificação de exibição do autor.
requestIdvarchar(64), anulávelNãoCorrelação interna; fora do contrato público.
occurredAttimestamptz(3), padrão instante correnteGeradoMomento do acontecimento.
createdAttimestamptz(3)GeradoMomento 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.

AtributoTipoObrigatórioRegra
idUUIDSimIdentificador da juntada.
documentIdUUIDSimDocumento juntado.
personIdUUIDSimPessoa dona do dossiê.
categorystring de categoriaSimClassificação documental.
suggestedCategorystring ou nullNãoClassificação sugerida.
relationTypestringSim neste recorteentrevista.
relationRefstringSim neste recorteUUID da entrevista.
relationLabelstring ou nullNãoRótulo da relação.
authorUserIdUUIDSimAutor da juntada.
authorNamestringSimNome do autor na juntada.
nucleosstring[]SimSiglas registradas na juntada.
associationIdstring ou nullNãoReferência associativa da juntada.
originUoSiglastring ou nullNãoUnidade de origem da juntada.
createdAtstring ISO 8601SimInstante da juntada.
documentobjeto ou nullNãoResumo do documento apenas quando legível.
document.idUUIDCom documentoIdentificador do documento.
document.originalNamestringCom documentoNome original do arquivo.

Relações e cardinalidades

RelaçãoCardinalidadeObrigatóriaIntegridade
Entrevista → Pessoa clienteN:1Sim para a entrevistaFK clientPersonId, RESTRICT na exclusão física da pessoa.
Entrevista → Usuário autorN:0..1Não no armazenamentoFK authorUserId, SET NULL na exclusão física do usuário.
Entrevista → NúcleosN:N, por lista de siglasAo menos um por entrevista na escritaValidação no serviço; lista sem FKs por elemento.
Entrevista → Histórico1:0..NNão por FKReferência lógica resourceType, resourceId.
Entrevista → Juntadas1:0..NNãoReferência lógica relationType, relationRef; o documento mantém sua própria autorização.
Entrevista → Processos1:0..NVínculo opcional para o processocases.consultationId; exclusão física da entrevista usa SET NULL.
Entrevista → Trabalhos1:0..NVínculo opcional para o trabalhowork_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.

Camadas do domínio