The full lifecycle
DishInk uses seven KDS statuses, stored ontable_order_items.kds_status:
printed is a peer of sent_to_kitchen, not a successor — it’s the path for kitchens that print rather than run a KDS screen. served follows either ready (KDS mode) or printed (paper mode).
Where each status appears
Each status has a distinct visual treatment across DishInk surfaces:KDS ticket board
Waiter Bill Summary
Floor plan card border
The floor card border encodes the mix of statuses on the table’s active items:
This lets a waiter see at a glance whether a table is “all preparing” (uniform amber) vs “some ready, some still cooking” (green/amber split).
Colour coding — the traffic-light rule
Prep timers use a three-band traffic light against each item’sprep_time_target_minutes:
Overdue detection is driven by
prep_started_at + prep_time_target_minutes — the item must be preparing for the timer to run. Items sitting in sent_to_kitchen don’t count against the prep target, but they do count against the station queue alert (alert_after_minutes).

Kitchen statuses
Legal transitions
Not every status can follow every other status. The valid transitions are:pending → sent_to_kitchen— the waiter taps Send to Kitchen.sent_to_kitchen → preparing— the kitchen taps Prepare (per item or bulk).preparing → ready— the kitchen taps Ready.ready → served— the kitchen taps Served, or the waiter serves it.sent_to_kitchen → printed— for stations withthermal_print_enabled, the item skips the KDS screen and goes to the printer.printed → served— the waiter ticks the served checkbox on the Bill Summary as food lands.- Any → cancelled — a void by the waiter (with manager PIN) or POS.
Sync fabric — how a status change reaches every screen
Every tap on the KDS goes through the same three-layer sync:- Optimistic local write — the UI updates immediately.
- Supabase realtime — the update fans out to every subscribed KDS, POS, and Waiter device via the
waiter_kds_${restaurantId}channel. - LAN side-car broadcast — in parallel, a broadcast fires over the local Wi-Fi so on-network devices update even when the cloud is slow.
Automatic session transitions
Item statuses drive session statuses on the table:
See Table Statuses for the parallel table-level lifecycle.
Voids and cancellations
Acancelled item is not deleted — the record is kept for audit and fiscal purposes. It shows on the Bill Summary with a strike-through and does not count toward the “every item served” transition. See Editing Orders for the void workflow.
Cancelled items with a
cancel_reason land in the shift report so managers can see what got voided and why.
