CMS

Web content: complaints tree, resources, banners and documents.

CMS: what it covers

Audience: content editors maintaining what customers see on the ordering channels. You need: CMS — view to browse, CMS — edit to change, CMS — delete to remove. Three separate levels.

The CMS covers the content layer of the ordering experience: the images and text customers see, and the complaints structure behind customer service.

Two areas

Area What it holds
Resources Banners, logos, documents, and the presentation of promotions, products, toppings and payment methods
Complaints The tree of complaint types used when logging a customer complaint

They share the same permissions but are otherwise independent.

Three permission levels, not two

Most console areas have view and edit. The CMS has a third:

Level Lets you
View Browse resources and the complaints tree
Edit Create and change resources, and add or edit complaint nodes
Delete Remove a node from the complaints tree

Delete is deliberately separate. Removing a node from the complaints tree affects how complaints are categorised from that point on, which is harder to reverse than editing a label.

cms_editor is the role built for this area and holds all three.

Content is per source

This is the concept that makes the rest of the CMS make sense.

Resources are stored per source — web, app, kiosk, each aggregator. The same brand can show a different banner on the web than in the app, because they are different records.

So when you edit a resource you are always editing it for a source. Changing the web banner does not change the app banner.

This also means "the banner didn't change" is usually the wrong source selected rather than a failed save. Check the selector before re-uploading.

Your own scope can further limit which sources you see — see How scope works in practice.

The pages in this chapter

Topic Page
Resource types and the source selector Resources and sources
Finding incomplete content Content validation
The complaints tree The complaints tree
Editing banners, step by step CMS - Resources: Banners
Documents per language CMS - Resources: Documents
The resources screen CMS - Resources
Loading complaints from a file CMS - Complaints CSV Upload

Resources and sources

You need: CMS — view to browse, CMS — edit to change.

Resources are the content records behind what customers see. This page covers the model; CMS - Resources walks through the screen itself with screenshots.

The resource types

Type What it controls
Banners Promotional images and where they link to
Logos Brand imagery
Promotions How promotions are presented
Products How articles are presented
Toppings How ingredients and extras are presented
Payment methods Which payment options appear, and how

Editing here changes presentation, not behaviour. A promotion's rules live in Promotional codes; what the customer sees when it is offered lives here. The same split applies to products and payment methods.

Always pick the source first

Every resource belongs to a source — web, app, kiosk, an aggregator. Selecting the source is the first thing you do, not an afterthought.

If a type has no content for the chosen source, the screen says so. That is a real answer: it means nothing is configured for that combination, not that the screen failed.

What you see What it means
Content listed That type is configured for that source
"No data available" Nothing configured for that type and source
A source missing from the list Outside your scope, or not enabled for the brand

Languages

Several resource types are per language as well as per source — banners and documents in particular. A banner exists once per language, and each language needs its own image and destination.

That means a resource is not complete until every language is filled in. A missing translation shows as a gap for customers in that language only, which is exactly the kind of thing nobody notices internally.

CMS - Resources: Banners covers the per-language banner flow, and CMS - Resources: Documents the document one.

Before you finish

  1. Confirm the source you edited was the one you meant.
  2. Check every language for that resource, not just the one you were asked about.
  3. Run the validation list to catch anything left incomplete — see Content validation.

Content validation

You need: CMS — view.

The validation list shows resources that are incomplete — the gaps that would otherwise only surface as something missing on a customer's screen.

Why it exists

Resources are stored per source and, for several types, per language. That produces a lot of combinations, and a gap in any of them is invisible unless you go looking: the affected customers are the ones on that one source, in that one language.

Validation is the going-looking, done for you.

When to run it

Moment Why
After a bulk content change The fastest way to find what didn't land
Before a campaign goes live A missing banner on one source is a campaign that partly didn't run
When adding a new source or language Everything is a gap until it isn't
Routinely Content decays as products and promotions change around it

Running it before a launch is worth more than running it after. A gap found the day before is a fix; found the day after, it is an incident.

