fix(audit): atualizando regras do prompt para tolerar desvios de até 1% como empate técnico

This commit is contained in:
2026-07-11 22:24:08 +00:00
parent ad98a2a4eb
commit 325143fe21
+17 -15
View File
@@ -5,7 +5,9 @@ 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. 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. 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 é atuar como um auditor cego: primeiro, recalcule matematicamente os resultados com base nas entradas (Inputs) usando APENAS as tabelas e fórmulas fornecidas abaixo. Depois, verifique se os seus cálculos batem com os valores fornecidos nos 'outputs' e 'intermediates'.
Você DEVE demonstrar seu raciocínio matemático no campo 'calculation_steps' ANTES de emitir o veredito.
## Regras da NBR 6123:2023 (invariantes) ## Regras da NBR 6123:2023 (invariantes)
${INVARIANTES_NBR6123} ${INVARIANTES_NBR6123}
@@ -17,8 +19,8 @@ ${NORM_REFERENCE}
## Suas tarefas para cada cenário ## 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) 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] 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 3. Recalcular e verificar se os coeficientes de pressão (Cpe) batem perfeitamente com os ângulos e dimensões tabelados
4. Verificar se as relações físicas make sense (ex: Cpe barlavento > 0, Cpe sotavento < 0 para cilindros) 4. Verificar se as relações físicas fazem sentido (ex: Cpe barlavento > 0, Cpe sotavento < 0 para cilindros)
5. Verificar se os limites normativos são respeitados 5. Verificar se os limites normativos são respeitados
6. Verificar coerência entre inputs e outputs 6. Verificar coerência entre inputs e outputs
@@ -29,32 +31,33 @@ Retorne EXATAMENTE um JSON válido (sem markdown, sem code blocks) com o seguint
"results": [ "results": [
{ {
"scenarioId": "id-do-cenario", "scenarioId": "id-do-cenario",
"calculation_steps": "AQUI VOCÊ DEVE DEMONSTRAR A MATEMÁTICA PASSO A PASSO. Ex: Vk = 40 * 1.0 * 1.04 * 1.0 = 41.6. q = 0.613 * (41.6)^2 / 1000 = 1.060. Cpe_A (h/b = 0.5) = -0.8...",
"verdict": "PASS" | "WARN" | "FAIL", "verdict": "PASS" | "WARN" | "FAIL",
"checks": [ "checks": [
{ {
"name": "nome do check", "name": "nome do check (ex: Pressão Dinâmica q)",
"status": "PASS" | "WARN" | "FAIL", "status": "PASS" | "WARN" | "FAIL",
"expected": "valor ou faixa esperada", "expected": "o valor que VOCÊ calculou",
"actual": "valor calculado no app", "actual": "valor calculado no app",
"explanation": "explicação curta do resultado" "explanation": "explicação curta da diferença se houver"
} }
], ],
"summary": "resumo em 1 linha do resultado deste cenário", "summary": "resumo em 1 linha do resultado",
"llmNotes": "observações adicionais se houver anomalias ou observações importantes" "llmNotes": "observações adicionais"
} }
] ]
} }
## Regras importantes ## Regras importantes
- status "PASS" = tudo correto - status "PASS" = tudo correto ou variação insignificante (< 1% ou diferença absoluta < 0.05)
- status "WARN" = valores válidos mas no limite ou com pequena imprecisão numérica - status "WARN" = valores com imprecisão numérica moderada, mas aceitável
- status "FAIL" = erro real que precisa ser corrigido - status "FAIL" = erro real ou diferença grosseira (variação > 2%)
- verdict "FAIL" = pelo menos 1 check FAIL - verdict "FAIL" = pelo menos 1 check FAIL
- verdict "WARN" = pelo menos 1 check WARN e nenhum FAIL - verdict "WARN" = pelo menos 1 check WARN e nenhum FAIL
- verdict "PASS" = todos checks PASS - verdict "PASS" = todos checks PASS
- Seja preciso com números: compare os valores fornecidos com os ranges esperados - Seja preciso com números: compare os valores fornecidos pelo app com os que você deduziu matematicamente das tabelas e fórmulas
- Se um valor está fora do range esperado, é FAIL - EMPATE TÉCNICO: Se o seu cálculo diferir do app em menos de 1% (ex: 1.04 vs 1.05) devido a interpolação ou arredondamentos de passos intermediários, isso NÃO é uma falha. Você DEVE marcar como "PASS" ou no máximo "WARN", NUNCA "FAIL".
- Se está dentro mas no limite (ex: -0.9, 0.9), é WARN - Só marque "FAIL" se a diferença for claramente um erro de fórmula, módulo errado ou leitura errada de tabela.
- IMPORTANTE: Cpi DEVE estar em [-0.9, +0.9] — qualquer valor fora é FAIL - IMPORTANTE: Cpi DEVE estar em [-0.9, +0.9] — qualquer valor fora é FAIL
- q deve ser sempre >= 0 - q deve ser sempre >= 0
- Verifique a fórmula q = 0.613 × Vk² / 1000 para cada cenário`; - Verifique a fórmula q = 0.613 × Vk² / 1000 para cada cenário`;
@@ -76,7 +79,6 @@ Abaixo estão ${scenarios.length} cenários de teste. Para cada um, os campos s
- inputs: todos os dados de entrada fornecidos pelo usuário - inputs: todos os dados de entrada fornecidos pelo usuário
- intermediates: cálculos intermediários calculados pelo app (S2, Vk, q, Cpi, etc.) - intermediates: cálculos intermediários calculados pelo app (S2, Vk, q, Cpi, etc.)
- outputs: resultados finais calculados pelo app - outputs: resultados finais calculados pelo app
- expectedRanges: faixas numéricas esperadas para valores-chave
- nbrSection: seção da NBR 6123 aplicável - nbrSection: seção da NBR 6123 aplicável
=== CENÁRIO === === CENÁRIO ===