# P21 — Saúde e assistência (LGPD reforçada)

| Campo | Valor |
|---|---|
| Programa | F7+ — operação, estrutura e conteúdo |
| Status | `adiado` (fim do backlog; DPIA/base legal antes — D15) |
| Depende de | P9, P12, P16 |
| Habilita | — |
| Tamanho | **M** (3–4 sessões) |
| ADRs | ADR-019 (LGPD), ADR-020, ADR-024, ADR-035, ADR-018; DPIA/ADR própria se houver dado individual |

## 1. Objetivo

Publicar as informações de saúde que o PNTP cobra — **plano/programação/relatório, serviços,
fila de espera agregada, medicamentos, estoques, conselho de saúde** e cobertura vacinal — sem expor
pacientes. O corpus V5 lista nomes e situações individuais; o V7 **não** faz isso sem base legal,
DPIA e decisão explícita. **D15:** a fase fica **adiada para o fim do backlog** e só abre após
DPIA/base legal/DPO; o padrão é agregado.

**Resultado observável:** o cidadão vê o plano/serviços, a fila por procedimento/unidade, a lista de
medicamentos/estoques, o conselho e a cobertura vacinal; nenhuma página, API, log ou export contém
nome, CPF, prontuário ou endereço de paciente.

## 2. Gate de dados (não começar sem)

- Base legal documentada (obrigação legal/transparência) + **DPIA** aprovada + parecer do DPO.
- **Público = agregado**: procedimento, unidade, quantidade, tempo médio de espera, competência.
- **Individual = restrito**: só se indispensável e com pseudonimização; sem nome/CPF/prontuário;
  acesso auditado; retenção curta; nunca em API pública.
- Se o cliente exigir lista nominal pública, **parar**: exige ADR e análise jurídica; não é o padrão
  do V7.
- Nenhuma integração direta com sistema hospitalar no MVP; carga por CSV operacional (P9).

## 3. Escopo fechado

### S1 — Fila de Espera SUS (agregado)

- Módulo `Saude/FilaEspera` (token `fila_espera`, grupo `Saude`), permissions `[VIEW, EDIT]`.
- Tabela pública `fila_espera_agregada`: `id`, `procedimento` (jsonb), `unidade` (jsonb),
  `quantidade` int, `espera_media_dias` int, `competencia` (`YYYY-MM`), `fonte`, `publicado_em`,
  timestamps; `UNIQUE (procedimento, unidade, competencia)`.
- Portal `/fila-de-espera` com filtros por procedimento/unidade/competência; tabela semântica;
  totalizadores; export CSV agregado com `ETag` (opcional).
- CMS: importar/publicar agregado; validação de competência e inteiros ≥0; sem edição manual de
  linha individual.
- Se não houver base legal para o agregado, não publicar (decisão no `kd`).

### S1b — Plano, serviços e horários (18.1/18.2)

- `saude_planos` (`tipo` plano/programação/relatório, `exercicio`, `media_id`, `resumo`) e
  `saude_servicos` (`local`, `endereco`, `horario`, `profissionais`, `especialidades`, `active`).
- Portal `/saude` com plano/programação/relatório e serviços por local/especialidade; filtros;
  CSV; 1 ano/3 anos; 30 dias para serviços; `Atualizado em`.

### S1c — Medicamentos e estoques (18.4/18.5)

- `medicamentos` (nome, apresentação, REMUME/RESME, alto custo, como obter) e
  `estoque_medicamentos` (unidade/farmácia, endereço, medicamento, quantidade, `atualizado_em`).
- Portal `/saude/medicamentos` e `/saude/estoques`; filtros por medicamento/unidade; CSV;
  atualização ≤15 dias para estoque; 2 anos para medicamentos.
- PDF pesquisável aceito para a lista; o estoque é tabela HTML.

### S1d — Conselho de Saúde (18.6)

- `conselhos` (tipo `saude`), `conselho_membros`, `conselho_atas`, `conselho_relatorios`.
- Portal `/conselhos/saude` com membros/segmentos, contato, atas e relatórios; filtros; 4 locales.

### S2 — Registros individuais (somente se aprovado)

- `PODE` — só com DPIA e necessidade legal. Tabela `fila_espera_registros`: `id` pseudônimo
  (uuidv7), `procedimento`, `unidade`, `data_entrada`, `situacao`, `prioridade` (sem diagnóstico),
  `metadata` mínimo; **sem nome/CPF/prontuário**; acesso apenas ao perfil de saúde; leitura auditada;
  retenção curta e expurgo.
- Nenhuma rota pública; nenhum export aberto; nenhum join com `servidores`.
- Se não for indispensável, **não criar** a tabela.

### S3 — e-Vacina (agregado)

