# Оплата рахунку і закриття замовлення

## Повідомлення для фіскалізації

<details>

<summary>payBill</summary>

{% code lineNumbers="true" %}

```json
{
    "rID" : "2021-03-13 00:32:04.942046#UP57RxE",
    "operation" : "payBill",
    "billId" : "5B100B39-CE42-4F3D-8770-807A28CA0500",
    "sum" : 129.20,
    "tips" : 19.24,
    "fiscalData":[
      {
         "key":"ЕКВАЙЕР",
         "value":"Universal Bank"
      },
      {
         "key":"ТЕРМІНАЛ",
         "value":"XPZ10101010"
      },
      {
         "key":"КОМІСІЯ",
         "value":"N грн."
      },
      {
         "key":"ВИД ОПЕРАЦІЇ",
         "value":"Оплата"
      },
      {
         "key":"ЕПЗ",
         "value":"123456******12"
      },
      {
         "key":"ПС",
         "value":"МС|VISA"
      },
      {
         "key":"RRN",
         "value":"1234567890"
      },
      {
         "key":"КОД. АВТ",
         "value":"1234"
      },
      {
         "key":"ФОРМА ОПЛАТИ",
         "value":"БЕЗГОТІВКОВА"
      },
      {
         "key":"ЗАСОБ ОПЛАТИ",
         "value":"ПЕРЕКАЗ ЧЕРЕЗ QR-КОД"
      }
   ],
}
```

{% endcode %}

<pre><code>❗️ Обов'язкові елементи запиту: rID, operation, billId, sum. 
<strong>  fiscalData - Блок інформації щодо транзакції для друку на фіскальному чеку.
</strong></code></pre>

</details>

## Відповідь

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

{% openapi src="<https://115752690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUrrjxJkhEuwfb0dGwW06%2Fuploads%2F08UPYIiglHvtUxOOLDJb%2FpayBill_updated.json?alt=media&token=141661ab-0403-4070-aaed-f4b9eee27b4d>" path="/callback/payBill" method="post" %}
[payBill\_updated.json](https://115752690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUrrjxJkhEuwfb0dGwW06%2Fuploads%2F08UPYIiglHvtUxOOLDJb%2FpayBill_updated.json?alt=media\&token=141661ab-0403-4070-aaed-f4b9eee27b4d)
{% endopenapi %}

<details>

<summary>Payload example:<code>/callback/payBill</code></summary>

{% code title="JSON" lineNumbers="true" %}

```json
{
  "billId": "string"
  "guests": [
    {
      "dishes": [
        {
          "category": "Кухня",
          "categoryId": "18afdzgu53a",
          "checkNumber": "string",
          "count": 1.3,
          "dishId": "string",
          "linkedTo": "string",
          "name": "Шаурма царська",
          "orderNumber": 12365,
          "positionId": "string",
          "sum": 34.56,
          "taxCategory": "налоги",
          "taxCategoryId": "18afdzgu534",
          "type": "modifier"
        }
      ],
      "name": "Гость 1"
    }
  ],
  "orderNumber": 235,
  "rID": "2021-04-01 09:39:06.021078#BpOI0gO",
  "stackTraceMessage": "string",
  "state": "SUCCESS",
  "substate": "string",
  "waiter": "Петро",
  "waiterId": "f14da21a-5be9-4736-9ece-420bd310bc8a"
}
```

{% endcode %}

</details>

Результатом закриття замовлення у POS-системі можуть бути 2 статуси - FAIL та SUCCESS. \
Для статусу FAIL існують суб-статуси, які дозволяють правильно комунікувати проблему співробітникам закладу.

{% hint style="danger" %}
**Важливим є реалізація усіх підстатусів**, тому як Expirenza має знати у якому суб-статусі знаходиться замовлення, а ресторан має знати що саме пішло не так.
{% endhint %}

Якщо наведені вище сценарії не покривають всіх потреб вашої інтеграції, будь ласка, зверніться до *аккаунт-менеджера* ресторану з детальним описом потреби вашої інтеграції.&#x20;

Ми розглянемо можливість додавання додаткового суб-статусу в Expirenza API.

## Підстатуси FAIL

### WRONG\_REQUEST\_SUM

Description:

&#x20;Сума, що прийшла у запиті для оплати, більша або менша від суми замовлення в POS-системі.&#x20;

&#x20;Така ситуація може виникнути, якщо замовлення було відредаговано у проміжку між  отриманням оплати від гостя та закриттям замовлення у POS-системі.

Обробка substate:

1. Система спише оплату з гостя та покаже повідомлення “Оплата успішна”;.
2. Система надішле персоналу повідомлення в бот з рекомендацією повернути замовлення у початковий стан (скасувати зміни), щоб розблокувати закриття замовлення, або повернути оплату гостю та попросити оплатити заново.
3. Система повторюватиме спроби закрити замовлення з певним інтервалом.

***

### CASHIERS\_SHIFT\_CLOSED

Description:

&#x20;Неможливо закрити замовлення через те, що в POS-системі закрита касова зміна.

Обробка substate:

1. Система спише оплату з гостя та покаже повідомлення “Оплата успішна”.
2. Система відправить персоналу повідомлення у бот з рекомендацією відкрити касову зміну, щоб розблокувати закриття замовлення у POS-системі.
3. Система повторюватиме спроби закрити замовлення з певним інтервалом.

***

### PRINTER\_ERROR

Description:

&#x20;Неможливо закрити замовлення через проблему з фіскальним принтером.

Обробка substate:

1. Система спише оплату з гостя та покаже повідомлення "Оплата успішна".
2. Система надішле персоналу повідомлення у бот з рекомендацією виправити проблему з фіскальним принтером, щоб розблокувати закриття замовлення у POS-системі.
3. Система повторюватиме спроби закрити замовлення з певним інтервалом.

### CLOSE\_ORDER\_BLOCKED

Description:

&#x20;Закриття замовлення заблоковано відкладеною подачею страв.&#x20;

&#x20;Наприклад:  У замовленні є нероздрукований “бігунок” на кухню або бар.

Обробка substate:

1. Система спише оплату з гостя та покаже повідомлення “Оплата успішна”.
2. Система надішле персоналу повідомлення в бот з рекомендацією видалити бігунки або передати на кухню нероздруковані “бігунки”, щоб розблокувати закриття замовлення у POS-системі.
3. Система повторюватиме спроби закрити замовлення з певним інтервалом.

***

### BILL\_IN\_USE

Description:

&#x20;Замовлення заблоковане іншим модулем POS-системи.&#x20;

&#x20;Наприклад:На даний час замовлення відкрито на касовій станції та редагується офіціантом.

Обробка substate:

1. Система спише оплату з гостя та покаже повідомлення "Оплата успішна".
2. Система відправить персоналу повідомлення у бот з рекомендацією вийти з режиму редагування замовелння на робочій станції, щоб розблокувати закриття замовлення у POS-системі.
3. Система повторюватиме спроби закрити замовлення з певним інтервалом.

***

### OTHER\_ERROR

Description:

&#x20;Інші помилки під час закриття замовлення.

Обробка суб-статусу:

1. Система спише оплату з гостя та покаже повідомлення “Оплата успішна”.
2. Система надішле персоналу повідомлення у бот з рекомендацією звернутися до служби підтримки постачальника POS-системи для закриття замовлення.
3. Система **не робитиме** повторних спроб закрити таке замовлення, а здійснить виплату ресторану за даними замовелння отриманими перед оплатою.
