feat(radar): validação de conformidade por CNPJ (Radar de Conformidade) — 1.2.0 #2

Merged
breno.pires merged 1 commits from feat/compliance-radar into master 2026-08-11 12:19:30 +00:00
Owner

O que é

Módulo radar no microserviço documents: backend da nova página Validar conformidade do frontend (PR clubpetro-frontend#44).

Endpoints

  • GET /radar/company/:cnpj — identidade na Receita Federal em cadeia de fallback (BrasilAPI → minhareceita.org → CNPJá Open). 404 na primeira fonte é resposta definitiva; erro de rede cai para a próxima. LGPD: o QSA é reduzido à contagem — nome de sócio não sai do serviço.
  • GET /radar/anp/:cnpj — repasse da API de revendedores da ANP (sem CORS na origem) com decode ISO-8859-1 → UTF-8. Falha degrada para available: false, nunca derruba o diagnóstico.
  • GET/PUT /radar/assessments/:cnpj — autoavaliação dos 17 itens por (programa, loja, CNPJ), respostas em jsonb. O diagnóstico nunca é persistido: é recalculado a cada leitura, então regra nova de score vale imediatamente para avaliações antigas.

Motor de score

RadarScoreService — espelho do frontend (mesma decisão do painel de conformidade): 17 itens em 7 esferas com pesos somando 100 (probabilidade × severidade), três números (declarado, verificado, confiança), e as regras R1–R7 da metodologia — decaimento temporal, teto por gargalo (impeditivo faltante trava em 39; protocolado em 59; não informado em 79), "não sei" = 0,25, evidência não altera o declarado, declaração envelhece após 180 dias, "não se aplica" sai do denominador com renormalização.

Gates

  • Migration radar_assessment com up()/down() simétricos, IF NOT EXISTS, índice único por (programId, storeId, cnpj).
  • Sem segredo novo, sem .env, sem dependência nova — fetch nativo do Node 20.
  • NestJS 10 + TypeORM 0.3 + yarn; JwtAuthGuard + FiltersInterceptor como nos demais módulos.

Validação

  • yarn build ok; yarn test: 83 testes verdes (21 novos: 12 do motor + 9 do lookup, incluindo decode latin-1 da ANP e não-vazamento do QSA).

🤖 Generated with Claude Code

## O que é Módulo `radar` no microserviço `documents`: backend da nova página **Validar conformidade** do frontend (PR clubpetro-frontend#44). ## Endpoints - `GET /radar/company/:cnpj` — identidade na Receita Federal em cadeia de fallback (BrasilAPI → minhareceita.org → CNPJá Open). 404 na primeira fonte é resposta definitiva; erro de rede cai para a próxima. **LGPD:** o QSA é reduzido à contagem — nome de sócio não sai do serviço. - `GET /radar/anp/:cnpj` — repasse da API de revendedores da ANP (sem CORS na origem) com decode **ISO-8859-1 → UTF-8**. Falha degrada para `available: false`, nunca derruba o diagnóstico. - `GET/PUT /radar/assessments/:cnpj` — autoavaliação dos 17 itens por (programa, loja, CNPJ), respostas em jsonb. O diagnóstico **nunca é persistido**: é recalculado a cada leitura, então regra nova de score vale imediatamente para avaliações antigas. ## Motor de score `RadarScoreService` — espelho do frontend (mesma decisão do painel de conformidade): 17 itens em 7 esferas com pesos somando 100 (probabilidade × severidade), três números (declarado, verificado, confiança), e as regras R1–R7 da metodologia — decaimento temporal, **teto por gargalo** (impeditivo faltante trava em 39; protocolado em 59; não informado em 79), "não sei" = 0,25, evidência não altera o declarado, declaração envelhece após 180 dias, "não se aplica" sai do denominador com renormalização. ## Gates - Migration `radar_assessment` com `up()`/`down()` simétricos, `IF NOT EXISTS`, índice único por (programId, storeId, cnpj). - Sem segredo novo, sem `.env`, sem dependência nova — `fetch` nativo do Node 20. - NestJS 10 + TypeORM 0.3 + yarn; `JwtAuthGuard` + `FiltersInterceptor` como nos demais módulos. ## Validação - `yarn build` ok; `yarn test`: **83 testes verdes** (21 novos: 12 do motor + 9 do lookup, incluindo decode latin-1 da ANP e não-vazamento do QSA). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
breno.pires added 1 commit 2026-08-11 05:56:57 +00:00
feat(radar): validacao de conformidade por CNPJ (Radar de Conformidade)
All checks were successful
CD / build (pull_request) Successful in 7s
2006f2475f
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>
breno.pires merged commit 20d07231cf into master 2026-08-11 12:19:30 +00:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Clubpetro-Lab/documents#2
No description provided.