# Secretarias — Gaps e Dívidas

> Bugs, funcionalidades mortas, riscos de dados e o comparativo **v5 → v6**.
> Todos os bugs abaixo foram verificados por leitura de código e/ou execução no
> container `v6_6f22e1bd-app-1` e consulta ao banco `prefeituras_v5`.

---

## 1. Mapa v5 → v6

### 1.1 Tabela-resumo

| Item | v5 | v6 | Situação |
|---|---|---|---|
| Rota da secretaria no portal | `Route::any('secretarias/{slug}', …)->name('a-prefeitura-secretarias.index')` (`v5/routes/web.php:71`) | **Removida**. Sobrou `Route::any('secretarias/{slug}', …)->name('a-instituicao.index')` (`v6/routes/web.php:80`) | ❌ **regressão** — `PortalController@contentList` ainda usa o nome antigo |
| Nome da rota do portal | `a-prefeitura.index` e `a-prefeitura-secretarias.index` (nomes distintos) | `a-instituicao.index` **duas vezes** (`v6/routes/web.php:79` e `:80`) | ❌ **regressão** — o Laravel resolve para a última |
| View do portal da secretaria | `portal.layouts.$modelo.secretarias.show` (uma por modelo: `modelo1..modelo6`) | `portal.components.secretarias.show` (view única) | ✅ refatoração; as views por modelo foram apagadas |
| Variável da view | `secretary_menus` | `menus` | ✅ ajuste de contrato da view |
| View `default` | `v5/resources/views/portal/layouts/default/pages/contents/secretarias/show.blade.php` | idem, presente | ⚠ **órfã** — o layout `default` não tem `home/index.blade.php`, logo é inalcançável |
| Migration do `slug` na view `secretarias` | `v5/database/migrations/2026_03_09_000000_update_views_to_include_slug.php` (bloco "Update secretarias view", linhas 56-68) | `v6/database/migrations/2024_11_29_085508_update_view_secretarias.php` (view isolada) | ⚠ **divergência**: a v5 tem data **posterior** (2026-03-09) à da v6 (2024-11-29) e empacota várias views |
| `resources` do módulo | `v5/database/migrations/2023_03_31_083904_add_resource_to_secretarias.php` insere `secretarias-categorias` e `secretarias-paginas` | **Migration ausente na v6** | ❌ **regressão de schema** — rebuild do zero perde 2 permissões |
| Tabela `modulos` | inexistente | `v6/database/migrations/2024_11_01_150206_create_modulos_table.php` insere `secretarias` com `status = 0` | ⚠ módulo nasce **desligado** |
| Select "Secretaria" no formulário de notícias | sempre visível | visível apenas se `modulos['secretarias']` for true | ❌ **regressão funcional** (o módulo nasce desligado) |
| Deduplicação de departamento (`name` + `secretarias_id`) | presente no `CategorySecretaryRepository` v5 | **removida** | ⚡ mudança deliberada (ou regressão) — nomes duplicados passam a ser aceitos |
| Deduplicação de página (`title` + `categoria_id`) | presente no `PagesSecretaryRepository` v5 | **removida** | ⚡ idem |
| `upInsert` dos repositórios | sobrescrito, **sem transação** | herdado de `App\Repositories\Repository`, **com transação** | ✅ melhoria |
| Controller `ContentController@genericGenerate` | passa `['types_sizes' => …]` para secretarias? | `v6/app/Http/Controllers/Prefecture/ContentController.php:168` passa | [NÃO VERIFICADO] na v5 — a comparação do bloco `noticias` não foi feita linha a linha |
| Rotas do CMS | `v5/routes/basepro.php:371-379` | `v6/routes/basepro.php:365-373` | ✅ idênticas (só mudou o offset) |
| `Content::secretarias()` | `hasMany(Content,'secretaria','slug')` | idem (`v6/app/Http/Model/Prefecture/Content.php:72-75`) | ✅ idêntico |
| `PaginasSecretaria::categoria()` | `hasOne(...) . 'teste'` | idem | ⚠ bug **preservado** entre as versões |
| `MenuSecretaryController` | idêntico | idêntico | ✅ |
| Requests (`SecretariasCategoriasRequest`, `SecretariasPaginasRequest`) | idênticos | idênticos | ✅ (inclusive a mensagem trocada) |
| Models (`CategoriasSecretaria`, `PaginasSecretaria`) | idênticos | idênticos | ✅ |
| `Portal\SecretariaController` | idêntico | idêntico | ✅ |
| API `/api/v1/secretarias` | presente (`v5/routes/api.php:18`) | presente (`v6/routes/api.php:18-20`) | ✅ mesma URL; o bug do `whereRaw` é o mesmo nos dois (não re-verificado na v5) |

