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 Current »

Context

In the business context, both NCR and Olayan rely on data from their respective databases, where each combo is assigned a PromoID. However, the challenge is that these PromoIDs are not unique per combo.

Given that KHU sends unique PLUs along with prices to RBI in menu services, the question arises on how to manage these combos.

Possibilities

Size-based PLUs

Outcome

  1. We are able to set different p&a for the same PLU 8601 appending the size element ${plu}-${size}. Available sizes are:

    1. Small

    2. Medium

    3. Large

    4. Kids

    5. Value

  2. We are able to set different prices for premium comboslots, but they require a deeper concatenation with the following structure: ${comboPlu}-${comboSize}-${mainItemPlu}-${premiumComboslotPlu}

  3. Currently, sizeBasedPlus are omitted in the cart payload, but the marker item plus are still present. This can be added if required.

  4. We are able to set different marker items for different combo sizes.

Deeper explanation on each can be found bellow.

Scenario 1 - Basic Scenario with Size Based Plus and a main item

On this example we are setting up prices for Al Farian Store id 800876.

The items are:

For the Whopper Meal Large I’m setting up the premium comboslot:

These can be found on whitelabel under Flame Grilled Burgers → Whopper Test.

On Khumbu’s side Whopper Meals are supposed to share the 8601 promoId(PLU).

  1. Create individual Sanity combo documents, for example: Whopper Meal Medium & Whopper Meal Large and set their vendorConfigs as:

    image-20240513-223536.png

    image-20240513-223603.png
  2. Edit their price on partners-api using the sizeBased plu concatenation: PLU + size, for example

    {
      "channel": "whitelabel",
      "plus": [
        {
          "availability": true,
          "plu": "8601-large",
          "price": 2999
        },
        {
          "availability": true,
          "plu": "8601-medium",
          "price": 1999
        }
      ],
      "region": "SA",
      "serviceMode": "pickup",
      "storeIds": [
        "800876"
      ]
    }
  3. Edit the premium comboslot price on partners-api

    {
      "channel": "whitelabel",
      "plus": [
        {
          "availability": true,
          "plu": "8601-large-10059-80019",
          "price": 399
        }
      ],
      "region": "SA",
      "serviceMode": "pickup",
      "storeIds": [
        "800876"
      ]
    }

For premium comboslots used with composite Plus, we need the following structure:

${comboPlu}-${comboSize}-${mainItemPlu}-${premiumComboslotPlu}

This happens due to the way composite Plus are calculated in whitelabel. For sizeBasedPlus, the main item plu is appended to the combo plu.


This logic can’t be easily changed, as the UK market is structured to use it.

  1. Their prices will show up on whitelabel as

    image-20240513-223851.png

    image-20240513-223910.png

image-20240513-233310.png

  1. When adding to the Whopper Meal Large + 9 onion rings premium side to the cart and making a price request, Khumbu will receive the following payload:

    {
      "callbackUrl": "https://euc1-staging-bk-partners-api.rbictg.com/api/v1/orders/6c73e23f-0ec4-4c47-9363-1ff45d0be01d/price/callback",
      "cart": {
        "menuSelections": [
          {
            "externalReferenceId": "", // note that the combo PLU is not added, explanation bellow
            "id": "08c3ba63-4ce2-41e4-9dfa-35c67139b0f3",
            "menuSelections": [
              {
                "externalReferenceId": "10059", // whopper item sandwich
                "id": "item_1852",
                "menuSelections": [],
                "price": { "amount": 0, "currency": "SAR" },
                "quantity": 1,
                "type": "Item"
              },
              {
                "externalReferenceId": "80019", // onion rings premium comboslot
                "id": "item_57364",
                "menuSelections": [],
                "price": { "amount": 399, "currency": "SAR" }, // premium comboslot price
                "quantity": 1,
                "type": "Item"
              },
              {
                "externalReferenceId": "100501", // coca cola zero can side
                "id": "c77fa6e3-f2b8-497a-8bb4-1b216ce8302b",
                "menuSelections": [],
                "price": { "amount": 0, "currency": "SAR" },
                "quantity": 1,
                "type": "Item"
              },
              {
                "externalReferenceId": "144001", // marker item
                "id": "144001",
                "menuSelections": [],
                "price": { "amount": 0, "currency": "SAR" },
                "quantity": 1,
                "type": "Item"
              }
            ],
            "price": { "amount": 2999, "currency": "SAR" }, // combo price
            "quantity": 1,
            "type": "Combo"
          }
        ]
      },
      "channel": "WHITELABEL_IN_STORE",
      "fees": [],
      "id": "6c73e23f-0ec4-4c47-9363-1ff45d0be01d",
      "instructions": [],
      "orderDiscounts": [],
      "serviceMode": "TAKEOUT",
      "storeId": "800876"
    }
    

