Fluent Commerce Logo
Sign In

Enable Return Order with Exchange in Fluent OMS

How-to Guide
Extend

Authors:

Valery Kornilovich, Sergey Chebotarev

Changed on:

20 Mar 2025

Key Points

  • Eligibility & Conditions – Clearly define the conditions under which an item can be exchanged, such as time limits, product conditions, and receipt requirements.
  • Exchange Process – Outline the step-by-step process, including how customers initiate an exchange, return shipping details, and replacement timelines.
  • Inventory & Availability – Ensure the desired replacement item is in stock and provide alternatives if it's unavailable.
  • Refund vs. Exchange Policy – Specify whether price differences will be refunded or charged.
  • Customer Communication – Keep customers informed at every stage with order tracking, confirmation emails, and support availability.
No alt text provided

Steps

Step arrow right iconUse Case

A use case for a return order with exchange is when a customer receives a defective product and wants to exchange it for a functional one without incurring additional costs.

Step arrow right iconSolution Approach

As a solution we need to modify workflows to support Return Process with or without RMA. 

Add new custom rules so support changes in workflow. 

Modify existed UI component to support better visualization and add ability to initiate Exchange process.

Step arrow right iconChallenges / Limitations

Current solution does not provide some side functionality that needs to be implemented based on the client specific Workflow features (or linked 3rd party solutions) as standalone rules:

  • no automatic generation of FinancialTransaction (the information of price change is transferred to the rule)
  • no automatic e-mail send (can be done based on other 3rd party solutions like "Mandrill")
  • no display of some additional specific information for the Return order done with Exchange (can be done as a separate page of additional information elements for existing pages)

Step arrow right iconRules changes

CreateReturnOrderFromOrder rule

CreateReturnOrderFromOrder rule creates a new Return Order according to User Action attributes. It also creates Exchange Order if Exchange Items list is not empty. 

Context Entity: ORDER

Required Event attributes

  • returnItems - list of the returned items;
  • exchangeItems - an object that contains the list of the exchange items, sign of Uneven Exchange, and the list of Financial Transactions (optional);
  • pickupLocation - Pickup Location Ref or Pickup Address;
  • destinationLocation - Destination Location Ref;
  • lodgedLocation - Lodged Location Ref (deprecated attribute, it is an empty field now);
  • type - Type of Return Order, contains DEFAULT value.
1{
2    "returnItems": [
3      {
4        "orderItemRef": "ShoesBeige7",
5        "returnReason": {
6          "label": "Wrong Size",
7          "value": "WRONGSIZE"
8        },
9        "unitQuantity": {
10          "quantity": 1
11        },
12        "returnCondition": {
13          "label": "Reusable",
14          "value": "GOOD"
15        }
16      }
17    ],
18    "exchangeItems": {
19      "even": false,
20      "items": [
21        {
22          "ref": "TrainersCitron8",
23          "price": "132.00",
24          "taxType": "VAT",
25          "currency": "GBP",
26          "quantity": 2,
27          "productCatalogueRef": "DEFAULT:34"
28        }
29      ],
30      "financialTransactions": [
31        {
32          "ref": "9ffdadb9-47f4-4aec-8b99-b6d06bdc2695",
33          "type": "PAYMENT",
34          "amount": 78,
35          "cardType": "MASTERCARD",
36          "currency": "GBP",
37          "paymentMethod": "CREDITCARD",
38          "paymentProvider": "BRAINTREE",
39          "externalTransactionId": "",
40          "externalTransactionCode": ""
41        }
42      ]
43    },
44    "pickupLocation": {
45      "lodgedLocation": "STORE_5_DEMO_GB"
46    },
47    "destinationLocation": "DC_2_DEMO_GB",
48    "lodgedLocation": "",
49    "type": "DEFAULT"
50  }

Language: json

Name: An Example of Event attributes for CreateReturnOrderFromOrder rule

Description:

[Warning: empty required content area]
1{
2    "name": "{{fluent.account.client_id}}.sefeature.CreateReturnOrderFromOrder",
3    "props": null
4}

Language: json

Name: CreateReturnOrderFromOrder rule usage example

Description:

[Warning: empty required content area]
CopyReturnAttributesToOrderItems rule

CopyReturnAttributesToOrderItems rule copies values of RETURN_TYPE and RETURN_PERIOD attributes from Variant or Standard Product to Order Items of the Order. This rule should be used when a Fulfilment of the Order goes into Awaiting Collection (CC Workflow) or Courier Collection (HD Workflow) status.

Context Entity: FULFILMENT

1{
2    "name": "{{fluent.account.client_id}}.sefeature.CopyReturnAttributesToOrderItems",
3    "props": {}
4}

Language: json

Name: CopyReturnAttributesToOrderItems rule usage example

Description:

[Warning: empty required content area]
CalculateReturnableQuantityForOrderItems rule

CalculateReturnableQuantityForOrderItems rule calculates returnable quantity for each Order Items in the current Order and saves this value in returnableQty attribute of the Order Item. This rule takes into account that Order Item could be partially or fully substituted. Substituted quantity is stored in substituteQuantity attribute of Order Item.

Context Entity: ORDER

1content missing :)

Language: plain_text

Name: CalculateReturnableQuantityForOrderItems rule usage example

Description:

[Warning: empty required content area]
CalculateReturnDateLimitForOrderItems rule

CalculateReturnDateLimitForOrderItems rule calculates return date limit for each Order Items in the current Order and saves this value in RETURN_DATE_LIMIT attribute of the Order Item. If the Order Item is not returnable date limit is not calculated. RETURN_PERIOD attribute of Order Item is used to calculate return date limit according to the next formula Return-Date-Limit = Current-Date + RETURN_PERIOD (number of days).

Context Entity: ORDER

1{
2    "name": "{{fluent.account.client_id}}.sefeature.CalculateReturnDateLimitForOrderItems",
3    "props": {}
4}

Language: json

Name: CalculateReturnDateLimitForOrderItems rule usage example

Description:

[Warning: empty required content area]
AssignRmaToReturnOrder rule

AssignRmaToReturnOrder rule creates RMA key and calculates RMA Key Expiration Date. These values is stored in returnAuthorisationKey and returnAuthorisationKeyExpiry fields of the current Return Order respectively.

Context Entity: RETURN_ORDER

1{
2    "name": "{{fluent.account.client_id}}.sefeature.AssignRmaToReturnOrder",
3    "props": null
4}

Language: json

Name: AssignRmaToReturnOrder rule usage example

Description:

[Warning: empty required content area]
ValidateReturnOrderItems rule

ValidateReturnOrderItems rule validates all Return Order Items of a newly created Return Order. It checks three points:

  • the Order Items has to be returnable;
  • the return date limit (if it is set) has not to be expired;
  • quantity has not to exceed current returnable quantity of the item.

If all checks passes return order confirmation event is invocated (name of this event is passed in confirmReturnOrder property of the rule).

If any checks for any Order Item fails return order rejection event is invocated (name of this event is passed in rejectReturnOrder property of the rule). Rejection reasons are saved in RETURN_REJECTION_REASONS attribute of the Return Order.

Context Entity: RETURN_ORDER

Rule properties:

  • confirmReturnOrder - Name of Event to be sent if all Order Items pass all checks
  • rejectReturnOrder - Name of Event to be sent if at least one Order Item does not pass any checks
1{
2    "name": "{{fluent.account.client_id}}.sefeature.ValidateReturnOrderItems",
3    "props": {
4        "rejectReturnOrder": "RejectReturnOrder",
5        "confirmReturnOrder": "ConfirmReturnOrder"
6    }
7}

Language: json

Name: ValidateReturnOrderItems rule usage example

Description:

[Warning: empty required content area]
CreateReturnFulfilments rule

CreateReturnFulfilments rule creates Return Fulfilments for the current Return Order. All Order Items are grouped by value of RETURN_TYPE attributes. A Return Fulfilment is created for each group: DEFAULT and RMA. Value of return type is saved into RETURN_TYPE attribute of the Return Fulfilment.

Context Entity: RETURN_ORDER

1{
2    "name": "{{fluent.account.client_id}}.sefeature.CreateReturnFulfilments",
3    "props": null
4}

Language: json

Name: CreateReturnFulfilments rule usage example

Description:

[Warning: empty required content area]
SendEventIfAllReturnFulfilmentsInStatuses rule

SendEventIfAllReturnFulfilmentsInStatuses rule checks that all Return Fulfilments of the current Return Order are in statuses listed on status property of the rule. If check passes an event is executed. Event name is passed in eventName property of the rule.

Context Entity: RETURN_ORDER

Rule properties:

  • status - the list of checked Fulfilment statuses
  • eventName - name of the Event to be sent if all checks are passed
1{
2    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfAllReturnFulfilmentsInStatuses",
3    "props": {
4        "status": [
5            "CANCELLED"
6        ],
7    "eventName": "CancelReturnOrder"
8    }
9}

Language: json

Name: SendEventIfAllReturnFulfilmentsInStatuses rule usage example

Description:

[Warning: empty required content area]
SendEventIfAnyReturnFulfilmentInStatuses rule

SendEventIfAnyReturnFulfilmentInStatuses rule checks that any of Return Fulfilments of the current Return Order is in status listed on status property of the rule. If check passes an event is executed. Event name is passed in eventName property of the rule.

Context Entity: RETURN_ORDER

Rule properties:

  • status - the list of checked Fulfilment statuses
  • eventName - name of the Event to be sent if any check is passed
1{
2    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfAnyReturnFulfilmentInStatuses",
3    "props": {
4        "status": [
5            "COMPLETE"
6        ],
7        "eventName": "CheckIfReturnOrderIsVerified"
8    }
9}

Language: json

Name: SendEventIfAnyReturnFulfilmentInStatuses rule

Description:

[Warning: empty required content area]
SendEventIfReturnFulfilmentAttributeEqualsTo rule

SendEventIfReturnFulfilmentAttributeEqualsTo rule checks if Return Fulfilment attribute with name passed in attributeName property exists and equal to the value passed in attributeValue property. If the check is successful event with name passed in eventName property is invoked.

Context Entity: RETURN_FULFILMENT

Rule properties:

  • attributeName - name of Return Fulfilment attribute that has to be checked
  • attributeValue - attribute value to be checked with
  • eventName - name of the Event to be sent if values matches with Attribute value
1{
2    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfReturnFulfilmentAttributeEqualsTo",
3    "props": {
4        "eventName": "CheckIfThereIsExchangeOrder",
5        "attributeName": "RETURN_TYPE",
6        "attributeValue": "RMA"
7    }
8}

Language: json

Name: SendEventIfReturnFulfilmentAttributeEqualsTo rule usage example

Description:

[Warning: empty required content area]
SendEventIfReturnOrderIsRMA rule

SendEventIfReturnOrderIsRMA rule checks if the current Return Order contains RMA Return Items. If there is event with name passed in eventName property is invoked. Delay of the invocation can be specified in delay property.

Context Entity: RETURN_ORDER

Rule properties:

  • eventName - name of the Event to be sent
  • delay - time delay for sending Event in seconds
1{
2    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfReturnOrderIsRMA",
3    "props": {
4        "delay": 1,
5        "eventName": "ProcessRMAReturnOrderWithExchange"
6    }
7}

Language: json

Name: SendEventIfReturnOrderIsRMA rule usage example

Description:

[Warning: empty required content area]
SendEventIfReturnOrderIsNotRMA rule

SendEventIfReturnOrderIsNotRMA rule checks if the current Return Order contains RMA Return Items. If there is NOT event with name passed in eventName property is invoked. Delay of the invocation can be specified in delay property.

Context Entity: RETURN_ORDER

Rule properties:

  • eventName - name of the Event to be sent
  • delay - time delay for sending Event in seconds
1{
2    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfReturnOrderIsNotRMA",
3    "props": {
4        "delay": 1,
5        "eventName": "ProcessDefaultReturnOrderWithExchange"
6    }
7}

Language: json

Name: SendEventIfReturnOrderIsNotRMA rule

Description:

[Warning: empty required content area]
SendEventIfExchangeOrderExistedOrNot rule

SendEventIfExchangeOrderExistedOrNot rule checks if the current Return Order contains Exchange Order. The event with name passed in eventName is invoked according a value passed in exchangeOrderExisted property. The event is sent if the value is TRUE and Exchange Order exists or the value is FALSE and Exchange Order doesn’t exist.

Context Entity: RETURN_ORDER

Rule properties:

  • eventName - name of the Event to be sent
  • delay - time delay for sending Event in seconds
  • exchangeOrderExisted - boolean value to decide in what case Event has to be sent
1{
2    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfExchangeOrderExistedOrNot",
3    "props": {
4        "eventName": "NotifyExchangeOrder",
5        "delay": 1,
6        "exchangeOrderExisted": "TRUE"
7    }
8}

Language: json

Name: SendEventIfExchangeOrderExistedOrNot rule usage example

Description:

[Warning: empty required content area]
SendEventToAllReturnFulfilments rule

SendEventToAllReturnFulfilments rule sends event with name specified in eventName property to all Return Fulfilments of the current Return Order.

Context Entity: RETURN_ORDER

Rule properties:

  • eventName - name of the Event to be sent
1{
2    "name": "{{fluent.account.client_id}}.sefeature.SendEventToAllReturnFulfilments",
3    "props": {
4        "eventName": "CancelReturnOrderFulfilment"
5    }
6}

Language: json

Name: SendEventToAllReturnFulfilments rule usage example

Description:

[Warning: empty required content area]
SendEventToReturnOrderFromFulfilment rule

SendEventToReturnOrderFromFulfilment rule sends event with name specified in eventName property to Return Order (root entity) from the current Return Fulfilment. Delay of the invocation can be specified in delay property.

Context Entity: RETURN_FULFILMENT

Rule properties:

  • eventName - name of the Event to be sent
  • delay - time delay for sending Event in seconds
1{
2    "name": "{{fluent.account.client_id}}.sefeature.SendEventToReturnOrderFromFulfilment",
3    "props": {
4        "delay": 1,
5        "eventName": "NotifyReturnOrder"
6    }
7}

Language: json

Name: SendEventToReturnOrderFromFulfilment rule usage example

Description:

[Warning: empty required content area]
SendEventToUpdateInventoryQuantityReturnOrder rule

SendEventToUpdateInventoryQuantityReturnOrder rule sends event with name specified in eventName property to Inventory Catalogue with reference specified in inventoryCatalogueRef property. List of the items that should be updated is passed in items attribute of the event. This list contains only items that have conditions specified in returnConditions property and belong to Return Fulfilments that are in status specified in fulfilmentStatuses property.

Context Entity: RETURN_ORDER

Rule properties:

  • eventName - name of the Event to be sent
  • inventoryCatalogueRef - Ref of the Inventory Catalogue
  • returnConditions - the list of accepted Return Conditions
  • fulfilmentStatuses - the list of accepted return fulfilment statuses

Generated Event attributes:

  • items - list of the items that have to be returned into Inventory
1[
2    {
3        "skuRef": "ShoesBeige8",
4        "saleQty": 0,
5        "quantity": 0,
6        "cancelQty": 0,
7        "reserveQty": 1,
8        "locationRef": "DC_2_DEMO_GB",
9        "fulfilmentId": "HD-1739520611128-R81518",
10        "correctionQty": 0
11    }
12]

Language: json

Name: Example of items Event attribute

Description:

[Warning: empty required content area]
1{
2    "name": "{{fluent.account.client_id}}.sefeature.SendEventToUpdateInventoryQuantityReturnOrder",
3    "props": {
4        "eventName": "UpdateReturnOrderInventoryQty",
5        "returnConditions": [
6            "GOOD"
7        ],
8        "fulfilmentStatuses": [
9            "COMPLETE"
10        ],
11        "inventoryCatalogueRef": "DEFAULT:{{fluent.retailer.current.id}}"
12    }
13}

Language: json

Name: SendEventToUpdateInventoryQuantityReturnOrder rule usage example

Description:

[Warning: empty required content area]
SendEventToExchangeOrderIfReturnOrderInStatus rule

SendEventToExchangeOrderIfReturnOrderInStatus rule sends event with name specified in eventName property to an Exchange Order if it exists for the current Return Order and the Return Order is in status which value is equal to setting with name specified in setting property.

Context Entity: RETURN_ORDER

Rule properties:

  • eventName - name of the Event to be sent
  • setting - name of the Setting that contains Status name
1{
2    "name": "{{fluent.account.client_id}}.sefeature.SendEventToExchangeOrderIfReturnOrderInStatus",
3    "props": {
4        "eventName": "ResumeExchangeOrder",
5        "setting": "EXCHANGE_ORDER_NOTIFICATION_STATUS"
6    }
7}

Language: json

Name: SendEventToExchangeOrderIfReturnOrderInStatus rule usage example

Description:

[Warning: empty required content area]
ScheduleEventIfRMAExpirationIsSet rule

ScheduleEventIfRMAExpirationIsSet rule sends delayed event with name specified in eventName property to the same Return Order if returnAuthorisationKeyExpiry field of the Return Order is not empty and contains valid date value.

Context Entity: RETURN_ORDER

Rule properties:

  • eventName - name of the Event to be sent
1{
2    "name": "{{fluent.account.client_id}}.sefeature.ScheduleEventIfRMAExpirationIsSet",
3    "props": {
4        "eventName": "CancelExpiredReturnOrder"
5    }
6}

Language: json

Name: ScheduleEventIfRMAExpirationIsSet rule usage example

Description:

[Warning: empty required content area]
SendEventIfExchangeOrderExistedOrNot rule

SendEventIfExchangeOrderExistedOrNot rule sends delayed event with name specified in eventName property if Exchange Order exists or not according to the value in exchangeOrderExisted property. Delay is set in delay property.

Context Entity: RETURN_ORDER, RETURN_FULFILMENT

Rule properties:

  • eventName - name of the Event to be sent
  • delay - time delay for sending Event in seconds
  • exchangeOrderExisted - boolean value: TRUE - sends Event if Exchange Order exists, FALSE - sends Event if Exchange Order doesn't exist.
1{
2    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfExchangeOrderExistedOrNot",
3    "props": {
4        "eventName": "NotifyExchangeOrder",
5        "delay": 1,
6        "exchangeOrderExisted": "TRUE"
7    }
8}

Language: json

Name: SendEventIfExchangeOrderExistedOrNot rule usage example

Description:

[Warning: empty required content area]
UpdateTotalAmountForReturnOrder rule

UpdateTotalAmountForReturnOrder rule updates total amount and total tax amount of the current Return Order taking into account only ReturnFulfilments that are in status passed in status property. Also this rule takes into account that Return Order could be partially refunded by Exchange Order. Total amount of Return Order is updated correctly in case of partial refund.

Context Entity: RETURN_ORDER

Rule properties:

  • status - list of Fulfilment statuses
1{
2    "name": "{{fluent.account.client_id}}.sefeature.UpdateTotalAmountForReturnOrder",
3    "props": {
4        "status": [
5            "COMPLETE"
6        ]
7    }
8}

Language: json

Name: UpdateTotalAmountForReturnOrder rule usage example

Description:

[Warning: empty required content area]
ApplyFulfilmentCostToReturnOrder rule

ApplyFulfilmentCostToReturnOrder rule updates the Return Order with the fulfilment cost included if all eligible items have been returned.

Context Entity: RETURN_ORDER

1{
2    "name": "{{fluent.account.client_id}}.sefeature.ApplyFulfilmentCostToReturnOrder",
3    "props": {}
4}

Language: json

Name: ApplyFulfilmentCostToReturnOrder rule usage example

Description:

[Warning: empty required content area]

Step arrow right iconWorkflow changes

HD & CC Order Workflows changes

Several changes were made in both CC & HD Workflow in order to support new Return Order logic.

  • CopyReturnAttributesToOrderItems rule was inserted in AllArticlesAwaitingCollection ruleset in both HD & CC Workflows.
1{
2    "name": "AllArticlesAwaitingCollection",
3    "description": "Fulfilment State Change to AWAITING_COLLECTION",
4    "type": "FULFILMENT",
5    "eventType": "NORMAL",
6    "rules": [
7        {
8            "name": "{{fluent.account.client_id}}.core.SetState",
9            "props": {
10                "status": "AWAITING_COLLECTION"
11            }
12        },
13        {
14            "name": "{{fluent.account.client_id}}.sefeature.CopyReturnAttributesToOrderItems",
15            "props": {}
16        },
17        {
18            "name": "{{fluent.account.client_id}}.order.SendEventForOrder",
19            "props": {
20                "eventName": "FulfilmentAwaitingCollection"
21            }
22        }
23    ],
24    "triggers": [
25        {
26            "status": "FULFILLED"
27        },
28        {
29            "status": "PARTIALLY_FULFILLED"
30        },
31        {
32            "status": "AWAITING_ARRIVAL"
33        }
34    ],
35    "userActions": []
36}

Language: json

Name: Example of AllArticleAwaitingCollection ruleset for CC Order workflow

Description:

[Warning: empty required content area]
1
2{
3    "name": "AllArticlesAwaitingCurbside",
4    "description": "Fulfilment State Change to AWAITING_CURBSIDE",
5    "type": "FULFILMENT",
6    "eventType": "NORMAL",
7    "rules": [
8        {
9            "name": "{{fluent.account.client_id}}.core.SetState",
10            "props": {
11                "status": "AWAITING_CURBSIDE"
12            }
13        },
14        {
15            "name": "{{fluent.account.client_id}}.sefeature.CopyReturnAttributesToOrderItems",
16            "props": {}
17        },
18        {
19            "name": "{{fluent.account.client_id}}.order.SendEventForOrder",
20            "props": {
21                "eventName": "FulfilmentAwaitingCurbside"
22            }
23        }
24    ],
25    "triggers": [
26        {
27            "status": "FULFILLED"
28        },
29        {
30            "status": "PARTIALLY_FULFILLED"
31        },
32        {
33            "status": "AWAITING_ARRIVAL"
34        }
35    ],
36    "userActions": []
37}

Language: json

Name: Example of AllArticleAwaitingCurbside ruleset for CC Order workflow

Description:

[Warning: empty required content area]
1{
2    "name": "AllArticlesAwaitingCollection",
3    "description": "Fulfilment State Change to COURIER_COLLECTION",
4    "type": "FULFILMENT",
5    "eventType": "NORMAL",
6    "rules": [
7        {
8            "name": "{{fluent.account.client_id}}.core.SetState",
9            "props": {
10                "status": "COURIER_COLLECTION"
11            }
12        },
13        {
14            "name": "{{fluent.account.client_id}}.sefeature.CopyReturnAttributesToOrderItems",
15            "props": {}
16        },
17        {
18            "name": "{{fluent.account.client_id}}.order.SendEventForOrder",
19            "props": {
20                "eventName": "FulfilmentAwaitingCollection"
21            }
22        }
23    ],
24    "triggers": [
25        {
26            "status": "FULFILLED"
27        },
28        {
29            "status": "PARTIALLY_FULFILLED"
30        }
31    ],
32    "userActions": []
33}

Language: json

Name: Example of AllArticleAwaitingCollection ruleset for HD Order workflow

Description:

[Warning: empty required content area]
  • CalculateReturnDateLimitForOrderItems and CalculateReturnableQuantityForOrderItems rules were inserted in OrderComplete ruleset in both HD & CC Workflows.
1{
2    "name": "OrderComplete",
3    "description": "Order Complete",
4    "type": "ORDER",
5    "eventType": "NORMAL",
6    "rules": [
7        {
8            "name": "{{fluent.account.client_id}}.core.SetState",
9            "props": {
10                "status": "COMPLETE"
11            }
12        },
13        {
14            "name": "{{fluent.account.client_id}}.sefeature.CalculateReturnDateLimitForOrderItems",
15            "props": {}
16        },
17        {
18            "name": "{{fluent.account.client_id}}.sefeature.CalculateReturnableQuantityForOrderItems",
19            "props": {}
20        },
21        {
22            "name": "{{fluent.account.client_id}}.seorder.SendEventIfOrderHasAttribute",
23            "props": {
24                "eventName": "CompleteSubOrder",
25                "attributeName": "masterOrderRef"
26            }
27        }
28    ],
29    "triggers": [
30        {
31            "status": "AWAITING_COLLECTION"
32        },
33        {
34            "status": "BOOKED"
35        },
36        {
37            "status": "PICK_PACK"
38        },
39        {
40            "status": "CUSTOMER_ARRIVED"
41        },
42        {
43            "status": "AWAITING_PAYMENT"
44        },
45        {
46            "status": "AWAITING_TRANSACTION"
47        },
48        {
49            "status": "AWAITING_CURBSIDE"
50        }
51    ],
52    "userActions": []
53},
54

Language: json

Name: Example of OrderComplete ruleset for CC Order workflow

Description:

[Warning: empty required content area]
1{
2    "name": "OrderComplete",
3    "description": "Order Complete - ES rule, no subtype",
4    "type": "ORDER",
5    "eventType": "NORMAL",
6    "rules": [
7        {
8            "name": "{{fluent.account.client_id}}.core.SetState",
9            "props": {
10                "status": "COMPLETE"
11            }
12        },
13        {
14            "name": "{{fluent.account.client_id}}.sefeature.CalculateReturnDateLimitForOrderItems",
15            "props": {}
16        },
17        {
18            "name": "{{fluent.account.client_id}}.sefeature.CalculateReturnableQuantityForOrderItems",
19            "props": {}
20        },
21        {
22            "name": "{{fluent.account.client_id}}.secommon.SendEventForCustomerNotification",
23            "props": {
24                "customerNotificationType": "EMAIL",
25                "notificationSetting": "CUSTOMER_NOTIFICATIONS",
26                "eventName": "SendEmailNotificationForCompleteOrder"
27            }
28        },
29        {
30            "name": "{{fluent.account.client_id}}.secommon.SendEventForCustomerNotification",
31            "props": {
32                "customerNotificationType": "SMS",
33                "notificationSetting": "CUSTOMER_NOTIFICATIONS",
34                "eventName": "SendSmsNotificationForCompleteOrder"
35            }
36        },
37        {
38            "name": "{{fluent.account.client_id}}.seorder.SendEventIfOrderHasAttribute",
39            "props": {
40                "eventName": "CompleteSubOrder",
41                "attributeName": "masterOrderRef"
42            }
43        }
44    ],
45    "triggers": [
46        {
47            "status": "COURIER_COLLECTION"
48        },
49        {
50            "status": "BOOKED"
51        },
52        {
53            "status": "PICK_PACK"
54        },
55        {
56            "status": "COMPLETE"
57        },
58        {
59            "status": "DELIVERED"
60        },
61        {
62            "status": "AWAITING_PAYMENT"
63        },
64        {
65            "status": "AWAITING_TRANSACTION"
66        }
67    ],
68    "userActions": []
69}

Language: json

Name: Example of OrderComplete ruleset for HD Order workflow

Description:

[Warning: empty required content area]
  • ReturnOrderExtended ruleset was extended with new types of User Action attributes. RETURN_COMPLETE status was also added into triggers list of this ruleset.
1{
2    "name": "ReturnOrderExtended",
3    "description": "Validate if the item can be returned and create the return order",
4    "type": "ORDER",
5    "subtype": "CC",
6    "eventType": "NORMAL",
7    "rules": [
8        {
9            "name": "{{fluent.account.client_id}}.order.ValidateReturnQty",
10            "props": null
11        },
12        {
13            "name": "{{fluent.account.client_id}}.sefeature.CreateReturnOrderFromOrder",
14            "props": null
15        }
16    ],
17    "triggers": [
18        {
19            "status": "COMPLETE"
20        },
21        {
22            "status": "RETURN_CREATED"
23        },
24        {
25            "status": "RETURN_COMPLETE"
26        }
27    ],
28    "userActions": [
29        {
30            "context": [
31                {
32                    "label": "Submit Return",
33                    "type": "PRIMARY",
34                    "modules": [
35                        "adminconsole",
36                        "store",
37                        "servicepoint"
38                    ],
39                    "confirm": false
40                }
41            ],
42            "attributes": [
43                {
44                    "name": "returnItems",
45                    "label": "Items",
46                    "type": "returnItemsExtended",
47                    "source": "",
48                    "defaultValue": "",
49                    "mandatory": true
50                },
51                {
52                    "name": "exchangeItems",
53                    "label": "Exchange Items",
54                    "type": "exchangeItems",
55                    "source": "",
56                    "defaultValue": "",
57                    "mandatory": false
58                },
59                {
60                    "name": "pickupLocation",
61                    "label": "Pickup Location",
62                    "type": "pickupLocation",
63                    "source": "",
64                    "defaultValue": "",
65                    "mandatory": true
66                },
67                {
68                    "name": "destinationLocation",
69                    "label": "Destination Location",
70                    "type": "destinationLocation",
71                    "source": "",
72                    "defaultValue": "",
73                    "mandatory": true
74                },
75                {
76                    "name": "lodgedLocation",
77                    "label": "Lodged Location",
78                    "type": "emptyField",
79                    "source": "",
80                    "defaultValue": "",
81                    "mandatory": false
82                },
83                {
84                    "name": "type",
85                    "label": "Return Type",
86                    "type": "STRING",
87                    "source": "",
88                    "options": {
89                        "active": [
90                            {
91                                "name": "Default",
92                                "value": "DEFAULT"
93                            }
94                        ]
95                    },
96                    "defaultValue": "",
97                    "mandatory": false
98                }
99            ]
100        }
101    ]
102}

Language: json

Name: Example of ReturnOrderExtended ruleset for CC Order workflow

Description:

[Warning: empty required content area]
1{
2    "name": "ReturnOrderExtended",
3    "description": "This ruleset is triggered when an event has been sent to initiate a Return against an Order. ",
4    "type": "ORDER",
5    "subtype": "HD",
6    "eventType": "NORMAL",
7    "rules": [
8        {
9            "name": "{{fluent.account.client_id}}.order.ValidateReturnQty",
10            "props": null
11        },
12        {
13            "name": "{{fluent.account.client_id}}.sefeature.CreateReturnOrderFromOrder",
14            "props": null
15        }
16    ],
17    "triggers": [
18        {
19            "status": "COMPLETE"
20        },
21        {
22            "status": "DELIVERED"
23        },
24        {
25            "status": "RETURN_CREATED"
26        },
27        {
28            "status": "RETURN_COMPLETE"
29        }
30    ],
31    "userActions": [
32        {
33            "context": [
34                {
35                    "label": "Submit Return",
36                    "type": "PRIMARY",
37                    "modules": [
38                        "adminconsole",
39                        "store",
40                        "servicepoint"
41                    ],
42                    "confirm": false
43                }
44            ],
45            "attributes": [
46                {
47                    "name": "returnItems",
48                    "label": "Items",
49                    "type": "returnItemsExtended",
50                    "source": "",
51                    "defaultValue": "",
52                    "mandatory": true
53                },
54                {
55                    "name": "exchangeItems",
56                    "label": "Exchange Items",
57                    "type": "exchangeItems",
58                    "source": "",
59                    "defaultValue": "",
60                    "mandatory": false
61                },
62                {
63                    "name": "pickupLocation",
64                    "label": "Pickup Location",
65                    "type": "pickupLocation",
66                    "source": "",
67                    "defaultValue": "",
68                    "mandatory": true
69                },
70                {
71                    "name": "destinationLocation",
72                    "label": "Destination Location",
73                    "type": "destinationLocation",
74                    "source": "",
75                    "defaultValue": "",
76                    "mandatory": true
77                },
78                {
79                    "name": "lodgedLocation",
80                    "label": "Lodged Location",
81                    "type": "emptyField",
82                    "source": "",
83                    "defaultValue": "",
84                    "mandatory": false
85                },
86                {
87                    "name": "type",
88                    "label": "Return Type",
89                    "type": "STRING",
90                    "source": "",
91                    "options": {
92                        "active": [
93                            {
94                                "name": "Default",
95                                "value": "DEFAULT"
96                            }
97                        ]
98                    },
99                    "defaultValue": "",
100                    "mandatory": false
101                }
102            ]
103        }
104    ]
105}

Language: json

Name: Example of ReturnOrderExtended ruleset for HD Order workflow

Description:

[Warning: empty required content area]
  • ReturnOrderCreated ruleset was added. This ruleset sets the status of the Order to RETURN_CREATED. The ruleset is invoked from Return Order Workflow when Return Order is confirmed.
1{
2    "name": "ReturnOrderCreated",
3    "description": "Moves the Order to Return Created status",
4    "type": "ORDER",
5    "eventType": "NORMAL",
6    "rules": [
7        {
8            "name": "{{fluent.account.client_id}}.core.SetState",
9            "props": {
10                "status": "RETURN_CREATED"
11            }
12        }
13    ],
14    "triggers": [
15        {
16            "status": "COMPLETE"
17        },
18        {
19            "status": "RETURN_CREATED"
20        }
21    ],
22    "userActions": []
23}

Language: json

Name: Example of ReturnOrderCreated ruleset for CC & HD Order workflows

Description:

[Warning: empty required content area]
  • List of triggers for UpdateReturnableQty ruleset in CC&HD Workflows was extended with two statuses: RETURN_COMPLETE and COMPLETE.
1{
2    "name": "UpdateReturnableQty",
3    "description": "This rule updates the returnableQty to the order items attributes",
4    "type": "ORDER",
5    "eventType": "NORMAL",
6    "rules": [
7        {
8            "name": "{{fluent.account.client_id}}.order.UpdateOrderItemAttribute",
9            "props": null
10        }
11    ],
12    "triggers": [
13        {
14            "status": "RETURN_CREATED"
15        },
16        {
17            "status": "RETURN_COMPLETE"
18        },
19        {
20            "status": "COMPLETE"
21        }
22    ],
23    "userActions": []
24}

Language: json

Name: Example of UpdateReturnableQty ruleset for CC & HD Order workflows

Description:

[Warning: empty required content area]
  • ProcessExchangeOrder and ResumeExchangeOrder rulesets were added in order to support Exchange Order feature. ProcessExchangeOrder ruleset put current Order to EXCHANGE_HOLD status if it is Exchange Order. This ruleset should be invoked immediately after creation of the Order before main processing. ResumeExchangeOrder ruleset resumes processing of Exchange Order after it was put on hold. This ruleset is invoked from Return Order Workflow.
1{
2    "name": "ProcessExchangeOrder",
3    "description": "Process the Order if it is Exchange Order",
4    "type": "ORDER",
5    "eventType": "NORMAL",
6    "rules": [
7        {
8            "name": "{{fluent.account.client_id}}.core.SetState",
9            "props": {
10                "status": "EXCHANGE_HOLD"
11            }
12        }
13    ],
14    "triggers": [
15        {
16            "status": "CREATED"
17        },
18        {
19            "status": "ASSESSMENT"
20        }
21    ],
22    "userActions": []
23}

Language: json

Name: Example of ProcessExchangeOrder ruleset for CC & HD Order workflow

Description:

[Warning: empty required content area]
1{
2    "name": "ResumeExchangeOrder",
3    "type": "ORDER",
4    "eventType": "NORMAL",
5    "rules": [
6        {
7            "name": "{{fluent.account.client_id}}.core.SetState",
8            "props": {
9                "status": "ASSESSMENT"
10            }
11        },
12        {
13            "name": "{{fluent.account.client_id}}.core.ScheduleEvent",
14            "props": {
15                "delay": 1,
16                "eventName": "AssessPreOrder"
17            }
18        }
19    ],
20    "triggers": [
21        {
22            "status": "EXCHANGE_HOLD"
23        }
24    ],
25    "userActions": []
26}

Language: json

Name: Example of ResumeExchangeOrder ruleset for CC & HD Order workflow

Description:

[Warning: empty required content area]
  • ProcessExchangeOrder ruleset has to be executed from some other ruleset in HD & CC Workflows.
1{
2    "name": "ProcessOrder",
3    "description": "Checks that the Order is Exchange Order",
4    "type": "ORDER",
5    "subtype": "CC",
6    "eventType": "NORMAL",
7    "rules": [
8        {
9            "name": "{{fluent.account.client_id}}.seorder.SendEventIfOrderHasAttribute",
10            "props": {
11                "eventName": "ProcessExchangeOrder",
12                "attributeName": "RETURN_ORDER_REF"
13            }
14        },
15        {
16            "name": "{{fluent.account.client_id}}.seorder.SendEventIfOrderDoesNotHaveAttribute",
17            "props": {
18                "eventName": "AssessPreOrder",
19                "attributeName": "RETURN_ORDER_REF"
20            }
21        }
22    ],
23    "triggers": [
24        {
25            "status": "ASSESSMENT"
26        }
27    ],
28    "userActions": []
29}

Language: json

Name: Example of execution of ProcessExchangeOrder ruleset in CC Order workflow

Description:

[Warning: empty required content area]

Some ruleset have to be specified in ScheduleEvent rule in ResumeExchangeOrder ruleset. For instance, it could be OrderAssessment ruleset for HD Workflow and AssessPreOrder for CC Workflow.

