---
id: CORE-DATA-MIGRACOES
tipo: matriz
onda: 1
status: concluido
unidades: [CORE-DATA]
fontes:
  - V2/Core/Migrations/2026_06_01_000001_create_v2_uuid_function.php
  - V2/Core/Migrations/2026_06_01_000002_create_users_table.php
  - V2/Core/Migrations/2026_06_01_000003_create_sentinel_tables.php
  - V2/Core/Migrations/2026_06_01_000004_add_permissions_v2_to_users_table.php
  - V2/Core/Migrations/2026_06_01_000005_create_v2_roles_and_add_role_id_to_users_table.php
  - V2/Core/Migrations/2026_08_18_000001_create_v2_conexao_tags_table.php
  - V2/Core/Migrations/2026_08_18_000002_migrate_associado_tags_to_conexao_tags.php
  - V2/Core/Migrations/2026_09_14_000001_add_unidade_regional_id_to_users_table.php
  - V2/Core/Migrations/2026_09_14_000002_seed_v2_regional_role.php
  - V2/Modules/Conexoes/Associados/Migrations/2024_01_01_000004_create_v2_associado_instituicoes_table.php
  - V2/Modules/Conexoes/Associados/Migrations/2024_01_01_000005_create_v2_associado_instituicao_gallery_table.php
  - V2/Modules/Conexoes/Associados/Migrations/2024_01_01_000011_add_gallery_media_id_to_associado_instituicao_gallery.php
  - V2/Modules/Conexoes/Associados/Migrations/2024_01_01_000012_add_type_and_regionais_fields_to_associado_instituicoes.php
  - V2/Modules/Conexoes/Associados/Migrations/2024_01_01_000013_archive_v2_chapters_table.php
  - V2/Modules/Conexoes/Associados/Migrations/2024_01_01_000014_add_api_token_to_associado_instituicoes.php
  - V2/Modules/Conexoes/Associados/Migrations/2024_01_01_000015_add_metadata_to_associado_instituicoes.php
  - V2/Modules/Conexoes/Associados/Migrations/2024_01_01_000016_add_category_and_tags_to_associado_instituicoes.php
  - V2/Modules/Conexoes/Associados/Migrations/2024_01_01_000017_add_social_fields_to_associado_instituicoes.php
  - V2/Modules/Conexoes/Associados/Migrations/2024_01_01_000018_add_cover_image_to_associado_instituicoes.php
  - V2/Modules/Conexoes/Associados/Migrations/2024_01_01_000019_reset_tags_to_default_categories.php
  - V2/Modules/Conexoes/Associados/Migrations/2024_01_01_000020_drop_category_from_associado_instituicoes.php
  - V2/Modules/Conexoes/ParceirosInstitucionais/Migrations/2024_01_01_000002_create_v2_parceiros_table.php
  - V2/Modules/Conexoes/ParceirosInstitucionais/Migrations/2024_01_01_000010_add_social_and_logo_fields_to_v2_parceiros_table.php
  - V2/Modules/Conexoes/ParceirosInstitucionais/Migrations/2024_01_01_000020_add_address_fields_to_v2_parceiros_table.php
  - V2/Modules/Conexoes/ParceirosInstitucionais/Migrations/2024_01_01_000030_add_metadata_to_v2_parceiros_table.php
  - V2/Modules/Conexoes/ParceirosInstitucionais/Migrations/2024_01_01_000040_add_summary_to_v2_parceiros_table.php
  - V2/Modules/Conexoes/ParceirosInstitucionais/Migrations/2026_07_31_000000_rename_v2_parceiros_to_v2_parceiros_institucionais.php
  - V2/Modules/Conexoes/ParceirosInstitucionais/Migrations/2026_08_06_000000_cleanup_old_parceiros_table.php
  - V2/Modules/Conexoes/UnidadeRegional/Migrations/2026_07_23_000001_create_v2_unidade_regionais_table.php
  - V2/Modules/Conexoes/UnidadeRegional/Migrations/2026_07_23_000002_create_v2_unidade_regional_empresas_table.php
  - V2/Modules/Conexoes/UnidadeRegional/Migrations/2026_07_23_000003_create_v2_unidade_regional_media_table.php
  - V2/Modules/Conexoes/UnidadeRegional/Migrations/2026_07_30_000001_fix_gallery_media_id_type.php
  - V2/Modules/Conexoes/UnidadeRegional/Migrations/2026_07_31_000001_add_soft_deletes_to_v2_unidade_regional_empresas_table.php
  - V2/Modules/Institucional/AssocieSe/Migrations/2025_01_01_000004_create_v2_membership_leads_table.php
  - V2/Modules/Institucional/AssocieSe/Migrations/2025_01_01_000005_create_v2_membership_plans_table.php
  - V2/Modules/Institucional/AssocieSe/Migrations/2025_07_20_000001_add_validity_to_v2_membership_plans.php
  - V2/Modules/Institucional/AssocieSe/Migrations/2025_07_20_000002_create_v2_membership_plan_gallery_table.php
  - V2/Modules/Institucional/FaleConosco/Migrations/2024_01_01_000007_create_v2_mensagens_contato_table.php
  - V2/Modules/Institucional/FaleConosco/Migrations/2024_01_01_000008_create_v2_contato_configs_table.php
  - V2/Modules/Institucional/Historia/Migrations/2026_07_20_000001_create_v2_historia_milestones_table.php
  - V2/Modules/Institucional/SobreNos/Migrations/2025_01_01_000001_create_v2_bienniums_table.php
  - V2/Modules/Institucional/SobreNos/Migrations/2025_01_01_000002_create_v2_board_members_table.php
  - V2/Modules/Institucional/SobreNos/Migrations/2026_07_20_000003_add_photo_id_to_v2_board_members_table.php
  - V2/Modules/Institucional/SobreNos/Migrations/2026_07_20_000004_add_bio_and_slug_to_v2_board_members.php
  - V2/Modules/Institucional/SobreNos/Migrations/2026_09_01_000001_normalize_sobre_nos_section_ids.php
  - V2/Modules/Layouts/BasicPage/Migrations/2026_06_29_092300_create_basic_pages_table.php
  - V2/Modules/Layouts/BasicPage/Migrations/2026_07_06_000200_create_basic_page_assets_table.php
  - V2/Modules/Layouts/Homepage/Migrations/2026_07_22_000001_create_v2_homepage_sections_table.php
  - V2/Modules/Publicacoes/Agenda/Migrations/2024_01_01_000006_create_v2_eventos_table.php
  - V2/Modules/Publicacoes/Agenda/Migrations/2026_07_20_000002_add_image_id_to_v2_eventos_table.php
  - V2/Modules/Publicacoes/Noticias/Migrations/2026_07_08_000001_create_v2_news_table.php
  - V2/Modules/Publicacoes/Noticias/Migrations/2026_07_22_000001_create_v2_news_categories_table.php
  - V2/Modules/Publicacoes/Noticias/Migrations/2026_07_22_000002_create_v2_news_tags_table.php
  - V2/Modules/Publicacoes/Noticias/Migrations/2026_07_22_000003_add_new_fields_to_v2_news_table.php
  - V2/Modules/Publicacoes/Noticias/Migrations/2026_07_22_000004_fix_pivot_uuid_types.php
  - V2/Modules/Publicacoes/Noticias/Migrations/2026_07_22_000005_fix_tags_and_categories_uuid.php
  - V2/Modules/Publicacoes/Noticias/Migrations/2026_07_26_000001_create_v2_news_gallery_pivot_table.php
  - V2/Modules/Publicacoes/Noticias/Migrations/2026_07_26_000002_remove_approval_workflow.php
  - V2/Modules/Publicacoes/Noticias/Migrations/2026_08_06_000001_add_unidade_regional_id_to_v2_news_table.php
  - V2/Modules/Publicacoes/Noticias/Migrations/2026_09_17_000001_create_v2_news_import_keys_table.php
  - V2/Modules/Publicacoes/TrabalheConosco/Migrations/2025_01_01_000006_create_v2_job_openings_table.php
  - V2/Modules/Publicacoes/TrabalheConosco/Migrations/2025_01_01_000007_create_v2_job_applications_table.php
  - V2/Modules/Publicacoes/TrabalheConosco/Migrations/2026_08_11_000001_add_description_detailed_and_metadata_to_v2_job_openings.php
  - V2/Modules/Publicacoes/TrabalheConosco/Migrations/2026_08_11_000002_add_cover_and_pdf_to_v2_job_openings.php
  - V2/Modules/Publicacoes/TrabalheConosco/Migrations/2026_09_03_000001_disable_trabalhe_conosco_module_flag.php
  - V2/Modules/Support/NoticiasImport/Migrations/2026_09_17_000002_create_v2_internal_api_keys_table.php
  - V2/Modules/Support/NoticiasImport/Migrations/2026_09_18_000003_add_consumer_abilities_to_v2_internal_api_keys.php
  - V2/Modules/Support/StructuralLandingEditor/Migrations/2026_07_03_000000_create_v2_structural_portal_blocks_table.php
  - V2/Modules/Support/StructuralLandingEditor/Migrations/2026_07_03_000001_create_v2_layout_base_configs_table.php
  - V2/Modules/Support/StructuralLandingEditor/Migrations/2026_07_06_000000_create_v2_sle_assets_table.php
  - V2/Modules/Support/SupportConfigs/Migrations/2026_06_30_000001_create_v2_system_mail_configs_table.php
  - V2/Modules/Support/SupportConfigs/Migrations/2026_06_30_000002_create_v2_module_flags_table.php
  - V2/Modules/Support/SupportConfigs/Migrations/2026_06_30_000003_create_v2_system_controls_table.php
  - V2/Modules/Support/SupportConfigs/Migrations/2026_06_30_000004_create_v2_cms_theme_configs_table.php
  - V2/Modules/Support/SupportConfigs/Migrations/2026_06_30_000005_create_v2_portal_configs_table.php
  - V2/Modules/Support/SupportConfigs/Migrations/2026_07_02_000001_add_v2_foreign_keys.php
  - V2/Modules/Support/SupportConfigs/Migrations/2026_07_06_000001_encrypt_mail_config_passwords.php
  - V2/Services/ActivityLogger/Migrations/2026_06_14_100000_create_activity_log_table.php
  - V2/Services/DigitalSignature/Migrations/2026_07_01_000001_create_v2_digital_certificates_table.php
  - V2/Services/DigitalSignature/Migrations/2026_07_01_000002_create_v2_signature_logs_table.php
  - V2/Services/FeedRSS/Migrations/2026_07_20_000001_create_v2_feed_rss_items_table.php
  - V2/Services/Gallery/Migrations/2026_06_28_000000_create_v2_gallery_media_table.php
  - V2/Services/MailService/Migrations/2026_06_30_000000_create_v2_mail_logs_table.php
  - V2/Services/SEO/Migrations/2026_06_29_093500_create_seo_tables.php
  - V2/Services/SEO/Migrations/2026_07_02_140000_seed_seo_configuration_keys.php
  - V2/Services/Search/Migrations/2026_06_14_000000_create_search_indexes_tables.php
  - V2/Services/Search/Migrations/2026_07_24_000001_fix_search_overlay_input_name.php
