# Plano 17 — Dados Abertos, LGPD e Governança de Dados

> **Milestone:** M4 · **Depende de:** 08, 12, 14 · **Habilita:** produção
> **Objetivo:** publicar **dados abertos reutilizáveis** e operar um **programa de privacidade
> (LGPD)** com retenção, transparência e interoperabilidade — sem dependências novas.

---

## 1. Dados Abertos (ADR-018)

- **Dataset é entidade de domínio** (módulo `DadosAbertos`): título, descrição, periodicidade,
  última atualização, responsável, **licença**, versão, recursos (arquivos).
- **Metadados**: **DCAT/INDA (gov.br)** + `schema.org/Dataset` (JSON-LD).
- **Export legível por máquina**: **CSV/JSON/XML** por recurso, URL estável, `ETag`, checksum.
- **Licença** por dataset (default **CC-BY 4.0**), como dado editável.
- **Catálogo** `/dados-abertos` (portal) + gestão no CMS; **JSONB** para metadados (ADR-017).

## 2. LGPD / privacidade (ADR-019)

- **Classificação** (público/interno/pessoal/sensível) por campo; dirige cifra, log e retenção.
- **Base legal + ROPA** (registro de operações) como dado.
- **Direitos do titular (DSAR)**: acesso, correção, eliminação, portabilidade — fluxo com prazo e auditoria.
- **Retenção e descarte**: prazo por entidade + **expurgo agendado** (Scheduler) + `legal hold`;
  histórico nunca é `DROP` (ADR-017).
- **Auditoria de acesso a dado pessoal** (quem/quando).
- **Incidentes/breach**: runbook + notificação ANPD/titulares.
- **DPIA** (alto risco), **encarregado (DPO)** com canal público, transferência/subprocessadores.
- **Sem** suíte externa: cast `encrypted` + `Audit` + Scheduler + páginas legais.

## 3. Retenção, versionamento e preservação

- **Prazos de retenção** por entidade (tabela de política) e expurgo/anomização agendados.
- **Versionamento/errata** de publicações (retificação com histórico imutável).
- **Formatos de preservação**: PDF/A para documentos arquivísticos; checksum por arquivo.
- **Legal hold** bloqueia expurgo de registros sob demanda judicial/administrativa.

## 4. API pública e interoperabilidade

- API **somente leitura**, **versionada** (`api.<base>/v1`), paginada, com `ETag` e rate-limit.
- Contrato documentado (**OpenAPI**), sem expor dado pessoal.
- Padrões gov.br (INDA/DCAT) e JSON-LD; **sem** expor PII (cruza com ADR-019).

## 5. Consentimento e analytics privacy-first

- **Banner de consentimento** acessível (LGPD) quando houver cookies não essenciais.
- **Analytics privacy-first**: medição agregada própria (ou cookie-less) — **sem Google Analytics**.
- Página de **política de privacidade**, **acesso à informação** e **encarregado**.

## 6. Atividades

- [x] Módulo `DadosAbertos` (dataset + recursos) no template ADR-017 (`jsonb`, `down()`→`backup_*`).
      Feito: `src/modules/Portal/DadosAbertos` — tabela `dados_abertos.datasets`, dados tabulares em
      `jsonb` (`columns`/`rows`), metadados/tags em `jsonb`; `down()` renomeia para `backup_*`.
- [x] Metadados DCAT/INDA + `schema.org/Dataset` (JSON-LD) e catálogo `/dados-abertos`.
      Feito: `Seo/DadosAbertosSchema` (DCAT/INDA + `Dataset`/`DataDownload`) no `@graph` do service
      `Seo`; catálogo e detalhe públicos.
- [x] Exportadores CSV/JSON/XML (fila) + `ETag`/checksum + URLs versionadas.
      Feito: `DadosAbertosExport` **síncrono** (geração pura, sem I/O — não há ganho em fila),
      determinístico, com `checksum` SHA-256, `ETag`/304, URL estável por formato e neutralização de
      CSV injection; API sob `api.<base>/v1`.
