UNPKG

@flexabrain/mcp-server

Version:

Advanced electrical schematic analysis MCP server with rail engineering expertise

350 lines 17.8 kB
import { electricalSchematicAnalyzer } from '../services/electrical-analyzer.js'; /** * MCP Tool: Validate Electrical Standards * * Validates electrical components and circuit design against specified * industry standards (IEC, IEEE, EN) with focus on rail electrical systems. * Leverages rail engineering expertise for comprehensive compliance checking. */ export async function validateElectricalStandards(args) { try { // Configure analysis for standards validation const analysisOptions = { analysis_depth: args.validation_level === 'comprehensive' ? 'comprehensive' : args.validation_level === 'detailed' ? 'standard' : 'basic', focus_areas: ['compliance', 'safety'], custom_standards: args.standards, ...(args.rail_system_type && { rail_system_context: { system_type: args.rail_system_type, voltage_system: 'Unknown', // Would be detected from analysis region: args.region || 'GLOBAL', applicable_standards: args.standards } }) }; // Perform comprehensive analysis const analysisResult = await electricalSchematicAnalyzer.analyzeSchematic(args.image_path, analysisOptions); if (!analysisResult.success || !analysisResult.analysis) { throw new Error('Standards validation failed: ' + (analysisResult.errors?.[0]?.message || 'Unknown error')); } const analysis = analysisResult.analysis; // Generate detailed standards validation report let report = '# ⚖️ Electrical Standards Validation Report\n\n'; // Executive Summary report += generateExecutiveSummary(analysis.compliance_report, args.standards); // Standards Overview report += generateStandardsOverview(args.standards, args.region); // Component-by-Component Validation report += generateComponentValidation(analysis.components, analysis.compliance_report, args.standards); // Circuit Design Validation report += generateCircuitValidation(analysis.circuit_topology, args.standards); // Safety Standards Compliance report += generateSafetyCompliance(analysis.safety_analysis, args.standards); // Non-Compliance Issues report += generateNonComplianceReport(analysis.compliance_report); // Recommendations for Compliance report += generateComplianceRecommendations(analysis.expert_recommendations, analysis.compliance_report); // Validation Summary report += generateValidationSummary(analysis, args.standards); return report; } catch (error) { return `❌ **Error validating electrical standards**\n\nError: ${error instanceof Error ? error.message : String(error)}`; } } /** * Generate executive summary of standards compliance */ function generateExecutiveSummary(complianceReport, standards) { const overallCompliance = Math.round(complianceReport.overall_compliance * 100); const complianceStatus = overallCompliance >= 95 ? '🟢 FULLY COMPLIANT' : overallCompliance >= 80 ? '🟡 MOSTLY COMPLIANT' : overallCompliance >= 60 ? '🟠 PARTIALLY COMPLIANT' : '🔴 NON-COMPLIANT'; let summary = '## 📋 Executive Summary\n\n'; summary += `**Overall Compliance**: ${complianceStatus} (${overallCompliance}%)\n\n`; summary += `**Standards Evaluated**: ${standards.length}\n`; summary += `**Compliant Items**: ${complianceReport.compliant_items.length}\n`; summary += `**Non-Compliant Items**: ${complianceReport.non_compliant_items.length}\n`; summary += `**Items Requiring Review**: ${complianceReport.requires_review.length}\n\n`; if (overallCompliance < 100) { summary += '⚠️ **Action Required**: Review non-compliant items and address compliance gaps.\n\n'; } else { summary += '✅ **Status**: All evaluated components meet specified standards requirements.\n\n'; } return summary; } /** * Generate standards overview section */ function generateStandardsOverview(standards, region) { let overview = '## 📚 Standards Overview\n\n'; const standardDescriptions = { 'EN 50155': 'Railway applications - Electronic equipment used on rolling stock', 'EN 50121': 'Railway applications - Electromagnetic compatibility', 'IEC 62236': 'Railway applications - Electromagnetic compatibility', 'IEC 61375': 'Electronic railway equipment - Train communication network', 'IEEE 519': 'Recommended practice for harmonic control in electrical power systems', 'IEEE 1584': 'Guide for performing arc-flash hazard calculations', 'IEC 60364': 'Low-voltage electrical installations', 'EN 50128': 'Railway applications - Communication, signalling and processing systems' }; overview += '| Standard | Description | Region |\n'; overview += '|----------|-------------|--------|\n'; for (const standard of standards) { const description = standardDescriptions[standard] || 'Industry standard for electrical systems'; const applicableRegion = region || (standard.startsWith('EN') ? 'EU' : standard.startsWith('IEEE') ? 'US' : 'GLOBAL'); overview += `| **${standard}** | ${description} | ${applicableRegion} |\n`; } overview += '\n'; return overview; } /** * Generate component-by-component validation */ function generateComponentValidation(components, complianceReport, standards) { let validation = '## 🔧 Component Validation\n\n'; // Group components by compliance status const compliantComponents = complianceReport.compliant_items; const nonCompliantComponents = complianceReport.non_compliant_items; const reviewComponents = complianceReport.requires_review; validation += '### ✅ Compliant Components\n\n'; if (compliantComponents.length > 0) { validation += '| Component | Standard | Status | Notes |\n'; validation += '|-----------|----------|--------|---------|\n'; for (const item of compliantComponents) { validation += `| ${item.item} | ${item.standard} | ✅ ${item.status} | ${item.notes || 'Meets requirements'} |\n`; } } else { validation += '*No components currently marked as fully compliant.*\n'; } validation += '\n'; validation += '### ❌ Non-Compliant Components\n\n'; if (nonCompliantComponents.length > 0) { validation += '| Component | Standard | Issue | Severity | Action Required |\n'; validation += '|-----------|----------|-------|----------|------------------|\n'; for (const item of nonCompliantComponents) { const severity = item.severity || 'MEDIUM'; const severityIcon = severity === 'HIGH' ? '🔴' : severity === 'MEDIUM' ? '🟠' : '🟡'; validation += `| ${item.item} | ${item.standard} | ${item.reason || 'Non-compliant'} | ${severityIcon} ${severity} | ${item.required_action || 'Review and update'} |\n`; } } else { validation += '*No non-compliant components identified.*\n'; } validation += '\n'; validation += '### 🔍 Components Requiring Review\n\n'; if (reviewComponents.length > 0) { validation += '| Component | Standard | Reason | Expert Review Needed |\n'; validation += '|-----------|----------|--------|-----------------------|\n'; for (const item of reviewComponents) { const expertNeeded = item.expert_needed ? '🧑‍🔬 Yes' : '📋 No'; validation += `| ${item.item} | ${item.standard} | ${item.reason} | ${expertNeeded} |\n`; } } else { validation += '*All components have clear compliance status.*\n'; } validation += '\n'; return validation; } /** * Generate circuit design validation */ function generateCircuitValidation(circuitTopology, standards) { let validation = '## 🔌 Circuit Design Validation\n\n'; validation += '### Power System Architecture\n\n'; validation += `- **Power Sources**: ${circuitTopology.power_sources.length} identified\n`; validation += `- **Load Components**: ${circuitTopology.loads.length} identified\n`; validation += `- **Protection Devices**: ${circuitTopology.protection_devices.length} identified\n\n`; validation += '### Grounding System Assessment\n\n'; const grounding = circuitTopology.grounding_system; validation += `- **Grounding Adequacy**: ${grounding.is_adequate ? '✅ Adequate' : '❌ Inadequate'}\n`; validation += `- **Ground Fault Protection**: ${grounding.has_ground_fault_protection ? '✅ Present' : '❌ Missing'}\n`; if (!grounding.is_adequate || !grounding.has_ground_fault_protection) { validation += '\n⚠️ **Standards Impact**: Inadequate grounding may violate IEC 60364 and EN 50155 requirements.\n'; } validation += '\n'; validation += '### Protection Coordination\n\n'; if (circuitTopology.protection_devices.length > 0) { validation += '✅ **Status**: Protection devices present for fault isolation\n'; validation += '📋 **Recommendation**: Verify protection coordination studies per IEEE standards\n\n'; } else { validation += '❌ **Issue**: No protection devices identified\n'; validation += '🚨 **Standards Violation**: Violates IEC 60364 protection requirements\n\n'; } return validation; } /** * Generate safety standards compliance section */ function generateSafetyCompliance(safetyAnalysis, standards) { let safety = '## ⚡ Safety Standards Compliance\n\n'; const safetyLevel = safetyAnalysis.overall_safety_level; const safetyIcon = safetyLevel === 'CRITICAL' ? '🔴' : safetyLevel === 'HIGH' ? '🟠' : safetyLevel === 'MEDIUM' ? '🟡' : '🟢'; safety += `**Overall Safety Level**: ${safetyIcon} ${safetyLevel}\n\n`; // Arc Flash Hazards safety += '### Arc Flash Assessment (IEEE 1584)\n\n'; const arcFlash = safetyAnalysis.arc_flash_hazards; if (arcFlash.present) { safety += `- **Hazard Present**: ⚠️ Yes (${arcFlash.components.length} components)\n`; safety += `- **Estimated Energy**: ${arcFlash.estimated_energy} cal/cm²\n`; safety += `- **PPE Category**: ${arcFlash.ppe_category}\n`; safety += `- **Affected Components**: ${arcFlash.components.join(', ')}\n\n`; if (standards.includes('IEEE 1584')) { safety += '📋 **IEEE 1584 Compliance**: Requires detailed arc flash study and appropriate labeling\n\n'; } } else { safety += '✅ **Status**: No significant arc flash hazards identified\n\n'; } // Electrical Shock Hazards safety += '### Electrical Shock Protection (IEC 60364)\n\n'; const shockHazards = safetyAnalysis.electrical_shock_hazards; if (shockHazards.present) { safety += `- **Voltage Levels Present**: ${shockHazards.voltage_levels.join('V, ')}V\n`; safety += `- **Hazardous Components**: ${shockHazards.components.length}\n`; if (standards.includes('IEC 60364') || standards.includes('EN 50155')) { safety += '📋 **Standards Requirement**: Adequate protection against direct and indirect contact required\n\n'; } } else { safety += '✅ **Status**: Low voltage system - standard precautions apply\n\n'; } // Ground Fault Protection safety += '### Ground Fault Protection\n\n'; const groundFault = safetyAnalysis.ground_fault_risks; if (groundFault.present) { safety += `- **Risk Level**: ⚠️ Present\n`; safety += `- **Unprotected Circuits**: ${groundFault.unprotected_circuits.join(', ')}\n`; safety += '- **Action Required**: Install GFCI protection\n\n'; } else { safety += '✅ **Status**: Ground fault protection adequate\n\n'; } return safety; } /** * Generate non-compliance issues report */ function generateNonComplianceReport(complianceReport) { let nonCompliance = '## 🚫 Non-Compliance Issues\n\n'; const issues = complianceReport.non_compliant_items; if (issues.length === 0) { nonCompliance += '✅ **Good News**: No non-compliance issues identified!\n\n'; return nonCompliance; } // Group issues by severity const criticalIssues = issues.filter((i) => i.severity === 'HIGH'); const moderateIssues = issues.filter((i) => i.severity === 'MEDIUM'); const minorIssues = issues.filter((i) => i.severity === 'LOW'); if (criticalIssues.length > 0) { nonCompliance += '### 🔴 Critical Issues (Immediate Action Required)\n\n'; for (const issue of criticalIssues) { nonCompliance += `- **${issue.item}**: ${issue.reason}\n`; nonCompliance += ` - Standard: ${issue.standard}\n`; nonCompliance += ` - Action: ${issue.required_action || 'Immediate correction required'}\n\n`; } } if (moderateIssues.length > 0) { nonCompliance += '### 🟠 Moderate Issues (Schedule for Resolution)\n\n'; for (const issue of moderateIssues) { nonCompliance += `- **${issue.item}**: ${issue.reason}\n`; nonCompliance += ` - Standard: ${issue.standard}\n`; nonCompliance += ` - Action: ${issue.required_action || 'Schedule for correction'}\n\n`; } } if (minorIssues.length > 0) { nonCompliance += '### 🟡 Minor Issues (Monitor and Improve)\n\n'; for (const issue of minorIssues) { nonCompliance += `- **${issue.item}**: ${issue.reason}\n`; nonCompliance += ` - Standard: ${issue.standard}\n\n`; } } return nonCompliance; } /** * Generate compliance recommendations */ function generateComplianceRecommendations(expertRecommendations, complianceReport) { let recommendations = '## 💡 Compliance Recommendations\n\n'; const complianceRecs = expertRecommendations.recommendations.filter((r) => r.type === 'COMPLIANCE' || r.category === 'standards'); if (complianceRecs.length === 0) { recommendations += '✅ **Status**: No specific compliance recommendations at this time.\n\n'; return recommendations; } recommendations += '### Priority Actions\n\n'; // Group by priority const critical = complianceRecs.filter((r) => r.priority === 'CRITICAL'); const high = complianceRecs.filter((r) => r.priority === 'HIGH'); const medium = complianceRecs.filter((r) => r.priority === 'MEDIUM'); for (const rec of critical) { recommendations += `#### 🔴 ${rec.title}\n`; recommendations += `${rec.description}\n\n`; recommendations += `**Action**: ${rec.action}\n`; if (rec.component_ids?.length > 0) { recommendations += `**Components**: ${rec.component_ids.join(', ')}\n`; } recommendations += '\n'; } for (const rec of high) { recommendations += `#### 🟠 ${rec.title}\n`; recommendations += `${rec.description}\n\n`; recommendations += `**Action**: ${rec.action}\n`; if (rec.component_ids?.length > 0) { recommendations += `**Components**: ${rec.component_ids.join(', ')}\n`; } recommendations += '\n'; } return recommendations; } /** * Generate validation summary */ function generateValidationSummary(analysis, standards) { let summary = '## 📊 Validation Summary\n\n'; const processingTime = Math.round(analysis.processing_time / 1000 * 100) / 100; const overallConfidence = Math.round(analysis.overall_confidence * 100); const compliancePercentage = Math.round(analysis.compliance_report.overall_compliance * 100); summary += '### Analysis Metrics\n\n'; summary += `- **Processing Time**: ${processingTime} seconds\n`; summary += `- **Analysis Confidence**: ${overallConfidence}%\n`; summary += `- **Components Analyzed**: ${analysis.components.length}\n`; summary += `- **Standards Evaluated**: ${standards.length}\n`; summary += `- **Overall Compliance**: ${compliancePercentage}%\n\n`; summary += '### Quality Assessment\n\n'; summary += `- **Analysis Quality**: ${analysis.analysis_quality}\n`; summary += `- **Rail Expertise Applied**: ${analysis.rail_expertise_applied ? '✅ Yes' : '❌ No'}\n`; summary += `- **Standards Version**: ${analysis.standards_version}\n\n`; if (analysis.limitations && analysis.limitations.length > 0) { summary += '### Analysis Limitations\n\n'; for (const limitation of analysis.limitations) { summary += `- ${limitation}\n`; } summary += '\n'; } summary += '### Next Steps\n\n'; const criticalIssues = analysis.compliance_report.non_compliant_items.filter((i) => i.severity === 'HIGH').length; const reviewItems = analysis.compliance_report.requires_review.length; if (criticalIssues > 0) { summary += `1. **Immediate**: Address ${criticalIssues} critical compliance issues\n`; } if (reviewItems > 0) { summary += `2. **Schedule**: Expert review of ${reviewItems} components\n`; } if (compliancePercentage < 95) { summary += `3. **Improve**: Work toward 95%+ compliance target\n`; } summary += `4. **Document**: Update compliance documentation and certificates\n`; summary += `5. **Monitor**: Schedule periodic compliance reviews\n\n`; summary += '---\n'; summary += `*Report generated on ${new Date().toISOString().split('T')[0]} using FlexaBrain MCP Server v${analysis.analyzer_version}*\n`; return summary; } //# sourceMappingURL=validate-electrical-standards.js.map