documents/CHANGELOG.md
Breno Pires 56368d5517 feat(compliance): prazo de renovacao dinamico pelo tempo observado por orgao
Cada renovacao que sai do orgao vira ciclo observado (protocolo -> emissao);
a mediana por orgao/tipo estica o prazo de inicio de renovacao quando o orgao
esta comprovadamente mais lento que o catalogo. O catalogo e piso legal: os
120 dias da LO nunca encolhem. Campos aditivos effectiveLeadDays/observed no
upcoming e nos alertas; GET /compliance/lead-times; seed deterministico.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-07 02:44:25 -03:00

36 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Changelog — documents
Formato baseado em [Keep a Changelog](https://keepachangelog.com/en/1.0.0/); versionamento semântico.
## [1.1.0] - 2026-08-07
### Added
- **Prazo de renovação dinâmico por órgão (Onda 1.2 do plano de IA).** Cada renovação que sai do
órgão vira um ciclo observado (`renewal_cycle`: protocolo → emissão), gravado automaticamente no
save que zera um protocolo; ciclos implausíveis (negativos ou > 2 anos) são descartados com log.
- `GET /compliance/lead-times?programId`: mediana, p90 e prazo efetivo por órgão e por tipo.
Régua: `effectiveLeadDays = max(catálogo, mediana + 15)` com amostra ≥ 3 — o catálogo é piso
legal (os 120 dias da LO nunca encolhem), a estatística só estica quando o órgão está lento.
- `GET /compliance/upcoming` e `GET /alerts/preview` passam a carregar os campos aditivos
`effectiveLeadDays` e `observed` `{count, medianDays}`; o degrau `lead` da régua de alertas
dispara pelo prazo dinâmico ("a SEMAD está levando 140 dias — comece agora").
- Seed de demonstração `src/scripts/seed-demo-cycles.ts` (determinístico) para o LAB.
## [1.0.0] - 2026-08-07
### Added
- Catálogo legal de postos com 15 obrigações semeadas por migration (Resolução ANP 948/2023,
CONAMA 273/2000, Portaria INMETRO 227/2022, IN IBAMA 22/2021, NRs 1/7/20/23) e variação por UF
(`document_type_uf_override`; exemplos: AVCB SP 36 meses, GO 12; LO CETESB 60 meses/120 dias).
- Documentos da loja com trilha de versões (renovação nunca sobrescreve) e upload de PDF em bucket
GCS privado com URL assinada de vida curta.
- Status derivado na leitura (`valid`/`expiringSoon`/`inRenewal`/`expired`) com a regra do
protocolo tempestivo: renovação protocolada mantém o documento operante.
- Resumo de conformidade com score 0100 ponderado por criticidade (interdição 3, multa 2,
administrativa 1) e contagem de pendências críticas.
- Análise de upload plugável (`DocumentAnalyzer`): v1 heurística por keywords do catálogo;
OCR/LLM entra no mesmo ponto na v1.1.
- Régua de alertas (lead do tipo/30/15/7/1/vencido) com `GET /alerts/preview`; envio real
(WhatsApp/e-mail) é v1.2.
- Infra completa: Dockerfile, k8s/hml, cd.yml via Cloud Build — mesmo desenho do `routines`.