depende_de: [CORE-BOOT, CORE-DATA]
consumidores: [ARCH-OVERVIEW, CORE-AUTH, MOD-CONEXOES-ASSOCIADOS, MOD-CONEXOES-PARCEIROSINSTITUCIONAIS, MOD-CONEXOES-UNIDADEREGIONAL, MOD-INSTITUCIONAL-ASSOCIESE, MOD-INSTITUCIONAL-FALECONOSCO, MOD-INSTITUCIONAL-HISTORIA, MOD-INSTITUCIONAL-SOBRENOS, MOD-LAYOUTS-BASICPAGE, MOD-LAYOUTS-HOMEPAGE, MOD-PUBLICACOES-AGENDA, MOD-PUBLICACOES-NOTICIAS, MOD-PUBLICACOES-TRABALHECONOSCO, MOD-SUPPORT-NOTICIASIMPORT, MOD-SUPPORT-STRUCTURALLANDINGEDITOR, MOD-SUPPORT-SUPPORTCONFIGS, SVC-ACTIVITYLOGGER, SVC-DIGITALSIGNATURE, SVC-FEEDRSS, SVC-GALLERY, SVC-MAILSERVICE, SVC-SEARCH, SVC-SEO, DATA-SEEDS-BASICPAGES]
criticidade: alta
dono: CoreData
---

# Matriz: inventário e ordem de execução das 87 migrations

> Documento transversal. Mapeia **o que roda, em que ordem e do que depende**; colunas
> detalhadas de tabelas de módulo pertencem aos documentos de Onda 4. A unidade dona é a
> do `manifest.json` — quem detalha o módulo é o doc daquela unidade.

## 1. Efeito

`php artisan migrate` executa **87 migrations** — o número declarado em
`sucesu_analise/00_inventario/manifest.json` (`totals.migrations = 87`). O efeito agregado:

