Skip to content

Glossary

Every term we use in the system, in one place. Search the page (Ctrl-F) for what you're looking for, or use the site search above.


Abandoned cart
A cart that a customer added items to but didn't check out. After 24h (configurable), we automatically email the customer a recovery link. See Orders & invoices.
Add-on
A related product variant shown as a suggestion on a product page or in the cart. Curated per product in KCMS. Different from a bundle - add-ons are individual upsells, not pre-packaged kits.
AI badge (Sparkles icon)
Marker on a translated field or locale tab indicating the value was written by the auto-translate job. Saving the field by hand strips the badge and locks that row from future overwrites by the nightly cron.
Admin user
Someone with a KCMS login. Has a role that grants permissions. Distinct from a Customer.
Audit log
Append-only record of every admin write. Who did what, when, on which resource. Kept forever. Browsable in Settings → Audit log (needs audit_log:read permission).
Auto-translate job
Backend cron that fires nightly at 03:00 server time. Walks every product, brand, campaign, CMS page, and event; finds rows that are missing a translation or whose source has changed since the last run; sends the text to DeepL; writes the result back with the AI badge. Status, history, and a "Run now" button live at Settings → Translations. See Mass email for the email-side equivalent.
Banner
The strip across the top of every storefront page. One at a time, dismissable for the session. See Campaigns & banners.
Block (CMS page)
The unit of content on a CMS page. Each block is one tab in the page editor: a slideshow, a section, or a free-form text panel. Pages stack blocks in order. Each block type has its own visual editor. Brand and device pages are the same as generic pages, they just default to a slideshow + several sections.
Block: Feature section
A page block with a heading, rich-text body, optional image (positioned left or right), and optional call-to-action button. Add as many as you want; the editor alternates image sides automatically.
Block: Rich text
A page block with free-form HTML. Use it for inline copy that doesn't fit the feature-section template.
Block: Slideshow
A page block with N auto-rotating images. Configure the rotation interval and per-image alt text. Sits at the top of brand and device pages by convention.
Brand pages (dynamic header)
The storefront header reads the BRANDS and DEVICES dropdowns directly from the CMS pages API. Any new page with page_type=brand or page_type=device and status=published appears in the menu on the next storefront render. No deploy required.
Bundle
A multi-item package. Two types: Mandatory (sold as a unit, "Starter kit") or Recommended (suggested cross-sell when the main product is added to cart). See Products & catalog.
Campaign
A time-bound offer with coupon code, discount, optional free shipping, region scoping. May have a dedicated landing page at /campaigns/<handle>. See Campaigns & banners.
Caddy
The reverse proxy that fronts every public URL with HTTPS. Handles LE certs automatically. You won't touch it day-to-day.
Categories
Doesn't exist anymore - we dropped categories in V28 and replaced them with Collections + Brands + Devices.
Cart
A customer's open shopping basket. Persists across visits when the customer is logged in.
Collection
A theme-based grouping of products (e.g. "ASCE+", "Skin Boosters"). Has a landing page at /collections/<handle> and an entry in the storefront's PRODUKTER menu (if show_in_nav is on).
Coupon
A discount code attached to a campaign. Case-insensitive.
Credit invoice (kreditfaktura)
A negative-amount invoice issued to reverse an original invoice (full or partial). Creates an audit trail; the original isn't edited. See Orders & invoices.
CSV export
Flat data dump for spreadsheets. Available for orders, customers, invoices, abandoned carts.
Customer
Someone with a storefront account who can place orders. Distinct from an Admin user. Has a signup region, professions, etc.
DeepL
The translation provider we use for the auto-translate job. Free tier covers ~500K characters/month, which is plenty for the catalog. Configure the API key at Settings → Translations → DeepL configuration. Free-tier keys end in :fx and hit api-free.deepl.com automatically.
DeepL quota gauge
The big counter at the top of the Translations page showing "characters left this period". Goes green / amber / rose past 70% / 90% usage. Quota resets monthly on DeepL's billing date.
Dev site
cms-dev.rmsnordic.se + dev.rmsnordic.se. A safe parallel copy of the production system with real product data but masked customer emails. Test anything risky here first.
Developer (flag)
A boolean on a customer record. When true, the storefront shows them the region picker (so they can switch markets). Not for real customers.
Featured product
A product appearing in the homepage's "featured" row. Curated by admins.
Flyway
The database migration tool the backend uses. Forward-only; we never edit applied migrations. Devs talk about this when something fails to start up after a new release.
Handle
The URL-safe slug for a product / collection / brand / page. Once set, don't change - old links break.
Internal order
An order created by an admin on behalf of a customer (phone order, walk-in). Skips the storefront / Nets entirely. See Orders & invoices.
Internal price list
Per-customer variant price overrides. Used for B2B partners with negotiated pricing. See Customers & pricing.
Invoice
The PDF document we send for every order, regardless of payment method (card-paid orders get one too, flagged as already paid). Has a sequential number, OCR reference, due date.
Invoice eligibility
Whether a customer can pay by invoice. Requires BOTH the customer-level invoice_enabled flag AND the cart total exceeding the shop-wide invoice threshold. Settings → Settings → Invoice threshold.
JWT (JSON Web Token)
The signed login token. Lives in an HttpOnly cookie. You don't see it; the system uses it to know who you are.
KCMS
The admin website you're using right now - cms.rmsnordic.se. Stands for Kavel CMS.
Locale
A language code (sv, nb, da, fi, en). Supported set is locked to Swedish + the four Nordic + English. The Swedish locale is the source; the others are targets filled by the auto-translate job. Adding a sixth locale is a developer task.
Locale tab strip
The horizontal row of language tabs at the top of the product editor and the CMS page editor: [ SV source | NB | DA | FI | EN ]. Switching tabs swaps every translatable field on the form to that locale's translation row. The AI badge marks any tab whose values were auto-generated.
Machine-translated
Synonym for AI badge. A row that the auto-translate job wrote. The badge is stored as a boolean on every translation row; the cron only overwrites rows where it's still true. Saving any field by hand flips it to false.
Mass email
A one-off promotional email to a filtered subset of customers. Respects marketing opt-in. See Mass email.
Membership tier
A grouping of customers with shared pricing/perks. Out-of-the-box we have Partner and Platinum.
MinIO
Where uploaded files (product images, page covers, invoice PDFs) live. You don't interact with it directly - KCMS handles uploads and serves files via api.rmsnordic.se/media/....
Nets
The card payment processor. Customers paying by card are redirected to a Nets-hosted page; we get a webhook when payment succeeds.
OCR reference
The 8-12 digit number with a checksum that customers type when paying an invoice via bankgiro. Generated automatically per invoice. Required by Swedish banks.
Opt-in
The customer's permission to receive marketing email. Recorded at signup; honoured on every mass-email send.
Org-number lookup
At signup, when a customer types their company's organization number, the system queries the national registry (Bolagsverket, Brønnøysund, Virk, PRH) and autofills company name + VAT number.
Page editor
The full-screen form at Pages → (any page) that edits one CMS page. Has a master tab for page-level metadata (handle, status, page_type, SEO) and one tab per Block. A locale tab strip at the top swaps every translatable field on every tab between the SV source and a target-locale translation.
Per-region price
A variant can have explicit prices for each region (SE/NO/DK/FI), in that region's currency. If a region has no explicit price, we fall back to the default price FX-converted - but we usually set explicit prices.
Permission
A token of the form <resource>:<action> - e.g. products:edit, accounting:read. Roles bundle permissions. Endpoints require specific permissions.
Profession
A self-declared customer attribute (doctor, skin therapist, nurse, dentist, clinic owner). Multi-select. Drives mass-email targeting.
Pro-forma invoice
A historic invoice imported from a legacy system via CSV. Doesn't generate a new PDF, doesn't send email. For accounting completeness only.
Region
A market - Sweden (SE), Norge (NO), Danmark (DK), Suomi (FI). Each has its own currency, locale, VAT rate, shipping rate.
Region lock
Once a customer signs up under a region, they can't change it (except by a developer). All their prices, shipping, currency follow that region forever.
Resend
The transactional email service we send through. You won't see it directly - KCMS just shows "email sent" or "email failed".
Role
A bundle of permissions. Each admin user has one role. Roles are configurable at Settings → Roles. The "Administrator" role is not editable (escape hatch).
Run history (translation)
The audit table at Settings → Translations showing one row per auto-translate run: when, what triggered it (scheduled / manual / disabled / crashed), per-entity counters (products / brands / campaigns / pages / events), characters consumed, target locales, and the DeepL quota snapshot at the end of the run. Kept forever.
SIE-4
The Swedish accounting interchange format. We export invoice data in this format for import into Fortnox / Visma / etc. See Accounting.
Signup region
The region a customer chose at signup. Locks them to that market.
Source locale
Swedish (sv). The locale humans write content in. Every translatable field stores its canonical value here. The auto- translate job reads the source row and writes target-locale rows from it; the four target locales (NB / DA / FI / EN) are never sources themselves.
SKU
Stock Keeping Unit - a unique ID per product variant. Used in accounting exports and inventory tracking.
Stock keep
A toggle on a variant: when on, we track its inventory level; when off, it's "always in stock" (digital goods, services).
Target locale
Any of nb, da, fi, en. A locale whose rows are filled by the auto-translate job from the SV source. Saving any target- locale field by hand strips the AI badge and locks that row against future overwrites.
Token (free event)
Credit a customer can spend to register for a paid event for free. Granted by admins.
Translation
A per-locale version of a piece of content (SV / NB / DA / FI / EN). Stored separately from the master record, one row per locale per resource. Empty target-locale rows fall back to the SV source on the storefront.
Translation run
One execution of the auto-translate job. Either the nightly cron (trigger=scheduled), an admin clicking "Run now" (trigger=manual), a no-op when the feature is off (trigger=disabled), or a crash record (trigger=crashed). Each run writes one row into Run history.
Variant
A specific SKU of a product - e.g. "ASCE+ 5ml, single" vs. "ASCE+ 5ml, 6-pack". Each has its own price + stock level.
VAT
Value-Added Tax. 25% in Sweden, varies by region. Calculated on goods + shipping separately and shown to the customer in checkout.
Webhook
A backend-to-backend HTTP call we make when something happens (order created, payment received). Used to integrate with external systems. Manage subscriptions at Settings → Webhooks.
Wishlist
A customer's saved products (heart icon on product cards). They can convert wishlist items into cart additions on their account page.