Отримання чека з доступними акціями (з операціями списання і нарахування)
URI: /api/v1/promotion/analyze-after-sell
Метод використовується для отримання чека з доступними акціями, з виконанням операцій списання та нарахування бонусів.
Запит виконується методом POST у json форматі з даними.
⚠️ Запит повинен містити заголовок Accept: application/json
Параметри запиту
Ім'я | Тип | Обов'язковий | Опис |
---|---|---|---|
drugstore_id | string | Так | Ідентифікатор аптеки (з бази даних аптеки) |
cash_register_number | string | Так | Ідентифікато р каси |
pharmacist_id | string | Так | Ідентифікатор фармацевта |
customer | array | null | Ні | Дані покупця |
customer.phone | string | null | Ні | Номер телефона покупця |
customer.card_number | string | null | Ні | Номер бонусної карти покупця |
customer.confirmation_code | string |null | Ні | Код підтвердження списання бонусних балів |
customer.amount_of_bonuses_to_write_off | numeric | null | Ні | Кількість бонусів для списання |
document | array | Так | Дані чека |
document.id | string | Так | Унікальний ідентифікатор (GUID) документу (чек) ⚠️ GUID повинен бути ідентичним document.id в запиті analyze_before_sell |
document.number | string | Так | Внутрішній номер чека |
document.fiscal_number | string | Так | Фіскальний номер чека |
document.date | date | Так | Дата і час формування чека, в форматі Y-m-d H:i Формат часу - 24 години |
document.amount_of_cash | float | null | Ні | Готівка, яку дав покупець |
document.amount_of_change_to_bonus | float | null | Ні | Кількість решти яку перевести в бонус |
document.content | array | Так | Товари в чеку |
document.content.*.id | string | Так | Унікальний ідентифікатор (GUID) позиції в чеку |
document.content.*.goods_id | string | Так | Ідентифікатор товару |
document.content.*.quantity | numeric | Так | Кількість товару в чеку |
document.content.*.price_buy | numeric | Так | Закупівельна вартість |
document.content.*.price_retail | numeric | Так | Роздрібна вартість |
document.content.*.active | boolean | Ні | Параметр товару в чеку true - нараховувати бонуси і знижки false - не нараховувати бонуси і знижки |
channel | string | null | Ні | Канал продажу:
|
source | string | null | Ні | Торговий майданчик:
|
увага
- Кожен клієнт (аптека) підтверджує списання бонусів тільки якщо сума списання більше певної суми X. Для списання бонусів, сума яких більше X, необхідно передати параметр amount_of_bonuses_to_write_off та confirmation_code
- Якщо сума списання менше X, то запитувати код підтвердження не потрібно і достатнь о передати параметр amount_of_bonuses_to_write_off
- Кожна аптека встановлює своє значення суми X
Приклад запиту
Запит: /api/v1/promotion/analyze-after-sell
{
"drugstore_id": "969",
"cash_register_number": "7890",
"pharmacist.id": "000001",
"customer": {
"phone": "380997654321",
"card_number": "969000000013",
"confirmation_code": "199928",
"amount_of_bonuses_to_write_off": 11
},
"document": {
"id": "f2a28abd-34d3-4ea1-9153-5beb50cd56ca",
"number": "1234",
"fiscal_number": "86960",
"date": "2023-03-30 23:20",
"document.amount_of_cash": 205,
"document.amount_of_change_to_bonus": 0.5,
"content": [
{
"id": "f2a28abd-34d3-4ea1-9153-5beb50cd56ca",
"goods_id": "1057426",
"quantity": 5.5,
"price_buy": 15.75,
"price_retail": 22.5,
"active":true
}
]
},
"channel": "offline",
"source":null
}
інформація
Алгоритм відправки запитів із обробкою помилок та повторними спробами знаходиться за посиланням
Параметри відповіді
Ім'я | Тип | Опис |
---|---|---|
document | object | Параметри чека |
document.id | string | Унікальний ідентифікатор (GUID) документу (чек) |
document.number | string | Внутрішній номер чека |
document.date | string | Дата і час формування чека |
document.bonus_to_write_off | float | Кількість бонусів для списання |
document.bonus_to_write_off_max_amount | float | Кількість бонусів доступна до списання в поточному стані документу |
document.bonus_to_accrue_from_change | float | Кількість решти яку переведено в бонус |
document.amount_of_cash | float | Готівка, яку дав покупець |
document.amount_of_change | float | Решта, яку треба дати покупцю |
document.content | list[object] | Товари в чеку |
document.content.id | string | Унікальний ідентифікатор (GUID) позиції в чеку |
document.content.goods_id | string | Ідентифікатор товару |
document.content.quantity | float | Кількість товару в чеку |
document.content.price_buy | float | Закупівельна вартість |
document.content.price_retail | float | Роздрібна в артість |
document.content.price_new | float | Ціна товару з урахуванням знижок. Якщо немає ніяких знижок - дублюється роздрібна ціна. Якщо є знижка - ціна з урахуванням знижки або фіксована ціна на товар |
document.content.discount | float | Сума або відсоток знижки |
document.content.bonus | float | Кількість отриманих бонусів за покупку |
document.content.quantity_part | float | Частина товарів по акції |
promotion | object | Параметри акції |
promotion.name | string | Назва акції |
promotion.date_from | string | Дата з якої діє акція |
promotion.date_to | string | Дата до якої діє акція |
promotion.type | object | Тип акції |
promotion.type.name | string | Назва типу акції |
promotion.type.description | string | Опис типу акції |
promotion.parameters | object | Параметри знижки |
promotion.parameters.bonus_percent | object | Параметри бонуса у % від роздрібної ціни |
promotion.parameters.bonus_percent.name | string | Назва параметра бонуса |
promotion.parameters.bonus_percent.description | string | Опис параметра бонуса |
promotion.parameters.bonus_percent.value | float | Значення параметра бонуса |
pharmacist | object | Параметри фармацевта |
pharmacist.id | string | Ідентифікатор фармацевта |
pharmacist.full_name | string | Повне ім'я фармацевта |
pharmacist.email | string | Електронна пошта фармацевта |
pharmacist.phone | string | Номер телефона фармацевта |
customer | object | Параметри покупця |
customer.customer | object | Параметри покупця |
customer.customer.first_name | string | Ім'я покупця |
customer.customer.last_name | string | Прізвище покупця |
customer.customer.middle_name | string | По-батькові покупця |
customer.customer.email | string | Електронна пошта покупця |
customer.customer.city | string | Місто проживання покупця |
customer.customer.phone | string | Номер телефона покупця |
customer.customer.card_number | string | Номер бонусної карти покупця |
customer.customer.birthday | string | Дата народження покупця |
customer.customer.bonuses | float | Кількість бонусів на рахунку покупця |
customer.customer.type | object | Тип карти |
customer.customer.type.id | string | ID типу карти |
customer.customer.type.name | string | Назва типу карти |
message | string | Повідомлення про результат списання/нарахування бонусів |
code | integer | Код відповіді від сервера |
Приклад успішної відповіді
200 OK
Відповідь: /api/v1/promotion/analyze-after-sell
{
"data": {
"document": {
"id": "f2a28abd-34d3-4ea1-9153-5beb50cd56ca",
"number": "22",
"date": "2023-03-30 11:20",
"total": 118.75,
"total_initial": 123.75,
"bonus_to_write_off": 0,
"bonus_to_write_off_max_amount": 0,
"bonus_to_accrue": 4.5,
"bonus_to_accrue_from_change": 0.5,
"amount_of_cash": 205,
"amount_of_change": 0,
"content": [
{
"id": "f2a28abd-34d3-4ea1-9153-5beb50cd56ca",
"goods_id": "1057426",
"price_buy": 15.75,
"price_retail": 22.5,
"price_new": 22.5,
"quantity": 5.5,
"discount": null,
"bonus": 4.5,
"quantity_part": null
}
]
},
"pharmacist": {
"id": "000001",
"full_name": "Test",
"email": "[email protected]",
"phone": "380991234567"
},
"promotion": {
"name": "Test for analyze 2",
"date_from": "2023-03-26",
"date_to": "2023-04-01",
"type": {
"name": "Бонус у відсотках",
"description": "Нарахувати бонус при купівлі SKU, у відсотку від роздрібної ціни в торговій точці"
},
"parameters": {
"bonus_percent": {
"name": "bonus_percent",
"description": "Розмір бонусу у % від роздрібної ціни",
"value": 20
}
}
},
"customer": {
"customer": {
"first_name": "Anna",
"last_name": "Anna",
"middle_name": "Anna",
"email": "[email protected]",
"city": "Полтава",
"phone": "380997654321",
"card_number": "969000000013",
"birthday": "08.08.1993",
"bonuses": 9715,
"type": {
"id": null,
"name": null
}
}
}
}
Приклади неуспішних відповідей
Код підтвердження для списання бонусів не існує
Відповідь: 400 Bad Request
{
"message": "Код підтвердження для списання бонусів не існує"
}
Термін дії коду підтвердження для списання бонусів завершений
Відповідь: 400 Bad Request
{
"message": "Термін дії коду підтвердження для списання бонусів завершений"
}
Кількість бонусів до списання не відповідає заявленій
Відповідь: 400 Bad Request
{
"message": "Кількість бонусів до списання не відповідає заявленій"
}
Необхідний код підтвердження списання бонусів, можна списати без підтвердження до X бонусів
Відповідь: 400 Bad Request
{
"message": "Необхідний код підтвердження списання бонусів, можна списати без підтвердження до X бонусів"
}
Код підтвердження для списання бонусів вже використано
Відповідь: 400 Bad Request
{
"message": "Код підтвердження для списання бонусів вже використано"
}
Недостатньо бонусів на рахунку
Відповідь: 400 Bad Request
{
"message": "Недостатньо бонусів на рахунку"
}
Для даного чеку немає активних акцій
Відповідь: 400 Bad Request
{
"message": "Для даного чеку немає активних акцій"
}
Подарункового сертифікату не існує
Відповідь: 400 Bad Request
{
"message": "Подарункового сертифікату не існує"
}