### 1.2 Detalhe: o que a v5 tinha e a v6 perdeu

```php
// v5/app/Repositories/Eloquent/Prefecture/CategorySecretary/CategorySecretaryRepository.php
protected function structureUpInsert($request, $id = null): array
{
    $fields = array_keys($request);
    $data = $this -> filter_request($request, $fields);

    if(isset($data['name']) && isset($data['secretarias_id'])){
        $query = $this->model->where('name', $data['name'])->where('secretarias_id', $data['secretarias_id']);
    }

    if($id){
        $query->where('id', '!=', $id);
    }

    if($query->exists()){
        $maxId = $this->model->max('id') + 1;
        $data['name'] = $data['name'] . ' ' . $maxId;
    }

    return $data;
}
```

Versão v6 (`v6/app/Repositories/Eloquent/Prefecture/CategorySecretary/CategorySecretaryRepository.php`):

```php
protected function structureUpInsert($request): array
{
    $fields = array_keys($request);
    return $this->filter_request($request, $fields);
}
```

O mesmo vale para `PagesSecretaryRepository` (a v5 deduplicava `title` + `categoria_id`).

⚠ A lógica da v5 tinha o próprio bug: se `name` **ou** `secretarias_id` não viessem
preenchidos, `$query` ficaria indefinido e `$query->where(...)` geraria erro fatal.
Portanto, **não se deve restaurar a deduplicação como estava** — o correto é um
índice único composto (`secretaria_id`, `name`).

### 1.3 Detalhe: a migration de `resources` ausente na v6

```php
// v5/database/migrations/2023_03_31_083904_add_resource_to_secretarias.php
DB::table('resources')->insert([
    'slug' => 'secretarias-categorias',
    'name' => 'Departamentos das Secretarias',
    'description' => 'Formulários do Departamento das Secretarias',
    'created_at' => date("Y-m-d H:i:s")
]);

DB::table('resources')->insert([
    'slug' => 'secretarias-paginas',
    'name' => 'Páginas internas de Secretarias',
    'description' => 'Formulários das Páginas Internas de Secretarias',
    'created_at' => date("Y-m-d H:i:s")
]);
```

O banco atual **tem** as 3 entradas (`resources` ids 15/16/17 com `modulo_id = 18`) —
herança do banco seedado na v5. Quem recriar o schema só com as migrations da v6
ficará **sem** `secretarias-categorias` e `secretarias-paginas` em `resources`, e o
`check.route.permission` **negará** o acesso a `/cms/conteudo/secretarias/secretarias-categorias`
e `.../secretarias-paginas` para qualquer papel, inclusive `administrador`.

## 2. Bugs conhecidos

### B1 — Rota inexistente `a-instituicao-secretarias.index` (erro 500)

| | |
|---|---|
| Arquivo | `v6/app/Http/Controllers/Portal/PortalController.php:332` |
| Sintoma | `GET /portal/secretarias/{slug}` → `InvalidArgumentException: Route [a-instituicao-secretarias.index] not defined` → **HTTP 500** |
| Agravante | O `catch (\Throwable $th) {}` no fim de `contentList()` engole a exceção → resposta **vazia com HTTP 200** em alguns caminhos, mascarando o erro |
| Existe na v5? | Não — na v5 a rota existia como `a-prefeitura-secretarias.index` (`v5/routes/web.php:71`) |
| Correção v7 | Nome único `a-instituicao-secretarias.index` **ou** `secretarias.show` + redirect do legado |

### B2 — Nome de rota duplicado `a-instituicao.index`

