# Fila de Espera SUS — Gaps, Dívidas e Regressão v5 -> v6

> Versão analisada: `v5` (módulo existente) x `v6` (módulo **ausente**).

## 1. Bugs e erros conhecidos

| ID | Severidade | Descrição | Arquivo | Estado na v5 |
|---|---|---|---|---|
| B1 | Alta | Slug não é recalculado com os valores novos no `update`; a URL pública fica desatualizada. | `v5/app/Http/Controllers/Prefecture/FilaEsperaSusController.php` | Reproduzível |
| B2 | Alta | `indexShow` monta `where('slug')->orWhere('id')->where('is_show', true)`; a precedência do SQL permite acessar por slug um registro com `is_show = false`. | `v5/app/Http/Controllers/Portal/FilaEsperaSusController.php` | Reproduzível |
| B3 | Média | Exclusão em lote envia `toDelete` (JS) e lê `ids` (controller): nada é excluído, mas a interface informa sucesso. | `v5/public/assets/js/custom/utilities/deleteAll.js` + controller do CMS | Reproduzível |
| B4 | Média | PDF exportado sem título e sem data (`compact()` com variável inexistente). | `v5/app/Http/Controllers/Portal/FilaEsperaSusController.php` + `v5/resources/views/exports/fila-espera-sus.blade.php` | Reproduzível |
| B5 | Alta | Extensão do anexo copiada do nome enviado pelo navegador; um PDF pode ser gravado com extensão `.php` dentro do webroot. | `v5/app/Http/Controllers/Prefecture/FilaEsperaSusController.php` | Reproduzível |
| B6 | Alta | Anexos do portal servidos diretamente de `public/`, sem autenticação, expiração ou registro de acesso. | views do portal + controller do CMS | Estrutural |
| B7 | Alta | O cartão SUS completo é pesquisável pelo filtro público `busca` e é gravado em texto claro no `activity_log`. | `v5/app/Http/Filter/FilterFilaEsperaSus.php` + model | Estrutural |
| B8 | Média | O CMS não permite despublicar um registro (`is_show` é forçado a `true` em todo `store`/`update`). | controller do CMS | Estrutural |
| B9 | Média | Layout `default` do portal não possui o módulo; trocar `configurations.layout` derruba a rota. | `v5/app/Http/Controllers/Admin/Controller.php` + views do portal | Estrutural |
| B10 | Baixa | Exportação carrega todos os registros filtrados em memória, sem paginação. | `v5/app/Http/Controllers/Portal/FilaEsperaSusController.php` | Estrutural |
| B11 | Baixa | `getSusCardMaskedAttribute()` (acessor `sus_card_masked`) é código morto. | `v5/app/Http/Model/Prefecture/FilaEsperaSus.php` | Estrutural |
| B12 | Baixa | `use FileTrait;` no controller sem uso de nenhum método do trait. | controller do CMS | Estrutural |
| B13 | Baixa | Rotas `fila-espera-sus.destroyAll` e `fila-espera-sus.destroy-arquivo` exigem permissões inexistentes no catálogo; ficam restritas a `super-admin`. | `v5/app/Http/Middleware/CheckRoutePermission.php` | Estrutural |
| B14 | Baixa | `Content-Type: plain/txt` na exportação TXT (MIME inválido). | controller do portal | Estrutural |
| B15 | Baixa | Views do portal duplicadas em 6 layouts, com divergência de Bootstrap 4 (modelo1 a modelo4) e Bootstrap 5 (modelo5 e modelo6). | `v5/resources/views/portal/layouts/` | Estrutural |

## 2. Funcionalidades incompletas ou mortas

| Item | Situação |
|---|---|
| Tabela `fila_espera_sus` | Vazia no banco `prefeituras_v5` (`SELECT count(*) = 0`). O módulo foi criado (migration, resource, menu, rotas, views) e nunca operou. |
| Menu público | Não há item de menu nem `links` apontando para `/fila-espera-sus` no banco v5 — a página é acessível apenas por URL direta. |
| Acessador `sus_card_masked` | Morto (nenhuma view ou controller o usa). |
| `FileTrait` no controller | Importado e não utilizado. |
| Despublicação | Não existe no CMS, embora a coluna `is_show` exista no schema. |
| Permissões do módulo | O resource `fila-espera-sus` (id 17) existe, mas não há permissão correspondente registrada nem vínculo com papéis. |
| Testes | Nenhum caso de teste para o módulo em `v5/tests/`. |
| API (Swagger) | Nenhum endpoint de dados abertos para o módulo na v5. |
| Régua de "cliques" | `menuClicks('fila-espera-sus')` conta acessos ao CMS, mas o item de menu do CMS só aparece para quem tem permissão de menu — o contador fica em `0`. |

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

