# Inventário Completo — Diário Oficial

> _Atualizado para o **v6** (`update_diario_v5_to_v6`) em 2026-09-11. Alterações desta versão: `DIARIO_OFICIAL_ALTERACOES.md` e `plan/2026-09-11-diario-upgrade-backlog.md`._

Documento canônico do módulo. Lista **todos** os arquivos que participam da execução
do Diário Oficial (cadastro, certificado, geração/conversão de PDF, anexos, preview,
visualização final e portal público), com caminho real verificado no repositório.

**Legenda de status**

| Status | Significado |
|--------|-------------|
| ✅ verificado | Existe e é usado pelo fluxo |
| ⚠️ legado | Existe, mas com ressalvas (duplicado, caminho divergente, sem uso efetivo) |
| 🧟 órfão | Não referenciado por nenhum código/view ativo |
| ❌ ausente | Referenciado pelo código, mas **não existe no disco** |

---

## 1. Backend

### 1.1 Models (6)

| # | Arquivo | Classe | Tabela | Status |
|:-:|---------|--------|--------|:------:|
| 1 | `app/Http/Model/Prefecture/Diario.php` | `Diario` | `diarios` | ✅ |
| 2 | `app/Http/Model/Prefecture/DiarioArea.php` | `DiarioArea` | `diario_areas` | ✅ |
| 3 | `app/Http/Model/Prefecture/DiarioSubArea.php` | `DiarioSubArea` | `diario_sub_areas` | ✅ |
| 4 | `app/Http/Model/Prefecture/DiarioHasAreas.php` | `DiarioHasAreas` | `diario_has_areas` | ✅ |
| 5 | `app/Http/Model/Prefecture/DiarioConfig.php` | `DiarioConfig` | `diario_configs` | ✅ |
| 6 | `app/Http/Model/Prefecture/DiarioCerticado.php` | `DiarioCertificado` | `diario_certificados` | ⚠️ (nome do arquivo com typo) |

> No v6 **não existem** a tabela `diario_adendos` nem as requests de adendo.

### 1.2 Controllers (6)

| # | Arquivo | Escopo |
|:-:|---------|--------|
| 1 | `app/Http/Controllers/Prefecture/DiarioController.php` | CRUD, configurações, PDF, áreas, sort, status |
| 2 | `app/Http/Controllers/Prefecture/DiarioAreaController.php` | CRUD de Áreas **e** Matérias (`diario_has_areas`) |
| 3 | `app/Http/Controllers/Prefecture/DiarioSubAreaController.php` | CRUD de Subáreas |
| 4 | `app/Http/Controllers/Prefecture/DiarioCertificadosController.php` | CRUD de Certificados (upload `.pfx`) |
| 5 | `app/Http/Controllers/Prefecture/DatatableController.php` | `get_diario_oficial`, `get_areas_diario`, `get_sub_areas_diario` |
| 6 | `app/Http/Controllers/Portal/DiarioController.php` | Listagem, viewer, busca, filtro |

### 1.3 Repositories (5)

| # | Arquivo |
|:-:|---------|
| 1 | `app/Repositories/Eloquent/Prefecture/DiarioOficial/DiarioOficialRepository.php` |
| 2 | `app/Repositories/Eloquent/Prefecture/DiarioOficial/Area/AreaRepository.php` |
| 3 | `app/Repositories/Eloquent/Prefecture/DiarioOficial/DiarioArea/DiarioAreaRepository.php` |
| 4 | `app/Repositories/Eloquent/Prefecture/DiarioOficial/DiarioSubArea/DiarioSubAreaRepository.php` |
| 5 | `app/Repositories/Eloquent/Prefecture/DiarioConfig/DiarioConfigRepository.php` |

> `DiarioOficialRepository` **não possui binding** no container — é instanciado com `new`
> em `DiarioController` e `Portal\DiarioController` (via `app()`).

### 1.4 Contracts (3)

- `app/Repositories/Contracts/IDiarioAreaRepository.php`
- `app/Repositories/Contracts/IDiarioSubAreaRepository.php`
- `app/Repositories/Contracts/IDiarioConfigRepository.php`

### 1.5 Services (3)

