Operator guideEN

Loyalty Programs / List

Inline-editable loyalty-level ladder with add, last-row delete, submit, level-image selection, and loyalty-price recalculation.

How to use this guide

Start with the main guide

Follow the explanation and examples first. Extra definitions and formulas are available below when you need them.

What this page shows

This page shows the full loyalty-level ladder as one editable grid.

Each row represents one loyalty level. Operators edit the row values directly, add a new level to the end of the ladder, remove the current last level, and then save the full configuration.

When to use it

  • adjust which point ranges belong to each level
  • change cashback percentage for one or more levels
  • update display names, bonus codes, expiration periods, tags, or images
  • add a new top loyalty level at the end of the ladder
  • remove the current highest level
  • recalculate loyalty prices for games after the loyalty setup changes

Treat this page as bonus-adjacent configuration. It governs loyalty thresholds and loyalty bonus-code mapping, not the reusable bonus catalog in Bonuses.

How to read it

Read the grid from left to right:

  • identity and naming: Levels, Level Name
  • threshold range: Loyalty Point Start, Loyalty Point End
  • reward meaning: Cashback Percentage
  • supporting configuration: Bonus Codes, Expiration Period, Tags, Level Image
  • row action: Delete for the current last level only

The grid is ordered by level number and is intended to represent one continuous ladder.

Important operator rules

  • Submit saves the entire ladder, not only the row you last changed.
  • Add and Delete change only the in-page draft until Submit succeeds.
  • The first level is always stored with startPoint = 0 after save.
  • A new row starts with default zero values and should be completed before saving.
  • Delete is intentionally available only for the last row.

Why values can be confusing

Cashback percentage is displayed differently from how it is stored

The UI shows cashback as a percentage, for example 5, 10, or 15.

The stored backend value is a decimal fraction, for example:

  • 5% is saved as 0.05
  • 10% is saved as 0.10

Point ranges should stay continuous

The repository contains a range-continuity schema that expects the next row startPoint to match the previous row endPoint, but the currently mounted page does not call that schema from the Submit handler.

Operators should treat the ladder as one continuous range model rather than unrelated rows.

Update LP Price is not the same as Submit

Submit updates the saved loyalty-level configuration.

Update LP Price runs a separate backend recalculation for casino game loyalty pricing. It reads the casino setting Default Config One Loyalty Point Price in stakes EUR (defaultLoyaltyPoints) and active game categories, then updates game loyalty prices. Use it when that casino setting or game category/default loyalty-point configuration has changed and game loyalty prices must be refreshed.

Known caveats

  • The backend loyalty-level read/write service works only for SUPERADMIN user type.
  • The backend forcibly resets the first row startPoint to 0 before saving.
  • The current page shows toast errors on submit failure, but it does not show row-level validation errors before sending the ladder to the backend.
  • The page uses a shared core asset search for Level Image, but image selection itself does not change the verification ownership of the loyalty-level configuration.
  • Update LP Price does not include unsaved grid edits. Save the ladder first with Submit if the recalculation should follow the edited levels.
More details

Definitions and formulas

Open only the section you need. The relevant section opens automatically when you request help for a specific item on screen.

Calculations3 topicsOpen details

Cashback Percentage Display

The visible percent value is a display transform, not the raw stored backend value.

Transform
FE displays `cashback_multiplier * 100` with a percent sign, and on input converts the entered percentage back to a decimal fraction by dividing by 100.

Level Range Continuity

The ladder should be maintained as one continuous point-range sequence, but operators should not rely on row-level FE validation catching every mistake before submit.

Transform
The repository includes a Yup schema that requires each row after the first to start exactly at the previous row's `endPoint`, and each row must satisfy `startPoint < endPoint`. The currently mounted submit handler does not call that schema directly.

First Level Start Reset

Operators should expect the first level to start at zero after save even if another value was entered.

Transform
Backend update service forcibly sets the first row `startPoint` to `0` before persisting the ladder.
More help

Related pages

Loyalty Programs

Operator guide for the low-frequency loyalty-level configuration screen, including inline level editing and loyalty-price recalculation.

Activity Tag Rules / List

Main inventory for activity-driven tag rules, with search, activity and status filters, grouped rows, clone, edit, and run actions.

Affiliate Deals / Dashboard

Affiliate deal cohort report that period-bounds registrations, then combines the selected players with cumulative deposit and linked-event values.

Affiliate Deals / Form

Create and edit form for affiliate deals, including PID, date window, commercial terms, and responsible person.

Affiliate Deals / List

Searchable table of affiliate deal rows with PID filter, create action, dashboard shortcut, and edit/delete row actions.

Affiliate Payment Settings / List

Affiliate payment settings inventory page for reviewing configured rows and opening saved records.