{
  "id": "enum-internshipstatus",
  "title": "Enum — InternshipStatus",
  "description": "Ciclo de formalização e execução de um estágio já criado no SGE.",
  "type": "enum-reference",
  "status": "implemented",
  "visibility": "public",
  "tags": [
    "sge/enums",
    "sge/estagio"
  ],
  "related": [
    "enum-internshiprequeststatus",
    "enum-generateddocumentstatus",
    "migration-15-internships",
    "schedules",
    "fluxos-principais",
    "ciclos-de-status"
  ],
  "sourceRefs": [
    "https://github.com/sge-suite/sge/blob/master/app/Enums/InternshipStatus.php",
    "https://github.com/sge-suite/sge/blob/master/tests/Unit/Enums/InternshipStatusTest.php"
  ],
  "authors": [],
  "updated": null,
  "diagram": "enum-internship-status",
  "body": "> [!success] Estado\n> A classe e os testes unitários já existem e os cases correspondem ao ciclo do estágio. Ainda falta integrar o enum ao Model, à migration e às transições de domínio. Os estados de formulário e análise pertencem a `InternshipRequestStatus`, não a `internships.status`.\n\n## Contrato\n\n| Case                 | Valor persistido      | Rótulo                    |\n| -------------------- | --------------------- | ------------------------- |\n| `PendingFormalization` | `pending_formalization` | Em formalização         |\n| `AwaitingSignatures` | `awaiting_signatures` | Aguardando assinaturas    |\n| `PendingCorrection`  | `pending_correction`  | Com pendência documental  |\n| `Released`           | `released`            | Liberado                  |\n| `InProgress`         | `in_progress`         | Em andamento              |\n| `Paused`             | `paused`              | Pausado                   |\n| `Completed`          | `completed`           | Concluído                 |\n| `Cancelled`          | `cancelled`           | Cancelado                 |\n\nUm estágio nasce quando a solicitação é aceita, inicialmente em `PendingFormalization`. Nesse estado, o Setor escolhe o template, gera o documento e o encaminha para assinatura. Só então o estágio passa a `AwaitingSignatures`. Rascunho, envio, análise, pendência e recusa pertencem exclusivamente a [`InternshipRequestStatus`](doc:enum-internshiprequeststatus). O status de cada assinatura pertence a [`GeneratedDocumentStatus`](doc:enum-generateddocumentstatus), não a este enum.\n\n## Transições iniciais\n\n{{diagram:enum-internship-status}}\n\n## Checklist de implementação\n\n- [x] Implementar o enum string e rótulos no código.\n- [x] Implementar `options()` e `values()`.\n- [x] Adicionar cast em `Internship`.\n- [x] Usar o valor inicial do enum na [migration de internships](doc:migration-15-internships).\n- [ ] Implementar guardas para transições permitidas.\n- [ ] Usar a mesma guarda na Action manual e em [Schedules](doc:schedules), sem `update` direto de status.\n- [x] Testar cases, valores, rótulos e opções.\n- [ ] Testar formalização, reemissão após pendência, liberação, pausa, retomada, conclusão e cancelamento no fluxo de domínio.\n- [ ] Atualizar [Fluxos principais](doc:fluxos-principais) se as transições forem alteradas.\n\n## Referência funcional\n\n- [Ciclos de status](doc:ciclos-de-status) — regra pública de transição e conclusão.",
  "sections": [
    {
      "id": "contrato",
      "level": 2,
      "title": "Contrato",
      "text": "| Case                 | Valor persistido      | Rótulo                    | | -------------------- | --------------------- | ------------------------- | | `PendingFormalization` | `pending_formalization` | Em formalização         | | `AwaitingSignatures` | `awaiting_signatures` | Aguardando assinaturas    | | `PendingCorrection`  | `pending_correction`  | Com pendência documental  | | `Released`           | `released`            | Liberado                  | | `InProgress`         | `in_progress`         | Em andamento              | | `Paused`             | `paused`              | Pausado                   | | `Completed`          | `completed`           | Concluído                 | | `Cancelled`          | `cancelled`           | Cancelado                 |  Um estágio nasce quando a solicitação é aceita, inicialmente em `PendingFormalization`. Nesse estado, o Setor escolhe o template, gera o documento e o encaminha para assinatura. Só então o estágio passa a `AwaitingSignatures`. Rascunho, envio, análise, pendência e recusa pertencem exclusivamente a [`InternshipRequestStatus`](doc:enum-internshiprequeststatus). O status de cada assinatura pertence a [`GeneratedDocumentStatus`](doc:enum-generateddocumentstatus), não a este enum.",
      "line": 4
    },
    {
      "id": "transicoes-iniciais",
      "level": 2,
      "title": "Transições iniciais",
      "text": "",
      "line": 19
    },
    {
      "id": "checklist-de-implementacao",
      "level": 2,
      "title": "Checklist de implementação",
      "text": "- [x] Implementar o enum string e rótulos no código. - [x] Implementar `options()` e `values()`. - [x] Adicionar cast em `Internship`. - [x] Usar o valor inicial do enum na [migration de internships](doc:migration-15-internships). - [ ] Implementar guardas para transições permitidas. - [ ] Usar a mesma guarda na Action manual e em [Schedules](doc:schedules), sem `update` direto de status. - [x] Testar cases, valores, rótulos e opções. - [ ] Testar formalização, reemissão após pendência, liberação, pausa, retomada, conclusão e cancelamento no fluxo de domínio. - [ ] Atualizar [Fluxos principais](doc:fluxos-principais) se as transições forem alteradas.",
      "line": 23
    },
    {
      "id": "referencia-funcional",
      "level": 2,
      "title": "Referência funcional",
      "text": "- [Ciclos de status](doc:ciclos-de-status) — regra pública de transição e conclusão.",
      "line": 35
    }
  ],
  "sourcePath": "content/enum-internshipstatus.md",
  "visuals": [
    {
      "id": "enum-internship-status",
      "kind": "state",
      "title": "Ciclo do estágio",
      "description": "Estados de formalização, execução, pausa, conclusão e cancelamento do estágio.",
      "summary": "O estágio aguarda formalização, assinaturas e liberação; depois entra em andamento, pode ser pausado ou cancelado, e só termina como Completed após a confirmação dos requisitos.",
      "renderMode": "mermaid",
      "api": "api/diagrams/enum-internship-status.json",
      "human": "diagrams/enum-internship-status.html"
    }
  ],
  "apiVersion": 1
}
