# 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 0–100 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`.