Here is the state machine diagram for a product order. Each order states are described in the tab below.
The order item states are the same as the order ones. Note that the order and order item states are tightly linked and need to be consistent, for example :
Acknowledged |
The Acknowledged state is where an order has been received and has passed message and basic business validations. |
In Progress |
The In Progress state is where an order has passed the Order Feasibility check successfully and service delivery has started. |
Cancelled |
The Cancelled state is where an In-Flight Order has been successfully cancelled. |
Completed |
The Completed state is where an order has complete provision and the service is now active. |
Rejected |
The Rejected state is where:
|
Pending |
The Pending state is used when an order is currently in a waiting stage for an action/activity to be completed before the order can progress further, pending order amend or cancel assessment. In situations where Access Seeker action is required, an "information required" notification will be issued on transition into this state. |
Held |
The Held state is used when an order cannot be progressed due to an issue. SP has temporarily delayed completing an order to resolve an infrastructure shortfall to facilitate supply of order. Upon resolution of the issue, the order will continue to progress. |
Failed |
All Order items have failed which results in the entire Order has Failed. |
Partial |
Some Order items have failed and some have succeeded so the entire Order is in a Partial state. This provides support for partial Failure of an Order |
Here under a product order composed of 4 order lines (orderItems) :
{ "id":"42", "href":"http://serverlocation:port/orderManagement/productOrder/42", "externalId":"NiceNameForTheConsumer_42", "priority":"1", "description":"A wonderful 42 order for brand new products", "category":"residential", "state":"InProgress", "orderDate":"2013-04-12T16:42:23-04:00", "completionDate":"2013-04-19T16:42:23-04:00", "requestedStartDate":"2013-04-12T16:42:23-04:00", "requestedCompletionDate":"2013-04-19T16:42:23-04:00", "expectedCompletionDate":"2013-04-19T16:42:23-04:00", "notificationContact":"[email protected]", "note":[ { "text":"A free text detailing the note", "date":"2013-04-12T16:42:23-04:00", "author":"name" } ], "relatedParty":[ { "role":"customer", "id":"345221", "href":"http://serverlocation:port/partyManagement/customer/345221" "name":"John Doe" }, { "role":"partner", "id":"42", "href":"http://serverlocation:port/partyManagement/partner/42" }, { "role":"seller", "id":"4563", "href":"http://serverlocation:port/partnerManagement/partner/4563" } ], "orderItem":[ { "id":"1", "action":"add", "state":"Acknowledged", "billingAccount":[{ "id":"123456", "href":"http://serverlocation:port/billingManagement/billingAccount/123456" }], |
Field Descriptions :
BillingAccount: is the billingAccount to use to bill the ordered products
Field |
Description |
id |
Unique identifier of the billing account |
href |
Reference of the billing account |
Note: Extra-information about the order (e.g. useful to add extra delivery information that could be useful for a human process : a digicode access to a building, …).
Field |
Description |
date |
Date of the note |
author |
Author of the note |
text |
Text of the note |
Product Order: is a type of order which can be used to place an order between a customer and a service provider or between a service provider and a partner and vice versa.
Field |
Description |
category |
Used to categorize the order from a business perspective that can be useful for the OM system (e.g. "enterprise", "residential", ...) |
completionDate |
Date when the order was completed |
description |
Description of the product order |
expectedCompletionDate |
Expected delivery date amended by the provider |
externalId |
ID given by the consumer and only understandable by him (to facilitate his searches afterwards) |
href |
Hyperlink to access the order |
id |
ID created on repository side (OM system) |
notificationContact |
Contact attached to the order to send back information regarding this order |
orderDate |
Date when the order was created |
priority |
A way that can be used by consumers to prioritize orders in OM system (from 0 to 4 : 0 is the highest priority, and 4 the lowest) |
requestedCompletionDate |
Requested delivery date from the requestor perspective |
requestedStartDate |
Order start date wished by the requestor |
state |
State of the order : described in the state-machine diagram above |
OrderItem: Order items that have to be treated
Field |
Description |
id |
Identifier of the line item (generally it is a sequence number 01, 02, 03, …) |
action |
Can be "add" / "modify" / "no_change"/ "delete" |
state |
State of the order item : described in the state machine diagram |
appointment |
Used to precise that an appointment was set up with a related party for this order item |
Place: Used to defined a place useful for the product (for example a delivery geographical place)
Field |
Description |
href |
Reference of a place (for instance in google map) |
role |
Role of the place (for instance delivery geographical place) |
Product: Configure the product characteristics (only configurable characteristics and necessary only if a non-default value is selected) and/or identify the product that needs to be modified/deleted.
May be a bundle product instantiation, in this case, it will contain the list of bundled product to instantiate
Nota: Each product to instantiate corresponds to a purchased productOffering. In case of bundles, the order of the list in the productOffering bundle must match the order of the list in the product instance bundle to deliver.
Field |
Description |
id |
Identifier of the owned product (useful for delete or modify command) |
href |
Reference to the owned product (useful for delete or modify command) |
ProductCharacteristic: Characteristics of the product to instantiate or to modify
Field |
Description |
name |
Name of the characteristic |
value |
Value of the characteristic |
ProductOffering: Ordered offering (pricing, default values, etc. are fetched by the OM directly from the catalogue). May be a bundle ProductOffering, in this case, it will contain the list of bundled offers that are ordered
Field |
Description |
id |
Unique identifier of the product offering |
href |
Reference of the product offering |
ProductRelationship: Linked products to the one instantiate.
Field |
Description |
type |
Type of the product relationship. It can be :
|
RelatedParty: Defines parties which are involved in the order and the role they are playing. At product order level, it may be the customer and at the product level, it may be the user.
Field |
Description |
id |
Unique identifier of related party |
href |
Reference of the relatedParty, could be a party reference or a partyRole reference |
role |
Role of the related party |
name |
Name of the related party |
UML model:
Five notification types are defined :
UML model:
Used to notify that a new order has just been created.
{ "eventId":"00001", "eventTime":"2013-04-19T16:42:25-04:00", "eventType":"orderCreationNotification", "event":{ "productOrder":{ "id":"42", "href":"http://serverlocation:port/orderManagement/productOrder/42", "externalId":"NiceNameForTheConsumer_42", "priority":"1", "description":"A wonderful 42 order for brand new products", "category":"residential", "state":"InProgress", "orderDate":"2013-04-12T16:42:23-04:00", "completionDate":"2013-04-19T16:42:23-04:00", "requestedStartDate":"2013-04-12T16:42:23-04:00", "requestedCompletionDate":"2013-04-19T16:42:23-04:00", "expectedCompletionDate":"2013-04-19T16:42:23-04:00", "notificationContact":"[email protected]", |
Used to notify that an order was deleted.
{ "eventId":"00002", "eventTime":"2013-04-19T16:42:25-30:00", "eventType":"orderRemoveNotification", "event":{ "productOrder":{ "id":" 42", |
Used to notify that an order state is evolving.
{ "eventId":"00003", "eventTime":"2013-04-19T16:42:25-30:00", "eventType":"orderStateChangeNotification", "event":{ "productOrder":{ "id":" 42", |
Used to notify that any data in an order has just changed.
{ "eventId":"00004", "eventTime":"2013-04-19T16:42:25-30:00", "eventType":"orderValueChangeNotification", "event":{ "productOrder":{ "id":" 42", |
Used to notify that some data in the order needs to be filled / is missing.
Simple example : notification contact is missing
{ "eventId":"00005", "eventTime":"2013-04-19T16:42:25-30:00", "eventType":"orderInformationRequiredNotification", "resourcePath":"/order/42 ", "fieldPath":"missing=notificationContact", "event":{ "productOrder":{ "id":" 42", "href":"http://serverlocation:port/orderManagement/productOrder/42", "externalID":"NiceNameForTheConsumer_42" }}} |
Complex example : in the order item "1", the IMEI characteristic value is missing to instantiate the product "465665"
{ "eventId":"00006", "eventTime":"2013-04-19T16:42:25-30:00", "eventType":"orderInformationRequiredNotification", "resourcePath":"/order/42/orderItem/1", "fieldPath":"missing=product.productCharacteristic.value&product.id=465665&product.productCharacteristic.name=IMEI", "event":{ "productOrder":{ "id":" 42", "href":"http://serverlocation:port/orderManagement/productOrder/42", "externalID":"NiceNameForTheConsumer_42" }}} |