documents/CHANGELOG.md
Breno Pires 2006f2475f
All checks were successful
CD / build (pull_request) Successful in 7s
feat(radar): validacao de conformidade por CNPJ (Radar de Conformidade)
Consulta Receita em cadeia de fallback e repasse da ANP (ISO-8859-1);
autoavaliacao de 17 itens por programa+loja+CNPJ em jsonb; motor de score
com regra de gargalo e tres numeros, espelho do frontend. 21 testes novos.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 02:55:57 -03:00

4.0 KiB
Raw Permalink Blame History

Changelog — documents

Formato baseado em Keep a Changelog; versionamento semântico.

[1.2.0] - 2026-08-11

Added

  • Radar de Conformidade (/radar/*): validação de conformidade por CNPJ. GET /radar/company/:cnpj consulta a Receita Federal em cadeia de fallback (BrasilAPI → minhareceita.org → CNPJá Open) e normaliza para um shape único — o QSA é reduzido à contagem (LGPD). GET /radar/anp/:cnpj repassa a API de revendedores da ANP (sem CORS na origem) com decode ISO-8859-1; falha degrada para available: false, nunca erro. GET/PUT /radar/assessments/:cnpj guarda a autoavaliação dos 17 itens por (programa, loja, CNPJ) e devolve o diagnóstico recalculado: score declarado, score verificado, índice de confiança, faixa AE, teto por gargalo (documento impeditivo), pendências ordenadas por ganho e calendário de vencimentos. Motor espelho do frontend (regras R1R7 da metodologia). Migration radar_assessment com up/down simétricos e idempotentes.

[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.