Отримання чека з доступними акціями (з операціями списання і нарахування)
URI: /api/v1/promotion/analyze-after-sell
Метод використовується для отримання чека з доступними акціями, з виконанням операцій списання та нарахування бонусів.
Запит виконується методом POST у json форматі з даними.
⚠️ Запит повинен містити заголовок Accept: application/json
Параметри запиту
| Ім'я | Тип | Обов'язковий | Опис |
|---|---|---|---|
| drugstore_id | string | Так | Ідентифікатор аптеки (з бази даних аптеки) |
| cash_register_number | string | Так | Ідентифікатор каси |
| pharmacist_id | string | Так | Ідентифікатор фармацевта |
| 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 - не нараховувати бонуси і знижки |
| 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 | Ні | Кількість бонусів для списання |
| channel | string | null | Ні | Канал продажу:
|
| source | string | null | Ні | Торговий майданчик:
|
| promocode | string | Ні | Промокод (для спрацювання акцій які діють за промокодом) |
увага
- Кожен клієнт (аптека) підтверджує списання бонусів тільки якщо сума списання більше певної суми 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,
"promocode": "PROMO123"
}
інформація
Алгоритм відправки запитів із обробкою помилок та повторними спробами знаходиться за посиланням
Параметри відповіді
| Ім'я | Тип | Опис |
|---|---|---|
| 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.promocode | string / null | Значення введеного промокоду (для спрацювання акцій які діють за промокодом)/ 🛈 Якщо не введено — null |
| document.promocode_applied | boolean | Підсумковий статус застосування промокоду для всього чека. У документі набуває значення:
true, у двох інших — false, а в загальному полі документа — true |
| 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.action | string | Відображає тип зміни по позиції чеку. Якщо позиція була продубльована, значення буде insert. В інших випадках використовується update |
| document.content.priority_max | integer | Пріоритет акції, яка спрацювала на дану позицію товару в чеку |
| document.content.promotion_ids | array | Ідентифікатор акції, яка заст осована для даної позиції товару в чеку |
| document.content.promocode_applied | boolean | Ознака застосування промокоду: приймає значення true, якщо промокод був успішно застосований до даної позиції товару |
| 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 | Назва типу карти |
| customer.bonus_accounts | objects | Блок містить деталізацію по подарунковим бонусам клієнта |
| customer.bonus_accounts.type | string | Тип бонусного рахунку |
| customer.bonus_accounts.amount | float | Кількість подарункових бонусів, доступна для оплати товару з даного бонусного рахунку |
| customer.bonus_accounts.date_from | string | Дата та час активації бонусів 🛈 Початковий час, з якого бонуси можуть бути використані |
| customer.bonus_accounts.date_to | string | Дата та час згоряння бонусів 🛈 Кінцевий термін, після настання якого бонуси ста ють недійсними (неактивними) і не можуть бути списані |
| customer.bonus_accounts.write_off_percent_from_total | float | Максимальний відсоток від загальної суми чека, який можна оплатити бонусами з цього рахунку 🛈 Значення 100 означає, що цими бонусами можна покрити всю суму покупки, якщо не встановлено інших обмежень |
| customer.bonus_accounts.comment | string | Коментар. Передається назва подарункових бонусів |
| customer.bonus_accounts.goods_ids | array | Список ID товарів, на які поширюються обмеження списання бонусів
|
| message | string | Повідомлення про результат списання / нарахування бонусів |
| code | integer | Код відповіді від сервера |
Приклад успішної відповіді
200 OK
Відповідь: /api/v1/promotion/analyze-after-sell
{
"data": {
"document": {
"id": "43a3bf87-0e4e-11f1-82dd-107b4448c38c",
"number": "096-000007995",
"date": "2026-02-20 13:21",
"total": 326.7,
"total_initial": 326.7,
"bonus_to_write_off": 0,
"bonus_to_accrue": 0,
"bonus_to_accrue_from_change": 0,
"amount_of_cash": 0,
"amount_of_change": 0,
"bonus_to_write_off_max_amount": 4.53,
"promocode": "PROMO123",
"promocode_applied": false,
"content": [
{
"id": "814c0006-0349-11f1-8cb9-00505693efdb",
"goods_id": "UT-00032031",
"price_buy": 302.53,
"price_retail": 326.7,
"price_new": 326.7,
"quantity": 1,
"discount": null,
"bonus": null,
"action": "update",
"priority_max": 30,
"promotion_ids": [
"6f82fbd7-a119-40a2-b60a-65f1cc677836"
],
"promocode_applied": false
}
]
},
"pharmacist": {
"id": "00000000184",
"full_name": "Пінязенко Ірина Леонтіївна",
"email": "[email protected]",
"phone": "380675575639"
},
"promotion": [
{
"id": "6f82fbd7-a119-40a2-b60a-65f1cc677836",
"name": "2 - Універсальна Гаевского FARMACIA",
"created_at": "2025-02-14 15:45:23",
"date_from": "2025-02-14",
"date_to": "2050-02-14",
"type": {
"name": "Бонус",
"description": "Бонус при купівлі SKU у торговій точці в грн або %"
},
"parameters": [
{
"name": "bonus_value",
"description": "Розмір бонусу",
"value": 3
},
{
"name": "bonus_type",
"description": "Метод розрахунку бонусу ",
"value": "%"
},
{
"name": "enable_markup_percent_min",
"description": "Задіяти мінімальний відсоток націнки",
"value": true
}
]
},
{
"id": "f2220475-18b4-4fcc-828a-a286d12c0a15",
"name": "2.1 - Універсальна Гаевского FARMACIA(нові клієнти)",
"created_at": "2025-02-20 15:56:26",
"date_from": "2025-02-20",
"date_to": "2050-02-20",
"type": {
"name": "Бонус",
"description": "Бонус при купівлі SKU у торговій точці в грн або %"
},
"parameters": [
{
"name": "bonus_type",
"description": "Метод розрахунку бонусу ",
"value": "%"
},
{
"name": "enable_markup_percent_min",
"description": "Задіяти мінімальний відсоток націнки",
"value": true
},
{
"name": "bonus_value",
"description": "Розмір бонусу",
"value": 3
}
]
}
],
"customer": {
"customer": {
"first_name": "І",
"last_name": "П",
"middle_name": "Б",
"email": null,
"city": null,
"phone": "380933741801",
"card_number": "3809337418017",
"birthday": null,
"bonuses": 4.53,
"type": {
"id": "ded7f987-719c-41ac-ad53-fe26ab83490d",
"name": "Універсальна"
}
},
"bonus_accounts": [
{
"type": "gift",
"amount": 20,
"date_from": "2025-09-29 00:00:00",
"date_to": "2025-10-06 00:00:00",
"write_off_percent_from_total": 100,
"comment": "ТЕСТ Деталізація подарункових бонусів 3",
"goods_ids": [
"UT-00030353",
"UT-00117645",
"UT-00000056",
"UT-00030373",
"UT-00030389",
"UT-00030374",
"UT-00030357",
"UT-00030348",
"00-00025964",
"00-00003149"
]
},
{
"type": "gift",
"amount": 12,
"date_from": "2025-09-29 00:00:00",
"date_to": "2025-10-06 00:00:00",
"write_off_percent_from_total": 100,
"comment": "ТЕСТ Деталізація подарункових бонусів 3",
"goods_ids": [
"UT-00034001",
"UT-00034003",
"UT-00034002"
]
}
]
}
}
}