# Inventário — o que pode e o que deve ser implementado

> Triagem única de `wiki/backlog/` (23 itens + 2 corpora) contra `AGENTS.md`, ADR-001..054 e o
> código real de `src/`. **Não cria escopo:** cada linha é uma candidata; a fase indica onde ela
> entra (ou por que não entra). A decisão final é do dono.
>
> Legenda: **FEITO** (já existe; não repetir) · **DEVE** (comprometido no programa) ·
> **PODE** (demanda real + contrato + ADR) · **COND** (condicionado a um segundo consumidor ou a
> um fato externo) · **NÃO** (rejeitado/descartado). Fases: `P0`..`P29` (ver `README.md`).

## 1. Backlog vivo — item a item

| Item de `wiki/backlog/` | Veredito da `REVISAO.md` | Neste programa | Fase | Observação |
|---|---|---|---|---|
| `backup-recuperacao.md` | já implementado (F6.I2) | **FEITO** | — | mover para `concluido/`; não reimplementar |
| `assinatura-digital-icp-brasil.md` | PODE depois de Legislação | **PODE** | P13 | exige lib permissiva, TSA/OCSP e endpoint de verificação |
| `email-deliverability.md` | PODE (externo, operação/DNS) | **PODE** | P13 | SPF/DKIM/DMARC não fecham por PR; medir bounce/suppression |
| `govbr-sso.md` | PODE (externo) | **PODE** | P13 | credenciamento gov.br; login local continua break-glass (ADR-037) |
| `cdn-borda-multicdn.md` | NÃO VALE agora | **NÃO** | — | medir origem antes; contrato comercial; não é código |
| `google-indexing-api.md` | NÃO como escrito; PODE como IndexNow | **DEVE** (IndexNow) | P7 | API do Google descartada (ADR-027 §9) |
| `ui-ativacao-modulos.md` | PODE | **FEITO** (P3) | — | `/suporte/modulos`: lista determinística, toggle com motivo/CSRF, essenciais e grupo `Suporte` sem toggle, auditoria e `--force` só no CLI; ficha `_to_revision/P3-suporte-ativacao.md` |
| `modulo-noticias.md` | núcleo FEITO; PODE paridade editorial | **DEVE** (paridade) | P6 | categorias/tags/galeria/destaque/preview/prev-next |
| `modulo-legislacao.md` | PODE; exige ADR de versionamento | **DEVE** | P10 | versionamento/consolidação/revogação; import idempotente |
| `modulo-ouvidoria.md` | PODE | **DEVE** | P11 | protocolo, prazos, acompanhamento, LGPD |
| `modulo-esic.md` | PODE depois da Ouvidoria | **DEVE** | P11 | reusa o maquinário de protocolo por convenção, sem trait |
| `modulo-transparencia-fiscal.md` | PODE; começar estendendo `DadosAbertos` | **DEVE** (capacidade) | P12 | D9: `DadosAbertos` é o único owner público; módulo irmão só como view, sem tabela/export |
| `modulo-usuarios.md` | PODE só como UI sobre ADR-033 | **DEVE** (UI) | P2 | sem ADR de RBAC nova; modelo é o da ADR-033 |
| `servico-search.md` | PODE; começar local | **DEVE** | P7 + P9 | local em Notícias (P7); service só com 2º consumidor (P9) |
| `servico-notifications.md` | PODE (condicionado) | **PODE/COND** | P9 | só quando Ouvidoria/e-SIC pedirem; Laravel Notifications nativo |
| `servico-feedrss.md` | PODE (condicionado) | **PODE** | P7/P9 | XMLWriter nativo; sem dependência; service só com 2º consumidor |
| `servico-landing-sections.md` | PODE; capacidade do layout + módulo, **não** service | **FEITO** (P5) | — | emenda à ADR-016 entregue: catálogo fechado de 12 blocos (`Layout\Blocks`), `{version,sections[{id,type,props,hidden}]}` validado por schema, renderizador único `<x-layout::blocks>`; sem HTML/Blade no banco; ficha `_to_revision/P5-composicao-site.md` |
| `servico-excel-importer.md` | PODE como ferramenta de operação | **DEVE** | P9 | CSV streaming, dry-run, idempotência, anti-CSV-injection; **não é ETL** |
| `servico-theme.md` | já implementado no layout; não é service | **FEITO** | — | corrigir a lista “Backlog” do AGENTS; editor de tema entra em P1 |
| `cripto-auditoria-avancada.md` | DESCARTADO | **NÃO** | — | BLAKE3 permanece (ADR-029); manter o registro |
| `suporte/` (dossiê) | página de contato + tickets órfãos | **FEITO** (P3) | — | contato do fornecedor via settings `support` + telas de diagnóstico/manutenção; **sem** sistema de tickets no MVP |
| `usuarios/` (dossiê) | RBAC legado | **DEVE** (UI) | P2 | modelo ADR-033; rejeitar Sentinel/`has_access`/middleware por URL |
| `logs-do-sistema/` (dossiê) | auditoria | **FEITO** (P3) | — | leitor keyset de `core_audit_logs` com filtros, detalhe e leitura auditada; não é tail de log técnico (ADR-024/035) |
| `configuracoes-da-instituicao/` + `outras-configuracoes/` | um dono por domínio (C13) | **FEITO** | P1 | módulo `Infraestrutura/Configuracoes` com schema tipado entregue (implementação em revisão) |
| `temas-e-cores/` | layout já resolve; falta UI | **FEITO** | P1 | editor de tokens + `/theme.css` com `ETag` entregues (implementação em revisão) |
| `menus-do-site/` | não existe no V7 | **FEITO** | P1 | módulo + porta Core + render entregues (implementação em revisão) |
| `paginas-estaticas/` | não existe no V7 | **FEITO** (P5) | — | módulo `Portal/Paginas`: página como dado (`title`/`content` AST/`seo` jsonb), fallback de área que não sombreia rota viva, transições publicar/despublicar/arquivar, sitemap e preview autenticado; ficha `_to_revision/P5-composicao-site.md` |
| `banners/`, `destaques/`, `avisos/`, `acesso-rapido/` | não existem | **FEITO** (P5) | — | módulo `Portal/Destaques` (vigência com `Clock`, `alt` obrigatório, mídia por id) + fonte `destaques.banner` com cache por slot; atalhos de acesso rápido como bloco `quick-links`/widget `home.quick-links`; ficha `_to_revision/P5-composicao-site.md` |
| `novidades/`, `manual-do-sistema/`, `fornecedores/` | apoio ao suporte | **FEITO** (P3) | — | fornecedor vem de `support` (sem iframe); “novidades” mostra a versão e não inventa changelog; manual omitido até o pacote existir no deploy |
| `relatorio-estatistico-ouvidoria/` | não existe | **PODE** | P12 | relatório público agregado, sem PII |