| # | Arquivo | Responsabilidade |
|:-:|---------|------------------|
| 1 | `app/Services/FPdfService.php` | Serviço monolítico (herda `setasign\Fpdi\Tcpdf\Fpdi`): Header/Footer, capítulos, capa, assinatura e montagem de anexos |
| 2 | `app/Services/Pdf/PdfConverter.php` | PDF externo → JPEG (Imagick + Ghostscript) + contagem de páginas |
| 3 | `app/Services/Pdf/ImageProcessor.php` | Dimensionamento/embutir de `<img>` (mm), independente da resolução |

> `LayoutManager.php`, `HeaderRenderer.php` e `CoverHandler.php` **não existem no v6**.
> Detalhes em `20-SERVICOS_PDF.md`.

### 1.6 Requests (6)

- `app/Http/Requests/DiarioOficialRequest.php`
- `app/Http/Requests/DiarioAreasRequest.php`
- `app/Http/Requests/CertificadoRequest.php`
- `app/Http/Requests/DiarioOficial/SortRequest.php`
- `app/Http/Requests/DiarioOficial/SaveConfigRequest.php`
- `app/Http/Requests/DiarioOficial/SaveAreaRequest.php`

### 1.7 Resources / API Transformers (3)

- `app/Http/Resources/DiarioOficial/GetDiarioResource.php`
- `app/Http/Resources/DiarioOficial/ListAreasAndSubareasResource.php`
- `app/Http/Resources/DiarioOficial/ListAreaContentResource.php`

### 1.8 Component / Presenter (1 cada)

| Tipo | Arquivo |
|------|---------|
| Component | `app/Http/Components/Prefecture/Contents/Preview/DiarioOficialComponent.php` |
| Presenter | `app/Http/Presenters/DiarioPresenter.php` |

> Não há Enum no v6 (o `DiarioHasAreasTypesEnum` citado em docs antigos **não existe**).

### 1.9 Rules e Traits relacionados

| Arquivo | Papel |
|---------|-------|
| `app/Rules/ConditionalRequiredSlug.php` | Reserva o slug `diario-oficial` |
| `app/Rules/SelectRule.php` | Validação de select (usada em `id_certificado`) |
| `app/Repositories/Repository.php` | Base: `upInsert`, `destroy`, `destroyAll`, `dataTrait` |
| `app/Http/Traits/AppTrait.php` | `filter_request`, `isTrue`, `traitRequest` |
| `app/Http/Traits/FileTrait.php` | `compress` (capas/header/imagens do Summernote) |

### 1.10 Jobs / Commands

**Nenhum.** `app/Jobs` está vazio e não há comando `diario:*` em `app/Console/Commands`
(`DiarioGeneratePdf` citado em docs antigos **não existe**).

---

## 2. Views (29)

### 2.1 CMS — Diário Oficial (21)

| # | Arquivo | Status |
|:-:|---------|:------:|
| 1 | `resources/views/prefecture/contents/diario-oficial/index.blade.php` | ✅ |
| 2 | `resources/views/prefecture/contents/diario-oficial/create.blade.php` | ✅ |
| 3 | `resources/views/prefecture/contents/diario-oficial/form.blade.php` | ✅ |
| 4 | `resources/views/prefecture/contents/diario-oficial/loading.blade.php` | ✅ |
| 5 | `.../diario-oficial/components/image.blade.php` | ✅ |
| 6 | `.../diario-oficial/components/pdf-file-upload.blade.php` | ✅ |
| 7 | `.../diario-oficial/components/cover-image.blade.php` | ✅ (**nova no v6**) |
| 8 | `.../diario-oficial/configuracoes/create.blade.php` | ✅ |
| 9 | `.../diario-oficial/configuracoes/form.blade.php` | ✅ |
| 10 | `.../diario-oficial/diario-areas/index.blade.php` | ✅ |
| 11 | `.../diario-oficial/diario-areas/create.blade.php` | ✅ |
| 12 | `.../diario-oficial/diario-areas/form.blade.php` | ⚠️ (carrega asset inexistente) |
| 13 | `.../diario-oficial/diario-subareas/index.blade.php` | ✅ |
| 14 | `.../diario-oficial/diario-subareas/create.blade.php` | ✅ |
| 15 | `.../diario-oficial/diario-subareas/form.blade.php` | ⚠️ (carrega asset inexistente) |
| 16 | `.../diario-oficial/modal/areas/index.blade.php` | ✅ |
| 17 | `.../diario-oficial/modal/areas/modal.blade.php` | ✅ |
| 18 | `.../diario-oficial/pdf/index.blade.php` | ⚠️ legado (template HTML/PDF antigo) |
| 19 | `.../diario-oficial/pdf/summernote.blade.php` | ⚠️ **não é Summernote** (bundle CSS de 7371 linhas) |
| 20 | `.../diario-oficial/pdf/style.blade.php` | ⚠️ CSS com seletores inválidos |
| 21 | `.../components/preview/diario-oficial/index.blade.php` | ✅ (shell do modal de preview) |

