# Suporte — Resumo Executivo

> **Versão analisada:** `v6` (e `v5`, idêntico neste módulo)
> **Slug do módulo:** `suporte` (tabela `modulos`, id 9, `status = true`)
> **Natureza:** CMS (painel administrativo)
> **Estado:** idêntico v5 -> v6 (apenas o **nome** da rota mudou)

---

## 1. Objetivo

O item "Suporte" do CMS **não** é um sistema de chamados: é a **página de
contato com a empresa fornecedora do sistema**. O operador clica em
"Suporte" (menu de engrenagem) e vê os dados do fornecedor **ativo**:
site, e-mail, telefone, WhatsApp, endereço e um mapa (Google Maps
embutido).

Em paralelo existe um **sistema de tickets** completo e não usado
(`Prefecture\SupportController` + views `prefecture/support/**`): ele grava
um registro em `supports` com protocolo, envia e-mails para o suporte e
para o usuário e lista os tickets. Esse código está **órfão** — não há
nenhuma rota que o alcance.

## 2. Efeito / Impacto

| Faixa | Efeito |
|---|---|
| Cidadão | Nenhum efeito direto. |
| Prefeitura (CMS) | Dá ao operador o canal de contato com o fornecedor do sistema (empresa que fez o portal). |
| Transparência e legalidade | Não se aplica. |
| Operação técnica | O módulo depende do módulo `fornecedores`: sem um fornecedor ativo, a página fica **vazia**. |

## 3. Comportamento

- A rota `GET /cms/suporte` (`informacoes-instituicao`) exige sessão
  (middleware `check.logged`).
- A view `admin.layouts.about` busca
  `Supplier::where('fornecedor_ativo', true)->first()` e, se houver,
  desenha o cartão do fornecedor; caso contrário, **não renderiza nada**
  (a página fica em branco, sem mensagem).
- O mapa é um `<iframe>` com o `locale` (URL de embed do Google Maps) do
  fornecedor.
- O **sistema de tickets** (órfão):
  - `SupportController@index` lista todos os tickets (`Support::all()`);
  - `@create` mostra o formulário (categoria, assunto, descrição);
  - `@enviarEmail` valida (`assunto` required|max:255, `descricao`
    required|min:5), gera o **protocolo**, grava o ticket e envia **dois**
    e-mails (ao suporte e ao usuário);
  - o **protocolo** é `strtoupper(substr(str_slug($categoria->name), 0, 2))
    . (Support::max('id') + 1) . date('Y')` — ex.: `DU25A2026`.

## 4. Como o Usuário Interage

- Menu de engrenagem do AdminLTE -> item **"Suporte"**
  (`v6/resources/views/vendor/adminlte/page.blade.php:302-309`) -> link
  para `route('informacoes-instituicao')`.
- A página mostra: logo do fornecedor (`storage/{image}`), nome, site
  ("Suporte"), e-mail, telefone, WhatsApp, endereço e o mapa.
- **Não existe** link para o sistema de tickets em lugar nenhum da UI.

## 5. Detalhes e Particularidades Técnicas

- A página viva é `Admin\MainController@about`
  (`v6/app/Http/Controllers/Admin/MainController.php:28-31`), que renderiza
  `admin.layouts.about`.
- A view injeta o model por `@inject('dadosFornecedor', 'App\Http\Model\Prefecture\Supplier')`.
- O módulo tem **duas implementações** com o mesmo nome:
  1. a **página de contato do fornecedor** (ativa, 1 rota, 1 view);
  2. o **sistema de tickets** (órfão: 1 controller, 6 views, 2 tabelas,
     1 seeder).
- O sistema de tickets **não é alcançável**: nenhuma rota `suporte.*`
  existe em `v6/routes/`. As views chamam `route('suporte.index')`,
  `route('suporte.create')` e `route('suporte.show')` — que lançariam
  `RouteNotFoundException` se fossem renderizadas. A view de criação
  chama `route('email')`, que também não existe.
- O módulo `suporte` **não tem recurso** na tabela `resources` e **não
  tem** item em `menu_orders`.

## 6. Estrutura de Dados

| Tabela | Papel |
|---|---|
| `supports` | Tickets do sistema de tickets (órfão) |
| `supports_categories` | Categorias: Dúvida, Erro, Sugestão, Elogío |
| `suppliers` | Fornecedores (módulo `fornecedores`) — é de onde sai o dado da página viva |
| `configurations` | `email`, `email_suporte`, `titulo_site` (usados pelo sistema de tickets) |

Views SQL: nenhuma.

## 7. Como Testar

- Autenticado em `/cms/suporte` deve renderizar o cartão do fornecedor
  ativo; sem fornecedor ativo, a página fica vazia.
- Sem sessão, deve redirecionar (middleware `check.logged`).
- O sistema de tickets **não tem** como ser testado por rota: é preciso
  registro de rota em teste ou chamada direta ao controller.

## 8. Migração para Laravel Moderno

- **Decidir o que o módulo é**: página de contato do fornecedor (manter,
  e talvez renomear para "Fornecedor" e fundir com o módulo
  `fornecedores`) ou sistema de tickets (reativar, com Policies,
  FormRequest e API).
- Se mantido como página de contato: um único controller que recebe o
  `Supplier` ativo por injeção, com `?supplier=` opcional.
- Se reativado como tickets: tabelas `support_tickets` e
  `support_categories`, `SupportTicketPolicy`, `StoreSupportTicketRequest`,
  `Notification` para os e-mails (em vez de `Mail::send` imperativo),
  fila para o envio.

## 9. Resumo Geral

O módulo "Suporte" do CMS é, na prática, a **página de contato do
fornecedor do sistema**: `GET /cms/suporte` (nome `informacoes-instituicao`,
renomeado de `informacoes-prefeitura` na v6) renderiza
`admin.layouts.about`, que busca o `Supplier` com `fornecedor_ativo = true`
e mostra site, e-mail, telefone, WhatsApp, endereço e mapa. O módulo é
inteiramente dependente do módulo `fornecedores` e, sem fornecedor ativo,
a página fica em branco. Paralelamente existe um **sistema de tickets
completo e não utilizado** — `Prefecture\SupportController`, models
`Support`/`SupportCategory`, tabelas `supports`/`supports_categories`,
seeder de categorias e seis views em `prefecture/support/` — que grava
tickets com protocolo e envia e-mails, mas que **nenhuma rota alcança**:
as views referenciam `route('suporte.index')`, `route('suporte.create')`,
`route('suporte.show')` e `route('email')`, todos inexistentes. A v7
precisa decidir entre manter apenas a página de contato (e fundir com
`fornecedores`) ou reativar o sistema de tickets com autorização,
validação e notificações.

---

## Índice do dossiê

| Arquivo | Conteúdo |
|---|---|
| `00-RESUMO.md` | Este documento |
| `01-ARQUITETURA.md` | Camadas, classes e o diagrama de fluxo |
| `02-MODELAGEM.md` | Estrutura de dados detalhada |
| `03-ROTAS-E-CONTROLADORES.md` | Rotas, controllers, requests, resources |
| `04-VIEWS-E-UX.md` | Telas, componentes, JS, assets |
| `05-REGRAS-E-PORTABILIDADE.md` | Particularidades e armadilhas |
| `06-MIGRACAO-MODERNA.md` | Plano de reconstrução em Laravel moderno |
| `07-TESTES.md` | Estratégia e casos de teste |
| `08-GAPS-E-DIVIDAS.md` | Pendências, riscos, comparativo v5 vs v6 |
