Skip to content

Front of house

Floor management

Dining areas, the floor plan designer, table status and transfers.

3 min read

On this page

For hosts, waiters and managers. Open Floor plan from the sidebar (/pos/floor). Needs tables.view; seating, moving, merging and splitting need tables.manage; designing the floor needs tables.configure (sensitive).

Dining areas

Areas are tabs across the top: indoor sections, outdoor, terrace, VIP rooms, bar seating, rooftop, garden, lakeside… Each area has a code, a kind, a capacity, a smoking flag, an optional default service charge and a grid (columns × rows) on which its tables are placed. Managers add areas with + Area in the header and edit them from the area tab (tables.configure).

Reading the plan

Each table is a tile at its position with its code, seat count and status colour:

Status Colour Meaning Set by
Available green free closing/cancelling an order, Clear after cleaning
Occupied saffron an order is open on it seating
Reserved blue held for a booking (name + time) Reserve
Cleaning grey just vacated closing an order
Bill requested purple guests asked for the bill the till’s Bill
Blocked dark out of service Block

Merged tables show the primary table’s code (T12 + T13) and count as one. Tiles update live from every till and floor screen of the branch.

Working a table (tap a tile)

Action What it does
Seat guests choose the number of guests → opens a dine-in order on the till (sales.create)
Open order jumps to the table’s order on the till
Reserve name and time; the table turns blue; seating clears the reservation
Clear / Cleaning / Block change the status of a free table
Assign waiter choose the waiter responsible; copied to the order
Guests update the guest count (also on the order)
Merge pick the other tables to pull into this one: their open orders merge into (or transfer to) this table’s order and they show as merged
Split un-merge: the joined tables return to their own tiles (status cleaning)
Transfer move the table’s order to another free table (sales.transfer)

An occupied table cannot be re-seated: a second host tapping Seat on the same table at the same moment gets “T5 already has an open order” — one wins, the other sees the live status.

Table turnover

The header shows today’s turnover live — Today: 18 turns · 52 covers · avg 47 min — and GET /api/pos/floor/turnover returns the same per table (turns, covers, average minutes, minutes occupied). A session opens when a table is seated and closes when its order is paid, transferred, merged, cancelled or the table is cleared. The figures feed the reporting phase.

Designing the floor (tables.configure)

Design switches the current area into the designer:

  • Drag a table to move it; the grid snaps to whole cells and keeps tables inside the area.
  • + Table — code, name, shape (square, round, rectangle, bar seat, booth), minimum and maximum seats, size in cells, rotation.
  • Edit / Archive a table (an occupied table cannot be archived).
  • Save layout writes all positions at once and is audited (tables.layout_saved); Cancel discards the drag changes.

Codes are unique within an area (T1, B3, VIP-2); names are what the guests see on receipts.