## 2. Capacidades nomeadas pelo dono

| Capacidade | Situação no V7 | Fase | Entregável mínimo |
|---|---|---|---|
| **Gestão de perfis e usuários** | **FEITO (P2, em revisão)**: `cms_users.deactivated_at`, `PermissionCatalog`/`AccessPolicy`, módulo `Infraestrutura/Acesso` (`/usuarios`, `/papeis`, `/perfil`), matriz declarada, auditoria e proteções; ficha `_to_revision/P2-usuarios-perfis.md` | **P2** | `/cms/usuarios`, `/cms/papeis`, `/cms/perfil`; matriz módulo × ação; ativar/desativar; auditoria; proteção do último admin e do perfil `suporte` |
| **Suporte com desativação em runtime** | **FEITO (P3, em revisão)**: módulo `Suporte/Painel` (`/suporte`), ativação com essenciais/grupo protegidos, diagnóstico + `core:diagnose`, leitor da trilha (keyset), manutenção (503/`Retry-After`) e contato do fornecedor; ficha `_to_revision/P3-suporte-ativacao.md` | **P3** | `/suporte`; `/suporte/modulos`; `/suporte/diagnostico`; `/suporte/auditoria`; `/suporte/manutencao`; `/suporte/contato` |
| **Áreas de estatística** | **FEITO (P4, em revisão)**: agregados `core.core_metrics_daily` + HLL no Valkey (sem PII), ingestão em `terminate` fail-open, cards Core/módulo em `/cms`, módulo `Infraestrutura/Estatisticas` (`/estatisticas/paginas|modulos|conteudo`), export CSV, retenção 400/90; ficha `_to_revision/P4-estatisticas.md` | **P4** | ingestão privacy-first, agregados, cards por módulo, ranking, filtros, export, retenção |
| **Estrutura geral do site e do CMS** | **FEITO (P5, revisado)**: home por seções (catálogo fechado de 12 blocos + editor com reordenar/ocultar/publicar/prévia e mídia resolvida em lote), páginas estáticas com AST e fallback de área, destaques com vigência e widgets reais nos slots; settings/identidade/tema/shell/menus/SEO base vieram de P0/P1; ficha `_to_revision/P5-composicao-site.md` | **P0/P1/P5** | configurações tipadas, identidade, tema, shell, menus, home por seções, páginas, banners/widgets |

