RemoteOrder Model

Represents an order received from a remote provider (eg Uber Eats, Glovo, etc)

Overview

The majority of properties for RemoteOrder are optional and can be omitted entirely (see the example at the bottom of the page for a relatively minimal RemoteOrder)

Service Mode

For more information about sourcing values for serviceModeId and serviceModeEntityId please see the MenuSync documentation on ServiceModes

Tax

For jurisdictions with inclusive taxes (taxes that are already included in the price of an item like UK/EU VAT or Australian GST) there is no requirement to populate tax fields as the POS will be able to calculate the tax internally. Providers would only need to send the tax amounts if they were planning on either withholding tax/displaying tax receipts.

For jurisdictions with exclusive tax (sometimes called addon taxes - i.e. taxes that are in addition to the list price) the tax fields are mandatory.

Adjustments

Adjustments (discounts/surcharges) can be added to a RemoteOrder in two different ways, either applying to the entire order or to individual products within that order. The primary difference between the two methods will be how the onsite sales reporting will account for the adjustment effects.

Order level adjustments are set at RemoteOrder.orderAdjustments. Adjustments here will apply their adjustment amounts across all products in the order prorata. When sending order adjustments leave all RemoteOrderProduct price/amount unchanged. Only adjust the RemoteOrder.totalAmount (and RemoteOrderPayment.amountPaid)

Product level adjustments are set at RemoteOrderProduct.productAdjustment and will affect the RemoteOrderProduct.totalAmount but leave RemoteOrderProduct.price alone. The changed RemoteOrderProduct.totalAmount should also be reflected in the balance at the parent RemoteOrder.totalAmount

If taxes are being sent with the adjustments - leave the tax amounts unadjusted. The POS will calculate the adjustment effects (if any) on tax.

Constant
System.TimeSpan DefaultExpiryLength = 03:00:00

If DateTimeExpiresAtUTC is null / empty. This length will be added to the current time to make a default value

Required
remoteOrderID : string (GUID)

The primary key for this remote order generated by ROS.

A third party provider should omit this property entirely OR leave this as Guid.Empty. ROS will overwrite it and return the new value at order submission

Required
outletID : string (GUID)

ID of the outlet this will be transmitted to

Required
providerID : number (int)

