documents/CHANGELOG.md
Breno Pires c717fdb81e
All checks were successful
CD / build (pull_request) Successful in 7s
Merge branch 'feat/dynamic-lead-times' into feat/ai-onda-1
# Conflicts:
#	AI-HISTORY.md
#	CHANGELOG.md
2026-08-07 02:45:24 -03:00

46 lines
3.1 KiB
Markdown
Raw Permalink 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
- **Análise por LLM** (`AnthropicAnalyzer`, Onda 1.1 do PLANO-DOCUMENTOS-IA): com
`ANTHROPIC_API_KEY`, o `POST /documents/analyze` extrai tipo, datas e número do PDF/imagem via
modelo multimodal (default Haiku, configurável por `DOCUMENTS_LLM_MODEL`), com **confiança por
campo** (`fieldConfidences`), **citação do trecho de origem** (`evidence`) e **dupla passada em
datas** — divergência entre as duas leituras zera o campo e devolve `dateMismatch` (data errada
é pior que campo vazio). Warnings novos no contrato: `dateMismatch`, `lowConfidence`,
`llmUnavailable`.
- Fallback gracioso: erro de API, arquivo >10MB ou mime não suportado caem na heurística por nome
de arquivo com `llmUnavailable` — a análise nunca falha por causa do LLM. Sem a chave, o
comportamento v1 fica intacto (factory em `document.module.ts`).
- **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`.