# 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 `<think>...</think>`.
- 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 `<think>`.
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.
