Skip to content
Open
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 @@ -43,8 +43,8 @@ reducing the risk of overstocking.

.. note::
Just-in-time logic determines the exact timing of replenishment. If you want to extend this logic
to also consider near-future demand beyond the forecast date, see :ref:`Visibility Days
<inventory/warehouses_storage/visibility-days>`
to also consider near-future demand beyond the forecast date, see :ref:`Horizon Days
<inventory/warehouses_storage/horizon-days>`

If the forecasted quantity falls below the minimum on the forecasted date, replenishment is
triggered immediately to prevent shortages. If the quantity falls below the minimum after the
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ To set up reordering rules for the first time, refer to:
To understand and optimize replenishment using advanced features, see:

- :doc:`Just in time logic <just_in_time>`
- :ref:`Visibility days <inventory/warehouses_storage/visibility-days>`
- :ref:`Horizon days <inventory/warehouses_storage/horizon-days>`

.. _inventory/warehouses_storage/configure-rr:
Expand Down Expand Up @@ -137,7 +136,6 @@ For advanced usage, learn about the following reordering rule fields:
- :ref:`Vendor <inventory/warehouses_storage/set-vendor>`
- :ref:`Bill of materials <inventory/warehouses_storage/set-bom-field>`
- :ref:`Procurement group <inventory/warehouses_storage/procurement-grp>`
- :ref:`Visibility days <inventory/warehouses_storage/visibility-days>`

.. note::
The fields above are not available by default, and must be enabled by selecting the |adjust| in
Expand Down Expand Up @@ -389,88 +387,48 @@ advanced configurations of reordering rules. Consider the following:
.. seealso::
:doc:`Just-in-time logic <just_in_time>`

.. _inventory/warehouses_storage/visibility-days:

Visibility days
===============

*Visibility days* enable the ability to determine if additional quantities should be added to the
planned replenishment. Odoo checks if forecasted stock on the forecasted date will drop below the
minimum in the reordering rule. **Only if** it is time to reorder, visibility days check additional
future demand by the specified number of days.

.. note::
Visibility days extend the standard just-in-time replenishment logic by looking beyond the
immediate forecasted date. To fully understand how Odoo determines when replenishment is
triggered, refer to the :doc:`Just-in-time logic <just_in_time>`

This feature helps consolidate orders by grouping immediate and near-future needs, reducing
transport costs and enabling supplier discounts for larger orders.

To set visibility days to incorporate orders for a specified number of days in the future, navigate
to :menuselection:`Inventory app --> Operations --> Replenishment`, or by clicking the *Reordering
Rules* smart button from the product form.

Next, enable the :guilabel:`Visibility Days` field by clicking the |adjust| to the far right and
choosing the feature from the drop-down menu. Then, enter the desired visibility days.

.. important::
The forecasted date is never pushed forward or extended; Odoo only checks the extra visibility
days if the stock falls below the minimum threshold on the forecasted date.

Example where visibility days is triggered
------------------------------------------

A product shipped from Asia has a combined vendor lead time of 30 days and a shipping cost of $100
(including :doc:`landed costs <../../inventory_valuation/landed_costs>` and
tariffs).

- November 4: Current date. The forecasted date is December 4 (30 days later).
- |SO| 1: Requires the product by Dec 4. Odoo places the order today, costing $100.
- |SO| 2: Requires the product by Dec 19. Normally, Odoo would order on Nov 19, costing an
additional $100.
- |SO| 3: Requires the product by Dec 25. Normally, Odoo would order on Nov 25, costing another
$100.

Ordering separately for these sales orders totals $300 in shipping costs.

.. image:: reordering_rules/forecasted-date.png
:alt: Show forecasted date visualization.
Horizon days
============