Return Order Workflow changes
1{
2    "retailerId": "{{fluent.retailer.current.id}}",
3    "version": "1.0",
4    "entityType": "RETURN_ORDER",
5    "entitySubtype": "DEFAULT",
6    "description": "This workflow defines the end to end process for return orders.",
7    "name": "RETURN_ORDER::DEFAULT",
8    "rulesets": [
9        {
10            "name": "CREATE",
11            "description": "Create ReturnOrder",
12            "type": "RETURN_ORDER",
13            "subtype": "DEFAULT",
14            "eventType": "NORMAL",
15            "rules": [
16                {
17                    "name": "{{fluent.account.client_id}}.sefeature.AssignRmaToReturnOrder",
18                    "props": null
19                },
20                {
21                    "name": "{{fluent.account.client_id}}.sefeature.ValidateReturnOrderItems",
22                    "props": {
23                        "rejectReturnOrder": "RejectReturnOrder",
24                        "confirmReturnOrder": "ConfirmReturnOrder"
25                    }
26                }
27            ],
28            "triggers": [
29                {
30                    "status": "CREATED"
31                }
32            ],
33            "userActions": []
34        },
35        {
36            "name": "ConfirmReturnOrder",
37            "description": "Confirms ReturnOrder",
38            "type": "RETURN_ORDER",
39            "subtype": "DEFAULT",
40            "eventType": "NORMAL",
41            "rules": [
42                {
43                    "name": "FLUENTRETAIL.base.SendEventForReturnToOrder",
44                    "props": {
45                        "eventName": "ReturnOrderCreated"
46                    }
47                },
48                {
49                    "name": "{{fluent.account.client_id}}.sefeature.ScheduleEventIfRMAExpirationIsSet",
50                    "props": {
51                        "eventName": "CancelExpiredReturnOrder"
52                    }
53                },
54                {
55                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfExchangeOrderExistedOrNot",
56                    "props": {
57                        "eventName": "ProcessStandardReturnOrder",
58                        "delay": 1,
59                        "exchangeOrderExisted": "FALSE"
60                    }
61                },
62                {
63                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfExchangeOrderExistedOrNot",
64                    "props": {
65                        "eventName": "ProcessReturnOrderWithExchange",
66                        "delay": 1,
67                        "exchangeOrderExisted": "TRUE"
68                    }
69                }
70            ],
71            "triggers": [
72                {
73                    "status": "CREATED"
74                }
75            ],
76            "userActions": []
77        },
78        {
79            "name": "ProcessStandardReturnOrder",
80            "description": "Process Return Order if it does not have Exchange Order",
81            "type": "RETURN_ORDER",
82            "subtype": "DEFAULT",
83            "eventType": "NORMAL",
84            "rules": [
85                {
86                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
87                    "props": {
88                        "status": "IN_TRANSITION"
89                    }
90                },
91                {
92                    "name": "FLUENTRETAIL.base.SendEventToReturns",
93                    "props": {
94                        "eventName": "FulfilReturn"
95                    }
96                },
97                {
98                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfExchangeOrderExistedOrNot",
99                    "props": {
100                        "eventName": "NotifyExchangeOrder",
101                        "delay": 1,
102                        "exchangeOrderExisted": "TRUE"
103                    }
104                }
105            ],
106            "triggers": [
107                {
108                    "status": "CREATED"
109                }
110            ],
111            "userActions": []
112        },
113        {
114            "name": "ProcessReturnOrderWithExchange",
115            "description": "Process Return Order if it has Exchenge Order",
116            "type": "RETURN_ORDER",
117            "subtype": "DEFAULT",
118            "eventType": "NORMAL",
119            "rules": [
120                {
121                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfReturnOrderIsRMA",
122                    "props": {
123                        "delay": 1,
124                        "eventName": "ProcessRMAReturnOrderWithExchange"
125                    }
126                },
127                {
128                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfReturnOrderIsNotRMA",
129                    "props": {
130                        "delay": 1,
131                        "eventName": "ProcessDefaultReturnOrderWithExchange"
132                    }
133                }
134            ],
135            "triggers": [
136                {
137                    "status": "CREATED"
138                }
139            ],
140            "userActions": []
141        },
142        {
143            "name": "ProcessRMAReturnOrderWithExchange",
144            "description": "Process Return Order if it has Exchenge Order",
145            "type": "RETURN_ORDER",
146            "subtype": "DEFAULT",
147            "eventType": "NORMAL",
148            "rules": [
149                {
150                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
151                    "props": {
152                        "status": "BOOKED"
153                    }
154                },
155                {
156                    "name": "FLUENTRETAIL.base.SendEventToReturns",
157                    "props": {
158                        "eventName": "FulfilReturn"
159                    }
160                }
161            ],
162            "triggers": [
163                {
164                    "status": "CREATED"
165                }
166            ],
167            "userActions": []
168        },
169        {
170            "name": "ProcessDefaultReturnOrderWithExchange",
171            "description": "Process Return Order if it has Exchange Order",
172            "type": "RETURN_ORDER",
173            "subtype": "DEFAULT",
174            "eventType": "NORMAL",
175            "rules": [
176                {
177                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
178                    "props": {
179                        "status": "IN_TRANSITION"
180                    }
181                },
182                {
183                    "name": "FLUENTRETAIL.base.SendEventToReturns",
184                    "props": {
185                        "eventName": "FulfilReturn"
186                    }
187                },
188                {
189                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfExchangeOrderExistedOrNot",
190                    "props": {
191                        "eventName": "NotifyExchangeOrder",
192                        "delay": 1,
193                        "exchangeOrderExisted": "TRUE"
194                    }
195                }
196            ],
197            "triggers": [
198                {
199                    "status": "CREATED"
200                }
201            ],
202            "userActions": []
203        },
204        {
205            "name": "RejectReturnOrder",
206            "description": "Rejects ReturnOrder",
207            "type": "RETURN_ORDER",
208            "subtype": "DEFAULT",
209            "eventType": "NORMAL",
210            "rules": [
211                {
212                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
213                    "props": {
214                        "status": "REJECTED"
215                    }
216                }
217            ],
218            "triggers": [
219                {
220                    "status": "CREATED"
221                }
222            ],
223            "userActions": []
224        },
225        {
226            "name": "CREATE",
227            "description": "CREATE RETURN_FULFILMENT",
228            "type": "RETURN_FULFILMENT",
229            "subtype": "DEFAULT",
230            "eventType": "NORMAL",
231            "rules": [
232                {
233                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfReturnFulfilmentAttributeEqualsTo",
234                    "props": {
235                        "eventName": "CheckIfThereIsExchangeOrder",
236                        "attributeName": "RETURN_TYPE",
237                        "attributeValue": "RMA"
238                    }
239                },
240                {
241                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfReturnFulfilmentAttributeEqualsTo",
242                    "props": {
243                        "eventName": "CompleteReturnFulfilment",
244                        "attributeName": "RETURN_TYPE",
245                        "attributeValue": "DEFAULT"
246                    }
247                }
248            ],
249            "triggers": [
250                {
251                    "status": "CREATED"
252                }
253            ],
254            "userActions": []
255        },
256        {
257            "name": "CheckIfThereIsExchangeOrder",
258            "description": "Cheks if there is an Exchange Order for the current Return Order",
259            "type": "RETURN_FULFILMENT",
260            "subtype": "DEFAULT",
261            "eventType": "NORMAL",
262            "rules": [
263                {
264                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfExchangeOrderExistedOrNot",
265                    "props": {
266                        "eventName": "AwaitReceipt",
267                        "delay": 1,
268                        "exchangeOrderExisted": "FALSE"
269                    }
270                },
271                {
272                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfExchangeOrderExistedOrNot",
273                    "props": {
274                        "eventName": "AwaitShipment",
275                        "delay": 1,
276                        "exchangeOrderExisted": "TRUE"
277                    }
278                }
279            ],
280            "triggers": [
281                {
282                    "status": "CREATED"
283                }
284            ],
285            "userActions": []
286        },
287        {
288            "name": "AwaitReceipt",
289            "description": "Set Return Fulfilment to awaiting receipt",
290            "type": "RETURN_FULFILMENT",
291            "subtype": "DEFAULT",
292            "eventType": "NORMAL",
293            "rules": [
294                {
295                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
296                    "props": {
297                        "status": "AWAITING_RECEIPT"
298                    }
299                }
300            ],
301            "triggers": [
302                {
303                    "status": "CREATED"
304                }
305            ],
306            "userActions": []
307        },
308        {
309            "name": "AwaitShipment",
310            "description": "Set Return Fulfilment to awaiting shipment",
311            "type": "RETURN_FULFILMENT",
312            "subtype": "DEFAULT",
313            "eventType": "NORMAL",
314            "rules": [
315                {
316                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
317                    "props": {
318                        "status": "AWAITING_CUSTOMER_SHIPMENT"
319                    }
320                }
321            ],
322            "triggers": [
323                {
324                    "status": "CREATED"
325                }
326            ],
327            "userActions": []
328        },
329        {
330            "name": "CompleteReturnFulfilment",
331            "description": "Completes RETURN_FULFILMENT",
332            "type": "RETURN_FULFILMENT",
333            "subtype": "DEFAULT",
334            "eventType": "NORMAL",
335            "rules": [
336                {
337                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
338                    "props": {
339                        "status": "COMPLETE"
340                    }
341                },
342                {
343                    "name": "{{fluent.account.client_id}}.sefeature.SendEventToReturnOrderFromFulfilment",
344                    "props": {
345                        "delay": 1,
346                        "eventName": "NotifyReturnOrder"
347                    }
348                }
349            ],
350            "triggers": [
351                {
352                    "status": "CREATED"
353                },
354                {
355                    "status": "AWAITING_VERIFICATION"
356                }
357            ],
358            "userActions": []
359        },
360        {
361            "name": "FulfilReturn",
362            "description": "ReturnOrder",
363            "type": "RETURN_ORDER",
364            "eventType": "NORMAL",
365            "rules": [
366                {
367                    "name": "{{fluent.account.client_id}}.sefeature.CreateReturnFulfilments",
368                    "props": null
369                },
370                {
371                    "name": "FLUENTRETAIL.base.SendEventToUpdateOrderItemAttribute",
372                    "props": {
373                        "eventName": "UpdateReturnableQty"
374                    }
375                }
376            ],
377            "triggers": [
378                {
379                    "status": "BOOKED"
380                },
381                {
382                    "status": "CREATED"
383                },
384                {
385                    "status": "IN_TRANSITION"
386                }
387            ],
388            "userActions": []
389        },
390        {
391            "name": "FinalizeReturnOrderProcessing",
392            "description": "Checks if there is an Exchange Order for the current Return Order",
393            "type": "RETURN_ORDER",
394            "subtype": "DEFAULT",
395            "eventType": "NORMAL",
396            "rules": [
397                {
398                    "name": "{{fluent.account.client_id}}.sefeature.SendEventToUpdateInventoryQuantityReturnOrder",
399                    "props": {
400                        "eventName": "UpdateReturnOrderInventoryQty",
401                        "returnConditions": [
402                            "GOOD"
403                        ],
404                        "fulfilmentStatuses": [
405                            "COMPLETE"
406                        ],
407                        "inventoryCatalogueRef": "DEFAULT:{{fluent.retailer.current.id}}"
408                    }
409                },
410                {
411                    "name": "{{fluent.account.client_id}}.sefeature.UpdateTotalAmountForReturnOrder",
412                    "props": {
413                        "status": [
414                            "COMPLETE"
415                        ]
416                    }
417                },
418                {
419                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfExchangeOrderExistedOrNot",
420                    "props": {
421                        "eventName": "ProcessRefund",
422                        "delay": 1,
423                        "exchangeOrderExisted": "FALSE"
424                    }
425                },
426                {
427                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfExchangeOrderExistedOrNot",
428                    "props": {
429                        "eventName": "CompleteReturnOrderWithoutExchange",
430                        "delay": 1,
431                        "exchangeOrderExisted": "TRUE"
432                    }
433                }
434            ],
435            "triggers": [
436                {
437                    "status": "BOOKED"
438                },
439                {
440                    "status": "RECEIVED"
441                },
442                {
443                    "status": "IN_TRANSITION"
444                }
445            ],
446            "userActions": []
447        },
448        {
449            "name": "ProcessRefund",
450            "description": "ReturnOrder",
451            "type": "RETURN_ORDER",
452            "eventType": "NORMAL",
453            "rules": [
454                {
455                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
456                    "props": {
457                        "status": "PENDING_REFUND"
458                    }
459                },
460                {
461                    "name": "FLUENTRETAIL.base.SendScheduledEventGQL",
462                    "props": {
463                        "delay": 5,
464                        "eventName": "AssessFulfilmentCharges"
465                    }
466                }
467            ],
468            "triggers": [
469                {
470                    "status": "BOOKED"
471                },
472                {
473                    "status": "RECEIVED"
474                },
475                {
476                    "status": "IN_TRANSITION"
477                }
478            ],
479            "userActions": []
480        },
481        {
482            "name": "AssessFulfilmentCharges",
483            "description": "Assess Fulfilment Charges",
484            "type": "RETURN_ORDER",
485            "eventType": "NORMAL",
486            "rules": [
487                {
488                    "name": "{{fluent.account.client_id}}.sefeature.ApplyFulfilmentCostToReturnOrder",
489                    "props": {}
490                },
491                {
492                    "name": "FLUENTRETAIL.base.SendScheduledEventGQL",
493                    "props": {
494                        "delay": 1,
495                        "eventName": "CheckBillingAccount"
496                    }
497                }
498            ],
499            "triggers": [
500                {
501                    "status": "PENDING_REFUND"
502                }
503            ],
504            "userActions": []
505        },
506        {
507            "name": "CheckBillingAccount",
508            "description": "BillingAccount",
509            "type": "RETURN_ORDER",
510            "eventType": "NORMAL",
511            "rules": [
512                {
513                    "name": "{{fluent.account.client_id}}.order.VerifyBillingAccount",
514                    "props": {
515                        "BillingAccountExistsEventName": "ProcessBillingAccount",
516                        "NoBillingAccountExistsEventName": "NewBillingAccount"
517                    }
518                }
519            ],
520            "triggers": [
521                {
522                    "status": "PENDING_REFUND"
523                }
524            ],
525            "userActions": []
526        },
527        {
528            "name": "NewBillingAccount",
529            "description": "ReturnOrder",
530            "type": "RETURN_ORDER",
531            "eventType": "NORMAL",
532            "rules": [
533                {
534                    "name": "{{fluent.account.client_id}}.order.CreateBillingAccount",
535                    "props": {
536                        "eventName": "ProcessBillingAccount",
537                        "billingAccountType": "CUSTOMER"
538                    }
539                }
540            ],
541            "triggers": [],
542            "userActions": []
543        },
544        {
545            "name": "ProcessBillingAccount",
546            "description": "ReturnOrder",
547            "type": "RETURN_ORDER",
548            "eventType": "NORMAL",
549            "rules": [
550                {
551                    "name": "{{fluent.account.client_id}}.sefeature.CreateInvoiceForReturnOrder",
552                    "props": {
553                        "status": [
554                            "COMPLETE"
555                        ]
556                    }
557                },
558                {
559                    "name": "{{fluent.account.client_id}}.order.SendEventForReturnToBillingAccount",
560                    "props": {
561                        "eventName": "ProcessCreditForReturn"
562                    }
563                }
564            ],
565            "triggers": [
566                {
567                    "status": "PENDING_REFUND"
568                }
569            ],
570            "userActions": []
571        },
572        {
573            "name": "CompleteReturnOrderWithoutExchange",
574            "description": "Checks if there is an Remain Refund Amount attribute for the current Return Order",
575            "type": "RETURN_ORDER",
576            "subtype": "DEFAULT",
577            "eventType": "NORMAL",
578            "rules": [
579                {
580                    "name": "{{fluent.account.client_id}}.core.IfPropertyIsPresent",
581                    "props": {
582                        "eventName": "ProcessRefund",
583                        "jsonpath": "attributes.byName.REMAIN_REFUND_AMOUNT"
584                    }
585                },
586                {
587                    "name": "{{fluent.account.client_id}}.core.IfPropertyIsNotPresent",
588                    "props": {
589                        "eventName": "CompleteReturnOrderWithoutRefund",
590                        "jsonpath": "attributes.byName.REMAIN_REFUND_AMOUNT"
591                    }
592                }
593            ],
594            "triggers": [
595                {
596                    "status": "BOOKED"
597                },
598                {
599                    "status": "RECEIVED"
600                },
601                {
602                    "status": "IN_TRANSITION"
603                }
604            ],
605            "userActions": []
606        },
607        {
608            "name": "CompleteReturnOrderWithoutRefund",
609            "description": "ReturnOrder",
610            "type": "RETURN_ORDER",
611            "subtype": "DEFAULT",
612            "eventType": "NORMAL",
613            "rules": [
614                {
615                    "name": "FLUENTRETAIL.base.SendEventForReturnToOrder",
616                    "props": {
617                        "eventName": "OrderReturnComplete"
618                    }
619                },
620                {
621                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
622                    "props": {
623                        "status": "COMPLETE"
624                    }
625                }
626            ],
627            "triggers": [
628                {
629                    "status": "IN_TRANSITION"
630                },
631                {
632                    "status": "RECEIVED"
633                },
634                {
635                    "status": "BOOKED"
636                }
637            ],
638            "userActions": []
639        },
640        {
641            "name": "RefundComplete",
642            "description": "ReturnOrder",
643            "type": "RETURN_ORDER",
644            "subtype": "DEFAULT",
645            "eventType": "NORMAL",
646            "rules": [
647                {
648                    "name": "FLUENTRETAIL.base.SendEventForReturnToOrder",
649                    "props": {
650                        "eventName": "OrderReturnComplete"
651                    }
652                },
653                {
654                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
655                    "props": {
656                        "status": "COMPLETE"
657                    }
658                }
659            ],
660            "triggers": [
661                {
662                    "status": "PENDING_REFUND"
663                }
664            ],
665            "userActions": []
666        },
667        {
668            "name": "RefundRejected",
669            "description": "ReturnOrder",
670            "type": "RETURN_ORDER",
671            "subtype": "DEFAULT",
672            "eventType": "NORMAL",
673            "rules": [
674                {
675                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
676                    "props": {
677                        "status": "ESCALATED"
678                    }
679                }
680            ],
681            "triggers": [
682                {
683                    "status": "PENDING_REFUND"
684                }
685            ],
686            "userActions": []
687        },
688        {
689            "name": "CancelReturnOrderManually",
690            "description": "Cancels Return Order",
691            "type": "RETURN_ORDER",
692            "subtype": "DEFAULT",
693            "eventType": "NORMAL",
694            "rules": [
695                {
696                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
697                    "props": {
698                        "status": "CANCELLED"
699                    }
700                },
701                {
702                    "name": "{{fluent.account.client_id}}.sefeature.SendEventToAllReturnFulfilments",
703                    "props": {
704                        "eventName": "CancelReturnOrderFulfilment"
705                    }
706                }
707            ],
708            "triggers": [
709                {
710                    "status": "BOOKED"
711                },
712                {
713                    "status": "RECEIVED"
714                }
715            ],
716            "userActions": [
717                {
718                    "context": [
719                        {
720                            "label": "Cancel Return Order",
721                            "type": "PRIMARY",
722                            "modules": [
723                                "adminconsole",
724                                "servicepoint"
725                            ],
726                            "confirm": true
727                        }
728                    ],
729                    "attributes": []
730                }
731            ]
732        },
733        {
734            "name": "CancelReturnOrderFulfilment",
735            "description": "Cancels Return Order Fulfilment",
736            "type": "RETURN_FULFILMENT",
737            "subtype": "DEFAULT",
738            "eventType": "NORMAL",
739            "rules": [
740                {
741                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
742                    "props": {
743                        "status": "CANCELLED"
744                    }
745                }
746            ],
747            "triggers": [
748                {
749                    "status": "AWAITING_RECEIPT"
750                },
751                {
752                    "status": "AWAITING_VERIFICATION"
753                }
754            ],
755            "userActions": []
756        },
757        {
758            "name": "ProcessReturnFulfilmentShipment",
759            "description": "Processes Shipment of Return Fulfilment",
760            "type": "RETURN_FULFILMENT",
761            "subtype": "DEFAULT",
762            "eventType": "NORMAL",
763            "rules": [
764                {
765                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
766                    "props": {
767                        "status": "AWAITING_RECEIPT"
768                    }
769                },
770                {
771                    "name": "{{fluent.account.client_id}}.sefeature.SendEventToReturnOrderFromFulfilment",
772                    "props": {
773                        "delay": 1,
774                        "eventName": "NotifyReturnOrder"
775                    }
776                }
777            ],
778            "triggers": [
779                {
780                    "status": "AWAITING_CUSTOMER_SHIPMENT"
781                }
782            ],
783            "userActions": [
784                {
785                    "context": [
786                        {
787                            "label": "Mark as Shipped",
788                            "type": "PRIMARY",
789                            "modules": [
790                                "adminconsole",
791                                "servicepoint"
792                            ],
793                            "confirm": true
794                        }
795                    ],
796                    "attributes": []
797                }
798            ]
799        },
800        {
801            "name": "ProcessReturnFulfilmentReceipt",
802            "description": "Processes Receipt of Return Fulfilment",
803            "type": "RETURN_FULFILMENT",
804            "subtype": "DEFAULT",
805            "eventType": "NORMAL",
806            "rules": [
807                {
808                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
809                    "props": {
810                        "status": "AWAITING_VERIFICATION"
811                    }
812                },
813                {
814                    "name": "{{fluent.account.client_id}}.sefeature.SendEventToReturnOrderFromFulfilment",
815                    "props": {
816                        "delay": 1,
817                        "eventName": "NotifyReturnOrder"
818                    }
819                }
820            ],
821            "triggers": [
822                {
823                    "status": "AWAITING_RECEIPT"
824                }
825            ],
826            "userActions": [
827                {
828                    "context": [
829                        {
830                            "label": "Mark as Received",
831                            "type": "PRIMARY",
832                            "modules": [
833                                "adminconsole",
834                                "servicepoint"
835                            ],
836                            "confirm": true
837                        }
838                    ],
839                    "attributes": []
840                }
841            ]
842        },
843        {
844            "name": "ProcessReturnFulfilmentVerification",
845            "description": "Processes Verification of Return Fulfilment",
846            "type": "RETURN_FULFILMENT",
847            "subtype": "DEFAULT",
848            "eventType": "NORMAL",
849            "rules": [
850                {
851                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
852                    "props": {
853                        "status": "COMPLETE"
854                    }
855                },
856                {
857                    "name": "{{fluent.account.client_id}}.sefeature.SendEventToReturnOrderFromFulfilment",
858                    "props": {
859                        "delay": 1,
860                        "eventName": "NotifyReturnOrder"
861                    }
862                }
863            ],
864            "triggers": [
865                {
866                    "status": "AWAITING_VERIFICATION"
867                }
868            ],
869            "userActions": [
870                {
871                    "context": [
872                        {
873                            "label": "Mark as Verified",
874                            "type": "PRIMARY",
875                            "modules": [
876                                "adminconsole",
877                                "servicepoint"
878                            ],
879                            "confirm": true
880                        }
881                    ],
882                    "attributes": []
883                }
884            ]
885        },
886        {
887            "name": "ProcessReturnFulfilmentCancellation",
888            "description": "Processes Cancellation of Return Fulfilment",
889            "type": "RETURN_FULFILMENT",
890            "subtype": "DEFAULT",
891            "eventType": "NORMAL",
892            "rules": [
893                {
894                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
895                    "props": {
896                        "status": "CANCELLED"
897                    }
898                },
899                {
900                    "name": "{{fluent.account.client_id}}.sefeature.SendEventToReturnOrderFromFulfilment",
901                    "props": {
902                        "delay": 1,
903                        "eventName": "NotifyReturnOrder"
904                    }
905                }
906            ],
907            "triggers": [
908                {
909                    "status": "AWAITING_VERIFICATION"
910                }
911            ],
912            "userActions": [
913                {
914                    "context": [
915                        {
916                            "label": "Mark as Cancelled",
917                            "type": "SECONDARY",
918                            "modules": [
919                                "adminconsole",
920                                "servicepoint"
921                            ],
922                            "confirm": true
923                        }
924                    ],
925                    "attributes": []
926                }
927            ]
928        },
929        {
930            "name": "NotifyReturnOrder",
931            "description": "Notifies Return Order",
932            "type": "RETURN_ORDER",
933            "subtype": "DEFAULT",
934            "eventType": "NORMAL",
935            "rules": [
936                {
937                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfAnyReturnFulfilmentInStatuses",
938                    "props": {
939                        "status": [
940                            "AWAITING_RECEIPT"
941                        ],
942                        "eventName": "CheckIfReturnOrderIsShipped"
943                    }
944                },
945                {
946                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfAnyReturnFulfilmentInStatuses",
947                    "props": {
948                        "status": [
949                            "AWAITING_VERIFICATION"
950                        ],
951                        "eventName": "CheckIfReturnOrderIsReceived"
952                    }
953                },
954                {
955                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfAnyReturnFulfilmentInStatuses",
956                    "props": {
957                        "status": [
958                            "COMPLETE"
959                        ],
960                        "eventName": "CheckIfReturnOrderIsVerified"
961                    }
962                },
963                {
964                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfAllReturnFulfilmentsInStatuses",
965                    "props": {
966                        "status": [
967                            "CANCELLED"
968                        ],
969                        "eventName": "CancelReturnOrder"
970                    }
971                }
972            ],
973            "triggers": [
974                {
975                    "status": "BOOKED"
976                },
977                {
978                    "status": "RECEIVED"
979                },
980                {
981                    "status": "IN_TRANSITION"
982                }
983            ],
984            "userActions": []
985        },
986        {
987            "name": "CheckIfReturnOrderIsShipped",
988            "description": "Checks that Return Order is shipped",
989            "type": "RETURN_ORDER",
990            "subtype": "DEFAULT",
991            "eventType": "NORMAL",
992            "rules": [
993                {
994                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfAllReturnFulfilmentsInStatuses",
995                    "props": {
996                        "status": [
997                            "AWAITING_RECEIPT",
998                            "COMPLETE",
999                            "CANCELLED"
1000                        ],
1001                        "eventName": "ProcessReturnOrderShipment"
1002                    }
1003                }
1004            ],
1005            "triggers": [
1006                {
1007                    "status": "BOOKED"
1008                },
1009                {
1010                    "status": "IN_TRANSITION"
1011                }
1012            ],
1013            "userActions": []
1014        },
1015        {
1016            "name": "CheckIfReturnOrderIsReceived",
1017            "description": "Checks that Return Order is received",
1018            "type": "RETURN_ORDER",
1019            "subtype": "DEFAULT",
1020            "eventType": "NORMAL",
1021            "rules": [
1022                {
1023                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfAllReturnFulfilmentsInStatuses",
1024                    "props": {
1025                        "status": [
1026                            "AWAITING_VERIFICATION",
1027                            "COMPLETE",
1028                            "CANCELLED"
1029                        ],
1030                        "eventName": "ProcessReturnOrderReceiving"
1031                    }
1032                }
1033            ],
1034            "triggers": [
1035                {
1036                    "status": "BOOKED"
1037                },
1038                {
1039                    "status": "RECEIVED"
1040                },
1041                {
1042                    "status": "IN_TRANSITION"
1043                }
1044            ],
1045            "userActions": []
1046        },
1047        {
1048            "name": "CheckIfReturnOrderIsVerified",
1049            "description": "Checks that Return Order is verified",
1050            "type": "RETURN_ORDER",
1051            "subtype": "DEFAULT",
1052            "eventType": "NORMAL",
1053            "rules": [
1054                {
1055                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfAllReturnFulfilmentsInStatuses",
1056                    "props": {
1057                        "status": [
1058                            "COMPLETE",
1059                            "CANCELLED"
1060                        ],
1061                        "eventName": "FinalizeReturnOrderProcessing"
1062                    }
1063                }
1064            ],
1065            "triggers": [
1066                {
1067                    "status": "BOOKED"
1068                },
1069                {
1070                    "status": "RECEIVED"
1071                },
1072                {
1073                    "status": "IN_TRANSITION"
1074                }
1075            ],
1076            "userActions": []
1077        },
1078        {
1079            "name": "ProcessReturnOrderShipment",
1080            "description": "Processes Shipment of Return Order",
1081            "type": "RETURN_ORDER",
1082            "subtype": "DEFAULT",
1083            "eventType": "NORMAL",
1084            "rules": [
1085                {
1086                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
1087                    "props": {
1088                        "status": "IN_TRANSITION"
1089                    }
1090                },
1091                {
1092                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfExchangeOrderExistedOrNot",
1093                    "props": {
1094                        "eventName": "NotifyExchangeOrder",
1095                        "delay": 1,
1096                        "exchangeOrderExisted": "TRUE"
1097                    }
1098                }
1099            ],
1100            "triggers": [
1101                {
1102                    "status": "BOOKED"
1103                }
1104            ],
1105            "userActions": []
1106        },
1107        {
1108            "name": "ProcessReturnOrderReceiving",
1109            "description": "Processes Receiving of Return Order",
1110            "type": "RETURN_ORDER",
1111            "subtype": "DEFAULT",
1112            "eventType": "NORMAL",
1113            "rules": [
1114                {
1115                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
1116                    "props": {
1117                        "status": "RECEIVED"
1118                    }
1119                },
1120                {
1121                    "name": "{{fluent.account.client_id}}.sefeature.SendEventIfExchangeOrderExistedOrNot",
1122                    "props": {
1123                        "eventName": "NotifyExchangeOrder",
1124                        "delay": 1,
1125                        "exchangeOrderExisted": "TRUE"
1126                    }
1127                }
1128            ],
1129            "triggers": [
1130                {
1131                    "status": "IN_TRANSITION"
1132                }
1133            ],
1134            "userActions": []
1135        },
1136        {
1137            "name": "CancelReturnOrder",
1138            "description": "Cancels Return Order if all Fulfilments has been cancelled",
1139            "type": "RETURN_ORDER",
1140            "subtype": "DEFAULT",
1141            "eventType": "NORMAL",
1142            "rules": [
1143                {
1144                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
1145                    "props": {
1146                        "status": "CANCELLED"
1147                    }
1148                }
1149            ],
1150            "triggers": [
1151                {
1152                    "status": "BOOKED"
1153                },
1154                {
1155                    "status": "RECEIVED"
1156                },
1157                {
1158                    "status": "IN_TRANSITION"
1159                }
1160            ],
1161            "userActions": []
1162        },
1163        {
1164            "name": "CancelExpiredReturnOrder",
1165            "description": "Cancels Return Order if it is expired",
1166            "type": "RETURN_ORDER",
1167            "subtype": "DEFAULT",
1168            "eventType": "NORMAL",
1169            "rules": [
1170                {
1171                    "name": "{{fluent.account.client_id}}.commonv2.ChangeStateGQL",
1172                    "props": {
1173                        "status": "CANCELLED"
1174                    }
1175                },
1176                {
1177                    "name": "{{fluent.account.client_id}}.sefeature.SendEventToAllReturnFulfilments",
1178                    "props": {
1179                        "eventName": "CancelReturnOrderFulfilment"
1180                    }
1181                }
1182            ],
1183            "triggers": [
1184                {
1185                    "status": "BOOKED"
1186                },
1187                {
1188                    "status": "IN_TRANSITION"
1189                }
1190            ],
1191            "userActions": []
1192        },
1193        {
1194            "name": "NotifyExchangeOrder",
1195            "description": "Notifies Exchange Order",
1196            "type": "RETURN_ORDER",
1197            "subtype": "DEFAULT",
1198            "eventType": "NORMAL",
1199            "rules": [
1200                {
1201                    "name": "{{fluent.account.client_id}}.sefeature.SendEventToExchangeOrderIfReturnOrderInStatus",
1202                    "props": {
1203                        "eventName": "ResumeExchangeOrder",
1204                        "setting": "EXCHANGE_ORDER_NOTIFICATION_STATUS"
1205                    }
1206                }
1207            ],
1208            "triggers": [
1209                {
1210                    "status": "BOOKED"
1211                },
1212                {
1213                    "status": "IN_TRANSITION"
1214                },
1215                {
1216                    "status": "RECEIVED"
1217                }
1218            ],
1219            "userActions": []
1220        }
1221    ],
1222    "statuses": [
1223        {
1224            "name": "CREATED",
1225            "entityType": "RETURN_ORDER",
1226            "category": "BOOKING"
1227        },
1228        {
1229            "name": "COMPLETE",
1230            "entityType": "RETURN_FULFILMENT",
1231            "category": "DONE"
1232        },
1233        {
1234            "name": "BOOKED",
1235            "entityType": "RETURN_ORDER",
1236            "category": "BOOKING"
1237        },
1238        {
1239            "name": "IN_TRANSITION",
1240            "entityType": "RETURN_ORDER",
1241            "category": "BOOKING"
1242        },
1243        {
1244            "name": "RECEIVED",
1245            "entityType": "RETURN_ORDER",
1246            "category": "FULFILMENT"
1247        },
1248        {
1249            "name": "CANCELLED",
1250            "entityType": "RETURN_ORDER",
1251            "category": "DONE"
1252        },
1253        {
1254            "name": "ESCALATED",
1255            "entityType": "RETURN_ORDER",
1256            "category": "DELIVERY"
1257        },
1258        {
1259            "name": "COMPLETE",
1260            "entityType": "RETURN_ORDER",
1261            "category": "DONE"
1262        },
1263        {
1264            "name": "REJECTED",
1265            "entityType": "RETURN_ORDER",
1266            "category": "DONE"
1267        },
1268        {
1269            "name": "CREATED",
1270            "entityType": "RETURN_FULFILMENT",
1271            "category": "BOOKING"
1272        },
1273        {
1274            "name": "PENDING_REFUND",
1275            "entityType": "RETURN_ORDER",
1276            "category": "DELIVERY"
1277        },
1278        {
1279            "name": "IN_TRANSITION",
1280            "entityType": "ORDER",
1281            "category": "BOOKING"
1282        },
1283        {
1284            "name": "CREATED",
1285            "entityType": "ORDER",
1286            "category": ""
1287        },
1288        {
1289            "name": "BOOKED",
1290            "entityType": "ORDER",
1291            "category": ""
1292        },
1293        {
1294            "name": "",
1295            "entityType": "BILLING_ACCOUNT",
1296            "category": "BOOKING"
1297        },
1298        {
1299            "name": "",
1300            "entityType": "RETURN_ORDER",
1301            "category": "BOOKING"
1302        },
1303        {
1304            "name": "",
1305            "entityType": "ORDER",
1306            "category": "BOOKING"
1307        },
1308        {
1309            "name": "AWAITING_CUSTOMER_SHIPMENT",
1310            "entityType": "RETURN_FULFILMENT",
1311            "category": "BOOKING"
1312        },
1313        {
1314            "name": "AWAITING_RECEIPT",
1315            "entityType": "RETURN_FULFILMENT",
1316            "category": "FULFILMENT"
1317        },
1318        {
1319            "name": "AWAITING_VERIFICATION",
1320            "entityType": "RETURN_FULFILMENT",
1321            "category": "DELIVERY"
1322        },
1323        {
1324            "name": "CANCELLED",
1325            "entityType": "RETURN_FULFILMENT",
1326            "category": "DONE"
1327        },
1328        {
1329            "name": "",
1330            "entityType": "",
1331            "category": "DONE"
1332        }
1333    ],
1334    "settings": {}
1335}

