Matching supply to demand

In Inventory Visibility, each supply type matches to a demand type.

The following table indicates which specific demand types match which specific supply types.

Table 1. Relationship of demand type to supply type
  Demand type OPEN_ORDER Demand type RSRV_ORDER Demand type SCHEDULED Demand type BACKORDER Demand type DEMAND_FOR_RELEASE Demand type ALLOCATED Demand type PLAN
Supply type ONHAND X X X X X X  
Supply type INTRANSIT X X X X   X  
Supply type PO_PLACED X X X X   X  
Supply type PO_SCHEDULED X X X X   X  
Supply type PO_RELEASED X X X X   X  
Supply type WIP         X    
Supply type PLAN              
Note:
  • The PLAN type represents a not yet materialized supply or demand. These operations do not impact availability. However, there might still be scenarios in which it is useful to track supply and demand for purposes such as tentative future replenishment.
  • Configure the ETA value only for supply types that are not on-hand supply (all types except ONHAND and custom types that extend ONHAND). For supply types that are on-hand supply (ONHAND and custom types that extend ONHAND), do not configure the ETA. Here, ETA refers to the attribute in the Adjust Supply and Sync Supply REST APIs.

You can extend an existing supply or demand type, and the new type impacts availability in the same way as the base inventory type. For example, ONHAND_BACKROOM, which is an extended type of the base inventory type ONHAND has the same impact on availability as ONHAND.

To extend a supply or demand type, invoke the corresponding Supply Type or Demand Type REST API by using the PUT request method. Specify the base inventory type from which you need to derive the supply or demand type.

Commitment levels before availability

Demands are considered based on commitment levels. Commitment levels are the minimalist view of how supply and demands are matched. The three distinct commitment levels before availability is calculated are unpromised, promised, and allocated.
Unpromised
Unpromised commitment applies to orders that are captured for fulfillment (for example, from an e-commerce store site) but are not yet scheduled and a specific ship node is not yet assigned. Since the ship node is not committed to the demand, it is considered to be an "unpromised" commitment because the order can be easily reallocated to another ship node.
Promised
After an order is scheduled or assigned to a specific fulfillment ship node, the order is in a committed state and the assigned ship node is now responsible for the order. At this stage, the commitment is considered to be a "promised" demand, and the items cannot be easily reallocated to another ship node (but can be reallocated within the ship node).
Allocated
Allocated demands always have an assigned ship node and are far enough along in the fulfillment process that a shipment was created for the order. At this stage, it is difficult for the seller to reallocate the inventory without risk.

When Inventory Visibility determines the supply and demand matching, the commitment levels are prioritized in the following order.

  1. Allocated
  2. Promised
  3. Unpromised

The outcome depends on the type of demand type that is provided in an availability or reservation request.

Availability lookup

When availability is looked up for a demand type, the commitment level of that demand type is determined. Based on the commitment level, the respective availability by demand type is considered, as explained in the following table.
Table 2. Demand type and commitment level association
Demand type Commitment level
OPEN_ORDER Unpromised
SCHEDULED Promised
DEMAND_FOR_RELEASE Allocated
ALLOCATED Allocated
RSRV_ORDER Promised
BACKORDER Unpromised
Note: For placing orders, it is suggested that you use the default OPEN_ORDER demand type. For scheduling or releasing orders, use SCHEDULED or DEMAND_FOR_RELEASE demand type. For the OPEN_ORDER demand type, "Promised" and "Allocated" are ignored.

During reservations, availability is checked based on the input demand type. If the demand type is not specified, reservation defaults to OPEN_ORDER. The following table describes how availability is calculated during reservations.

Table 3. How availability is calculated during reservations
Reservation input demand type Supply Unpromised reservations (OPEN_ORDER) Promised reservations (SCHEDULED) Allocated reservation (DEMAND_FOR_RELEASE) Available amount to be reserved
OPEN_ORDER 60 7 15 30

Available = Supply (60) - Unpromised (7) - Promised (15) - Allocated (30) = 8

OPEN_ORDER 60 15 15 30

Available = Supply (60) - Unpromised (15) - Promised (15) - Allocated (30) = 0

SCHEDULED 60 7 15 30

Available = Supply (60) - Allocated (30) - Promised (15) = 15

SCHEDULED 60 17 15 30

Available = Supply (60) - Allocated (30) - Promised (15) = 15

ALLOCATED 60 7 15 30

Availability = Supply (60) - Allocated (30) = 30

ALLOCATED 31 10 20 30

Availability = Supply (31) - Allocated (30) = 1

Supply and demand tag matches

If demand has tags, then supply must have equal tags to match. If demand has no tag, then it can match to any supply.

The following example describes how supply and demand are matched for tags:

Consider Item01 for which the tag number is categorized as lot number, batch number, and revision number.

In this example, Item01 has the following supplies.
  • Tag: A01|230|v1 Qty: 5
  • Tag: A01|230|v2 Qty: 5
  • Tag: A01|230|v3 Qty: 5
  • Tag: " " Qty: 10 (untagged)
In this example, Item01 has the following demands.
  • Tag: A01|230|v1 Qty: 5
  • Tag: A01|230|v2 Qty: 7
  • Tag: " " Qty: 15 (untagged)

The following table shows a result of a supply and demand matching in which the demand has tags. Since the demand has tags, a matching supply tag is necessary for each.

