Tech Refinement - New service fee as part of Loyalty Points calculation

Brief Description

This technical refinement is aimed at the need for a new option so that the value of the service fee can be added or removed in the value of crown coins when finalizing the customer's order, this option will be included within sanity where there will be a way to activate or disable this calculation.

Development

To do this, it will be necessary to make some adjustments to both the Sanity and the Loyalty Service so that we can know the value of the service fee, whereas today these systems are only aware of some fees and the value of the product.
You must pay attention to the fact that there are many factors that must be clear for this feature to work in the system, these points will be described in the next topics, but in short, you need to pay attention to whether the market you are using has the option of active service fee as well as in sanity the crown points calculation options are configured correctly, this may affect the final calculation because it is necessary to look to which tax and fees will be considered in the final calculation.

Feature Flags

The first validation we need to do is to know if this feature flag has been enabled, it is responsible for enabling the service fee calculation in the user's request. If this feature flag is disabled, no fee calculation will be calculated.

Title

Description

Link

Title

Description

Link

Enable Get Fees and Discount by Brand

Feature flag responsible for enabling fees calculations.

enable-get-fees-and-discount-by-brand

Tiered Delivery Fees

Feature flag responsible for controlling the values ​​that will be used for each fee.

tiered-delivery-fees

Code Changes

The final solution was based on the following pull requests:

INTL - Loyalty

https://github.com/rbilabs/intl-loyalty/pull/442/files
https://github.com/rbilabs/intl-loyalty/pull/455/files

INTL - Sanity
https://github.com/rbilabs/intl-sanity-shared-schemas/pull/16 Deprecated !
https://github.com/rbilabs/intl-whitelabel-cms

Loyalty

export enum PointsDependsOn { DeliveryFee = 'Delivery Fee', ServiceFee = 'ServiceFee', }
if (loyaltyPointsCalculationUsing?.includes(EnginePointsDependsOn.ServiceFee)) { paymentAmount += (delivery?.serviceFeeCents ?? 0) - (delivery?.serviceFeeDiscountCents ?? 0); }
export enum PointsDependsOn { DeliveryFee = 'Delivery Fee', ServiceFee = 'Service Fee' }

In addition, it will be necessary to make unit tests to validate the solution.

Rewards List

CMS - Sanity ( intl-whitelabel-cms )

The final result of sanity screen is to be equal below, can be found at this link

sanity.png
Sanity

Tests

Scenarios

Scenarios

Description

Sum

Scenarios

Description

Sum

The business want to calculate subtotal, tax and service fee

This sum will be based on the values ​​obtained in sanity, for this, the subtotal, tax and service fee options must be activated.

Crown Coins = Subtotal + Tax + Service Fee

The business want to calculate only subtotal and service fee

This sum will be based on the values ​​obtained in sanity, for this, only subtotal and service fee options must be activated.

Crown Coins = Subtotal + Service Fee

The business will include the full price

This sum will be based on the values ​​obtained in sanity, for this, all options must be activated

Crown Coins = Subtotal + Tax + Delivery Fee + Service Fee

The business will not include the full price

This sum will be based on the values ​​obtained in sanity, for this, only subtotal option must be activated.

Crown Coins = Subtotal

The business will not give crown coins

This sum is equal to 0 and will be based on the values ​​obtained in sanity, for this all options must be deactivated

Crown Coins = 0

The business will include the subtotal and service fee with discount

This sum will be based on the values ​​obtained in sanity, for this, only subtotal and service fee options must be activated.

Crown Coins = Subtotal + ( Service Fee - Service Fee Discount )

The business will include the subtotal and service fee with feature flag deactivated

This sum will be based on the values ​​obtained in sanity, for this, only subtotal and service fee options must be activated. The feature flag must be turned off.

Crown Coins = Subtotal

The POS Restaurant dont use service fee integration

This sum will be based on the values ​​obtained in sanity, for this, service fee should not be calculated in loyalty points

Crown Coins = Sanity Values ( ignore service fee )

DMP Process

To carry out the test, you must have access to the development environment DMP so that it is possible to change the order to the dropped off status, because loyalty calculations will only be calculated after the order is delivered and confirmed by the DMP. For PLK ES you can use this link: https://euw3-dev-plk-exp-tablet.com.rbi.tools/orders-management

Your order will start in the New Orders table and you must proceed to the last screen and after that, complete the order successfully

To confirm that your order has been completed, you need to be on the order confirmation page with the current order open and all steps must have been completed.

At the end of this process, your order is ready to generate crown coins.

Crown Coins

Once the order is completed and is in delivery status, you will need to go to the main whitelabel page, click on the "hamburger menu" and click on the first button called "Popeyes Rewards". On this page, the order statement and how many points you earned with each one will be displayed.

To check whether the value of crown coins received is valid, we use that every $1 spent is equivalent to 100 crown coins in ES Market ( This is also configurable in the same Sanity page, not always $1 = 100 points for all markets ).

It should be noted whether the fees were applied to the total value, otherwise, these fees will not be considered in the value of the crown coins. You can find out which fees are enabled in sanity.

Possible Issues

Delivery Fee and Final Order value

When I did some tests in development I noticed that some values ​​did not match correctly with the final order value. For example, in the case of the Delivery Fee, the value is set to zero, but in the database it had a value of 2.99. This can create some confusion when carrying out some tests related to the amount of value that the user can receive from crown coins.

 

This issue is already under development, so you just need to confirm that everything is aligned.

POS fees integration

Currenty airtouch is not supported with service fee because the integration doesn't have the service fee implemented. So for this integration we need to take care in the restaurant that use this POS and disable the service fee calculation in loyalty as well. For this include a text in sanity to advice if service fee is not calculating even the option is enabled.