| Grupo de operação | Qtd | O que cria/altera |
|---|---:|---|
| Criar schema (inclui as 8 que também semeiam) | 48 | 57 tabelas (49 `v2_*`, `users`, 6 tabelas Sentinel e `activity_log`), índices, 3 funções SQL (`v2_gen_uuid`, `v2_news_search_vector_update`, `v2_public_search_vector_update`) e triggers; 8 delas semeiam na mesma transação (categorias, tag `Geral`, configs, página básica) |
| Alterar schema | 29 | colunas, 8 FKs, tipos (`varchar(36)` → `uuid`), metadados; inclui 1 normalização de dados via model |
| Seed dentro de migration (sem DDL) | 3 | chaves de config SEO, papel `regional`, flag de módulo |
| Renomear/dropar | 4 | `v2_parceiros` ↔ `v2_parceiros_institucionais`, `v2_chapters`, tabelas de aprovação |
| Copiar dados | 1 | tags de Associados → `v2_conexao_tags` |
| No-op histórico | 2 | `2024_01_01_000012`, `2024_01_01_000014` |

Total: 48 + 29 + 3 + 4 + 1 + 2 = **87**.

O que a ordem garante: toda coluna `id uuid` referenciada por outra migration existe antes
da migration que a referencia **quando a dependência respeita a ordem por nome de arquivo**.
O que ela **não** garante: FKs condicionais, idempotência e reversibilidade — ver §3.

## 2. Abordagem

### 2.1 Como as migrations entram na fila

Três diretórios são carregados por `V2ServiceProvider`:

- Core: `V2/Core/Migrations` — `V2/Core/Providers/V2ServiceProvider.php:78-82`.
- Módulos: `V2/Modules/<Grupo>/<Modulo>/Migrations` — `V2/Core/Providers/V2ServiceProvider.php:114-118`.
- Serviços: `V2/Services/<Servico>/Migrations` — `V2/Core/Providers/V2ServiceProvider.php:178-182`.

O `Migrator` do Laravel 5.5 agrega todos os paths, indexa pelo **nome do arquivo** e ordena
lexicograficamente por esse nome (`getMigrationFiles` → `sortBy` da chave). Consequência
`[I]`: os prefixes `2024_*` (módulos legados) rodam **antes** de `2026_06_01_*` (Core),
independentemente da ordem de `loadMigrationsFrom`. A ordem efetiva é global, não por
diretório. A tabela de §2.2 já está nessa ordem.

### 2.2 Sequência cronológica (ordem efetiva de execução)