Reading it

Each entry points at a specific combination — a type, a source and where relevant a language. That is enough to go straight to the right screen and fill it.

Work by source rather than down the list. Fixing everything wrong with the web in one pass is faster than jumping between sources, because you keep the same selector.

Not everything listed is a problem

A gap is only a problem if that combination should have content. If your brand doesn't use the kiosk, kiosk resources being empty is correct.

Get to know which combinations matter for your brand; after that the list is short and every entry means something.

The complaints tree

You need: CMS — view to browse, CMS — edit to add or change, CMS — delete to remove.

The complaints tree is the structure of complaint types used when a customer complaint is logged. It is what makes complaints countable: a tree everyone uses the same way turns individual annoyances into a pattern you can act on.

Browsing

The tree is a hierarchy of nodes — broad categories at the top, specific types beneath. Browse it to see the current structure before changing anything.

Adding and editing a node

Add a node under the right parent, or edit an existing one.

Changing a label changes it everywhere, including on complaints already filed under it. That is usually what you want when correcting wording. It is not what you want when the meaning shifts — if the node should now mean something different, add a new one and stop using the old.

Deleting a node

Delete has its own permission, and for good reason. Removing a node changes how complaints can be categorised from that moment on, and existing complaints filed under it lose the structure that explained them.

Before deleting, ask:

Question If yes
Have complaints been filed under it? Prefer stopping its use over deleting it
Is it a duplicate of another node? Consolidate deliberately, and note which absorbed which
Was it created by mistake and never used? Safe to delete

Keep the tree small

A tree that grows a node per incident stops being useful: with sixty options, nobody picks consistently, and the counts mean nothing.

Two tests before adding a node:

  1. Would a different person pick this node for the same complaint? If it overlaps an existing one, it will be used inconsistently.
  2. Would you act differently on this than on its neighbour? If not, it doesn't need to be separate.

Loading many at once

The tree can be loaded from a file rather than built node by node — see CMS - Complaints CSV Upload, which covers the format and the flow in detail.

As with every import, start small and confirm the structure before loading everything.

CMS - Complaints CSV Upload

Overview

The Complaints Management CSV Upload system allows you to upload and manage complaint flow data using two CSV files - one in English and one in Arabic. This system provides validation, preview functionality, and error handling to ensure data integrity.

Code Reference Legend

Actions

Code Definition
X Go to next node
Q Question to a customer
QP Ask for proof to a customer, upload picture
S Show customer order to pick an item
CB Call back to customer
R Refund
R30 30% refund of the item in default
T Rating
TT Ticket Transfer to agent for manual evaluation
QD Dialog box
QPD Both Dialog Box and Picture upload
PHONE Provide phone number of the delivery partner in the variable field {%phone%}
R100P150 100% refund of the order value, up to 150 SAR

Status

Code Definition
CA Closed Abandoned
C Closed
O Open

Conditions

Code Definition
NOPHONE Driver phone number is not available
YESPHONE Driver phone number is available
RP Platinum Guarantee Refund Processed
RNP Refund Guarantee Refund Not Processed
GSE Gold Subscription Expired
GSNE Gold Subscription Not Expired
GTP Customer moved from Gold to Platinum
PSE Platinum Subscription Expired
PSNE Platinum Subscription Not Expired
SLABD30 Delivery SLA Breached - Platinum Guarantee of 30 mins from theoretical start production time to at customer location
NOSLAB30 Platinum delivery guarantee SLA of 30 mins not breached
SLABPU15 Pickup SLA breached - Platinum guarantee of 15 mins from theoretical start production time to actual end production time
NOSLAB15 Platinum pickup guarantee SLA of 15 mins not breached
SLABD Delivery SLA breach (SLA = 40 mins)
SLABPU Pickup SLA breach (SLA = 15 mins)
N No Condition
ITEMCHECKS Item selected from the order should be a side dish only
NOSLAB No SLA Breach in Pickup or Delivery
CHECKCUSTY Customizations are added in the Pizza
CHECKCUSTN Customizations are not added in the Pizza
ORSPT Order is Pickup or Takeaway
ORSD Order is Delivery
SLABD20 Time breach after the SLA time is between 1 min to 20 mins
SLABD2035 Time breach after the SLA time is above 20 mins and below 35 mins
SLABD3550 Time breach after the SLA time is above 35 mins and below 50 mins
SLABD50+ Time breach after the SLA time is above 50 mins
WMP Wallet balance is present in the account
WMPF Wallet balance is 0
EXEMPT If refund is given with Exempt in Action, that refund should not be counted in future customer profiling

