overall-equipment-effectiveness
v1.0.25
Published
Overall Equipment Effectiveness (OEE) Calculator for manufacturing processes.
Downloads
14
Readme
Overall Equipment Effectiveness
OEE (Overall Equipment Effectiveness) is a metric used to measure the efficiency and productivity of a manufacturing process. It's calculated using the following formula:
OEE = Availability × Performance × Quality
Definitions:
Availability: Measures the percentage of time the equipment is actually running and producing good parts.
Availability = Operating Time / Planned Production Time
Performance: Measures how well the equipment is running compared to its maximum potential speed.
Ideal Cycle Time = Planned Production Time / Total Parts to be Produced
Performance = (Ideal Cycle Time × Total Parts Produced) / Operating Time
Quality: Measures the percentage of good parts produced compared to the total parts produced.
Quality = Good Parts / Total Parts Produced
Steps to Calculate OEE:
Gather Data:
- Operating Time: The total time the equipment was actively producing parts.
- Planned Production Time: The total time the equipment was scheduled to be running and producing parts.
- Total Parts Produced: The total number of parts produced during the operating time.
- Total Parts to be Produced: The target number of parts to be produced during the planned production time.
- Good Parts: The number of parts that meet quality standards.
Calculate Availability:
Availability = Operating Time / Planned Production Time
Calculate Ideal Cycle Time:
Ideal Cycle Time = Planned Production Time / Total Parts to be Produced
Calculate Performance:
Performance = (Ideal Cycle Time × Total Parts Produced) / Operating Time
Calculate Quality:
Quality = Good Parts / Total Parts Produced
Calculate OEE or Score:
OEE = Availability × Performance × Quality
By following these steps and plugging in the appropriate values, you can calculate the Overall Equipment Effectiveness (OEE) of your manufacturing process. OEE is expressed as a percentage, representing the efficiency of the manufacturing operation.
Methods
function calculateAvailability(operatingTime: number, plannedProductionTime: number): number;
function calculateIdealCycleTime(plannedProductionTime: number, totalPartsToBeProduced: number): number;
function calculatePerformance(idealCycleTime: number, operatingTime: number, totalPartsProduced: number): number;
function calculateQuality(goodParts: number, totalPartsProduced: number): number;
function calculateRejectedParts(totalPartsProduced: number, goodParts: number): number;
function calculateGoodParts(totalPartsProduced: number, rejectedParts: number): number;
function calculateOEE(availability: number, performance: number, quality: number): number;
function calculateScore(availability: number, performance: number, quality: number): number;
function calculateDowntime(plannedDowntime: number, unplannedDowntime: number, ...others: number[]): number;
function calculatePlannedProductionTime(shiftDuration: number, totalBreakTime: number): number;
function calculateStar(score: number): number;
function classifyLevel(score: number): string;
Getters
get availability(): number;
get idealCycleTime(): number;
get performance(): number;
get quality(): number;
get score(): number;
get identifier(): string | null;
get timestamp(): {date: number | null, month: number | null, year: number | null};
get shift(): string | number | null;
get rejectedParts(): number;
get goodParts(): number;
get totalPartsProduced(): number;
get totalPartsToBeProduced(): number;
get operatingTime(): number;
get plannedProductionTime(): number;
get downtime(): number;
get summary(): {
score: number;
availability: number;
performance: number;
quality: number;
};
get report(): {
score: number;
availability: number;
performance: number;
quality: number;
identifier: string | null;
shift: string | number | null;
timestamp: {date: number | null, month: number | null, year: number | null};
level: string;
star: number;
};
get level(): string;
get star(): number;
get docs(): {
terminology: {
availability: string;
idealCycleTime: string;
performance: string;
quality: string;
score: string;
downtime: string;
};
formulas: {
availability: string;
idealCycleTime: string;
performance: string;
quality: string;
score: string;
star: string;
operatingTime: string;
downtime: string;
plannedProductionTime: string;
rejectedParts: string;
};
parameters: {
operatingTime: string;
plannedProductionTime: string;
totalPartsProduced: string;
totalPartsToBeProduced: string;
goodParts: string;
rejectedParts: string;
shift: string;
date: string;
};
miscellaneous: {
downtime: {
plannedDowntime: string;
unplannedDowntime: string;
changeoverDowntime: string;
minorStops: string;
};
level: {
WorldClass: string;
Excellent: string;
Good: string;
Average: string;
Poor: string;
};
};
};
Usage
Example:
import {OverallEquipmentEffectiveness} from "overall-equipment-effectiveness";
const data = {
// Time in minutes
operatingTime: 450,
plannedProductionTime: 480,
// Production statistics in units
totalPartsProduced: 900,
totalPartsToBeProduced: 1000,
goodParts: 850,
// Machine details
identifier: "Oxtica CNC Milling", // string | null | undefined
shift: 3, // string | number | null | undefined
// Date information (timestamp can be undefined)
timestamp: {date: 14, month: 11, year: 2023},
};
const OEE = new OverallEquipmentEffectiveness(data);
console.log("\n");
console.log(`Identifier: ${OEE.identifier}`);
console.log(`Availability: ${(OEE.availability * 100).toFixed(1)} %`);
console.log(`Performance: ${(OEE.performance * 100).toFixed(1)} %`);
console.log(`Quality: ${(OEE.quality * 100).toFixed(1)} %`);
console.log(`Score: ${(OEE.score * 100).toFixed(1)} %`);
console.log(`Star: ${OEE.star.toFixed(2)}`);
console.log(`Shift: ${OEE.shift}`);
console.log(`Date: ${OEE.timestamp.date}`);
console.log(`Month: ${OEE.timestamp.month}`);
console.log(`Year: ${OEE.timestamp.year}`);
console.log(`Level: ${OEE.level}`);
console.log("\n");
console.log(`Rejected Parts: ${OEE.rejectedParts}`);
console.log(`Good Parts: ${OEE.goodParts}`);
console.log(`Total Parts Produced: ${OEE.totalPartsProduced}`);
console.log(`Total Parts To Be Produced: ${OEE.totalPartsToBeProduced}`);
console.log("\n");
console.log(`Ideal Cycle Time: ${OEE.idealCycleTime}`);
console.log(`Operating Time: ${OEE.operatingTime}`);
console.log(`Planned Production Time: ${OEE.plannedProductionTime}`);
console.log(`Downtime: ${OEE.downtime}`);
console.log("\n");
console.log("Summary: ");
console.log(OEE.summary);
console.log("\n");
console.log("Report: ");
console.log(OEE.report);
console.log("\n");
console.log("Formulas: ");
console.log(OEE.docs.formulas);
console.log(`\n`);
// console.log(OEE.docs.terminology);
// console.log(`\n`);
// console.log(OEE.docs.parameters);
// console.log(`\n`);
console.log("Downtime: ");
console.log(OEE.docs.miscellaneous.downtime);
console.log(`\n`);
Output:
Identifier: Oxtica CNC Milling
Availability: 93.8 %
Performance: 96.0 %
Quality: 94.4 %
Score: 85.0 %
Star: 4.25
Shift: 3
Date: 14
Month: 11
Year: 2023
Level: Excellent
Rejected Parts: 50
Good Parts: 850
Total Parts Produced: 900
Total Parts To Be Produced: 1000
Ideal Cycle Time: 0.48
Operating Time: 450
Planned Production Time: 480
Downtime: 30
Summary:
{
score: 0.8499999999999999,
availability: 0.9375,
performance: 0.96,
quality: 0.9444444444444444
}
Report:
{
score: 0.8499999999999999,
availability: 0.9375,
performance: 0.96,
quality: 0.9444444444444444,
identifier: 'Oxtica CNC Milling',
shift: 3,
timestamp: { date: 14, month: 11, year: 2023 },
star: 4.249999999999999,
level: 'Excellent'
}
Formulas:
{
availability: 'operatingTime / plannedProductionTime',
idealCycleTime: 'plannedProductionTime / totalPartsProduced',
performance: '(idealCycleTime * totalPartsProduced) / operatingTime',
quality: 'goodParts / totalPartsProduced',
score: 'availability * performance * quality',
star: 'score * 5',
operatingTime: 'plannedProductionTime - downtime',
downtime: 'plannedDowntime + unplannedDowntime + ...others',
plannedProductionTime: 'shiftDuration - totalBreakTime',
rejectedParts: 'totalPartsProduced - goodParts',
goodParts: "totalPartsProduced - rejectedParts"
}
Downtime:
{
plannedDowntime: 'Scheduled periods when the equipment is intentionally stopped for maintenance, setup, adjustments, or planned changeovers. Planned downtime is usually known in advance.',
unplannedDowntime: 'Unscheduled stoppages that occur due to unexpected issues, such as equipment breakdowns, tool failures, or other unforeseen problems. Unplanned downtime is often disruptive and requires immediate attention to resolve the issue and resume production.',
changeoverDowntime: 'Time taken to switch the manufacturing process from producing one product to another. Changeovers involve adjusting machinery, replacing tooling, and configuring settings for the new product.',
minorStops: 'Short stoppages that do not require a full line shutdown but still cause interruptions in the production process. These stops could be due to small issues like jams, misfeeds, or minor malfunctions.'
}