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

2.2 KiB
Raw Blame History

Changelog — documents

Formato baseado em Keep a Changelog; 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.