## 3. Capacidades dos dossiês (além dos itens de backlog)

### 3.1 Entram no programa

| Capacidade | Fonte | Veredito | Fase | Por que |
|---|---|---|---|---|
| Configurações tipadas (instituição, SEO, contato, e-mail, LGPD) | dossiê `configuracoes-da-instituicao`, `outras-configuracoes`; `sucesu SupportConfigs` | **FEITO** | P0/P1 | schema + editores das seções entregues; revisão pendente |
| Identidade/tema do portal e do CMS | dossiê `temas-e-cores`; `lotep SupportConfigs` | **FEITO** | P1 | engine + editores Aparência/Painel; revisão pendente |
| Menus do site | dossiê `menus-do-site` | **FEITO** | P1 | navegação como dado + porta Core; revisão pendente |
| Licitações | dossiê `lotep-v2/publicacoes-licitacoes`; `dossie_modules/licitacoes` | **DEVE** | P8 | domínio fechado, sem dependência externa, prova na V2 |
| Paridade editorial de Notícias | dossiê `noticias`; `lotep-v2/publicacoes-noticias` | **DEVE** | P6 | categoria fixa no model é dívida verificada |
| Legislação | dossiê `legislacao`; `lotep-v2/publicacoes-legislacao` | **DEVE** | P10 | exige ADR de versionamento; import idempotente |
| Ouvidoria | dossiê `ouvidoria`; `lotep-v2/servicos-ouvidoria` | **DEVE** | P11 | LGPD/rate limit já existem; protocolo é o núcleo |
| e-SIC / LAI | dossiê `solicitacoes-lai` | **DEVE** | P11 | mesmo maquinário de protocolo; prazos legais próprios |
| Transparência fiscal | dossiê `transparencia-fiscal`; `lotep-v2/dadosabertos-transparenciafiscal` | **DEVE** | P12 | D9: `DadosAbertos` é o único owner; os demais são views |
| Importação operacional CSV | dossiê `servico-excel-importer`; `sucesu ExcelImporter` | **DEVE** | P9 | carga fiscal/dados abertos; não é ETL |
| Busca full-text local | `sucesu search`; `lotep search` | **DEVE** | P7 | `tsvector` gerado + GIN; sem serviço até 2º consumidor |
| Widgets/seções de landing | `lotep-v2/support-structurallandingeditor`; `sucesu landing-sections-editor` | **FEITO** | P5 | catálogo fechado de 12 blocos + `WidgetRegistry` com fontes reais (`noticias.*`, `dadosabertos.ultimos`, `home.quick-links`, `destaques.banner`); revisão pendente |
| Páginas estáticas / `BasicPage` | `sucesu BasicPage`; dossiê `paginas-estaticas` | **FEITO** | P5 | página como dado + AST, fallback de área, transições e preview; revisão pendente |
| Feed RSS/Atom | `sucesu FeedRss`; backlog | **PODE** | P7/P9 | XMLWriter; validar com 2º consumidor |
| Notificações (mail/database) | `sucesu MailService`; backlog | **PODE/COND** | P9 | só com Ouvidoria/e-SIC |
| Formulários dinâmicos versionados | `lotep-v2/infraestrutura-formulariosdinamicos`; dossiê `formularios-dinamicos` | **COND** | P19 | só com demanda real; motor no módulo, sem service prematuro |
| Conversores DOCX/HTML → AST | `lotep ContentRichEditor` | **PODE** | P9 | útil para colar conteúdo; nunca ETL automático |
| Certificado digital / assinatura | `sucesu DigitalSignature`; backlog | **PODE** | P13 | depende de Legislação e de lib permissiva |
| Gov.br SSO | backlog | **PODE** | P13 | credenciamento externo |
| Estatísticas públicas (Ouvidoria/portal) | dossiê `relatorio-estatistico-ouvidoria` | **PODE** | P12 | agregado, sem PII |
| Changelog “Novidades” e manual | dossiê `novidades`, `manual-do-sistema` | **PODE** | P3 | tela simples; não é módulo de conteúdo |
| Módulos institucionais (A Instituição, A Cidade, Secretarias, Órgãos, Unidades, Telefones, Redes, Glossário, FAQ, Feriados) | dossiês homônimos; `sucesu Historia/SobreNos` | **DEVE** | P14 | conteúdo público; páginas/blocos + tabelas próprias |
| Publicações, Diário Oficial, Carta de Serviços | dossiês homônimos | **DEVE** | P15 | donos distintos; anexos via Media |
| Servidores, Terceirizados, Estagiários, Concursos/PSS | dossiês homônimos | **DEVE** | P16 | dado pessoal: campos públicos mínimos + LGPD |
| Obras, Licitantes Sancionados, Comitê, VIAP, Diárias, Unidades Gestoras | dossiês homônimos | **DEVE** | P17 | integridade pública; valor decimal; LGPD |
| Câmara (Sessões, Pauta, Vereadores, Requerimentos, Atas, Transmissões/TV) | dossiês homônimos | **PODE** | P18 | perfil de produto; vídeo só por link |
| Agenda, Fale Conosco, Trabalhe Conosco, Enquetes, Newsletters, Revisões | dossiês/`sucesu` | **DEVE/PODE** | P19 | consentimento/antiabuso; formulários condicionais |
| Associados, Parceiros, Associe-se | `sucesu Conexoes/Institucional` | **COND** | P20 | só cliente de associação; sem multi-tenant |
| Fila de Espera SUS, e-Vacina | dossiês homônimos | **COND** | P21 | público **agregado**; DPIA/base legal |