| Risco | Detalhe |
|---|---|
| `file_path` como `text` com JSON | Migrar para coluna `json` exige parse do texto; há formatos legados aceitos (string simples e array de objetos). |
| `sus_card` como `varchar(191)` com máscara aplicada na aplicação | Migrar exige política de mascaramento em repouso; caso contrário o dado sensível continua em texto claro. |
| Sem FK, sem integridade referencial | `specialty`, `priority_criteria` e `queue_status` são textos livres: normalizar exige deduplicar (`DISTINCT` já usado nos selects do portal). |
| Soft delete sem política de expurgo | Registros excluídos permanecem indefinidamente, com dados de saúde. |
| `activity_log` com `properties` contendo `sus_card` | Auditoria viciada: exige sanitização do histórico ao migrar. |
| Sem índices de filtro | `specialty`, `priority_criteria`, `is_show` e `update_date` são varridos em sequência nos dois portais (CMS e público). |

## 4. O que existe na v5 e foi removido na v6

| Camada | Artefato na v5 | Situação na v6 |
|---|---|---|
| Banco | tabela `fila_espera_sus` | **Ausente** (verificado em `information_schema.tables` do banco da v6: 0 linhas). |
| Banco | `resources.id = 17`, slug `fila-espera-sus` | **Ausente** (0 linhas com esse slug). |
| Banco | `menu_orders.id = 37`, slug `fila-espera-sus` | **Ausente** na v6. |
| Banco | `modulos` (organização por módulo) | Não existe na v5; existe na v6 (`v6/database/migrations/2024_11_01_150206_create_modulos_table.php`) — mas **sem** registro para a Fila de Espera SUS. |
| Banco | `resources.modulo_id` | Não existe na v5; existe na v6 (`v6/database/migrations/2024_11_05_104026_add_modulo_id_to_resources_table.php`). |
| Migration | `v5/database/migrations/2026_05_28_200000_create_fila_espera_sus_table.php` | Sem equivalente na v6. |
| Controller CMS | `v5/app/Http/Controllers/Prefecture/FilaEsperaSusController.php` | **Ausente** na v6. |
| Controller Portal | `v5/app/Http/Controllers/Portal/FilaEsperaSusController.php` | **Ausente** na v6. |
| Model | `v5/app/Http/Model/Prefecture/FilaEsperaSus.php` | **Ausente** na v6. |
| Form Request | `v5/app/Http/Requests/FilaEsperaSusRequest.php` | **Ausente** na v6. |
| Filtro | `v5/app/Http/Filter/FilterFilaEsperaSus.php` | **Ausente** na v6. |
| Exportação | `v5/app/Exports/FilaEsperaSusExport.php` | **Ausente** na v6. |
| View de exportação | `v5/resources/views/exports/fila-espera-sus.blade.php` | **Ausente** na v6. |
| Views CMS | `v5/resources/views/prefecture/fila-espera-sus/` (4 arquivos) | **Ausentes** na v6. |
| Views portal | `v5/resources/views/portal/layouts/modelo1` a `modelo6` com `fila-espera-sus/` (18 arquivos) e `v5/resources/views/portal/components/fila-espera-sus/table.blade.php` | **Ausentes** na v6. |
| JS | `v5/public/assets/js/custom/contents/fila-espera-sus/datatables.js` | **Ausente** na v6. |
| Rotas CMS | `v5/routes/basepro.php:399-406` (8 rotas) e `v5/routes/basepro.php:452` (DataTable) | **Ausentes** na v6. |
| Rotas portal | `v5/routes/web.php:128-129` | **Ausentes** na v6. |
| Breadcrumbs | `v5/routes/breadcrumbs.php:225-234` | **Ausentes** na v6. |
| Menu do CMS | `v5/app/Providers/MenuServiceProvider.php:380-382` | **Ausente** na v6. |
| DataTable | `v5/app/Http/Controllers/Prefecture/DatatableController.php:106-119` (`get_fila_espera_sus`) | **Ausente** na v6. |

## 5. Regressão v5 -> v6

**O módulo Fila de Espera SUS foi removido por completo da v6.** Não se
trata de uma migração com perda parcial: nenhuma camada sobreviveu.

### 5.1 Funcionalidade perdida

1. **Portal público:** a página `/fila-espera-sus` (listagem com filtros por
   especialidade, critério de priorização e busca livre; paginação de 15;
   detalhe por slug) e a página de detalhe com os anexos para download
   simplesmente **não existem** na v6. O cidadão perde o acesso à relação
   de espera por procedimento.
2. **Exportações públicas:** XLSX, CSV, PDF e TXT da fila de espera
   desapareceram junto com a classe `FilaEsperaSusExport` e a view
   `exports/fila-espera-sus`.
