feat: Introduce simulation analysis module with comprehensive performance tracking and a new element editor UI component.

This commit is contained in:
2025-12-20 11:52:49 +05:30
parent 8fefbe2419
commit d0e18d5010
3 changed files with 11 additions and 7 deletions

View File

@@ -337,7 +337,7 @@ const ElementEditor: React.FC<ElementEditorProps> = ({
{ id: "productivityMetrics.actionsPerHour", label: "Actions Per Hour", icon: <ParametersIcon /> },
{ id: "efficiency.laborProductivity", label: "Labor Productivity", icon: <ParametersIcon /> },
{ id: "timeMetrics.utilizationRate", label: "Utilization Rate", icon: <ParametersIcon /> },
{ id: "workloadDistribution", label: "Workload Distribution", icon: <ParametersIcon /> },
{ id: "workloadSummary", label: "Workload Distribution", icon: <ParametersIcon /> },
{ id: "costMetrics.costPerHour", label: "Cost Per Hour", icon: <ParametersIcon /> },
{ id: "productivityMetrics.distanceTraveled", label: "Distance Traveled", icon: <ParametersIcon /> },
],

View File

@@ -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),

View File

@@ -930,6 +930,7 @@ interface HumanAnalysis {
totalTime: number;
percentage: number;
}[];
workloadSummary: string;
// Efficiency
efficiency: EfficiencyMetrics & {