Skip to main content

Overall Equipment Effectiveness for Python: availability, performance and quality with the full time waterfall, TEEP, and correct multi-machine roll-up. Computed from the standard definitions and validated against published examples.

Project description

oee

CI PyPI License: MIT

Overall Equipment Effectiveness for Python.

Compute OEE (Availability x Performance x Quality) from machine times and piece counts, get the full time waterfall and the three loss categories, TEEP and utilization, and roll figures up correctly across machines and shifts. Computed from the standard definitions and validated against published worked examples.

Motivation

OEE is the standard manufacturing efficiency metric, but Python has no library for it: what exists is monitoring applications (Flask/Django dashboards) or one-off tutorial scripts. The arithmetic looks trivial (three numbers multiplied) and that is exactly why it is usually done wrong:

  • the time waterfall (planned -> run -> net run -> fully productive) and where each loss sits is skipped;
  • TEEP and utilization (which capture schedule loss) are left out;
  • and figures are averaged across machines, which is incorrect: a fast machine and a slow one do not combine to the mean of their OEEs.

oee does these properly, from the standard definitions, and returns one result with the factors, the waterfall, every loss, and provenance.

pip install oee

No runtime dependencies.

Usage

The canonical worked example (Vorne's Fast Guide to OEE):

import oee

r = oee.oee(
    planned_production_time=420,   # minutes (480 shift - 60 of breaks)
    downtime=47,
    ideal_rate=60,                 # pieces per minute
    total_count=19271,
    reject_count=423,
    all_time=480,                  # optional, for TEEP and utilization
)
r.availability   # 0.888
r.performance    # 0.861
r.quality        # 0.978
r.oee            # 0.748
r.teep           # 0.654
print(r.summary())

Roll up across machines (correctly, not by averaging):

m1 = oee.oee(planned_production_time=100, run_time=90, ideal_cycle_time=1,
             total_count=80, good_count=80)     # OEE 0.80
m2 = oee.oee(planned_production_time=300, run_time=150, ideal_cycle_time=1,
             total_count=150, good_count=135)   # OEE 0.45

line = oee.aggregate([m1, m2])
line.oee         # 0.5375, not the 0.625 average of the two

When you already have the three factors:

oee.oee_from_factors(0.90, 0.95, 0.999).world_class   # True (OEE >= 85%)

Every result carries the factors, the time waterfall, the losses, world_class and meets_target flags, summary(), and a JSON-safe to_dict() with provenance (version, input hash, timestamp).

What it computes

Group Output
Factors availability, performance, quality, OEE
Extended TEEP, utilization (when total calendar time is given)
Waterfall planned -> run -> net run -> fully productive time, with schedule, availability, performance and quality losses
Roll-up correct aggregation across machines, lines and shifts

All times must be in the same unit; ideal_cycle_time is that unit per piece (or pass ideal_rate in pieces per that unit). Performance above 100% is capped and flagged, since it means the ideal rate or counts are off.

Status

Version 0.1.0. Single-machine OEE, the time waterfall, TEEP/utilization, and correct roll-up. The OEEResult contract is append-only from here.

Roadmap

Version Scope
0.2 the six big losses (breakdown/setup, minor stops/speed, defects/startup) and a downtime-reason Pareto; computing OEE from an event log
0.3 plotting (the OEE waterfall, six-big-losses and trend charts) as an optional extra
0.4 an MCP server so an agent can compute and explain OEE

Out of scope: data collection / machine connectivity (that is the job of an MES or an IoT dashboard); oee is the calculation layer they can build on.

License

MIT. Written and maintained by Atakan Arikan, MSc Student at Tsinghua University and Politecnico di Milano.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oee-0.1.0.tar.gz (12.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

oee-0.1.0-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

File details

Details for the file oee-0.1.0.tar.gz.

File metadata

  • Download URL: oee-0.1.0.tar.gz
  • Upload date:
  • Size: 12.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for oee-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9c3d7f00975941a9346942cc027466a6fd9cb8a03248e76cf4278867787c69a8
MD5 00db50da4b43f471fc47c9051fdef098
BLAKE2b-256 894881832259aa95a42b35144db427e7170e4f28de6066d3f0573dd98cca9de8

See more details on using hashes here.

Provenance

The following attestation bundles were made for oee-0.1.0.tar.gz:

Publisher: release.yml on arikanatakan/oee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file oee-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: oee-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 10.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for oee-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 20c5f665b8d35c11523354dcace9f92e284888c598f08308a9217d32ae73ddfb
MD5 baf231ae3c7b635a09f798a26b60e8b6
BLAKE2b-256 4c1084328af6900e0141aea50911a1e390e9e33b3c18e48b0feea9406a9467a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for oee-0.1.0-py3-none-any.whl:

Publisher: release.yml on arikanatakan/oee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page