The Platform Order Management Service takes in Client Orders which are a set of instructions passed by the Client to the Tenant for execution.
Client Orders can be for the physical movement of items (for example, moving items from the consignor to the consignee), or services (for example, installing/repairing equipment, performing KYC verification, etc.).
All instructions within a Client Order impact a single customer/destination address location, with an exception for return instruction, wherein the return address location is different from the forward flow instruction(s).
These Client Orders go through a Manifestation App which is the layer where Client Orders are pushed (or it pulls the orders from a location predefined by the Client).
The Manifestation App is outside the CoreOS and is managed by the Tenant’s Client integration team.
The App interprets and translates the Client Order into Platform Order which is a generic format of the order that is based on certain Core and Custom Attributes. These Platform Orders are further pushed to Platform Order Service that provides API endpoints to create or update an order through the Client Integration Layer, read order status/history, etc. It also produces order status change events that external applications and services can consume.
The Platform Order Service generically representations Client Order instructions as Orders and Work Orders. When a Client creates a Platform Order, the OS1 Platform creates an Order and the associated Work Orders.
An Order can have one or more Work Orders linked to it. For example, on 'order cancellation' or 'failed delivery', a new Work Order for 'return' is added to the Order. Moreover, the lifecycle of a Work Order is different from the lifecycle of a Platform Order.
After the Client Orders and their respective Work Orders are registered in Platform Order Service, they are validated by external plugins configured in the Plugin Manager. Plugin Manager is a module that coordinates the event-based execution of one or more pluggable code modules in an async manner.
The components of the preceding workflow are broadly described in the following topics: