Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Table of Contents
stylenone
Info

...

STS Gen2

  • In the Get Menus call we will get all products deployed for a particular store for a particular revenue center.

  • Items can be tagged – e.g. all kiosk items can be tagged as ‘kiosk products’. Tagging can be used to filter out categories of food (e.g. meals, LTOs…). Filtering lets you perform bulk actions. E.g. we can only retrieve specific menu items from the POS.

  • Cloud Assist Service is in charge of ensuring standardization of PLUs.

Info

Different pricing between service modes will be managed by priceSequence within the same definition.

  • (TBD) pricingSequence = 1 --> pick-up SM

  • (TBD) pricingSequence = 2 --> delivery SM

GET Menus call returns all items for a given store, it doesn't take availability into account. To retrieve unavailable items per store, we need to make another call to the UNAVAILABLE endpoint, which returns the list of unavailable items. Hence, whenever we build the store menu (after a guest selects a restaurant in the platform), we need to call both endpoints to determine availability on a store-level:

  1. Call GET Menu - using v1/menus (Khumbu already does)

  2. Call GET Availability endpoint --- using (menus/items/unavailable) (Khumbu already does)

    1. Actively listen to webhook for changes to availability (notifications API) (Khumbu doesn't do this currently.)

Operators in the restaurant manage items availability on a store-level using the POS, Oracle POS only supports that on store-level for both service modes - not distinguishing availability per service mode.

Assumption: In general, menu item availability is not managed specifically differently per service mode (on a store-level).

For specific items whose availability is different for pickup and delivery within the same store, the following will be the suggestion to the operator:

In certain markets, there are menu items whose availability can be temporarily different for different service modes on a restaurant-level. Meaning, item_1 being available for pickup and delivery normally for a given store, but temporarily needs to be made unavailable only for the delivery service mode while still being available for pickup. An example of this is packaged ice creams not being sold via delivery temporarily during heat hours but still sold on pickup. For those items, the configuration requires two distinct PLUs per service mode, as well as 2 separate Sanity menu content documents. To illustrate:

  • The market has 500 menu items in total. Menu item availability for almost all menu is managed per store for both service modes (if a menu item is not available in the restaurant for online pickup ordering, then it also won't be available for delivery).

  • There are only 10 menu items that could have different availability per store and service mode at the same time, like the icecream example mentioned above.

  • The operator configures a single PLU for 490 items, the same PLU is shared for both service modes. Availability is managed for both service modes at the same time on a store-level - always.

  • For the 10 exceptional menu items, distinct PLUs are defined per service mode - in total 20 PLUs.

  • These different PLUs then can be marked available/unavailable via the Oracle POS to manage availability differently per service mode.

  • Similarly, 2 unique Sanity menu documents are created for these items, one for each service mode. Example: Ben & Jerry's Icecream Pickup and Ben & Jerry's Icecream Delivery. Applicable pickup and delivery PLUs are then added to each document. This is different than the remaining 490 items where there is a single Sanity menu item document and the same PLU is entered for both service modes under Vendor Configs.

This setup is required for the guest application to manage the availability correctly.

 

Items

  • Oracle’s recommendation is to have 1 item (PLU) regardless of service mode.

  • Distinguishing service modes

    • Revenue Center --> Order Channel --> Order Type 

    • Revenue Center and Order Channel are only used for reporting.

    • Order channel is the source of the order. RBI does not send this.

    • Order type (eatin, kiosk, takeaway, etc.) is the destination of the order. Reporting + behavior.

      • Used for changing price level, taxes, etc. per service mode.

    • Tagging

      • 2 tags, 1 for in-restaurant and 1 for delivery.

      • Tags indicates availability per service mode

    • definitionSequence

      • Recommendation is to only use 1 definition sequence.

    • And 2 priceSequence to handle different pricing:

      • 1 In-restaurant

      • 2 Delivery

To build store menu:

  1. “Get Menus” call gives you full menu for specific store. If a restaurant does never sell ice-creams, it would not be in the get menu.

  2. “Get collection of unavailable items” gives you list of unavailable items.

Info

Oracle doesn’t support managing availability separately from in-store and delivery.

Combining both we get the available items per store per service mode.

Discuss how to handle non-integrated delivery orders.

"cart": { "menuSelections": [ { "externalReferenceId": "801500", "id": "item_67165", "menuSelections": [

https://docs.oracle.com/en/industries/food-beverage/simphony/19.4/stsgg/F56815_08.pdf

Menu - Agreements

Expand
titleRBI Partner API
Code Block
languagejson

Items

Expand
titleRBI Partner API
Code Block
languagejson
"cart": {
        "menuSelections": [
            {
                "externalReferenceId": "801500",
                "id": "item_67165",
                "menuSelections": [],
                "price": {
                    "amount": 649,
                    "currency": "EUR"
                },
                "quantity": 1,
                "type": "Item"
            }
        ]
    }

...

Expand
titleRBI Partner API
Code Block
languagejson
    "cart": {
        "menuSelections": [
            {
                "externalReferenceId": "801500",
                "id": "item_67165",
                "menuSelections": [
                    {
                        "externalReferenceId": "940289", 
                        "id": "34933841d0e7",
                        "menuSelections": [],
                        "price": {
                            "amount": 0,
                            "currency": "EUR"
                        },
                        "quantity": 1,
                        "type": "ItemOptionModifier"
                    },
                    {
                        "externalReferenceId": "940294",
                        "id": "2fb34e217cf2",
                        "menuSelections": [],
                        "price": {
                            "amount": 0,
                            "currency": "EUR"
                        },
                        "quantity": 1,
                        "type": "ItemOptionModifier"
                    }
                ],
                "price": {
                    "amount": 649,
                    "currency": "EUR"
                },
                "quantity": 1,
                "type": "Item"
            }
        ]
     },},
Warning

The following payloads are from BK MX and are not up to date/standard. We won’t use definitionSequence 1, 2 for different service modes.

Expand
titleOracle TS Gen2 (Get menus call)

Condiment Group

Code Block
languagejson
"condimentGroups": [
        {
            "condimentGroupId": 125, // Condiment groups are referenced in single menu items
            "name": {
                "en-US": "Sm Burger Extras"
            },
            "condimentItemRefs": [ // These are modifier PLUs
                9005004,
                9011005,
                9011010,
                9011012,
                9021004,
                9055001,
                9055004,
                9055021,
                9055022,
                9011018,
                9011013,
                9055025
            ],
            "consumerDescription": {
                "en-US": null
            }
        },

Condiment Item. This applies also todefaultCondiments

Code Block
languagejson
    "condimentItems": [
{
            "name": { // Name of the condiment (modifier)
                "en-US": "Ham",
                "es-MX": "Jamon"
            },
            "condimentId": 9005004, // PLU of the condiment
            "familyGroupRef": 60002, // Reporting ID
            "definitions": [
                {
                    "number": 2, // It can sold for delivery, definition 2
                    "name": {
                        "en-US": "Ham",
                        "es-MX": "Jamon"
                    },
                    "name2": {}, // Secondary name
                    "prices": [
                        {
                            "priceSequence": 1,
                            "price": 0, 
                            "name": "Default" // Oracle uses prefixes for different quantities of the modifier. But this can also be individual PLUs
                        },
                        {
                            "priceSequence": 2,
                            "price": 0,
                            "name": "Add"
                        },
                        {
                            "priceSequence": 5,
                            "price": 0,
                            "name": "Sub"
                        },
                        {
                            "priceSequence": 8,
                            "price": 0,
                            "name": "Extra"
                        },
                        {
                            "priceSequence": 3,
                            "price": 0,
                            "name": "No"
                        },
                        {
                            "priceSequence": 4,
                            "price": 0, // price you charge for heavy ham
                            "name": "Hvy"
                        }
                    ]
                },
                {
                    "number": 1, // Same for definition 1, in-restaurant
                    "name": {
                        "en-US": "Ham",
                        "es-MX": "Jamon"
                    },
                    "name2": {},
                    "prices": [
                        {
                            "priceSequence": 2,
                            "price": 19,
                            "name": "Add"
                        },
                        {
                            "priceSequence": 3,
                            "price": 0,
                            "name": "No"
                        },
                        {
                            "priceSequence": 4,
                            "price": 0,
                            "name": "Hvy"
                        },
                        {
                            "priceSequence": 5,
                            "price": 0,
                            "name": "Sub"
                        },
                        {
                            "priceSequence": 6,
                            "price": 0,
                            "name": "Add"
                        },
                        {
                            "priceSequence": 7,
                            "price": 0,
                            "name": "No"
                        },
                        {
                            "priceSequence": 8,
                            "price": 0,
                            "name": "Extra"
                        },
                        {
                            "priceSequence": 1,
     
                      "price": 0,
                            "name": "Default"
                        }
                    ]
                }
            ]
        }
Expand
titleOracle TS Gen 2 (Commit call)
Code Block
languagejson
{      "headerprice": { 0,
               "orgShortName": "{{OrgShortName}}", // org name         "locRefname": "{{LocRef}}Default",
        "rvcRef": {{RvcRef}}, // revenue center         "idempotencyId": "{{$guid}}", // single}
ID         "orderTypeRef": 9, // needs to match with the POS type, e.g. 9]
is delivery         "checkEmployeeRef": {{check_employee_ref}},        }
"informationLines": ["{\"custName\":\"Rafael\", \"custId:ABC0987654321\"}"] // this displays in receipt     ]
        }
,
Expand
titleOracle TS Gen 2 (Commit call)
Code Block
languagejson
{
    "menuItemsheader": [{
        {  "orgShortName": "menuItemId":1001001{{OrgShortName}}", // Whopperorg PLUname
            "definitionSequencelocRef": 1"{{LocRef}}",
// In-store (def 1)             "quantity"rvcRef": 1{{RvcRef}}, // Numberrevenue ofcenter
Whoppers             "condimentsidempotencyId": ["{{$guid}}", // Nosingle pattyID
modifier.        "orderTypeRef": 9, // needs to match with the POS type, e.g. {9 is delivery
        "checkEmployeeRef": {{check_employee_ref}},
        "condimentIdinformationLines": 9072006, // PLU of the modifier/condiment. Whopper patty. ["{\"custName\":\"Rafael\", \"custId:ABC0987654321\"}"] // this displays in receipt
        
    }
,

    "priceSequencemenuItems": [
3,   // Prefix of the modifier. This{ is the "No" modifier. If you want an additional patty, this would be 2.menuItemId":1001001, // Whopper PLU
            "definitionSequence": 1, // In-store (def 1)
            "quantity": 1, // ThisNumber determinesof theWhoppers
quantity of the modifier. E.g. add 2 whopper patties would be quantity 2. 
    "condiments": [ // No patty modifier.
            }    {
        ]         }   "condimentId": 9072006, ],// PLU of the  "tenders": [modifier/condiment. Whopper patty. 
       {             "tenderIdpriceSequence": 901 // Pay at counter tender. Order is unpaid. tenderId differs based on payment method.3, // Prefix of the modifier. This is the "No" modifier. If you want an additional patty, this would be 2. 
              }     ]
}

Combos

Note

Oracle can only handle up to 10,000 combos.

Info

Combo pricing can be configured in 2 different ways:

  1. Price is at the combo level. Menu items inside the combo are priced at 0, unless they’re premium (e.g. Monster drink).

    1. Note that medium and large meal sizes are managed as premium side items. Combo price by default is the price of the small combo and doesn’t change, if a guest chooses a medium/large menu instead of small, the additional price is added as a premium item price via the sides.

  2. Price is at the combo items' level. Combo is priced at 0. The sum of the combo items' prices adds up to the combo PLU. This gives operators the flexibility to build a price allocation different from the ALC prices, which can optimize the VAT allocation.

In both cases the total combo price = combo price + main item price + side 1 price + side 2 price. Therefore, summing up prices of everything always gives to total.

Info

For different combo sizes, Oracle has 1 PLU per combo for all sizes. Different sizes are distinguished based on the size of the two sides.

Take the Whopper combo – Oracle has 1 PLU for combo small Whopper. To have a medium Whopper, we would have a medium drink and medium fries, which would be considered as premium sides and therefore have a higher price, which would add up to the total combo price following the calculation explained above.

However, Oracle can technically create different PLUs per combo size
 "quantity": 1 // This determines the quantity of the modifier. E.g. add 2 whopper patties would be quantity 2. 
                }
            ]
        }
    ],
    "tenders": [
        {
            "tenderId": 901 // Pay at counter tender. Order is unpaid. tenderId differs based on payment method. 
        }
    ]
}

Combos

Note

Oracle can only handle up to 10,000 combos.

Expand
titleRBI Partner API
Code Block
languagejson
"cart": {
        "menuSelections": [
            {
                "externalReferenceId": "940269",
                "id": "3ffc8d3e-7c67-4410-8fbd-cd1b366fbf20",
                "menuSelections": [
                    {
                        "externalReferenceId": "801500",
                        "id": "item_67165",
                        "menuSelections": [],
                        "price": {
                            "amount": 0,
                            "currency": "EUR"
                        },
                        "quantity": 1,
                        "type": "Item"
                    },
                    {
                        "externalReferenceId": "942214",
                        "id": "item_50929",
                        "menuSelections": [],
                        "price": {
                            "amount": 0,
                            "currency": "EUR"
                        },
                        "quantity": 1,
                        "type": "Item"
                    },
                    {
                        "externalReferenceId": "942215",
                        "id": "item_66018",
                        "menuSelections": [],
                        "price": {
                            "amount": 0,
                            "currency": "EUR"
                        },
                        "quantity": 1,
                        "type": "Item"
                    },
                    {
                        "externalReferenceId": "940325",
                        "id": "45adf5bb-2f3d-4c40-a735-cf59d5a661ef",
                        "menuSelections": [],
                        "price": {
                            "amount": 0,
                            "currency": "EUR"
                        },
                        "quantity": 1,
                        "type": "Item"
                    }
                ],
                "price": {
                    "amount": 849,
                    "currency": "EUR"
                },
                "quantity": 1,
                "type": "Combo"
            }
        ]
    },

...