Operator guideENcrmloyaltylistinline-edit

Loyalty Programs / List

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

Reader view

Clean portal guidance

This page keeps the operator explanation, field and action descriptions, and screenshots visible without exposing repo paths, raw sidecars, or editorial-only implementation details.

Narrative content

Page body

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.
  • 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 FE validation expects the next row startPoint to match the previous row endPoint.

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. Use it when loyalty settings or default loyalty points have 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 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.

Verification status

  • status: verified_backend
  • FE route and inline grid behavior checked from loyalty-programs/index.tsx and LoyaltyPrograms.tsx
  • admin read/write and recalculation paths checked in gs-admin-backend
Calculation notes

Calculations

calculation

Cashback Percentage Display

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

Source Fields
cashback_multiplier
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.
calculation

Level Range Continuity

The ladder is expected to form one continuous point-range sequence.

Source Fields
startPoint, endPoint
Transform
FE validation requires each row after the first to start exactly at the previous row's `endPoint`, and each row must satisfy `startPoint < endPoint`.
calculation

First Level Start Reset

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

Source Fields
loyaltyLevel[0].startPoint
Transform
Backend update service forcibly sets the first row `startPoint` to `0` before persisting the ladder.
Operational notes

Notes

item

The admin read/write services only return data for `SUPERADMIN` user type.

item

The saved ladder is stored as JSON in the `GlobalSetting` record with key `LOYALTY_LEVEL`.

item

The recalculation action updates `casino_system.master_casino_games.loyalty_price` values from configured defaults and game categories.

Related references

Related pages

pageLoyalty Programs

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

pageActivity Tag Rules / List

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

pageAffiliate Deals / Dashboard

Deal-period performance report that combines traffic, deposit, GGR, NGR, payout, and ROI metrics for affiliate deals.

pageAffiliate Deals / Form

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

pageAffiliate Deals / List

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

pageAffiliate Deals Overview

Operator guide for affiliate-deal records, their create/edit flow, and the performance dashboard that reconciles contract settings with delivered traffic and revenue metrics.