Splitting of orders across warehouses to minimize distance or shipments
Splitting and routing of orders allows the Increff OMS module to break up a single outward order into multiple sub-order spread across available warehouses in such a way that the delivery distance or the number of shipments is minimized.
Glossary
Location | Represents a warehouse or a store |
Reserved inventory | Inventory that is reserved for an order for the purpose of performing splitting/routing |
Overview
Order splitting / routing will be applied to outward orders that are created with the isSplitRequired flag set as true. The order can be split across locations based on one of two different algorithms: Minimize-Distance or Minimize-Shipments. After splitting of the order, the created sub-orders are processed as usual from their assigned locations.
Splitting Routing Algo Selection
The first step before performing the splitting of an order is the selection of a splitting algorithm for a client. This can be done under the Primary Routing Algorithm tab in the Clients screen. The user can select from one of two splitting algorithms from this screen and the algorithm can be updated at any time. The two splitting algorithms available are:
An order received with the isSplitRequired flag as true is eligible for splitting based on the active splitting algorithm specified for the corresponding client.
Reserved pools are not considered for split / route in Increff OMS.
Figure 1: Primary Routing Algorithm selection popup in Primary Routing Algorithm tab of Clients screen
⚠️ Note: In case the splitting algorithm is updated for a client, the changes will only affect orders created after the update
Cluster and Area-Cluster Mappings
A Cluster represents a group of locations (stores or warehouses) identified by a unique cluster name. These clusters are used to represent a group of locations that are located in the same area or vicinity.
Each cluster can be mapped to an area-code prefix using an Area-Cluster Mapping. When running the minimize-delivery algorithm, the area-code of the delivery address is compared with the area-cluster mappings to determine the ordering of clusters to be used for order allocation.
Figure 2: Split / Route Settings section in OMS for managing Clusters and Area-Cluster Mappings
Cluster
For setting up clusters, the following two steps are to be done
Specification of cluster name: From the Split / Route Settings section in OMS, select the Clusters option and upload the names of all clusters that are to be created. For a given client, the name of its clusters must be unique.
Specification of cluster definitions: For each created cluster, the list of locations that belong to the cluster must be uploaded from the Cluster Definition screen present under the Split / Route Settings section of OMS.
Figure 3: Example of clustering done to a group of locations based on proximity
Enabling / Disabling Clusters
Created clusters can be enabled / disabled at any time. Disabled clusters are ignored when performing minimize-distance based order splitting.
Figure 4: Option to Enable / Disable Cluster in Clusters screen
Figure 5: Confirmation to Disable Cluster in Clusters screen
⚠️ Note 1: Disabling clusters does not exclude the locations inside the cluster from being used for order fulfillment. These locations may be used for fulfillment if they are part of a different, matching cluster.
⚠️ Note 2: A DEFAULT cluster is created for each client in which all of their mapped locations are added. This default cluster is used for order fulfillment in the minimize-delivery algorithm if no other clusters are able to fulfill some quantity of an order. The default cluster ensures that an unfulfillable order is not created if required inventory exists in some location(s).
Area-Cluster Mapping
The area-cluster mapping is used to map delivery locations to specific clusters from which the order fulfillment will be attempted. For this, the prefix of a pincode or area-code can be mapped to up-to 5 clusters from which the fulfillment will be first attempted. When an order is received, its delivery pincode is matched with the pincode prefixes present in the area-cluster mapping. Based on the best matches, the clusters to be used are identified.
To identify the pincode prefixes and clusters to be mapped to them, the proximity of the pincodes to the cluster must be considered. Based on the sequence in which the clusters are mapped to a pincode, the sequence of clusters to be used is identified. In the below attached format for area-cluster mapping CSV upload file, cluster1 will have the highest priority and cluster5 will have the lowest priority for a given area code prefix.
Figure 6: Example distribution of stores and delivery locations along with the area-cluster mapping
areaCodePrefix | cluster1 | cluster2 | cluster3 | cluster4 | cluster5 |
191 | Cluster-2 | Cluster-1 | |||
180673 | Cluster-1 | Cluster-2 |
Example of Cluster and Area-Cluster Mapping Setup
For the scenario detailed in the image below, the geographic area is divided into four distinct zones, each of which has a specific set of area-codes prefixes (as mentioned in the legend). Further, as there are 10 warehouses distributed across the geography.
Figure 7: Sample distribution of warehouses and area-code distribution
Based on the location of the warehouses and the area-codes of the zones, the following cluster, cluster-definitions, and area-cluster mappings could be set up
1. Cluster
Cluster Name |
EAST_CLUSTER |
WEST_CLUSTER |
NORTH_CLUSTER |
SOUTH_CLUSTER |
2. Cluster-Definitions
Cluster | Location |
EAST_CLUSTER | WH1, WH2, WH3 |
WEST_CLUSTER | WH10 |
NORTH_CLUSTER | WH4, WH8, WH9 |
SOUTH_CLUSTER | WH5, WH6, WH7 |
3. Area-Cluster Mapping
Area-Code Prefix | Cluster | Priority |
11 | EAST_CLUSTER | 1 |
12 | EAST_CLUSTER | 1 |
21 | WEST_CLUSTER | 1 |
22 | WEST_CLUSTER | 1 |
31 | SOUTH_CLUSTER | 1 |
32 | SOUTH_CLUSTER | 1 |
41 | NORTH_CLUSTER | 1 |
42 | NORTH_CLUSTER | 1 |
Splitting Algorithms
The two splitting algorithms split the orders based on the following logic:
1. Minimize Distance Algorithm
The minimize-distance algorithm attempts to split the order in such a way that the order is fulfilled from those locations first that are nearest to the delivery area-code. Therefore, the sequence followed for splitting the order is in the ascending order of location distance from the delivery point.
To calculate the proximity of a delivery point to a location (store / warehouse), the algorithm makes use of manually uploaded input. These inputs are Clusters, Cluster Definitions and Area Cluster Mappings.
Based on the delivery area-code, the locations are sorted in the following manner:
Find a previously unused area-cluster mapping whose pattern has the longest possible prefix match with the delivery area code out of all the patterns.
For the cluster found in the previous step, if more than one locations are present, run the minimize-shipments algorithms to decide which location to use
⚠️ Note: In case there are conflicting location after running both minimize-shipment and minimize-delivery algorithms, and one of the available locations will be picked for sub-order creation
The steps followed in the minimize distance algorithm are:
Select all SKUs from order where Inventory allocation is required
Select Cluster(s) mapped to Delivery area code in sorted order
Get all locations for selected cluster(s)
Select all locations whose Inventory is exposed on marketplace AND where selected SKUs are available
Sort all selected locations by count of Items
Create maximum Sub-Order from Top Location
Check if more allocation is needed, if yes then goto 1 else end
Example of execution:
Assuming that the clusters are set up in the manner described here, suppose an order is received with the delivery area code: 320311. If the minimize-delivery algorithm is executed for this order, based on area code mappings, the best match(es) of the cluster would be picked. In this case, the best match with the longest matching area-code prefix is the SOUTH_CLUSTER which is mapped to the area-code prefix 32.
Therefore, the order will be allocated first from locations present in the SOUTH_CLUSTER, i.e., locations WH5, WH6, and WH7. Also, since there are multiple locations within the matching cluster, the minimize-shipments algorithm will be used to identify the order in which the three locations would be tried for allocation.
Find Serviceable Clusters for Area Code
In order to see which clusters would be used and in which order when running minimize-delivery for an order, a new screen Find Serviceable Clusters for Area Code has been added under the Area-Cluster Mapping screen. On specifying the delivery area code of the order, the list of custom clusters that will be used for sub-order creation will be displayed.
Figure 7: Screen to Find serviceable clusters for an Area Code Pattern
2. Minimize Shipments Algorithm
The minimize-shipments algorithm attempts to split the order in such a way that the number of sub-orders or shipments created in different locations is minimized. This is done by greedily picking locations based on:
Total quantity allocatable from the location (the higher the better)
If two or more locations are conflicted after step 1, the count of distinct SKUs that are allocatable
If two or more locations are conflicted after step 2, the closest location based on minimize-delivery algorithm
⚠️ Note: The greedy selection algorithm used for minimizing shipments is an approximate algorithm which should generate results that are fairly accurate. Thus, some orders might be splitted in a non-ideal manner. Determining a completely accurate distribution for minimizing shipments is computationally very difficult and thus the approximate algorithm has been used.
The steps followed in the minimize shipments algorithm are:
Select all SKUs from the order where Inventory allocation is required
Select all locations whose Inventory is exposed on marketplace AND where selected SKUs are available
Rank Locations by Count of Items and SKUs available
Select Top Ranked Location(s)
If there are multiple top ranked locations, use Cluster Area Code mapping to find the closest location.
Create maximum Sub-Order from Top Ranked Location
Check if more allocation is needed, if yes then goto 1 else end
Example of execution:
Assume that the distribution of inventory for two SKUs across 3 warehouses is as follows:
WH1 | WH2 | WH3 | |
SKUA | 1 | 2 | 0 |
SKUB | 4 | 1 | 2 |
Now, suppose an order is placed with ordered quantities: SKUA: 1, SKUB: 2. On running the minimize-shipment algorithm for this order, the first location that will be picked for sub-order creation will be the one which has the maximum total allocatable quantity. For the given order, the total allocatable quantities are: WH1: 3, WH2: 2, WH3: 2. Therefore, WH1 would be used to create the first sub-order.
In case any ordered quantity was left over after the first sub-order creation, the allocatable quantities would be recalculated and the next choice of location for sub-order creation would be decided.
Splitting Logic Flowchart (Simplified)
Handling Excess / Unfulfillable Orders
For an unfulfillable order, the available quantities will be assigned or reserved to splitted sub orders based on the selected primary routing algorithm. For the excess ordered quantities, a single sub-order will be created from any one of the available locations. No preference will be given to a specific location during the creation of the excess order (except in the case of Manufacturable SKUs, see attached note).
⚠️ Note: If the excess ordered quantity contains manufacturable SKUs, the sub-orders for such items will be created in locations where these SKUs are marked as manufacturable. If multiple, excess manufacturable SKUs are present in the outward order, each of which is manufacturable in different locations, multiple sub-orders would be created to ensure that the excess sub-order of a manufacturable SKU is always present in a location where the SKU can be manufactured.
Handling Cancellations before Splitting
In case an order is partially canceled before the splitting / routing is performed, a single sub-order will be created with all the canceled quantities during splitting. This sub-order will be created from any arbitrary, valid location corresponding to the order.
FAQs
Q. Which locations will be considered when performing splitting/routing of orders?
A. Only the locations that are mapped to the order’s client-channel in CIMS are considered when performing splitting routing.
Q. Why is one of the locations mapped to a client not being used for splitting / routing?
A. The splitting logic only considers locations that are both mapped to a client in OMS through client-warehouse mapping and are mapped to the client, channel corresponding to the order in CIMS
Q. Which actions will be audited?
A. Audit logs will be saved for the following actions at a client level:
Enabling / Disabling of clusters
Removal of locations from a Cluster Definition
Updation of the Primary Routing Algorithm for a client
Q. Which quantity will be considered while splitting/routing of orders with virtual items?
A. The parent level quantities are considered while splitting/routing orders with virtual items.
Q. Will FEFO be maintained for perishable items across locations while splitting/routing?
A. FEFO will only be maintained within a warehouse in splitting/routing. When deciding the splitting of orders with perishable items, only the non-expired quantity is considered across locations.
Q. For which types of orders is splitting/routing not supported?
A. Order splitting/routing is not supported for BULK orders and QC-FAIL orders.