Діюча інтеграція з Pharmapoint
Цей сценарій підходить для аптечних мереж, у яких вже налаштована та працює інтеграція з Pharmapoint.
1 Обов'язкові методи та вимоги для роботи зі SkarbOne
Для коректної роботи SkarbOne необхідно необхідно реалізувати наступні API методи:
1. Вивантаження довідників
| № | API методи | Опис |
|---|---|---|
| 1 | Довідник товарів | Для роботи з рецептами необхідна прив'язка до бази Pharmapoint: передавайте максимально повні дані за штрихкодами, кодами Моріон та кодами дистриб'юторів |
| 2 | Довідник фармацевтів | Вивантажується з прив'язкою до аптек для автоматичного створення акаунтів та надання доступу в SkarbOne |
| 3 | Довідник лікарів | Вивантажується за потреби, якщо потрібне внесення даних лікаря безпосередньо в чек |
2. Вивантаження залишків аптеки
| № | API методи | Опис |
|---|---|---|
| 1 | Вивантаження залишків аптеки | Вивантажується для забезпечення актуальності даних про наявність товарів та їх вартість у системі.
|
3. Вивантаження замовлень
| № | API методи | Опис |
|---|---|---|
| 1 | Замовлення | Синхронізація статусів замовлень між маркетплейсом, мобільним додатком та вашою обліковою системою |
| 2 | Отримання відмінених замовлень | Отримання онлайн-замовлень, які були скасовані в додатку SkarbOne або на маркетплейсі, але попередньо створені в обліковій системі. Такі замовлення підлягають обробці та скасуванню в обліковій системі |
| 3 | Необроблені замовлення | Отримання всіх необроблених замовлень по аптечній мережі |
| 4 | Отримання всіх необроблених замовлень в аптеці | Отримання необроблених замовлень у конкретній аптеці |
Опис усіх полів, що використовуються в замовленні, міститься на сторінці Оновлення замовлень
2 Статуси замовлень та алгоритм дій з обліковою системою
| № | Статус | Опис |
|---|---|---|
| 1 | created | Нове замовлення. Передано від клієнта в обробку |
| 2 | in_process_by_operator | Опрацьовується оператором (серверно клієнтом) |
| 3 | processed_by_operator | Опрацьовано оператором (серверно клієнтом) |
| 4 | got_in_pharmacy | Отримано в аптеці |
| 5 | in_process_by_pharmacy | Опрацьовується в аптеці |
| 6 | processed_by_pharmacy | Опрацьовано в аптеці |
| 7 | check_by_online_site | Продано онлайн. Клієнт успішно завершив покупку безпосередньо через інтерфейс онлайн-майданчика (мобільного додатка або сайту) |
| 8 | check | Продаж (направляється аптечною мережею як підтвердження Продажу) |
| 9 | canceled_by_marketplace | Скасовано майданчиком. Скасування надійшло ззовні (не з додатка) |
| 10 | canceled | Відміна (направляється аптечною мережею як підтвердження Відміни) |
-
Статуси, що встановлюються ТІЛЬКИ в обліковій системі (додаток їх не ставить):
created,in_process_by_operator,processed_by_operator,got_in_pharmacy,in_process_by_pharmacy,check,canceled_by_marketplace. -
Статуси, що приходять з API (обробляються в обліковій системі):
processed_by_pharmacy,check_by_online_site,canceled.
2.1 Обробка замовлень зі статусом created
При отриманні замовлення зі статусом created аптека повинна:
-
Створити замовлення в системі. Аптека може виконати фіскалізацію замовлення в обліковій системі.
-
Якщо замовлення фіскалізовано в додатку облікова система повинна своєчасно отримати поточний статус замовлення та оновити його (за умови що облікова система підключена до мережі).
2.2 Обробка замовлень зі статусом check_by_online_site
При отриманні замовлення зі статусом check_by_online_site аптека повинна:
- Перевірити наявність замовлення в базі облікової системи за його ідентифікатором (ID).
- Якщо замовлення відсутнє — створити його.
Створення відбувається без подальшої фіскалізації
- Прийняти замовлення, обробити всі необхідні поля та викликати метод Оновлення замовлень.
- Надіслати статус
check.
Аптека не буде отримувати ці замовлення в методах отримання необроблених замовлень.
2.3 Обробка замовлень зі статусом canceled_by_marketplace
При отриманні замовлення зі статусом canceled_by_marketplace аптека повинна перевірити наявність замовлення в обліковій системі:
-
Якщо замовлення є в в обліковій системі - скасувати замовлення в обліковій системі, викликати метод Оновлення замовлень та відправити статус
canceled. -
Якщо замовлення відсутнє в обліковій системі - викликати метод Оновлення замовлень та та відправити статус
canceled.
Замовлення не потрапляє в необроблені та не передається.
2.4 Збереження ідентифікатора замовлення
При зміні статусу замовлення (перехід з check_by_online_site → check) через метод Оновлення замовлень, облікова система повинна зберігати значення поля drugstore_order_number (номер замовлення), згенерований у мобільному додатку.
Поле drugstore_order_number є унікальним ідентифікатором для операцій списання та нарахування в межах програми лояльності. Його збереження є важливим для запобігання дублюванню операцій з бонусами (повторного нарахування або списання бонусів)
2.5 Передача фінансових та бонусних полів в масиві goods
Під час виклику методу Оновлення замовлень, облікова система повинна повертати у складі товарних позицій ті самі фінансові та бонусні поля, які були отримані разом із замовленням.
Оскільки при оновленні замовлення товарні позиції перезаписуються в базі, відсутність цих полів призведе до повної втрати інформації про знижки та використані бонуси.
2.5.1 Обов'язкові поля в масиві goods
У кожній товарній позиції необхідно передавати такі поля:
| № | Поле | Опис |
|---|---|---|
| 1 | customer_discount | Знижка за всю позицію за результатом аналізу акцій |
| 2 | customer_paid_by_bonus | Сума, що була оплачена бонусами (за всю позицію) |
| 3 | customer_bonus | Кількість бонусів, нарахованих за позицію |
| 4 | discount | Знижка, що не стосується програми лояльності (включає округлення) |
| 5 | surcharge | Надбавка |
Якщо значення для будь-якого з перелічених полів в масиві goods відсутнє — необхідно передавати значення 0, або не передавати поле взагалі
2.5.2 Приклад фрагменту запиту
[
{
"external_drugstore_id": "57864",
"order_number": "3M-P3-5A-P0",
"status_name": "check",
"goods": [
{
"local_goods_id": "0076044f-7a7b-41fd-ad70-64554af9aefa",
"price": 198.5,
"quantity": 0.2,
"batch": "02b557c0-a9b6-11f0-9026-005056962e80",
"customer_discount": 0,
"customer_paid_by_bonus": 5,
"customer_bonus": 0.4,
"discount": 0.2,
"surcharge": 0
}
]
}
]
2.6 Метод get_all_processed_orders_by_period
Метод get_all_processed_orders_by_period використовується аптечною мережею для регулярного отримання замовлень в обліковій системі та їх актуалізації відповідно до статусу в системі Pharmapoint.
Застосовується для формування повної картини замовлень і чеків в обліковій системі.
Ознайомитися з документацією можна на сторінці Отримання всіх оброблених замовлень за період.
Аптечна мережа має забезпечити постійний запит даних через цей метод для актуалізації статусів замовлень у своїй базі.
-
Якщо замовлення відсутнє в обліковій системі — його необхідно створити з поточним статусом, отриманим з API.
-
Якщо замовлення вже є в обліковій системі — необхідно оновити його статус на той, що передає маркетплейс.
При отриманні замовлень через метод get_all_processed_orders_by_period, необхідно обробляти лише два статуси:
| № | Статус | Дія |
|---|---|---|
| 1 | processed_by_pharmacy | Оброблено в аптеці. Якщо замовлення нове — створити його. Встановити стан Готовий до видачі. Виконати резервування товарів / зняття з залишків |
| 2 | canceled | Відміна. Якщо замовлення існує в обліковій системі — скасувати його (розформувати). Якщо замовлення в обліковій системі немає — ігнорувати запис |
При зміні статусу в локальній базі 1С після отримання даних з цього методу, не потрібно повторно надсилати цей же статус назад на маркетплейс