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>
89 lines
5.2 KiB
Markdown
89 lines
5.2 KiB
Markdown
# Histórico de mudanças com IA
|
||
|
||
Registro das alterações feitas neste repositório com apoio de IA (Claude), incluindo tempo aproximado.
|
||
Ordem cronológica — **mais recente no topo**.
|
||
|
||
## Formato de entrada
|
||
|
||
```
|
||
### YYYY-MM-DD HH:MM — Título curto
|
||
|
||
- **Tempo:** ~X min
|
||
- **Prompt:** resumo do pedido
|
||
- **Mudanças:** o que foi feito
|
||
- **Artefatos:** branch, PR #, commit hash
|
||
```
|
||
|
||
---
|
||
|
||
### 2026-08-11 03:00 — Radar de Conformidade: validação por CNPJ (1.2.0)
|
||
|
||
- **Tempo:** ~30 min
|
||
- **Prompt:** "em documentos, crie uma funcionalidade de validar conformidade" (spec: Obsidian
|
||
18 - Radar de Conformidade — metodologia do score + fontes de dados testadas em 11/08)
|
||
- **Mudanças:** módulo `radar`: `RadarLookupService` (Receita em cadeia BrasilAPI→minhareceita→CNPJá,
|
||
QSA reduzido a contagem por LGPD; repasse da ANP com decode ISO-8859-1, falha degrada para
|
||
`available:false`); `RadarScoreService` (motor de 17 itens/7 esferas, R1–R7, teto por gargalo,
|
||
três números — espelho do frontend); entity+migration `radar_assessment` (única por
|
||
programa+loja+CNPJ, respostas em jsonb, diagnóstico sempre recalculado); controller
|
||
`/radar/company|anp|assessments`. 21 testes novos (83 no total).
|
||
- **Artefatos:** branch `feat/compliance-radar`
|
||
|
||
---
|
||
|
||
### 2026-08-07 02:45 — Prazo de renovação dinâmico por órgão (Onda 1.2)
|
||
|
||
- **Tempo:** ~30 min
|
||
- **Prompt:** substituir o lead fixo do catálogo pelo tempo real observado de emissão por órgão na
|
||
carteira (v0 do plano de IA — estatística descritiva, sem ML).
|
||
- **Mudanças:** entity + migration `renewal_cycle` (gravada automaticamente quando um save zera um
|
||
protocolo; descarta intervalos implausíveis); `LeadTimeService` (mediana/p90 por tipo e por
|
||
órgão; `effectiveLeadDays = max(catálogo, mediana+15)` com amostra ≥ 3 — catálogo é piso);
|
||
`GET /compliance/lead-times`; campos aditivos `effectiveLeadDays`/`observed` no upcoming e no
|
||
alerts/preview, com o degrau `lead` da régua usando o prazo dinâmico; seed determinístico
|
||
`seed-demo-cycles.ts`; 16 testes novos (54 no total, 7 suites). CHANGELOG 1.1.0.
|
||
- **Artefatos:** branch `feat/dynamic-lead-times` (worktree `documentos/documents-service-lead`)
|
||
|
||
### 2026-08-07 — Análise por LLM com confiança por campo (Onda 1.1)
|
||
|
||
- **Tempo:** ~30 min
|
||
- **Prompt:** executar a Onda 1.1 do PLANO-DOCUMENTOS-IA: extração real por LLM atrás da
|
||
interface `DocumentAnalyzer`, com confiança por campo, dupla passada em datas e fallback.
|
||
- **Mudanças:** `analyzer/anthropicAnalyzer.ts` (Messages API via fetch nativo, content block de
|
||
document/image em base64, duas passadas com fraseados diferentes, merge com bônus de
|
||
concordância e teto 0,98, parse tolerante, timeout 60s); contrato ganha `fieldConfidences` e
|
||
`evidence` (interface + DTO, retrocompatível); factory `documentAnalyzerFactory` no módulo
|
||
(sem `ANTHROPIC_API_KEY` → heurística v1 intacta); testes com fetch mockado (8 casos: passadas
|
||
convergentes/divergentes, erro de API, tipo inválido, arquivo grande, factory); `.env.example`
|
||
e README. Build limpo; 46 testes verdes (38 + 8).
|
||
- **Artefatos:** branch `feat/llm-analyzer`
|
||
|
||
### 2026-08-07 — Criação do serviço (espelho do routines)
|
||
|
||
- **Tempo:** ~60 min
|
||
- **Prompt:** criar o microserviço `documents` para a feature Documentos e Licenças do painel,
|
||
espelhando o `routines` (padrões, storage, infra), com catálogo por UF, documentos com versões,
|
||
conformidade, análise de upload e régua de alertas.
|
||
- **Mudanças:**
|
||
- Esqueleto NestJS 10 + Fastify + TypeORM copiado do `routines` (main/app/ormconfig/
|
||
interceptor/tenant DTOs/storage/mocks de teste idênticos, nomes adaptados, prefixo `DOC`).
|
||
- Módulos: `catalog` (tipos + override por UF aplicado na leitura), `document` (obrigação única
|
||
por tipo/loja com unique no banco; renovação = versão nova + protocolo zerado; upload
|
||
multipart com campos antes do arquivo e checagem de `truncated`, igual às fotos de Rotinas),
|
||
`compliance` (score ponderado — porte fiel do `buildComplianceSummary` do painel),
|
||
`alerts` (régua lead/30/15/7/1/vencido; protocolado não alerta; envio real é v1.2).
|
||
- Regra de status em `status.util.ts` — porte fiel do `resolveStatus` da simulação do painel;
|
||
datas comparadas em meio-dia UTC para não depender de fuso/horário de verão.
|
||
- Análise plugável: interface `DocumentAnalyzer` + `KeywordAnalyzer` (v1); OCR/LLM troca o
|
||
provider `DOCUMENT_ANALYZER` sem tocar controller/service.
|
||
- Migration única: DDL + seed dos 15 tipos (cópia exata do catálogo do frontend, inserts
|
||
parametrizados por causa dos acentos) + 3 overrides de exemplo (AVCB SP/GO, LO SP).
|
||
- 38 testes (status, score, analyzer, save/renovação/protocolo/tenant, régua). Desvio
|
||
consciente do jest.config do routines: `storage/**` fora da cobertura (testar seria mockar o
|
||
SDK do GCS; controllers e interceptors já ficavam fora no original).
|
||
- Infra: Dockerfile, k8s/hml (deployment com cloudsql-proxy, service, ingress com
|
||
`proxy-body-size: 12m` para PDFs), cloudbuild/cd.yml adaptados.
|
||
- **Verificação:** `yarn build` limpo; `yarn test` 6 suites / 38 testes verdes, cobertura
|
||
98,5% stmts / 80,4% branches (mínimos 73/65).
|
||
- **Artefatos:** repo novo, branch master, commit inicial.
|