From 341aa8e4bef84f9103f9a7e1628c81582fa36c52 Mon Sep 17 00:00:00 2001 From: "John Holton (hojo)" Date: Tue, 2 Jul 2024 21:55:42 +0000 Subject: [PATCH] [ADD] Manufacturing: OEE closes odoo/documentation#10288 X-original-commit: 63ba53a942de5c313840953278f744f314b6b5f4 Signed-off-by: John Holton (hojo) --- .../manufacturing/workflows.rst | 1 + .../manufacturing/workflows/oee.rst | 169 ++++++++++++++++++ .../workflows/oee/oee-report.png | Bin 0 -> 11249 bytes 3 files changed, 170 insertions(+) create mode 100644 content/applications/inventory_and_mrp/manufacturing/workflows/oee.rst create mode 100644 content/applications/inventory_and_mrp/manufacturing/workflows/oee/oee-report.png diff --git a/content/applications/inventory_and_mrp/manufacturing/workflows.rst b/content/applications/inventory_and_mrp/manufacturing/workflows.rst index 222aeeb02..e1a5fd382 100644 --- a/content/applications/inventory_and_mrp/manufacturing/workflows.rst +++ b/content/applications/inventory_and_mrp/manufacturing/workflows.rst @@ -16,3 +16,4 @@ Workflows workflows/byproducts workflows/allocation workflows/continuous_improvement + workflows/oee diff --git a/content/applications/inventory_and_mrp/manufacturing/workflows/oee.rst b/content/applications/inventory_and_mrp/manufacturing/workflows/oee.rst new file mode 100644 index 000000000..78056142b --- /dev/null +++ b/content/applications/inventory_and_mrp/manufacturing/workflows/oee.rst @@ -0,0 +1,169 @@ +=============================== +Overall equipment effectiveness +=============================== + +.. |MO| replace:: :abbr:`MO (manufacturing order)` +.. |OEE| replace:: :abbr:`OEE (overall equipment effectiveness)` +.. |BoM| replace:: :abbr:`BoM (Bill of Materials)` + +In Odoo's *Manufacturing* app, *overall equipment effectiveness* (OEE) represents the amount of time +a work center is fully productive. |OEE| is displayed as a percentage of the total time a work +center is active. + +Fully productive time is considered to be time when the work center is operational **and** +processing work orders that have not exceeded their *expected duration*. + +|OEE| helps manufacturing teams understand the efficiency of work centers, and the causes of +manufacturing downtime. + +.. important:: + Since |OEE| tracks work center productivity, using it requires enabling the work centers feature + in the settings of the Manufacturing app. + + To do so, navigate to :menuselection:`Manufacturing app --> Configuration --> Settings`, and tick + the checkbox next to :guilabel:`Work Orders`, under the :guilabel:`Operations` heading. Then, + click :guilabel:`Save`. + +Efficiency standards +==================== + +For |OEE| to accurately reflect the percentage of fully productive time for a work center, the work +center **must** be properly configured with the correct productivity metrics. These include the work +center's *time efficiency*, *capacity*, and *OEE target*. + +Time efficiency +--------------- + +Time efficiency represents the efficiency of a work center when processing work orders, and is +represented as a percentage. A time efficiency value of 100% signifies that the work center +processes work orders at the speed of the expected duration, as listed on a product's |BoM|. A value +less than or greater than 100% signifies that the work center processes work orders slower or faster +than an operation's expected duration, respectively. + +To set the time efficiency for a work center, navigate to :menuselection:`Manufacturing app --> +Configuration --> Work Centers`, and select a work center. On the :guilabel:`General Information` +tab, enter a numerical value in the :guilabel:`Time Efficiency` field. + +.. example:: + Manufacturing a *chair* product requires two operations: *cut* and *assemble*. The product's + |BoM| lists an expected duration of 30 minutes for each operation. + + The cut operation is carried out at the *cut station* work center, which has a time efficiency + value of 50%. This means it takes twice as long to complete the operation, for a total time of + one hour. + + The assemble operation is carried out at the *assembly line* work center, which has a time + efficiency value of 200%. This means it takes half as long to complete the operation, for a total + time of 15 minutes. + +Capacity +-------- + +Capacity represents how many units of a product can be produced in parallel at a work center. The +duration of work orders for multiple units increases or decreases, based on how many units the work +center can handle. + +To set the capacity for a work center, navigate to :menuselection:`Manufacturing app --> +Configuration --> Work Centers`, and select a work center. On the :guilabel:`General Information` +tab, enter a numerical value in the :guilabel:`Capacity` field. + +.. example:: + A *drill station* work center has a capacity of one unit. An |MO| is confirmed for 10 units of a + *chair*, a product manufactured using the drill station. + + Since there are ten times as many units to produce than the work center can handle at once, the + operation time is ten times the duration listed on the product's |BoM|. + +|OEE| target +------------ + +The |OEE| target is the goal for how much of a work center's operating time should be fully +productive time. It is displayed as a percentage, and should only be set as high as `100%`. + +To set the |OEE| target for a work center, navigate to :menuselection:`Manufacturing app --> +Configuration --> Settings --> Work Centers`, and select a work center. On the :guilabel:`General +Information` tab, enter a numerical value of `100.00` or less in the :guilabel:`OEE Target` field. + +Calculating |OEE| +================= + +|OEE| is represented as a percentage value between zero and 100. The value signifies the amount of +time that a work center was fully productive. The remainder signifies the amount of time that the +work center was operating at less than full efficiency. This can occur for a number of reasons, +including *reduced speed*, *material availability*, and *equipment failure*. + +Fully productive time +--------------------- + +For a work center to be considered fully productive, it must be able to receive work orders, have +the components necessary to process work orders, and be operating within the expected duration of +the work order it is processing. + +.. example:: + An *assembly line* work center is not blocked, and receives a work order to assemble a *bicycle*. + The required components are available, so production begins as soon as they are picked and + delivered to the work center. The work order has an expected duration of 30 minutes, and is + completed in 27 minutes. All of this time is considered fully productive time. + +Reduced speed +------------- + +When a work center is operating at reduced speed, it means that it is processing a work order that +has exceeded its expected duration. While the work center may be operational, this is not considered +fully productive time. + +.. example:: + A *cutting station* work center receives a work order to cut boards for a *table*. The expected + duration of the work order is 15 minutes. The work order ends up taking 18 minutes to complete. + The work center is considered to have been operating at reduced speed during the three minutes + that exceeded the expected duration. + +Material availability +--------------------- + +Material availability refers to situations where a work center is able to accept a work order, but +the required components are not available. This can occur because the components are not in stock, +or are reserved for a different order. + +.. example:: + Manufacturing of a *bench* requires 20 units of *wood*. A manufacturing order (MO) is confirmed + for 10 units of the bench, but there is not enough wood in stock to begin manufacturing. The time + it takes to acquire the wood is recorded as material availability downtime. + +Equipment failure +----------------- + +Equipment failure signifies any period of time when a work center is unusable due to maintenance +issues with its equipment. This can be due to equipment breaking down, or when a work center is shut +down for scheduled maintenance. In these cases, a work center can be blocked using a +:doc:`maintenance request <../../maintenance/maintenance_requests>`. + +.. example:: + The drill at a *drill station* work center breaks down, causing the work center to be unusable. A + maintenance request is created to fix the drill, and the work center is blocked from receiving + work orders. It takes two hours to fix the drill, and make the work center available again. This + two-hour period is recorded as equipment failure downtime. + +|OEE| reporting +=============== + +To view |OEE| reporting metrics for every work center, navigate to :menuselection:`Manufacturing app +--> Reporting --> Overall Equipment Effectiveness`. This page shows the metrics for each work center +with |OEE| data. + +Alternatively, to see |OEE| reporting metrics for a single work center, navigate to +:menuselection:`Manufacturing app --> Configuration --> Work Centers`, and select a work center. At +the top of the work center's form, click the :icon:`fa-pie-chart` :guilabel:`OEE` smart button. + +By default, the main |OEE| reporting page shows data in a bar chart, while the page for a specific +work center shows it in a pie chart. To select a different chart type on either page, click the +:icon:`fa-bar-chart` :guilabel:`(bar chart)`, :icon:`fa-line-chart` :guilabel:`(line chart)`, or +:icon:`fa-pie-chart` :guilabel:`(pie chart)` button above the displayed chart. + +It is also possible to see |OEE| data in a pivot view, or a list displaying each time entry, by +clicking the :icon:`oi-view-pivot` :guilabel:`(pivot view)` or :icon:`oi-view-list` :guilabel:`(list +view)` buttons at the top-right corner of the page. + +.. image:: oee/oee-report.png + :align: center + :alt: The dashboard of the OEE report. diff --git a/content/applications/inventory_and_mrp/manufacturing/workflows/oee/oee-report.png b/content/applications/inventory_and_mrp/manufacturing/workflows/oee/oee-report.png new file mode 100644 index 0000000000000000000000000000000000000000..9fedc8a1acbb8f8e4ad613cc947f7c0ba1fde6e9 GIT binary patch literal 11249 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 C`4)Qs literal 0 HcmV?d00001