Unique ID for identifying the third party provider transmitting the remote order (from the Registered Integration Provider's list).

This must be set by third party providers (to the provider ID supplied during onboarding) when submitting RemoteOrders to PowerEPOS

Required MaxLength(64)
providerName : string

Name for identifying the third party provider transmitting the remote order (from the Registered Integration Provider's list)

This will be assigned automatically by ROS upon receipt of an order and is for PowerEPOS internal use only. Third party providers should set this to an empty string (it will be overwritten).

Required MaxLength(64)
providerOrderID : string

Unique ID for this order as supplied by third party provider

Required
dateTimeReceivedUTC : string (ISO 8601 DateTime)

UTC date/time the order was received by ROS.

Third party providers should ignore this property when submitting orders, it's set internally by ROS.

Required
remoteOrderType : RemoteOrderType

The type of the remote order

Required decimal(18, 2)
totalAmount : number (decimal)

Total amount of the order inclusive of delivery fees, inclusive taxes and adjustments. Any exclusive taxes will need to be added to this value to calculate the amount owing

Any values in RemoteOrderPayment.AmountOutletTip / RemoteOrderPayment.AmountOutletServiceCharge will NOT be reflected in this total.

Required MaxLength(8)
currencyCode : string

ISO 4217 currency code for all amounts in this order

Required
providerSupportsCancel : bool

Can this order be potentially cancelled by consumer/provider? Certain APIs may not support cancellations.

Required
providerSupportsRejection : bool

Can this order be rejected by a POS? Certain APIs may not support POS side rejections

Required
providerExpectsProcessedNotification : bool

If true - ROS will be awaiting a confirmation to be sent from POSCore when this order is confirmed/rejected. This info will be forwarded to the Provider.

This will have no bearing on how the Outlet processes this RemoteOrder, it's a directive for POSCore / ROS.

Required
providerExpectsOrderPreparedNotification : bool

If true - the POS will be informed that this order is expecting an "order prepared" notification and the operator of that POS will be prompted to send one,

There is no guarantee that the POS operator will trigger this notification so Providers should not build their workflow to expect it 100% of the time.

Nullable MaxLength(64)
providerDisplayName : string

In the case where Provider is aggregating orders from multiple external channels/sources/marketplaces, this property can be used to assign a
name that will used in place of ProviderName on all customer/staff facing UI/physical media.

It should be used to identify the actual downstream order provider fulfilling the order.

If null/empty the ROS assigned ProviderName will be utilised.

Nullable MaxLength(16)
providerPickupCode : string

Semi unique human readable ID supplied by third party provider identifying this order for the person performing pickup (eg - a 4 digit number). These are expected to repeat over a long period of time

Can be null

Nullable MaxLength(128) Truncates
consumerKitchenComment : string

Optional kitchen comment provided by consumer

Nullable
dateTimeCreatedUTC : string (ISO 8601 DateTime)

UTC date/time the order was created by the provider

Nullable
dateTimePrepareForUTC : string (ISO 8601 DateTime)

UTC date/time the order is to be prepared for. This is a guide for the outlet to not prepare an order immediately but to instead attempt to make it for the specified time.

null indicates prepare the order as soon as possible

Nullable
dateTimeExpiresAtUTC : string (ISO 8601 DateTime)

UTC date/time when this order is determined to be beyond worth making. Useful safety in case a site goes offline for an extended period of time.

Expired orders will be automatically rejected as per normal workflow.

If null - it will be set using DefaultExpiryLength

testOrder : bool

If set - the POS will treat this as a normal order (so a third party should expect the normal order processing) however it will be marked
as a "training" transaction internally and no aspect of this order will be used for stock levels, sales reporting etc. The order will not be prepared
by the kitchen and any included payments/taxes will not be expected to be actually collected.

This flag should ONLY be used for testing purposes only.

Nullable MaxLength(8)
serviceModeEntityID : string

The service mode entity id for this order if applicable (eg a table number, takeaway number). Null/blank means no specific location/entity within the service mode.

Setting this should be combined with setting ServiceModeID.

Only really applicable for RemoteOrderType.EatIn

Nullable
serviceModeID : string (GUID)

This will be the ID of the ServiceMode (from Menu.ServiceMode.ServiceModeID) for RemoteOrderType.EatIn flows where outlet staff will physically deliver the order to the consumer while they are seated in the outlet.

This should be used in conjunction with ServiceModeEntityID

Nullable
collectionPointID : string (GUID)

For RemoteOrderType.EatIn flows where a consumer has selected a preference for a collection point to pickup their order, this is where the EatInCollectionPoint.CollectionPointServiceModeID
should be recorded. Set this to null to indicate that the consumer has not selected any preference

Please be aware that this is only a preference for a collection point. The outlet will have final say about where the order is actually served from.

Nullable decimal(18, 2)
deliveryAmount : number (decimal)

Surcharge being paid by consumer for delivery (if applicable)

Nullable
totalTaxCollected : RemoteOrderTaxCollectedAmount []

The optional tax totals across all products ordered. Not required if the provider is NOT taking payments.
Missing entries for a RemoteOrderTaxID will indicate that no tax was collected for that particular RemoteOrderTax.

The TaxID's must match the RemoteOrderTax labels sent with the RemoteOrder Menu.

consumerRequestsCutlery : bool

If true - the end consumer has requested (likely disposable) cutlery to be included with their order. The POS will display a message to include cutlery.

If false the POS will not display any prompt about including cutlery.

Nullable
products : RemoteOrderProduct []

Products associated with this order

Nullable
payments : RemoteOrderPayment []

Payments associated with this order

Nullable
orderAdjustments : RemoteOrderAdjustment []

Adjustments associated with this order (i.e. applying to everything on the order)

Nullable MaxLength(64)
consumerProviderContactID : string

ID of consumer

consumer contact details - can be null - as defined by third party provider

Nullable MaxLength(128) Truncates
consumerEmail : string

Email of consumer

consumer contact details - can be null - as defined by third party provider

Nullable MaxLength(32) Truncates
consumerPreferredName : string

Preferred name of consumer

consumer contact details - can be null - as defined by third party provider

Nullable MaxLength(64) Truncates
consumerFullName : string

Full name of consumer

consumer contact details - can be null - as defined by third party provider

Nullable MaxLength(32) Truncates
consumerPhone : string

Phone number of consumer

consumer contact details - can be null - as defined by third party provider

Nullable MaxLength(32)
courierProviderContactID : string

ID of courier

courier contact details - can be null - as defined by third party provider

Nullable MaxLength(64) Truncates
courierEmail : string

Email of courier

courier contact details - can be null - as defined by third party provider

Nullable MaxLength(32) Truncates
courierPreferredName : string

Preferred name of courier

courier contact details - can be null - as defined by third party provider

Nullable MaxLength(64) Truncates
courierFullName : string

Full name of courier

courier contact details - can be null - as defined by third party provider

Nullable MaxLength(32) Truncates
courierPhone : string

Phone number of courier

courier contact details - can be null - as defined by third party provider

Nullable MaxLength(64)
providerDeliveryID : string

Unique ID of this delivery details as defined by third party provider

delivery details - can be null - as defined by third party provider

Nullable MaxLength(32) Truncates
deliveryCompanyName : string

The name of the company performing delivery

delivery details - can be null - as defined by third party provider

Nullable
dateTimeEstimatedDeliveryUTC : string (ISO 8601 DateTime)

UTC date/time for when this is estimated to be delivered

delivery details - can be null - as defined by third party provider

Nullable
deliveryLinearDistanceMetres : number (int)

Distance between pickup and delivery point in meters (in a straight line)

delivery details - can be null - as defined by third party provider

Nullable
deliveryRealDistanceMetres : number (int)

Distance between pickup and delivery point in meters (as travelled by road)

delivery details - can be null - as defined by third party provider

Nullable MaxLength(128) Truncates
pickupStreetAddress : string

Street address for pickup

delivery pickup details - can be null - as defined by third party provider

Nullable MaxLength(64) Truncates
pickupAddressDetails : string

Additional details for street address pickup

delivery pickup details - can be null - as defined by third party provider

Nullable MaxLength(32) Truncates
pickupCity : string

Name of city for pickup address

delivery pickup details - can be null - as defined by third party provider

Nullable MaxLength(32) Truncates
pickupProvince : string

Name of province/state for pickup address

delivery pickup details - can be null - as defined by third party provider

Nullable MaxLength(16) Truncates
pickupPostCode : string

Post Code for pickup address

delivery pickup details - can be null - as defined by third party provider

Nullable MaxLength(128) Truncates
pickupNotes : string

General free text notes about pickup location

delivery pickup details - can be null - as defined by third party provider

Nullable MaxLength(128) Truncates
pickupGooglePlaceID : string

Google place ID for pickup address

delivery pickup details - can be null - as defined by third party provider

Nullable MaxLength(32) Truncates
pickupPlaceName : string

Geopgraphical place name for pickup address

delivery pickup details - can be null - as defined by third party provider

Nullable
pickupLatitude : number (decimal)

WGS:84 Latitude

delivery pickup details - can be null - as defined by third party provider

Nullable
pickupLongitude : number (decimal)

WGS:84 Longitude

delivery pickup details - can be null - as defined by third party provider

Nullable MaxLength(128) Truncates
deliveryStreetAddress : string

Street address for delivery

delivery delivery details - can be null - as defined by third party provider

Nullable MaxLength(64) Truncates
deliveryAddressDetails : string

Additional details for street address delivery

delivery delivery details - can be null - as defined by third party provider

Nullable MaxLength(32) Truncates
deliveryCity : string

Name of city for delivery address

delivery delivery details - can be null - as defined by third party provider

Nullable MaxLength(32) Truncates
deliveryProvince : string

Name of province/state for delivery address

delivery delivery details - can be null - as defined by third party provider

Nullable MaxLength(16) Truncates
deliveryPostCode : string

Post Code for delivery address

delivery delivery details - can be null - as defined by third party provider

Nullable MaxLength(128) Truncates
deliveryNotes : string

General free text notes about delivery location

delivery delivery details - can be null - as defined by third party provider

Nullable MaxLength(128) Truncates
deliveryGooglePlaceID : string

Google place ID for delivery address

delivery delivery details - can be null - as defined by third party provider

Nullable MaxLength(32) Truncates
deliveryPlaceName : string

Geopgraphical place name for delivery address

delivery delivery details - can be null - as defined by third party provider

Nullable
deliveryLatitude : number (decimal)

WGS:84 Latitude

delivery delivery details - can be null - as defined by third party provider

Nullable
deliveryLongitude : number (decimal)

WGS:84 Longitude

delivery delivery details - can be null - as defined by third party provider

Example
{
  "OutletID": "36637eaa-6aed-4868-93f9-cc1ed3145db1",
  "ProviderID": 9999,
  "ProviderName":  "",
  "ProviderOrderID": "abc123",
  "CurrencyCode": "AUD",
  "RemoteOrderType": 1,
  "TotalAmount": 15,
  "Payments": [
    {
      "AmountPaid": 15,
      "AmountOutletTip": 2.5
    }
  ],
  "Products": [
    {
      "Name": "Hamburger",
      "ProductID": "plu123",
      "Quantity": 2,
      "Price": 5,
      "TotalAmount": 10,
      "Attributes": [
        {
            "Name": "Fries",
            "ProductAttributeID": "plu456",
            "ProductAttributeModifierID": "396123a7-df39-45b7-991c-1506c582cbbc",
            "Quantity": 2,
            "Price": 2.5,
            "TotalAmount": 5,
            "TaxCollected": [
                {
                  "RemoteOrderTaxID": 1,
                  "TotalTaxableSales": 5,
                  "TotalInclusiveAmount":  0.9876543
                }
            ]
        }
      ],
      "TaxCollected": [
        {
          "RemoteOrderTaxID": 1,
          "TotalTaxableSales": 10,
          "TotalInclusiveAmount":  1.4562411
        }
      ]
    }
  ],
  "TotalTaxCollected": [
    {
      "RemoteOrderTaxID": 1,
      "TotalTaxableSales": 15,
      "TotalInclusiveAmount": 2.4438954
    }
  ]
}