Table 4. Supply and demand matching in which the demand has tags
Supply Demand Available quantity
Tag: A01|230|v1 Qty: 5 Tag: A01|230|v1, Qty: 5 0 (5-5 = 0)

Demand is fulfilled.

Tag: A01|230|v2, Qty: 5 Tag: A01|230|v2, Qty: 7 0 (5-7 = 0)

This tagged demand has insufficient supply for this tagged demand, which results in an unconsumed demand quantity of 2. The demand does not take from supply A01|230|v3 or " " because the tag is not a match.

The following table shows a result of a supply and demand matching in which the demand does not have tags. The demand can match to any supply.

Table 5. Supply and demand matching in which the demand does not have tags
Supply Demand Quantity available
Tag: " " Qty: 10 (untagged)

Tag: A01|230|v3 Qty: 5

" " Qty: 15 (untagged) 0 (10-10 = 0) untagged

0 (5-5) A01|230|v3

The untagged supply of 10 is consumed leaving demand quantity of 5. Since demand is untagged, the demand can take from any supply. Demand takes the remaining 5 from A01|230|v3.

The final supply inventory picture is shown in this example.
  • Tag: A01|230|v1 Qty: 0
  • Tag: A01|230|v2 Qty: 0
  • Tag: A01|230|v3 Qty: 0
  • Tag: " " Qty: 0

Correcting availability for untagged supply and demand

The availability picture is incorrect when you adjust and/or sync supply if tagNumber is blank or has 3 pipes (|||). The same is true for demand if the tagNumber is blank or has 3 pipes (|||). To ensure that the availability is accurate in the inventory system, the Inventory Visibility merges supplies or demands with tagNumber as blank and three pipes (|||) during availability calculation. If supplies or demands with tagNumber as three pipes (|||) are adjusted or synced, then tagNumber will be replaced as blank. As a result, the GET Supply or Demand will show blank instead of three pipes (|||). The same change applies for Supply.Change and Demand.Change events.
Note: The tagNumber 3 pipes (|||) is the same as blank.
The following example describes how supply and demand with tagNumber as blank and three pipes (|||) are merged during calculation of availability.
Supply Demand Available quantity
Tag: " " Qty: 50 Tag: " " Qty: 10 80(50+50-10-10=80)
Tag: ||| Qty: 50 Tag: ||| Qty: 10
The following example describes how tagNumber 3 pipes ||| will be replaced as blank if adjust supply is used.
Supply Adjust supply Get supply Supply.Change event
Tag: ||| Qty: 50 Tag: " " Qty: 30 Tag: ||| Qty: 50 Tag: " " Qty: 30 ChangedQty: 30
Tag: ||| Qty: 50

Tag: " " Qty: 30

Tag: ||| Qty: 20 Tag: " " Qty: 50
Note: The tagNumber ||| is replaced with blank for 20 supplies. As a result 30 supplies with tagNumber blank are merged with 20 supplies (30 + 20 = 50).
Tag: " " Qty: 50 ChangedQty: 20

The following example describes how tagNumber 3 pipes ||| is replaced with blank if adjust demand is used.

Demand Adjust demand Get demand Demand.Change event
Tag: ||| Qty: 10 Tag: " " Qty: 7 Tag: ||| Qty: 10 Tag: " " Qty: 7 ChangedQty: 7
Tag: ||| Qty: 10

Tag: " " Qty: 7

Tag: ||| Qty: 3 Tag: " " Qty: 10
Note: The tagNumber ||| is replaced with blank for 3 demands. As a result 7 demands with tagNumber blank are merged with such 3 demands (7 + 3 = 10).
Tag: " " Qty: 10 ChangedQty: 3

The total available quantity is 80(50+50-10-10=80)

The following example describes how tagNumber 3 pipes ||| is replaced with blank if sync supply is used.

Supply Sync supply Get supply Supply.Change event
Tag: ||| Qty: 50 Tag: " " Qty: 30
  • Tag: ||| Qty: 0
    Note: This is because 50 supplies with tagNumber ||| are synced to 0 quantity.
  • Tag: " " Qty: 30
  • Tag: ||| Qty: 0 ChangedQty: -50
  • Tag: " " Qty: 30 ChangedQty: 30
Tag: ||| Qty: 0

Tag: " " Qty: 30

Tag: "|||" Qty: 100
  • Tag: ||| Qty: 0
    Note: It is 0 quantity, because tagNumber ||| is replaced with blank.
  • Tag: " " Qty: 100
    Note: The tagNumber ||| is replaced with blank.
Tag: " " Qty: 100 ChangedQty: 70

The following example describes how tagNumber 3 pipes ||| is replaced with blank if sync demand is used.

Demand Sync demand Get demand Demand.Change event
Tag: ||| Qty: 10 Tag: " " Qty: 5
  • Tag: ||| Qty: 0
    Note: This is because 10 demand with tagNumber ||| is synced to 0 quantity.
  • Tag: " " Qty: 5
  • Tag: ||| Qty: 0 ChangedQty: -10
  • Tag: " " Qty: 5 ChangedQty: 5
Tag: ||| Qty: 0

Tag: " " Qty: 5

Tag: "|||" Qty: 20
  • Tag: ||| Qty: 0
    Note: The quantity is 0 because tagNumber ||| is replaced with blank.
  • Tag: " " Qty: 20
    Note: The tagNumber ||| is replaced with blank.
Tag: " " Qty: 20 ChangedQty: 15

The total available quantity is 80(100+0-20-0=80)