| | |
|---|---|
| Arquivo | `v6/routes/web.php:79-80` |
| Sintoma | `route('a-instituicao.index', $slug)` resolve para `/a-instituicao/secretarias/{slug}` (última definição wins) |
| Impactos | (a) breadcrumb de "A Instituição" (`v6/routes/breadcrumbs.php:205`) aponta para a URL errada; (b) breadcrumb de "Secretarias" (`:212`) idem; (c) qualquer view que use `route('a-instituicao.index', …)` para a instituição quebra |
| Verificação | `php artisan route:list` mostra `a-instituicao/{slug}` e `a-instituicao/secretarias/{slug}` **ambos** com o nome `a-instituicao.index` |
| Existe na v5? | Não — na v5 os nomes eram `a-prefeitura.index` e `a-prefeitura-secretarias.index` |

### B3 — `whereRaw()` descartado na API (filtros nunca aplicados)

| | |
|---|---|
| Arquivo | `v6/app/Http/Controllers/Swagger/V1/Portal/SecretariaController.php:88-95` |
| Código | `$contents->whereRaw(...)` **sem** `$contents =` |
| Sintoma | `GET /api/v1/secretarias?titulo=saude` ignora o filtro e devolve **todas** as secretarias |
| Por quê | `whereRaw()` devolve um **novo** builder; o original fica intacto. O `->get()` seguinte usa a query sem filtro |
| Gravidade | Média — a API documenta `titulo`/`descricao` na anotação OpenAPI, mas não os aplica |

### B4 — `PaginasSecretaria::categoria()` concatena `'teste'`

| | |
|---|---|
| Arquivo | `v6/app/Http/Model/Prefecture/PaginasSecretaria.php:26-29` |
| Código | `return $this->hasOne(CategoriasSecretaria::class, 'id', 'categoria_id') . 'teste';` |
| Sintoma | A relação devolve a **string** `"1teste"`; qualquer acesso a `$page->categoria->name` quebra ("Trying to get property of non-object") |
| Mitigação existente | Nenhuma: a relação correta (`CategoriasSecretaria::contentsCategory()`) é usada em toda parte, então o bug está **latente** |
| Existe na v5? | Sim — idêntico |

### B5 — Mensagens trocadas no `SecretariasPaginasRequest`

| | |
|---|---|
| Arquivo | `v6/app/Http/Requests/SecretariasPaginasRequest.php:35-39` |
| Código | `return ['name.required' => 'O nome da departamento é obrigatório.'];` |
| Sintoma | A regra é `title.required`, não `name.required` → a mensagem **nunca** é exibida. O operador vê a mensagem padrão do Laravel ("The title field is required.") em português do validador genérico |
| Observação | A string também tem erro de português ("a departamento") |

### B6 — Módulo desabilitado impede o vínculo notícia ↔ secretaria

Cadeia causal completa (ver `05-REGRAS-E-PORTABILIDADE.md` §2):

```
modulos.status = false (id 18, slug 'secretarias')
   → MenuServiceProvider: entrada "Secretarias" ausente do menu do CMS
   → ModulosServiceProvider: select "Secretaria" ausente do form de notícias
   → contents.secretaria = 100% NULL (verificado: 0 linhas)
   → bloco "Notícias de {secretaria}" vazio no portal
   → menus das secretarias inacessíveis pelo menu (só por URL)
```

Agravantes:

- `Cache::rememberForever('modulos')` — ligar o módulo exige `php artisan cache:clear`.
- A rota `/cms/conteudo/secretarias/menus/{id}` responde 200 a quem digitar a URL com
  permissão válida, apesar de o módulo estar "desligado".

### B7 — Tabelas de submenus vazias

`categorias_secretarias` = **0 linhas** e `paginas_secretarias` = **0 linhas**.
Consequências:

- O menu lateral do portal **nunca** aparece em nenhuma das 13 secretarias.
- A coluna `order` de `categorias_secretarias` nunca foi exercitada.
- O diretório `storage/app/public/content/secretarias_paginas` **não existe** no repositório.
- A functionality "Arquivos para Download" nunca foi exercitada em produção.
- A 13ª secretaria (Controladoria Geral, `contents.id = 25`) **não tem** item em `menu_items`.

### B8 — Sem paginação em nenhuma listagem

