Fiscalization: відмінності між версіями
м Eswikiadm перейменував сторінку з Інструкція з фіскалізації транзакцій (EasyPay + Checkbox) на Fiscalization |
|||
| (Не показані 18 проміжних версій ще одного користувача) | |||
| Рядок 1: | Рядок 1: | ||
{{DISPLAYTITLE:Fiscalization }} | |||
== 1. Попередні умови == | == 1. Попередні умови == | ||
| Рядок 4: | Рядок 5: | ||
* Бути зареєстрованим у сервісі '''Checkbox''': https://checkbox.ua | * Бути зареєстрованим у сервісі '''Checkbox''': https://checkbox.ua | ||
* Мати в | * Мати в Checkbox: | ||
** зареєстровану | ** зареєстровану касу | ||
** створеного | ** створеного касира | ||
<br> | <br> | ||
== 2. Дані, які потрібно надати EasyPay == | == 2. Дані, які потрібно надати EasyPay == | ||
----Після реєстрації в Checkbox | ----Після реєстрації в Checkbox необхідно '''надіслати менеджеру EasyPay на email''': | ||
'''Ключ ліцензії каси (licenseKey)''' | |||
'''Ключ ліцензії каси''' | |||
[[Файл:Ключ ліцензії.png|центр|міні|600x600пкс]] | [[Файл:Ключ ліцензії.png|центр|міні|600x600пкс]] | ||
<br> | '''<br> | ||
'''PIN-код касира''' | |||
'''serviceKey''', з якого | '''[[Файл:Пін код.png|центр|міні|600x600пкс]] | ||
'''serviceKey''', з якого будуть фіскалізуватися транзакції | |||
== 3. Робота зі змінами == | ⚠️ Без передачі цих даних фіскалізація працювати не буде. | ||
<br> | |||
== 3. Робота зі змінами та часові обмеження == | |||
---- | ---- | ||
* Зміна | |||
=== '''3.1 Автоматична робота зі змінами''' === | |||
* Зміна '''відкривається автоматично''' разом із першою фіскалізованою транзакцією за день | |||
* Зміна '''автоматично закривається о 23:45''' | * Зміна '''автоматично закривається о 23:45''' | ||
* Мерчанту не потрібно відкривати або закривати зміну вручну | |||
<br> | |||
=== '''3.2 Налаштування автозакриття каси в Checkbox''' === | |||
У кабінеті Checkbox необхідно обовʼязково встановити автозакриття каси на 23:45 (не раніше). | |||
EasyPay додатково виконує '''автоматичне закриття''' кас о 23:40, але налаштування в кабінеті Checkbox використовується '''як додатковий запобіжник''' для коректної роботи фіскалізації. | |||
<br> | |||
=== 4. Загальна схема роботи | === '''3.3 Період перезміни (23:30 – 00:00)''' === | ||
У проміжок часу з 23:30 до 00:00 в EasyPay та Checkbox відбувається перезміна. | |||
У цей період: | |||
* транзакції та чеки можуть перебувати в статусі обробки | |||
* '''фактична фіскалізація таких транзакцій виконується вже новим днем''' | |||
* це є штатною поведінкою системи та '''не потребує дій з боку Мерчанта''' | |||
<br> | |||
=== '''3.4 Обмеження на ручні дії в Checkbox''' === | |||
Під час роботи з фіскалізацією через EasyPay: | |||
* '''заборонено виконувати''' будь-які ручні дії з касою або чеками через: | |||
** Checkbox.Kasa | |||
** Checkbox Manager | |||
* уся фіскалізація, відкриття/закриття змін та обробка чеків '''виконується EasyPay автоматично''' | |||
<br> | |||
== 4. Загальна схема роботи == | |||
----[[Файл:Схема.png|центр|міні|400x400пкс]] | ----[[Файл:Схема.png|центр|міні|400x400пкс]] | ||
# Мерчант створює замовлення (<code>createOrder</code>) з параметрами фіскалізації | # Мерчант створює замовлення (<code>createOrder</code>) з параметрами фіскалізації | ||
# EasyPay ініціює фіскалізацію в сервісі Checkbox | # EasyPay ініціює фіскалізацію в сервісі Checkbox | ||
| Рядок 40: | Рядок 73: | ||
== 5. Створення платежу з фіскалізацією == | == 5. Створення платежу з фіскалізацією == | ||
----Для фіскалізації транзакції в методі: | ----Для фіскалізації транзакції в методі: | ||
<code>POST /api/merchant/createOrder</code> | |||
<syntaxhighlight lang="json"> | |||
потрібно передати обʼєкт <code>fiscalization</code>. | |||
=== 5.1. Приклад запиту <code>createOrder</code> === | |||
----<syntaxhighlight lang="json"> | |||
{ | |||
"order": { | |||
"serviceKey": "MERCHANT-TEST-XXXX", | |||
"orderId": "Fiscalization29", | |||
"description": "Test for fiscalization", | |||
"amount": 3, | |||
"isOneTimePay": false, | |||
"additionalItems": { | |||
"Merchant.UrlNotify": "http://notifysigncheckexample.com" | |||
} | |||
}, | |||
"fiscalization": { | |||
"licenseKey": "test8d2f483fafef", | |||
"receiptType": "Url", | |||
"receipt": { | |||
"goods": [ | |||
{ | |||
"good": { | |||
"code": "9999", | |||
"name": "Wine", | |||
"price": 1.5 | |||
}, | |||
"quantity": 2 | |||
} | |||
], | |||
"payments": [ | |||
{ | { | ||
"type": "CASHLESS", | |||
"value": 3 | |||
} | |||
] | |||
} | |||
} | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== 6. Обʼєкт fiscalization | == 6. Обʼєкт <code>fiscalization</code> == | ||
---- | ---- | ||
=== 6.1 Загальна структура === | === '''6.1. Загальна структура''' === | ||
<table style="width:100%; border-collapse:collapse; border-spacing:0;"> | <table style="width:100%; border-collapse:collapse; border-spacing:0;"> | ||
<tr style="border-bottom:1px solid #e6e6e6;"> | <tr style="border-bottom:1px solid #e6e6e6;"> | ||
| Рядок 117: | Рядок 151: | ||
</table> | </table> | ||
<br> | <br> | ||
==== '''6.2 receipt''' ==== | |||
=== '''6.2 receipt''' === | |||
<!-- 6.2 Обʼєкт receipt --> | <!-- 6.2 Обʼєкт receipt --> | ||
<table style="width:100%; border-collapse:collapse; border-spacing:0;"> | <table style="width:100%; border-collapse:collapse; border-spacing:0;"> | ||
<tr style="border-bottom:1px solid #e6e6e6;"> | <tr style="border-bottom:1px solid #e6e6e6;"> | ||
| Рядок 142: | Рядок 174: | ||
</table> | </table> | ||
=== '''6.3 goods[ ]''' === | <br> | ||
==== '''6.3 goods[ ]''' ==== | |||
<!-- 6.3 Масив goods[] --> | |||
<table style="width:100%; border-collapse:collapse; border-spacing:0;"> | <table style="width:100%; border-collapse:collapse; border-spacing:0;"> | ||
<tr style="border-bottom:1px solid #e6e6e6;"> | <tr style="border-bottom:1px solid #e6e6e6;"> | ||
| Рядок 176: | Рядок 210: | ||
</table> | </table> | ||
<br> | <br> | ||
'''Валідація:''' | |||
price × quantity = value у payments | |||
==== '''6.4 payments[ ]''' ==== | |||
<table style="width:100%; border-collapse:collapse; border-spacing:0;"> | |||
<tr style="border-bottom:1px solid #e6e6e6;"> | |||
<th style="text-align:left; padding:12px 16px;">Поле</th> | |||
<th style="text-align:left; padding:12px 16px;">Тип</th> | |||
<th style="text-align:left; padding:12px 16px;">Обовʼязкове</th> | |||
<th style="text-align:left; padding:12px 16px;">Опис</th> | |||
</tr> | |||
<tr style="border-bottom:1px solid #efefef;"> | |||
<td style="padding:16px;">type</td> | |||
<td style="padding:16px;">string</td> | |||
<td style="padding:16px;">✅</td> | |||
<td style="padding:16px;">Завжди <code style="background:#f3f3f3; padding:2px 6px; border-radius:6px;">"CASHLESS"</code> | |||
</td> | |||
</tr> | |||
<tr style="border-bottom:1px solid #efefef;"> | |||
<td style="padding:16px;">value</td> | |||
<td style="padding:16px;">decimal</td> | |||
<td style="padding:16px;">✅</td> | |||
<td style="padding:16px;">Сума платежу</td> | |||
</tr> | |||
</table> | |||
<br> | |||
== 7. Перевірка статусу фіскалізації == | |||
----<br> | |||
<p style="border: 1px solid #9ACD32; background-color: rgba(192, 255, 192, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;"> | |||
<span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span> | |||
<span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/fiscalization/check</span> | |||
</p> | |||
=== Приклад запиту === | |||
<syntaxhighlight lang="json"> | |||
{ | |||
"orderId": "Fiscalization29", | |||
"transactionid": 111111, | |||
"serviceKey": "MERCHANT-TEST-XXXX" | |||
} | |||
</syntaxhighlight> | |||
=== Можливі статуси === | |||
* '''<code>Accepted</code>''' — фіскалізація успішна | |||
* '''<code>InProcess</code>''' — в обробці | |||
* '''<code>Declined</code>''' — помилка | |||
<br> | |||
== 8. Повернення коштів (<code>CancelOrder</code>) == | |||
---- | |||
=== Часткове повернення === | |||
'''Умови:''' | |||
* транзакція була фіскалізована | |||
* повертається частина товарів | |||
'''<br> | |||
'''Особливості:''' | |||
* обʼєкт <code>fiscalization</code> '''обовʼязковий''' | |||
* передаються '''тільки товари та суми''', які повертаються | |||
<br> | |||
=== Повне повернення === | |||
* повертається вся сума платежу | |||
* обʼєкт <code>fiscalization</code> можна '''не передавати''' | |||
Поточна версія на 13:52, 28 січня 2026
1. Попередні умови
Для фіскалізації транзакцій мерчант повинен:
- Бути зареєстрованим у сервісі Checkbox: https://checkbox.ua
- Мати в Checkbox:
- зареєстровану касу
- створеного касира
2. Дані, які потрібно надати EasyPay
Після реєстрації в Checkbox необхідно надіслати менеджеру EasyPay на email:
Ключ ліцензії каси (licenseKey)

PIN-код касира

serviceKey, з якого будуть фіскалізуватися транзакції
⚠️ Без передачі цих даних фіскалізація працювати не буде.
3. Робота зі змінами та часові обмеження
3.1 Автоматична робота зі змінами
- Зміна відкривається автоматично разом із першою фіскалізованою транзакцією за день
- Зміна автоматично закривається о 23:45
- Мерчанту не потрібно відкривати або закривати зміну вручну
3.2 Налаштування автозакриття каси в Checkbox
У кабінеті Checkbox необхідно обовʼязково встановити автозакриття каси на 23:45 (не раніше).
EasyPay додатково виконує автоматичне закриття кас о 23:40, але налаштування в кабінеті Checkbox використовується як додатковий запобіжник для коректної роботи фіскалізації.
3.3 Період перезміни (23:30 – 00:00)
У проміжок часу з 23:30 до 00:00 в EasyPay та Checkbox відбувається перезміна.
У цей період:
- транзакції та чеки можуть перебувати в статусі обробки
- фактична фіскалізація таких транзакцій виконується вже новим днем
- це є штатною поведінкою системи та не потребує дій з боку Мерчанта
3.4 Обмеження на ручні дії в Checkbox
Під час роботи з фіскалізацією через EasyPay:
- заборонено виконувати будь-які ручні дії з касою або чеками через:
- Checkbox.Kasa
- Checkbox Manager
- уся фіскалізація, відкриття/закриття змін та обробка чеків виконується EasyPay автоматично
4. Загальна схема роботи

- Мерчант створює замовлення (
createOrder) з параметрами фіскалізації - EasyPay ініціює фіскалізацію в сервісі Checkbox
- Checkbox формує фіскальний чек
- Статус фіскалізації та URL чека:
- надсилаються в callback, або
- доступні через метод
fiscalization/check
- У разі повернення коштів використовується метод
CancelOrder
5. Створення платежу з фіскалізацією
Для фіскалізації транзакції в методі:
POST /api/merchant/createOrder
потрібно передати обʼєкт fiscalization.
5.1. Приклад запиту createOrder
{
"order": {
"serviceKey": "MERCHANT-TEST-XXXX",
"orderId": "Fiscalization29",
"description": "Test for fiscalization",
"amount": 3,
"isOneTimePay": false,
"additionalItems": {
"Merchant.UrlNotify": "http://notifysigncheckexample.com"
}
},
"fiscalization": {
"licenseKey": "test8d2f483fafef",
"receiptType": "Url",
"receipt": {
"goods": [
{
"good": {
"code": "9999",
"name": "Wine",
"price": 1.5
},
"quantity": 2
}
],
"payments": [
{
"type": "CASHLESS",
"value": 3
}
]
}
}
}
6. Обʼєкт fiscalization
6.1. Загальна структура
| Поле | Тип | Обов'язкове | Опис |
|---|---|---|---|
| licenseKey | string | ✅ | Ключ ліцензії каси Checkbox |
| receiptType | string | ✅ | Завжди "Url" |
| receipt | object | ✅ | Дані фіскального чека |
6.2 receipt
| Поле | Тип | Обовʼязкове | Опис |
|---|---|---|---|
| goods | array | ✅ | Перелік товарів |
| payments | array | ✅ | Інформація про оплату |
6.3 goods[ ]
| Поле | Тип | Обовʼязкове | Опис |
|---|---|---|---|
| good.code | string | ✅ | Код товару |
| good.name | string | ✅ | Назва товару |
| good.price | decimal | ✅ | Ціна за одиницю |
| quantity | decimal | ✅ | Кількість (до 3 знаків після коми) |
Валідація:
price × quantity = value у payments
6.4 payments[ ]
| Поле | Тип | Обовʼязкове | Опис |
|---|---|---|---|
| type | string | ✅ | Завжди "CASHLESS"
|
| value | decimal | ✅ | Сума платежу |
7. Перевірка статусу фіскалізації
POST /api/merchant/fiscalization/check
Приклад запиту
{
"orderId": "Fiscalization29",
"transactionid": 111111,
"serviceKey": "MERCHANT-TEST-XXXX"
}
Можливі статуси
Accepted— фіскалізація успішнаInProcess— в обробціDeclined— помилка
8. Повернення коштів (CancelOrder)
Часткове повернення
Умови:
- транзакція була фіскалізована
- повертається частина товарів
Особливості:
- обʼєкт
fiscalizationобовʼязковий - передаються тільки товари та суми, які повертаються
Повне повернення
- повертається вся сума платежу
- обʼєкт
fiscalizationможна не передавати