feat: Introduce simulation analysis module with comprehensive performance tracking and a new element editor UI component.
This commit is contained in:
@@ -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 /> },
|
||||
],
|
||||
|
||||
@@ -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),
|
||||
|
||||
1
app/src/types/simulationTypes.d.ts
vendored
1
app/src/types/simulationTypes.d.ts
vendored
@@ -930,6 +930,7 @@ interface HumanAnalysis {
|
||||
totalTime: number;
|
||||
percentage: number;
|
||||
}[];
|
||||
workloadSummary: string;
|
||||
|
||||
// Efficiency
|
||||
efficiency: EfficiencyMetrics & {
|
||||
|
||||
Reference in New Issue
Block a user