| Local | Código | Problema |
|---|---|---|
| Grade de secretarias | `DatatableController@get_secretarias` (:198-202) | `DB::table('secretarias')->get()` — **view inteira** no PHP; o Yajra fatia em memória |
| Grade de departamentos | `@get_secretaria_categorias` (:185-189) | idem |
| Grade de páginas | `@get_secretaria_paginas` (:191-195) | idem + traz `ps."text"` (corpo HTML) sem uso |
| Drop-down de secretarias | `CategorySecretaryController::__construct` (:20), `MenuSecretaryController::__construct` (:17) | `DB::table('secretarias')->get(['id','titulo as name'])` — a view inteira para um `<select>` |
| Notícias da secretaria (portal) | `Content::secretarias()` sem `limit` + `->splice(0,12)` em Blade | todas as notícias carregadas, corte em memória |
| Departamentos no formulário de página | `CategoriasSecretaria::all()` | todos os departamentos de todas as secretarias |

### B9 — Duplicação de anexos ao editar uma página

`PagesSecretaryController::update()` chama `insertArchive()` sem remover os
anexos anteriores (ao contrário de `insertImage()`, que apaga o destaque previo).
Cada edição com anexos duplica os arquivos no banco **e** no disco.

### B10 — `Repository::upInsert` vaza a exceção (`dd($th)`)

`v6/app/Repositories/Repository.php:53-66`: qualquer erro (FK violada, coluna
inexistente como `autor`) executa `dd($th)` → **stack trace completo na resposta
HTML** e `exit`. O `catch` do controller (`CategorySecretaryController@store`,
`PagesSecretaryController@store`) nunca é alcançado.

### B11 — `PaginasSecretaria::$fillable` cita colunas inexistentes

`fillable = ['title','text','autor','categoria_id','archives_id']`, mas a tabela
`paginas_secretarias` tem apenas `id, title, text, categoria_id, order, deleted_at,
created_at, updated_at`. Enviar `autor` ou `archives_id` provoca erro de coluna
inexistente → B10.

### B12 — `orderCategory()` não valida a titularidade dos `ids`

`MenuSecretaryController@orderCategory` reescreve `order` para **qualquer** id
recebido, sem filtrar por `secretarias_id`. Um usuário autenticado com acesso ao
módulo pode reordenar (e reescrever o `order`) de departamentos de **outras**
secretarias. Não há transação: uma falha no meio deixa a ordenação parcial.

### B13 — `orderCategory()` devolve string em vez de JSON

Retorna `'true'`/`'false'` (texto). Não há distinction entre sucesso e erro no
status HTTP; o `catch (\Throwable)` engole falhas de escrita.

### B14 — Inconsistência da view `secretarias`

```sql
CREATE OR REPLACE VIEW secretarias
AS SELECT row_number() OVER (ORDER BY c.created_at ASC) AS value,
    c.title as titulo,
    c.id as id,
    c.galery AS galeria,
    c.slug as slug
FROM contents c
JOIN category_contents cc ON cc.id = c.category_contents_id
WHERE c.deleted_at IS null and cc.slug  = 'secretarias'
ORDER by c.created_at desc;
```

O `row_number()` é calculado em ordem **crescente** e a view é exibida em ordem
**decrescente**. A coluna "ID" da grade do CMS mostra `1, 2, 3…` na ordem
invertida à lista. A mesma inconsistência existe em `secretarias_categorias` e
`secretarias_paginas`.

### B15 — `Portal\SecretariaController@show_pages_secretary` sem validações

- `PaginasSecretaria::find($id)` sem `firstOrFail()` → id inexistente gera **erro 500**
  na view (`$content->title` sobre `null`).
- Não verifica se a página pertence à secretaria do `{slug}` → uma página da
  secretaria A é exibida dentro do contexto da secretaria B.

### B16 — Inconsistência entre o `order` do banco e o exibido

`$menus->sortBy('order')` ordena **em memória** (Coleção do Laravel), não no SQL.
Com muitos departamentos o custo é desnecessário; o correto é `->orderBy('position')`
na query.

### B17 — `secretaria` (Sigla) capturado e nunca exibido

`contents.acronym` é preenchido pelo formulário (`maxlength 120`) e **não aparece**
em nenhuma listagem do CMS nem no portal. Dado capturado sem uso.

### B18 — `Cidade`/institutional: nome `a-instituicao.index` duplicado afeta o breadcrumb

Ver B2.

## 3. Funcionalidades incompletas ou mortas