| # | migration | unidade dona | operação | tabela(s) / objeto | depende de |
|---:|---|---|---|---|---|
| 1 | `2026_06_01_000001_create_v2_uuid_function.php` | CORE-DATA | criar função | v2_gen_uuid() | — |
| 2 | `2026_06_01_000002_create_users_table.php` | CORE-AUTH | criar | users | — |
| 3 | `2026_06_01_000003_create_sentinel_tables.php` | CORE-AUTH | criar | persistences; activations; reminders; throttle; role_users; roles | users |
| 4 | `2026_06_01_000004_add_permissions_v2_to_users_table.php` | CORE-AUTH | alterar | users | 2026_06_01_000002 |
| 5 | `2026_06_01_000005_create_v2_roles_and_add_role_id_to_users_table.php` | CORE-AUTH | criar + alterar | v2_roles; users.v2_role_id | 2026_06_01_000002 |
| 6 | `2026_08_18_000001_create_v2_conexao_tags_table.php` | CORE-DATA | criar + seed | v2_conexao_tags; v2_parceiro_tag_pivot; v2_unidade_regional_tag_pivot | v2_uuid(); v2_parceiros_institucionais; v2_unidade_regionais |
| 7 | `2026_08_18_000002_migrate_associado_tags_to_conexao_tags.php` | CORE-DATA | copiar dados | v2_associado_tags → v2_conexao_tags | 2026_08_18_000001; 2024_01_01_000016 |
| 8 | `2026_09_14_000001_add_unidade_regional_id_to_users_table.php` | CORE-AUTH | alterar | users | users; 2026_07_23_000001 |
| 9 | `2026_09_14_000002_seed_v2_regional_role.php` | CORE-AUTH | seed | v2_roles | 2026_06_01_000005 |
| 10 | `2024_01_01_000004_create_v2_associado_instituicoes_table.php` | MOD-CONEXOES-ASSOCIADOS | criar | v2_associado_instituicoes | — |
| 11 | `2024_01_01_000005_create_v2_associado_instituicao_gallery_table.php` | MOD-CONEXOES-ASSOCIADOS | criar | v2_associado_instituicao_gallery | 000004 (FK `instituicao_id`) |
| 12 | `2024_01_01_000011_add_gallery_media_id_to_associado_instituicao_gallery.php` | MOD-CONEXOES-ASSOCIADOS | alterar | v2_associado_instituicao_gallery | 2024_01_01_000005; v2_gallery_media (2026_06_28) |
| 13 | `2024_01_01_000012_add_type_and_regionais_fields_to_associado_instituicoes.php` | MOD-CONEXOES-ASSOCIADOS | no-op | — | — |
| 14 | `2024_01_01_000013_archive_v2_chapters_table.php` | MOD-CONEXOES-ASSOCIADOS | renomear | v2_chapters → `backup_*` | tabela legada fora do V2 [L] |
| 15 | `2024_01_01_000014_add_api_token_to_associado_instituicoes.php` | MOD-CONEXOES-ASSOCIADOS | no-op | — | — |
| 16 | `2024_01_01_000015_add_metadata_to_associado_instituicoes.php` | MOD-CONEXOES-ASSOCIADOS | alterar | v2_associado_instituicoes | 2024_01_01_000004 |
| 17 | `2024_01_01_000016_add_category_and_tags_to_associado_instituicoes.php` | MOD-CONEXOES-ASSOCIADOS | criar | v2_associado_tags; v2_associado_tag_pivot | 2024_01_01_000004 |
| 18 | `2024_01_01_000017_add_social_fields_to_associado_instituicoes.php` | MOD-CONEXOES-ASSOCIADOS | alterar | v2_associado_instituicoes | 2024_01_01_000004 |
| 19 | `2024_01_01_000018_add_cover_image_to_associado_instituicoes.php` | MOD-CONEXOES-ASSOCIADOS | alterar | v2_associado_instituicoes | 2024_01_01_000004 |
| 20 | `2024_01_01_000019_reset_tags_to_default_categories.php` | MOD-CONEXOES-ASSOCIADOS | seed | v2_associado_tags; v2_associado_tag_pivot | 2024_01_01_000016 |
| 21 | `2024_01_01_000020_drop_category_from_associado_instituicoes.php` | MOD-CONEXOES-ASSOCIADOS | alterar | v2_associado_instituicoes | 2024_01_01_000004 |
| 22 | `2024_01_01_000002_create_v2_parceiros_table.php` | MOD-CONEXOES-PARCEIROSINSTITUCIONAIS | criar | v2_parceiros_institucionais | — |
| 23 | `2024_01_01_000010_add_social_and_logo_fields_to_v2_parceiros_table.php` | MOD-CONEXOES-PARCEIROSINSTITUCIONAIS | alterar | v2_parceiros_institucionais | 2024_01_01_000002 |
| 24 | `2024_01_01_000020_add_address_fields_to_v2_parceiros_table.php` | MOD-CONEXOES-PARCEIROSINSTITUCIONAIS | alterar | v2_parceiros_institucionais | 2024_01_01_000002 |
| 25 | `2024_01_01_000030_add_metadata_to_v2_parceiros_table.php` | MOD-CONEXOES-PARCEIROSINSTITUCIONAIS | alterar | v2_parceiros_institucionais | 2024_01_01_000002 |
| 26 | `2024_01_01_000040_add_summary_to_v2_parceiros_table.php` | MOD-CONEXOES-PARCEIROSINSTITUCIONAIS | alterar | v2_parceiros_institucionais | 2024_01_01_000002 |
| 27 | `2026_07_31_000000_rename_v2_parceiros_to_v2_parceiros_institucionais.php` | MOD-CONEXOES-PARCEIROSINSTITUCIONAIS | renomear | v2_parceiros ↔ v2_parceiros_institucionais | 2024_01_01_000002 (condicional) |
| 28 | `2026_08_06_000000_cleanup_old_parceiros_table.php` | MOD-CONEXOES-PARCEIROSINSTITUCIONAIS | renomear/drop | v2_parceiros; v2_parceiros_institucionais | 2026_07_31_000000 |
| 29 | `2026_07_23_000001_create_v2_unidade_regionais_table.php` | MOD-CONEXOES-UNIDADEREGIONAL | criar | v2_unidade_regionais | — |
| 30 | `2026_07_23_000002_create_v2_unidade_regional_empresas_table.php` | MOD-CONEXOES-UNIDADEREGIONAL | criar | v2_unidade_regional_empresas | 2026_07_23_000001 |
| 31 | `2026_07_23_000003_create_v2_unidade_regional_media_table.php` | MOD-CONEXOES-UNIDADEREGIONAL | criar | v2_unidade_regional_media | 2026_07_23_000001; v2_gallery_media |
| 32 | `2026_07_30_000001_fix_gallery_media_id_type.php` | MOD-CONEXOES-UNIDADEREGIONAL | converter tipo | v2_unidade_regional_media | 2026_07_23_000003; v2_gallery_media |
| 33 | `2026_07_31_000001_add_soft_deletes_to_v2_unidade_regional_empresas_table.php` | MOD-CONEXOES-UNIDADEREGIONAL | alterar | v2_unidade_regional_empresas | 2026_07_23_000002 |
| 34 | `2025_01_01_000004_create_v2_membership_leads_table.php` | MOD-INSTITUCIONAL-ASSOCIESE | criar | v2_membership_leads | — |
| 35 | `2025_01_01_000005_create_v2_membership_plans_table.php` | MOD-INSTITUCIONAL-ASSOCIESE | criar | v2_membership_plans | — |
| 36 | `2025_07_20_000001_add_validity_to_v2_membership_plans.php` | MOD-INSTITUCIONAL-ASSOCIESE | alterar | v2_membership_plans | 2025_01_01_000005 |
| 37 | `2025_07_20_000002_create_v2_membership_plan_gallery_table.php` | MOD-INSTITUCIONAL-ASSOCIESE | criar | v2_membership_plan_gallery | 2025_01_01_000005 |
| 38 | `2024_01_01_000007_create_v2_mensagens_contato_table.php` | MOD-INSTITUCIONAL-FALECONOSCO | criar | v2_mensagens_contato | — |
| 39 | `2024_01_01_000008_create_v2_contato_configs_table.php` | MOD-INSTITUCIONAL-FALECONOSCO | criar | v2_contato_configs | — |
| 40 | `2026_07_20_000001_create_v2_historia_milestones_table.php` | MOD-INSTITUCIONAL-HISTORIA | criar | v2_historia_milestones | — |
| 41 | `2025_01_01_000001_create_v2_bienniums_table.php` | MOD-INSTITUCIONAL-SOBRENOS | criar | v2_bienniums | — |
| 42 | `2025_01_01_000002_create_v2_board_members_table.php` | MOD-INSTITUCIONAL-SOBRENOS | criar | v2_board_members | 2025_01_01_000001 (FK `biennium_id`) |
| 43 | `2026_07_20_000003_add_photo_id_to_v2_board_members_table.php` | MOD-INSTITUCIONAL-SOBRENOS | alterar | v2_board_members | 2025_01_01_000002; v2_gallery_media |
| 44 | `2026_07_20_000004_add_bio_and_slug_to_v2_board_members.php` | MOD-INSTITUCIONAL-SOBRENOS | alterar | v2_board_members | 2025_01_01_000002 |
| 45 | `2026_09_01_000001_normalize_sobre_nos_section_ids.php` | MOD-INSTITUCIONAL-SOBRENOS | normalizar dados | v2_layout_base_configs | 2026_07_03_000001 + models |
| 46 | `2026_06_29_092300_create_basic_pages_table.php` | MOD-LAYOUTS-BASICPAGE | criar + seed | v2_basic_pages | — |
| 47 | `2026_07_06_000200_create_basic_page_assets_table.php` | MOD-LAYOUTS-BASICPAGE | criar | v2_basic_page_assets | 2026_06_29_092300; v2_gallery_media |
| 48 | `2026_07_22_000001_create_v2_homepage_sections_table.php` | MOD-LAYOUTS-HOMEPAGE | criar | v2_homepage_sections | — |
| 49 | `2024_01_01_000006_create_v2_eventos_table.php` | MOD-PUBLICACOES-AGENDA | criar | v2_eventos | — |
| 50 | `2026_07_20_000002_add_image_id_to_v2_eventos_table.php` | MOD-PUBLICACOES-AGENDA | alterar | v2_eventos | 2024_01_01_000006; v2_gallery_media |
| 51 | `2026_07_08_000001_create_v2_news_table.php` | MOD-PUBLICACOES-NOTICIAS | criar (+trigger) | v2_news; função/trigger `v2_news_search_vector_update` | — |
| 52 | `2026_07_22_000001_create_v2_news_categories_table.php` | MOD-PUBLICACOES-NOTICIAS | criar + seed | v2_news_categories | v2_news; 2026_06_01_000002 (users) |
| 53 | `2026_07_22_000002_create_v2_news_tags_table.php` | MOD-PUBLICACOES-NOTICIAS | criar | v2_news_tags; v2_news_tag_pivot | v2_news |
| 54 | `2026_07_22_000003_add_new_fields_to_v2_news_table.php` | MOD-PUBLICACOES-NOTICIAS | alterar | v2_news | 2026_07_08_000001; 2026_07_22_000001 |
| 55 | `2026_07_22_000004_fix_pivot_uuid_types.php` | MOD-PUBLICACOES-NOTICIAS | converter tipo | v2_news_tag_pivot | 2026_07_22_000002 |
| 56 | `2026_07_22_000005_fix_tags_and_categories_uuid.php` | MOD-PUBLICACOES-NOTICIAS | converter tipo | v2_news_tags; v2_news_categories; v2_news | 2026_07_22_000001/2/3 |
| 57 | `2026_07_26_000001_create_v2_news_gallery_pivot_table.php` | MOD-PUBLICACOES-NOTICIAS | criar | v2_news_gallery_media | v2_news; v2_gallery_media |
| 58 | `2026_07_26_000002_remove_approval_workflow.php` | MOD-PUBLICACOES-NOTICIAS | renomear + drop colunas | v2_news_approvers; v2_news_configs; v2_news | v2_news |
| 59 | `2026_08_06_000001_add_unidade_regional_id_to_v2_news_table.php` | MOD-PUBLICACOES-NOTICIAS | alterar (FK) | v2_news → v2_unidade_regionais | v2_news; 2026_07_23_000001 |
| 60 | `2026_09_17_000001_create_v2_news_import_keys_table.php` | MOD-PUBLICACOES-NOTICIAS | criar | v2_news_import_keys | v2_news |
| 61 | `2025_01_01_000006_create_v2_job_openings_table.php` | MOD-PUBLICACOES-TRABALHECONOSCO | criar | v2_job_openings | — |
| 62 | `2025_01_01_000007_create_v2_job_applications_table.php` | MOD-PUBLICACOES-TRABALHECONOSCO | criar | v2_job_applications | 2025_01_01_000006 (FK `job_opening_id`) |
| 63 | `2026_08_11_000001_add_description_detailed_and_metadata_to_v2_job_openings.php` | MOD-PUBLICACOES-TRABALHECONOSCO | alterar | v2_job_openings | 2025_01_01_000006 |
| 64 | `2026_08_11_000002_add_cover_and_pdf_to_v2_job_openings.php` | MOD-PUBLICACOES-TRABALHECONOSCO | alterar | v2_job_openings | 2025_01_01_000006 |
| 65 | `2026_09_03_000001_disable_trabalhe_conosco_module_flag.php` | MOD-PUBLICACOES-TRABALHECONOSCO | alterar dados | v2_module_flags | 2026_06_30_000002 |
| 66 | `2026_09_17_000002_create_v2_internal_api_keys_table.php` | MOD-SUPPORT-NOTICIASIMPORT | criar | v2_internal_api_keys | — |
| 67 | `2026_09_18_000003_add_consumer_abilities_to_v2_internal_api_keys.php` | MOD-SUPPORT-NOTICIASIMPORT | alterar | v2_internal_api_keys | 2026_09_17_000002 |
| 68 | `2026_07_03_000000_create_v2_structural_portal_blocks_table.php` | MOD-SUPPORT-STRUCTURALLANDINGEDITOR | criar | v2_structural_portal_contents | 2026_06_01_000001 |
| 69 | `2026_07_03_000001_create_v2_layout_base_configs_table.php` | MOD-SUPPORT-STRUCTURALLANDINGEDITOR | criar | v2_layout_base_configs | — |
| 70 | `2026_07_06_000000_create_v2_sle_assets_table.php` | MOD-SUPPORT-STRUCTURALLANDINGEDITOR | criar | v2_sle_assets | 2026_06_01_000001 |
| 71 | `2026_06_30_000001_create_v2_system_mail_configs_table.php` | MOD-SUPPORT-SUPPORTCONFIGS | criar + seed | v2_system_mail_configs | — |
| 72 | `2026_06_30_000002_create_v2_module_flags_table.php` | MOD-SUPPORT-SUPPORTCONFIGS | criar + seed | v2_module_flags | — |
| 73 | `2026_06_30_000003_create_v2_system_controls_table.php` | MOD-SUPPORT-SUPPORTCONFIGS | criar + seed | v2_system_controls | — |
| 74 | `2026_06_30_000004_create_v2_cms_theme_configs_table.php` | MOD-SUPPORT-SUPPORTCONFIGS | criar + seed | v2_cms_theme_configs | — |
| 75 | `2026_06_30_000005_create_v2_portal_configs_table.php` | MOD-SUPPORT-SUPPORTCONFIGS | criar + seed | v2_portal_configs | — |
| 76 | `2026_07_02_000001_add_v2_foreign_keys.php` | MOD-SUPPORT-SUPPORTCONFIGS | alterar (FKs) | users; v2_digital_certificates; v2_signature_logs | 2026_06_01_000005; 2026_07_01_000001/2 |
| 77 | `2026_07_06_000001_encrypt_mail_config_passwords.php` | MOD-SUPPORT-SUPPORTCONFIGS | alterar dados | v2_system_mail_configs | 2026_06_30_000001 |
| 78 | `2026_06_14_100000_create_activity_log_table.php` | SVC-ACTIVITYLOGGER | criar | activity_log | — |
| 79 | `2026_07_01_000001_create_v2_digital_certificates_table.php` | SVC-DIGITALSIGNATURE | criar | v2_digital_certificates | users (FK em 2026_07_02) |
| 80 | `2026_07_01_000002_create_v2_signature_logs_table.php` | SVC-DIGITALSIGNATURE | criar | v2_signature_logs | 2026_07_01_000001 |
| 81 | `2026_07_20_000001_create_v2_feed_rss_items_table.php` | SVC-FEEDRSS | criar | v2_feed_rss_items | — |
| 82 | `2026_06_28_000000_create_v2_gallery_media_table.php` | SVC-GALLERY | criar | v2_gallery_media | — |
| 83 | `2026_06_30_000000_create_v2_mail_logs_table.php` | SVC-MAILSERVICE | criar | v2_mail_logs | — |
| 84 | `2026_06_29_093500_create_seo_tables.php` | SVC-SEO | criar | v2_seo_page_visits | — |
| 85 | `2026_07_02_140000_seed_seo_configuration_keys.php` | SVC-SEO | seed | v2_portal_configs | 2026_06_30_000005 |
| 86 | `2026_06_14_000000_create_search_indexes_tables.php` | SVC-SEARCH | criar | v2_cms_links_index; v2_public_search_index | 2026_06_01_000001 (`DEFAULT v2_gen_uuid()`) |
| 87 | `2026_07_24_000001_fix_search_overlay_input_name.php` | SVC-SEARCH | alterar dados | v2_structural_portal_contents | 2026_07_03_000000 |

