# História 17 — Configurações (seção Geral)

- **Spec:** `tests/17-cms-configuracoes.spec.ts`
- **Camadas:** E2E (Playwright + axe), PHPUnit feature (`ConfiguracoesCmsTest`)
- **Dono:** Infraestrutura / Configurações (`Modules\Infraestrutura\Configuracoes`)
- **Status:** ativa

## Jornada
Uma pessoa com `configuracoes.ver` abre o painel e percorre as seções de configuração; com
`configuracoes.editar`, altera a identidade da instituição. Um valor fora do schema é recusado
com erro acessível, sem gravar o documento.

## Critérios de aceite
1. O menu do painel mostra `Infraestrutura → Configurações` só para quem tem `configuracoes.ver`.
2. O índice lista as seções implementadas; a seção Geral abre com os valores resolvidos
   (banco → `config/` → default) e o formulário gerado do schema.
3. O `PUT` valida forma e schema, grava com ator, invalida o cache e devolve o aviso de sucesso.
4. Nome ausente e URL inválida retornam **422**, com resumo `role="alert"`, `aria-invalid` e foco
   no primeiro campo inválido.
5. `GET/PUT /configuracoes/{section}` fora da lista implementada responde **404** — `theme`
   (Aparência, P1.S2) é editor real e não mais 404; uma seção desconhecida continua 404.
6. Sem `configuracoes.editar`, a escrita responde **403** e não grava.
7. **Axe sem violações A/AA** no índice, no formulário e no estado de erro; o formulário funciona
   sem JS.

## Evidência
`make check` (PHPUnit) + `make check E2E=1` (projeto `cms-desktop`, spec `17-cms-configuracoes`).
