# 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.