# PNTP — Licitações, SRP, PAC e contratos

> **Critérios:** 8.1–8.7, 9.1–9.4.
> **Fases:** [`P8`](../../implementation-phases/P8-licitacoes.md) e
> [`P23`](../../implementation-phases/P23-contratos-srp-pac.md).
> **Estado atual:** P8 cobre 8.1–8.4; 8.5/8.6 e 9.x estavam fora de escopo.

## 1. Licitações (P8, expansão)

### 8.1 Relação de licitações

Campos mínimos: número, ano, modalidade, objeto, data da sessão de abertura, **valor estimado e/ou
homologado**, situação. Incluir dispensas e inexigibilidades na mesma relação (com filtro próprio).
Filtros: exercício, mês, situação, modalidade; CSV; 3 anos.

- O modelo atual tem `valor` único. Adicionar `valor_estimado` e `valor_homologado` (ambos
  `numeric`, nullable); a UI mostra o que existir, sem inventar.
- `show_value=false` continua ocultando todos os valores em lista/detalhe/JSON-LD/sitemap/API.
- `data_abertura` é a data da sessão; `data_publicacao` é a publicação.

### 8.2 Editais

- Íntegra em PDF pesquisável, em andamento e encerrados; link same-origin via Media.

### 8.3 Documentos da licitação

- Tipos explícitos no anexo: `termo_referencia`, `justificativa`, `parecer_tecnico`,
  `parecer_juridico`, `orcamento`, `edital`, `ata`, `impugnacao`, `recurso`, `resultado`,
  `adjudicacao`, `homologacao`, `outro`.
- O critério exige a íntegra dos documentos das fases interna e externa; a lista de tipos é um
  checklist no CMS, não uma sugestão.
- PDF pesquisável; DOCX aceito quando for o original.

### 8.4 Dispensas e inexigibilidades

- Seção/filtro dedicado, com TR, justificativa de escolha e preço, caracterização da emergência
  (quando aplicável), pareceres e ato de homologação/ratificação.
- Não se aplica a dispensa de pequeno valor; ainda assim, se publicada, entra na relação.

### 8.5 Atas de adesão SRP

- `ata_srp`: número, ano, licitacao_id (quando houver), objeto, vigência, fornecedor, valor,
  `ata_media_id` (íntegra), `adesoes` (órgão aderente, quantidade, valor, data, documento).
- Portal `/transparencia/licitacoes/atas-srp` com lista/detalhe; filtros por exercício/fornecedor;
  CSV; 3 anos.

### 8.6 Plano de contratações anual (PAC)

- `plano_contratacoes`: exercício, versão, item, quantidade, valor estimado, data prevista,
  unidade, status, anexo.
- **Declaração de não elaboração não atende.** Se o cliente não tiver PAC, o critério fica sem
  pontuação; não simular.
- Portal `/transparencia/licitacoes/plano-contratacoes`; filtro por exercício; CSV.

### 8.7 Licitantes sancionados

- Já em P17 (`licitantes_sancionados`): nome, documento (CNPJ público; CPF só se indispensável e
  cifrado), processo, sanção, início/fim, motivo, ativa.
- P8/P23 linkam para a lista; não duplicar a tabela.

## 2. Contratos (P23)

### 9.1 Relação de contratos

- Ordem sequencial; contratado, valor, objeto, vigência, aditivos; filtro por período; CSV; 3 anos.
- `contratos`: `id`, `numero`, `ano`, `processo`, `licitacao_id` null, `contratado_nome`,
  `contratado_documento`, `objeto`, `valor` numeric, `vigencia_inicio`, `vigencia_fim`,
  `status`, `publicado_em`, `arquivado_em`, `metadata`.
- `contrato_aditivos`: `id`, `contrato_id`, `numero`, `tipo` (`valor|prazo|objeto|outro`),
  `valor`, `vigencia`, `objeto`, `media_id`.
- `UNIQUE (numero, ano)`; aditivo `UNIQUE (contrato_id, numero)`.

### 9.2 Inteiro teor

- Contrato + todos os aditivos em PDF pesquisável, via Media; link same-origin; nada de URL S3
  exposta.
- Contrato publicado é imutável; correção = errata/aditivo, não overwrite.

### 9.3 Fiscais de contrato

- Lista **separada** (não apenas no detalhe): fiscal, contrato, portaria, período, situação.
- `contrato_fiscais`: `id`, `contrato_id`, `nome`, `servidor_id` null, `portaria`, `inicio`, `fim`
  null, `active`.
- Portal `/transparencia/contratos/fiscais`; filtro por contrato/fiscal; CSV; 3 anos.

### 9.4 Ordem cronológica de pagamentos

- `contrato_pagamentos`: `id`, `contrato_id`, `vencimento`, `pagamento`, `credor`, `valor`,
  `categoria` (`bens|locacoes|servicos|obras`), `justificativa_ordem` (quando a ordem for alterada),
  `empenho_numero`.
- Publicar mensalmente; filtros por mês/categoria/credor; CSV; 3 anos.
- A justificativa é obrigatória quando o pagamento fura a ordem cronológica.

## 3. Portal, CMS e API

- Rotas: `/transparencia/licitacoes`, `/atas-srp`, `/plano-contratacoes`,
  `/transparencia/contratos`, `/fiscais`, `/ordem-pagamentos`.
- Cada página: tabela HTML, filtros server-side, CSV, `Atualizado em`, breadcrumb, JSON-LD,
  sitemap, busca; sem login.
- CMS: CRUD, upload Media, publicação/arquivamento, permissões `licitacoes.*`, `contratos.*`,
  `atas_srp.*`, `plano_contratacoes.*`.
- API read-only com `ETag`/rate limit; `show_value` respeitado.

## 4. Evidência e testes

- [ ] 8.1 valor estimado/homologado, dispensa/inexigibilidade, filtros e CSV.
- [ ] 8.3 tipos de documento obrigatórios; 8.4 seção dedicada.
- [ ] 8.5 ata SRP com adesões; 8.6 PAC real (sem declaração); 8.7 link para P17.
- [ ] 9.1 relação + aditivos; 9.2 inteiro teor; 9.3 lista separada de fiscais; 9.4 ordem + justificativa.
- [ ] 3 anos, `Atualizado em`, CSV determinístico, sem login, HTML.
- [ ] `make check` 2× + `E2E=1`; axe; cobertura; query count.

## 5. Riscos

| Risco | Mitigação |
|---|---|
| Contrato só no detalhe da licitação | módulo próprio P23, FK opcional |
| Aditivo sobrescreve contrato | contrato imutável; aditivo separado |
| Ordem de pagamento sem justificativa | campo obrigatório quando fora de ordem; teste |
| PAC simulado | não publicar declaração; critério sem ponto |
| Anexo privado exposto | `media.stream` + policy; teste 403 |
| Duas verdades de sancionado | P17 é dono; P8/P23 linkam |
