Розділення рахунку (Split Bill)

Для розділення рахунку необхідно відокремити окремий рахунок від оригінального замовлення з блюдами яки обрав гість для оплати.

Процес розділення рахунку

Для індикації того що конкретний рахунок можна розділити, при передачі /callback/getBill параметр "splitAvailable" має містити значення true. Для коректної роботи сервісу при передачі /callback/getBill також має бути вказаний параметр "positionId": "string"

За замовчуванням для ресторану ця функціональність вимкенна.

Для її активації зверніться до аккаунт-менеджера що веде ресторан.


При розділенні рахунку, Expirenza надсилатиме наступне повідомлення:

splitOrder
{
  
    "operation": "splitOrder",
    "rID": "manual16",
    "billId":"4afc3774-cc50-4e07-ad81-dd65f166244a",
    "controlSum":  1080.6,
    "positions": [
        {"id": "8e2ad560-938b-4972-ba60-8098aac99f8b", "quantity": 1},
        {"id": "c53e1948-7ffe-4dea-8e25-9e6773fa8768", "quantity": 1},
        {"id": "0e857f96-d53b-4649-bae0-0674c6d59496", "quantity": 1}
    ]
}

При створенні нового рахунку необхідно:

  1. Перенести потрібні позиції

  2. Скопіювати знижки (за наявності) в створене замовлення

  3. Скопіювати деталі оригінального замовлення:

    • Номер столу

    • Офіціант

    • Тип замовлення

У відповідь в коллбек ми очікуємо 2 рахунки (orders): 1) "Parent" - нова версія рахунку після відокремлення страв 2) Дочірній об'єкт - те що обрав юзер при розділенні рахунку.

Відповідь обробки операції необхідно надіслати в наступному вигляді, відповідь аналогічна getBill:

Сервіс для отримання результатів розділення рахунку

post
Header parameters
restoIdstringRequired

restoId

Body
errorCodestringOptional

Код помилки, якщо операція не успішна

errorMessagestringOptional

Текст помилки, якщо операція не успішна

rIDstringOptional

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

Example: Look for payload example: /callback/splitOrder
statestring · enumRequired

Стан

Possible values:
substatestringOptional

Підхід. TABLE_NOT_FOUND|ORDER_NOT_FOUND

Pattern: TABLE_NOT_FOUND|ORDER_NOT_FOUND
tableNumberinteger · int32Optional

Номер столу

