npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

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:

  1. 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.
  2. Calculate Availability:

    Availability = Operating Time / Planned Production Time

  3. Calculate Ideal Cycle Time:

    Ideal Cycle Time = Planned Production Time / Total Parts to be Produced

  4. Calculate Performance:

    Performance = (Ideal Cycle Time × Total Parts Produced) / Operating Time

  5. Calculate Quality:

    Quality = Good Parts / Total Parts Produced

  6. 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.'
}