---
id: modelo-de-dados-historico
title: Modelo de dados — Histórico
description: Esquema lógico de snapshots, auditoria, notificações e histórico de entrega.
type: data-model
status: defined
visibility: public
tags: sge/modelagem, sge/historico, sge/mermaid
related:
source_refs:
diagram: modelo-historico
---
## Histórico, notificações e entregas

> **Diagrama: Esquema lógico — histórico e comunicação**
> Auditoria polimórfica, notificações, mensagens e tentativas de entrega.
> Leitura semântica: Activity log registra sujeito e causador de forma polimórfica; notificações podem originar mensagens e cada mensagem possui tentativas de entrega append-only.
> Fonte semântica: `diagrams/modelo-historico.json`
> Dados estruturados: `api/diagrams/modelo-historico.json`
> Fonte declarativa: `diagrams/sources/modelo-historico.mmd`

## Regra de persistência

- A FK aponta para a entidade atual e permite filtros, estatísticas, escopo e rastreabilidade.
- O snapshot `jsonb` registra os valores usados no processo; a alteração do cadastro atual não o reescreve.
- Cada linha de `supervisor_evaluations` representa um formulário por estágio e supervisor. O registro só é editado em `Draft` ou `Returned`; valores anteriores e transições ficam no `activity_log`, sem expor esse log ao supervisor.
- A geração de documento cria seu próprio snapshot, independente do snapshot do estágio; o arquivo final gerado não é armazenado pelo SGE.
- Mensagens de e-mail operacionais e administrativas preservam assunto e conteúdo renderizado em `email_messages`; destinatário, solicitante, contexto do registro afetado e tentativas ficam em `email_delivery_attempts`. Envios administrativos recentes incluem conta criada, novo vínculo, alteração de e-mail e alterações administrativas. Recuperação de senha não cria registros nessas tabelas.
- Segredos de autenticação não são snapshots: links e tokens de recuperação nunca são guardados no conteúdo do e-mail. Não haverá confirmação adicional de endereço de e-mail.

> [!warning] Não confundir
> `addresses` é reutilizável para o endereço atual e para cópias históricas. O endereço que aparece em um estágio deve ser lido de `internships.workplace_address_id` ou `student_address_id`; o documento gerado congela a representação usada na geração.
