Future Inventory

When enabled, future inventory is used to calculate the total amount that is "available to promise." This allows you to allocate against future inventory at the location level (as well as at the tag level if applicable). This calculation is:

  • Available to Promise = Available + Future

Current inventory is always prioritized before future inventory is allocated. For example, if you have 5 quantity of a product on hand, 3 allocated, and 5 future, then you have a total of 7 available to promise. When all of the on hand inventory has been allocated, then the 5 future inventory will begin to be allocated (which can then be deallocated if needed).

Enable Future Inventory

In order to allocate against future inventory, you must enable it in both your site settings and the item level.

Enable for Site

To enable future inventory on your site:

  1. Go to System > Settings > General.
  2. In the Site section, locate the Future Inventory Settings.
  3. Toggle Future Inventory on.
  4. Set the Future Date Limit you want to consider future inventory for. Only the amount within this date limit will be calculated into the quantity available to promise.
    • For example, if you have a view of inventory for 12 weeks from the current time then you can choose to allocate future inventory for just the next 4 weeks. 
  5. Set the Future Date Unit. This can be days, weeks, or months.
  6. Click Save.

Close-up of Future Inventory settings with a time frame of 15 days.

Enable for Products

After enabling future inventory for your site, you can enable it for individual products either in the Admin UI's product attributes or the Create Order API. To enable it via the Admin UI:

  1. Go to System > Schema > Product Attributes
  2. Click Create New Attribute and configure a new property called "future-inventory-enabled" with a Yes/No input type. See the Property Attributes documentation for more details about creating attributes.The Product Attributes page with an example of the future-inventory-enabled attribute
  3. Go to System > Schema > Product Types.
  4. Select a product type or create a new product type.
    • Note that this functionality is only supported for product types with the Standard Product, Configurable Product with Options, or Bundle Components usage.
  5. In the Properties section, click Add and then select the future-inventory-enabled attribute. The Add Properties modal with future-inventory-enabled selected
  6. Click Done and then save the product type.
  7. Go to Main > Catalog > Products.
  8. Select a product of the appropriate product type or create a new one.
  9. In the Properties section, set future-inventory-enabled to true. It is false by default. If you selected a product type of Configurable Product with Options, this will only be set on the base product and then inherited by all product variants.The Properties section of product settings with a callout for the future inventory attribute
  10. Click Save.

To enable products via the Create Order API instead, use the properties in an order item's items array to define the "future inventory enabled" property as shown below:

"properties": [
  {
    "attributeFQN": "tenant~future-inventory-enabled",
    "name": "Future Inventory Enabled",
    "dataType": "Bool",
    "isMultiValue": false,
    "values": [
      {
        "value": true
      }
    ]
  }
],

Set Future Inventory Records

You can set up future inventory records to be unique by their UPC-Location-Future Delivery Date or their UPC-Location-External ID. This means that if your delivery dates are not unique, then an external ID is needed to differentiate between records. External IDs may also be especially beneficial if you use purchase order numbers that you want to apply to future inventory. 

For example, if you have three future inventory updates for the same product on August 7 and do not have unique delivery date-times, then external IDs of PO1, PO2, and PO3 could identify each record. If your future date-times are unique such as 10:00, 2:00, and 5:00, then you will not need an external ID to tell the records apart.

You can use REST APIs or flat file import to set future inventory levels. Kibo will perform updates based on what information you provide. If you have set up your records to be unique based on external ID, the following behavior will be performed.

  • If both an External ID and Delivery Date are provided: If a record for that ID already exists, then the existing delivery date and quantity will be updated to the new values. If one does not exist, a new record will be created.
  • If only an External ID is provided: If a record for that ID already exists, the quantity will be updated. If one does not exist, then it will return an error. If you want to create a new record, you must provide both the ID and a delivery date.

If you have set up your records to be unique based on delivery date, the following behavior will be performed.

  • If a Delivery Date is provided: If a record for that delivery date already exists, the quantity will be updated. If one does not exist, then a new record is created.

File Import

Follow the steps outlined in the Inventory Import File guide to build a .CSV or XML file of your inventory data. For future inventory records, provide a delivery date and/or external ID such as in the below example:

A CSV file with example data for products

Inventory APIs

Use the Refresh and Adjust APIs to set inventory records in place of the file import if desired, such as in the below example that includes both the deliveryDate and externalId fields. You can then use the Adjust Future Date API to change the incoming date of existing records as needed.

	{
    "locationCode": "1",
    "items": [
        {
            "partNumber": "part01",
            "upc": "example123",
            "sku": "example124",
            "ltd": 0,
            "floor": 0,
            "quantity": 20,
            "safetyStock": 0,
            "retailPrice": 1.99,
            "currencyID": 1,
            "deliveryDate": "2024-03-26T19:59:00+0000",
            "externalID": "exampleExternalID"
        }
    ]
}

You can also use external IDs in other inventory calls such as this example request to the GET Inventory API:

{
    "type": "ANY",
    "items": [
        {
            "upc": "exampleProduct",
            "partNumber": "exampleProduct",
            "sku": "exampleProduct",
            "quantity": 0
        }
    ],
    "includeAttributes": true,
    "includeNegativeInventory": true,
    "includeFutureInventory": true,
    "includeNegativeFutureInventory": true,
    "externalID": "exampleExternalID"
}

Orders with Future Inventory

When assigning orders to fulfillment locations, current inventory is always prioritized before future incoming inventory.  When considering future inventory, the following logic is used:

  • BOPIS: Earliest available date at the selected BOPIS location.
  • STH: Order Routing will look for the earliest available date across locations.

Future inventory is supported for STH, BOPIS (including Delivery and BOPIS w/ Transfers), and STH Consolidation. However, future inventory will not be considered for transfer shipments. This means that only the parent shipment of any fulfillment type can be allocated or assigned with future inventory. 

Cart and Checkout Behavior

When an inventory check is done from a cart or checkout, the system will validate items against future inventory:

  • Items will not be considered Out of Stock if the total quantity can be satisfied by current and future inventory. They will only be Out of Stock if the sum of current and future inventory is less than the requested quantity.
  • Backorderable items will not be placed into Backorder if the total quantity can be satisfied by current and future inventory. They will only be backordered if the sum of current and future inventory is less than the requested quantity.
  • If the order includes reservation items, inventory can be reserved at a location as long as the sum of its available and future inventory meets the requested quantity. When the quantity in the cart is updated, then the reserved inventory will be deallocated or allocated as needed. (Note that in the case of BOPIS, the system will attempt to provide any needed inventory from the current stock at transfer locations first. If transfers are not enabled or there are no locations with current inventory, then the system will reserve from the pickup location's future inventory.)

When editing a customer's cart, inventory levels will be displayed in each line item's Fulfillment Search dropdown menu. If the total includes future inventory, the value will be underlined and hovering over it will reveal a breakdown of future and current inventory levels.

The Fulfillment dropdown with options for Direct Ship and Delivery locations with current and future inventory

Shipment Behavior

Shipments that are created with future inventory begin in the Future status and cannot be fulfilled until inventory arrives at the location and the shipment moves into the Ready state. Shipments are moved from Future to Ready status by the "FutureInventoryShipmentRelease" job. Please request Kibo Support to enable this job for you.

Future shipments always have a date associated with them to indicate when future inventory is arriving. The system will update shipments whenever their future inventory's expected date or quantity changes, depending on the scenario:

  • If a future inventory record changes to a different delivery date, associated shipments will automatically update to match the new date (as long as it is not beyond the Future Date Limit). If only some shipment items change dates or the items change to two different dates, then the shipment is split based on those dates.
  • If a future inventory record changes to a delivery date beyond the Future Date Limit setting, then those items on STH shipments are reassigned. 
  • If a future inventory record changes to a delivery date beyond the Future Date Limit setting, then those items on BOPIS shipments will be backordered. If any items in the shipment are not backorderable, then the shipment is split and those items will either be cancelled or sent to Customer Care (depending on your Action on BOPIS Reject site setting).
  • If future inventory records change to a quantity of either 0 or an amount less than the required quantity on a shipment, then the unavailable quantity is turned into pending items on that shipment and will be allocated whenever inventory is available again.

You can cancel a Future shipment or force fulfillment from the Order Admin UI by changing the shipment's status. Forcing fulfillment may be useful if any future inventory becomes available sooner than expected but the delivery date does not change, such as if current inventory becomes available due to order cancellations. However, you cannot reassign Future shipments through the Order Admin UI at this time.

View in Inventory UI

The Future On Hand, Future Available, and Future Allocated levels can be viewed in the Inventory UI. This same information is also available at the tag level when inventory segmentation is enabled.

  1. Select a date using the drop-down Select a date to retrieve future inventory. This will be a pre-calculated date by the system based on the future date limit as configured in site settings. Note that the drop-down will not be visible if no site is enabled for future inventory. The Inventory UI with a callout for the future date dropdown
  2. An icon will appear on products that include future inventory, indicating that their row in the table can be expanded. Click one of these icons to view a breakdown of that product's Current, Future, and Total (the sum of Current and Future) inventory levels and then click the Future Inventory Dates link.An inventory record expanded to show the Future Inventory Dates link
  3. This will display a pop-up with more details about the inventory updates that are expected until the selected date. This information is read-only and does not allow you to edit future inventory.The Future incoming inventory dates table

Restricted Content

Internal FAQ for Future Inventory

The questions below provide more detailed information that may be useful to internal users and Kibo Support.

Order Routing and Allocation Logic

How does BOPIS allocation logic work?

It follows the below behavior:

  1. Prioritize current inventory at the selected BOPIS location.
  2. If there is not enough current inventory at the BOPIS location, look for the earliest incoming inventory date at the selected BOPIS location.

How does Direct Ship (STH) allocation logic work?

It follows the below behavior:

  1. Use the normal STH logic, prioritizing all locations with current inventory first. 
  2. If there are state change suggestions, look at future inventory records for all items that were included in the state change suggestions.
  3. For future inventory, look for inventory at the earliest available date across all locations.
  4. Send location assignment suggestions for both current inventory and future inventory.

For example, assume the current date is September 8th and there is an STH order for a quantity of seven lightbulbs. There are two locations with the following quantities:

  • Location One: Current Inventory = 3 and Future Inventory = 5 available on September 15th.
  • Location Two: Current Inventory = 1 and Future Inventory = 4 available on September 20th and 3 available on September 22nd.

The system will then:

  1. Look at current inventory levels and create a shipment for 3 quantity from Location One, then another shipment for 1 quantity from Location Two. 
  2. See that there is not enough current inventory at any location to fulfill the remaining 3 quantity. 
  3. Look at the earliest date across locations inventory and create a Future shipment for 3 quantity at Location One.

How does BOPIS w/ Transfers allocation logic work?

It follows the below behavior:

  1. Use the normal BOPIS with Transfers logic, prioritizing current inventory first at the selected pickup location. Then look at current inventory at transfers locations.
  2. If there are state change suggestions, look at future inventory records for all items that were included in the state change suggestions.
  3. For future inventory, look for future inventory at the earliest available date at the selected BOPIS location.

How does STH Consolidation allocation logic work?

It follows the below behavior:

  1. Use the normal STH-C logic, prioritizing all locations with current inventory first. Transfers will be created if there is not enough current inventory at the parent location and there is current inventory at transfer locations.
  2. If there are state change suggestions, it will look at future inventory records for all items that were included in the state change suggestions.
  3. When the STH logic includes future inventory records, it can assign a location that is different from the parent location used in Step 1 for current inventory. Since we use STH logic for future inventory records, we will not be looking at future inventory records for transfer shipments.
  4. Send location assignment suggestions for current inventory and future inventory.

How does Order Routing logic consider future inventory?

Order Routing logic uses the normal route when looking at current inventory and follows the after-action setting. If the after-action specifies to go to the next group, then Order Routing will look for current inventory in the next group. If the after-action suggests a state change, then Order Routing will look at future inventory. 

The state changes currently available in the application are Cancel, Backorder, and Customer Care.

In Order Routing, how do sort order rules apply to locations within a group?

The location with the earliest available date always takes precedence. For example, assume locations in a group are sorted by distance and there is an order for a quantity of 10 lightbulbs. There are two locations with the following quantities:

  • Warehouse 1: Distance =  2 miles with Future Inventory = 10 arriving in 4 weeks.
  • Warehouse 2: Distance = 50 miles with Future Inventory = 10 in 1 week.

Order Routing will suggest Warehouse 2, as it has the earliest incoming date.

What do we do when current inventory becomes available (due to cancellations, reassignments, or adjustments)?

We do not reallocate future inventory. In order to fulfill a future shipment if current inventory becomes available, the user has the option to to force fulfill a shipment if they wish to. This will cause a deallocate to the future delivery record and an allocation to the current inventory record. Then the future shipment will get fulfilled immediately. Forced fulfillment should be done by calling the Fulfill Shipment API.

How does "backorder" enabled product settings relate to the "future inventory enabled" property for products?

Having two separate settings provide clients with flexibility. A client may not want a product to be backordered, but still wants to allocate future inventory for it.

If both are set for a product, Order Routing will first look at allocating future inventory if the product falls into the after-actions.  If there is no future inventory, then the product will be backordered if the after-action is set to backorder.

Shipments and Orders

Can an order contain current and future shipments?

Yes. An order can have shipments that are distinct for both current and future inventory.

Can a shipment contain items that are for current and future inventory?

No. There cannot be a shipment that has items for both current and future inventory.

Can a shipment contain items with different future incoming dates?

No. Each future shipment has only one future date associated with it.

Can future shipments be included in pick waves?

No. Future shipments cannot be included in pick waves as they need to move to Ready status before they can be fulfilled.

If there is a shipment with two items and one's delivery date shifts to later while the other remains the same, the shipment will be split. Does Order Routing get called again?

Order Routing does not need to be called. A new shipment is created at the same location for the updated inventory availability date as the date on future shipment.

How are Future shipments converted to Ready shipments?

When the current date equals the future date, shipments are moved from the Future to Ready status by the FutureInventoryShipmentRelease job.

Pending Items

How are current pending items handled to consider future inventory?

Current pending items are not moved to future delivery dates.

How are future pending items handled?

Future pending items are handled much like current pending items. We query to see if there is inventory for the future pending item and then release the future pending item.

General

How is future inventory converted to current inventory?

When the current date equals the future date, the future inventory is moved to current inventory. A WorkerManagerLogic job runs approximately every 10 seconds to do so. After future inventory is converted to current inventory, the future inventory record is deleted by the system.

What are the recommendations for querying future inventory availability?

Query for available future inventory up to the date limit, as you may have future inventory records for more weeks than your future date limit to allocate from. Make sure you query for products that are set to future orderable.