### 3.2 Catálogo completo de módulos

O catálogo **módulo a módulo** (66 pastas de módulo — 68 entradas do registro com aliases —, 20
módulos Sucesu e as unidades de serviço/arquitetura), com veredito, fase, dados sensíveis e
observação, está em [`MODULOS.md`](./MODULOS.md). Resumo por fase:

| Fase | Módulos | Condição |
|---|---|---|
| P14 | Institucional (A Instituição, A Cidade, Secretarias, Órgãos, Unidades, Telefones, Redes, Glossário, FAQ, Feriados) | conteúdo real; páginas/blocos |
| P15 | Publicações, Diário Oficial, Carta de Serviços; Licitações Antigas/Arquivo/Mais Conteúdos | núcleo DEVE; os três últimos PODE |
| P16 | Servidores, Terceirizados, Estagiários, Concursos/PSS | LGPD; campos públicos mínimos |
| P17 | Obras (+ paralisadas), Licitantes Sancionados, Comitê, VIAP, Diárias, Unidades Gestoras | LGPD; valor decimal |
| P18 | Sessões, Pauta, Vereadores, Requerimentos, Atas, Transmissões, TV Câmara | perfil Câmara/contrato; link, sem embed |
| P19 | Agenda, Fale Conosco, Trabalhe Conosco, Enquetes, Newsletters, Revisões, Formulários | formulários/vagas/newsletter condicionados |
| P20 | Associados, Parceiros, Associe-se | cliente de associação; sem multi-tenant |
| P21 | Saúde: plano/serviços, fila agregada, medicamentos/estoques, Conselho, e-Vacina | agregado/DPIA; sem PII |
| P22 | Receita, Despesa, Dívida Ativa, Transferências | PNTP 3–5; essenciais 3.1/3.2/4.1/4.2/4.3 |
| P23 | Contratos, Aditivos, Fiscais, Pagamentos, SRP, PAC | PNTP 8.5–8.6/9 |
| P24 | Planejamento: RGF, RREO, PPA, LDO, LOA, balanço, relatório, TC | PNTP 11; essenciais 11.5/11.6/11.8–11.10 |
| P25 | SIC completo, classificados, serviços digitais, DPO, satisfação | PNTP 12/15 |
| P26 | Acessibilidade, mapa do site, Radar | PNTP 13/2.9 |
| P27 | Renúncias, Emendas, Educação/Assistência | PNTP 16/17/19 |
| P28 | Proposições, Comissões, Votações, Contas, Cotas, Atividades | PNTP 20; perfil Câmara |
| P29 | 5 itens PNTP, declarações, evidências, PDF pesquisável | transversal; fecha P22–P28 |