Variables

Code English Arabic
{%wallet%} (%AMOUNT%) in your wallet (%AMOUNT%) في محفظتك.
{%wallet%} (%Loyalty Points%) rewards points (%Loyalty Points%) نقطة مكافأة.
{%wallet%} (%AMOUNT%) in your wallet & (%Loyalty Points%) rewards points (%AMOUNT%) في محفظتك و (%Loyalty Points%) نقطة مكافأة.
{%currency%} SAR ريال سعودي.
{%currency%} AED درهم إماراتي.

Loyalty Tiers

Code Definition
S Silver
G Gold
P Platinum

Customer Types

Code Definition
H Healthy
A Alert
B Abusive

Upload Process Workflow

1. File Selection

2. File Validation

The system performs comprehensive validation in the following order:

  1. Format Validation: Checks file structure and required columns
  2. Data Validation: Validates data types and required fields
  3. Flow Validation: Verifies the logical flow of complaint processes

3. Upload Execution

File Format Requirements

English CSV Structure

Required columns (case-sensitive):

Column Separator: Semicolon (;)

Arabic CSV Structure

Required columns (case-sensitive):

Column Separator: Semicolon (;)

Validation Process

Step 1: File Format Validation

The system checks:

Common Format Errors:

Step 2: Data Type Validation

The system validates:

Common Data Errors:

Step 3: Flow Validation

Advanced validation checks:

Upload Status Indicators

File Status Icons

Upload Status Messages

Error Messages and Solutions

File Selection Errors

Error Solution
"Select both English and Arabic CSV files" User must select both English and Arabic CSV files
"Both files must be validated" Click "Validate Files" after selecting both files

Format Validation Errors

Error Cause Solution
"File must contain header and at least one data row" Empty file or missing data Ensure file has header row and data rows
"Missing required column: [COLUMN_NAME]" Required column not found Add missing column to CSV header
"Row X: Column count mismatch" Inconsistent number of columns Ensure all rows have same number of columns
"Error reading CSV file" File corruption or encoding issue Re-save file as UTF-8 CSV with semicolon separator

Data Validation Errors

Error Cause Solution
"Row X: NODE_ID must be numeric" Non-numeric NODE_ID Ensure NODE_ID contains only numbers
"Row X: CUST_ID must be numeric" Non-numeric CUST_ID Ensure CUST_ID contains only numbers
"Row X: PARENT_NODE_ID must be numeric or NULL" Invalid parent reference Use numbers or exactly "NULL"
"Row X: Arabic description is required" Missing Arabic text Add Arabic description for all nodes

Server Processing Errors

Error Cause Solution
"No valid English CSV data found" Empty or invalid English file Check English file format and data
"No valid Arabic CSV data found" Empty or invalid Arabic file Check Arabic file format and data
"English CSV row X: Invalid NODE_ID" Server-side validation failure Review NODE_ID format and uniqueness
"Arabic CSV row X: Missing Description (Arabic)" Server-side validation failure Ensure all Arabic descriptions are present
"Maximum 2 files allowed" Too many files uploaded Upload exactly 2 files (English + Arabic)

Flow Validation Errors

Error Cause Solution
"The flow of both files must be validated" Flow validation not performed Click "Validate Flow" button
"The files have flow validation errors that must be corrected" Flow validation found issues Review flow validation dialog for specific errors