| Item | Situação |
|---|---|
| `v6/resources/views/portal/layouts/default/pages/contents/secretarias/show.blade.php` | **Órfã** — o layout `default` não tem `home/index.blade.php`; `getTemplateActived()` aborta 404 |
| `v6/resources/views/portal/components/secretarias/video-youtube.blade.php` | Não é referenciada pela view da secretaria (que usa `@include('portal.statics.video')`) — verificar antes de remover |
| `paginas_secretarias.order` | Coluna criada e nunca usada |
| `contents.acronym` | Capturada e nunca exibida |
| `categories_secretarias.contentsCategory` × `PaginasSecretaria::categoria()` | A relação `categoria()` está quebrada (B4) e é inútil — só a inversa é usada |
| `secretarias_paginas.texto` (coluna da view) | Carregada do banco em toda grade e nunca exibida |
| `MenuSecretaryController@returnSecretarias` | Não tem nome de rota — sem nome, sem documentação, sem link por `route()` |
| `POST /cms/order_categorias/secretarias` | Sem nome de rota e devolve string |
| `DELETE /cms/secretarias_paginas/arquivo/{id}` | Sem nome de rota |
| Telas `/cms/conteudo/secretarias/secretarias-categorias/create` e `.../secretarias-paginas/create` | Grid do CMS aponta para elas, mas o fluxo "natural" é pela tela de menu |
| Galeria da secretaria | Exige `contents.galery = 1`; a galeria usa `archiveGallery` (`byHighLight = null`) — funcional, mas pouco usado (nenhuma secretaria tem `galery` ligado no banco atual) |

## 4. Ausência de `pub-nav` para o módulo

O componente `v6/resources/views/portal/components/publicacoes/…/pub-nav.blade.php`
(navegação lateral por subcategoria) existe **apenas** por área:

| Área | Modelos com `pub-nav` |
|---|---|
| Publicações | `default/pages/elements`, `modelo3`, `modelo4`, `modelo5`, `modelo6` |
| Atas e Pontos | `modelo1`..`modelo6` |
| Comitê de Investimentos | `modelo1`..`modelo6` |
| Requerimentos | `modelo3`, `modelo4` |

**Não existe `pub-nav` para `secretarias`** (nem para `a-instituicao`, `a-cidade` e
`legislacao`). O menu das secretarias é **inline**, dentro de
`v6/resources/views/portal/components/secretarias/show.blade.php` e
`v6/resources/views/portal/components/secretarias/paginas/index.blade.php`.

Consequência para a v7: o menu de departamentos **não pode** ser reaproveitado de
`publicacoes`/`atas-e-pontos`; deve ser um componente próprio
(`<x-portal.secretaria-menu>`), compartilhado entre a página da secretaria e a
página institucional.

## 5. Riscos de dados (migração de schema)

| Risco | Detalhe | Mitigação |
|---|---|---|
| Vínculo notícia↔secretaria por slug | `contents.secretaria` é texto; se o slug da secretaria mudar, o vínculo se perde silenciosamente | Migrar para `secretaria_id` (FK) com backfill por slug e relatório de órfãos |
| `archives.reference_id` é `text` sem FK | Impede índice e integridade | Migrar para `morphs()`/`archivable_type`+`archivable_id` |
| Colisão de slugs | O legado desempata com `-<maxid+1>`; o banco não tem unicidade | Índice unique em `slug` + migração dos duplicados com mapa de redirect |
| Tabelas de submenus vazias | A migração não tem dados para validar | Criar massa de teste: 2 secretarias × 2 departamentos × 2 páginas |
| `modulos.status = false` | Recriação do módulo nasce inacessível | Migrar `status = true` e invalidar o cache |
| `resources` sem as 2 permissões do módulo | Rebuild do zero nega o acesso | Recriar as entradas `secretarias-categorias` e `secretarias-paginas` |
| FK de `categorias_secretarias.secretarias_id` | Sem `ON DELETE CASCADE` → exclusão de secretaria falha | Definir `cascadeOnDelete()` ou exclusão manual em cascata |
| Soft delete inconsistente | `contents.deleted_at` × `archives.deleted_at` × `categorias_secretarias.deleted_at` | Padronizar `SoftDeletes` + `withTrashed` explícito onde necessário |
| `row_number()` inconsistente nas views | Numeração exibida ≠ ordem | Eliminar as views SQL na v7 |
| Ordem gravada como `order` | Palavra reservada em SQL | Renomear para `position` |
| `calendar_events.secretarias_id` e `servidor.secretaria` | Apontam para `contents.id` da secretaria | Atualizar para o id novo durante a migração |
| `service_letters.secretaria_id` e `ombudsman_subjects.secretary_id` | Também referenciam `contents.id` | Idem |

