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 @@ -27,6 +27,13 @@ manufacturing order (MO), with the best choice depending on the business process

Automatically suggest or generate POs or MOs when stock falls below a minimum level.

.. card:: Just in time logic
:target: replenishment/just_in_time
:tag: Recommended
:large:

Avoid overstocking by placing order precisely to meet deadlines.

.. card:: MTO
:target: replenishment/mto
:tag: Beginner-friendly
Expand Down Expand Up @@ -67,8 +74,8 @@ Key points include:
- :ref:`Manual reordering rules <inventory/warehouses_storage/manual-rr>`: Generate suggestions in
the replenishment report for user review, allowing adjustments and batch orders while meeting
deadlines.
- :ref:`Just-in-time logic <inventory/warehouses_storage/just-in-time>`: A strategy to replenish
only what is needed to prevent overstocking.
- :doc:`Just in time logic <replenishment/just_in_time>`: A strategy to replenish only what is
needed to prevent overstocking.

.. seealso::
- :doc:`replenishment/reordering_rules`
Expand Down Expand Up @@ -119,6 +126,7 @@ disrupts its manual replenishment method.

replenishment/mto
replenishment/reordering_rules
replenishment/just_in_time
replenishment/report
replenishment/lead_times
replenishment/resupply_warehouses
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
==================
Just in time logic
==================

.. |SO| replace:: :abbr:`SO (Sales Order)`
.. |SOs| replace:: :abbr:`SOs (Sales Orders)`

*Just-in-time logic* in Odoo minimizes storage costs by placing orders precisely to meet deadlines.
This is achieved using the :ref:`forecasted date <inventory/warehouses_storage/forecasted-date>`,
which determines when replenishment is necessary to avoid overstocking. For example, for a product
with a 5-day total lead time and a sales order delivery date in 10 days, Odoo waits 5 days to place
the order, ensuring it arrives just in time for delivery.

The forecasted date is the **earliest possible date** to receive a product if the replenishment
process starts immediately. It is calculated by summing the lead times linked to the replenishment
process, such as :ref:`vendor lead times <inventory/warehouses_storage/purchase-lt>` and
:ref:`purchasing delays <inventory/warehouses_storage/purchase-security-lt>` for purchases, or
:ref:`manufacturing lead times <inventory/warehouses_storage/manuf-lt>` for production. This works
with both automatic and manual reordering rules.

.. tip::
If utilizing just-in-time logic feels risky, consider adding buffer time or :doc:`adjusting lead
times <lead_times>` for more flexibility. While lead times and just-in-time logic provide
additional control, reordering rules work perfectly fine without them. Keeping delivery dates on
|SOs| as their *creation date* ensures purchases are immediately triggered when needed.

.. _inventory/warehouses_storage/forecasted-date:

Forecasted date and to order quantity
=====================================

The *forecasted date* is the earliest receipt date for a product, if it is ordered right now. It is
calculated by summing the lead times linked to the product's replenishment process. The total of
these lead times, added to the current date, determines when Odoo checks for demanded stock.

To view the forecasted date go to :menuselection:`Inventory app --> Operations --> Replenishment` to
access the :doc:`replenishment report <report>`, then click the :icon:`fa-info-circle`
:guilabel:`(info)` icon for the desired reordering rule. The :guilabel:`Replenishment Information`
pop-up window displays the :guilabel:`Forecasted Date` and various lead times.

The just-in-time logic ensures replenishment occurs only when required to meet forecasted demand,
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>`

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
forecasted date, replenishment is deferred.

The :guilabel:`To Order` quantity is defined as the total demand on the forecasted date.

By scheduling purchase orders according to combined lead times, Odoo minimizes inventory while
ensuring that future demand is met on time.

.. example::
A manual reordering rule is set up with no minimum or maximum quantities.

- Vendor lead time is 4 days, and the days to purchase is 2 days.
- Today's date is October 2.
- These add up to 6 days, making the forecasted date, October 8.

A confirmed |SO| for 5 units has a delivery date of October 8th (6 days from today). This demand
will appear on the replenishment report today, in the :guilabel:`To Order` field.

However, if the delivery date were later than October 8th, it would not yet appear on the report.
Odoo only displays quantities to replenish when they fall within the forecasted date window,
ensuring orders are placed precisely when needed.

.. image:: just_in_time/replenishment-info.png
:alt: Show forecasted date in Odoo.

.. important::
|SOs| scheduled after the :guilabel:`Forecasted Date` are not included in the :guilabel:`Forecast`
quantities of a reordering rule. However, they do appear in the forecasted report, since it
reflects the long-term forecasted quantity. To access the forecasted report, click
:icon:`fa-area-chart` :guilabel:`(area chart)` icon on the replenishment report.

.. seealso::
- :doc:`Reordering Rules <reordering_rules>`
- :doc:`Replenishment Report <report>`
- :doc:`Lead Times <lead_times>`
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 @@ -168,8 +168,8 @@ confirm a request for quotation (RFQ) and when to expect the goods.
- Arrival date of the products. Calculated by *Order Deadline* + *Vendor Lead Time*

In addition, Odoo has global security lead times, which are buffers that widen the
:ref:`just-in-time <inventory/warehouses_storage/just-in-time>` (JIT) forecast window. The security
lead times affect **only** replenishment methods that use :doc:`pull rules
:doc:`just-in-time <just_in_time>` (JIT) forecast window. The security lead times affect **only**
replenishment methods that use :doc:`pull rules
<../../shipping_receiving/daily_operations/use_routes>`—for example :doc:`reordering rules
<reordering_rules>` or :doc:`make to order (MTO) <mto>`. They do not change the interval between
*Order Deadline* and *Expected Arrival*.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ To set up reordering rules for the first time, refer to:

