feat(audit): adicionar módulo de auditoria + rebranding BrainWind
- AuditPanel, AuditDetailPopup, parser, runner, prompt-builder, serializer, scenarios, export-audit-pdf - i18n: strings novas para auditoria - Settings: integração com módulo de auditoria - types: tipos compartilhados do módulo audit
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
import { INVARIANTES_NBR6123 } from './invariantes';
|
||||
import { NORM_REFERENCE } from './norm-reference';
|
||||
import { serializeScenario } from './serializer';
|
||||
import type { AuditScenario } from './types';
|
||||
|
||||
const SYSTEM_PROMPT = `Você é um engenheiro estrutural especialista na norma brasileira NBR 6123:2023 (Ação do Vento em Edificações). Sua tarefa é AUDITAR os resultados de um aplicativo de cálculo de pressões de vento.
|
||||
|
||||
Você receberá uma lista de cenários de teste. Para cada cenário, o aplicativo calculou valores usando as fórmulas e tabelas da NBR 6123:2023. Sua missão é verificar se os cálculos estão CORRETOS, COERENTES e dentro das FAIXAS ESPERADAS.
|
||||
|
||||
## Regras da NBR 6123:2023 (invariantes)
|
||||
${INVARIANTES_NBR6123}
|
||||
|
||||
## Dados das Tabelas da NBR 6123:2023
|
||||
Estes são os dados numéricos oficiais das tabelas da norma. Use-os como referência para verificar os valores calculados.
|
||||
${NORM_REFERENCE}
|
||||
|
||||
## Suas tarefas para cada cenário
|
||||
1. Verificar se as fórmulas fundamentais estão corretas (q = 0.613 × Vk² / 1000, Vk = V0 × S1 × S2 × S3)
|
||||
2. Verificar se Cpi está no intervalo [-0.9, +0.9]
|
||||
3. Verificar se os coeficientes de pressão (Cpe) estão dentro das faixas esperadas
|
||||
4. Verificar se as relações físicas make sense (ex: Cpe barlavento > 0, Cpe sotavento < 0 para cilindros)
|
||||
5. Verificar se os limites normativos são respeitados
|
||||
6. Verificar coerência entre inputs e outputs
|
||||
|
||||
## Formato da resposta
|
||||
Retorne EXATAMENTE um JSON válido (sem markdown, sem code blocks) com o seguinte formato:
|
||||
|
||||
{
|
||||
"results": [
|
||||
{
|
||||
"scenarioId": "id-do-cenario",
|
||||
"verdict": "PASS" | "WARN" | "FAIL",
|
||||
"checks": [
|
||||
{
|
||||
"name": "nome do check",
|
||||
"status": "PASS" | "WARN" | "FAIL",
|
||||
"expected": "valor ou faixa esperada",
|
||||
"actual": "valor calculado no app",
|
||||
"explanation": "explicação curta do resultado"
|
||||
}
|
||||
],
|
||||
"summary": "resumo em 1 linha do resultado deste cenário",
|
||||
"llmNotes": "observações adicionais se houver anomalias ou observações importantes"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
## Regras importantes
|
||||
- status "PASS" = tudo correto
|
||||
- status "WARN" = valores válidos mas no limite ou com pequena imprecisão numérica
|
||||
- status "FAIL" = erro real que precisa ser corrigido
|
||||
- verdict "FAIL" = pelo menos 1 check FAIL
|
||||
- verdict "WARN" = pelo menos 1 check WARN e nenhum FAIL
|
||||
- verdict "PASS" = todos checks PASS
|
||||
- Seja preciso com números: compare os valores fornecidos com os ranges esperados
|
||||
- Se um valor está fora do range esperado, é FAIL
|
||||
- Se está dentro mas no limite (ex: -0.9, 0.9), é WARN
|
||||
- IMPORTANTE: Cpi DEVE estar em [-0.9, +0.9] — qualquer valor fora é FAIL
|
||||
- q deve ser sempre >= 0
|
||||
- Verifique a fórmula q = 0.613 × Vk² / 1000 para cada cenário`;
|
||||
|
||||
function buildScenariosSection(scenarios: AuditScenario[]): string {
|
||||
return scenarios.map(s => serializeScenario(s)).join('\n\n=== CENÁRIO ===\n\n');
|
||||
}
|
||||
|
||||
export function buildPrompt(scenarios: AuditScenario[]): { system: string; user: string } {
|
||||
const scenariosText = buildScenariosSection(scenarios);
|
||||
return {
|
||||
system: SYSTEM_PROMPT,
|
||||
user: `## Cenários para auditar
|
||||
|
||||
Abaixo estão ${scenarios.length} cenários de teste. Para cada um, os campos são:
|
||||
- scenarioId: identificador único
|
||||
- description: descrição do cenário
|
||||
- module: qual módulo do app (galpao, cilindro, etc.)
|
||||
- inputs: todos os dados de entrada fornecidos pelo usuário
|
||||
- intermediates: cálculos intermediários calculados pelo app (S2, Vk, q, Cpi, etc.)
|
||||
- outputs: resultados finais calculados pelo app
|
||||
- expectedRanges: faixas numéricas esperadas para valores-chave
|
||||
- nbrSection: seção da NBR 6123 aplicável
|
||||
|
||||
=== CENÁRIO ===
|
||||
|
||||
${scenariosText}
|
||||
|
||||
Retorne o JSON com os resultados da auditoria para TODOS os ${scenarios.length} cenários listados acima.`,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user