Nenhum módulo fora dessas fases bloqueia P0–P29; os `NÃO` estão justificados em `MODULOS.md` §2.
O detalhamento PNTP (critério → fase, 5 itens, declarações) está em [`PNTP.md`](./PNTP.md); os
requisitos por dimensão estão em [`../backlog/pntp-2026/`](../backlog/pntp-2026/README.md).

### 3.3 Já implementado — não repetir

| Capacidade | Evidência |
|---|---|
| Notícias (núcleo: portal, CMS, API, export, sitemap, `NewsArticle`, 4 locales, AST `jsonb`) | `src/modules/Publicacoes/Noticias/**` |
| Dados Abertos (dataset, DCAT/INDA, CSV/JSON/XML, `ETag`/checksum) | `src/modules/Portal/DadosAbertos/**` |
| LGPD/DSAR + política de privacidade + retenção/legal hold | `src/modules/Portal/Lgpd/**`; `src/core/Internal/Retention/**` |
| SEO (`@graph`, sitemap, robots, redirects 301, hreflang, `security.txt`) | `src/services/Seo/**` |
| Media/Gallery (AVIF/WebP, `<picture>`, lote, catálogo) | `src/services/Media/**`, `src/services/Gallery/**` |
| RichText (AST → HTML semântico, preview) | `src/services/RichText/**` |
| Layout (tema/tokens/presets/slots/a11y, `/theme.css`) | `src/layout/**`, `src/services/Layout/**` |
| Perfil de layout por escopo + `WidgetRegistry`/`WidgetSource` | `src/services/Layout/**`, `src/core/Internal/Widgets/**` |
| Home por seções (catálogo fechado de 12 blocos, editor CMS, publicação versionada, prévia autenticada) | `src/layout/Blocks/**`, `src/modules/Portal/Home/**`, ADR-016 (emenda) |
| Páginas estáticas (AST, fallback de área, transições, sitemap, preview) | `src/modules/Portal/Paginas/**` |
| Destaques/banners com vigência + fonte `destaques.banner` (cache por slot) | `src/modules/Portal/Destaques/**` |
| Fontes de widget reais (`noticias.ultimas`, `noticias.mais-lidas`, `dadosabertos.ultimos`, `home.quick-links`) | `src/modules/*/**/Widgets/**`, `WidgetRegistry` |
| Shell do CMS (regiões, posição, identidade via `config/cms.php`) | `src/layout/Cms/**`, `config/cms.php` |
| Ativação de módulo (dado + cache + guard + comando) | `ModuleActivation`, `CheckModuleActivation`, `core:module:activate` |
| Auditoria (trilha imutável BLAKE3, `AuditWriter`, retenção) | `src/core/Internal/Audit/**` |
| Auth do CMS (sessão, Argon2id, throttle, auditoria) | `src/core/Area/Cms/**` |
| RBAC (perfis, tokens, `Gate`, `suporte` protegido) | `src/core/Access/**` |
| Backup/restore/PITR/offsite | `tools/db-*.sh`, `scripts/update/02-backup.sh`, F6.I2 |
| Configurações tipadas (schema, cache, segredo, auditoria e tela Geral) | `src/core/Internal/Settings/**`, `src/modules/Infraestrutura/Configuracoes/**`, ADR-046 |
| Config. de módulo (ativação) | `core_module_discovery_settings` |
| Painel de suporte + ativação pela UI (essenciais/`Suporte` protegidos) | `src/modules/Suporte/Painel/**`, `SetModuleActivation`, `config/core.php` |
| Diagnóstico operacional (13 checks, timeout, sem segredo) | `src/core/Internal/Diagnostics/**`, `core:diagnose` |
| Leitor da trilha de auditoria (keyset, filtros, leitura auditada) | `src/core/Internal/Audit/{DTOs,Services/AuditLogReader.php}` |
| Modo de manutenção (503 portal/API, CMS, allowlist) | `src/core/Internal/Maintenance/**`, `EnforceMaintenanceMode` |
| Contato do fornecedor/versão sem iframe | settings `support`, `src/modules/Suporte/Painel/Logic/{Actions/PainelContactAction.php,DTOs/PainelContact.php}` |

