All checks were successful
CD / build (pull_request) Successful in 7s
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>
59 lines
4.0 KiB
Markdown
59 lines
4.0 KiB
Markdown
# 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 A–E, teto por gargalo (documento impeditivo), pendências
|
||
ordenadas por ganho e calendário de vencimentos. Motor espelho do frontend (regras R1–R7 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 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`.
|