@company-manager/docs

Table Management

Floor plan, reservations, seating, and table service diagrams

Table Management

This page covers table and floor management including reservations, seating workflow, and table service operations.

Floor Plan Architecture

flowchart TB
    subgraph "Floor Structure"
        VENUE[Venue/Restaurant]
        FLOOR1[Floor 1]
        FLOOR2[Floor 2]
        PATIO[Patio]
    end

    subgraph "Sections"
        SEC_A[Section A]
        SEC_B[Section B]
        SEC_BAR[Bar Area]
        SEC_PATIO[Outdoor Section]
    end

    subgraph "Tables"
        T1[Table 1]
        T2[Table 2]
        T3[Table 3]
        T4[Table 4]
        BAR_SEATS[Bar Seats]
    end

    VENUE --> FLOOR1
    VENUE --> FLOOR2
    VENUE --> PATIO

    FLOOR1 --> SEC_A
    FLOOR1 --> SEC_B
    FLOOR1 --> SEC_BAR
    PATIO --> SEC_PATIO

    SEC_A --> T1
    SEC_A --> T2
    SEC_B --> T3
    SEC_B --> T4
    SEC_BAR --> BAR_SEATS

    style VENUE fill:#e1f5fe

Table States

stateDiagram-v2
    [*] --> AVAILABLE: Open

    AVAILABLE --> RESERVED: Reservation Created
    RESERVED --> AVAILABLE: No Show/Cancel
    RESERVED --> SEATED: Party Arrives

    AVAILABLE --> SEATED: Walk-in

    SEATED --> OCCUPIED: Order Placed
    SEATED --> AVAILABLE: Immediate Leave

    OCCUPIED --> OCCUPIED: Additional Orders
    OCCUPIED --> PAYING: Check Requested

    PAYING --> PAID: Payment Complete
    PAID --> DIRTY: Guest Leaves

    DIRTY --> CLEANING: Bus Started
    CLEANING --> AVAILABLE: Reset Complete

    AVAILABLE --> BLOCKED: Block Table
    BLOCKED --> AVAILABLE: Unblock

    note right of RESERVED
        Holding for
        upcoming party
    end note

    note right of DIRTY
        Needs bussing
        and reset
    end note

Reservation Flow

sequenceDiagram
    participant Guest as Guest
    participant System as Reservation System
    participant DB as Database
    participant Staff as Host Staff
    participant SMS as SMS Service

    Guest->>System: Request reservation
    System->>DB: Check availability
    DB-->>System: Available slots

    alt Online Booking
        System-->>Guest: Show available times
        Guest->>System: Select time & party size
        System->>DB: Create reservation
        System->>SMS: Send confirmation
        SMS-->>Guest: Confirmation text
    else Phone Booking
        Staff->>System: Enter details
        System->>DB: Create reservation
        Staff-->>Guest: Confirm verbally
    end

    Note over System: Day of reservation

    System->>SMS: Send reminder (2h before)
    SMS-->>Guest: Reminder text

    Guest->>System: Confirm/Cancel
    System->>DB: Update status

    alt Guest Arrives
        Staff->>System: Mark as arrived
        System->>DB: Update to SEATED
    else No Show
        System->>System: Grace period expires
        System->>DB: Mark as NO_SHOW
        System->>DB: Release table
    end

Seating Workflow

