Замовлення за столом (Room Service)

Це сервіс замовлення по меню з номера, наприклад з номера у готелі.

1.Створення та оплата замовлення на столі

Схема роботи команди createOrderOnTable

  1. Перевірка чи вже існує подібне замовлення, у разі якщо це замовлення на якомусь з етапів було відхилене, або чи вже існує декілька подібних замовлень (що є результатом розділення замовлення за місцями оплати).

  2. Якщо замовлення ще не існує -> перевіряємо наявність блюд-> якщо блюд немає -> отримуємо помилку.

  3. Якщо замовлення ще не існує -> перевіряємо наявність блюд-> якщо наявність блюд підтверджується -> створюємо замовлення.

  4. Якщо замовлення створено або існувало(и) -> намагаємось роздрукувати нероздруковані .

  5. Якщо замовлення має статус "New" або "Bill" - намагаємось сплатити його.

Якщо замовлення мають id від rootOrder, що виник у результаті розділення після попередньої спроби оплати, то спроба оплатити замовлення буде проходити через нього.

F.A.Q

Q.Які стадії рахунку приймає Expirenza?

A. NEW, BILL, PAYED


Q.Яка різниця між стадіями NEW і BILL ?

A.NEW - ПреЧек не роздруковано, BILL - створено, ПреЧек роздруковано.

У основі розробки лежить SDK Syrve який не включає статус Deleted.


Q.Чи використовуються getBill та payBill з основної гілки API Expirenza для Room Service?

A. Ні, не використовуються.


Опис параметрів запиту createOrderOnTable

Приклад запиту команди createOrderOnTable
{
    "operation": "createOrderOnTable",
    "rID": "manual16",
      
    "externalId": "003",
    "originName": "expz",
    "tableId":"aaabfb9b-ba7f-076e-0183-59bcbe5a0068",
    "items":[
  
        {
            "id":"428dc245-9112-4709-b007-c6dc8c2744f3",
            "quantity": 1.0,
            "modifiers": [
                {
                    "id": "f9a40cf6-7f4e-4086-8872-d0c165e59040",
                    "groupId":"3a72b59e-d5e3-4a2e-b634-1bc1cbf7432e",
                    "quantity": 1
                }
            ]
        }
    ]
  },
  "fiscalData": [
    {
      "key": "ЕКВАЙЕР",
      "value": "Universal Bank"
    },
    {
      "key": "ТЕРМІНАЛ"
    },
    {
      "key": "КОМІСІЯ",
      "value": "0 грн."
    },
    {
      "key": "ВИД ОПЕРАЦІЇ",
      "value": "Оплата"
    },
    {
      "key": "ЕПЗ",
      "value": "53754141******56"
    },
    {
      "key": "ПС",
      "value": "MC"
    },
    {
      "key": "RRN",
      "value": "010025711364"
    },
    {
      "key": "КОД. АВТ",
      "value": "319431"
    }
  ]
}
NameTypeRequiredDescription

operation

String

✔️

Назва команди

rID

String

✔️

Ідентифікатор запиту

externalId

String

✔️

Ідентифікатор запиту із зовнішньої системи

originName

String

✔️

Ідентифікатор зовнішньої системи

tableId

String

✔️

Ідентифікатор столу

items

[object]

✔️

Блюда

id

String

Ідентифікатор

quantity

Integer

Кількість

modifiers

[object]

Модифікатори

id

String

✔️

Ідентифікатор модифікатору

groupId

String

Ідентифікатор групи модифікатору, якщо модифікатору має групу

quantity

Integer

✔️

Кількість модифікаторів

fiscalData

[object]

Дані для фіксального чеку

key

String

✔️

value

String

✔️

Опис параметрів відповіді createOrderOnTable

Приклад відповіді команди createOrderOnTable

    "rID": "manual119",
    "result": {
        "success": true,
        "stage": "PAYED",
        "rootOrder": {
            "orderId": "a162cb7f-4edd-46a7-9824-4c5dfde4326f",
            "orderNumber": 372,
            "resultSum": 1450.5,
            "orderStatus": "Deleted",
            "tableNumber": 372,
            "waiterId": "123",
            "waiter": "John Doe"
        },
        "ordersSummary": [
            {
                "orderId": "b79b3997-7491-4518-91e0-a04a89a28437",
                "orderNumber": 373,
                "resultSum": 1100.0,
                "orderStatus": "Closed",
                "closed": "2023.04.12 16:17:14",
                "tableNumber": 1,
                "waiterId": "123",
                "waiter": "John Doe"
            },
            {
                "orderId": "6cc87f61-c6d4-4b7f-8a52-229102b09748",
                "orderNumber": 374,
                "resultSum": 350.5,
                "orderStatus": "Closed",
                "closed": "2023.04.12 16:17:15",
                "tableNumber": 1,
                "waiterId": "123",
                "waiter": "John Doe"
            }
        ],
        "guests": [
            {
                "name": "Гiсть",
                "dishes": [
                    {
                        "categoryId": "04e705cf-0f9f-36cd-0183-a2be58c00094",
                        "category": "Не фискальный",
                        "name": "Пицца - Маргарита",
                        "count": 2.0,
                        "sum": 1100.0,
                        "orderNumber": 373,
                        "type": "dish",
                        "dishId": "428dc245-9112-4709-b007-c6dc8c2744f3"
                    },
                    {
                        "categoryId": "-1",
                        "category": "Блюдо без категории",
                        "name": "Петрушка",
                        "count": 2.0,
                        "sum": 0.0,
                        "orderNumber": 373,
                        "type": "modifier",
                        "dishId": "f9a40cf6-7f4e-4086-8872-d0c165e59040"
                    }
                ]
            },
            {
                "name": "Гiсть",
                "dishes": [
                    {
                        "categoryId": "04e705cf-0f9f-36cd-0183-a2be58c00093",
                        "category": "Фискальный",
                        "name": "Kopke",
                        "count": 1.0,
                        "sum": 350.5,
                        "orderNumber": 374,
                        "type": "dish",
                        "dishId": "50391936-2733-48a1-980c-5b7a3c9635f6"
                    }
                ]
            }
        ]
    }
}
NameTypeRequiredDescription

