@flexabrain/mcp-server
Version:
Advanced electrical schematic analysis MCP server with rail engineering expertise
350 lines • 17.8 kB
JavaScript
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