/** * Catálogo de Perfis - Sistema completo de consulta * Integra dados dos CSVs brasil_completo com informações técnicas */ console.log('📐 Módulo perfis-catalog.js carregado'); // ======================================== // CANTONEIRAS // ======================================== function getCantoneirasContent() { console.log('🔧 getCantoneirasContent() chamada'); return `
📐 Cantoneiras - Catálogo Completo Brasil
Perfis de abas iguais laminados a quente - 39 modelos disponíveis
🔍 Filtros de Busca
📊 Tabela de Cantoneiras (39 modelos)
Designação Lado (mm) Espessura (mm) Peso (kg/m) Área (cm²) Momento Inércia (cm⁴) Raio Giração (cm) Categoria Ações
📌 Total: 39 modelos encontrados
📋 Especificações Técnicas Completas

🔧 Descrição Geral

Cantoneiras de aço laminadas a quente com abas iguais, seção em L

Perfis estruturais versáteis amplamente utilizados em construção civil, naval e industrial. Fabricados por laminação a quente, apresentam excelente relação resistência/peso.

📏 Faixa de Dimensões

  • Lado: 25mm a 200mm
  • Espessura: 3mm a 20mm
  • Quantidade de modelos: 39 perfis diferentes

📦 Distribuição dos Modelos

Categoria Faixa Quantidade Aplicação Típica
Pequena L25 - L50 12 modelos Estruturas leves, suportes
Média L63 - L75 9 modelos Treliças, galpões pequenos
Grande L100 7 modelos Estruturas médias, torres
Muito Grande L125 4 modelos Estruturas pesadas, pontes
Extra-Grande L150 4 modelos Grandes vãos, offshore
Massiva L200 3 modelos Estruturas críticas, navais

🔬 Qualidades Disponíveis (SAE)

Qualidade SAE Aplicação Fy (MPa) Fu (MPa)
SAE 1008-1015 Básico - Uso geral 210 400
SAE 1020-1025 Médio - Estrutural 250 450
SAE 1035-1045 Alto - Crítico 280 530

📐 Comprimentos Comerciais

  • Padrão: 6m, 9m, 12m, 13.5m
  • Sob encomenda: Cortes customizados disponíveis
  • Tolerância: ±10mm (NBR 9067)

🎨 Acabamentos Disponíveis

  • Laminado a quente (padrão): Acabamento rugoso com escamas de laminação
  • Galvanizado (sob encomenda): Proteção contra corrosão, +15-20% custo

📜 Normas Aplicáveis

  • ABNT NBR 9067: Cantoneiras de abas iguais - Dimensões
  • ABNT NBR 9064: Cantoneiras de aço - Tolerâncias
  • ASTM A36: Especificação para aço estrutural carbono
  • EN 10025-2: Produtos laminados a quente
🏭 Fabricantes e Distribuição no Brasil

🏢 Principais Fabricantes

Fabricante Participação Localização Especialidade
🥇 Gerdau ~45% Nacional (múltiplas unidades) Todos os tamanhos
CSN ~25% Volta Redonda/RJ Médios e grandes
Usiminas ~15% Ipatinga/MG Grandes perfis
Siderúrgica Toquinho ~8% Regional Pequenos e médios
Vallourec ~5% Belo Horizonte/MG Especiais
Aços Villares ~2% São Paulo/SP Alta qualidade

⏱️ Prazos de Entrega

Tipo Prazo Observações
Estoque 2-5 dias Tamanhos comuns (L50-L100)
Sob encomenda 7-15 dias Tamanhos especiais ou grandes volumes
Galvanizado +5-10 dias Adicional ao prazo base

📦 Embalagem e Transporte

  • Embalagem: Feixes com cintas de aço
  • Peso típico por feixe: 500-2000 kg
  • Identificação: Etiqueta com especificação e lote
  • Transporte: Caminhão truck ou carreta
💰 Preços e Fatores de Custo (2025)

💵 Faixa de Preços por Kg

Categoria Preço Mínimo (R$/kg) Preço Máximo (R$/kg) Preço Médio (R$/kg)
Pequenas (L25-L50) R$ 4.55 R$ 7.15 R$ 5.85
Médias (L63-L75) R$ 3.85 R$ 6.05 R$ 4.95
Grandes (L100+) R$ 3.50 R$ 5.50 R$ 4.50

📊 Fatores de Preço Especiais

Fator Impacto no Preço Observações
Pequenas (L25-L40) +30% Menor demanda, produção especial
Grandes (L150-L200) -5% a -10% Economia de escala
Volume >10 ton -10% a -15% Desconto por volume
Galvanizado +15% a +20% Processo adicional
Corte customizado +R$ 50-150/corte Taxa fixa por corte

🔢 Calculadora de Preço Estimado

🔧 Aplicações Principais e Recomendações

🏗️ Aplicações por Setor

Setor Aplicações Tamanhos Típicos
Construção Civil Galpões, edifícios, estruturas metálicas L50 - L100
Treliças Coberturas, pontes, torres L63 - L125
Naval Estruturas de embarcações, reforços L75 - L150
Industrial Suportes, plataformas, escadas L40 - L100
Offshore Plataformas, estruturas marítimas L125 - L200
Pontes Estruturas principais, contraventamento L100 - L200

⚙️ Compatibilidade de Conexões

  • Parafusos estruturais: M12 a M36 (conforme tamanho)
  • Soldagem: Eletrodo E7018 (SMAW) ou GMAW
  • Furação: Fácil execução, furos de 13-40mm típicos
  • Ligações: Chapas de gusset, cantoneiras de ligação

🔧 Serviços Adicionais Disponíveis

  • Corte linear: Corte em comprimentos específicos
  • Furação em CNC: Furos precisos conforme projeto
  • Pintura epóxi: Proteção anticorrosiva
  • Galvanização: Imersão a quente (sob encomenda)

⚠️ Recomendações de Uso

  • Verificar flambagem: Cantoneiras são suscetíveis à flambagem lateral
  • Considerar peso: Planejar transporte e içamento adequados
  • Furação fácil: Ideal para conexões parafusadas
  • Soldagem: Pré-aquecimento pode ser necessário para espessuras >12mm
  • Proteção: Pintura ou galvanização recomendada para ambientes agressivos

📚 Observações Técnicas

  • Comercializado em feixes com cintas de aço
  • Tolerâncias conforme NBR 9064: ±10mm comprimento
  • Acabamento rugoso padrão (escamas de laminação)
  • Identificação por tinta ou etiqueta no feixe
  • Certificado de qualidade 3.1 disponível sob solicitação
`; // Auto-carregar dados das cantoneiras quando o conteúdo for renderizado (function() { console.log('🚀 Script inline de auto-carregamento executado'); // Aguardar um pouco para garantir que o DOM está pronto setTimeout(async function() { console.log('⏰ Timeout executado, tentando carregar cantoneiras...'); const tbody = document.getElementById('cantoneiras-tbody'); if (!tbody) { console.error('❌ Elemento tbody não encontrado no auto-load'); return; } console.log('✅ Elemento tbody encontrado, iniciando carregamento...'); // Verificar se a função existe if (typeof carregarCantoneiras === 'function') { console.log('✅ Função carregarCantoneiras encontrada, executando...'); await carregarCantoneiras(); } else { console.error('❌ Função carregarCantoneiras não encontrada'); console.log('Tentando carregamento direto...'); // Fallback: carregar diretamente try { const response = await fetch('BD/perfis/cantoneiras_brasil_completo.csv'); if (!response.ok) throw new Error('Erro ao carregar CSV'); const csvText = await response.text(); const linhas = csvText.trim().split('\\n'); const dados = []; for (let i = 1; i < linhas.length; i++) { const linha = linhas[i].trim(); if (!linha) continue; const colunas = linha.split(','); if (colunas.length >= 9) { dados.push({ id: colunas[0].trim(), nome: colunas[1].trim(), lado_mm: parseFloat(colunas[2]), espessura_mm: parseFloat(colunas[3]), peso_kg_m: parseFloat(colunas[4]), area_cm2: parseFloat(colunas[5]), momento_inercia_cm4: parseFloat(colunas[6]), raio_giracao_cm: parseFloat(colunas[7]), tipo: colunas[8].trim() }); } } console.log('✅ Dados carregados:', dados.length, 'cantoneiras'); // Exibir na tabela tbody.innerHTML = dados.map(item => ` \${item.nome} \${item.lado_mm} \${item.espessura_mm} \${item.peso_kg_m.toFixed(2)} \${item.area_cm2.toFixed(2)} \${item.momento_inercia_cm4.toFixed(2)} \${item.raio_giracao_cm.toFixed(2)} \${item.tipo} `).join(''); console.log('✅ Tabela preenchida com sucesso!'); } catch (error) { console.error('❌ Erro no fallback:', error); tbody.innerHTML = ` ❌ Erro ao carregar dados: \${error.message}