#### Órfãos de preview

| Arquivo | Status |
|---------|:------:|
| `.../components/preview/diario-oficial/summernote.blade.php` | 🧟 duplicata do bundle CSS |
| `.../components/preview/diario-oficial/style.blade.php` | 🧟 duplicata do style |

### 2.2 CMS — Certificado (3)

| # | Arquivo | Status |
|:-:|---------|:------:|
| 22 | `resources/views/prefecture/contents/certificado/index.blade.php` | ✅ |
| 23 | `resources/views/prefecture/contents/certificado/create.blade.php` | ✅ |
| 24 | `resources/views/prefecture/contents/certificado/form.blade.php` | ⚠️ asset inexistente |

### 2.3 Portal (3)

| # | Arquivo | Status |
|:-:|---------|:------:|
| 25 | `resources/views/portal/layouts/diario-oficial/index.blade.php` | ✅ |
| 26 | `resources/views/portal/layouts/diario-oficial/show-pdf.blade.php` | ✅ (viewer final personalizado) |
| 27 | `resources/views/portal/layouts/diario-oficial/auditoria.blade.php` | ✅ (auditoria pública LGPD) |

> Total efetivo = **29** (21 CMS + 3 certificado + 3 portal + 2 órfãos de preview).

---

## 3. Frontend JS / CSS (12 JS + 1 CSS)

| # | Arquivo | Carregado em | Status |
|:-:|---------|--------------|:------:|
| 1 | `public/assets/js/custom/contents/diario-oficial/index.js` | `diario-oficial/index` | ✅ |
| 2 | `public/assets/js/custom/contents/diario-oficial/datatable.js` | `diario-oficial/index` | ✅ |
| 3 | `public/assets/js/custom/contents/diario-oficial/generation-status.js` | `diario-oficial/index` | ✅ (polling recursivo) |
| 4 | `public/assets/js/custom/contents/diario-oficial/config.js` | `configuracoes/create` | ✅ |
| 5 | `public/assets/js/custom/contents/diario-oficial/areas.js` | `modal/areas/index` | ✅ |
| 6 | `public/assets/js/custom/contents/diario-oficial/cover-image.js` | `diario-oficial/form` | ✅ (**novo no v6**) |
| 7 | `public/assets/js/custom/contents/diario-oficial/diario_portal.js` | `portal/.../index` | ✅ |
| 8 | `public/assets/js/custom/contents/diario-oficial/areas-diario/index.js` | `diario-areas/create` | ⚠️ |
| 9 | `public/assets/js/custom/contents/areas-do-diario/datatable.js` | `diario-areas/index` | ✅ |
| 10 | `public/assets/js/custom/contents/sub-areas-diario/datatable.js` | `diario-subareas/index` | ✅ |
| 11 | `public/assets/js/custom/portal/diario-oficial/viewer.js` | `portal/.../show-pdf` | ✅ |
| 12 | `public/assets/js/custom/utilities/helpers/preview-diario.js` | — | 🧟 órfão (não incluído em `create.blade.php`) |
| 13 | `public/assets/css/portal/diario-oficial-viewer.css` | `portal/.../show-pdf` | ✅ |

> O fork `summernote-diario.js` citado em docs antigos **foi removido** no v6.

### Utilitários globais consumidos (fora do módulo)

| Arquivo | Fornece |
|---------|---------|
| `public/assets/js/custom/utilities/table.js` | `runDatatables`, `createSingleButton`, `createDownloadButton`, `createActiveButton`, `createButtonDelete` |
| `public/assets/js/custom/utilities/functions.js` | `myFetch`, `formatDateBr`, `createChunks`, `myXHR` |
| `public/assets/js/custom/utilities/richtext/summernote.js` | Wrapper do editor (toolbar/upload) |
| `public/assets/js/modulos/sortableJs-min.js` | Drag & drop das matérias |
| `public/assets/js/modulos/cropper-min.js` | Crop da imagem de capa |

