Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,82 @@ FEFO removal
The *First Expired, First Out* (FEFO) removal strategy targets products for removal based on their
assigned removal dates.

.. seealso::
:doc:`About removal strategies <../removal_strategies>`
.. _inventory/warehouses_storage/fefo_enable:

Enabling the FEFO removal strategy
==================================

Lots and serial numbers differentiate identical products and track information like arrival or
expiration dates. To enable this feature, navigate to :menuselection:`Inventory --> Configuration
--> Settings`. Under the :guilabel:`Traceability` heading, check the box beside :guilabel:`Lots &
Serial Numbers`. After :guilabel:`Lots & Serial Numbers` is enabled, the :guilabel:`Expiration Date`
feature appears. Enable it to track expiration dates, best-before dates, removal dates, and alert
dates.

.. image:: fefo/enable-features.png
:alt: Enable Lots & Serial Numbers and Expiration Dates in the Inventory settings.

Enable tracking by lots or serial numbers
-----------------------------------------

Next, ensure the intended product is tracked by lots or serial numbers by navigating to the product
form through :menuselection:`Inventory --> Products --> Products` and selecting the desired product.
On the product form, open the :guilabel:`General Information` tab and select the check box next to
the :guilabel:`Track Inventory` field, then select either :guilabel:`By Unique Serial Number` or
:guilabel:`By Lots`.

.. image:: fefo/track-by-lots.png
:alt: Enable tracking by lot.

Setting dates
-------------

Next, set the :guilabel:`Expiration Date`, :guilabel:`Best Before Date`, :guilabel:`Removal Date`,
and :guilabel:`Alert Date` settings for the product. In the :guilabel:`Inventory` tab of the product
form, under the :guilabel:`Traceability` heading, select the :guilabel:`Expiration Date` check box.
The :guilabel:`Dates` heading appears. See :ref:`Removal date
<inventory/warehouses_storage/removal-date>` for more information.

Assigning lots and serial numbers
---------------------------------

After enabling the features, assign lot or serial numbers to products using an :doc:`inventory
adjustment <../../warehouses_storage/inventory_management/count_products>` or during :ref:`product
reception <inventory/product_management/assign-lots>`.

Setting removal strategies
--------------------------

After lot or serial numbers have been assigned, set the removal strategy on the storage location or
product category.

.. image:: fefo/location-categories.png
:alt: Find the Locations or Categories from the Configuration menu.

On the location
~~~~~~~~~~~~~~~

Open :menuselection:`Inventory app --> Configuration --> Locations`. Select the desired location. On
the location form, under the :guilabel:`Logistics` heading, select :guilabel:`First Expiry First Out
(FEFO)` from the list of removal strategies.

.. image:: fefo/set-on-location.png
:alt: Set First Expiry First Out as the location removal strategy.

On the product category
~~~~~~~~~~~~~~~~~~~~~~~

Configure removal strategies on product categories by going to :menuselection:`Inventory app -->
Configuration --> Categories` and selecting the intended product category. Next, in the
:guilabel:`Force Removal Strategy` field, specify :guilabel:`First Expiry First Out (FEFO)`.

.. image:: fefo/set-on-category.png
:alt: Set First Expiry First Out as the product category removal strategy.

.. important::
When there are different removal strategies applied on both the location and product category for
a product, the value set on the :guilabel:`Force Removal Strategy` field set on a product
category form is applied as top priority.

.. _inventory/warehouses_storage/removal-date:

Expand Down Expand Up @@ -34,9 +108,6 @@ number of days specified in the :guilabel:`Expiration Date` field of the product
The removal date takes this expiration date, and subtracts the number of days specified in the
:guilabel:`Removal Date` field of the product form.

.. seealso::
:doc:`Expiration dates <../../product_management/product_tracking/expiration_dates>`

.. example::
In the :guilabel:`Inventory` tab of the product, `Egg`, the following :guilabel:`Dates` are set
by the user:
Expand All @@ -45,7 +116,6 @@ The removal date takes this expiration date, and subtracts the number of days sp
- :guilabel:`Removal Date`: `15` days before expiration date

.. image:: fefo/user-set-date.png
:align: center
:alt: Display expiration and removal dates set on the product form.

A shipment of Eggs arrive at the warehouse on January 1st. So, the expiration date of the Eggs is
Expand All @@ -54,16 +124,20 @@ The removal date takes this expiration date, and subtracts the number of days sp

.. _inventory/warehouses_storage/exp-date:

To view the expiration dates of items in stock, navigate to the product form, and click the
:guilabel:`On Hand` smart button.

