# PNTP — Obras e quantitativos

> **Critérios:** 10.1–10.4.
> **Fase:** [`P17`](../../implementation-phases/P17-obras-integridade.md).
> **Estado atual:** P17 tem obras e a visão paralisadas, mas sem percentual, quantitativos,
> medições e preços pagos.

## 1. Requisitos

| # | Critério | Classe | Prazo | Entrega |
|---|---|---|---|---|
| 10.1 | Informações sobre obras | Recomendado | 30 dias | objeto, situação, início, conclusão, empresa, **% concluído** |
| 10.2 | Quantitativos e preços contratados | Obrigatório | 25 dias úteis após assinatura | itens, quantidades, preços unitários, totais |
| 10.3 | Quantitativos executados e pagos | Obrigatório | 45 dias úteis após conclusão | executado/pago **por item** (não só global) |
| 10.4 | Obras paralisadas | Obrigatório | 45 dias úteis | motivo, responsável, previsão de reinício, processo/decisão se judicial |

## 2. Modelo

- `obras`: adicionar `percentual_concluido` numeric(5,2), `situacao_detalhe`, `empresa`,
  `valor_contratado`, `data_assinatura`, `data_paralisacao`, `motivo_paralisacao`,
  `responsavel_paralisacao`, `previsao_reinicio`, `processo_judicial`, `decisao_data`.
- `obra_itens`: `id`, `obra_id`, `item`, `descricao`, `unidade`, `quantidade_contratada`,
  `preco_unitario`, `valor_total`, `updated_at`.
- `obra_medicoes`: `id`, `obra_id`, `item_id`, `periodo`, `quantidade_executada`,
  `preco_unitario_pago`, `valor_pago`, `updated_at`.
- `obra_anexos` já existe; incluir `tipo` (`edital|contrato|projeto|medicao|foto|outro`) e
  `publico`.

Regras:

- 10.1: uma linha por obra; 10.2: itens contratados; 10.3: medições executadas/pagas; 10.4: visão
  `status=paralisada` com os campos de paralisação, sem segunda tabela.
- Valores numeric/string; nunca `float`.
- Importação CSV de itens/medições via P9; dry-run; sem ETL.
- Série histórica: exercício/obra; não apagar; arquivamento.

## 3. Portal e CMS

- `/obras` lista/filtro; `/obras/{slug}` detalhe com 10.1, 10.2, 10.3 (tabelas separadas), anexos.
- `/obras/paralisadas` visão/filtro com 10.4.
- Filtros por status/categoria/ano/empresa; CSV por tabela; `Atualizado em`; 3 anos.
- CMS: CRUD de obra/itens/medições; validação de quantidade/preço; permissões `obras.*`;
  publicação/arquivamento; auditoria.

## 4. Testes

- [ ] 10.1 % concluído, empresa, datas; 10.2 itens/preços/totais; 10.3 executado/pago por item.
- [ ] 10.4 motivo/responsável/previsão; obra judicial com processo/decisão; sem tabela duplicada.
- [ ] Valores decimais; CSV; 3 anos; `Atualizado em`; sem login.
- [ ] `make check` 2× + `E2E=1`; axe; query count.

## 5. Riscos

| Risco | Mitigação |
|---|---|
| Só valor global | itens + medições por item |
| Obra paralisada em tabela separada | visão/filtro; teste |
| `float` | numeric/string; teste |
| Medição sobrescrita | histórico por período; sem overwrite |
| CSV incompleto | colunas 10.2/10.3; teste |
