From 00714decd15ba79eb64b26db8371a4d8b834590e Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 4 Jul 2026 19:24:31 +0000 Subject: [PATCH] =?UTF-8?q?refactor(riskjud):=20fronteira=20c=C3=B3digo=3D?= =?UTF-8?q?f=C3=B3rmula=20/=20json=3Dcalibra=C3=A7=C3=A3o=20/=20css=3Dmarc?= =?UTF-8?q?a,=20proveni=C3=AAncia=20versionada=20e=20o=20molde=20(A2?= =?UTF-8?q?=E2=80=93A7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A2 — a view só formata: por_usuario, anpd_pct_faturamento (proximidade do teto do Art. 52) e exposicao_com_ano saem prontos de analisar(); todo ×100 de exibição passa por fmtPct (agora com casas configuráveis). O HTML não contém mais nenhuma conta que produza número de negócio. A3 — model.mjs deixa de conhecer valores: teto/alíquota do Art. 52 viram data.anpd e a referência IBM vira data.ibm_codb (brasil + por_setor), consolidando a duplicata que já existia no JSON. componentes() recebe data inteiro. Teste prova que trocar o teto no JSON muda o resultado sem tocar no .mjs. A4 — riskjud/CALIBRACAO.md versiona a proveniência: dado medido (acórdãos, DataJud, aderência 8,6%), lei (Art. 52), referência de mercado (IBM) e cada juízo editorial do modelo (SETOR_DANO_MULT com n amostral, P_SUE, ANPD_P_FINE etc.), mais o passo-a-passo de recalibração. data.json ganha _meta (versão/coleta/período/apontador). A5 — a paleta tem dono: tokens --brand-* publicados uma única vez em site-chrome.css; hub e RiskJud viram aliases; Plotly lê as cores via getComputedStyle — zero hex de marca fora do chrome (tints locais do disclaimer comentados como exceção). A6 — prosa injetada do dado: metodologia, faixa IBM, contexto, rodapé de fontes e versão/coleta usam spans data-dj preenchidos no renderContext a partir do data.json — atualizar o dado atualiza o texto. Única duplicação restante é a meta description (estática por natureza), justificada em comentário e listada no checklist de recalibração. A7 — README ganha "Como criar um app": as 5 convenções do molde (pasta própria; modelo puro (params, data); calibração no JSON com _meta + CALIBRACAO.md; node --test no CI; cores via var(--brand-*)). Testes: 4 novos (derivadas do A2, teto vindo do JSON, IBM por setor com fallback, exposição anual) — 11/11 no node --test (roda no CI). Sintaxe do módulo inline verificada; chaves data-dj ↔ injetor em bijeção. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_018qgnHZkTUK5SR4PRDfm3KA --- AUDITORIA-ARQUITETURA.md | 18 ++++---- README.md | 12 ++++++ index.html | 9 ++-- riskjud/CALIBRACAO.md | 54 ++++++++++++++++++++++++ riskjud/data.json | 25 +++++++++-- riskjud/index.html | 89 ++++++++++++++++++++++++++-------------- riskjud/model.mjs | 34 ++++++++------- riskjud/model.test.mjs | 38 +++++++++++++++++ site-chrome.css | 15 +++++-- 9 files changed, 229 insertions(+), 65 deletions(-) create mode 100644 riskjud/CALIBRACAO.md diff --git a/AUDITORIA-ARQUITETURA.md b/AUDITORIA-ARQUITETURA.md index 0fc9bae..b7e7a73 100644 --- a/AUDITORIA-ARQUITETURA.md +++ b/AUDITORIA-ARQUITETURA.md @@ -269,12 +269,12 @@ Ponto de atenção (não derruba a nota, mas é a única rachadura na interface) ## Checklist de verificação -- [ ] `node --test` existe e roda verde em `riskjud/model.test.mjs` (A1). -- [ ] Os testes cobrem: monotonicidade (cenário/base/faturamento/reincidência), `P_SUE_CAP`, teto Art. 52 (R$ 50M e 2%), `min 0.90`/`min 0.95`, `faturamento=0 ⇒ anpd=0`, `regimeDano`, e 1 caso-âncora vs. `data.json` (A1). -- [ ] Um erro deliberado de sinal no litígio faz **pelo menos um** teste falhar (A1). -- [ ] `riskjud/index.html` não contém nenhuma conta que produza número de negócio (só formatação); "por usuário" e "% do faturamento" saem de `analisar` (A2). -- [ ] `model.mjs` não contém `50_000_000`, `0.02` de multa nem os valores IBM cravados — todos vêm de `data` (A3). -- [ ] Existe artefato versionado (`data.json._meta` ou `CALIBRACAO.md`) com a proveniência de cada número calibrado (A4). -- [ ] Cada hex da paleta aparece uma vez só (em `site-chrome.css`); nenhum `#0F2940`/`#C9A227` no `