# INT-016-01 — RenovaOmniController e presenter

| Campo | Valor |
|---|---|
| **status** | feita |
| **spec** | [`docs/specs/integracao/016-renova-omni.md`](../specs/integracao/016-renova-omni.md) §§2–3, §5 |
| **depende de** | [INT-015-02](INT-015-02-programa-elas-front-reads-cms.md) (feita) |
| **primo** | Agentes/notícias do `014`; mini banners do `015`; bullets do `011` |

## Objetivo

`GET /renova-omni` devolve o DTO da landing (página + heading dos Blocos + mídia da Home + 3 do Blog). O React ainda pode ignorar nesta task.

## Fazer

1. `RenovaOmniController` invokable no lugar da closure. Nome de rota igual.
2. `RenovaOmniPresenter::make()` — hero com bullets; `oQueEh`; **sem** App/Serviços/faixa.
3. Testes em `tests/Feature/Integracao/`.

## Testes (PHPUnit)

- Seeder: eyebrow; titleLines; 3 bullets com ícone; 3 mini banners; 6 vantagens; 4 passos; FAQ; WhatsApp.
- Página + Blocos + Home: eyebrow dos agentes; composição.
- Página + Blog: 3 artigos com `href` `/blog/…`.
- `renova-omni/x.webp` no hero → `/storage/renova-omni/x.webp`.
- Sem seed: `GET /renova-omni` 200, coleções vazias.
- Sem keys `app`, `servicos`, `cta`.

## Fora

Ligar as seções React (task 02). Filament. Cluster Financiamento. Elas.