Please, note that in this example, the combo PLU 8601 was not sent. Currently only constantPlus are added as the external reference ids, not size based ones. The marker item will still be present as an way to identify combos and we’re able to have different marker items for different combos sizes.

Adding the combo PLU can be done, but we need to understand first how that would affect other markets such as BK UK.

Scenario 2 - Handling Family Bundles(combos with multiple sandwiches/main items)

On this example we are setting up prices for Al Farian Store id 800876.

The items are:

For the Family Bundle Test I’m setting up the premium comboslot:

These can be found on whitelabel under King Savers → Family Bundle TEST.

The goal is to evaluate the possibility of having size based plus with multiple sandwiches(main items) and still be able to set up premium comboslot pricing(e.g: charge extra for certain sides)

  1. Create a combo or offerCombo on Sanity with no Main Item

    image-20240515-151644.png
  2. Add any amount of comboslot options as required. In this case we’re adding two different burgers, large and small drinks & sides.

    image-20240515-151755.png
  3. Set up the appropriate size based PLUs for this combo

    image-20240515-151855.png
  4. The prices can be edited through partners-api with the following payload

    {
      "channel": "whitelabel",
      "plus": [
        {
          "availability": true,
          "plu": "1234-medium", // the combo plu + size
          "price": 3999
        },
        {
          "availability": true,
          "plu": "1234-medium-80019", // the combo plu + size + onion ring plu
          "price": 599
        }
      ],
      "region": "SA",
      "serviceMode": "pickup",
      "storeIds": [
        "800876"
      ]
    }
  5. This will reflect on whitelabel as

    image-20240515-152452.png
  6. When adding to cart and pricing, Khumbu will receive the following payload:

    {
      "callbackUrl": "https://euc1-staging-bk-partners-api.rbictg.com/api/v1/orders/41d0168f-41ab-4832-807a-e29a21a88c51/price/callback",
      "cart": {
        "menuSelections": [
          {
            "externalReferenceId": "",
            "id": "65e5ddaf-0893-4908-bfca-56de2c6ca510",
            "menuSelections": [
              {
                "externalReferenceId": "80019", // onion rings premium comboslot
                "id": "item_57364",
                "menuSelections": [],
                "price": { "amount": 599, "currency": "SAR" },
                "quantity": 1,
                "type": "Item"
              },
              {
                "externalReferenceId": "100501", // coca cola can large side
                "id": "c77fa6e3-f2b8-497a-8bb4-1b216ce8302b",
                "menuSelections": [],
                "price": { "amount": 0, "currency": "SAR" },
                "quantity": 1,
                "type": "Item"
              },
              {
                "externalReferenceId": "10059", // whoppper sandwich
                "id": "item_1852",
                "menuSelections": [],
                "price": { "amount": 0, "currency": "SAR" },
                "quantity": 1,
                "type": "Item"
              },
              {
                "externalReferenceId": "80001", // regular fries small side
                "id": "16f482db-2f13-4476-88d3-d2eec26057f3",
                "menuSelections": [],
                "price": { "amount": 0, "currency": "SAR" },
                "quantity": 1,
                "type": "Item"
              },
              {
                "externalReferenceId": "80007", // small coca cola can small side
                "id": "4f99db1e-128a-4e53-b23b-dffc0fedf636",
                "menuSelections": [],
                "price": { "amount": 0, "currency": "SAR" },
                "quantity": 1,
                "type": "Item"
              },
              {
                "externalReferenceId": "20006", // chicken royale second sandwich
                "id": "item_1853",
                "menuSelections": [],
                "price": { "amount": 0, "currency": "SAR" },
                "quantity": 1,
                "type": "Item"
              },
              {
                "externalReferenceId": "144001", // family bundle marker item
                "id": "144001",
                "menuSelections": [],
                "price": { "amount": 0, "currency": "SAR" },
                "quantity": 1,
                "type": "Item"
              }
            ],
            "price": { "amount": 3999, "currency": "SAR" },
            "quantity": 1,
            "type": "Combo"
          }
        ]
      },
      "channel": "WHITELABEL_IN_STORE",
      "fees": [],
      "id": "41d0168f-41ab-4832-807a-e29a21a88c51",
      "instructions": [],
      "orderDiscounts": [],
      "serviceMode": "TAKEOUT",
      "storeId": "800876"
    }
    