rID

string

✔️

Ідентифікатор

запиту

result

object

✔️

none

success

boolean

✔️

Ознака успіху

stage

string

✔️

Стадія

paySubstate

string

Під-статус з процесу оплати

errorMessage

string

Сповіщення про помилку

rootOrder

object

✔️

Інформація про початкове замовлення

orderId

string

✔️

Ід замовлення

orderNumber

integer

✔️

Номер

resultSum

number

✔️

Сума замовлення

orderStatus

string

✔️

Статус

tableNumber

integer

✔️

Номер столу

waiterId

string

✔️

Ід офіціанта

waiter

string

✔️

Ім'я офіціанта

ordersSummary

[object]

✔️

Інфо о замовленнях, отриманих у результаті оплати

orderId

string

✔️

ід

orderNumber

integer

✔️

Номер

resultSum

integer

✔️

Сума

orderStatus

string

✔️

Статус

closed

string

Дата закриття

tableNumber

integer

✔️

Номер столу

waiterId

string

✔️

Ід офіціанта

waiter

string

✔️

Ім'я офіціанта

guests

[object]

✔️

Деталіровка

name

string

✔️

Ім'я гостя

dishes

[object]

✔️

Позиції замовлення

categoryId

string

✔️

Ід категорії

category

string

✔️

Категорія

name

string

✔️

Найменування блюда

count

integer

✔️

Кількість

sum

integer

✔️

Сума

orderNumber

integer

✔️

Номер замовлення

type

string

✔️

Тип блюда

dishId

string

✔️

Код блюда


2.Перевірка наявності блюд

Дана команда потрібна для попередньої перевірки наявності блюд у POS-системі, перед створенням інвойсу.

Приклад: Блюдо за якихось причин (як приклад: у POS-ситемі блюдо знаходиться у stop-list) не доступне до замовлення, виключити ситуацію коли гість закладу оплачує замовлення, а ресторан не може приготувати дану страву.

Логіка роботи команди checkProductsRestrictions

  1. Якщо в позиції є modifiers, то визначаємо їх загальну кількість.

    1. Кількість = кількість модифікаторів у позиції * кількість страв, до якого прив'язан modifiers

  2. Перевіряємо доступність блюд для замовлення і записуємо недостатню кількість у exceedQuantity

  3. Якщо exceedQuantity = 0, то available = true.

  4. Якщо exceedQuantity > 0, то available = false.

Опис команди - checkProductsRestrictions

Приклад запиту команди checkProductsRestrictions
{
    "operation": "checkProductsRestrictions",
    "rID": "manual16",
     
    "items":[
        {
            "id":"428dc245-9112-4709-b007-c6dc8c2744f3",
            "quantity": 1.0,
            "modifiers": [
                {
                    "id": "f9a40cf6-7f4e-4086-8872-d0c165e59040",
                    "quantity": 1
                }
            ]
        }
    ]
}
NameTypeRequiredDescription

rID

string

✔️

Код запиту

items

[object]

✔️

none

id

string

✔️

Код блюда

quantity

integer

✔️

Кількість

modifiers

[object]

Модифікатори

id

string

✔️

Код блюда

quantity

integer

✔️

Кількість

Опис параметрів відповіді checkProductsRestrictions

Приклад відповіді команди checkProductsRestrictions
{
    "rID": "manual16",
    "result": {
        "checkResult": "Allowed",
        "itemResults": [
            {
                "id": "428dc245-9112-4709-b007-c6dc8c2744f3",
                "name": "Пицца - Маргарита",
                "available": true,
                "exceedQuantity": 0.0
            },
            {
                "id": "f9a40cf6-7f4e-4086-8872-d0c165e59040",
                "name": "Петрушка",
                "available": true,
                "exceedQuantity": 0.0
            }
        ]
    }
}
NameTypeRequiredDescription

result

object

✔️

none

rID

string

✔️

Ідентификатор запиту

checkResult

string

✔️

Результат перевірки . Можливі значення описано тут.

itemResults

[object]

✔️

none

available

boolean

✔️

Ознака доступності

exceedQuantity

integer

✔️

Недостатня кількість

id

string

✔️

Код продукту (блюда або модифікатора)

name

string

✔️

Найменування продукту


Last updated