{
  "id": "enums",
  "title": "Enums",
  "description": "Índice dos enums do SGE, com status de implementação, valores persistidos e checklists individuais.",
  "type": "reference-hub",
  "status": "in-progress",
  "visibility": "public",
  "tags": [
    "sge/desenvolvimento",
    "sge/enums",
    "sge/banco-de-dados"
  ],
  "related": [
    "enum-affiliationtype",
    "enum-brazilianstate",
    "enum-holidayscope",
    "enum-emailmessagepurpose",
    "enum-emaildeliveryattemptstatus",
    "enum-internshiprequeststatus",
    "enum-legalcapacitydeclaration",
    "enum-internshiprequestcorrectionstatus",
    "enum-internshipstatus",
    "enum-partydocumenttype",
    "enum-generateddocumenttype",
    "enum-generateddocumentstatus",
    "enum-generateddocumentorigin",
    "enum-evaluationstatus",
    "enum-registrationrequeststatus",
    "enum-internshipcancellationrequeststatus",
    "enum-emancipationevidencestatus",
    "migrations",
    "dominio-e-modelo-de-dados",
    "enums-e-migrations"
  ],
  "sourceRefs": [],
  "authors": [],
  "updated": null,
  "diagram": null,
  "body": "> [!abstract] Critério\n> Um enum só deve existir quando o conjunto for pequeno, estável e parte da regra de negócio. Se o valor for configurável pelo Administrador do Campus ou crescer sem mudança de código, use tabela ou JSONB.\n\n## Painel\n\n| Status          | Enum                                        | Onde é usado                     |\n| --------------- | ------------------------------------------- | -------------------------------- |\n| ✅ Implementado | [Enum — AffiliationType](doc:enum-affiliationtype)            | `affiliations.type`              |\n| ✅ Implementado | [Enum — BrazilianState](doc:enum-brazilianstate)              | `cities.state`, endereços, campi e calendários |\n| ✅ Implementado | [Enum — HolidayScope](doc:enum-holidayscope) | `holidays.scope` |\n| ✅ Implementado | [Enum — EmailMessagePurpose](doc:enum-emailmessagepurpose)        | `email_messages.purpose`         |\n| ✅ Implementado | [Enum — EmailDeliveryAttemptStatus](doc:enum-emaildeliveryattemptstatus) | `email_delivery_attempts.status` |\n| ✅ Implementado | [Enum — InternshipRequestStatus](doc:enum-internshiprequeststatus)    | `internship_requests.status`     |\n| ✅ Implementado | [Enum — LegalCapacityDeclaration](doc:enum-legalcapacitydeclaration)   | `internship_requests.legal_capacity_declaration` |\n| ✅ Implementado | [Enum — InternshipRequestCorrectionStatus](doc:enum-internshiprequestcorrectionstatus) | `internship_request_corrections.status` |\n| ✅ Implementado | [Enum — InternshipStatus](doc:enum-internshipstatus)           | `internships.status`             |\n| ✅ Implementado | [Enum — PartyDocumentType](doc:enum-partydocumenttype)          | `granting_parties.document_type` |\n| ✅ Implementado | [Enum — GeneratedDocumentType](doc:enum-generateddocumenttype)      | `generated_documents.type`       |\n| ✅ Implementado | [Enum — GeneratedDocumentStatus](doc:enum-generateddocumentstatus)    | `generated_documents.status`     |\n| ✅ Implementado | [Enum — GeneratedDocumentOrigin](doc:enum-generateddocumentorigin)    | `generated_documents.origin`     |\n| ✅ Implementado | [Enum — EvaluationStatus](doc:enum-evaluationstatus)           | `supervisor_evaluations.status`  |\n| ✅ Implementado | `EvaluationConcept` | opções de conceitos da avaliação, com rótulos em português. |\n| ✅ Implementado | [Enum — RegistrationRequestStatus](doc:enum-registrationrequeststatus)  | solicitações de cadastro pendente |\n| ✅ Implementado | [Enum — InternshipCancellationRequestStatus](doc:enum-internshipcancellationrequeststatus) | `internship_cancellation_requests.status` |\n| ✅ Implementado | [Enum — EmancipationEvidenceStatus](doc:enum-emancipationevidencestatus) | `emancipation_evidences.status` |\n\n## Checklist do catálogo\n\nNeste índice, **Implementado** significa que a classe do enum e seus testes unitários já existem. O uso em Models, migrations, Policies e fluxos de domínio continua indicado no checklist individual.\n\n- [ ] Confirmar cada enum contra a regra de negócio aprovada.\n- [ ] Manter valores persistidos em inglês e `snake_case`.\n- [ ] Manter rótulos de interface nas traduções/`label()`, sem persistir texto exibido.\n- [ ] Adicionar teste para todos os cases, `values()` e `options()` quando esses métodos existirem.\n- [ ] Atualizar a migration que usa o enum e o [painel de desenvolvimento](doc:painel-de-desenvolvimento).\n- [ ] Não criar enum para permissões, templates, campus ou vínculos desativados quando a regra já for atendida por Policy, versão ou timestamp.\n\n## O que não é enum agora\n\n- `CampusStatus`: usar `deactivated_at`.\n- `AffiliationStatus`: usar `deactivated_at`.\n- `TemplateStatus`: usar versões e `activated_at`/`deactivated_at`.\n- Autorização: implementar a matriz institucional em Policies/Gates, a partir de `AffiliationType` e do vínculo ativo; ela não é configurável em tempo de execução.\n- Variáveis de template: usar catálogo fixo em português com `${variavel}`.\n- Motivo/origem de jornada e fonte do calendário: strings auditadas; não são conjuntos fechados.\n- Aditivos: usar `GeneratedDocumentType::Addendum`.\n- Feriados: usar calendário nacional, estadual e municipal persistido, aplicável pela cidade/UF do endereço histórico do local de trabalho; exceções de um estágio ficam em `internship_calendar_overrides`.\n\n## Navegação\n\n- [Índice de migrations](doc:migrations)\n- [Painel de desenvolvimento](doc:painel-de-desenvolvimento)\n- [Domínio e modelo de dados](doc:dominio-e-modelo-de-dados)\n- [Portal antigo de enums e migrations](doc:enums-e-migrations)",
  "sections": [
    {
      "id": "painel",
      "level": 2,
      "title": "Painel",
      "text": "| Status          | Enum                                        | Onde é usado                     | | --------------- | ------------------------------------------- | -------------------------------- | | ✅ Implementado | [Enum — AffiliationType](doc:enum-affiliationtype)            | `affiliations.type`              | | ✅ Implementado | [Enum — BrazilianState](doc:enum-brazilianstate)              | `cities.state`, endereços, campi e calendários | | ✅ Implementado | [Enum — HolidayScope](doc:enum-holidayscope) | `holidays.scope` | | ✅ Implementado | [Enum — EmailMessagePurpose](doc:enum-emailmessagepurpose)        | `email_messages.purpose`         | | ✅ Implementado | [Enum — EmailDeliveryAttemptStatus](doc:enum-emaildeliveryattemptstatus) | `email_delivery_attempts.status` | | ✅ Implementado | [Enum — InternshipRequestStatus](doc:enum-internshiprequeststatus)    | `internship_requests.status`     | | ✅ Implementado | [Enum — LegalCapacityDeclaration](doc:enum-legalcapacitydeclaration)   | `internship_requests.legal_capacity_declaration` | | ✅ Implementado | [Enum — InternshipRequestCorrectionStatus](doc:enum-internshiprequestcorrectionstatus) | `internship_request_corrections.status` | | ✅ Implementado | [Enum — InternshipStatus](doc:enum-internshipstatus)           | `internships.status`             | | ✅ Implementado | [Enum — PartyDocumentType](doc:enum-partydocumenttype)          | `granting_parties.document_type` | | ✅ Implementado | [Enum — GeneratedDocumentType](doc:enum-generateddocumenttype)      | `generated_documents.type`       | | ✅ Implementado | [Enum — GeneratedDocumentStatus](doc:enum-generateddocumentstatus)    | `generated_documents.status`     | | ✅ Implementado | [Enum — GeneratedDocumentOrigin](doc:enum-generateddocumentorigin)    | `generated_documents.origin`     | | ✅ Implementado | [Enum — EvaluationStatus](doc:enum-evaluationstatus)           | `supervisor_evaluations.status`  | | ✅ Implementado | `EvaluationConcept` | opções de conceitos da avaliação, com rótulos em português. | | ✅ Implementado | [Enum — RegistrationRequestStatus](doc:enum-registrationrequeststatus)  | solicitações de cadastro pendente | | ✅ Implementado | [Enum — InternshipCancellationRequestStatus](doc:enum-internshipcancellationrequeststatus) | `internship_cancellation_requests.status` | | ✅ Implementado | [Enum — EmancipationEvidenceStatus](doc:enum-emancipationevidencestatus) | `emancipation_evidences.status` |",
      "line": 4
    },
    {
      "id": "checklist-do-catalogo",
      "level": 2,
      "title": "Checklist do catálogo",
      "text": "Neste índice, **Implementado** significa que a classe do enum e seus testes unitários já existem. O uso em Models, migrations, Policies e fluxos de domínio continua indicado no checklist individual.  - [ ] Confirmar cada enum contra a regra de negócio aprovada. - [ ] Manter valores persistidos em inglês e `snake_case`. - [ ] Manter rótulos de interface nas traduções/`label()`, sem persistir texto exibido. - [ ] Adicionar teste para todos os cases, `values()` e `options()` quando esses métodos existirem. - [ ] Atualizar a migration que usa o enum e o [painel de desenvolvimento](doc:painel-de-desenvolvimento). - [ ] Não criar enum para permissões, templates, campus ou vínculos desativados quando a regra já for atendida por Policy, versão ou timestamp.",
      "line": 27
    },
    {
      "id": "o-que-nao-e-enum-agora",
      "level": 2,
      "title": "O que não é enum agora",
      "text": "- `CampusStatus`: usar `deactivated_at`. - `AffiliationStatus`: usar `deactivated_at`. - `TemplateStatus`: usar versões e `activated_at`/`deactivated_at`. - Autorização: implementar a matriz institucional em Policies/Gates, a partir de `AffiliationType` e do vínculo ativo; ela não é configurável em tempo de execução. - Variáveis de template: usar catálogo fixo em português com `${variavel}`. - Motivo/origem de jornada e fonte do calendário: strings auditadas; não são conjuntos fechados. - Aditivos: usar `GeneratedDocumentType::Addendum`. - Feriados: usar calendário nacional, estadual e municipal persistido, aplicável pela cidade/UF do endereço histórico do local de trabalho; exceções de um estágio ficam em `internship_calendar_overrides`.",
      "line": 38
    },
    {
      "id": "navegacao",
      "level": 2,
      "title": "Navegação",
      "text": "- [Índice de migrations](doc:migrations) - [Painel de desenvolvimento](doc:painel-de-desenvolvimento) - [Domínio e modelo de dados](doc:dominio-e-modelo-de-dados) - [Portal antigo de enums e migrations](doc:enums-e-migrations)",
      "line": 49
    }
  ],
  "sourcePath": "content/enums.md",
  "visuals": [],
  "apiVersion": 1
}