### 3.4 Explicitamente rejeitado (não reabrir sem ADR nova)

| Item | Regra que o rejeita |
|---|---|
| Sentinel, `has_access`, middleware de permissão por URL, bypass por e-mail | ADR-033/037 |
| Níveis `none/read/write`, herança de perfis, `PermissionService` | ADR-033 |
| HTML/Blade/template/CSS no banco (`layouts.value`, `contentRichHtmlFree`, `bloco-sle`) | ADR-001/017/028 |
| `activity_log` do Spatie como trilha | ADR-035 |
| CSP por nonce, `HtmlMinify`, compressão em runtime | ADR-022 |
| jQuery/Bootstrap/AdminLTE/Cropper/Livewire/Filament | ADR-002/009 |
| ETL do legado (`sys_migration`, `legacy_mapping`, `migrate:legacy`) | ADR-042 |
| CDN/Multi-CDN antes de medir origem | ADR-002/022; `REVISAO` |
| API do Google Indexing (substituída por IndexNow) | ADR-027 §9 |
| Gemini/LLM externo no produto | ADR-002/019 (sem ADR de IA) |
| YARA/WORM/crypto-shredding | ADR-029; item descartado |
| `uuid()` v4 falso, soft delete global, slug com sufixo aleatório | ADR-007/017; bugs G4 |
| Regionais/tenancy da Sucesu no V7 single-tenant | ADR-001/042; decisão de produto separada |

## 4. Decisões que precisam existir antes do código

| # | Decisão | Fase | Por que não pode ser improvisada |
|---|---|---|---|
| D1 | **ADR-046 — Configurações tipadas como dado** (schema, escopo, cache, segredos, auditoria) | P0 | sem ela, “configurações” repete o key/value livre do legado |
| D2 | Emenda à **ADR-016** para seções de página (blocos ordenados, schema por tipo, preview) | P5 | o motor de landing não pode virar “Blade no banco” |
| D3 | Emenda à **ADR-034** para módulos essenciais/protegidos contra auto-lockout | P3 | desativar `Suporte`/`Acesso`/`Configuracoes` derruba o painel |
| D4 | **ADR-047 — Métricas privacy-first** (o que coleta, por quanto tempo, como agrega) | P4 | estatística é dado pessoal se mal desenhada (LGPD) |
| D5 | **ADR-048 — Versionamento/consolidação/revogação de normas** | P10 | sem linha do tempo normativa, Legislação é só upload de PDF |
| D6 | Porta Core de **navegação** (`NavigationSource`/`MenuRegistry`) vs. service | P1 | `layout` não pode importar módulo; a porta é o padrão de `WidgetSource` |
| D7 | **Search**: local no módulo até o 2º consumidor; contrato do índice compartilhado | P7/P9 | evita service prematuro e duas verdades de índice |
| D8 | **ExcelImporter**: ferramenta de operação (CSV, dry-run, idempotente) e limite de linhas/bytes | P9 | ADR-042 proíbe ETL; carga operacional é permitida |
| D9 | **Transparência**: estender `DadosAbertos` primeiro (C18) | P12 | módulo irmão duplica dataset/export |
| D10 | **Integrações externas**: gov.br, ICP-Brasil, deliverability, CDN | P13 | dependem de credencial/contrato/ato oficial |
| D11 | **Câmara**: perfil de produto (`structure_type=camara`) e grupo ativável | P18 | sem gate, módulos legislativos contaminam o portal executivo |
| D12 | **Vídeo**: link externo × embed; embed exige nova allowlist/ADR | P18 | ADR-002 permite só VLibras + GA; YouTube embed é terceiro |
| D13 | **Pessoas**: quais campos são públicos por base legal (nome/cargo/lotação × CPF/matrícula) | P16 | publicar PII sem base legal é violação LGPD |
| D14 | **Associações**: cliente de associação e referência regional sem multi-tenant | P20 | V7 é single-tenant; tenancy exige ADR própria |
| D15 | **Saúde**: DPIA/base legal e decisão “agregado apenas” | P21 | dado de paciente é sensível; lista nominal pública não é padrão |
| D16 | **ADR-049 — motor de dados abertos (fonte pull-based, serviço `OpenData`)** | P5.5 | sem ele, cada módulo inventa CSV/evento e o catálogo vira segunda verdade |

