{
  "id": "fase-07-abertura-do-estagio",
  "title": "Fase 07 — Abertura do estágio",
  "description": "Checklist de criação da solicitação, envio, análise e formalização inicial do estágio.",
  "type": "development-phase",
  "status": "planned",
  "visibility": "public",
  "tags": [
    "sge/desenvolvimento",
    "sge/estagio",
    "sge/checklist"
  ],
  "related": [
    "fluxos-principais",
    "fase-08-estagio-em-andamento"
  ],
  "sourceRefs": [],
  "authors": [],
  "updated": null,
  "diagram": null,
  "body": "Base: [fluxo de abertura](doc:fluxos-principais#2-solicitacao).\n\nAntes do formulário, implemente e teste as Actions de envio, análise, correção e formalização, incluindo snapshots, cópia de endereço e efeitos transacionais. O formulário será um cliente dessas regras, não o lugar onde elas vivem.\n\n## Formulário e solicitação do discente\n\n- [x] Criar `internship_requests` com status inicial `draft`.\n- [ ] Salvar o `draft` incrementalmente com Livewire, aceitando campos nulos fora dos identificadores técnicos.\n- [ ] Exigir, ao enviar ou em qualquer estado não terminal, todos os campos obrigatórios conforme o caminho condicional escolhido.\n- [ ] Exibir ao discente a lista das próprias solicitações com status e última atualização, sem expor Activity Log.\n- [ ] Exigir perfil pessoal completo quando a regra determinar.\n- [ ] Filtrar curso, tipo e opções pelo vínculo/campus atual.\n- [ ] Relacionar curso e tipo por FKs.\n- [ ] Copiar regras do tipo para snapshot JSONB.\n- [ ] Relacionar concedente por FK e snapshot.\n- [ ] Relacionar supervisor por pessoa/vínculo e snapshot.\n- [ ] Registrar atividades, datas, jornada, remuneração, protocolo e observações.\n- [ ] Validar a data proposta contra o prazo mínimo após o envio e calcular a data prevista de término.\n- [ ] Criar rádio de capacidade civil: maior de idade, menor de idade ou menor emancipado.\n- [ ] Exigir responsável legal somente quando o discente selecionar menor de idade.\n- [ ] Exigir upload privado do comprovante pelo próprio SGE quando selecionar menor emancipado, criando `emancipation_evidences` e mídia privada sem apagar envios anteriores.\n- [ ] Implementar decisão manual do Setor: validar ou recusar com motivo; o envio nunca aprova automaticamente.\n- [ ] Validar no servidor que a opção maior de idade corresponde à data de nascimento e que menor emancipado contém comprovante.\n- [ ] No endereço, selecionar primeiro a UF e depois consultar cidades do catálogo local por nome; persistir a cidade por código IBGE.\n- [ ] Na formalização, copiar o endereço atual da concedente para uma nova linha de `addresses` e gravar `internships.workplace_address_id`.\n- [ ] Validar carga horária, período, feriados nacionais/estaduais/municipais aplicáveis ao endereço do local de trabalho, pausas e regras do tipo.\n\n## Formalização inicial\n\n- [ ] Criar `internships` com `student_affiliation_id`, jornada inicial e status `pending_formalization` somente após aceitar a solicitação.\n- [ ] Copiar para o estágio os dados aprovados, os snapshots históricos e as referências históricas de endereço.\n- [ ] Associar `internship_id` à mesma solicitação que originou o estágio.\n\n## Cadastros relacionados\n\n- [ ] Exigir que a concedente já esteja cadastrada antes do envio do formulário.\n- [ ] Criar solicitação de supervisor ainda não cadastrado.\n- [ ] Permitir aprovar, recusar ou complementar pelo Setor de Estágio.\n- [ ] Reutilizar subfluxo de conta/vínculo quando necessário.\n- [ ] Associar resultado aprovado sem perder dados informados originalmente.\n\n## Envio e análise\n\n- [ ] Exibir erros sem perder dados do rascunho.\n- [ ] Exigir checkbox de concordância no envio e reenvio; registrar a data e hora em `terms_accepted_at`.\n- [ ] Enviar para análise e bloquear edição indevida.\n- [ ] Solicitar pendência com motivo.\n- [ ] Permitir correção e reenvio pelo discente.\n- [ ] Permitir devolver a mesma solicitação depois da criação e antes da liberação do estágio.\n- [ ] Aplicar ao estágio somente dados corrigidos que recebam nova aprovação, com recálculo e reemissão documental quando necessário.\n- [ ] Permitir recusa/cancelamento com motivo e histórico.\n- [ ] Aceitar e encaminhar para documento principal.\n- [ ] Aplicar a matriz de canais: aviso individual ao discente, seleção explícita de interessados na disponibilização para assinatura e resumo interno agrupado para o Setor de Estágio.\n\n## Próxima fase\n\n[Fase 08 — Estágio em andamento](doc:fase-08-estagio-em-andamento)",
  "sections": [
    {
      "id": "formulario-e-solicitacao-do-discente",
      "level": 2,
      "title": "Formulário e solicitação do discente",
      "text": "- [x] Criar `internship_requests` com status inicial `draft`. - [ ] Salvar o `draft` incrementalmente com Livewire, aceitando campos nulos fora dos identificadores técnicos. - [ ] Exigir, ao enviar ou em qualquer estado não terminal, todos os campos obrigatórios conforme o caminho condicional escolhido. - [ ] Exibir ao discente a lista das próprias solicitações com status e última atualização, sem expor Activity Log. - [ ] Exigir perfil pessoal completo quando a regra determinar. - [ ] Filtrar curso, tipo e opções pelo vínculo/campus atual. - [ ] Relacionar curso e tipo por FKs. - [ ] Copiar regras do tipo para snapshot JSONB. - [ ] Relacionar concedente por FK e snapshot. - [ ] Relacionar supervisor por pessoa/vínculo e snapshot. - [ ] Registrar atividades, datas, jornada, remuneração, protocolo e observações. - [ ] Validar a data proposta contra o prazo mínimo após o envio e calcular a data prevista de término. - [ ] Criar rádio de capacidade civil: maior de idade, menor de idade ou menor emancipado. - [ ] Exigir responsável legal somente quando o discente selecionar menor de idade. - [ ] Exigir upload privado do comprovante pelo próprio SGE quando selecionar menor emancipado, criando `emancipation_evidences` e mídia privada sem apagar envios anteriores. - [ ] Implementar decisão manual do Setor: validar ou recusar com motivo; o envio nunca aprova automaticamente. - [ ] Validar no servidor que a opção maior de idade corresponde à data de nascimento e que menor emancipado contém comprovante. - [ ] No endereço, selecionar primeiro a UF e depois consultar cidades do catálogo local por nome; persistir a cidade por código IBGE. - [ ] Na formalização, copiar o endereço atual da concedente para uma nova linha de `addresses` e gravar `internships.workplace_address_id`. - [ ] Validar carga horária, período, feriados nacionais/estaduais/municipais aplicáveis ao endereço do local de trabalho, pausas e regras do tipo.",
      "line": 5
    },
    {
      "id": "formalizacao-inicial",
      "level": 2,
      "title": "Formalização inicial",
      "text": "- [ ] Criar `internships` com `student_affiliation_id`, jornada inicial e status `pending_formalization` somente após aceitar a solicitação. - [ ] Copiar para o estágio os dados aprovados, os snapshots históricos e as referências históricas de endereço. - [ ] Associar `internship_id` à mesma solicitação que originou o estágio.",
      "line": 28
    },
    {
      "id": "cadastros-relacionados",
      "level": 2,
      "title": "Cadastros relacionados",
      "text": "- [ ] Exigir que a concedente já esteja cadastrada antes do envio do formulário. - [ ] Criar solicitação de supervisor ainda não cadastrado. - [ ] Permitir aprovar, recusar ou complementar pelo Setor de Estágio. - [ ] Reutilizar subfluxo de conta/vínculo quando necessário. - [ ] Associar resultado aprovado sem perder dados informados originalmente.",
      "line": 34
    },
    {
      "id": "envio-e-analise",
      "level": 2,
      "title": "Envio e análise",
      "text": "- [ ] Exibir erros sem perder dados do rascunho. - [ ] Exigir checkbox de concordância no envio e reenvio; registrar a data e hora em `terms_accepted_at`. - [ ] Enviar para análise e bloquear edição indevida. - [ ] Solicitar pendência com motivo. - [ ] Permitir correção e reenvio pelo discente. - [ ] Permitir devolver a mesma solicitação depois da criação e antes da liberação do estágio. - [ ] Aplicar ao estágio somente dados corrigidos que recebam nova aprovação, com recálculo e reemissão documental quando necessário. - [ ] Permitir recusa/cancelamento com motivo e histórico. - [ ] Aceitar e encaminhar para documento principal. - [ ] Aplicar a matriz de canais: aviso individual ao discente, seleção explícita de interessados na disponibilização para assinatura e resumo interno agrupado para o Setor de Estágio.",
      "line": 42
    },
    {
      "id": "proxima-fase",
      "level": 2,
      "title": "Próxima fase",
      "text": "[Fase 08 — Estágio em andamento](doc:fase-08-estagio-em-andamento)",
      "line": 55
    }
  ],
  "sourcePath": "content/fase-07-abertura-do-estagio.md",
  "visuals": [],
  "apiVersion": 1
}