`; } } }, 500); // Aguardar 500ms })(); } // Função para trocar tabs de perfis /* Removido: definição duplicada de switchPerfilTab (versão simplificada) */ // Função para calcular preço de cantoneira function calcularPrecoCantoneira() { const peso = parseFloat(document.getElementById('calc-peso').value); const comprimento = parseFloat(document.getElementById('calc-comprimento').value); const quantidade = parseInt(document.getElementById('calc-quantidade').value); const precoKg = parseFloat(document.getElementById('calc-preco-kg').value); const pesoTotal = peso * comprimento * quantidade; const precoTotal = pesoTotal * precoKg; document.getElementById('calc-resultado').innerHTML = `

💰 Resultado do Cálculo

Peso Total
${pesoTotal.toFixed(2)} kg
Preço Total
R$ ${precoTotal.toFixed(2)}
Preço por Peça
R$ ${(precoTotal / quantidade).toFixed(2)}
`; } // Exportar funções window.getCantoneirasContent = getCantoneirasContent; window.calcularPrecoCantoneira = calcularPrecoCantoneira; // ======================================== // CARREGAMENTO E FILTROS DE DADOS // ======================================== // Cache de dados let cantoneirasData = []; // FUNÇÕES DE CARREGAMENTO DE DADOS // ======================================== /** * Carrega e exibe dados das cantoneiras do CSV * VERSÃO ATUALIZADA: Usa Data Manager para cache inteligente */ async function carregarCantoneiras() { console.log('📊 carregarCantoneiras() - INICIANDO'); console.log('🔍 Verificando disponibilidade:'); console.log(' - carregarCantoneirasV2:', typeof carregarCantoneirasV2); console.log(' - window.dataManager:', typeof window.dataManager); console.log(' - exibirCantoneirasV2:', typeof exibirCantoneirasV2); // Aguardar Data Manager estar pronto (máximo 3 segundos) let tentativas = 0; while (!window.dataManager && tentativas < 30) { console.log(`⏳ Aguardando Data Manager... (tentativa ${tentativas + 1}/30)`); await new Promise(resolve => setTimeout(resolve, 100)); tentativas++; } // Verificar se Data Manager está disponível if (typeof carregarCantoneirasV2 === 'function' && window.dataManager) { console.log('✅ Usando Data Manager V2'); await carregarCantoneirasV2(); } else { console.warn('⚠️ Data Manager V2 não disponível após espera. Usando método legado...'); console.log(' Motivo:', !window.dataManager ? 'dataManager não existe' : 'carregarCantoneirasV2 não é função'); // Fallback para método antigo se necessário try { const response = await fetch('BD/perfis/cantoneiras_brasil_completo.csv'); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const csvText = await response.text(); const linhas = csvText.trim().split('\n'); const dados = []; for (let i = 1; i < linhas.length; i++) { const linha = linhas[i].trim(); if (!linha) continue; const colunas = linha.split(','); if (colunas.length >= 9) { dados.push({ id: colunas[0].trim(), nome: colunas[1].trim(), lado_mm: parseFloat(colunas[2]), espessura_mm: parseFloat(colunas[3]), peso_kg_m: parseFloat(colunas[4]), area_cm2: parseFloat(colunas[5]), momento_inercia_cm4: parseFloat(colunas[6]), raio_giracao_cm: parseFloat(colunas[7]), tipo: colunas[8].trim() }); } } window.cantoneirasData = dados; exibirCantoneiras(dados); } catch (error) { console.error('❌ Erro ao carregar cantoneiras:', error); document.getElementById('cantoneiras-tbody').innerHTML = ` ❌ Erro ao carregar dados: ${error.message} `; } } } /** * Exibe cantoneiras na tabela */ function exibirCantoneiras(dados) { console.log('📋 exibirCantoneiras() chamada com', dados?.length, 'itens'); const tbody = document.getElementById('cantoneiras-tbody'); if (!tbody) { console.error('❌ Elemento cantoneiras-tbody NÃO encontrado!'); return; } console.log('✅ Elemento tbody encontrado:', tbody); if (!dados || dados.length === 0) { console.warn('⚠️ Nenhum dado para exibir'); tbody.innerHTML = ` Nenhuma cantoneira encontrada `; return; } console.log('✅ Gerando HTML para', dados.length, 'cantoneiras...'); tbody.innerHTML = dados.map(item => ` ${item.nome} ${item.lado_mm} ${item.espessura_mm} ${item.peso_kg_m.toFixed(2)} ${item.area_cm2.toFixed(2)} ${item.momento_inercia_cm4.toFixed(2)} ${item.raio_giracao_cm.toFixed(2)} ${item.tipo} `).join(''); // Atualizar contador const totalEl = document.getElementById('cant-total'); if (totalEl) { totalEl.textContent = dados.length; } } /** * Retorna cor do badge baseado no tipo */ function getBadgeColor(tipo) { const cores = { 'Pequena': 'info', 'Média': 'success', 'Grande': 'warning', 'Muito Grande': 'warning', 'Extra-Grande': 'error', 'Massiva': 'error' }; return cores[tipo] || 'info'; } /** * Filtra cantoneiras baseado nos critérios * VERSÃO ATUALIZADA: Usa Data Manager V2 se disponível */ function filtrarCantoneiras() { // Usar versão V2 se disponível if (typeof filtrarCantoneirasV2 === 'function') { filtrarCantoneirasV2(); return; } // Fallback para versão legada if (!window.cantoneirasData) { console.warn('⚠️ Dados não carregados ainda'); return; } const tamanho = document.getElementById('cant-tamanho')?.value || ''; const pesoMax = parseFloat(document.getElementById('cant-peso-max')?.value) || Infinity; const busca = document.getElementById('cant-busca')?.value.toLowerCase() || ''; const filtrados = window.cantoneirasData.filter(item => { const matchTamanho = !tamanho || item.tipo === tamanho; const matchPeso = item.peso_kg_m <= pesoMax; const matchBusca = !busca || item.nome.toLowerCase().includes(busca); return matchTamanho && matchPeso && matchBusca; }); console.log(`🔍 Filtrados: ${filtrados.length} de ${window.cantoneirasData.length}`); exibirCantoneiras(filtrados); } /** * Limpa filtros * VERSÃO ATUALIZADA: Usa Data Manager V2 se disponível */ function limparFiltrosCantoneiras() { // Usar versão V2 se disponível if (typeof limparFiltrosCantoneirasV2 === 'function') { limparFiltrosCantoneirasV2(); return; } // Fallback para versão legada const tamanhoEl = document.getElementById('cant-tamanho'); const pesoEl = document.getElementById('cant-peso-max'); const buscaEl = document.getElementById('cant-busca'); if (tamanhoEl) tamanhoEl.value = ''; if (pesoEl) pesoEl.value = ''; if (buscaEl) buscaEl.value = ''; if (window.cantoneirasData) { exibirCantoneiras(window.cantoneirasData); } } /** * Mostra detalhes de uma cantoneira específica */ function verDetalhesCantoneira(id) { if (!window.cantoneirasData) return; const item = window.cantoneirasData.find(c => c.id === id); if (!item) return; // Criar modal com detalhes const modalHTML = ` `; // Adicionar ao body const modalDiv = document.createElement('div'); modalDiv.innerHTML = modalHTML; document.body.appendChild(modalDiv.firstElementChild); } /** * Fecha modal de detalhes */ function fecharModalDetalhes(event) { if (event && event.target.className !== 'modal active') return; const modal = document.getElementById('modal-detalhes-cant'); if (modal) { modal.remove(); } } /** * Adiciona CSS para badges */ if (!document.getElementById('perfis-catalog-styles')) { const style = document.createElement('style'); style.id = 'perfis-catalog-styles'; style.textContent = ` .badge { display: inline-block; padding: 4px 8px; border-radius: 4px; font-size: 11px; font-weight: 600; text-transform: uppercase; } .badge-info { background: rgba(59, 130, 246, 0.15); color: #3b82f6; border: 1px solid rgba(59, 130, 246, 0.3); } .badge-success { background: rgba(34, 197, 94, 0.15); color: #22c55e; border: 1px solid rgba(34, 197, 94, 0.3); } .badge-warning { background: rgba(245, 158, 11, 0.15); color: #f59e0b; border: 1px solid rgba(245, 158, 11, 0.3); } .badge-error { background: rgba(239, 68, 68, 0.15); color: #ef4444; border: 1px solid rgba(239, 68, 68, 0.3); } .table-container { overflow-x: auto; margin: 16px 0; } .table-container table { width: 100%; border-collapse: collapse; font-size: 13px; } .table-container th { background: var(--color-bg-2); padding: 10px; text-align: left; font-weight: 700; border-bottom: 2px solid var(--color-border); color: var(--color-gray-200); /* texto muito claro para alto contraste */ } .table-container th sup { color: inherit; font-weight: 700; opacity: 1; } .table-container td { padding: 8px 10px; border-bottom: 1px solid var(--color-border); } .table-container tr:hover { background: var(--color-bg-1); } .btn-sm { padding: 4px 8px; font-size: 12px; } `; document.head.appendChild(style); } console.log('✅ Funções de carregamento de cantoneiras registradas'); // ======================================== // FUNÇÕES PLACEHOLDER PARA OUTROS PERFIS // ======================================== function getBarrasRedondasContent() { return `
⚫ Barras Redondas
Catálogo completo de barras redondas estruturais

📊 Barras Redondas Disponíveis

Total: - diâmetros

Designação Diâmetro (mm) Peso (kg/m) Área (cm²) Categoria Ações
Carregando barras redondas...

📋 Especificações Técnicas Completas

🔧 Descrição Geral

Barras redondas laminadas a quente e trefiladas

Perfis maciços circulares amplamente utilizados em construção mecânica, estruturas, eixos e componentes. Fabricados por laminação a quente ou trefilação a frio para melhor acabamento.

📏 Faixa de Dimensões

  • Diâmetros: 6mm a 200mm
  • Comprimentos padrão: 6m, 12m
  • Quantidade de modelos: 25+ diâmetros

📊 Distribuição dos Modelos

Categoria Diâmetros Aplicações Típicas
Pequeno 6 - 16mm Pinos, parafusos, tirantes
Médio 20 - 50mm Eixos, barras de ligação
Grande 60 - 100mm Eixos pesados, componentes
Massivo 120 - 200mm Eixos industriais, forjaria

🔬 Qualidades Disponíveis (SAE)

Qualidade Aplicação Tratamento
SAE 1020 Uso geral estrutural Laminado a quente
SAE 1045 Eixos e componentes mecânicos Normalizado ou T&R
SAE 4140 Alta resistência Temperado e revenido

🏭 Fabricantes no Brasil

Fabricante Localização Gama de Produtos Especialidade
Gerdau Múltiplas plantas Completa (6-200mm) Principal fornecedor
ArcelorMittal Juiz de Fora (MG) Média (20-100mm) Qualidades especiais
Villares Metals Sumaré (SP) Especiais Aços liga
Aços Nobre São Paulo (SP) Pequena a Média Trefilados

📦 Comprimentos Comerciais

Padrão: 6m, 12m

Especiais: Sob consulta

⏱️ Prazos de Entrega

  • Estoque: 2-3 dias
  • Sob encomenda: 5-10 dias
  • Especiais: 15-30 dias

💰 Preços 2025

⚠️ Preços de Referência: Valores médios de mercado. Consulte fornecedores para cotação atualizada.

💵 Faixa de Preços

Preço base: R$ 5,50 - R$ 8,50 por kg

Variação por região: ±8-12%

📊 Fatores de Preço

Situação Variação Observação
Diâmetros pequenos (6-12mm) +10% Trefilados
Qualidades especiais (4140, 4340) +30% Aços liga
Tratamento térmico +20% T&R
Quantidade >5 toneladas -12% Desconto volume

📋 Normas Aplicáveis

  • ABNT NBR 6006 - Barras laminadas a quente
  • ASTM A36 - Aço estrutural carbono
  • SAE J403 - Classificação de aços carbono
  • DIN 1013 - Barras redondas (referência)

🔧 Aplicações Principais

🏗️ Construção Civil

  • Tirantes e ancoragens
  • Barras de ligação
  • Pinos estruturais
  • Elementos de fixação

⚙️ Mecânica

  • Eixos de transmissão
  • Componentes usinados
  • Pinos e buchas
  • Parafusos especiais

🏭 Industrial

  • Eixos industriais
  • Componentes de máquinas
  • Ferramentas
  • Matrizes e punções

🔩 Fixação

  • Parafusos customizados
  • Pinos de cisalhamento
  • Rebites
  • Elementos de união

✅ Recomendações de Uso

  • ✓ Verificar tolerância dimensional (h11 laminado, h9 trefilado)
  • ✓ Considerar sobremetal para usinagem
  • ✓ Tratamento térmico para aplicações mecânicas
  • ✓ Soldagem requer pré-aquecimento em diâmetros >50mm
  • ✓ Acabamento superficial: laminado (rugoso) ou trefilado (liso)
  • ✓ Verificar retidão (máx 3mm/m)
`; } function getTubosCircularesContent() { return `
⭕ Tubos Circulares
Catálogo completo de tubos circulares estruturais

📊 Tubos Circulares Disponíveis

Total: - perfis

Designação Diâmetro (mm) Espessura (mm) Peso (kg/m) Área (cm²) Categoria Ações
Carregando tubos circulares...

📋 Especificações Técnicas Completas

🔧 Descrição Geral

Tubos estruturais circulares sem costura e soldados

Perfis tubulares versáteis com excelente resistência à compressão e torção. Fabricados por soldagem longitudinal ou processo sem costura para aplicações críticas.

📏 Faixa de Dimensões

  • Diâmetros: 21mm (3/4") a 610mm (24")
  • Espessuras: 2mm a 25mm
  • Quantidade de modelos: 40+ perfis

📊 Distribuição dos Modelos

Categoria Diâmetros Aplicações Típicas
Pequeno 21 - 60mm Estruturas leves, guarda-corpos
Médio 76 - 114mm Colunas, treliças
Grande 140 - 273mm Torres, estruturas pesadas
Massivo 323 - 610mm Estacas, pilares principais

🔬 Qualidades Disponíveis

Qualidade Fy (MPa) Fu (MPa) Aplicação
ASTM A53 Gr.B 240 415 Uso geral estrutural
ASTM A500 Gr.B 290 400 Estruturas soldadas
API 5L Gr.B 245 415 Transporte e estruturas

🏭 Fabricantes no Brasil

Fabricante Localização Gama de Produtos Especialidade
Vallourec Belo Horizonte (MG) Completa Sem costura premium
Gerdau Múltiplas plantas Pequena a Média Soldados estruturais
Confab Pindamonhangaba (SP) Média a Grande Tubos industriais
V&M do Brasil Belo Horizonte (MG) Especiais Alta pressão
Tupy Joinville (SC) Média Fundidos especiais

📦 Comprimentos Comerciais

Padrão: 6m, 12m

Especiais: Sob consulta (até 18m)

⏱️ Prazos de Entrega

  • Estoque: 3-5 dias
  • Sob encomenda: 10-15 dias
  • Sem costura: 20-30 dias

💰 Preços 2025

⚠️ Preços de Referência: Valores médios de mercado. Consulte fornecedores para cotação atualizada.

💵 Faixa de Preços

Soldados: R$ 6,00 - R$ 9,00 por kg

Sem costura: R$ 10,00 - R$ 15,00 por kg

Variação por região: ±10-15%

📊 Fatores de Preço

Situação Variação Observação
Sem costura +50% Processo premium
Diâmetros pequenos (<60mm) +15% Menor demanda
Paredes grossas (>12mm) +10% Processo especial
Quantidade >15 toneladas -18% Desconto volume
Teste hidrostático +taxa Serviço adicional

📋 Normas Aplicáveis

  • ABNT NBR 5580 - Tubos de aço carbono
  • ASTM A53 - Tubos soldados e sem costura
  • ASTM A500 - Tubos estruturais formados a frio
  • API 5L - Tubos para transporte
  • EN 10210-1 - Perfis estruturais acabados a quente

🔧 Aplicações Principais

🏗️ Construção Civil

  • Colunas estruturais
  • Torres e mastros
  • Treliças espaciais
  • Guarda-corpos

🌉 Infraestrutura

  • Estacas metálicas
  • Pontes e passarelas
  • Postes de iluminação
  • Estruturas de sinalização

🏭 Industrial

  • Tubulações estruturais
  • Suportes de equipamentos
  • Plataformas industriais
  • Estruturas de máquinas

⚓ Offshore

  • Plataformas marítimas
  • Jaquetas estruturais
  • Risers estruturais
  • Estruturas submarinas

✅ Recomendações de Uso

  • ✓ Excelente resistência à compressão e torção
  • ✓ Sem costura para aplicações críticas (alta pressão)
  • ✓ Soldados para estruturas gerais (mais econômico)
  • ✓ Teste hidrostático recomendado para aplicações críticas
  • ✓ Tolerância dimensional: ±1% diâmetro, ±10% espessura
  • ✓ Soldagem com E7018 ou GMAW (ER70S-6)
  • ✓ Verificar flambagem local em paredes finas (D/t > 50)
`; } function getPerfisIContent() { return `
🏛️ Perfis I (IPE)
Catálogo completo de perfis I europeus

📊 Perfis I Disponíveis

Total: - perfis

Designação Altura (mm) Largura Mesa (mm) Esp. Alma (mm) Esp. Mesa (mm) Peso (kg/m) Categoria Ações
Carregando perfis I...

📋 Especificações Técnicas Completas

🔧 Descrição Geral

Perfis I laminados a quente padrão europeu (IPE)

Perfis estruturais com seção em "I" otimizada para flexão. Mesas paralelas e alma esbelta proporcionam excelente relação resistência/peso. Padrão europeu amplamente utilizado no Brasil.

📏 Faixa de Dimensões

  • Alturas: 80mm (IPE 80) a 600mm (IPE 600)
  • Pesos: 6kg/m a 122kg/m
  • Quantidade de modelos: 18 perfis padrão

📊 Distribuição dos Modelos

Categoria Perfis Aplicações Típicas
Leve IPE 80 - IPE 140 Vigas secundárias, estruturas leves
Médio IPE 160 - IPE 240 Vigas principais, galpões
Pesado IPE 270 - IPE 360 Vigas de grande vão, pontes
Muito Pesado IPE 400 - IPE 600 Estruturas críticas, grandes vãos

🔬 Qualidades Disponíveis

Qualidade Fy (MPa) Fu (MPa) Aplicação
EN S235JR 235 360 Uso geral estrutural
EN S275JR 275 430 Estruturas médias
EN S355J2 355 490 Alta resistência

📐 Características Geométricas

  • Mesas: Paralelas, largura constante
  • Alma: Esbelta, otimizada para flexão
  • Raio de concordância: 15mm (padrão)
  • Inclinação das mesas: 0° (paralelas)

🏭 Fabricantes no Brasil

Fabricante Localização Gama de Produtos Especialidade
Gerdau Múltiplas plantas IPE 80 - IPE 600 Linha completa
ArcelorMittal Juiz de Fora (MG) IPE 100 - IPE 400 Perfis médios
CSN Volta Redonda (RJ) IPE 160 - IPE 600 Perfis pesados
Usiminas Ipatinga (MG) IPE 120 - IPE 360 Qualidades especiais

📦 Comprimentos Comerciais

Padrão: 12m, 13.5m

Especiais: 6m, 9m, 15m (sob consulta)

⏱️ Prazos de Entrega

  • Estoque (IPE 100-300): 5-7 dias
  • Sob encomenda: 10-15 dias
  • Perfis grandes (>400): 20-30 dias

💰 Preços 2025

⚠️ Preços de Referência: Valores médios de mercado. Consulte fornecedores para cotação atualizada.

💵 Faixa de Preços

Preço base: R$ 7,00 - R$ 9,50 por kg

Variação por região: ±10-12%

📊 Fatores de Preço

Situação Variação Observação
Perfis pequenos (IPE 80-120) +12% Menor demanda
Perfis grandes (IPE 500-600) +15% Produção especial
Qualidade S355J2 +8% Aço de maior resistência
Quantidade >25 toneladas -15% Desconto por volume
Corte e furação +taxa Serviços adicionais

📋 Normas Aplicáveis

  • ABNT NBR 5884 - Perfil I estrutural de aço soldado
  • EN 10025 - Produtos laminados a quente
  • EN 10034 - Perfis I e H estruturais
  • ASTM A992 - Perfis estruturais (equivalente)

🔧 Aplicações Principais

🏗️ Construção Civil

  • Vigas principais e secundárias
  • Estruturas de galpões
  • Mezaninos e pisos
  • Coberturas metálicas

🌉 Pontes e Viadutos

  • Vigas principais de pontes
  • Longarinas
  • Transversinas
  • Estruturas de passarelas

🏭 Industrial

  • Estruturas de máquinas
  • Suportes de equipamentos
  • Plataformas industriais
  • Pontes rolantes

🏢 Edifícios

  • Vigas de piso
  • Estruturas de cobertura
  • Suportes de fachada
  • Estruturas mistas

✅ Recomendações de Uso

  • ✓ Otimizado para flexão em torno do eixo forte
  • ✓ Mesas paralelas facilitam ligações
  • ✓ Verificar flambagem lateral com torção (FLT)
  • ✓ Enrijecedores necessários em apoios concentrados
  • ✓ Soldagem com E7018 ou GMAW recomendada
  • ✓ Tolerância dimensional: ±3mm altura, ±2mm largura
  • ✓ Verificar empenamento em perfis longos
`; } function getPerfisWContent() { console.log('🔧 getPerfisWContent() chamada'); return `
🏗️ Perfis W (Wide Flange) - Catálogo Completo Brasil
16 modelos comerciais • 4 séries (W150, W200, W250, W310)
🔍 Filtros de Busca
📊 Tabela de Perfis W (16 modelos)
Designação Altura (mm) Largura (mm) Peso (kg/m) Ix (cm⁴) Wx (cm³) Série Preço 12m (R$) Ações
📌 Total: 16 modelos disponíveis
📋 Especificações Técnicas Completas

🔧 Descrição Geral

Perfis W (Wide Flange) laminados a quente, seção em H com mesas largas.

Padrão ASTM amplamente utilizado no Brasil. Alta resistência à flexão com simetria dupla, ideal para vigas e colunas.

📏 Faixa de Dimensões

  • Altura: 150mm (W150) a 310mm (W310)
  • Peso: 13 a 56 kg/m
  • Quantidade de modelos: 16 perfis (4 por série)

📦 Distribuição dos Modelos

Série Perfis Quantidade Aplicação Típica
W150 13, 18, 24, 30 kg/m 4 Estruturas leves, vigas secundárias
W200 15, 22, 31, 42 kg/m 4 Estruturas médias (padrão comercial)
W250 17, 25, 38, 49 kg/m 4 Galpões e pórticos de 6-12m
W310 21, 32, 44, 56 kg/m 4 Grandes vãos 10-16m

🔬 Qualidades Disponíveis (ASTM)

Qualidade Aplicação Fy (MPa) Fu (MPa)
ASTM A36 Uso geral 250 400
ASTM A572 Gr.50 Alta resistência 345 450
ASTM A992 Vigas/estruturas críticas 345 450

📐 Comprimentos Comerciais

  • Padrão: 12m, 13.5m, 15m
  • Especiais: 6m, 9m, 18m (sob consulta)
  • Tolerância: ±3mm (altura) | ±2mm (largura)

🎨 Acabamentos Disponíveis

  • Laminado a quente (padrão): Superfície com pátina
  • Galvanizado (sob encomenda): +15-20% custo
  • Pintura (ISO 12944 C3/C4/C5): 150-370 μm sistemas completos

📜 Normas Aplicáveis

  • ABNT NBR 5884 - Perfis estruturais
  • ABNT NBR 8800 - Projeto de estruturas de aço
  • ASTM A6 - Requisitos gerais
  • ASTM A36 / A992 - Especificações de aço estrutural
  • AISC 360 - Especificação construção em aço
🏭 Fabricantes e Distribuição no Brasil

🏢 Principais Fabricantes

Fabricante Participação Localização Especialidade
🥇 Gerdau ~60% Nacional (múltiplas unidades) W150-W310 (linha principal)
🥈 Açominas ~30% MG Perfis médios e pesados
🥉 Usiminas ~10% Ipatinga/MG Qualidade A992 (vigas)

⏱️ Prazos de Entrega

Tipo Prazo Observações
Estoque 3-5 dias W200×22, W250×25, W310×32
Sob encomenda 7-15 dias Séries menos comuns
Grandes perfis 20-30 dias Volume / logística especial

📦 Embalagem e Transporte

  • Embalagem: Feixes com cintas de aço
  • Peso típico por feixe: 500-2000 kg
  • Identificação: Etiqueta com especificação e lote
  • Transporte: Caminhão truck ou carreta
💰 Preços e Fatores de Custo (2025)

💵 Faixa de Preços por Kg

Categoria Preço Mínimo (R$/kg) Preço Máximo (R$/kg) Preço Médio (R$/kg)
Leves (W150-W200) R$ 7.50 R$ 9.50 R$ 8.50
Médios (W250) R$ 7.20 R$ 9.20 R$ 8.20
Pesados (W310) R$ 7.00 R$ 9.00 R$ 8.00

📊 Fatores de Preço Especiais

Fator Impacto no Preço Observações
Perfis pequenos (W150) +10% Menor demanda
Perfis muito grandes +15% a +18% Produção e logística especiais
Qualidade A992 +6% Especificação controlada
Volume >30 ton -15% a -18% Desconto por escala
Galvanizado +15% a +20% Processo adicional
Corte/Furação/Pintura +taxa Serviços adicionais

🔢 Calculadora de Preço Estimado

🔧 Aplicações Principais e Recomendações

🏗️ Aplicações por Setor

Setor Aplicações Séries Típicas
Construção Civil Edifícios, vigas de piso, colunas W200 - W310
Pontes Vigas principais, longarinas W250 - W310
Industrial Galpões, pórticos, suportes equipamentos W200 - W250
Offshore Plataformas, módulos, estruturas marítimas W250 - W310
Infraestrutura Passarelas, pontes pequenas W200 - W250

⚙️ Compatibilidade de Conexões

  • Parafusos estruturais: M16 a M36
  • Soldagem: E7018 (SMAW) ou GMAW ER70S-6
  • Furação: Furos de 14-40mm típicos
  • Ligações: Chapas de ligação e enrijecedores

🔧 Serviços Adicionais Disponíveis

  • Corte linear: Comprimentos específicos
  • Furação em CNC: Furos conforme projeto
  • Pintura epóxi/poliuretano: Proteção ISO 12944
  • Galvanização: Imersão a quente (sob encomenda)

⚠️ Recomendações de Uso

  • Verificar FLT: Flambagem lateral com torção em vigas longas
  • Enrijecedores: Necessários em apoios com cargas concentradas
  • Proteção: Pintura ou galvanização conforme ambiente (C3/C4/C5)
  • Qualidade: A992 recomendada para vigas
  • Dimensional: Tolerâncias ±3mm altura | ±2mm largura

📚 Observações Técnicas

  • Comercializado em feixes com cintas de aço
  • Certificado de qualidade 3.1 sob solicitação
  • Identificação por etiqueta/lote no feixe
  • Acabamento natural laminado a quente
`; // Dados dos modelos (extraídos do guia técnico) const W_MODELOS = [ // W150 {nome: 'W150×13', altura_mm: 150, largura_mm: 100, peso_kg_m: 13.0, ix_cm4: 407, wx_cm3: 54, serie: 'W150', preco_12m: 354}, {nome: 'W150×18', altura_mm: 150, largura_mm: 100, peso_kg_m: 17.9, ix_cm4: 537, wx_cm3: 72, serie: 'W150', preco_12m: 407}, {nome: 'W150×24', altura_mm: 150, largura_mm: 100, peso_kg_m: 23.9, ix_cm4: 696, wx_cm3: 93, serie: 'W150', preco_12m: 456}, {nome: 'W150×30', altura_mm: 150, largura_mm: 100, peso_kg_m: 29.8, ix_cm4: 854, wx_cm3: 114, serie: 'W150', preco_12m: 525}, // W200 {nome: 'W200×15', altura_mm: 200, largura_mm: 100, peso_kg_m: 15.3, ix_cm4: 606, wx_cm3: 61, serie: 'W200', preco_12m: 408}, {nome: 'W200×22', altura_mm: 200, largura_mm: 100, peso_kg_m: 22.1, ix_cm4: 870, wx_cm3: 87, serie: 'W200', preco_12m: 430}, {nome: 'W200×31', altura_mm: 200, largura_mm: 100, peso_kg_m: 31.4, ix_cm4: 1170, wx_cm3: 117, serie: 'W200', preco_12m: 560}, {nome: 'W200×42', altura_mm: 200, largura_mm: 100, peso_kg_m: 41.8, ix_cm4: 1530, wx_cm3: 153, serie: 'W200', preco_12m: 706}, // W250 {nome: 'W250×17', altura_mm: 250, largura_mm: 100, peso_kg_m: 17.5, ix_cm4: 1300, wx_cm3: 104, serie: 'W250', preco_12m: 465}, {nome: 'W250×25', altura_mm: 250, largura_mm: 100, peso_kg_m: 25.4, ix_cm4: 1860, wx_cm3: 149, serie: 'W250', preco_12m: 552}, {nome: 'W250×38', altura_mm: 250, largura_mm: 100, peso_kg_m: 37.9, ix_cm4: 2740, wx_cm3: 219, serie: 'W250', preco_12m: 752}, {nome: 'W250×49', altura_mm: 250, largura_mm: 100, peso_kg_m: 48.5, ix_cm4: 3430, wx_cm3: 274, serie: 'W250', preco_12m: 936}, // W310 {nome: 'W310×21', altura_mm: 310, largura_mm: 100, peso_kg_m: 21.0, ix_cm4: 2920, wx_cm3: 188, serie: 'W310', preco_12m: 594}, {nome: 'W310×32', altura_mm: 310, largura_mm: 100, peso_kg_m: 31.8, ix_cm4: 4280, wx_cm3: 276, serie: 'W310', preco_12m: 651}, {nome: 'W310×44', altura_mm: 310, largura_mm: 100, peso_kg_m: 43.7, ix_cm4: 5900, wx_cm3: 380, serie: 'W310', preco_12m: 936}, {nome: 'W310×56', altura_mm: 310, largura_mm: 100, peso_kg_m: 55.7, ix_cm4: 7360, wx_cm3: 474, serie: 'W310', preco_12m: 1206} ]; function _renderWTabela(dados) { const tbody = document.getElementById('w-tbody'); if (!tbody) return; tbody.innerHTML = dados.map(item => ` \${item.nome} \${item.altura_mm} \${item.largura_mm} \${item.peso_kg_m.toFixed(1)} \${item.ix_cm4} \${item.wx_cm3} \${item.serie} R$ \${item.preco_12m.toFixed(0)} `).join(''); const totalEl = document.getElementById('w-total'); if (totalEl) totalEl.textContent = String(dados.length); } window._filtrarW = function() { const serie = document.getElementById('w-serie').value.trim(); const pesoMaxStr = document.getElementById('w-peso-max').value; const busca = document.getElementById('w-busca').value.trim().toLowerCase(); const pesoMax = pesoMaxStr ? parseFloat(pesoMaxStr) : null; const filtrados = W_MODELOS.filter(m => { if (serie && m.serie !== serie) return false; if (pesoMax !== null && m.peso_kg_m > pesoMax) return false; if (busca && !m.nome.toLowerCase().includes(busca)) return false; return true; }); _renderWTabela(filtrados); }; window._limparFiltrosW = function() { document.getElementById('w-serie').value = ''; document.getElementById('w-peso-max').value = ''; document.getElementById('w-busca').value = ''; _renderWTabela(W_MODELOS); }; window.calcularPrecoPerfilW = function() { const peso = parseFloat(document.getElementById('w-calc-peso').value); const comprimento = parseFloat(document.getElementById('w-calc-comprimento').value); const quantidade = parseInt(document.getElementById('w-calc-quantidade').value); const precoKg = parseFloat(document.getElementById('w-calc-preco-kg').value); const pesoTotal = peso * comprimento * quantidade; const precoTotal = pesoTotal * precoKg; document.getElementById('w-calc-resultado').innerHTML = `

💰 Resultado do Cálculo

Peso Total
\${pesoTotal.toFixed(2)} kg
Preço Total
R$ \${precoTotal.toFixed(2)}
Preço por Peça
R$ \${(precoTotal / quantidade).toFixed(2)}
`; }; // Inicializa tabela ao renderizar conteúdo setTimeout(() => _renderWTabela(W_MODELOS), 0); } function getTubosRHSContent() { return `
▭ Tubos RHS - Catálogo Estrutural Brasil
Seções quadradas e retangulares (HSS) para estruturas metálicas

📊 Série RHS disponível

Baseado em ASTM A500/DIN 2395. Dados completos em BD/perfis/tubos_rhs_brasil_completo.csv.

Designação Largura (mm) Altura (mm) Espessura (mm) Peso (kg/m) Área (cm²) Categoria
50×50×250502.03.64.58Pequeno
75×75×475754.010.713.62Médio
120×80×4120804.015.119.22Grande
150×150×61501506.033.142.13Muito Grande
200×200×82002008.057.873.63Massiva
Observação: valores detalhados e demais modelos disponíveis no CSV.
Total: modelos • Última atualização:

📋 Especificações Técnicas

  • Seções fechadas quadradas/retangulares (HSS/RHS) – alta rigidez torsional.
  • Normas principais: ASTM A500 (Graus B/C), DIN 2395, NBR 5590, ASTM A1085.
  • Faixas típicas: 50×50×2 até 250×250×8 (retangulares assimétricos inclusos).
  • Materiais: SAE 1020/1045 ou equivalentes; Fy 248–345 MPa conforme grau.
  • Acabamentos: natural laminado, galvanizado, pintura epóxi/PU.

🔎 Classificação

  • Pequeno: 50–75 mm (estruturas leves).
  • Médio: 80–100 mm (estruturas padrão).
  • Grande: 120–150 mm (estruturas robustas).
  • Muito Grande/Massiva: 200–250 mm (pontes/offshore).

🏭 Fabricantes e Distribuição

FabricanteParticipaçãoLocalizaçãoEspecialidade
Gerdau~40%NacionalQuadrados/retangulares comuns
CSN~25%Volta Redonda/RJRHS médios/grandes
Usiminas~20%Ipatinga/MGGrandes seções
Vallourec~8%Belo Horizonte/MGEspeciais/galvanizados

Lead time típico: 3–10 dias conforme dimensão e acabamento.

💰 Preços 2025

CategoriaPreço kg (R$)Observações
Pequeno3.20 – 3.80Estoque rápido
Médio3.60 – 4.20Mais comum no mercado
Grande4.10 – 4.80Sob encomenda parcial
Massiva4.80 – 5.60Offshore/pontes, prazo adicional
  • Galvanizado: +20% sobre preço base.
  • Pintura epóxi/PU: +8–12% conforme sistema.
  • Corte e furação CNC: sob orçamento.

🔧 Aplicações Principais

SetorAplicaçõesTamanhos Típicos
Construção CivilColunas, vigas, pórticos80×80×4 – 120×120×5
InfraestruturaPassarelas, sinalização100×100×4 – 150×150×6
IndustrialEstruturas de galpão, racks75×75×4 – 120×80×5
OffshoreMódulos, jaquetas200×200×6 – 250×250×8

✅ Recomendações

  • Preferir Grau C (ASTM A500) para esforços elevados.
  • Executar enrijecedores em cargas concentradas.
  • Inspecionar cordão de solda em tubos com costura.
  • Proteções: galvanização ou pintura epóxi conforme ambiente.
`; // Atualiza diretamente da fonte CSV usando DataManager e repovoa todas as abas window.atualizarFonteTubos_rhs = async function() { try { const tbody = document.getElementById('tubos_rhs-tbody'); const totalEl = document.getElementById('tubos_rhs-total'); const fonteEl = document.getElementById('tubos_rhs-fonte'); const lastEl = document.getElementById('tubos_rhs-last'); if (!tbody) return alert('❌ Tabela não encontrada'); tbody.innerHTML = `
Atualizando da fonte...
`; const prevMeta = window.dataManager.getTypeMetadata('tubos_rhs') || {}; const result = await window.dataManager.updateTypeData('tubos_rhs', { docSource: prevMeta.docSource }); const dados = result.data || []; if (!dados.length) { throw new Error('Fonte retornou 0 itens'); } tbody.innerHTML = dados.map(item => ` ${item.nome} ${item.largura_mm} ${item.altura_mm} ${item.espessura_mm} ${(typeof item.peso_kg_m === 'number') ? item.peso_kg_m.toFixed(2) : item.peso_kg_m} ${(typeof item.area_cm2 === 'number') ? item.area_cm2.toFixed(2) : item.area_cm2} ${item.tipo} `).join(''); if (totalEl) totalEl.textContent = dados.length; if (fonteEl) fonteEl.textContent = result.source || 'BD/perfis/tubos_rhs_brasil_completo.csv'; if (lastEl) lastEl.textContent = new Date(result.lastUpdate || Date.now()).toLocaleString('pt-BR'); // Atualizar nota nas outras abas ['perfil-tab-1','perfil-tab-2','perfil-tab-3','perfil-tab-4'].forEach(id => { const tab = document.getElementById(id); if (tab) { let note = document.getElementById('tubos_rhs-update-note-' + id); if (!note) { note = document.createElement('div'); note.id = 'tubos_rhs-update-note-' + id; note.style.marginTop = '12px'; note.style.fontSize = '12px'; note.style.color = 'var(--color-text-secondary)'; tab.appendChild(note); } note.textContent = `Dados atualizados (${dados.length} itens) • Fonte: ${result.source} • ${new Date(result.lastUpdate).toLocaleString('pt-BR')} • Doc: ${result.docSource || '—'} (${result.docStatus || '—'})`; } }); // Injetar conteúdo enriquecido nas abas a partir do documento const insights = result.docInsights || {}; // Especificações (tab-1) (function(){ const especTab = document.getElementById('perfil-tab-1'); if (!especTab || !insights.sections) return; const boxId = 'rhs-doc-especificacoes'; let box = document.getElementById(boxId); if (!box) { box = document.createElement('div'); box.id = boxId; box.style.marginTop = '12px'; especTab.appendChild(box); } box.innerHTML = `

🔎 Conteúdo do Documento

${insights.sections.visaoGeral ? `

${insights.sections.visaoGeral}

` : ''} ${insights.sections.normasTecnicas ? `
Normas:
${insights.sections.normasTecnicas}
` : ''} ${Array.isArray(insights.recommendations) && insights.recommendations.length ? `
Recomendações:
` : ''} `; })(); // Fabricantes (tab-2) (function(){ const fabTab = document.getElementById('perfil-tab-2'); if (!fabTab || !Array.isArray(insights.manufacturers) || !insights.manufacturers.length) return; const boxId = 'rhs-doc-fabricantes'; let box = document.getElementById(boxId); if (!box) { box = document.createElement('div'); box.id = boxId; box.style.marginTop = '12px'; fabTab.appendChild(box); } box.innerHTML = `

🏭 Fabricantes do Documento

`; })(); // Preços (tab-3) (function(){ const precoTab = document.getElementById('perfil-tab-3'); if (!precoTab || !Array.isArray(insights.priceHints) || !insights.priceHints.length) return; const boxId = 'rhs-doc-precos'; let box = document.getElementById(boxId); if (!box) { box = document.createElement('div'); box.id = boxId; box.style.marginTop = '12px'; precoTab.appendChild(box); } box.innerHTML = `

💰 Indícios de Preço no Documento

${insights.priceHints.join(' • ')}

`; })(); // Aplicações (tab-4) (function(){ const aplTab = document.getElementById('perfil-tab-4'); if (!aplTab || !Array.isArray(insights.applications) || !insights.applications.length) return; const boxId = 'rhs-doc-aplicacoes'; let box = document.getElementById(boxId); if (!box) { box = document.createElement('div'); box.id = boxId; box.style.marginTop = '12px'; aplTab.appendChild(box); } box.innerHTML = `

🔧 Aplicações do Documento

`; })(); alert('✅ Tubos RHS atualizados com enriquecimento pelo documento!'); } catch (err) { console.error('❌ Erro ao atualizar Tubos RHS:', err); alert('❌ Erro ao atualizar: ' + err.message); } }; } // --- Perfis W: disponibilizar no escopo global para funcionamento dos filtros --- // OBS: Scripts inseridos via innerHTML não executam; por isso registramos aqui. if (!window.W_MODELOS) { window.W_MODELOS = [ {nome: 'W150×13', altura_mm: 150, largura_mm: 100, peso_kg_m: 13.0, ix_cm4: 407, wx_cm3: 54, serie: 'W150', preco_12m: 354}, {nome: 'W150×18', altura_mm: 150, largura_mm: 100, peso_kg_m: 17.9, ix_cm4: 537, wx_cm3: 72, serie: 'W150', preco_12m: 407}, {nome: 'W150×24', altura_mm: 150, largura_mm: 100, peso_kg_m: 23.9, ix_cm4: 696, wx_cm3: 93, serie: 'W150', preco_12m: 456}, {nome: 'W150×30', altura_mm: 150, largura_mm: 100, peso_kg_m: 29.8, ix_cm4: 854, wx_cm3: 114, serie: 'W150', preco_12m: 525}, {nome: 'W200×15', altura_mm: 200, largura_mm: 100, peso_kg_m: 15.3, ix_cm4: 606, wx_cm3: 61, serie: 'W200', preco_12m: 408}, {nome: 'W200×22', altura_mm: 200, largura_mm: 100, peso_kg_m: 22.1, ix_cm4: 870, wx_cm3: 87, serie: 'W200', preco_12m: 430}, {nome: 'W200×31', altura_mm: 200, largura_mm: 100, peso_kg_m: 31.4, ix_cm4: 1170, wx_cm3: 117, serie: 'W200', preco_12m: 560}, {nome: 'W200×42', altura_mm: 200, largura_mm: 100, peso_kg_m: 41.8, ix_cm4: 1530, wx_cm3: 153, serie: 'W200', preco_12m: 706}, {nome: 'W250×17', altura_mm: 250, largura_mm: 100, peso_kg_m: 17.5, ix_cm4: 1300, wx_cm3: 104, serie: 'W250', preco_12m: 465}, {nome: 'W250×25', altura_mm: 250, largura_mm: 100, peso_kg_m: 25.4, ix_cm4: 1860, wx_cm3: 149, serie: 'W250', preco_12m: 552}, {nome: 'W250×38', altura_mm: 250, largura_mm: 100, peso_kg_m: 37.9, ix_cm4: 2740, wx_cm3: 219, serie: 'W250', preco_12m: 752}, {nome: 'W250×49', altura_mm: 250, largura_mm: 100, peso_kg_m: 48.5, ix_cm4: 3430, wx_cm3: 274, serie: 'W250', preco_12m: 936}, {nome: 'W310×21', altura_mm: 310, largura_mm: 100, peso_kg_m: 21.0, ix_cm4: 2920, wx_cm3: 188, serie: 'W310', preco_12m: 594}, {nome: 'W310×32', altura_mm: 310, largura_mm: 100, peso_kg_m: 31.8, ix_cm4: 4280, wx_cm3: 276, serie: 'W310', preco_12m: 651}, {nome: 'W310×44', altura_mm: 310, largura_mm: 100, peso_kg_m: 43.7, ix_cm4: 5900, wx_cm3: 380, serie: 'W310', preco_12m: 936}, {nome: 'W310×56', altura_mm: 310, largura_mm: 100, peso_kg_m: 55.7, ix_cm4: 7360, wx_cm3: 474, serie: 'W310', preco_12m: 1206} ]; } function _renderWTabela(dados) { const tbody = document.getElementById('w-tbody'); if (!tbody) return; tbody.innerHTML = dados.map(item => ` ${item.nome} ${item.altura_mm} ${item.largura_mm} ${item.peso_kg_m.toFixed(1)} ${item.ix_cm4} ${item.wx_cm3} ${item.serie} R$ ${item.preco_12m.toFixed(0)} `).join(''); const totalEl = document.getElementById('w-total'); if (totalEl) totalEl.textContent = String(dados.length); } window._filtrarW = function() { const serie = document.getElementById('w-serie')?.value?.trim() || ''; const pesoMaxStr = document.getElementById('w-peso-max')?.value || ''; const busca = (document.getElementById('w-busca')?.value || '').trim().toLowerCase(); const pesoMax = pesoMaxStr ? parseFloat(pesoMaxStr) : null; const filtrados = window.W_MODELOS.filter(m => { if (serie && m.serie !== serie) return false; if (pesoMax !== null && m.peso_kg_m > pesoMax) return false; if (busca && !m.nome.toLowerCase().includes(busca)) return false; return true; }); _renderWTabela(filtrados); }; window._limparFiltrosW = function() { const serieEl = document.getElementById('w-serie'); const pesoEl = document.getElementById('w-peso-max'); const buscaEl = document.getElementById('w-busca'); if (serieEl) serieEl.value = ''; if (pesoEl) pesoEl.value = ''; if (buscaEl) buscaEl.value = ''; _renderWTabela(window.W_MODELOS); }; window.calcularPrecoPerfilW = function() { const peso = parseFloat(document.getElementById('w-calc-peso')?.value || '0'); const comprimento = parseFloat(document.getElementById('w-calc-comprimento')?.value || '0'); const quantidade = parseInt(document.getElementById('w-calc-quantidade')?.value || '0'); const precoKg = parseFloat(document.getElementById('w-calc-preco-kg')?.value || '0'); const pesoTotal = peso * comprimento * quantidade; const precoTotal = pesoTotal * precoKg; const resultadoEl = document.getElementById('w-calc-resultado'); if (resultadoEl) { resultadoEl.innerHTML = `

💰 Resultado do Cálculo

Peso Total
${pesoTotal.toFixed(2)} kg
Preço Total
R$ ${precoTotal.toFixed(2)}
`; } }; // Render inicial quando a tabela existir setTimeout(() => { const tbody = document.getElementById('w-tbody'); if (tbody) { _renderWTabela(window.W_MODELOS); } }, 0); function getChapasContent() { return `
📄 Chapas Planas - Guia Técnico 2025
Laminadas a quente/frio, galvanizadas e inox – múltiplas normas

📊 Série de Chapas Comerciais

Dados resumidos do CSV (BD/perfis/chapas_brasil_completo.csv).

DesignaçãoEspessura (mm)Peso (kg/m²)Formato (mm)Peso Chapa (kg)Categoria
CHAPA 3.2mm (1/8")3.225.122500×125078.5Fina
CHAPA 6.35mm (1/4")6.3549.852500×1250155.78Média
CHAPA 12.7mm (1/2")12.799.702500×1250311.56Grossa
CHAPA 25.4mm (1")25.4199.402000×1000398.80Muito Grossa

📋 Especificações Técnicas

  • HR (laminação a quente) e CR (laminação a frio) conforme chapas_planas.md.
  • Normas: ASTM A36 (HR), ASTM A1008 (CR), ASTM A653 (galvanizadas), ASTM A240 (inox), equivalentes NBR.
  • Acabamentos: natural, galvanizado (Z100–Z200), inox 304/316L; tolerâncias ±1–3% conforme processo.
  • Larguras comerciais: 1000–1500 mm; formatos típicos 2500×1250 mm.

🏭 Fabricantes e Prazos

FabricanteParticipaçãoLocalizaçãoEspecialidade
CSN~35%Volta Redonda/RJHR/CR comuns
Usiminas~35%Ipatinga/MGHR pesadas
Gerdau~20%NacionalChapas estruturais
Vallourec~10%BH/MGGalvanizadas/Inox

Lead time: estoque 2–5 dias; sob encomenda 7–15 dias; galvanizado +5–10 dias.

💰 Preços 2025

CategoriaPreço kg (R$)Observações
Fina (3–5 mm)3.10 – 3.60HR/CR leve
Média (6–10 mm)3.40 – 3.90Estrutural padrão
Grossa (11–20 mm)3.80 – 4.40Estrutura pesada
Muito/Ultra Grossa (20+ mm)4.30 – 5.20Pontes/offshore
  • Galvanizadas: +20% (Z100–Z200).
  • Inox 304/316L: +300–400% sobre carbono.
  • Corte CNC e dobra: sob orçamento.

🔧 Aplicações & Recomendações

SetorAplicaçõesEspessuras Típicas
Construção CivilBase de ligações, chapas de gusset6–12 mm
IndustrialPainéis, suportes, reforços6–20 mm
OffshoreReforços críticos, tampas, consoles12–50 mm
  • Soldagem SMAW E7018 ou GMAW ER70S-6.
  • Proteção: pintura epóxi ou galvanização a quente.
  • Tolerâncias conforme processo (chapas_planas.md).
`; } function getPerfisHPContent() { return `
🏛️ Perfis HP (Heavy Plate) - Catálogo Brasil
Estacas e seções especiais – referência Gerdau/Usiminas

📊 Série HP disponível

Base de dados: BD/perfis/perfis_hp_brasil_completo.csv.

DesignaçãoAltura (mm)Aba (mm)tw/tf (mm)Peso (kg/m)Área (cm²)Categoria
HP 100×201001004.3/6.420.025.5Pequeno
HP 150×501501508.4/12.650.063.7Grande
HP 200×732002009.4/14.273.093.0Grande
HP 250×8925025010.2/15.289.0113.4Muito Grande
HP 300×10230030010.5/15.9102.0130.0Massiva

📋 Especificações

  • Referência técnica: perfis_w_hp_gerdau_acominas_guia_tecnico.md.
  • Normas: ABNT NBR 5884, ASTM A6/A36, AISC 360.
  • Aplicação principal: estacas e estruturas especiais com boa torção.
  • Materiais usuais: ASTM A36/A572; Fy 248–345 MPa.

🏭 Fabricantes

FabricanteParticipaçãoLocalEspecialidade
Usiminas~50%Ipatinga/MGSérie HP completa
Gerdau~40%NacionalHP médios/grandes
CSN~10%Volta Redonda/RJDisponibilidade sob encomenda

Prazos: estoque 3–7 dias; sob encomenda 10–20 dias.

💰 Preços 2025

CategoriaPreço kg (R$)Observações
Pequeno/Médio3.60 – 4.20Estacas leves
Grande4.10 – 4.80Estruturas pesadas
Muito Grande/Massiva4.80 – 5.50Offshore/ponte

🔧 Aplicações

  • Estacas cravadas e estruturas submetidas a torção.
  • Pórticos especiais, módulos industriais e pontes leves.
  • Ambientes agressivos com proteção adequada (pintura/galvanização).
`; } function getBarrasRoscadasContent() { return `
🔩 Barras Roscadas para Chumbadores
ASTM A193 B7/B8/B8M – referência NBR 8800 (ancoragens)

📊 Principais diâmetros

DiâmetroMaterialFy/Fu (MPa)Comprimento padrãoAplicação
1/2"A193 B7724 / 8626 mAncoragens leves
3/4"A193 B7724 / 8626 mPadrão estrutural
7/8"A193 B7724 / 8626 mEstruturas pesadas
1"A193 B7724 / 8626 mMega estruturas
3/4"A193 B8M (316L)552 / 6896 mOffshore extremo

📋 Especificações

  • Fonte: barras_roscadas_chumbadores.md.
  • Normas: ASTM A193 B7/B8/B8M; porcas ASTM A563 DH; arruelas ASTM F436.
  • Rosca completa ponta-a-ponta; embutimento mínimo em concreto 250–350 mm.
  • Acabamentos: natural, galvanizado a quente; inox 304/316L para corrosão.

🏭 Fabricantes

FabricanteParticipaçãoLocalEspecialidade
Gerdau~35%NacionalCarbono B7
Confab~25%SPProcessos especiais
Usiminas~20%MGCarbono premium
CSN~10%RJGalvanizado
Villares~10%SPInoxidáveis

💰 Preços 2025

DiâmetroMaterialPreço por barra 6 m (R$)
3/4"A193 B7270
7/8"A193 B7312
1"A193 B7390
3/4"A193 B8M720
  • Galvanização a quente: +20%.
  • Porca dupla altura ASTM A563 DH e arruela F436 obrigatórias.

🔧 Aplicações

  • Ancoragem de pilares metálicos e consoles.
  • Estruturas com vibração – usar porca dupla altura.
  • Ambientes agressivos – preferir galvanizado ou inox.
`; } function getBarrasChatasContent() { return `
▬ Barras Chatas - Catálogo Brasil
Seções retangulares sólidas para uso estrutural e industrial

📊 Série de Barras Chatas

CSV: BD/perfis/barras_chatas_brasil_completo.csv.

DesignaçãoLargura (mm)Espessura (mm)Peso (kg/m)Categoria
12×31230.28Leve
25×62561.18Média
50×1050103.93Pesada
100×201002015.70Muito Pesada

📋 Especificações

  • Materiais: ASTM A36/A572; acabamento natural/galvanizado/pintado.
  • Tolerâncias dimensionais segundo ASTM A6/NBR correlatas.
  • Uso típico: chapas de base, reforços, espaçadores e peças usinadas.

🏭 Fabricantes

FabricanteParticipaçãoLocalEspecialidade
Gerdau~40%NacionalSérie completa
Usiminas~30%MGLarguras grandes
CSN~20%RJDisponibilidade sob encomenda
AÇO Minas~10%MGEspeciais

💰 Preços 2025

CategoriaPreço kg (R$)Observações
Leve3.10 – 3.60Uso geral
Média3.40 – 4.00Estrutural padrão
Pesada/Muito Pesada4.10 – 5.20Base, reforços

🔧 Aplicações

  • Chaparias de base, reforços de ligações e chapas de travamento.
  • Peças usinadas, espaçadores e conectores planos.
  • Preferir galvanização/pintura em ambientes agressivos.
`; } console.log('✅ Funções placeholder dos perfis registradas'); // ======================================== // FUNÇÃO PARA TROCAR TABS // ======================================== /** * Troca entre as tabs de um perfil */ function switchPerfilTab(index) { console.log('🔄 Trocando para tab', index); // Atualizar botões document.querySelectorAll('.tab-btn').forEach((btn, i) => { if (i === index) { btn.classList.add('active'); } else { btn.classList.remove('active'); } }); // Atualizar conteúdo document.querySelectorAll('.tab-content').forEach((content, i) => { if (i === index) { content.classList.add('active'); } else { content.classList.remove('active'); } }); } console.log('✅ Função switchPerfilTab registrada'); // Exportar versão final para escopo global window.switchPerfilTab = switchPerfilTab; /** * Calcula preço estimado de cantoneiras */ function calcularPrecoCantoneira() { const peso = parseFloat(document.getElementById('calc-peso')?.value) || 0; const comprimento = parseFloat(document.getElementById('calc-comprimento')?.value) || 0; const quantidade = parseInt(document.getElementById('calc-quantidade')?.value) || 0; const precoKg = parseFloat(document.getElementById('calc-preco-kg')?.value) || 0; if (peso === 0 || comprimento === 0 || quantidade === 0 || precoKg === 0) { alert('Por favor, preencha todos os campos'); return; } const pesoTotal = peso * comprimento * quantidade; const precoTotal = pesoTotal * precoKg; const precoPorPeca = precoTotal / quantidade; const resultado = document.getElementById('calc-resultado'); if (resultado) { resultado.innerHTML = `

💰 Resultado do Cálculo

Peso Total
${pesoTotal.toFixed(2)} kg
Preço Total
R$ ${precoTotal.toFixed(2)}
Preço por Peça
R$ ${precoPorPeca.toFixed(2)}
`; } } console.log('✅ Função calcularPrecoCantoneira registrada'); // ======================================== // FUNÇÃO DE CARREGAMENTO FORÇADO // ======================================== /** * Força o carregamento dos dados das cantoneiras * Botão de emergência para o usuário * VERSÃO ROBUSTA: Usa dados embutidos como prioridade */ async function forcarCarregamentoCantoneiras() { console.log('🚨 CARREGAMENTO FORÇADO INICIADO PELO USUÁRIO'); const tbody = document.getElementById('cantoneiras-tbody'); if (!tbody) { alert('❌ Erro: Elemento da tabela não encontrado!'); console.error('❌ Elemento tbody não encontrado'); return; } // Mostrar loading tbody.innerHTML = `
Carregando dados...
Aguarde alguns segundos
`; try { // PRIORIDADE 1: Usar dados embutidos (sempre funciona) if (typeof obterDadosPerfil === 'function') { console.log('✅ Usando dados embutidos (solução robusta)'); const dados = obterDadosPerfil('cantoneiras'); if (dados && dados.length > 0) { // Exibir na tabela tbody.innerHTML = dados.map(item => ` ${item.nome} ${item.lado_mm} ${item.espessura_mm} ${item.peso_kg_m.toFixed(2)} ${item.area_cm2.toFixed(2)} ${item.momento_inercia_cm4.toFixed(2)} ${item.raio_giracao_cm.toFixed(2)} ${item.tipo} `).join(''); // Atualizar contador const totalEl = document.getElementById('cant-total'); if (totalEl) { totalEl.textContent = dados.length; } // Armazenar globalmente window.cantoneirasData = dados; console.log('🎉 CARREGAMENTO CONCLUÍDO (dados embutidos)'); return; } } // PRIORIDADE 2: Tentar carregar CSV (se estiver em servidor) console.log('📥 Tentando carregar CSV...'); const response = await fetch('BD/perfis/cantoneiras_brasil_completo.csv'); if (!response.ok) { throw new Error(`HTTP ${response.status}: ${response.statusText}`); } const csvText = await response.text(); const linhas = csvText.trim().split('\n'); console.log(`📊 CSV carregado: ${linhas.length} linhas`); // Processar dados const dados = []; for (let i = 1; i < linhas.length; i++) { const linha = linhas[i].trim(); if (!linha) continue; const colunas = linha.split(','); if (colunas.length >= 9) { dados.push({ id: colunas[0].trim(), nome: colunas[1].trim(), lado_mm: parseFloat(colunas[2]), espessura_mm: parseFloat(colunas[3]), peso_kg_m: parseFloat(colunas[4]), area_cm2: parseFloat(colunas[5]), momento_inercia_cm4: parseFloat(colunas[6]), raio_giracao_cm: parseFloat(colunas[7]), tipo: colunas[8].trim() }); } } console.log(`✅ Processados: ${dados.length} cantoneiras`); if (dados.length === 0) { throw new Error('Nenhum dado encontrado no CSV'); } // Exibir na tabela tbody.innerHTML = dados.map(item => ` ${item.nome} ${item.lado_mm} ${item.espessura_mm} ${item.peso_kg_m.toFixed(2)} ${item.area_cm2.toFixed(2)} ${item.momento_inercia_cm4.toFixed(2)} ${item.raio_giracao_cm.toFixed(2)} ${item.tipo} `).join(''); // Atualizar contador const totalEl = document.getElementById('cant-total'); if (totalEl) { totalEl.textContent = dados.length; } // Armazenar globalmente window.cantoneirasData = dados; console.log('🎉 CARREGAMENTO FORÇADO CONCLUÍDO COM SUCESSO!'); } catch (error) { console.error('❌ Erro no carregamento forçado:', error); tbody.innerHTML = `
Erro ao carregar dados
${error.message}
`; alert(`❌ Erro ao carregar dados: ${error.message}`); } } // Exportar função globalmente window.forcarCarregamentoCantoneiras = forcarCarregamentoCantoneiras; console.log('✅ Função de carregamento forçado disponível'); // ======================================== // AUTO-CARREGAMENTO // ======================================== /** * Detecta quando a seção de cantoneiras é exibida e carrega automaticamente */ function iniciarAutoCarregamentoCantoneiras() { // Usar MutationObserver para detectar quando o botão aparece const observer = new MutationObserver((mutations) => { const botao = document.getElementById('btn-carregar-cantoneiras'); const tbody = document.getElementById('cantoneiras-tbody'); if (botao && tbody) { console.log('🎯 Botão de carregamento detectado - iniciando auto-carregamento'); // Verificar se a tabela está vazia const linhas = tbody.querySelectorAll('tr'); const estaVazia = linhas.length === 0 || tbody.textContent.includes('Será preenchido'); if (estaVazia) { console.log('📊 Tabela vazia detectada - carregando automaticamente...'); // Aguardar um pouco e clicar no botão setTimeout(() => { console.log('🖱️ Clicando no botão automaticamente...'); botao.click(); observer.disconnect(); // Parar de observar }, 500); } else { console.log('✅ Tabela já tem dados - não é necessário carregar'); observer.disconnect(); } } }); // Observar mudanças no body observer.observe(document.body, { childList: true, subtree: true }); console.log('👁️ Observer de auto-carregamento iniciado'); } // Iniciar observer quando o script carregar if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', iniciarAutoCarregamentoCantoneiras); } else { iniciarAutoCarregamentoCantoneiras(); } console.log('✅ Sistema de auto-carregamento configurado');