flowchart TD
    ARRIVAL[Party Arrives] --> CHECK{Has Reservation?}

    CHECK -->|Yes| FIND_RES[Find Reservation]
    CHECK -->|No| WALKIN[Walk-in Process]

    FIND_RES --> VERIFY[Verify Party Size]
    VERIFY --> TABLE_READY{Table Ready?}

    TABLE_READY -->|Yes| SEAT[Seat Party]
    TABLE_READY -->|No| WAIT_LIST[Add to Wait]

    WALKIN --> SIZE[Get Party Size]
    SIZE --> AVAILABLE{Table Available?}

    AVAILABLE -->|Yes| SEAT
    AVAILABLE -->|No| WAIT_LIST

    WAIT_LIST --> ESTIMATE[Give Wait Estimate]
    ESTIMATE --> PAGER{Give Pager?}
    PAGER -->|Yes| ASSIGN_PAGER[Assign Pager]
    PAGER -->|No| SMS_WAIT[Take Phone #]

    ASSIGN_PAGER --> WAIT[Wait for Table]
    SMS_WAIT --> WAIT

    WAIT --> TABLE_FREE[Table Becomes Free]
    TABLE_FREE --> NOTIFY[Notify Guest]
    NOTIFY --> RESPONSE{Guest Returns?}

    RESPONSE -->|Yes| SEAT
    RESPONSE -->|No, Grace| WAIT
    RESPONSE -->|No Show| REMOVE[Remove from List]

    SEAT --> ASSIGN_SERVER[Assign Server]
    ASSIGN_SERVER --> START_SESSION[Start Table Session]
    START_SESSION --> CREATE_ORDER[Create Order]

    style SEAT fill:#e8f5e9

Wait List Management

flowchart TD
    ADD[Add to Waitlist] --> INFO[Collect Info]
    INFO --> NAME[Guest Name]
    INFO --> SIZE[Party Size]
    INFO --> PHONE[Phone Number]
    INFO --> PREFS[Preferences]

    NAME --> ESTIMATE[Calculate Wait Time]
    SIZE --> ESTIMATE
    PREFS --> ESTIMATE

    ESTIMATE --> POSITION[Assign Position]
    POSITION --> DISPLAY[Show on Wait Board]

    subgraph "Wait Time Factors"
        TABLES[Available Tables]
        AVG_TURN[Average Turn Time]
        AHEAD[Parties Ahead]
        MATCH[Table Size Match]
    end

    TABLES --> ESTIMATE
    AVG_TURN --> ESTIMATE
    AHEAD --> ESTIMATE
    MATCH --> ESTIMATE

    DISPLAY --> MONITOR[Monitor Progress]
    MONITOR --> UPDATE{Position Changed?}
    UPDATE -->|Yes| NOTIFY[Update Guest]
    UPDATE -->|No| MONITOR

    NOTIFY --> READY{Table Ready?}
    READY -->|Yes| PAGE[Page Guest]
    READY -->|No| MONITOR

    PAGE --> RESPOND{Guest Responds?}
    RESPOND -->|Yes| SEAT[Seat Party]
    RESPOND -->|Grace Period| PAGE
    RESPOND -->|No Response| SKIP[Move to End/Remove]

    style SEAT fill:#e8f5e9

Table Session Lifecycle

sequenceDiagram
    participant Host as Host
    participant Table as Table
    participant Server as Server
    participant POS as POS System
    participant Kitchen as Kitchen

    Host->>Table: Seat guests
    Table->>Table: Session started

    Server->>Table: Greet, take drink order
    Server->>POS: Enter drinks
    POS->>Kitchen: Send to bar

    Server->>Table: Deliver drinks
    Server->>Table: Take food order
    Server->>POS: Enter food
    POS->>Kitchen: Send to kitchen

    loop Courses
        Kitchen-->>Server: Course ready
        Server->>Table: Deliver course
        Server->>Table: Check on guests
    end

    Table->>Server: Request check
    Server->>POS: Print check
    Server->>Table: Present check

    Table->>Server: Payment
    Server->>POS: Process payment
    POS-->>Server: Approved

    Server->>Table: Return receipt
    Table->>Table: Guests leave

    Host->>Table: Mark for cleaning
    Note over Table: Bus and reset

    Host->>Table: Mark available

Server Section Management

flowchart TD
    SHIFT[Shift Start] --> ASSIGN[Assign Sections]

    ASSIGN --> BALANCE[Balance by]
    BALANCE --> TABLES_COUNT[Table Count]
    BALANCE --> COVERS[Expected Covers]
    BALANCE --> EXPERIENCE[Server Experience]

    TABLES_COUNT --> SECTIONS[Create Sections]
    COVERS --> SECTIONS
    EXPERIENCE --> SECTIONS

    SECTIONS --> SERVER1[Server 1: Tables 1-4]
    SECTIONS --> SERVER2[Server 2: Tables 5-8]
    SECTIONS --> SERVER3[Server 3: Tables 9-12]

    subgraph "Section Display"
        MAP[Floor Map]
        COLOR[Color by Server]
        STATUS[Table Status]
    end

    SERVER1 --> MAP
    SERVER2 --> MAP
    SERVER3 --> MAP

    subgraph "Rotation"
        NEXT[Next Available]
        ROUND_ROBIN[Round Robin]
        MANUAL[Manual Assign]
    end

    style SECTIONS fill:#e8f5e9

Table Merging and Splitting

flowchart TD
    REQUEST[Large Party Request] --> CHECK[Check Available Tables]

    CHECK --> ADJACENT{Adjacent Tables?}
    ADJACENT -->|Yes| MERGE[Merge Tables]
    ADJACENT -->|No| ALTERNATIVES[Find Alternatives]

    MERGE --> SELECT[Select Tables]
    SELECT --> COMBINE[Create Combined Table]
    COMBINE --> UPDATE_CAPACITY[Update Capacity]
    UPDATE_CAPACITY --> SEAT_LARGE[Seat Large Party]

    ALTERNATIVES --> WAIT_OPTION[Wait for Large Table]
    ALTERNATIVES --> SPLIT_OPTION[Split Party]

    WAIT_OPTION --> ESTIMATE_TIME[Estimate Wait]
    SPLIT_OPTION --> TWO_TABLES[Seat at 2 Tables]

    subgraph "Merge Rules"
        RULE1[Same Section]
        RULE2[Compatible Heights]
        RULE3[No Blocking Paths]
    end

    subgraph "After Party Leaves"
        UNMERGE[Unmerge Tables]
        RESET_EACH[Reset Each Table]
        AVAILABLE_SEPARATE[Mark Available]
    end

    SEAT_LARGE --> UNMERGE

Floor Plan Data Model

erDiagram
    VENUE ||--o{ FLOOR : has
    FLOOR ||--o{ FLOOR_SECTION : contains
    FLOOR_SECTION ||--o{ TABLE : contains
    TABLE ||--o{ TABLE_SESSION : has
    TABLE_SESSION ||--o{ POS_TRANSACTION : generates

    VENUE {
        string id PK
        string tenantId FK
        string name
        string address
        json operatingHours
    }

    FLOOR {
        string id PK
        string venueId FK
        string name
        int level
        json layoutData
    }

    FLOOR_SECTION {
        string id PK
        string floorId FK
        string name
        string code
        boolean isActive
        json boundaries
    }

    TABLE {
        string id PK
        string sectionId FK
        string number
        int minCapacity
        int maxCapacity
        enum shape
        json position
        enum status
        string serverId FK
    }

    TABLE_SESSION {
        string id PK
        string tableId FK
        string reservationId FK
        int guestCount
        timestamp seatedAt
        timestamp leftAt
        string serverId FK
    }

Table Status Display

flowchart TD
    subgraph "Status Colors"
        GREEN[Green: Available]
        YELLOW[Yellow: Reserved]
        BLUE[Blue: Seated]
        RED[Red: Occupied]
        GRAY[Gray: Cleaning]
        BLACK[Black: Blocked]
    end

    subgraph "Status Info"
        TIME[Time in Status]
        SERVER[Assigned Server]
        GUEST[Guest Name]
        COVERS[Cover Count]
    end

    subgraph "Table Actions"
        SEAT_ACTION[Seat Party]
        MERGE_ACTION[Merge Tables]
        BLOCK_ACTION[Block Table]
        TRANSFER[Transfer Table]
        VIEW_ORDER[View Order]
    end

    GREEN --> SEAT_ACTION
    GREEN --> MERGE_ACTION
    GREEN --> BLOCK_ACTION

    BLUE --> VIEW_ORDER
    BLUE --> TRANSFER

    RED --> VIEW_ORDER
    RED --> TRANSFER

Turn Time Analytics

flowchart LR
    subgraph "Turn Time Components"
        SEAT_TIME[Seating: 5 min]
        ORDER_TIME[Ordering: 10 min]
        COOK_TIME[Cooking: 20 min]
        EAT_TIME[Dining: 30 min]
        PAY_TIME[Payment: 10 min]
        CLEAN_TIME[Cleaning: 5 min]
    end

    SEAT_TIME --> ORDER_TIME --> COOK_TIME --> EAT_TIME --> PAY_TIME --> CLEAN_TIME

    subgraph "Metrics"
        TOTAL[Total Turn: 80 min]
        COVERS_HOUR[Covers/Hour: 45]
        REV_SEAT[Rev/Seat: $42]
    end
gantt
    title Table #5 Timeline
    dateFormat HH:mm
    axisFormat %H:%M

    section Session 1
    Reserved        :r1, 18:00, 30m
    Seated          :s1, 18:30, 10m
    Dining          :d1, 18:40, 50m
    Payment         :p1, 19:30, 10m
    Cleaning        :c1, 19:40, 10m

    section Session 2
    Available       :a2, 19:50, 10m
    Walk-in Seated  :s2, 20:00, 10m
    Dining          :d2, 20:10, 60m

Reservation Reminders

flowchart TD
    CREATE[Reservation Created] --> SCHEDULE[Schedule Reminders]

    SCHEDULE --> R1[24h Reminder]
    SCHEDULE --> R2[2h Reminder]
    SCHEDULE --> R3[Arrival Check]

    R1 --> SEND1[Send SMS/Email]
    R2 --> SEND2[Send SMS]
    R3 --> CHECK_IN[Check-in Request]

    SEND1 --> CONFIRM1{Confirmed?}
    CONFIRM1 -->|Yes| UPDATE_CONFIRMED[Update Status]
    CONFIRM1 -->|No Response| R2

    SEND2 --> CONFIRM2{Confirmed?}
    CONFIRM2 -->|Yes| READY_TABLE[Prepare Table]
    CONFIRM2 -->|Cancel| RELEASE[Release Table]
    CONFIRM2 -->|No Response| R3

    CHECK_IN --> ARRIVE{Guest Arrives?}
    ARRIVE -->|Yes| SEAT[Seat Guest]
    ARRIVE -->|No + Grace| WAIT_GRACE[Wait 15 min]
    WAIT_GRACE --> NO_SHOW[Mark No-Show]
    NO_SHOW --> RELEASE

    style SEAT fill:#e8f5e9
    style RELEASE fill:#fff3e0