### 2.3 Agrupamento por unidade

| Unidade | Qtd | Janela (prefixos) |
|---|---:|---|
| CORE-AUTH | 6 | 2026_06_01 … 2026_09_14 |
| CORE-DATA | 3 | 2026_06_01 … 2026_08_18 |
| MOD-CONEXOES-ASSOCIADOS | 12 | 2024_01_01 … 2024_01_01 |
| MOD-CONEXOES-PARCEIROSINSTITUCIONAIS | 7 | 2024_01_01 … 2026_08_06 |
| MOD-CONEXOES-UNIDADEREGIONAL | 5 | 2026_07_23 … 2026_07_31 |
| MOD-INSTITUCIONAL-ASSOCIESE | 4 | 2025_01_01 … 2025_07_20 |
| MOD-INSTITUCIONAL-FALECONOSCO | 2 | 2024_01_01 … 2024_01_01 |
| MOD-INSTITUCIONAL-HISTORIA | 1 | 2026_07_20 … 2026_07_20 |
| MOD-INSTITUCIONAL-SOBRENOS | 5 | 2025_01_01 … 2026_09_01 |
| MOD-LAYOUTS-BASICPAGE | 2 | 2026_06_29 … 2026_07_06 |
| MOD-LAYOUTS-HOMEPAGE | 1 | 2026_07_22 … 2026_07_22 |
| MOD-PUBLICACOES-AGENDA | 2 | 2024_01_01 … 2026_07_20 |
| MOD-PUBLICACOES-NOTICIAS | 10 | 2026_07_08 … 2026_09_17 |
| MOD-PUBLICACOES-TRABALHECONOSCO | 5 | 2025_01_01 … 2026_09_03 |
| MOD-SUPPORT-NOTICIASIMPORT | 2 | 2026_09_17 … 2026_09_18 |
| MOD-SUPPORT-STRUCTURALLANDINGEDITOR | 3 | 2026_07_03 … 2026_07_06 |
| MOD-SUPPORT-SUPPORTCONFIGS | 7 | 2026_06_30 … 2026_07_06 |
| SVC-ACTIVITYLOGGER | 1 | 2026_06_14 … 2026_06_14 |
| SVC-DIGITALSIGNATURE | 2 | 2026_07_01 … 2026_07_01 |
| SVC-FEEDRSS | 1 | 2026_07_20 … 2026_07_20 |
| SVC-GALLERY | 1 | 2026_06_28 … 2026_06_28 |
| SVC-MAILSERVICE | 1 | 2026_06_30 … 2026_06_30 |
| SVC-SEARCH | 2 | 2026_06_14 … 2026_07_24 |
| SVC-SEO | 2 | 2026_06_29 … 2026_07_02 |
| **Total** | **87** | |