To understand and optimize replenishment using advanced features, see:

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

Expand Down Expand Up @@ -127,8 +127,8 @@ rule line item:

.. note::
To learn how the :guilabel:`On Hand`, :guilabel:`Forecast`, and :guilabel:`To Order` fields are
calculated using on-hand quantities and future demand, see the :ref:`Just-in-time logic
<inventory/warehouses_storage/just-in-time>` section.
calculated using on-hand quantities and future demand, see :doc:`Just in time logic
<just_in_time>`

For advanced usage, learn about the following reordering rule fields:

Expand Down Expand Up @@ -386,102 +386,8 @@ advanced configurations of reordering rules. Consider the following:
five products' reordering rules. This ensures future demands for these products are
managed separately and assigned to different |RFQs| (the usual behavior).

.. _inventory/warehouses_storage/just-in-time:

Just-in-time logic
==================

*Just-in-time logic* in Odoo minimizes storage costs by placing orders precisely to meet deadlines.
This is achieved using the :ref:`forecasted date <inventory/warehouses_storage/forecasted-date>`,
which determines when replenishment is necessary to avoid overstocking.

The forecasted date is the **earliest possible date** to receive a product if the replenishment
process starts immediately. It is calculated by summing the lead times linked to the replenishment
process, such as :ref:`vendor lead times <inventory/warehouses_storage/purchase-lt>` and
:ref:`purchasing delays <inventory/warehouses_storage/purchase-security-lt>` for purchases, or
:ref:`manufacturing lead times <inventory/warehouses_storage/manuf-lt>` for production. Both
automatic and manual reordering rules work this way.

.. example::
For a product with a 5-day total lead time and a sales order delivery date in 10 days, Odoo waits
5 days to place the order, ensuring it arrives just in time for delivery.

Important considerations:

- **If this feels risky**, consider adding buffer time or :doc:`adjusting lead times <lead_times>`
for more flexibility.
- While lead times and just-in-time logic provide additional control, **reordering rules work
perfectly fine without them**. Keeping delivery dates on sales orders as their *creation date*
ensures purchases are immediately triggered when needed

.. _inventory/warehouses_storage/forecasted-date:

Forecasted date and To Order quantity
-------------------------------------

The *forecasted date* is the earliest receipt date for a product, if it is ordered right now. It is
calculated by summing the lead times linked to the product's replenishment process. The total of
these lead times, added to the current date, determines when Odoo checks for demanded stock.

To view the forecasted date go to the replenishment report and click the :icon:`fa-info-circle`
:guilabel:`(info)` icon for the desired reordering rule. The :guilabel:`Replenishment Information`
pop-up window displays the :guilabel:`Forecasted Date` and various lead times.

.. example::
A manual reordering rule is set up with no minimum or maximum quantities.

- Vendor lead time is 4 days, the purchase security lead time is 1 day, and the days to purchase
is 2 days.
- Today's date is November 26.
- These add up to 7 days, making the forecasted date, December 3rd.

A confirmed |SO| for 5 units has a delivery date of December 3rd (7 days from today). This demand
will appear on the replenishment report today, in the **To Order** field.

However, if the delivery date were later than December 3rd, it would not yet appear on the
report. Odoo only displays quantities to replenish when they fall within the forecasted date
window, ensuring orders are placed precisely when needed.

.. image:: reordering_rules/replenishment-info.png
:alt: Show forecasted date in Odoo.

The *just-in-time* logic ensures replenishment happens only when it's necessary for the forecasted
date's demand, helping avoid overstocking.

For example:

- If the forecasted quantity drops below the minimum **on** the forecasted date, replenishment must
begin immediately to avoid shortages.
- If the quantity drops below the minimum **after** the forecasted date, replenishment can wait.

The **To Order** quantity is the total demand on the forecasted date.

By timing purchase orders based on the combined lead times, Odoo optimizes stock levels, keeping
inventory minimal while ensuring future requirements are ordered at the last possible
moment—strategic procrastination without the stress!

Common confusion about forecasted quantities
--------------------------------------------

|SOs| due **after** the :guilabel:`Forecasted Date` are not accounted for in the
:guilabel:`Forecast` quantities of the reordering rule.

They are, however, accounted for on the forecasted report that is opened by clicking the
:icon:`fa-area-chart` :guilabel:`(graph)` icon on the replenishment report, as this one represents
the **long-term forecasted quantity**.

.. example::

.. figure:: reordering_rules/zero-forecast.png
:alt: Forecast and To Order quantities is zero.

Continuing the above example, when the sales order's deadline is adjusted to December 4th, the
:guilabel:`Forecast` and :guilabel:`To Order` quantities are zero.

.. figure:: reordering_rules/five-forecast.png
:alt: Show forecasted report.

Opening the :guilabel:`Forecasted Report` shows the :guilabel:`Forecasted` units is `5.00`.
.. seealso::
:doc:`Just-in-time logic <just_in_time>`

.. _inventory/warehouses_storage/visibility-days:

Expand All @@ -493,6 +399,11 @@ planned replenishment. Odoo checks if forecasted stock on the forecasted date wi
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.

Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,8 @@ In each line of the replenishment report, clicking the :icon:`fa-info-circle` :g
icon opens the :guilabel:`Replenishment Information` pop-up window, which displays the *lead times*
and *forecasted date*.

For detailed information on how to use this feature for replenishment, go to the :ref:`Just in time
logic <inventory/warehouses_storage/just-in-time>` section.
For detailed information on how to use this feature for replenishment, go to the :doc:`just-in-time
<just_in_time>` section.

Select a warehouse
------------------
Expand Down