3. **CMS:** cadastro, edição, listagem em DataTable, exclusão individual,
   exclusão em lote, upload de anexos em PDF e remoção de anexo por
   registro — tudo removido.
4. **Auditoria e métricas:** o `log_name = 'fila-espera-sus'` no
   `activity_log` e o item em `menu_orders` (contador de cliques) não
   existem na v6.

### 5.2 Rotas perdidas

| Ambiente | Rotas perdidas na v6 |
|---|---|
| CMS | `fila-espera-sus.index`, `fila-espera-sus.create`, `fila-espera-sus.edit`, `fila-espera-sus.update`, `fila-espera-sus.store`, `fila-espera-sus.destroy`, `fila-espera-sus.destroyAll`, `fila-espera-sus.destroy-arquivo` e `datatable.fila-espera-sus`. |
| Portal | `portal.fila-espera-sus.index` e `portal.fila-espera-sus.show`. |
| Navegação | Breadcrumbs `fila-espera-sus` e `fila-espera-sus-show`. |

Links externos para `https://<prefeitura>/fila-espera-sus` e
`/fila-espera-sus/{slug}` passam a responder 404 na v6.

### 5.3 Permissões perdidas

- O resource `fila-espera-sus` (id 17 na `resources` da v5) **não tem
  equivalente** na v6: nenhuma linha com esse slug existe na `resources` da
  v6. Consequentemente, os papéis que já tinham `fila-espera-sus.index`,
  `.create`, `.edit` e `.delete` perdem essas permissões, e o item de menu
  correspondente também deixa de ser concedido.
- A v6 reorganizou o bloco de permissões em torno da tabela `modulos` e da
  coluna `resources.modulo_id`; a Fila de Espera SUS **não foi recriada
  dentro desse novo modelo** — é necessário criar o `modulos` (módulo de
  saúde/fila de espera) e o `resources` correspondente com `modulo_id`.

### 5.4 Dados perdidos

- A tabela `fila_espera_sus` não é criada na v6. No banco `prefeituras_v5`
  da v6 a consulta em `information_schema.tables` para nomes contendo
  "fila" retorna **0 linhas**.
- Mesmo que houvesse dados, não há migration de dados na v6: a v6 não
  carrega nenhuma linha da fila de espera.

### 5.5 Consequências práticas

| Consequência | Impacto |
|---|---|
| Links e indexadores | Quebra de links públicos e de eventual SEO já consolidado. |
| Obrigação de transparência | A listagem de espera é informação de saúde de interesse público; mantê-la é decisão do município, mas a remoção técnica precisa ser **registrada e comunicada**. |
| Base para a v7 | O dossiê deste módulo é a **única fonte de especificação** disponível, já que o código da v6 não existe. |
| Reimplementação | A v7 deve reimplementar do zero, **corrigindo** B1 a B15 e adotando o plano de `06-MIGRACAO-MODERNA.md`. |

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

1. A Fila de Espera SUS deve voltar na v7? Quem é o público autorizado a
   ver o **cartão SUS completo** (atendimento presencial) e quem vê apenas
   a fila agregada por especialidade?
2. A publicação deve ser por registro (como hoje) ou **agregada** por
   especialidade/procedimento, sem identificador individual?
3. Os anexos (PDFs) são publicáveis no portal? Se sim, com qual base legal
   e com controle de acesso (download autenticado)?
4. "Prioridade", "status da fila" e "especialidade" devem virar catálogos
   fechados (enums/tabelas) ou permanecem texto livre?
5. Qual a fonte da verdade da fila de espera: o CMS ou um sistema externo
   (prontuário/RH/SIGSS)? Hoje o cadastro é manual.
6. Deve existir integração com o portal de dados abertos (Swagger) da v6?
7. Os contadores de cliques (`menu_orders`) devem ser mantidos após a
   recriação do módulo?
8. Qual o prazo de expurgo dos registros com soft delete e dos anexos
   associados a eles?

## 7. Ordem de reconstrução sugerida

1. Migration da tabela + índices + colunas normalizadas.
2. Model com casts, `sus_card_masked` (única implementação) e slug
   recalculado no `saving`.
3. Policy + registro em `modulos`/`resources` +Seed de permissões.
4. Form Requests e Service de upload em disco privado.
5. Endpoints do CMS (listagem, CRUD, anexos, exclusão em lote com `ids`).
6. Portal público (listagem, filtros, detalhe) com view única reutilizada
   por todos os layouts + fallback para o layout `default`.
7. Exportações (XLSX/CSV/PDF/TXT) com cabeçalho sempre presente.
8. API JSON com recurso e política de acesso.
9. Testes das 16 features e 6 units listados em `07-TESTES.md`.
