🚀 Auto-deploy: BrainWind atualizado em 27/07/2026 23:46:33

This commit is contained in:
2026-07-27 23:46:33 +00:00
parent c2b741bcdf
commit c7d3f267ba
2 changed files with 74 additions and 1 deletions
+34 -1
View File
@@ -64,11 +64,18 @@ export function appendKgf(val: string | number): string {
export interface GenericPDFSection {
title: string;
type: 'table' | 'text' | 'grid';
type: 'table' | 'text' | 'grid' | 'math-card';
content?: string;
tableHeaders?: string[];
tableRows?: (string | number)[][];
gridItems?: { label: string; value: string | number }[];
mathSteps?: {
title: string;
formula: string;
calculation: string;
result: string;
note?: string;
}[];
}
export interface GenericPDFProps {
@@ -240,6 +247,32 @@ const GenericReportDocument = ({ moduleName, sections, wind, sceneImage }: Gener
<Text style={styles.text}>{appendKgf(sec.content)}</Text>
)}
{sec.type === 'math-card' && sec.mathSteps && (
<View style={styles.mathCard}>
{sec.mathSteps.map((step, sIdx) => (
<View key={sIdx} style={{ marginBottom: sIdx < sec.mathSteps!.length - 1 ? 8 : 2 }}>
<Text style={{ fontSize: 9.5, fontWeight: 'bold', color: '#4c1d95', marginBottom: 2 }}>
{step.title}
</Text>
<Text style={{ fontSize: 8.5, fontFamily: 'Roboto', color: '#1e293b', marginBottom: 1 }}>
Fórmula NBR 6123: {step.formula}
</Text>
<Text style={{ fontSize: 8.5, color: '#334155', marginBottom: 1 }}>
Cálculo: {step.calculation}
</Text>
<Text style={{ fontSize: 9, fontWeight: 'bold', color: '#047857', marginBottom: step.note ? 2 : 0 }}>
Resultado: {appendKgf(step.result)}
</Text>
{step.note && (
<Text style={{ fontSize: 7.5, color: '#64748b', fontStyle: 'italic' }}>
Nota: {step.note}
</Text>
)}
</View>
))}
</View>
)}
{sec.type === 'grid' && sec.gridItems && (
<View style={{ flexDirection: 'row', flexWrap: 'wrap' }}>
{sec.gridItems.map((item, i) => (
+40
View File
@@ -160,6 +160,46 @@ const ShelterModule: React.FC = () => {
},
],
},
{
title: `Demonstração dos Passos Matemáticos — Pressões Distribuídas por m² (Direção ${angleLabel})`,
type: 'math-card',
mathSteps: [
{
title: '1. Pressão na Cobertura (Fz / A_telhado)',
formula: 'p_telhado = q · |Cnf_vertical| ou p_telhado = Fz / (d · b)',
calculation: `${q.toFixed(2)} kN/m² · |${result.cnfVertical}| = ${(result.forces.fzUp / effAreaRoof).toFixed(2)} kN/m² (onde A_telhado = ${depth.toFixed(1)}m × ${width.toFixed(1)}m = ${effAreaRoof.toFixed(1)}m²)`,
result: `${(result.forces.fzUp / effAreaRoof).toFixed(2)} kN/m²`,
note: 'A solicitação de arrancamento atua uniformemente distribuída na projeção horizontal da cobertura.',
},
{
title: '2. Pressão na Parede Traseira (Fx / A_efetiva,fundo)',
formula: 'p_fundo = q · Cf_parede ou p_fundo = Fx / [ (b · h) · (φ_fundo) ]',
calculation: effAreaBack > 0
? `${q.toFixed(2)} kN/m² · ${result.cfBack} = ${(result.forces.fxBack / effAreaBack).toFixed(2)} kN/m² (área de incidência sólida = ${effAreaBack.toFixed(1)}m² para ${backClosure}% fechado)`
: `Parede 0% fechada (Sem fechamento traseiro) -> A_efetiva = 0.0 m² e Fx = 0.00 kN`,
result: effAreaBack > 0 ? `${(result.forces.fxBack / effAreaBack).toFixed(2)} kN/m²` : '0.00 kN/m² (0% fechado)',
note: 'O coeficiente de força e a área são proporcionais à taxa de fechamento da parede de fundo.',
},
{
title: '3. Pressão nas Paredes Laterais (Fy / A_efetiva,laterais)',
formula: 'p_lateral = q · Cf_lateral ou p_lateral = Fy / [ 2 · (d · h) · (φ_médio) ]',
calculation: effAreaSideTotal > 0
? `${q.toFixed(2)} kN/m² · ${result.cfSide} = ${(result.forces.fySide / effAreaSideTotal).toFixed(2)} kN/m² (área efetiva = ${effAreaSideTotal.toFixed(1)}m²)`
: `Sem paredes laterais selecionadas (0% esq + 0% dir) -> A_efetiva = 0.0 m² e Fy = 0.00 kN`,
result: effAreaSideTotal > 0 ? `${(result.forces.fySide / effAreaSideTotal).toFixed(2)} kN/m²` : '0.00 kN/m² (0% fechado)',
note: effAreaSideTotal > 0
? 'A solicitação lateral é distribuída sobre a área efetiva sólida existente nas paredes esq/dir.'
: 'Como nenhuma parede lateral foi adicionada (0%), a área de incidência é nula (0,0 m²) e a pressão atuante é zero.',
},
{
title: '4. Pressão Dinâmica Base do Vento (q)',
formula: 'q = 0,613 · Vk² [N/m²] = 0,000613 · Vk² [kN/m²] (NBR 6123 Sec. 4.2)',
calculation: `0,613 · (${Math.sqrt((q * 1000) / 0.613).toFixed(1)} m/s)² / 1000 = ${q.toFixed(2)} kN/m²`,
result: `${q.toFixed(2)} kN/m²`,
note: 'Pressão dinâmica de referência calculada com base na velocidade característica Vk no nível superior do pilar.',
},
],
},
{
title: 'Envoltória e Comparativo Normativo — As 3 Incidências de Vento (0° • 45° • 90°)',
type: 'table',