Language: json

Name: Return Order workflow (with RMA and Exchange)

Description:

[Warning: empty required content area]

Step arrow right iconNew Settings

There are several settings that existed in original implementation of Return Order feature.

  • RETURN_CONDITION setting contains list of possible conditions of retuned items. This setting is defined on RETAILER level. The value of the setting has to be in JSON format.
1[
2    {
3        "label": "Reusable",
4        "value": "GOOD"
5    },
6    {
7        "label": "Destroy",
8        "value": "BROKEN"
9    }
10]

Language: json

Name: RETURN_CONDITION setting (default value)

Description:

[Warning: empty required content area]
  • RETURN_REASON setting contains list of possible reasons of item return. This setting is defined on RETAILER level. The value of the setting has to be in JSON format.
1[
2    {
3        "label": "Wrong Size",
4        "value": "WRONGSIZE"
5    },
6    {
7        "label": "Broken",
8        "value": "BROKEN"
9    }
10]

Language: json

Name: RETURN_REASON setting (default value)

Description:

[Warning: empty required content area]
  • DEFAULT_RETURN_DESTINATION_LOCATION setting contains a default destination location for the returns. This setting is defined on RETAILER level. The value of the setting has to be a reference of location (text value). Default value: Primary Warehouse (for instance, DC_2_DEMO_GB).
  • RETURN_REJECTION_REASON setting contains a list of possible reasons of Return Order rejection. This setting is defined on RETAILER level. The value of the setting has to be in JSON format.
1[
2    {
3        "label": "Not returnable",
4        "value": "NOT_RETURNABLE"
5    },
6    {
7        "label": "Return expired",
8        "value": "RETURN_EXPIRED"
9    },
10    {
11        "label": "Wrong quantity",
12        "value": "WRONG_QUANTITY"
13    }
14]

Language: json

Name: RETURN_REJECTION_REASON setting value

Description:

[Warning: empty required content area]
  • EXCHANGE_ORDER_NOTIFICATION_STATUS setting contains name of Return Order status that is used for notifying corresponding Exchange Order. This setting is defined on RETAILER level. The value should be a STRING, the default value is IN_TRANSITION.

Step arrow right iconResult

As a result, we will have an enhanced UI for the Return with Exchange process.

No alt provided

And Workflow that support this process.

Valery Kornilovich

Valery Kornilovich

Contributors:
Sergey Chebotarev