Order statuses
- NEW
- COMPLETED
- VERIFIED
- DELIVER
- DELIVERED
- CLOSED
- ABANDONED
- CANCELED
- LOCKED
graph LR;
NEW -->|payments equals total| COMPLETED
COMPLETED -->| auto when conditions met ie fiscalization | VERIFIED
VERIFIED -->| all lines have final state | DELIVER
DELIVER -->| manual action or auto | DELIVERED
DELIVERED -->| auto | CLOSED
NEW -->| manual action or timeout | ABANDONED
COMPLETED -->| no activity timeout | ABANDONED2
VERIFIED -->| no activity timeout | ABANDONED2
DELIVER -->| no activity timeout | ABANDONED2
DELIVERED -->| no activity timeout | ABANDONED2
COMPLETED -->| manual action | CANCELLED
VERIFIED -->| manual action | CANCELLED
DELIVER -->| manual action | CANCELLED
DELIVERED -->| manual action | CANCELLED
IF {order is not closed}
AND {order is not completed}
AND {order has changeable lines, i.e. with status NEW)
AND {order has payments >= order total}
THEN
{mark all still changeable lines as CONFIRMED}
IF {order is not closed}
AND {order is not completed}
AND ( {orderType is not delivery} OR {delivery address is provided} )
AND {all lines are non-changeble, i.e. do not have NEW status}
AND {order has payments >= order total}
THEN
{mark order as COMPLETED}
IF {order is not closed}
AND {order is completed}
AND {order is not verified}
AND {tanantProperties.autoVerification:true == true}
AND ( {tenantProperties.checkFiscal:false == false} OR {order has total == 0} OR {order does not have payments that need immediate fiscalization} OR {order has fiscalization records} )
THEN
{mark order as verified}
IF {order is not closed}
AND {order is completed}
AND {order is verified}
AND {orderType is delivered}
AND ( {orderType is not queued} OR {every bucket has queue number assigned} )
AND {order status is not DELIVER or DELIVERED}
AND {order status is COMPLETED or VERIFIED}
AND {order does not have lines with non-final status, i.e. PROCESSED, WASTE, VOID, TECHNICAL}
AND ( {tenantProperties.autoDeliverReady:true == true} OR {tenantProperties.autoDeliverReady.[orderType]:true == true} )
THEN
{mark order as ready for delivery}
IF {order is not closed}
AND {order is completed}
AND ( {orderType is not delivered} OR {order is delivered - status DELIVERED, or deliveredTime is set} )
AND {order does not have lines with non-final status, i.e. PROCESSED, WASTE, VOID, TECHNICAL}
AND {order has payments >= order total}
AND ( {tenantProperties.checkFiscal:false == false} OR {order has total == 0} OR {order has fiscalization records} )
THEN
{mark order as closed}
IF {order is not closed}
AND {event is LinesExtraAlterCommand}
AND {tenantProperties.processStageDone:false == true}
THEN
{for each line}
IF {line status is PROCESSING}
AND {line.extra contains KDS_FILTER}
AND {line.extra contains “x-[filter]” == “done” for each KDS_FILTER.split(“,”) roles}
THEN {change line status to PROCESSED}
{end for each line}
KIOSK/POS order processing
This is process for all business cases with required fiscalization instantly after payment. It applies to KIOSK and POS orders (not for online orders with e-payment).
sequenceDiagram
participant KIOSK
participant Ordering_API
participant POS_Integrator
KIOSK->>Ordering_API: create an order
activate Ordering_API
Ordering_API-->>KIOSK: updated order
deactivate Ordering_API
KIOSK->>Ordering_API: Post payment
activate Ordering_API
Note right of Ordering_API: order status:
COMPLETED
Ordering_API-->>KIOSK: updated order
Ordering_API-->>POS_Integrator: updated order
deactivate Ordering_API
activate POS_Integrator
Note right of POS_Integrator: insert order into POS,
it should stay opened on POS
deactivate POS_Integrator
alt success: order added to POS
activate POS_Integrator
Note right of POS_Integrator: extra['x-pos-id']
is updated with
POS order id
POS_Integrator->>Ordering_API: update extra['x-pos-id]
deactivate POS_Integrator
Ordering_API-->>KIOSK: updated order
activate KIOSK
Note right of KIOSK: fiscalization
KIOSK->>Ordering_API: /fiscalize
deactivate KIOSK
activate Ordering_API
Note right of Ordering_API: order status:
VERIFIED
Ordering_API-->>KIOSK: updated order
activate KIOSK
Note right of KIOSK: display: success
deactivate KIOSK
Ordering_API-->>POS_Integrator: updated order
deactivate Ordering_API
activate POS_Integrator
Note right of POS_Integrator: add payment to
POS order and confirm it
deactivate POS_Integrator
else error: failed adding order to POS
activate POS_Integrator
POS_Integrator->>Ordering_API: /cancel (order)
deactivate POS_Integrator
activate Ordering_API
Note right of Ordering_API: order status:
CANCELED
Note right of Ordering_API: payment /refund
Ordering_API-->>KIOSK: updated order
deactivate Ordering_API
activate KIOSK
Note right of KIOSK: display: failure
deactivate KIOSK
end
Online orders processing
In this type of orders with e-payments fiscalization is usually done on the POS system.
sequenceDiagram
participant ORDER_APP
participant Ordering_API
participant POS_Integrator
participant Payment_API
ORDER_APP->>Ordering_API: create an order
activate Ordering_API
Ordering_API-->>ORDER_APP: updated order
deactivate Ordering_API
ORDER_APP->>+Payment_API: Request payment with gateway
Payment_API->>-Ordering_API: Post payment
activate Ordering_API
Note right of Ordering_API: order status:
COMPLETED
Ordering_API-->>POS_Integrator: updated order
deactivate Ordering_API
activate POS_Integrator
Note right of POS_Integrator: insert order into POS,
it should stay opened on POS
deactivate POS_Integrator
alt success: order added to POS
activate POS_Integrator
Note right of POS_Integrator: extra['x-pos-id']
is updated with
POS order id
POS_Integrator->>Ordering_API: update extra['x-pos-id]
deactivate POS_Integrator
activate Ordering_API
Note right of Ordering_API: order status:
VERIFIED
Ordering_API-->>ORDER_APP: updated order
activate ORDER_APP
Note right of ORDER_APP: display: success
deactivate ORDER_APP
Ordering_API-->>POS_Integrator: updated order
deactivate Ordering_API
activate POS_Integrator
Note right of POS_Integrator: add payment to
POS order and confirm it
deactivate POS_Integrator
else error: order not added to POS
activate POS_Integrator
POS_Integrator->>Ordering_API: /cancel (order)
deactivate POS_Integrator
activate Ordering_API
Note right of Ordering_API: order status:
CANCELED
Ordering_API->>Payment_API: payment /refund
activate Payment_API
deactivate Payment_API
Ordering_API-->>+ORDER_APP: updated order
deactivate Ordering_API
activate ORDER_APP
Note right of ORDER_APP: display: failure
deactivate ORDER_APP
end