{
  "id": "fase-01-fundacao-de-dados",
  "title": "Fase 01 — Fundação de dados",
  "description": "Checklist da fundação de dados, enums, migrations, modelos e catálogos básicos.",
  "type": "development-phase",
  "status": "completed",
  "visibility": "public",
  "tags": [
    "sge/desenvolvimento",
    "sge/banco-de-dados",
    "sge/checklist"
  ],
  "related": [
    "migrations",
    "enums",
    "migration-base-01-users",
    "migration-base-02-cache",
    "migration-base-03-jobs",
    "migration-base-04-activity-log",
    "migration-base-05-media",
    "enum-affiliationtype",
    "enum-brazilianstate",
    "migration-01a-cities",
    "migration-01-addresses",
    "migration-02-user-personal-data",
    "migration-03-campuses",
    "migration-04-affiliations",
    "migration-09-courses",
    "migration-10-course-id-em-affiliations",
    "migration-11-internship-types",
    "migration-12-granting-parties",
    "migration-22-holidays",
    "migration-22-internship-calendar-overrides",
    "casts",
    "helpers",
    "concerns",
    "testes-existentes",
    "fase-02-conta-e-contexto"
  ],
  "sourceRefs": [],
  "authors": [],
  "updated": null,
  "diagram": null,
  "body": "> [!info] Ordem\n> Execute as migrations na ordem do [índice de migrations](doc:migrations). Cada enum tem seu próprio checklist no [índice de enums](doc:enums).\n\n## Base já existente\n\n- [x] [Migration base de usuários](doc:migration-base-01-users).\n- [x] [Migration base de cache](doc:migration-base-02-cache).\n- [x] [Migration base de filas](doc:migration-base-03-jobs).\n- [x] [Migration base de auditoria](doc:migration-base-04-activity-log).\n- [x] [Migration base de mídia](doc:migration-base-05-media).\n- [x] Decidir que não haverá migration de permissões; autorização será por vínculos, Gates e Policies.\n\n> [!info] Escopo concluído\n> A fundação de schema, Models, relações, factories e testes PostgreSQL das migrations implementadas está concluída. O contexto de vínculo da Fase 02 e a integração do Activity Log Eloquent da Fase 03 também já têm implementação. Fluxos de cadastro pela interface, Jobs de domínio e telas de estágio continuam nas fases próprias.\n\n## Dados cadastrais\n\n- [x] Criar e testar as classes dos enums estáveis; a integração com Models, migrations e fluxos continua nas etapas específicas.\n- [x] Concluir [`cities`](doc:migration-01a-cities), executar `php artisan cities:fetch` quando necessário e carregar o catálogo com `CitySeeder` sem rede.\n- [x] Implementar a base backend de [`addresses`](doc:migration-01-addresses), incluindo cópia histórica.\n- [ ] Implementar consulta de CEP no futuro fluxo de cadastro; endereço segue o contrato atual sem validação de formato do CEP.\n- [x] Concluir [`user_personal_data`](doc:migration-02-user-personal-data).\n- [x] Concluir [`campuses`](doc:migration-03-campuses).\n- [x] Concluir [`affiliations`](doc:migration-04-affiliations).\n- [x] Concluir [`courses`](doc:migration-09-courses).\n- [x] Concluir [`course_id` em affiliations](doc:migration-10-course-id-em-affiliations).\n- [x] Concluir [`internship_types`](doc:migration-11-internship-types).\n- [x] Concluir [`granting_parties`](doc:migration-12-granting-parties).\n- [x] Concluir [`holidays`](doc:migration-22-holidays).\n- [x] Concluir exceções por estágio em [`internship_calendar_overrides`](doc:migration-22-internship-calendar-overrides).\n\n## Regras de dados\n\n- [x] Preservar linhas de endereço usadas historicamente; alterações criam nova linha quando necessário.\n- [x] Garantir CPF único e normalizado na conta.\n- [ ] Impedir alteração do CPF em futuros fluxos de configuração da conta; pertence à [Fase 02](doc:fase-02-conta-e-contexto).\n- [x] Normalizar CPF, CNPJ, UF e e-mails pelos casts e validações aplicáveis; CEP não tem validação de formato.\n- [x] Permitir múltiplos vínculos por pessoa sem trocar campus dentro do vínculo.\n- [x] Exigir curso em vínculo discente e respeitar escopo do campus.\n- [x] Congelar regras do tipo de estágio por FK e snapshot no estágio.\n- [x] Criar factories e testes para cenários completos, incompletos, ativos e desativados.\n\n## Componentes que sustentam a fundação\n\n- [x] Confirmar [casts](doc:casts) nos Models corretos.\n- [x] Usar [helpers](doc:helpers) somente para formatação/normalização, sem regra de autorização.\n- [x] Reutilizar [concerns](doc:concerns) para validações compartilhadas.\n- [x] Criar testes PostgreSQL para as migrations e Models; lacunas de autorização e fluxos estão mapeadas em [testes existentes](doc:testes-existentes).\n\n## Critério de saída\n\n- [x] As migrations implementadas passam na suíte PostgreSQL e seus Models, relações, casts, índices e validações têm testes.\n\n## Próxima fase\n\n[Fase 02 — Conta e contexto](doc:fase-02-conta-e-contexto)",
  "sections": [
    {
      "id": "base-ja-existente",
      "level": 2,
      "title": "Base já existente",
      "text": "- [x] [Migration base de usuários](doc:migration-base-01-users). - [x] [Migration base de cache](doc:migration-base-02-cache). - [x] [Migration base de filas](doc:migration-base-03-jobs). - [x] [Migration base de auditoria](doc:migration-base-04-activity-log). - [x] [Migration base de mídia](doc:migration-base-05-media). - [x] Decidir que não haverá migration de permissões; autorização será por vínculos, Gates e Policies.  > [!info] Escopo concluído > A fundação de schema, Models, relações, factories e testes PostgreSQL das migrations implementadas está concluída. O contexto de vínculo da Fase 02 e a integração do Activity Log Eloquent da Fase 03 também já têm implementação. Fluxos de cadastro pela interface, Jobs de domínio e telas de estágio continuam nas fases próprias.",
      "line": 4
    },
    {
      "id": "dados-cadastrais",
      "level": 2,
      "title": "Dados cadastrais",
      "text": "- [x] Criar e testar as classes dos enums estáveis; a integração com Models, migrations e fluxos continua nas etapas específicas. - [x] Concluir [`cities`](doc:migration-01a-cities), executar `php artisan cities:fetch` quando necessário e carregar o catálogo com `CitySeeder` sem rede. - [x] Implementar a base backend de [`addresses`](doc:migration-01-addresses), incluindo cópia histórica. - [ ] Implementar consulta de CEP no futuro fluxo de cadastro; endereço segue o contrato atual sem validação de formato do CEP. - [x] Concluir [`user_personal_data`](doc:migration-02-user-personal-data). - [x] Concluir [`campuses`](doc:migration-03-campuses). - [x] Concluir [`affiliations`](doc:migration-04-affiliations). - [x] Concluir [`courses`](doc:migration-09-courses). - [x] Concluir [`course_id` em affiliations](doc:migration-10-course-id-em-affiliations). - [x] Concluir [`internship_types`](doc:migration-11-internship-types). - [x] Concluir [`granting_parties`](doc:migration-12-granting-parties). - [x] Concluir [`holidays`](doc:migration-22-holidays). - [x] Concluir exceções por estágio em [`internship_calendar_overrides`](doc:migration-22-internship-calendar-overrides).",
      "line": 16
    },
    {
      "id": "regras-de-dados",
      "level": 2,
      "title": "Regras de dados",
      "text": "- [x] Preservar linhas de endereço usadas historicamente; alterações criam nova linha quando necessário. - [x] Garantir CPF único e normalizado na conta. - [ ] Impedir alteração do CPF em futuros fluxos de configuração da conta; pertence à [Fase 02](doc:fase-02-conta-e-contexto). - [x] Normalizar CPF, CNPJ, UF e e-mails pelos casts e validações aplicáveis; CEP não tem validação de formato. - [x] Permitir múltiplos vínculos por pessoa sem trocar campus dentro do vínculo. - [x] Exigir curso em vínculo discente e respeitar escopo do campus. - [x] Congelar regras do tipo de estágio por FK e snapshot no estágio. - [x] Criar factories e testes para cenários completos, incompletos, ativos e desativados.",
      "line": 32
    },
    {
      "id": "componentes-que-sustentam-a-fundacao",
      "level": 2,
      "title": "Componentes que sustentam a fundação",
      "text": "- [x] Confirmar [casts](doc:casts) nos Models corretos. - [x] Usar [helpers](doc:helpers) somente para formatação/normalização, sem regra de autorização. - [x] Reutilizar [concerns](doc:concerns) para validações compartilhadas. - [x] Criar testes PostgreSQL para as migrations e Models; lacunas de autorização e fluxos estão mapeadas em [testes existentes](doc:testes-existentes).",
      "line": 43
    },
    {
      "id": "criterio-de-saida",
      "level": 2,
      "title": "Critério de saída",
      "text": "- [x] As migrations implementadas passam na suíte PostgreSQL e seus Models, relações, casts, índices e validações têm testes.",
      "line": 50
    },
    {
      "id": "proxima-fase",
      "level": 2,
      "title": "Próxima fase",
      "text": "[Fase 02 — Conta e contexto](doc:fase-02-conta-e-contexto)",
      "line": 54
    }
  ],
  "sourcePath": "content/fase-01-fundacao-de-dados.md",
  "visuals": [],
  "apiVersion": 1
}