Distribuição: 9 migrations são do Core (`CORE-AUTH` 6, `CORE-DATA` 3); 10 pertencem a
7 serviços (`SVC-*`); as 68 restantes pertencem a 17 módulos. `MOD-CONEXOES-ASSOCIADOS`
concentra o maior bloco (12), seguido de `MOD-PUBLICACOES-NOTICIAS` (10).

### 2.4 Dependências de ordem que importam

| Antes | Depois | Tipo | Se invertido |
|---|---|---|---|
| `2026_06_01_000002_create_users_table` | `000003`, `000004`, `000005`, `2026_07_02_000001`, `2026_09_14_000001` | tabela base / FK | `users` não existe; FK e alter falham |
| `2026_06_01_000005_create_v2_roles_and_add_role_id_to_users_table` | `2026_07_02_000001` (FK `users.v2_role_id`), `2026_09_14_000002` (seed) | tabela base / seed | FK para `v2_roles` falha; seed sem tabela |
| `2024_01_01_000004_create_v2_associado_instituicoes_table` | `000005`, `000015`–`000020` | tabela base | `ALTER TABLE` em tabela inexistente |
| `2024_01_01_000016_add_category_and_tags_to_associado_instituicoes` | `2024_01_01_000019`, `2026_08_18_000002` | tabela base / cópia | cópia de tags lê tabela inexistente |
| `2024_01_01_000002_create_v2_parceiros_table` | `000010`, `000020`, `000030`, `000040`, `2026_07_31_000000` | tabela base | rename condicional vira no-op; alters falham |
| `2025_01_01_000001_create_v2_bienniums_table` | `2025_01_01_000002` (FK `biennium_id`) | tabela base | FK sem alvo |
| `2025_01_01_000006_create_v2_job_openings_table` | `2025_01_01_000007` (FK `job_opening_id`), `2026_08_11_*` | tabela base | FK/colunas sem tabela |
| `2026_06_28_000000_create_v2_gallery_media_table` | `2026_07_06_000200`, `2026_07_20_000002/3`, `2026_07_23_000003`, `2026_07_26_000001`, `2026_07_30_000001` | tabela base (referência lógica) | `gallery_media_id` aponta para tabela ausente |
| `2026_06_30_000001_create_v2_system_mail_configs_table` | `2026_07_06_000001` (criptografia) | dados | update em tabela ausente |
| `2026_06_30_000002_create_v2_module_flags_table` | `2026_09_03_000001` (flag Trabalhe Conosco) | dados | insert em tabela ausente |
| `2026_06_30_000005_create_v2_portal_configs_table` | `2026_07_02_140000` (seed SEO) | dados | `updateOrInsert` em tabela ausente |
| `2026_07_01_000001/2` (`v2_digital_certificates`, `v2_signature_logs`) | `2026_07_02_000001` (FKs) | FK | FKs condicionais são puladas (não falham) — schema fica sem integridade |
| `2026_07_03_000000_create_v2_structural_portal_blocks_table` | `2026_07_24_000001` (fix de conteúdo) | dados | update em tabela ausente |
| `2026_07_03_000001_create_v2_layout_base_configs_table` | `2026_09_01_000001` (normalização) | dados + model | model sem tabela |
| `2026_07_08_000001_create_v2_news_table` | `2026_07_22_000001`–`000005`, `2026_07_26_*`, `2026_08_06_000001`, `2026_09_17_000001` | tabela base | todas as alters de notícias falham |
| `2026_07_22_000001_create_v2_news_categories_table` | `2026_07_22_000003` (`category_id`), `000005` (tipo uuid) | tabela base | coluna/FK órfã |
| `2026_07_22_000002_create_v2_news_tags_table` | `000004` (tipo do pivô) | tabela base | `ALTER TABLE v2_news_tag_pivot` falha |
| `2026_07_23_000001_create_v2_unidade_regionais_table` | `000002`, `000003`, `2026_08_06_000001` (FK de notícias), `2026_09_14_000001` (coluna em users) | tabela base | FK `v2_news.unidade_regional_id` falha (sem guarda) |
| `2026_07_23_000002_create_v2_unidade_regional_empresas_table` | `2026_07_31_000001` (soft delete) | tabela base | alter falha |
| `2026_08_18_000001_create_v2_conexao_tags_table` | `2026_08_18_000002` (cópia) | tabela base | insert falha |
| `2026_09_17_000002_create_v2_internal_api_keys_table` | `2026_09_18_000003` (consumer/abilities) | tabela base | alter falha |

