Distributed Order Management System (Routing)
The distributed order management system is the heart of the fulfillmenttools platform. In this part of our tutorial series we configure the DOMS for our fictional company LU.XY fashion.
As you might have seen in the detailed article, our distributed order management system (or short DOMS) helps you route orders. To find the optimal facility for fulfilling each order, there are fences (must criteria) and ratings (which facility is the best). Whereas in old times there were static rulesets, the fulfillmenttools platform enables them to be dynamic, choosing the best facility at the moment. On this page, you see how to configure the DOMS using the REST API. This can also be configured when logged in as an administrator via the Backoffice.
Fences Fences work a bit like filters as they filter out facilities that don't match the criteria that are defined. A detailed list of the standard options can be found here, you can also create your own criteria using custom fences. LU.XY wants to give their customers a great experience, so they want the service type ordered and the service type offered by the facility to match. They are connected to a marketplace which decides from which facility LU.XYcan fulfil. To have the DOMS handling that we need to enable these fences:
Service Type
Preselected facilities
Ratings After we fenced some facilities out, some facilities will be left. Without any ratings between those, the facility receiving the pick job would be picked randomly by the platform. To distribute the pickjob between the facilities, the DOMS allows us to rate each facility in terms of fulfilling that pickjob.
LU.XY wants to prefer the facility closest to the customer and with the fastest delivery speed. As the employees have KPIs based on the performance, the workload should also be balanced between the facilities. Additionally, they have categorised their stores into A stores and B stores. A stores perform very well with walk-in customers which is why they want to prefer the B stores for online orders. Therefore these ratings come into place:
Geodistance
Workload balancing
Custom fence based on the facility rating
We will get into those ratings into detail in a bit. To make every customer as happy as possible, they want to try out splitting orders, which means we also have to active this feature in the routing ruleset.
Apply the standard routing rules
Now we can set the other routing options. First, we should GET the current ruleset using the GET routing configuration endpoint:
The response is a 200 OK
containing the current rules:
globalRoutingConfiguration.defaultPrice
: This is used for the maximizing turnover rating and should be a standard value for the industry, e.g. 500 EUR for tech, 100 EUR for fashion.prioritizationRules
: has no more impact today.routingRule.fences
: Here you can find all fences there are available without using customized ones. To active the ones we talked about earlier, we need the propertiesid
,active
andactiveMode
.routingRule.ratings
: Here you can find all fences support by default. The propertymaxPenalty
describes the weighting that each rating has in the routing decision. For example amaxPenalty
of 2 is not as important and has a lower weight thanmaxPenalty
of 8. This could be any number. By default you can set this penalty in the frontend between 1 and 10, in the API higher values are possible.orderSplit
: Here you can either activate or deactive the split of orders.
In our case we want to activate the order split and the fences mentioned above. The weighting of the ratings would look like that:
GEO-DISTANCE 1
WORKLOAD-BALANCING 4
Using the PATCH routing configuration endpoint, we can set the desired the desired rules:
After successfully applying these rules, we'll get a 200 OK
response containing the adjusted routing configuration with a new version:
Set facility rating
The facility rating is done using a tag for the rating which is patched to the facility. Therefore, we first need to create a tag prior to link that rating tag to a facility. For achieving that, we can POST the tag to the API's endpoint:
The response should be 201 CREATED
response reading back the provided information:
Now we can add this tag to a facility using the facility endpoint with a PATCH call:
The platform will then answer with a 200 OK
response containing the whole facility object:
This needs to be done for every facility.
Configuring the DOMS toolkit (custom rules)
For some cases, the routing configuration the fulfillmenttools platform offers by default does not match exactly the customer's needs. To give you the best routing experience possible and offer even more routing rulesets, we introduced the DOMS toolkit. In the case of LU.XY fashion, we need a rating for certain facilities. This can be done using the mentioned toolkit.
DOMS Toolkit The DOMS toolkit compares two entities of this list:
order
facility
carrierconnection
The left side is usually an order, the right side might be something else. The toolkit then looks for certain values in the left entity and then rates the existance of certain properties in the other entity.
In LU.XY's case we want all orders to be compared, therefore we need a property which is always present. As every order contains an ID, we expect that value not to be an empty string. For the facility, we need the facilityRating
tag set above to match the value B
in order to give all facilities rated as B-stores a rating. fulfillmenttools recommends 40 in that case to give this the highest priority.
To create that custom rating we need to POST it to the toolkit rating endpoint:
The response should be a 201 CREATED
containing the object with ID, version and timestamp added:
The store ratings and routing weights are:
A stores: 20
B stores: 40
C stores: 60
Every custom rule needs its own API call.
We have now successful configured the routing rules for LU.XY fashion. Please keep in mind that DOMS can be a complex topic, especially when you're at the start of your integration. If you need any help, your professional services representative is always happy assisting you with the routing configuration.
Last updated