To setup prices for combos with multiple burgers/no main item, the following structure is expected:

  • For the combo: ${comboPlu}-${size}

  • For premium comboslots: ${comboPlu}-${size}-${comboslotOptionPlu}

In the above example the prices were setup only for the medium variation, but the same would work when setting large, super, small, etc.

Scenario 3 - Handling Combos with possibility to pick a main item with different PLUs

On this example we are setting up prices for Al Farian Store id 800876.

The items are:

For the Burger Pick Test I’m setting up the premium comboslot:

Additionally the the Burger Comboslot Test was created and added to the Burger Pick Test. It has the following options:

These can be found on whitelabel under Flame Grilled Burgers → Burger Pick Test.

The goal here is to understand the scenario mentioned in the meeting:

A combo that might contain whopper with cheese vs whopper without cheese(both of them having different PLUs, so being two different sandwiches from a P&A perspective).

  1. Setup the Combo and the Plus as done in the previous examples

    image-20240515-154441.png
  2. Create a comboslot and add the burgers as options. The first one is whopper, the second chicken royale.

    image-20240515-154536.png
  3. Set the combo prices on partners-api

    {
      "channel": "whitelabel",
      "plus": [
        {
          "availability": true,
          "plu": "5678-medium",
          "price": 3999
        },
        {
          "availability": true,
          "plu": "5678-medium-80019",
          "price": 199
        }
      ],
      "region": "SA",
      "serviceMode": "pickup",
      "storeIds": [
        "800876"
      ]
    }
  4. This will reflect on whitelabel as the following

image-20240515-160435.png
  1. The user will be able to pick and customize his burger after clicking on the comboslot

image-20240515-160502.png
  1. For this order we are picking the chicken royale option. Once added to the cart and making a price request, Khumbu will receive:

    {
      "callbackUrl": "https://euc1-staging-bk-partners-api.rbictg.com/api/v1/orders/c9c458ec-a6fd-4e54-b515-0e4f7f796882/price/callback",
      "cart": {
        "menuSelections": [
          {
            "externalReferenceId": "",
            "id": "3c7d4efa-07f9-4478-9036-2d39ad5d7bd5",
            "menuSelections": [
              {
                "externalReferenceId": "80007", // small coca cola can small side
                "id": "4f99db1e-128a-4e53-b23b-dffc0fedf636",
                "menuSelections": [],
                "price": { "amount": 0, "currency": "SAR" },
                "quantity": 1,
                "type": "Item"
              },
              {
                "externalReferenceId": "80019", // 9 onion rings premium comboslot
                "id": "item_57364",
                "menuSelections": [],
                "price": { "amount": 199, "currency": "SAR" },
                "quantity": 1,
                "type": "Item"
              },
              {
                "externalReferenceId": "20006", // chicken royale sandwich
                "id": "item_1853",
                "menuSelections": [],
                "price": { "amount": 0, "currency": "SAR" },
                "quantity": 1,
                "type": "Item"
              },
              {
                "externalReferenceId": "141139", // marker item plu
                "id": "141139",
                "menuSelections": [],
                "price": { "amount": 0, "currency": "SAR" },
                "quantity": 1,
                "type": "Item"
              }
            ],
            "price": { "amount": 1599, "currency": "SAR" },
            "quantity": 1,
            "type": "Combo"
          }
        ]
      },
      "channel": "WHITELABEL_IN_STORE",
      "fees": [],
      "id": "c9c458ec-a6fd-4e54-b515-0e4f7f796882",
      "instructions": [],
      "orderDiscounts": [],
      "serviceMode": "TAKEOUT",
      "storeId": "800876"
    }

The price setup here works the same as example two. The main thing to determine the type of concatenation required is the presence or not of a main item. The platform currently supports a single main item, however it’s not required to have a main item inside a combo.

  • No labels