Skip to end of metadata
Go to start of metadata

You are viewing an old version of this content. View the current version.

Compare with Current View Version History

Version 1 Next »

Context

In a few markets, Oracle and RBI have differing approaches to pricing combos, leading to challenges in displaying a coherent pricing structure. Specifically:

  • RBI uses a fixed price for combos, with additional charges applied based on user selections of drinks and sides.

  • Oracle, in certain markets, does not have a set price for combos; instead, combo prices are calculated based on the main item price plus the prices of the selected sides.

This document outlines the requirements for adapting the current system to resolve these discrepancies and ensure accurate pricing display at both the Section level and the Product Page.

Combos at RBI are configured as follows:

  • Main Item: Refers to the primary burger in the combo.

  • Combo Slots: Refers to options the user may choose from, such as sides and drinks.

Both main item and combo slots are references to items at the Menu.

The following structure will be used as examples for each of the requirements.

image-20250217-185710.png

Requirements

Menu Price Sync

This refers to syncing the prices from the POS to RBI via Partners-API.

The main requirements lie on the idea that:

→ Some processing needs to be done at the price for the combo

→ Some processing needs to be done at the combo slots price

To do it, Khumbu needs to know two things:

→ What is the default comboslot

→ What items compose a comboslot

How Khumbu should retrieve this information, the options being:

  1. From Sanity via the Get Brand Menu endpoint

  2. Directly from Oracle (if such a capability exists, Jean mentioned it might not.)

Note that the FZ and Sanity operators will ensure that the default combo slot is the cheapest one, this will be a requirement for this solution. Explained in more detail at https://rbictg.atlassian.net/wiki/spaces/TRX/pages/5532286978/Combo+Price+Requirements+to+Khumbu#Configuration-Requirements-for-the-Operators-%26-Franchisees.

Combo and Combo Slots Pricing

Total Combo Price Calculation:

RBI expects Khumbu to provide pricing for the combo by summing Oracle’s combo price, main item price and the prices of the default combo slots.

The default combo slots should be determined using the agreed strategy based on the two options shared above.

Example 1, showcased in the picture above:

  • Whopper Meal Medium Final Price: Whopper Meal Medium Price (0) + Whopper Price (600) + Default Drink (Coke) Price (400) + Default Side (Fries) Price (500) = 1500.

Example 2:

  • Whopper Meal Medium Final Price: Whopper Meal Medium Price (1200) + Whopper Price (0) + Default Drink (Coke) Price (0) + Default Side (Fries) Price (0) = 1200.

Example 3:

  • Whopper Meal Medium Final Price: Whopper Meal Medium Price (1000) + Whopper Price (0) + Default Drink (Coke) Price (500) + Default Side (Fries) Price (500) = 1100.

Default Combo Slot Pricing:

RBI expects Khumbu to provide a pricing of 0 for the default combo slot options. They will be considered as baseline of pricing for combo slots.

Example:

  • For the sides combo slot, the price of Fries should be 0.

  • For the drinks combo slot, the price of Coke should be 0.

Combo Slot Pricing Adjustments

For comboslots, we expect to receive the price that we should add to the total combo price.

If the comboslot is included in the base combo, then price is 0 (e.g. Fanta).

If the comboslot is premium, then price will be higher than 0 (e.g. Red Bull).

What are the combo slot options should be defined using the agreed strategy from the 2 options above.

Example:

  • For the ‘sides’ comboslot, RBI expects Khumbu to subtract the price of Fries from the other options.

  • Twisted Fries price for RBI: Twisted Fries price (700) - Fries Price (500) = 200

  • Onion Rings price for RBI: Onion Rings price (800) - Fries Price(500) = 300

  • For the ‘drinks’ comboslot, RBI expects Khumbu to subtract the price of Coke from the other options

  • Root Beer price for RBI: Root Beer Price(500) - Coke price(400) = 100

  • Sprite price for RBI: Sprite Price(400) - Coke price(400) = 0

PLU Concatenation for Pricing Combo Slots

