# Unified Menu System (UMS) architecture

**UMS** = Unified Menu System. One group menu → **Sync Items** → each **store** merchandises it. **OMS** = Order Management System on the Live board. Orders soft-launch: Morocco only.

## Keywords (say them out loud)

- **UMS — Unified Menu System** — one catalog at **Manage Group** (item configs, variants, modifiers, sections) shared by every store in the brand.
- **OMS — Order Management System** — kitchen **Live** board: accept, revise, prepare, ready, complete / hand to rider.
- **COD — Cash on Delivery** — customer pays cash at door or counter (no card in app yet).
- **POS** — walk-in / phone tickets via **Live → New order** (same OMS board).
- **Group** — brand blueprint · **Store** — live location (merchandising + orders).
- **Sync Items** — push group UMS changes into a store (never auto).
- Need **tech stack / contention / OMS·UMS·ledger ADRs**? → **[Platform architecture](/docs/en/platform/)** (for engineers & AIs).

## Two layers: Group (UMS) vs Store (merchandising)

Think of the **Group** as the recipe book and each **Store** as a kitchen that sells from that book.

- **Koolodoor** creates your **Group** and **Store(s)**, then sends **Invite Group Manager**.
- Managers do **not** create Group/Store — they open **Partner Tools → Invitations** → **ACCEPT**, then run **Manage Group**, **Sync Items**, **People**, and **Live**.
- **UMS (Unified Menu System)** lives on **Manage Group** — one catalog shared by every location in the brand.
- **Store** is where merchandising happens: hours, QR, Menu du Jour, section order, Live orders, local toggles.

> **Heads up:** Onboarding a restaurant? We create Group + Store(s) and send **Invite Group Manager**. Their first taps: **Partner Tools → Invitations** → **ACCEPT**.

## What is a store item?

A live sellable line on the store menu is not inventing a new product — it is the synced pair from the group.

- At **Group**: **Item Config** (product family) + **Variant Config** (priced sellable line, photo, name).
- At **Store**: one **store item** ≈ that **Item Config + Variant Config** after **Sync Items**.
- Group edits never auto-push. **Manage Store → Sync Items** when you want the kitchen menu to match the blueprint.

> **Heads up:** Changed the group menu? Open the store and tap **Sync Items**. We don't auto-push (yet).

## Availability (store + item schedules)

- You can schedule availability for **stores** and for **items** (follow store hours, or custom windows customers see).
- Store closed ⇒ nothing orderable — even if an item has its own schedule.
- After sync, items default to **Follow Store Hours**; override per item when you need lunch-only specials, etc.

## Orders — OMS (Order Management System) & revision loop

- **OMS** = Order Management System — the kitchen **Live** tab for app + walk-in / phone tickets.
- **Live** tab = one board for app orders + walk-in **New order** (phone / counter).
- Restaurant: **Edit order** → **Send changes**. Customer accepts or declines the proposal in the app.
- Phone orders: partner confirms changes verbally with the customer, then advances the board.
- Delivery: **Mark ready** → rider **Accept** → **Mark delivered** · cash at door.

## Currencies, timezones & where you can order

- The app supports **multiple currencies** and **timezones** (group **Working Country** drives catalog money & hours).
- One **Variant Config** can hold **multiple region prices**; Sync Items for country X only shows variants priced for X.
- Customer discovery resolves **location** (~20 km), store **timezones**, and **store + item availability** (open-now).
- **In-app ordering is Morocco-only right now** — soft launch. Discovery can grow; checkout stays MA until we open more markets.

## Cash (COD)

- **COD only** at launch · **0%** food commission for restaurants.
- Delivery fee: **10 MAD + 3 MAD/km** (cap **50 MAD**) + **3 MAD** service fee on delivery.
- Riders keep **80%** of the delivery fee.

## People & roles

- **Free & invite-based:** Group / Store / manager / partner — no join fee. **Koolodoor** creates Group + Store(s); restaurants never Create Group/Store.
- First manager is invited by **Koolodoor** after Group + Store(s) exist.
- **Group managers** can do everything store partners can, plus UMS catalog, and invite more managers + **Invite Business Partner**.
- **Store partners** run **one store** — **People** invite actions are blocked server-side.
- One active membership — leave before **ACCEPT** on a new invite under **Partner Tools → Invitations**.

## Notifications

- **On store duty** = shift toggle for store staff alerts.
- Riders on **Fleet duty**: leave fleet to stop delivery offers.