**Regra de bolso para reimplementação:** a única FK não condicional entre módulos é
`v2_news.unidade_regional_id → v2_unidade_regionais.id`
(`V2/Modules/Publicacoes/Noticias/Migrations/2026_08_06_000001_add_unidade_regional_id_to_v2_news_table.php:11-17`);
todas as outras FKs entre tabelas de módulos são criadas na própria migration que cria a
tabela (ex.: `2025_01_01_000007:39`) ou ficam concentradas em
`2026_07_02_000001_add_v2_foreign_keys.php`, que é **condicional** a `Schema::hasTable`/
`Schema::hasColumn` (`:16-50`).

### 2.5 Trechos pivô

```php
// V2/Core/Providers/V2ServiceProvider.php:78-82 — Core entra antes de módulos e serviços;
// mas a ordem efetiva do migrator é o nome do arquivo, não a ordem de registro.
$coreMigrationPath = base_path('V2/Core/Migrations');
if (File::exists($coreMigrationPath)) {
    $this->loadMigrationsFrom($coreMigrationPath);
}
```

**O que mostra.** `loadMigrationsFrom` só adiciona um path à lista do migrator. Um módulo
novo não precisa de registro manual; precisa de diretório `Migrations/` e nome de arquivo
que respeite as dependências.

```php
// V2/Modules/Publicacoes/Noticias/Migrations/2026_08_06_000001_add_unidade_regional_id_to_v2_news_table.php:11-17 —
// a única FK entre módulos que NÃO é condicional: exige v2_unidade_regionais já criada.
Schema::table('v2_news', function (Blueprint $table) {
    $table->uuid('unidade_regional_id')->nullable()->after('category_id');
    $table->foreign('unidade_regional_id')
          ->references('id')
          ->on('v2_unidade_regionais')
          ->onDelete('set null');
    $table->index('unidade_regional_id', 'idx_v2_news_unidade_regional_id');
});
```

**O que mostra.** Por que `2026_07_23_000001` precisa vir antes. Note também que não há
`hasTable`/`hasColumn`: reexecutar em uma base onde a coluna já existe falha.

```php
// V2/Modules/Support/SupportConfigs/Migrations/2026_07_02_000001_add_v2_foreign_keys.php:16-23 —
// FK condicional: em base onde a tabela/coluna ainda não existe, o bloco é pulado em silêncio.
if (Schema::hasColumn('users', 'v2_role_id')) {
    Schema::table('users', function (Blueprint $table) {
        $table->foreign('v2_role_id')
              ->references('id')->on('v2_roles')
              ->onDelete('set null');
    });
}
```

**O que mostra.** O preço da tolerância: uma migration que "passa" em qualquer ordem pode
deixar o schema sem a FK. Numa reimplementação, prefira criar a FK na migration da coluna.

### 2.6 Operações de risco na sequência

| Migration | Risco | Por quê |
|---|---|---|
| `2026_07_22_000004_fix_pivot_uuid_types` | conversão de tipo com `USING news_id::uuid` | qualquer valor legado não-UUID aborta a transação |
| `2026_07_22_000005_fix_tags_and_categories_uuid` | idem para `v2_news_tags`, `v2_news_categories`, `v2_news.category_id` | mesma causa |
| `2026_07_30_000001_fix_gallery_media_id_type` | conversão de tipo em `v2_unidade_regional_media` | coluna pode conter IDs de outro formato |
| `2026_08_18_000002_migrate_associado_tags_to_conexao_tags` | cópia de dados em transação única | volume alto segura locks; `down()` não desfaz |
| `2026_09_01_000001_normalize_sobre_nos_section_ids` | usa model e service no `up()` | quebra se o model evoluir |
| `2026_07_06_000001_encrypt_mail_config_passwords` | criptografa senhas com a `APP_KEY` vigente | trocar a chave invalida os dados |
| `2026_07_26_000002_remove_approval_workflow` | renomeia tabelas de aprovação e derruba colunas | `v2_news_approvers`/`v2_news_configs` não são criadas por nenhuma migration do corpus |

## 3. Particularidades

1. **Timestamps legados dominam a ordem.** As 12 migrations de `MOD-CONEXOES-ASSOCIADOS` e
   boa parte dos parceiros usam `2024_01_01_*`; elas rodam antes de todo o Core de 2026.
   Um `migrate:fresh` cria tabelas de módulo antes de `users`, `v2_roles` e das funções
   `v2_gen_uuid()`/`v2_news_search_vector_update`. Isso só funciona porque não há FK para
   `users` nessas tabelas.
2. **Desempate alfabético dentro do mesmo timestamp.** `2026_07_20_000001_create_v2_feed_rss_items_table.php`
   roda antes de `..._historia_milestones_table.php` (f < h); `2026_07_22_000001_create_v2_homepage_sections_table.php`
   roda antes de `..._news_categories_table.php` (h < n). Renomear qualquer um desses
   arquivos muda a posição relativa dentro do dia.
3. **Duas migrations no-op.** `2024_01_01_000012` e `2024_01_01_000014` só registram
   `Log::info` ("campos ... movidos para v2_unidade_regionais"); permanecem para não
   quebrar o histórico (`:8-13` de cada arquivo).
4. **Migrations que usam `v2_uuid()` em runtime.** `2026_08_18_000001:50`,
   `2026_08_18_000002:23`, `2026_09_14_000002:39` e o seed de categorias
   (`2026_07_22_000001:44,54`). Dependem do `require_once` de
   `V2/Core/Helpers/helpers.php` no `register()` do provider
   (`V2/Core/Providers/V2ServiceProvider.php:347-351`).
5. **Migrations que usam `v2_gen_uuid()` como `DEFAULT`.** Só `2026_06_14_000000:29,44`,
   `2026_07_03_000000:19` e `2026_07_06_000000:19`; a função precisa existir antes
   (`2026_06_01_000001`, a primeira migration V2 de 2026).
6. **Seeds de configuração na migration.** `2026_06_30_000001`–`000005` inserem as chaves
   de e-mail, flags, controles, tema e portal; `2026_07_02_140000` insere as chaves de SEO
   em `v2_portal_configs`; `2026_09_03_000001` desativa a flag do Trabalhe Conosco
   (inserindo se não existir e atualizando `active=false`).
7. **Criptografia de dado sensível dentro de migration.**
   `2026_07_06_000001:19-31` itera `v2_system_mail_configs` e regrava `password` com
   `Crypt::encryptString`; o `down()` (`:50-60`) descriptografa. Depende da `APP_KEY`.
