From d0e18d501055d5d8e9bec8393e2c50a6ad1fe590 Mon Sep 17 00:00:00 2001 From: Jerald-Golden-B Date: Sat, 20 Dec 2025 11:52:49 +0530 Subject: [PATCH] feat: Introduce simulation analysis module with comprehensive performance tracking and a new element editor UI component. --- .../components/element/ElementEditor.tsx | 2 +- app/src/modules/simulation/analyzer/analyzer.tsx | 15 +++++++++------ app/src/types/simulationTypes.d.ts | 1 + 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/app/src/components/SimulationDashboard/components/element/ElementEditor.tsx b/app/src/components/SimulationDashboard/components/element/ElementEditor.tsx index 2b43af4..b214f34 100644 --- a/app/src/components/SimulationDashboard/components/element/ElementEditor.tsx +++ b/app/src/components/SimulationDashboard/components/element/ElementEditor.tsx @@ -337,7 +337,7 @@ const ElementEditor: React.FC = ({ { id: "productivityMetrics.actionsPerHour", label: "Actions Per Hour", icon: }, { id: "efficiency.laborProductivity", label: "Labor Productivity", icon: }, { id: "timeMetrics.utilizationRate", label: "Utilization Rate", icon: }, - { id: "workloadDistribution", label: "Workload Distribution", icon: }, + { id: "workloadSummary", label: "Workload Distribution", icon: }, { id: "costMetrics.costPerHour", label: "Cost Per Hour", icon: }, { id: "productivityMetrics.distanceTraveled", label: "Distance Traveled", icon: }, ], diff --git a/app/src/modules/simulation/analyzer/analyzer.tsx b/app/src/modules/simulation/analyzer/analyzer.tsx index e45d64a..d696689 100644 --- a/app/src/modules/simulation/analyzer/analyzer.tsx +++ b/app/src/modules/simulation/analyzer/analyzer.tsx @@ -1571,13 +1571,15 @@ function Analyzer() { const totalActionTime = workerTime + manufacturerTime + operatorTime + assemblerTime; - const workloadDistribution = [ - { actionType: "worker", count: workerActions, totalTime: workerTime, percentage: totalActionTime > 0 ? (workerTime / totalActionTime) * 100 : 0 }, - { actionType: "manufacturer", count: manufacturerActions, totalTime: manufacturerTime, percentage: totalActionTime > 0 ? (manufacturerTime / totalActionTime) * 100 : 0 }, - { actionType: "operator", count: operatorActions, totalTime: operatorTime, percentage: totalActionTime > 0 ? (operatorTime / totalActionTime) * 100 : 0 }, - { actionType: "assembler", count: assemblerActions, totalTime: assemblerTime, percentage: totalActionTime > 0 ? (assemblerTime / totalActionTime) * 100 : 0 }, + const workloadDistributionData = [ + { actionType: "Worker", count: workerActions, totalTime: workerTime, percentage: totalActionTime > 0 ? (workerTime / totalActionTime) * 100 : 0 }, + { actionType: "Manufacturer", count: manufacturerActions, totalTime: manufacturerTime, percentage: totalActionTime > 0 ? (manufacturerTime / totalActionTime) * 100 : 0 }, + { actionType: "Operator", count: operatorActions, totalTime: operatorTime, percentage: totalActionTime > 0 ? (operatorTime / totalActionTime) * 100 : 0 }, + { actionType: "Assembler", count: assemblerActions, totalTime: assemblerTime, percentage: totalActionTime > 0 ? (assemblerTime / totalActionTime) * 100 : 0 }, ].filter((w) => w.count > 0); + const workloadDistribution = workloadDistributionData.map((d) => `${Math.round(d.percentage)}%`).join(" | "); + // Performance calculations const idealActionsPerHour = 60; // 60 actions per hour ideal const actualActionsPerHour = timeMetrics.totalTime > 0 ? (actionsCompleted / timeMetrics.totalTime) * 3600 : 0; @@ -1640,7 +1642,8 @@ function Analyzer() { loadEfficiency: loadUtilization, }, - workloadDistribution, + workloadDistribution: workloadDistributionData, + workloadSummary: workloadDistribution === "" ? "0%" : workloadDistribution, efficiency: { overallEffectiveness: calculateOEE(timeMetrics.uptime, performanceRate, qualityMetrics.firstPassYield), diff --git a/app/src/types/simulationTypes.d.ts b/app/src/types/simulationTypes.d.ts index e04ae4f..f3a2366 100644 --- a/app/src/types/simulationTypes.d.ts +++ b/app/src/types/simulationTypes.d.ts @@ -930,6 +930,7 @@ interface HumanAnalysis { totalTime: number; percentage: number; }[]; + workloadSummary: string; // Efficiency efficiency: EfficiencyMetrics & {