## 6. Perguntas em aberto para o negócio

1. **O módulo deve ser ligado?** Hoje `modulos.status = false`, o que apaga o menu do
   CMS e o select "Secretaria" do formulário de notícias. A prefeitura usa o vínculo
   notícia↔secretaria em produção? Se sim, há conteúdo fora do CMS (ou a feature está
   inativa há anos)?
2. **Quantas secretarias devem existir?** Há 13 (incluindo "Controladoria Geral"), mas
   só 12 têm item de menu. A Controladoria deve entrar?
3. **A Sigla (`acronym`) deve aparecer no portal?** Hoje é capturada e nunca exibida.
4. **As páginas de departamento devem ter submenu próprio** (a coluna
   `paginas_secretarias.order` sugere que sim) ou a ordem do menu é só por
   departamento?
5. **A listagem de notícias deve paginar?** Hoje corta em 12 sem paginação; com
   muchas notícias por secretaria, as mais antigas ficam inacessíveis.
6. **Departamentos e páginas devem ter URL própria?** Hoje a URL é
   `/a-instituicao/secretarias/paginas/{slug}/{id}` (por id, não por slug) — o que é
   frágil para SEO e para links permanentes.
7. **O menu das secretarias deveria ser editável fora da tela "Menus"?** Hoje só o
   operador com `secretaria-menus.index` (permissão que não existe em `resources`)
   chega lá pelo CMS.
8. **A exclusão de uma secretaria deve apagar seus departamentos, páginas e anexos?**
   Hoje a FK impede a exclusão.

## 7. Checklist de correção (ordenado por impacto)

| Prioridade | Item | Arquivo |
|---|---|---|
| P0 | B1 — corrigir a rota `a-instituicao-secretarias.index` | `v6/app/Http/Controllers/Portal/PortalController.php:332` |
| P0 | B2 — nome de rota único para `/a-instituicao/{slug}` e `/a-instituicao/secretarias/{slug}` | `v6/routes/web.php:79-80` |
| P0 | B6 — ligar `modulos.status` e limpar o cache `modulos` | `modulos` (id 18) |
| P1 | B3 — reatribuir o `whereRaw` na API | `v6/app/Http/Controllers/Swagger/V1/Portal/SecretariaController.php:88-95` |
| P1 | B10 — substituir `dd($th)` por log + resposta de erro | `v6/app/Repositories/Repository.php:53-66` |
| P1 | B8 — paginação real nas grades (Yajra com `->paginate()` no SQL) | `v6/app/Http/Controllers/Prefecture/DatatableController.php:185-202` |
| P1 | B8 — `limit(12)` no SQL da listagem de notícias | `v6/app/Http/Controllers/Portal/PrefectureController.php:53-54` |
| P2 | B4 — corrigir `PaginasSecretaria::categoria()` | `v6/app/Http/Model/Prefecture/PaginasSecretaria.php:26-29` |
| P2 | B5 — corrigir a chave da mensagem | `v6/app/Http/Requests/SecretariasPaginasRequest.php:35-39` |
| P2 | B15 — `firstOrFail()` + validação de pertencimento | `v6/app/Http/Controllers/Portal/SecretariaController.php:22-33` |
| P2 | B12/B13 — validar `ids` + transação + resposta JSON | `v6/app/Http/Controllers/Prefecture/MenuSecretaryController.php:38-49` |
| P2 | B9 — limpar anexos anteriores ao editar | `v6/app/Http/Controllers/Prefecture/PagesSecretaryController.php:96-113` |
| P3 | B11 — alinhar `$fillable` com o schema | `v6/app/Http/Model/Prefecture/PaginasSecretaria.php:14-21` |
| P3 | B14 — corrigir `row_number()` das views | `v6/database/migrations/2024_11_29_085508_update_view_secretarias.php` |
| P3 | B16 — ordenar em SQL | `v6/app/Http/Controllers/Portal/PrefectureController.php:60` |
| P3 | Criar as `resources` do módulo ausentes na v6 | migration nova (espelhar `v5/database/migrations/2023_03_31_083904_add_resource_to_secretarias.php`) |
| P3 | B17 — exibir a sigla ou remover o campo | `v6/resources/views/prefecture/contents/secretarias/form.blade.php` |
