2016-07-09 01:40:39 +07:00
|
|
|
|
==================================================
|
2020-11-13 21:47:26 +07:00
|
|
|
|
What is a Removal Strategy (FIFO, LIFO, and FEFO)?
|
2016-07-09 01:40:39 +07:00
|
|
|
|
==================================================
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
Usually, *Removal Strategies* are defined in picking operations to select the best products to
|
|
|
|
|
optimize the distance for the worker, for quality control purposes, or to first move the products
|
|
|
|
|
with the closest expiration date.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
When a product movement needs to be done, Odoo finds available products that can be assigned to
|
|
|
|
|
the transfer. The way Odoo assigns these products depends on the *Removal Strategy* defined in
|
|
|
|
|
the *Product Category* or on the *Location*.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
What happens inside the warehouse?
|
|
|
|
|
==================================
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
Imagine a generic warehouse plan, with receiving docks and area, storage locations, picking and
|
|
|
|
|
packing areas, and shipping docks. All products go through all these locations, but some rules,
|
|
|
|
|
such as removal strategies, can have an effect on which products are taken for the pickings.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
.. image:: media/empty-dock.png
|
|
|
|
|
:align: center
|
|
|
|
|
:alt: empty stock waiting for deliveries at the docks.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
Here, vendor trucks unload pallets of goods at the docks. Then, operators scan the products in the
|
|
|
|
|
receiving area, with the receiving date and, if the product has an expiration date, the expiration
|
|
|
|
|
date. After that, products are stored in their respective locations.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
.. image:: media/entering-stocks.png
|
|
|
|
|
:align: center
|
|
|
|
|
:alt: products entering stock via the receiving area.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
Next, several orders for the same product are made, but you didn’t receive the goods the same day
|
|
|
|
|
and they don’t have the same expiration date. In that situation, you logically prefer sending those
|
|
|
|
|
with the closest date first. Depending on the removal strategy you chose, Odoo generates a transfer
|
|
|
|
|
with the products fitting your settings the best.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
.. image:: media/packing-products.png
|
|
|
|
|
:align: center
|
|
|
|
|
:alt: products being packed at packing area for delivery, taking expiration dates into account.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
.. note::
|
|
|
|
|
On the transfer form, you can find the product’s lot/serial number to pick for delivery.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
How does it work?
|
|
|
|
|
=================
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
First In, First Out (FIFO)
|
|
|
|
|
--------------------------
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
When using a **First In, First Out** strategy, a demand for some products triggers a removal rule
|
|
|
|
|
which requests a transfer for the lot/serial number that has entered your stock the first.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
To be clearer, let’s imagine that you have three lots of nails in your warehouse. Those three have
|
|
|
|
|
the following lot numbers: 00001, 00002, 00003, each with 5 nails boxes in it. 00001 entered the
|
|
|
|
|
stock on the 23rd of May, 00002 on the 25th of May, and 00003 on the 1st of June. A customer orders
|
|
|
|
|
you 6 boxes on the 11th of June. With the *FIFO* strategy selected, a transfer is requested for the
|
|
|
|
|
five boxes of 00001 and one of the boxes in 00002 because 00001 has entered your stock before the
|
|
|
|
|
others. The box from 00002 is taken because it has the oldest enter date after 00001.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
So, for every order of a product with the *FIFO* strategy selected, Odoo requests a transfer for the
|
|
|
|
|
good that has been in your stock for the longest period.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
Last In, First Out (LIFO)
|
|
|
|
|
-------------------------
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
The same way as for FIFO, the **Last In, First Out** strategy is based on moving products based on the
|
|
|
|
|
date they entered the stock. Here, a demand for some products triggers a removal rule that requests a
|
|
|
|
|
transfer for the lot/serial number that has entered your stock the last.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
To better understand, let’s imagine three lots of screws in your warehouse. Those three have the
|
|
|
|
|
following numbers: 10001, 10002, 10003, each with 10 screw boxes in it. 10001 has entered the stock
|
|
|
|
|
on the 1st of June, 10002 on the 3rd of June, and 10003 on the 6th of June. A customer orders
|
|
|
|
|
7 boxes on the 8th of June. With the *LIFO* strategy selected, a transfer is requested for seven
|
|
|
|
|
boxes of 10003 because that lot is the last one to have entered the stock.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
So, basically, for every order of a product with the *LIFO* strategy used, a transfer for the last
|
|
|
|
|
one to have entered the stock is requested.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
.. note::
|
|
|
|
|
This strategy is banned in many countries and can lead to only have old or obsolete products
|
|
|
|
|
in your stock.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
First Expire, First Out (FEFO)
|
|
|
|
|
------------------------------
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
The **First Expire, First Out** strategy is a bit different from the two others. Here, it is the
|
|
|
|
|
expiration date that is important and not the date the product entered the stock.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
Let’s imagine three lots of 6-eggs boxes (in this specific case, don’t forget to use
|
|
|
|
|
:doc:`units of measure <../../management/products/uom>`). Those three have the following numbers:
|
|
|
|
|
20001, 20002, and 20003, each with 5 boxes in it. 20001 has entered the stock on the 1st of July
|
|
|
|
|
and expires on the 15th of July, 20002 on the 2nd and expires on the 14th of July, and 20003 on
|
|
|
|
|
the 4th and expires on the 21st of July. A customer orders 6 boxes on the 5th of July. With the
|
|
|
|
|
*FEFO* strategy selected, a transfer is requested for the five boxes of 20002 and one from 20001.
|
|
|
|
|
The transfer for all the boxes of the lot 20002 is because they have the closest expiration date.
|
|
|
|
|
The transfer also requests one box from 20001 because it’s the lot that expires the sooner after 20002.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
Then, you can remember that for every order of a product with the *FEFO* strategy, a transfer is
|
|
|
|
|
requested for the product that has the nearest expiration date from the order date.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
Use Removal Strategies
|
|
|
|
|
======================
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
To identify some units from other ones, you need to track them, either by *lot* or by *serial number*.
|
|
|
|
|
To do so, go to :menuselection:`Configuration --> Settings`. Then, activate *Storage Location*,
|
|
|
|
|
*Multi-Steps Routes*, and *Lots & Serial Numbers*.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
.. image:: media/enabled-features.png
|
|
|
|
|
:align: center
|
|
|
|
|
:alt: features to enable in order to properly use removal strategies.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
.. note::
|
|
|
|
|
To work with the *FEFO* strategy, activate the *Expiration Dates* feature.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
Next, you need to define your removal strategy, on *Product Categories* via
|
|
|
|
|
:menuselection:`Inventory --> Configuration --> Product Categories`.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
.. image:: media/first-in-first-out.png
|
|
|
|
|
:align: center
|
|
|
|
|
:alt: force removal strategy set up as first in first out.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
FIFO (First In, First Out)
|
|
|
|
|
--------------------------
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
As said, a *FIFO* strategy implies that products stocked first move out first. Companies should use
|
|
|
|
|
that method if they are selling products with short demand cycles, such as clothes, and to ensure
|
|
|
|
|
they are not stuck with outdated styles in stock.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
For this example, we created three lots of white shirts. Those are from the All/Clothes category,
|
|
|
|
|
where we put *FIFO* as the removal strategy. In our stock location (WH/Stock), we now find the
|
|
|
|
|
three lots available.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
.. image:: media/inventory-valuation.png
|
|
|
|
|
:align: center
|
|
|
|
|
:alt: view of the white shirt lots inventory valuation.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
The lot 000001 contains 5 shirts, 000002 contains 3 shirts, and 000003 contains 2. As it can be
|
|
|
|
|
seen above, 000001 has entered the stock first. Let’s create a sale order of six white shirts
|
|
|
|
|
to check that products from that lot are the first ones to move out.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
On the delivery order linked to the picking, you can see that the oldest lot numbers have been
|
|
|
|
|
reserved thanks to the *FIFO* strategy.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
.. image:: media/reserved-lots-FIFO.png
|
|
|
|
|
:align: center
|
|
|
|
|
:alt: two lots being reserved for sell with the FIFO strategy.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
LIFO (Last In, First Out)
|
|
|
|
|
-------------------------
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
With a *LIFO* strategy, that’s quite the opposite. In fact, the products that are brought the
|
|
|
|
|
last move out the first. It is mostly used in case of products without a shelf life.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
Even if our white shirts are clothes, we can say that they are timeless. So, let’s use them to
|
|
|
|
|
test our *LIFO* strategy. Once again, open the product category via :menuselection:`Inventory
|
|
|
|
|
--> Configuration --> Product Categories` and change the removal strategy to *LIFO*.
|
2016-10-11 06:24:45 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
.. image:: media/last-in-first-out.png
|
|
|
|
|
:align: center
|
|
|
|
|
:alt: last in first out strategy set up as forced removal strategy.
|
2016-10-11 06:24:45 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
Now, create a sale order for 4 white shirts and check that the reserved products are from lots
|
|
|
|
|
000003 and 000002.
|
2016-10-11 06:24:45 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
.. image:: media/reserved-lots-LIFO.png
|
|
|
|
|
:align: center
|
|
|
|
|
:alt: two lots being reserved for sell with the LIFO strategy.
|
2016-10-11 06:24:45 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
.. important::
|
|
|
|
|
Don’t forget that the *LIFO* strategy is banned in many countries!
|
2016-10-11 06:24:45 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
FEFO (First Expiry, First Out)
|
|
|
|
|
------------------------------
|
2016-10-11 06:24:45 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
With the *FEFO* strategy, the way products are picked is not based on the reception date. In this
|
|
|
|
|
particular case, they are dispatched according to their expiration date.
|
2016-10-11 06:24:45 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
.. note::
|
|
|
|
|
To have more information about Expiration date, please have a look at
|
|
|
|
|
:doc:`the related doc <../../management/lots_serial_numbers/expiration_dates>`.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
By activating *Expiration Dates*, it becomes possible to define different dates on the serial/lot
|
|
|
|
|
numbers to be used in *FEFO*. These dates can be set by going to :menuselection:`Inventory -->
|
|
|
|
|
Master Data --> Lots/Serial Numbers`.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
.. image:: media/removal-date.png
|
|
|
|
|
:align: center
|
|
|
|
|
:alt: view of the removal date for 0000001.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
Lots are picked based on their removal date, from earliest to latest. Lots without a removal date
|
|
|
|
|
defined are picked after lots with removal dates.
|
|
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
Other dates are for informational and reporting purposes only. If not removed from the stock,
|
|
|
|
|
lots that are past the expiration dates may still be picked for delivery orders!
|
|
|
|
|
|
|
|
|
|
To use the *FEFO* strategy, once again go to :menuselection:`Inventory --> Configuration -->
|
|
|
|
|
Product Categories` and choose *FEFO* as the *Force Removal Strategy*.
|
|
|
|
|
|
|
|
|
|
.. image:: media/first-expiry-first-out.png
|
|
|
|
|
:align: center
|
|
|
|
|
:alt: view of the FEFO strategy being set up as forced removal strategy.
|
|
|
|
|
|
|
|
|
|
For this particular case, let’s use hand cream. As usual, we have three lots of them.
|
2015-11-17 17:50:13 +07:00
|
|
|
|
|
|
|
|
|
+-----------------------+---------------+-----------------------+
|
|
|
|
|
| **Lot / Serial No** | **Product** | **Expiration Date** |
|
|
|
|
|
+=======================+===============+=======================+
|
2020-11-13 21:47:26 +07:00
|
|
|
|
| 0000001 | Hand Cream | 09/30/2019 |
|
2015-11-17 17:50:13 +07:00
|
|
|
|
+-----------------------+---------------+-----------------------+
|
2020-11-13 21:47:26 +07:00
|
|
|
|
| 0000002 | Hand Cream | 11/30/2019 |
|
2015-11-17 17:50:13 +07:00
|
|
|
|
+-----------------------+---------------+-----------------------+
|
2020-11-13 21:47:26 +07:00
|
|
|
|
| 0000003 | Hand Cream | 10/31/2019 |
|
2015-11-17 17:50:13 +07:00
|
|
|
|
+-----------------------+---------------+-----------------------+
|
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
When we realize a sale for 25 units of Hand Cream, we can see that the lot numbers which have been
|
|
|
|
|
automatically reserved by Odoo are the ones with the closest expiration date, meaning 0000001 and
|
|
|
|
|
0000003.
|
[IMP] Inventory valuation method (FGI review)
Spec:
- In accounting doc remove the last three topics and replace them by the memento. They all head to the old memento.
- add links to new memento in following page: https://www.odoo.com/documentation/user/9.0/inventory/routes/strategies/removal.html
- The following doc topic "What costing method should you use? (standard, average, fifo)" heads to the former memento https://www.odoo.com/documentation/functional/valuation.html#costingmethod
This memento does not answer this complex question at all actually. Please remove it.
- The introduction text should be before "Costing Method" title:
Every year your inventory valuation has to be recorded in your balance sheet. This implies two main choices:
the way you compute the cost of your stored items (Standard vs. Average vs. Real Price);
the way you record the inventory value into your books (Periodic vs. Perpetual).
- New definition for FIFO (right side):
For Real Price (FIFO, LIFO, FEFO, etc), the costing is further refined by the removal strategy set on the warehouse location or product's internal category. The default strategy is FIFO. With such method, your inventory value is computed from the real cost of your stored products (cfr. Quantitative Valuation) and not from the cost price shown in the product form. Whenever you ship items, the cost price is reset to the cost of the last item(s) shipped. This cost price is used to value any product not received from a purchase order (e.g. inventory adjustments).
FIFO is advised if you manage all your workflow into Odoo (Sales, Purchases, Inventory). It suits any kind of users.
- Add definition for LIFO method:
For Real Price (FIFO, LIFO, FEFO, etc), the costing is further refined by the removal strategy set on the warehouse location or product's internal category. The default strategy is FIFO. With such method, your inventory value is computed from the real cost of your stored products (cfr. Quantitative Valuation) and not from the cost price shown in the product form. Whenever you ship items, the cost price is reset to the cost of the last item(s) shipped. This cost price is used to value any product not received from a purchase order (e.g. inventory adjustments).
LIFO is not permitted outside the United States.
- New definition for Average Price:
The Average Price method recomputes the cost price as a receipt order has been processed, based on prices defined in tied purchase orders:
FORMULA (see here attached)
The average cost does not change when products leave the warehouse.
From an accounting point of view, this method is mainly justified in case of huge purchase price variations and is quite unusual due to its operational complexity. Your actually need a software like Odoo to easily keep this cost up-to-date.
This method is dedicated to advanced users. It requires well established business processes because the order in which you process receipt orders matters in the cost computation.
- In Continental memento: If the stock value decreased, he makes it upside down. -> If the stock value decreased, the "Inventory" account is credited and the "Inventory Variations" debited.
- Remove "[1] products leaving the stock have no impact on the average price." Now added to average price definition.
- At the botton, add links to following docs:
What is a removal strategy (FIFO, LIFO, FEFO, Specific Indentification): https://www.odoo.com/documentation/user/9.0/inventory/routes/strategies/removal.html
Impact on the average price valuation when returning goods: https://www.odoo.com/documentation/user/9.0/accounting/others/inventory/avg_price_valuation.html
How to integrate landed costs in the cost of the product? https://www.odoo.com/documentation/user/9.0/inventory/routes/costing/landed_costs.html
2016-03-08 16:12:06 +07:00
|
|
|
|
|
2020-11-13 21:47:26 +07:00
|
|
|
|
.. image:: media/reserved-hand-cream.png
|
|
|
|
|
:align: center
|
|
|
|
|
:alt: two hand cream lots reserved for sell with the FEFO strategy.
|