- Módulo `Saude/Vacinacao` (token `vacinacao`, grupo `Saude`).
- Tabela `vacinacao_cobertura`: `id`, `vacina` (jsonb), `dose`, `faixa_etaria`, `cobertura`
  numeric/string, `competencia`, `fonte`, `publicado_em`; `UNIQUE (vacina, dose, faixa_etaria,
  competencia)`.
- Portal `/vacinacao` com filtros; tabela/indicadores; export CSV agregado; sitemap.
- Carga por CSV via importador (P9); **sem** buscar Google Sheets em runtime (zero dependência
  externa); o arquivo fonte é privado e versionado.
- CMS importa/publica; validação de percentual 0–100 e competência; sem dados individuais.

### S4 — Fechamento

- E2E: filtros, competência, CSV/ETag, ausência de PII; axe.
- `make check` 2× + `E2E=1`; cobertura ≥90%; PHPStan max 0.
- Revisão LGPD/DPO registrada; política de privacidade atualizada.
- Se o gate não for cumprido, a fase fica `bloqueada` e nenhum código é mergeado.

## 4. Fora de escopo

- Nome/CPF/prontuário de paciente em qualquer superfície pública.
- Integração com prontuário eletrônico/SUS, e-SUS, APIs hospitalares.
- Ranking de pacientes, priorização clínica, telemedicina.
- Dados de crianças/adolescentes sem base legal e salvaguardas.
- ETL do legado (ADR-042).

## 5. Fatias de sessão

| Sessão | Entrega | Prova | Depende |
|---|---|---|---|
| **P21.S1** | gate/DPIA + Fila agregada | sem PII; unique; filtros; CSV/ETag | P9/P12/P16 |
| **P21.S1b** | plano/serviços (18.1/18.2) | 1 ano/30 dias; filtros; CSV | S1 |
| **P21.S1c** | medicamentos/estoques (18.4/18.5) | REMUME; ≤15 dias; CSV | S1 |
| **P21.S1d** | Conselho de Saúde (18.6) | membros/contato/atas | S1 |
| **P21.S2** | Fila individual (se aprovado) | pseudônimo; acesso restrito; auditoria; retenção | S1 |
| **P21.S3** | e-Vacina agregada + import CSV | percentual; competência; sem Google em runtime | S1 |
| **P21.S4** | E2E, LGPD, 2× check | ausência de PII; axe; evidência no `kd` | S1–S3 |

## 6. DoD

- [ ] DPIA/base legal/DPO registrados; gate cumprido.
- [ ] Público apenas agregado; nenhuma PII em página/API/log/export.
- [ ] Individual (se existir) pseudonimizado, restrito, auditado e com retenção.
- [ ] CSV de origem privado; nenhuma dependência de Google Sheets em runtime.
- [ ] `make check` 2× + `E2E=1`; cobertura ≥90%; PHPStan max 0.
- [ ] PNTP 18.1/18.2: plano/programação/relatório e serviços/horários/profissionais.
- [ ] PNTP 18.3: fila agregada; 18.4/18.5: medicamentos/estoques (≤15 dias); 18.6: conselho.

## Fechamento — ficha de revisão

> **Obrigatório antes de fechar:** criar `_to_revision/P21-saude.md` e seguir
> `_to_revision/README.md` + `_to_revision/PROTOCOLO.md` (v2.0). A ficha não é gate de build; é a
> entrada da fila de revisão profunda.

- Cabeçalho: fase, `kd` épico/tasks/slices, âncoras (este arquivo, ADRs e código) e status
  `⬜ pendente` → `🟡 em revisão` → `✅ revisado` / `🔧 com correções`.
- Conteúdo: o que foi implementado, arquivos/superfícies a revisar, checklist D1–D14 aplicável,
  riscos e observações.
- Fechamento: preencher “Notas da revisão” com data/revisor/resultado e achados (`kd write
  --anchor`), atualizar a fila em `_to_revision/README.md` e `_to_revision/_inventario.md`.
- Achado com correção exige teste vermelho→verde; a fase só é `closed` no `kd` com a ficha
  registrada.

## 7. Riscos

| Risco | Mitigação |
|---|---|
| Expor paciente | público só agregado; DTO allowlist; teste de serialização |
| Base legal insuficiente | DPIA + DPO + bloqueio da fase |
| Dado individual persistido sem necessidade | não criar tabela; se criar, pseudônimo + retenção |
| Fonte externa instável (Google Sheets) | CSV importado/versionado; sem fetch em runtime |
| Reidentificação por célula pequena | supressão/agregação mínima; revisão LGPD |
| Integração hospitalar virar escopo | fora do MVP; ADR própria |

## 8. Retomada

```bash
kd prime
kd ask "fila espera SUS e-vacina LGPD agregado"
kd task list --ready
```

Ler: `dossie_modules/{fila-espera-sus,e-vacina}/**` → `MODULOS.md` §1/P21 →
`wiki/specs/05-seguranca-lgpd.md` → P9 (importador) → P12 (estatísticas públicas).