Next, click the additional options icon, located on the far-right, and select the columns:
:guilabel:`Expiration Date` and :guilabel:`Removal Date`.
To view the expiration dates of items in stock, go to :menuselection:`Inventory app --> Products -->
Lots / Serial Numbers`. By default, this report is grouped by location. If necessary, remove that
grouping in the search bar and group by product. Expand the product to show its lots. Next, click
the :icon:`oi-settings-adjust` :guilabel:`(settings adjust)` icon, located on the far-right, and
select the columns: :guilabel:`Expiration Date` and :guilabel:`Removal Date`.

.. image:: fefo/removal-date.png
:align: center
:alt: Show expiration dates from the inventory adjustments model accessed from the *On Hand*
smart button from the product form.
:alt: Show expiration dates from the Lots / Serial Numbers list.

Alternatively, view these dates by clicking the :guilabel:`Lot/Serial Numbers` smart button on the
product form.

.. image:: fefo/removal-date-lots-serial-numbers.png
:alt: Show expiration dates from the Lots/Serial Numbers list on the product form.

Workflow
========
Expand All @@ -72,15 +146,10 @@ Using the :abbr:`FEFO (First Expired, First Out)` removal strategy ensures that
nearest removal date are picked first.

To understand how this removal strategy works, consider the following example below about the
product, `Carton of eggs`, which is a box containing twelve eggs.
product, `Carton of Eggs`, which is a box containing twelve eggs.

The product is tracked :guilabel:`By Lots`, and the product category's :guilabel:`Force Removal
Strategy` is set to :guilabel:`First Expired, First Out (FEFO)`.

.. seealso::
- :ref:`Set up force removal strategy <inventory/warehouses_storage/removal-config>`
- :ref:`Enable lots tracking <inventory/warehouses_storage/lots-setup>`
- `Odoo Tutorials: Perishable Products <https://www.odoo.com/slides/slide/5324/share>`_
Strategy` is set to :guilabel:`First Expiry First Out (FEFO)`.

.. list-table::
:header-rows: 1
Expand All @@ -95,32 +164,38 @@ Strategy` is set to :guilabel:`First Expired, First Out (FEFO)`.
- 2
- 1
* - Expiration date
- April 4
- April 10
- April 15
- January 8, 2026
- January 15, 2026
- January 22, 2026
* - :ref:`Removal date <inventory/warehouses_storage/exp-date>`
- February 26
- March 4
- March 9
- December 24, 2025
- December 31, 2025
- January 7, 2026

To see the removal strategy in action, go to the :menuselection:`Sales app` and create a new
quotation.

Clicking :guilabel:`Confirm` creates a delivery order for today, December 29th, and the lot numbers
Clicking :guilabel:`Confirm` creates a delivery order for today, December 9th, and the lot numbers
with the soonest expiration dates are reserved, using the :abbr:`FEFO (First Expired, First Out)`
removal strategy.

To view the detailed pickings, click the :guilabel:`⦙≣ (bulleted list)` icon, located on the
far-right of the Carton of egg's product line, in the :guilabel:`Operations` tab of the delivery
order. Doing so opens the :guilabel:`Open: Stock move` pop-up window.
To view the detailed pickings, click the :guilabel:`Details` link, located on the far-right of the
Carton of Eggs' product line, in the :guilabel:`Operations` tab of the delivery order. Doing so
opens the :guilabel:`Detailed Operations` pop-up window.

In the :guilabel:`Open: Stock move` pop-up window, the :guilabel:`Pick from` field displays where
In the :guilabel:`Detailed Operations` pop-up window, the :guilabel:`Pick From` field displays where
the quantities to fulfill the :guilabel:`Demand` are picked from.

Since the order demanded six Cartons of eggs, using the :abbr:`FEFO (First Expired, First Out)`
removal strategy, all five Cartons from `LOT1`, with the removal date of February 26th, are picked.
The remaining Carton is selected from `LOT2`, which has a removal date of March 4th.
Since the order demanded six Cartons of Eggs, using the :abbr:`FEFO (First Expired, First Out)`
removal strategy, all five Cartons from `LOT1`, with the removal date of December 24, are picked.
The remaining Carton is selected from `LOT2`, which has a removal date of December 31.

.. image:: fefo/eggs-picking.png
:align: center
:alt: The stock moves window that shows the lots to be removed using FEFO.
:alt: The detailed operations window that shows the lots to be removed using FEFO.

.. seealso::
- :doc:`Removal strategies <../removal_strategies>`
- :ref:`Set up force removal strategy <inventory/warehouses_storage/removal-config>`
- :doc:`Expiration dates <../../product_management/product_tracking/expiration_dates>`
- :ref:`Enable lots tracking <inventory/warehouses_storage/lots-setup>`
- `Odoo Tutorials: Perishable Products <https://www.odoo.com/slides/slide/5324/share>`_
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.