- [ ] `services/OpenData` (contrato no service) + componente de config/uso no CMS (ADR-015).
      Não promovido: a lógica vive no módulo (simplicidade — ADR-001). Promover só com demanda real.
- [x] API `api.<base>/v1` (OpenAPI, paginação, `ETag`, rate-limit) sem PII.
      Feito: ``api.<base>/v1/datasets`` paginada, `ETag`/304, `throttle:open-data` (ADR-021) e DCAT inline;
      contrato descrito no `MODULE.md` — **OpenAPI formal segue pendente**.
- [x] Classificação de dados + ROPA (tabela) + **DSAR** (fluxo + prazos + auditoria).
      Feito: classificação em `config/lgpd.php` (dirige cifra `encrypted`/trilha/retenção); **DSAR** no
      módulo `Portal/Lgpd` (protocolo, prazo `LGPD_DSAR_DUE_DAYS`, cifra em repouso, auditoria explícita
      e atendimento no CMS). **ROPA como tabela segue pendente** (hoje é config/perfil).
- [x] Política de retenção por entidade + job de expurgo/anomização (respeita legal hold).
      Feito: `Core\Contracts\RetentionRegistry` (porta `Ports\RetentionTarget`) + comando agendado
      `retention:expunge`; o alvo `lgpd-dsar` anonimiza protocolos encerrados além do prazo, preserva o
      registro e **respeita `legal_hold`** (nada de `DROP`).
- [x] Auditoria de acesso a dado pessoal; runbook de incidente/ANPD; página do DPO.
      Feito: leitura no CMS entra na trilha (`audit.access`); `wiki/runbooks/anpd-incidentes.md`;
      `/politica-de-privacidade` com canal do encarregado (rodapé + `security.txt`).
- [x] API `api.<base>/v1` (OpenAPI, paginação, `ETag`, rate-limit) sem PII.` — ver acima.
- [x] Banner de consentimento acessível + analytics privacy-first + páginas legais.
      Feito: **sem cookies não essenciais** por padrão → sem banner (a política explica); analytics
      privacy-first (sem terceiros, `LGPD_ANALYTICS_THIRD_PARTY=false`); páginas legais (privacidade).

## 7. Testes e evidências

- [x] Dataset exporta CSV/JSON/XML com URL estável, `ETag` e checksum; `schema.org/Dataset` válido.
      Prova: `DadosAbertosTest` (checksum = SHA-256 do corpo; 304; JSON/XML/CSV parseáveis) + E2E 12.
- [x] Licença (CC-BY 4.0) presente e correta; atribuição na página e no export.
- [x] Campo pessoal: cifrado, classificado, com retenção aplicada por job e **sem PII** no export/API.
- [x] DSAR de acesso/correção/eliminação executa com trilha de auditoria e prazo.
- [x] Expurgo respeita `legal hold` e preserva histórico/auditoria (nada de `DROP`).
- [x] Nenhum recurso de analytics de terceiros (`tools/vendor-check`); banner acessível (axe).

## 8. Definition of Done

- [x] Dados abertos publicados em formato reutilizável, com metadados e licença.
- [x] Programa de privacidade operante (classificação, DSAR, retenção, incidentes, DPO).
- [ ] API pública versionada sem exposição de dados pessoais.
- [ ] Nenhuma dependência nova; tudo nativo (cast, audit, scheduler, intl).

## 9. Riscos

| Risco | Mitigação |
|---|---|
| Dataset virar "PDF aberto" | Entidade + export legível por máquina (ADR-018) |
| Expurgo apagar histórico/auditoria | `legal hold` + anonimização + ADR-017 |
| API expor PII | Contrato sem PII + classificação + teste |
| Analytics violar privacidade | Medição própria/cookie-less + consentimento |
| Volume de export onerar o servidor | Filas + cache + `ETag` |