### Asset ausente

| Caminho referenciado | Status |
|----------------------|:------:|
| `public/assets/js/custom/RichText/summernote.js` (R maiúsculo) | ❌ ausente — o correto é `utilities/richtext/summernote.js` |

---

## 4. Rotas (3 arquivos)

| Arquivo | Conteúdo |
|---------|----------|
| `routes/basepro.php` | rotas CMS (`/cms/diario-oficial`, certificado, area, subarea), DataTables, status/config |
| `routes/web.php` | rotas do portal (`/diario-oficial*`) + refresh/preview/loading |
| `routes/breadcrumbs.php` | `diario-oficial` (portal) |

> Mapa completo em `21-ROTAS_E_PERMISSOES.md`.

---

## 5. Providers (3)

| Arquivo | Referência |
|---------|-----------|
| `app/Providers/RepositoryServiceProvider.php` | bindings `IDiarioAreaRepository`, `IDiarioSubAreaRepository`, `IDiarioConfigRepository` |
| `app/Providers/ConfigHeaderServiceProvider.php` | view namespace `portal.layouts.diario-oficial/*` |
| `app/Providers/MenuServiceProvider.php` | menu CMS: Diários / Áreas / Subáreas |

---

## 6. Migrations (28) e Views do banco

Lista completa em `13-MIGRACOES.md`. Views PostgreSQL de apoio:

`diario_oficial` (atual: com `generation_status` e `status_workflow`), `diario_oficial_pdf`,
`areas_do_diario`, `sub_areas_do_diario`.

---

## 7. Seeds

### 7.1 Dedicados

| Arquivo | Efeito | Chamado por `DatabaseSeeder`? |
|---------|--------|:-----------------------------:|
| `database/seeds/AtualizacaoDiario.php` | `TRUNCATE diario_areas CASCADE` + insere 4 áreas | ✅ |
| `database/seeds/UpdateManualAreasDiarioSeeder.php` | Manual do usuário do Diário | ✅ |
| `database/seeds/DiarioCaturiteSeeder.php` | Migra PDFs legados para `contents`/`archives` (não toca `diario_*`) | ❌ |
| `database/seeds/AddDiarioOficialPublishPermissionSeeder.php` | Permissão de publicação (4 olhos) | ❌ |
| `database/seeds/AddDiarioOficialSegregacaoFuncoesConfigSeeder.php` | Config `diario_oficial_segregacao_funcoes` | ❌ |
| `database/seeds/AddDiarioOficialWorkflowRolesSeeder.php` | Papéis do workflow de revisão | ❌ |

### 7.2 Relacionados

| Arquivo | Referência |
|---------|-----------|
| `database/seeds/UpdateManualAreas.php` | Manual (parte de diário) |
| `database/seeds/CategoryContentTableSeeder.php` | Categoria de portal `diario-oficial` |
| `database/seeds/ChangeLogTableSeeder.php` | Changelog "Diário oficial" |
| `database/seeds/RolesTableSeeder.php` | Permissões `diario-area.*` / `diario-subarea.*` |
| `database/seeds/DatabaseSeeder.php` | Orquestra os seeders |

---

## 8. Assets de imagem

`public/assets/images/diario-oficial/` (7): `diario_oficial.png`, `uma-coluna.png`,
`duas-colunas.png`, `com-linha.png`, `logo-meio.png`, `logo-esquerda.png`, `logo-direita.png`.

`public/img/`: `diario-oficial(diario).png`, `diario-oficial(oficial).png`,
`qrcode.png` (**gerado em runtime**).

---

## 9. Totais

| Categoria | Qtd |
|-----------|:---:|
| Models | 6 |
| Controllers | 6 |
| Repositories / Contracts | 5 / 3 |
| Services | 3 |
| Requests | 6 |
| Resources | 3 |
| Component / Presenter | 1 / 1 |
| Views | 29 (+2 órfãs) |
| JS / CSS | 12 / 1 |
| Migrations | 28 |
| Seeds | 6 dedicados + relacionados |
| Providers | 3 |
| Jobs / Commands | 0 / 0 |

> Problemas, código morto e caminhos quebrados: ver `22-ANOMALIAS_E_RISCOS.md`.
