{
  "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": [],
  "sourceRefs": [],
  "authors": [],
  "updated": null,
  "diagram": "modelo-historico",
  "body": "## Histórico, notificações e entregas\n\n{{diagram:modelo-historico}}\n\n## Regra de persistência\n\n- A FK aponta para a entidade atual e permite filtros, estatísticas, escopo e rastreabilidade.\n- O snapshot `jsonb` registra os valores usados no processo; a alteração do cadastro atual não o reescreve.\n- 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.\n- 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.\n- 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.\n- 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.\n\n> [!warning] Não confundir\n> `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.",
  "sections": [
    {
      "id": "historico-notificacoes-e-entregas",
      "level": 2,
      "title": "Histórico, notificações e entregas",
      "text": "",
      "line": 1
    },
    {
      "id": "regra-de-persistencia",
      "level": 2,
      "title": "Regra de persistência",
      "text": "- 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.",
      "line": 5
    }
  ],
  "sourcePath": "content/modelo-de-dados-historico.md",
  "visuals": [
    {
      "id": "modelo-historico",
      "kind": "db-schema",
      "title": "Esquema lógico — histórico e comunicação",
      "description": "Auditoria polimórfica, notificações, mensagens e tentativas de entrega.",
      "summary": "Activity log registra sujeito e causador de forma polimórfica; notificações podem originar mensagens e cada mensagem possui tentativas de entrega append-only.",
      "renderMode": "mermaid",
      "api": "api/diagrams/modelo-historico.json",
      "human": "diagrams/modelo-historico.html"
    }
  ],
  "apiVersion": 1
}
