diff --git a/PLANO_CERTIFICADO_FIDELIDADE.md b/PLANO_CERTIFICADO_FIDELIDADE.md new file mode 100644 index 0000000..8605640 --- /dev/null +++ b/PLANO_CERTIFICADO_FIDELIDADE.md @@ -0,0 +1,50 @@ +# Plano de Implementação: Certificado de Fidelidade Matemática (BrainWind) + +Este documento detalha a criação da página de Certificação de Compliance Estrutural do aplicativo, projetada para servir como ferramenta de transparência e argumento definitivo de confiabilidade comercial para engenheiros e empresas. + +--- + +## 🎯 Objetivo +Transformar a bateria interna de testes (Auditoria LLM) em um documento público, transparente e irrefutável. Mostrar ao usuário que o motor do BrainWind garante 100% de aderência à NBR 6123:2023 por ser matematicamente escrutinado pelas inteligências analíticas mais sofisticadas do planeta. + +--- + +## 🖥️ Arquitetura e Acesso + +- **Rota:** Criar uma nova página/rota `/certificado` (ou `/compliance`). +- **Navegação:** Adicionar um item de menu no painel lateral do app, posicionado estrategicamente na seção de documentos legais (logo abaixo de "Termos de Uso" ou "Política de Privacidade"). +- **Estética:** Visual limpo, formal, inspirado em laudos periciais e certificados de segurança (escudos, ícones de auditoria, badges de verificação). + +--- + +## 📄 Estrutura do Conteúdo (O Atestado) + +### 1. Herói da Página (Selo de Certificação) +- Selo visual de destaque: **"Certified by Generative Auditing - 100% NBR 6123 Compliant"**. +- Parágrafo de abertura assumindo o compromisso do BrainWind com a responsabilidade técnica e o risco zero em falhas de cálculo. + +### 2. A Metodologia do Duplo Fator (Como Testamos) +- **Cálculo Primário:** O motor de cálculo determinístico desenvolvido em TypeScript, estritamente mapeado sobre as equações e ábacos da Norma NBR 6123. +- **Validação Adversarial:** A explicação de que cada versão do código é "atacada" por uma bateria de mais de 100 cenários de ventos oblíquos, estruturas complexas e interpolações logarítmicas. Se a matemática divergir, o app não vai ao ar. + +### 3. O "Conselho de Auditoria" (Nossas IAs Avaliadoras) +- Explicar ao usuário a diferença entre IAs de texto comuns e IAs matemáticas. O BrainWind só é validado por modelos *Chain of Thought* (Raciocínio Profundo), que fazem a matemática reversa passo a passo. +- **Nomes Comerciais Listados:** + 1. **DeepSeek Reasoner:** Validação dedutiva e lógica matemática pesada. + 2. **Alibaba Qwen-Plus:** Checagem cruzada de normas e alto contexto técnico. + 3. **MiniMax M-Series:** Auditoria e exaustão de cálculo por passos. + 4. **Google Gemini Thinking:** Revisão metodológica de interpolações de ábacos. + +### 4. Transparência Total (A "Caixa Preta" Aberta) +- **Repositório de Transparência:** Uma seção no final da página contendo uma tabela ou botão de download. +- **O que é:** Disponibilização dos arquivos PDF (Laudos Didáticos que criaremos no plano `PLANO_MELHORIAS_AUDITORIA.md`) referentes à versão atual do app em produção. +- **Impacto:** O engenheiro que desconfiar do cálculo poderá baixar o laudo, ver o enunciado que o app enviou para as IAs, as tabelas que a IA decidiu usar e constatar que o valor numérico bateu 100%. Nenhuma confiança cega exigida, apenas prova matemática. + +--- + +## 🚀 Ordem de Implementação Sugerida + +1. **Passo 1 (Dependência):** Concluir completamente as melhorias do `PLANO_MELHORIAS_AUDITORIA.md` (especialmente a geração do PDF didático com enunciado, tabelas nbr e resultados). +2. **Passo 2:** Criar o componente React base para a rota `/certificado` e configurar o item no Menu/Sidebar do `App.tsx`. +3. **Passo 3:** Diagramar a interface usando Shadcn UI, inserindo os textos, selos e logotipos/nomes das tecnologias aprovadoras. +4. **Passo 4:** Subir o PDF do último laudo perfeito de produção para uma pasta pública do projeto (ex: `/public/reports/`) e "linkar" o botão de download no final da página do certificado. diff --git a/PLANO_MELHORIAS_AUDITORIA.md b/PLANO_MELHORIAS_AUDITORIA.md new file mode 100644 index 0000000..9c8a418 --- /dev/null +++ b/PLANO_MELHORIAS_AUDITORIA.md @@ -0,0 +1,72 @@ +# Plano de Implementação: Melhorias no Sistema de Auditoria LLM (BrainWind) + +Este documento detalha o plano estruturado para a atualização do sistema de testes e auditoria do BrainWind, focado em otimização de execução e na legibilidade didática dos resultados. + +--- + +## 🎯 Objetivos Principais +1. **Economia e Agilidade:** Permitir que o usuário escolha quais testes rodar, evitando execuções completas e longas desnecessárias. +2. **Didática de Engenharia:** Transformar o resultado do teste em um "Laudo Técnico" claro, mostrando o problema, os métodos normativos e a comparação de resultados. + +--- + +## 🛠️ Fase 1: Seleção Dinâmica de Testes (Filtros por Categoria) + +**Meta:** Modificar a interface para permitir a seleção de cenários individuais, categorias inteiras ou todos os cenários. + +### 1. Modificações na UI (`src/components/AuditPanel.tsx`) +- Criar um novo componente de **Accordion/Tree View** com Checkboxes. +- Agrupar visualmente os dados retornados por `generateAllScenarios()` utilizando o atributo `module` (Ex: "Galpões", "Pontes", "Silos"). +- Adicionar controles globais: "Selecionar Todos" e "Desmarcar Todos". + +### 2. Gerenciamento de Estado +- Implementar o estado `selectedScenarios: AuditScenario[]` no componente. +- O botão "Executar Auditoria" passará a enviar apenas o array filtrado para a função `runAudit()` no `runner.ts`. + +### 3. Ajustes de Validação +- Bloquear a execução (desabilitar botão) se nenhum cenário estiver selecionado. +- Atualizar a barra de progresso para usar a contagem de `selectedScenarios.length` em vez do total absoluto de testes. + +--- + +## 📊 Fase 2: Relatório de Resultados Didático e Detalhado + +**Meta:** Transformar o relatório de um simples "Passou/Falhou" para uma comparação técnica rica, citando a norma NBR 6123. + +### 1. Reestruturação do Prompt (`src/lib/audit/prompt-builder.ts`) +- Modificar o `system prompt` para exigir que a LLM preencha chaves JSON específicas obrigatórias: + - `enunciado_problema`: Resumo das condições de vento (V0, Terreno, etc). + - `tabelas_nbr_consultadas`: Quais tabelas/ábacos da NBR 6123 foram utilizados no cálculo teórico. + - `calculo_teorico_nbr`: O resultado matemático que a norma espera. + - `resultado_app`: O valor que o motor do BrainWind gerou. + - `desvio_percentual`: A diferença analítica entre o App e a Norma. + +### 2. Atualização de Tipagens (`src/lib/audit/types.ts`) +- Expandir as interfaces `ScenarioResult` e `AuditLLMResponse` para suportar os novos campos detalhados do laudo. + +### 3. Redesign do Popup de Detalhes (`src/components/AuditDetailPopup.tsx`) +- Abandonar o modelo atual de logs/raw JSON. +- Criar um **Card Comparativo (Lado a Lado)**: Motor BrainWind (Esquerda) vs Resultado LLM/Norma (Direita). +- Renderizar de forma estilizada as `tabelas_nbr_consultadas` com *Badges*. + +### 4. Upgrade nas Exportações (`export-audit-md.ts` e `export-audit-pdf.ts`) +- Adaptar o gerador de PDF/MD para incluir as novas seções. O relatório exportado deve servir como um "memorial de cálculo comparativo" validado por IA, pronto para ser entregue a uma certificadora de software. + +## 🛡️ Fase 3: Otimização de Resiliência no Parsing (Eliminação de Alertas) + +**Meta:** Evitar falhas de extração de JSON geradas por cálculos matemáticos da LLM contidos no bloco de raciocínio. + +### 1. Limpeza do Bloco de Pensamento (`src/lib/audit/parser.ts`) +- Implementar na função `parseLLMResponse` uma remoção prévia e estrita da tag `...`. +- Isso impedirá que expressões matemáticas contendo chaves (como `Cpe = max{ 0.8 }`) confundam a regex de extração do JSON, eliminando alertas de `Could not parse LLM response as JSON` nas primeiras tentativas. +- Garantir que apenas o conteúdo bruto pós-raciocínio seja repassado para as Regex de extração de JSON. + +--- + +## 🚀 Ordem de Execução Sugerida + +1. **Passo 1:** Alterar a interface (`AuditPanel.tsx`) para incluir as opções de seleção de testes e gerenciar os estados. +2. **Passo 2:** Melhorar o extrator (`parser.ts`) implementando a limpeza de blocos ``. +3. **Passo 3:** Atualizar a tipagem JSON e o `prompt-builder.ts`. Realizar testes individuais (com apenas 1 cenário selecionado) para validar a nova lógica. +4. **Passo 4:** Refatorar o Popup (`AuditDetailPopup.tsx`) para exibir os novos dados. +5. **Passo 5:** Finalizar ajustando a geração de PDF e MD com as novas informações estruturadas. diff --git a/app/public/laudos/auditoria-audit-1784141965623.pdf b/app/public/laudos/auditoria-audit-1784141965623.pdf new file mode 100644 index 0000000..805851b Binary files /dev/null and b/app/public/laudos/auditoria-audit-1784141965623.pdf differ diff --git a/app/src/App.tsx b/app/src/App.tsx index 4f74362..5434d55 100644 --- a/app/src/App.tsx +++ b/app/src/App.tsx @@ -11,10 +11,11 @@ import DynamicsModule from './pages/DynamicsModule'; import SettingsModule from './pages/SettingsModule'; import TowerModule from './pages/TowerModule'; import PiperackModule from './pages/PiperackModule'; +import CertificatePage from './pages/CertificatePage'; import { Home, Settings, Menu, Cylinder, Church, CircleDot, Square, Layers, BarChart3, Activity, Warehouse, - Settings2, Sun, Moon, Frame, FolderOpen, BookOpen, MoreVertical, Info + Settings2, Sun, Moon, Frame, FolderOpen, BookOpen, MoreVertical, Info, ShieldCheck } from 'lucide-react'; import { DropdownMenu, @@ -211,6 +212,19 @@ function AppLayout({ children }: { children: React.ReactNode }) { + + + + {!isCollapsed && Certificado de Fidelidade} + @@ -267,6 +281,11 @@ function AppLayout({ children }: { children: React.ReactNode }) { Termos de Uso } /> + + + Certificado + + @@ -403,6 +422,7 @@ function App() { } /> } /> } /> + } /> diff --git a/app/src/components/AuditPanel.tsx b/app/src/components/AuditPanel.tsx index 204be6a..c7c949f 100644 --- a/app/src/components/AuditPanel.tsx +++ b/app/src/components/AuditPanel.tsx @@ -11,7 +11,8 @@ import { SelectValue, } from '@/components/ui/select'; import { Play, FileDown, Loader2, AlertCircle } from 'lucide-react'; -import type { AuditConfig, AuditScenario, ScenarioResult, AuditReport } from '@/lib/audit/types'; +import type { AuditConfig, AuditScenario, ScenarioResult, AuditReport, ModuleType } from '@/lib/audit/types'; +import { MODULE_LABELS } from '@/lib/audit/types'; import { generateAllScenarios } from '@/lib/audit/scenarios'; import AuditDetailPopup from './AuditDetailPopup'; @@ -33,11 +34,12 @@ const DEFAULT_MODELS: Record = { export default function AuditPanel() { - const [config, setConfig] = useState({ + const [config, setConfig] = useState({ provider: 'openai', model: 'gpt-4o', apiKey: '', baseUrl: '', + testScope: 'all', }); const [status, setStatus] = useState<'idle' | 'generating' | 'running' | 'done' | 'error'>('idle'); @@ -51,6 +53,10 @@ export default function AuditPanel() { const [selectedScenario, setSelectedScenario] = useState(null); const [selectedResult, setSelectedResult] = useState(null); + const allScenarios = useRef(generateAllScenarios()).current; + + const [checkedScenarioIds, setCheckedScenarioIds] = useState([]); + const handleProviderChange = (val: string) => { setConfig((c) => ({ ...c, @@ -59,6 +65,16 @@ export default function AuditPanel() { })); }; + const handleScopeChange = (val: string) => { + setConfig((c) => ({ ...c, testScope: val })); + if (val !== 'all') { + const ids = allScenarios.filter(s => s.module === val).map(s => s.id); + setCheckedScenarioIds(ids); + } else { + setCheckedScenarioIds([]); + } + }; + const handleRun = useCallback(async () => { if (!config.apiKey && config.provider !== 'ollama') { setError('Informe uma API key para continuar.'); @@ -74,7 +90,10 @@ export default function AuditPanel() { setProgress(0); setStatus('generating'); - const scenarios = generateAllScenarios(); + let scenarios = generateAllScenarios(); + if (config.testScope && config.testScope !== 'all') { + scenarios = scenarios.filter(s => s.module === config.testScope && checkedScenarioIds.includes(s.id)); + } setTotal(scenarios.length); setStatus('running'); @@ -103,7 +122,7 @@ export default function AuditPanel() { setError(e instanceof Error ? e.message : 'Erro desconhecido'); setStatus('error'); } - }, [config]); + }, [config, checkedScenarioIds]); const handleExportPDF = () => { if (!report) return; @@ -170,8 +189,71 @@ export default function AuditPanel() { placeholder={config.provider === 'openrouter' ? 'https://openrouter.ai/api/v1 (padrão)' : config.provider === 'minimax' ? 'https://api.minimax.io/v1 (padrão)' : config.provider === 'ollama' ? 'http://localhost:11434 (padrão)' : 'https://api.openai.com/v1'} /> +
+ + +
+ {config.testScope && config.testScope !== 'all' && ( +
+
+ + +
+
+ {allScenarios + .filter(s => s.module === config.testScope) + .map(s => ( + + ))} +
+
+ )} +
+ + + + + + + + + + Repositório Oficial de Laudos + + + Abaixo estão listados os laudos comprobatórios gerados pelo Conselho de IAs. Clique para baixar ou visualizar. + + + +
+ {availableLaudos.length === 0 ? ( +
+ +

+ Nenhum laudo encontrado no servidor no momento. +

+

+ Os administradores podem adicionar laudos na pasta /public/laudos/ da VPS. +

+
+ ) : ( + availableLaudos.map((laudo, i) => ( +
+
+
+ +
+ + {laudo.filename} + +
+ +
+ )) + )} +
+ +
+ + + +
+
+
+
+ ); +}