RBI expects to receive its price using PLU concatenation in the following manner: ${comboPlu}-${comboSize}-${mainItemPlu}-${comboSlotPlu}.

Example:

  • For Whopper Meal Medium, the price for Twisted Fries should be sent with the PLU 1000-medium-4000-2001.

Configuration Requirements for the Operators & Franchisees

  • The default combo configuration in Sanity (what the guest sees before doing any adjustments on sides and drinks) should always be the cheapest option.

  • That means, the premium comboslot options cannot be configured as the default combo selection.

  • Similarly, premium modifiers can also not be the default, meaning the guest cannot reach to a smaller price than the default selection by removing modifiers.

    • That is, the default sides will always be what’s included in the combo at no extra price (e.g. Regular Fries and Coca-Cola), and premium sides such as Loaded Fries or RedBull must be manually selected by guests.


  • The requirements bellow this point are only required IF Khumbu needs to consume Sanity information to understand comboslots and it’s not desirable to use the cheapest comboslot option as the default comboslot.
    This describes the work that will be needed in case we proceed with strategy one https://rbictg.atlassian.net/wiki/spaces/TRX/pages/5532286978#Decision for determining comboslot defaults/comboslots.

Fetching Sanity Configuration via Partners-API and keeping it up to date

The combo slot, their defaults and their relationships to combos are defined in Sanity and exposed via https://euc1-dev-bk-partners-api.rbictg.com/docs/market/#tag/MenuAPI/operation/getBrandMenu . This information can change and may require the prices to be recalculated.

To make sure that everything is kept in sync, Khumbu will need to listen to changes on Sanity content.

This configuration is exposed through on the Get Brand Menu endpoint. The payloads bellow showcase how the combos and their respective comboslots will be found on this endpoint’s response.

 Combo Example Payload
"759287b4-5112-40f9-9153-af94b715c421": {
    "_id": "759287b4-5112-40f9-9153-af94b715c421",
    "_type": "combo",
    "mainItem": {
        "_id": "afe1b7b5-1872-432b-af29-ba8e65b379be",
        "_type": "item"
    },
    "name": {
        "_type": "localeString",
        "en": "WHOPPER® Meal Medium"
    },
    "options": [
        {
            "_id": "e06d0648-e569-48b0-8008-dcc466ca3311",
            "_type": "comboSlot"
        },
        {
            "_id": "cdc90c6c-0009-4212-a350-1e8b3543172d",
            "_type": "comboSlot"
        }
    ],
    "vendorConfigs": {
        "_type": "vendorConfigs",
        "partnerDelivery": {
            "pluType": "sizeBasedPlu",
            "_type": "vendorConfig",
            "sizeBasedPlu": {
                "comboSize": "medium",
                "_type": "sizeBasedPlu",
                "comboPlu": "1000"
            }
        },
        "partner": {
            "_type": "vendorConfig",
            "sizeBasedPlu": {
                "comboSize": "medium",
                "_type": "sizeBasedPlu",
                "comboPlu": "1000"
            },
            "pluType": "sizeBasedPlu"
        }
    }
},
 Comboslot Sides Example Payload
"e06d0648-e569-48b0-8008-dcc466ca3311": {
    "_id": "e06d0648-e569-48b0-8008-dcc466ca3311",
    "_type": "comboSlot",
    "maxAmount": 1,
    "minAmount": 1,
    "name": {
        "_type": "localeString",
        "en": "Choose a Side",
        "ar": "اختر طبق جانبي "
    },
    "options": [
        {
            "_key": "e59d14820007",
            "_type": "comboSlotOption",
            "defaultAmount": 1,// the defaultAmount denotes which is the default side
            "isPremium": true,
            "maxAmount": 1,
            "minAmount": 0,
            "option": {
                "_type": "item",
                "_id": "865a632f-e2f7-4e2b-8fcc-9281aa3f5868"
            }
        },
        {
            "_key": "6c797d12dcfb",
            "_type": "comboSlotOption",
            "defaultAmount": 0,
            "isPremium": true,
            "maxAmount": 1,
            "minAmount": 0,
            "option": {
                "_type": "item",
                "_id": "34ff38cd-8f87-4fb3-9633-5429bf747dc0"
            }
        },
        {
            "_key": "52e6a3a111bb",
            "_type": "comboSlotOption",
            "defaultAmount": 0,
            "isPremium": true,
            "maxAmount": 1,
            "minAmount": 0,
            "option": {
                "_id": "4a3cc293-9e99-4905-98ac-7347499f434b",
                "_type": "item"
            }
        },
    ],
    "respectMaximum": true,
    "uiPattern": "show",
}
 Comboslot Sides Example Payload
