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

59 lines
4.0 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.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`.