Setting :guilabel:`Visibility Days` to `20.0` allows Odoo to "look ahead" 20 days from December 4
(|SO| 1's forecasted date) to December 24.
*Horizon days* allow users to extend the time window between today's date and the forecasted date
when calculating for the forecasted quantity. This features allows users to plan and restock
inventory proactively, rather than following a just-in-time approach. The feature is meant to help
users plan replenishment in advance by increasing the :ref:`forecasted date
<inventory/warehouses_storage/forecasted-date>`.

- It groups |SO| 2's order with |SO| 1, reducing shipping costs by consolidating orders.
- |SO| 3, which is due on Dec 25, is one day late and is not grouped with the other two orders.
.. math::
:class: overflow-scroll

Counterexample where visibility days is not triggered
-----------------------------------------------------
\text{Forecasted date} = \text{Current date} + \text{Vendor Lead Time} + \text{Horizon Days}

Considering the example above, if |SO| 1 does not exist, then:
Since horizon days are only meant to be used with manual reordering rules, find details about the
feature in the :doc:`Replenishment report article <report>`.

- **November 4**: Current date. The forecasted date is December 4 (30 days later).
- **November 5**: The forecasted date shifts to December 5.
- |SO| 2: Requires the product by December 19. Odoo will only trigger the order on November 19,
meaning the user will not see a replenishment notification until then.
.. note::
Horizon days are configured on a company level.

This shows that visibility days complement just-in-time logic by optimizing it to balance
replenishment costs more effectively.
The default horizon days setting can be set or updated by navigating to the
:menuselection:`Inventory app --> Advanced Scheduling`. Enter the desired number of days in the
:guilabel:`Replenishment Horizon` field, and click :guilabel:`Save`.

.. image:: reordering_rules/counterexample.png
:alt: Example where the visibility days does not trigger.
.. image:: reordering_rules/replenishment-horizon.png
:alt: The Replenishment Horizon setting in the Inventory app.

Horizon days
============
Example of how horizon days affect replenishment planning
---------------------------------------------------------

*Horizon days* determine how many days ahead Odoo checks if the forecasted quantity will drop below
reordering rule's minimum. The feature is meant to help users plan replenishment in advance, by
increasing the :ref:`forecasted date <inventory/warehouses_storage/forecasted-date>`.
On the Replenishment report, there are currently two products listed due for reordering: `Drawer,
Black` and `Corner Desk`. This is based on their current level of on-hand stock, and their
forecasted stock level. The default horizon days is set as `20`.

.. math::
:class: overflow-scroll
.. image:: reordering_rules/twenty-days.png
:alt: Replenishment report with horizon days set at 20.

\text{Forecasted date} = \text{Current date} + \text{Vendor Lead Time} + \text{Horizon Days}
However, by extending the horizon days to `30`, an additional product is added to the list.

.. image:: reordering_rules/thirty-days.png
:alt: Replenishment report with horizon days set at 30.

Since horizon days are only meant to be used with manual reordering rules, find details about the
feature in the :doc:`Replenishment report article <report>`.
This is because the additional product, `[FURN_0789] Individual Workplace`, has a delivery scheduled
in twenty-nine days, at which point their on-hand stock levels will fall below the minimum needed
on-hand.
Binary file not shown.
Binary file not shown.
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.
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ By default, the quantity in the :guilabel:`To Order` field is the quantity requi
the field and changing the value. To replenish a product manually, click :icon:`fa-truck`
:guilabel:`Order`.

Click :icon:`fa-bell-slash` :guilabel:`Snooze` to temporarily deactivate the reordering rule for
the set period, hiding the entry from the replenishment dashboard, when it is supposed to appear.
Click :icon:`fa-bell-slash` :guilabel:`Snooze` to temporarily deactivate the reordering rule for the
set period, hiding the entry from the replenishment dashboard, when it is supposed to appear.

.. tip::
Defining a :guilabel:`Vendor` allows filtering or grouping demands by the vendor. This simplifies
Expand Down Expand Up @@ -69,7 +69,9 @@ Horizon days
*Horizon days* determine how many days ahead Odoo checks if the forecasted quantity will drop below
reordering rule's minimum. The feature is meant to help users plan replenishment in advance, by
increasing the :ref:`forecasted date <inventory/warehouses_storage/forecasted-date>` on the
:doc:`replenishment report <report>`.
:doc:`replenishment report <report>`. Horizon days look ahead a specified number of days and trigger
reordering rules as soon as the forecasted quantity falls below the minimum within that window, even
if no replenishment is needed today.

.. example::
Setting horizon days to `7` ensures all manual reordering rules set to trigger within the next
Expand All @@ -80,14 +82,6 @@ To set horizon days, go to :menuselection:`Inventory app --> Operations --> Repl
click :icon:`fa-angle-double-right` :icon:`fa-folder` :guilabel:`Manual` in the left sidebar. In the
menu that appears, set the number of :guilabel:`Horizon` days.

Both horizon days and :ref:`visibility days <inventory/warehouses_storage/visibility-days>` allow
Odoo to anticipate future demand, but they work differently:

- **Visibility days**: only checks future demand if a replenishment would have been triggered today.
- **Horizon days**: looks ahead a specified number of days and triggers reordering rules as soon as
the forecasted quantity falls below the minimum within that window — even if no replenishment is
needed today.

.. example::
- Current date: Feb 18
- On hand quantity: 10
Expand Down