/** * Material Relationships - Cross-reference system * Links steel grades with welding consumables and painting systems */ import { loadCSV } from './csv-manager.js'; // Cache for relationship data let weldingRelations = []; let paintingRelations = []; let isLoaded = false; /** * Load all relationship data * @returns {Promise} Success status */ export async function loadRelationships() { if (isLoaded) return true; try { console.log('📊 Carregando relacionamentos...'); // Load both CSV files [weldingRelations, paintingRelations] = await Promise.all([ loadCSV('Tabela_Acos_Soldagem_Consumiveis.csv'), loadCSV('Tabela_Acos_Pintura_Tintas.csv') ]); isLoaded = true; console.log(`✅ Relacionamentos carregados: ${weldingRelations.length} soldagem, ${paintingRelations.length} pintura`); return true; } catch (error) { console.error('❌ Erro ao carregar relacionamentos:', error); return false; } } /** * Get welding recommendations for a steel grade * @param {string} steelGrade - Steel grade (e.g., "ASTM A36") * @returns {Array} Welding recommendations */ export function getWeldingRecommendations(steelGrade) { if (!isLoaded) { console.warn('⚠️ Relacionamentos não carregados'); return []; } // Normalize steel grade for comparison const normalized = steelGrade.toUpperCase().trim(); return weldingRelations.filter(rel => { const relSteel = rel.Aço?.toUpperCase().trim() || ''; return relSteel.includes(normalized) || normalized.includes(relSteel); }); } /** * Get painting recommendations for a steel grade and environment * @param {string} steelGrade - Steel grade * @param {string} environment - Corrosive environment (optional) * @returns {Array} Painting recommendations */ export function getPaintingRecommendations(steelGrade, environment = null) { if (!isLoaded) { console.warn('⚠️ Relacionamentos não carregados'); return []; } const normalized = steelGrade.toUpperCase().trim(); let results = paintingRelations.filter(rel => { const relSteel = rel.Aço?.toUpperCase().trim() || ''; return relSteel.includes(normalized) || normalized.includes(relSteel); }); // Filter by environment if specified if (environment) { const envNorm = environment.toUpperCase(); results = results.filter(rel => { const relEnv = rel.Ambiente_Corrosivo?.toUpperCase() || ''; return relEnv.includes(envNorm); }); } return results; } /** * Get complete recommendation (steel + welding + painting) * @param {string} steelGrade - Steel grade * @param {string} environment - Corrosive environment * @returns {object} Complete recommendation */ export function getCompleteRecommendation(steelGrade, environment = 'C3') { const welding = getWeldingRecommendations(steelGrade); const painting = getPaintingRecommendations(steelGrade, environment); return { steel: steelGrade, environment, welding: welding[0] || null, painting: painting[0] || null, hasWelding: welding.length > 0, hasPainting: painting.length > 0, isComplete: welding.length > 0 && painting.length > 0 }; } /** * Get all available steel grades * @returns {Array} Unique steel grades */ export function getAvailableSteelGrades() { if (!isLoaded) return []; const grades = new Set(); weldingRelations.forEach(rel => { if (rel.Aço) grades.add(rel.Aço); }); return Array.from(grades).sort(); } /** * Get available environments for a steel grade * @param {string} steelGrade - Steel grade * @returns {Array} Available environments */ export function getAvailableEnvironments(steelGrade) { if (!isLoaded) return []; const painting = getPaintingRecommendations(steelGrade); const environments = new Set(); painting.forEach(rel => { if (rel.Ambiente_Corrosivo) { environments.add(rel.Ambiente_Corrosivo); } }); return Array.from(environments).sort(); } /** * Format welding recommendation as HTML * @param {object} welding - Welding data * @returns {string} HTML */ export function formatWeldingRecommendation(welding) { if (!welding) { return '

Nenhuma recomendação de soldagem disponível

'; } return `

🔥 Soldagem Recomendada

Processo 1: ${welding.Processo_Soldagem_1 || '-'}
Eletrodo: ${welding.Eletrodo_1 || '-'}
Processo 2: ${welding.Processo_Soldagem_2 || '-'}
Arame: ${welding.Arame_2 || '-'}
Gás: ${welding.Gás_Proteção || '-'}
Processo 3: ${welding.Processo_Soldagem_3 || '-'}
Arame/Fluxo: ${welding.Arame_Fluxo_3 || '-'}
CEV: ${welding.CEV || '-'}
Pré-aquecimento: ${welding.Pré_Aquecimento || '-'}
Norma: ${welding.Norma_Soldagem || '-'}
Ensaios: ${welding.Ensaios_NDT || '-'}
${welding.Observações ? `
💡 Observações: ${welding.Observações}
` : ''}
`; } /** * Format painting recommendation as HTML * @param {object} painting - Painting data * @returns {string} HTML */ export function formatPaintingRecommendation(painting) { if (!painting) { return '

Nenhuma recomendação de pintura disponível

'; } return `

🎨 Pintura Recomendada

Ambiente: ${painting.Ambiente_Corrosivo || '-'}
Vida útil: ${painting.Vida_Útil_Esperada || '-'}
Preparação: ${painting.Preparação_Superfície || '-'}
Rugosidade: ${painting.Perfil_Rugosidade || '-'}
DFT Total: ${painting.DFT_Total || '-'}
Custo: ${painting.Custo_Relativo_m2 || '-'}/m²
Sistema de Pintura (3 camadas):
PRIMER
${painting.Primer || '-'}
${painting.Tipo_Tinta_Primer || '-'}
INTERMEDIÁRIA
${painting.Intermediária || '-'}
${painting.Tipo_Tinta_Intermediária || '-'}
ACABAMENTO
${painting.Acabamento || '-'}
${painting.Tipo_Tinta_Acabamento || '-'}
Norma: ${painting.Norma_Pintura || '-'}
Ensaios: ${painting.Ensaios_Pintura || '-'}
${painting.Observações_Pintura ? `
💡 Observações: ${painting.Observações_Pintura}
` : ''}
`; } // Auto-load on import if (typeof window !== 'undefined') { loadRelationships(); }