8. **Dança de rename de parceiros.** `2024_01_01_000002` já cria
   `v2_parceiros_institucionais` (`:30`), então `2026_07_31_000000` (rename `v2_parceiros`
   → `v2_parceiros_institucionais`) é no-op em base nova e efetivo só em base legada
   (`:20-33`). `2026_08_06_000000` então renomeia a antiga para `backup_*` e a dropa
   (`:36-43`), também condicional.
9. **Tabelas renomeadas que nunca foram criadas.** `v2_news_approvers` e `v2_news_configs`
   aparecem só no `remove_approval_workflow` (`:27-32`); em base nova o `foreach` não faz
   nada.
10. **Dois arquivos `..._000001` no mesmo dia em donos diferentes** (`2026_07_20`:
    FeedRSS e História; `2026_07_22`: Homepage e Notícias). A ordenação é por nome completo,
    não por unidade — não presuma que "Core primeiro" vale para o mesmo dia.
11. **79 de 87 migrations aplicam `lock_timeout='3s'`; 80 usam transação.** As exceções
    estão listadas em `05-persistencia-uuid-migracoes.md` §1. Entre elas, a criação de
    `v2_homepage_sections` e a FK de `v2_news` são DDL sem transação explícita (o PostgreSQL
    ainda as executa atomicamente por statement, mas não em bloco).
12. **O rollback é reverso por nome.** `migrate:rollback` desfaz na ordem inversa; como
    muitos `down()` renomeiam para `backup_*`, um rollback completo deixa dezenas de
    tabelas `backup_*` no schema e o `migrate` seguinte recria as originais.

## 4. Integrabilidade

### 4.1 Como adicionar uma migration (regra do corpus)

1. Escolha o timestamp `YYYY_MM_DD_HHMMSS` posterior à última migration da tabela que você
   altera. Para dependência entre módulos, o timestamp é o contrato — não há `after`.
2. Nome do arquivo = `snake_case` do nome da classe (o migrator resolve a classe pelo nome).
3. Não reutilize um timestamp já usado para outra migration do **mesmo** prefixo se a ordem
   relativa importar: o desempate é alfabético pelo nome completo.
4. Se a migration cria tabela usada por outra, a segunda deve referenciá-la por nome e
   assumir a ordem; se não puder garantir, use guarda `hasTable`.
5. Se a migration converte dados, escreva o `down()` correspondente ou declare no-op
   explícito — nunca deixe `down()` vazio sem comentário.

### 4.2 Anti-uso

- **Renomear migration publicada** para "organizar" a ordem: muda a posição global e o
  histórico (`migrations` guarda o nome); em base existente ela roda de novo ou não roda.
- **Criar migration de módulo com timestamp de 2024** para "rodar antes": ela passa a rodar
  antes de `users`/`v2_roles` e antes das funções SQL de 2026.
- **Adicionar FK sem guarda para tabela de outro módulo**: como a ordem é por nome, o
  resultado varia entre ambientes que tenham históricos diferentes.
- **Rodar `migrate --path=V2/Core/Migrations`**: a cópia de tags falha (`v2_associado_tags`
  não existe) e as `DEFAULT v2_gen_uuid()` dependem da função; o Core não é autossuficiente.
- **Assumir que `migrate:rollback` limpa o banco**: ele renomeia; o schema acumula backups.

### 4.3 Ordem de reconstrução recomendada

Para reimplementar sem herdar a bagunça de timestamps, crie nesta ordem lógica (equivalente
à ordem efetiva, mas explícita): 1) `v2_gen_uuid()`; 2) `users` + Sentinel + `v2_roles` +
`permissions_v2`; 3) tabelas de catálogo/serviço (`v2_gallery_media`, `activity_log`,
índices de busca); 4) configs (`v2_system_mail_configs`, `v2_module_flags`,
`v2_system_controls`, `v2_cms_theme_configs`, `v2_portal_configs`) + seed SEO; 5) tabelas de
módulo com suas FKs na própria migration; 6) `v2_unidade_regionais` e derivadas **antes** da
FK em `v2_news`; 7) `v2_conexao_tags` e pivôs **antes** da cópia de tags; 8) seed de papel
regional e flags por último.

## 5. Lacunas

- **LG-CORE-DATA-21** — Não há dump do banco de produção para confirmar quais migrations
  foram aplicadas fora de ordem ou reaplicadas manualmente; o inventário é estático.
  Onde confirmar: `SELECT migration, batch FROM migrations ORDER BY id;`.
- **LG-CORE-DATA-22** — `v2_chapters`, `v2_news_approvers` e `v2_news_configs` são
  referenciadas por migrations, mas nenhuma migration do V2 as cria; a origem é um schema
  legado anterior ao V2. Onde procurar: dump/schema do banco legado.
- **LG-CORE-DATA-23** — O conteúdo exato de `2026_09_01_000001` depende do
  `SobreNosSectionNormalizer` atual (Onda 5); o efeito nos dados não é verificável sem
  executar a migration, o que é proibido neste levantamento.
- **LG-CORE-DATA-24** — `2026_07_06_000001_encrypt_mail_config_passwords` depende da
  `APP_KEY`; não há registro de rotação de chave. Onde procurar: `.env` de produção e
  histórico de deploy.

## 6. Checklist de paridade

- [ ] `PC-CORE-DATA-21` — `php artisan migrate` em base vazia cria 87 registros em
  `migrations` e termina sem erro. Fonte: `V2/Core/Providers/V2ServiceProvider.php:78-82,114-118,178-182`.
- [ ] `PC-CORE-DATA-22` — Após `migrate`, existem as 8 FKs declaradas (`users.v2_role_id`,
  `v2_digital_certificates.user_id`, `v2_signature_logs.certificate_id`, `v2_signature_logs.user_id`,
  `v2_associado_instituicao_gallery.instituicao_id`, `v2_board_members.biennium_id`,
  `v2_job_applications.job_opening_id`, `v2_news.unidade_regional_id`).
- [ ] `PC-CORE-DATA-23` — `migrate:fresh --seed` não cria nenhuma tabela `backup_*`.
  Fonte: `2026_07_31_000000:20-33`; `2026_08_06_000000:36-43`.

## 7. Evidências consultadas

- Os 87 arquivos listados em §2.2 (leitura integral dos `up()`/`down()` e das linhas de
  `Schema::*`, `DB::table`, `DB::statement`).
- `V2/Core/Providers/V2ServiceProvider.php` (78–82, 114–118, 178–182, 342–351).
- `sucesu_analise/00_inventario/manifest.json` (`totals.migrations`, `units`).
- `V2/Core/Migrations/2026_06_01_000001_create_v2_uuid_function.php` (19–36).
- `V2/Modules/Publicacoes/Noticias/Migrations/2026_08_06_000001_add_unidade_regional_id_to_v2_news_table.php` (11–17).
- `V2/Modules/Support/SupportConfigs/Migrations/2026_07_02_000001_add_v2_foreign_keys.php` (16–50).

