fix(audit): atualizando regras do prompt para tolerar desvios de até 1% como empate técnico
This commit is contained in:
@@ -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 ===
|
||||||
|
|||||||
Reference in New Issue
Block a user