"e06d0648-e569-48b0-8008-dcc466ca3311": {
    "_id": "e06d0648-e569-48b0-8008-dcc466ca3311",
    "_type": "comboSlot",
    "maxAmount": 1,
    "minAmount": 1,
    "name": {
        "_type": "localeString",
        "en": "Choose a Side",
        "ar": "اختر طبق جانبي "
    },
    "options": [
        {
            "_key": "e59d14820007",
            "_type": "comboSlotOption",
            "defaultAmount": 1,// the defaultAmount denotes which is the default side
            "isPremium": true,
            "maxAmount": 1,
            "minAmount": 0,
            "option": {
                "_type": "item",
                "_id": "865a632f-e2f7-4e2b-8fcc-9281aa3f5868"
            }
        },
        {
            "_key": "6c797d12dcfb",
            "_type": "comboSlotOption",
            "defaultAmount": 0,
            "isPremium": true,
            "maxAmount": 1,
            "minAmount": 0,
            "option": {
                "_type": "item",
                "_id": "34ff38cd-8f87-4fb3-9633-5429bf747dc0"
            }
        },
        {
            "_key": "52e6a3a111bb",
            "_type": "comboSlotOption",
            "defaultAmount": 0,
            "isPremium": true,
            "maxAmount": 1,
            "minAmount": 0,
            "option": {
                "_id": "4a3cc293-9e99-4905-98ac-7347499f434b",
                "_type": "item"
            }
        },
    ],
    "respectMaximum": true,
    "uiPattern": "show",
}
 Onion Rings Payload Example
"4a3cc293-9e99-4905-98ac-7347499f434b": {
    "_id": "4a3cc293-9e99-4905-98ac-7347499f434b",
    "_type": "item",
    "name": {
        "_type": "localeString",
        "en": "ONION RINGS - 12 PCS"
    },
    "vendorConfigs": {
        "partner": {
            "constantPlu": "80005",
            "_type": "vendorConfig",
            "pluType": "constantPlu"
        },
        "_type": "vendorConfigs",
        "partnerDelivery": {
            "pluType": "constantPlu",
            "constantPlu": "80005",
            "_type": "vendorConfig"
        }
    }
},

Fetching Default Combo Slots

Khumbu must fetch the Sanity Menu through the aforementioned API and, for every combo slot within every combo, perform the above requested price transformations.

Listen to content changes

Khumbu must listen to changes in content via the Menu Content Updated Webhook. This will notify Khumbu of any changes that happened to the Brand Menu exposed via the Get Brand Menu endpoint.

Updating prices on changes

  • Khumbu must update the prices if the default combo slot option change

Example:

If the ‘Sides' combo slot is updated and we change the default combo slot from ‘Fries’ to ‘Onion Rings’, then the prices of the options must be re-calculated compared to the 'Onion Rings’ and sent to RBI.

  • Khumbu must update the prices if the item referenced by a combo slot change.

Example:

The ‘Side' comboslot contain references to Items like ‘Onion Rings’. It’s unlikely, but possible that the PLU of ‘Onion Rings’ change. This could have implications on the price of that item and, possibly, need updates.

  • Khumbu must add the prices for newly added options to combo slots.

Example:

If a new item is added to the ‘Side’ combo slot, for example, ‘Bacon Cheese Fries’. Khumbu must calculate the price of those in relation to the ‘Fries’ default combo slot and provide it to RBI.

  • No labels