Troubleshooting Guide

Problem: Files won't upload

Check:

Problem: Validation fails repeatedly

Solutions:

  1. Download current data to see expected format
  2. Check file encoding (must be UTF-8)
  3. Verify column separator is semicolon (;)
  4. Ensure no hidden characters or formatting

Problem: Flow validation shows errors

Actions:

  1. Open flow validation dialog
  2. Review specific error messages
  3. Check parent-child relationships in data
  4. Verify node hierarchy integrity
  5. Correct data and re-validate

Problem: Upload fails after validation

Investigation:

  1. Check server connection
  2. Verify file size limits
  3. Review browser console for errors
  4. Contact system administrator if issues persist

Technical Notes

System Behavior

Best Practices

File Preparation

  1. Use consistent encoding: Save CSV files as UTF-8
  2. Check separators: Use semicolon (;) as column separator
  3. Validate NODE_IDs: Ensure matching NODE_IDs between English and Arabic files
  4. Review descriptions: Verify all descriptions are meaningful and complete

Error Prevention

  1. Template usage: Use existing data export as template for new uploads
  2. Data validation: Check data in spreadsheet application before export
  3. Backup strategy: Keep original files as backup before processing
  4. Test with small dataset: Validate process with subset of data first

Upload Strategy

  1. Sequential validation: Complete file validation before flow validation
  2. Review before upload: Check all validation messages before final upload
  3. Brand selection: Verify correct brand is selected before upload
  4. Timing: Perform uploads during low-traffic periods

CMS - Resources

To access the resource management section, go to the WEB CMS menu in the central panel.

WEB CMS - Resource management

Then go to the RESOURCES menu.

Resources

Once in RESOURCES, the sidebar shows all the sections available for viewing and editing resources: Banners, Payment methods, Ingredients, Logos, Products, Promotions, and Miscellaneous.

Resources sidebar

Selecting a source

Once a resource type is selected, if that resource has no data, the screen will show "No data available".

Example: Resource: Banners - Source: AI

No data available

If resources are available instead, the following options appear on screen:

Example: Resource: Banners - Source: Web

Source dropdown

Search filter and parameters

Example: Resource: Banners - Source: Web

Search filter

Example: Resource: Banners - Source: Web

Supported parameters - Banners

Example: Resource: Payment methods - Source: Web

Supported parameters - Payment methods

If no parameters are defined, the following message appears and those resources cannot be edited unless you contact the administrator: "To edit these resources, please contact your administrator".

Editing resources

Example: Resource: Banners - Source: Web

Edit button

If the file is valid, the Save button becomes enabled. If it saves without any errors during upload, a confirmation message appears.

Selected resources dialog

File saved successfully

If the file is not valid, a "Invalid format" message appears showing the incorrect parameters of the file.

File error

Preview and formats

Example: Resource: Banners - Source: Web

Preview button

Selected images - preview

Example: Resource: Promotions - Source: Web

Size format selector

CMS - Resources: Banners

To edit a banner, select the redirect type and choose a valid file.

Languages

Each banner has a corresponding banner in Catalan and English.

Image language selector

Each banner, in its respective language, must have an image and a redirect assigned to it.

Banner table by language

Destination URL

There are 3 available options for adding a banner's redirect (only one can be chosen):

Selected resources - choose redirect type

Product selection

Promotion selection

Example:

Destination URL field

CMS - Resources: Documents

To update documents, go to the WEB CMS menu and then RESOURCES.

WEB CMS - Resource management Resources

Languages

Each language has its own corresponding documents.

Document language selector

Documents table

Only one document can be uploaded at a time.

Updating a document

To update a document, select a file with a valid extension and a size under the maximum allowed. In this case, a PDF file smaller than 2 MB.

If the selected file is valid, the Save button becomes enabled.

Selected resources - upload document

Once it has saved successfully, a confirmation message appears:

File saved successfully