Responses
200
OK
post
POST /callback/splitOrder HTTP/1.1
Host: api.shaketopay.com.ua
restoId: text
Content-Type: application/json
Accept: */*
Content-Length: 885

{
  "errorCode": "text",
  "errorMessage": "text",
  "orders": [
    {
      "billId": "7A051331-1C99-4DD2-9543-1585A4E21DCA",
      "bonusSum": 60.85,
      "created": "yyyy.MM.dd HH:mm:ss",
      "discounts": {},
      "guests": [
        {
          "dishes": [
            {
              "category": "Кухня",
              "categoryId": "18afdzgu53a",
              "checkNumber": "text",
              "count": 1.3,
              "dishId": "text",
              "linked": true,
              "linkedTo": "text",
              "name": "Шаурма царська",
              "orderNumber": 12365,
              "positionId": "text",
              "sum": 34.56,
              "taxCategory": "налоги",
              "taxCategoryId": "18afdzgu534",
              "type": "modifier"
            }
          ],
          "name": "Гость 1"
        }
      ],
      "isBanquetOrder": true,
      "isDelivery": true,
      "orderNumber": 256,
      "paymentType": "text",
      "pricingTime": "text",
      "rawSum": 1,
      "rootBillId": "text",
      "splitAvailable": true,
      "state": "text",
      "tableId": "qc7-sdv9",
      "totalSum": 123.35,
      "waiter": "text",
      "waiterId": "text",
      "billAmountForTips": 123.35
    }
  ],
  "rID": "Look for payload example: /callback/splitOrder",
  "state": "FAIL",
  "substate": "text",
  "tableNumber": 1
}

No content

Payload example: /callback/splitOrder
{
    "rID": "manual16",
    "state": "SUCCESS",
    "tableNumber": 1,
    "orders": [
        {
            "billId": "4afc3774-cc50-4e07-ad81-dd65f166244a",
            "orderNumber": 460,
            "totalSum": 720.4,
            "rawSum": 721.0,
            "discounts": {
                "list": [
                    {
                        "id": "4c1e2f7c-09b2-479e-90f9-5e4f67d2665d",
                        "name": "Знижка",
                        "sum": 0.6
                    }
                ]
            },
            "waiterId": "4f433631-2e15-4f05-8a70-e63eda55ce41",
            "waiter": "test",
            "guests": [
                {
                    "name": "Гость 1",
                    "dishes": [
                        {
                            "categoryId": "-1",
                            "category": "Блюдо без категорії",
                            "positionId": "aaa85a2d-8ea4-434a-a235-666bcc0c2d07",
                            "name": "Гриби",
                            "count": 2.0,
                            "sum": 0.0,
                            "orderNumber": 460,
                            "type": "dish",
                            "dishId": "f791662d-e104-4f24-a16a-643d392b7c51"
                        },
                        {
                            "categoryId": "-1",
                            "category": "Блюдо без категорії",
                            "positionId": "9319918b-3582-4de7-b678-4249be2acdcb",
                            "name": "Куриця",
                            "count": 3.0,
                            "sum": 0.0,
                            "orderNumber": 460,
                            "type": "dish",
                            "dishId": "5ea84688-bc1b-4cb1-a107-833f46cbf9cb"
                        },
                        {
                            "categoryId": "-1",
                            "category": "Блюдо без категорії",
                            "positionId": "d8bd2fd9-37ec-4017-9ba8-da686daf57cf",
                            "name": "*",
                            "count": 2.0,
                            "sum": 0.0,
                            "orderNumber": 460,
                            "type": "dish",
                            "dishId": "8edb5f44-969b-4a86-9a78-32c5a5dfba8f"
                        },
                        {
                            "categoryId": "-1",
                            "category": "Блюдо без категорії",
                            "positionId": "a1954115-dc8d-460a-8de5-e6973fe030d0",
                            "name": "Кукурудза",
                            "count": 2.0,
                            "sum": 19.4,
                            "orderNumber": 460,
                            "type": "dish",
                            "dishId": "cf56075a-c4a9-47a4-a279-2284e26afe0b"
                        },
                        {
                            "categoryId": "04e705cf-0f9f-36cd-0183-a2be58c00093",
                            "category": "Фіскальний",
                            "positionId": "d4d3e228-c093-4fc3-8101-d7f8fa8612be",
                            "name": "Kopke",
                            "count": 2.0,
                            "sum": 701.0,
                            "orderNumber": 460,
                            "type": "dish",
                            "dishId": "50391936-2733-48a1-980c-5b7a3c9635f6"
                        }
                    ]
                }
            ],
            "state": "New",
            "tableId": "aaabfb9b-ba7f-076e-0183-59bcbe5a0068",
            "isBanquetOrder": false,
            "isDelivery": false,
            "created": "2023.10.02 14:10:56",
            "bonusSum": 0.0
        },
        {
            "billId": "a11ecd3a-0fa3-4db1-88d6-975cf83da0fb",
            "orderNumber": 461,
            "totalSum": 360.2,
            "rawSum": 360.5,
            "discounts": {
                "list": [
                    {
                        "id": "4c1e2f7c-09b2-479e-90f9-5e4f67d2665d",
                        "name": "Знижка",
                        "sum": 0.3
                    }
                ]
            },
            "waiterId": "4f433631-2e15-4f05-8a70-e63eda55ce41",
            "waiter": "test",
            "guests": [
                {
                    "name": "Гiсть",
                    "dishes": [
                        {
                            "categoryId": "-1",
                            "category": "Блюдо без категорії",
                            "positionId": "8e2ad560-938b-4972-ba60-8098aac99f8b",
                            "name": "*",
                            "count": 1.0,
                            "sum": 0.0,
                            "orderNumber": 461,
                            "type": "dish",
                            "dishId": "8edb5f44-969b-4a86-9a78-32c5a5dfba8f"
                        },
                        {
                            "categoryId": "-1",
                            "category": "Блюдо без категорії",
                            "positionId": "c53e1948-7ffe-4dea-8e25-9e6773fa8768",
                            "name": "Кукурудза",
                            "count": 1.0,
                            "sum": 9.7,
                            "orderNumber": 461,
                            "type": "dish",
                            "dishId": "cf56075a-c4a9-47a4-a279-2284e26afe0b"
                        },
                        {
                            "categoryId": "04e705cf-0f9f-36cd-0183-a2be58c00093",
                            "category": "Фіскальний",
                            "positionId": "0e857f96-d53b-4649-bae0-0674c6d59496",
                            "name": "Kopke",
                            "count": 1.0,
                            "sum": 350.5,
                            "orderNumber": 461,
                            "type": "dish",
                            "dishId": "50391936-2733-48a1-980c-5b7a3c9635f6"
                        }
                    ]
                }
            ],
            "state": "New",
            "tableId": "aaabfb9b-ba7f-076e-0183-59bcbe5a0068",
            "isBanquetOrder": false,
            "isDelivery": false,
            "created": "2023.10.02 14:23:45",
            "bonusSum": 0.0
        }
    ]
}
F.A.Q

Q. Як відпрацьовується ситуація, коли одну і ту ж позицію забрали різні гості?

A. Хто перший забрав позицію - той і оплачує. Решта гостей отримають помилку.


Q. Чи можна поділити блюдо по 0.5 на гостя? Приклад: Один салат розділити на двох.

A. На цей час це зробити не можливо

Last updated