diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst index eb59cb8564..afb1ec2cf1 100644 --- a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst @@ -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 @@ -67,8 +74,8 @@ Key points include: - :ref:`Manual reordering rules `: Generate suggestions in the replenishment report for user review, allowing adjustments and batch orders while meeting deadlines. -- :ref:`Just-in-time logic `: A strategy to replenish - only what is needed to prevent overstocking. +- :doc:`Just in time logic `: A strategy to replenish only what is + needed to prevent overstocking. .. seealso:: - :doc:`replenishment/reordering_rules` @@ -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 diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/just_in_time.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/just_in_time.rst new file mode 100644 index 0000000000..33bb3e3ccf --- /dev/null +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/just_in_time.rst @@ -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 `, +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 ` and +:ref:`purchasing delays ` for purchases, or +:ref:`manufacturing lead times ` 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 ` 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 `, 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 + ` + +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 ` + - :doc:`Replenishment Report ` + - :doc:`Lead Times ` diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/just_in_time/replenishment-info.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/just_in_time/replenishment-info.png new file mode 100644 index 0000000000..aabb252da3 Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/just_in_time/replenishment-info.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/lead_times.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/lead_times.rst index d5cd5d35e7..42911a6e3e 100644 --- a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/lead_times.rst +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/lead_times.rst @@ -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 ` (JIT) forecast window. The security -lead times affect **only** replenishment methods that use :doc:`pull rules +:doc:`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 ` or :doc:`make to order (MTO) `. They do not change the interval between *Order Deadline* and *Expected Arrival*. diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules.rst index 941afcb2a4..70ba3edcfc 100644 --- a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules.rst +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules.rst @@ -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 ` +- :doc:`Just in time logic ` - :ref:`Visibility days ` - :ref:`Horizon days ` @@ -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 - ` section. + calculated using on-hand quantities and future demand, see :doc:`Just in time logic + ` For advanced usage, learn about the following reordering rule fields: @@ -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 `, -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 ` and -:ref:`purchasing delays ` for purchases, or -:ref:`manufacturing lead times ` 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 ` - 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 ` .. _inventory/warehouses_storage/visibility-days: @@ -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 ` + This feature helps consolidate orders by grouping immediate and near-future needs, reducing transport costs and enabling supplier discounts for larger orders. diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/five-forecast.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/five-forecast.png deleted file mode 100644 index c21f2287c0..0000000000 Binary files a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/five-forecast.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/replenishment-info.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/replenishment-info.png deleted file mode 100644 index a51425d8af..0000000000 Binary files a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/replenishment-info.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/zero-forecast.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/zero-forecast.png deleted file mode 100644 index 44edfaf6d0..0000000000 Binary files a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/zero-forecast.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report.rst index d0c3d7c351..eb20181b92 100644 --- a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report.rst +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report.rst @@ -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 ` section. +For detailed information on how to use this feature for replenishment, go to the :doc:`just-in-time +` section. Select a warehouse ------------------