### 4.1 Decisões tomadas em 2026-10-23

> Registro canônico: [`DECISOES.md`](./DECISOES.md). O quadro abaixo é o resumo executivo; a
> decisão não muda o veredito dos itens, só fecha a alternativa.

| # | Decisão | Escolha | Fase |
|---|---|---|---|
| D1 | Configurações tipadas | **A** — um JSON por escopo (`institution`, `theme`, `cms`, `seo`, `system`, `support`); foco no tema e em suas particularidades, inclusive o tema dos widgets | P0 |
| D2 | Seções/páginas | **A** — catálogo fechado (recomendado); edição profunda só em Home e no módulo especial de páginas estáticas; demais módulos só posicionam widgets | P5 |
| D3 | Módulos essenciais | **A** — lista estática + grupo `Suporte` inteiro intocável; invisível/404 por padrão para todos, exceto `suporte@maxima.inf.br` | P3 |
| D4 | Métricas | **A** — agregados privacy-first + HLL; sem APM/PII | P4 |
| D5 | Legislação | **A** — versões imutáveis + consolidação/revogação | P10 |
| D6 | Navegação/layout por área | **A** — porta `Navigation` no Core; botão “Configurar layout da área/módulo” sem mais complexidade, com fallback na configuração global definida pelo Suporte na área de suporte | P1/P5 |
| D7 | Search | **A** — local em P7; service em P9; cada módulo chama o service passando objeto padrão separado `portal`/`cms`; integração opcional | P7/P9 (ADR-050) |
| D8 | Importador | **A** — CSV com Poka-yoke visual (preview/dry-run/apply), sem ETL | P9 (ADR-051) |
| D9 | Transparência | **A** — `DadosAbertos` é o único owner público; demais são views | P12 (emenda ADR-049) |
| D10 | Integrações externas | **Adiadas** para o fim do backlog, opcionais, reavaliadas após **toda** a implementação | P13 |
| D11 | Câmara | **A**, com implantação posterior; se simples, backlog | P18 |
| D12 | Vídeo | **A** — link externo + thumbnail local; embed só com ADR | P18 |
| D13 | Pessoas | **A** — allowlist mínimo; remuneração só com base legal | P16 |
| D14 | Associações | **A**, com implantação posterior; sem multi-tenant | P20 |
| D15 | Saúde | **Adiada** para o fim; decisão tomada quando a fase for iniciada; DPIA/base legal antes | P21 |
| D16 | Dados abertos | **A** — pull-based, registry no Core, um serializador | P5.5 |
| D17 | Solicitações de serviços | **A** — módulo catálogo/protocolo, sem helpdesk; spec em P25/backlog | P25 (ADR-052) |
| D18 | Declarações de inexistência | **A** — conteúdo estruturado (tabela + AST + componente) | P29 (ADR-017/028) |
| D19 | VIAP/cotas | **A** — P17 é dono; P28 só lê/apresenta | P17/P28 (ADR-054) |
| D20 | PDF pesquisável | **A** — PDF gerado pelo sistema usa os dados brutos do banco (como o Diário Oficial); anexo externo sem OCR | P29 (ADR-053) |
| D21 | Composição do site (SLE) | **A** — hub read-only sobre menus/layout/tema/banner/contato + editores canônicos; sem HTML/CSS/JS no banco | P5.6 (emenda ADR-016/046) |
| D22 | Assets do SLE | **A** — CSS/JS exclusivos do Suporte, arquivos same-origin versionados, sem HTML/snippet | P5.6.S6 (emenda ADR-020/022/002) |

**Consequência imediata:** P13, P18, P20 e P21 não bloqueiam P0–P12/P14–P17/P19/P22–P29; P13 e
P21 ficam para o fim, e P18/P20 só abrem com gate de produto. O detalhe de cada escolha está em
[`DECISOES.md`](./DECISOES.md).

## 5. Como mover um item

- **PODE → DEVE:** decisão do dono + contrato/escopo + ADR (se mudar arquitetura) + uma fase/ fatia
  no `kd`. Sem esses quatro, o item continua fora da fila.
- **FEITO:** atualizar a linha para `FEITO`, citar a evidência e remover do backlog ativo quando a
  regra do `README.md` do backlog mandar.
- **NÃO:** manter o registro e a justificativa; não apagar a história.
