Бронирование (интернет-заказ)⚓︎
Бизнес-процессы работы с заказами⚓︎
Бронирование⚓︎
Возможные варианты схем интеграции в части требований этапов жизненного цикла заказа:
С определенной периодичностью клиентское ПО должно опрашивать API для получения информации о новых или измененных заказах. Все полученные с сайта заказы должны быть приняты и обработаны клиентским ПО.
ВНИМАНИЕ!
Продажа товара по заказам с сайта должна производиться в ценах, не выше, чем указанные в документе заказа, с обязательным контролем максимально допустимой наценки для ЖНВЛС. Указанная цена берется из поля prc.
Заказ может быть трех видов:
- Товар только из наличия
- Товар только по предзаказу
- Комбинированый, товар как из наличия, так и по предзаказу
Новый заказ⚓︎
При создании заказа на сайте формируется статус на заголовок с кодом 100
. В этом статусе в поле rcDate сайт передает информацию о времени сброса резерва, которое аптечное ПО должно контролировать.
При получении нового заказа, если присутствуют строки с товаром из наличия, клиентское ПО пытается бронировать все товары по этим строкам, в количестве, которое указано в поле qnt.
Если заказ со строками только из наличия, возможны следующие варианты:
- Товары полностью зарезервировались - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом
200
на заголовок. - Товары полностью не зарезервировались - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом
202
на заголовок. - Товары зарезервировались частично - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом
201
на заголовок, а так же возвращаются строки заказа, по которым не хватило количества в наличии (код строки в поле rowId и незарезервированное количество в поле qntUnrsv).
Если заказ со строками только по предзаказу, клиентское ПО должно сформировать и вернуть новый статус (с новым уникальным идентификатором) с кодом 200
на заголовок.
В случае комбинированного заказа возможны варианты:
- Товары из наличия полностью зарезервировались и принялись строки предзаказа - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом
200
на заголовок. - Товары из наличия полностью не зарезервировались или зарезервировались частично, и принялись строки предзаказа - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом
201
на заголовок, а так же возвращаются строки заказа, по которым не хватило количества в наличии (код строки в поле rowId и незарезервированное количество в поле qntUnrsv).
Если в документе присутствуют строки по предзаказу, то клиентское ПО должно разместить заказы на эти товары у поставщиков (API возвращает в строках заказа информацию об ИНН поставщика в поле supInn, взятую из сводного прайс-листа юрлица) и cформировать и вернуть новый статус (с новым уникальным идентификатором) с кодом 203
на заголовок заказа.
Редактирование заказа⚓︎
На сайте и в мобильном приложении для пользователя отсутствует возможность редактировать заказ после его создания. Редактирование активных заказов разрешено:
- Операторам колл-центра АСНА до статуса 213 - Заказ собран (укомплектован);
- Сотрудникам аптеки(первостольникам) вне зависимости от статуса заказа в учетной системе аптеки.
При редактировании заказа на сайте формируется статус на заголовок с кодом 108
. В этом статусе в поле rcDate сайт передает информацию о времени сброса резерва, которое аптечное ПО должно контролировать. Если при редактировании заказа на сайте была удалена строка, то на эту строку формируется статус с кодом 102
. Отредактированный заказ ПОЛНОСТЬЮ (заголовок, строки и созданные статусы) передается в аптеку.
При получении отредактированного заказа, если присутствуют строки с товаром из наличия, клиентское ПО пытается бронировать все товары по этим строкам, в количестве, которое указано в поле qnt.
Если заказ со строками только из наличия, возможны следующие варианты:
- Товары полностью зарезервировались - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом
200
на заголовок. - Товары полностью не зарезервировались - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом
202
на заголовок. - Товары зарезервировались частично - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом
201
на заголовок, а так же возвращаются строки заказа, по которым не хватило количества в наличии (код строки в поле rowId и незарезервированное количество в поле qntUnrsv).
Если заказ со строками только по предзаказу, клиентское ПО должно сформировать и вернуть новый статус (с новым уникальным идентификатором) с кодом 200
на заголовок.
В случае комбинированного заказа возможны варианты:
- Товары из наличия полностью зарезервировались и принялись строки предзаказа - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом
200
на заголовок. - Товары из наличия полностью не зарезервировались или зарезервировались частично, и принялись строки предзаказа - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом
201
на заголовок, а так же возвращаются строки заказа, по которым не хватило количества в наличии (код строки в поле rowId и незарезервированное количество в поле qntUnrsv).
Если в документе присутствуют строки по предзаказу, то клиентское ПО должно разместить заказы на эти товары у поставщиков (API возвращает в строках заказа информацию об ИНН поставщика в поле supInn, взятую из сводного прайс-листа юрлица) и cформировать и вернуть новый статус (с новым уникальным идентификатором) с кодом 203
на заголовок заказа.
При полном поступлении товаров по предзаказу в аптеку, ПО должно отправить статус 207
. В ответ сайт отправит в аптеку статус 104
, содержащий новое время сброса резерва, которое ПО должно контролировать.
Сбор (комплектация) заказа⚓︎
После того как заказ в аптеке был собран (укомплектован), необходимо отправить статус на заголовок 213
. Отправка этого статуса инициируется из аптечного ПО, после того как сотрудник аптеки выставил в ПО статус полной комплектации заказа. Этот статус может формироваться из ПО сотрудником аптеки после каждого изменения комплектации заказа (например, в случае редактирования заказа покупателем). Если заказ содержал в себе строки предзаказа, то можно отправлять этот статус из ПО в случае подтверждения сотрудником аптеки полного прихода товара по ИЗП (предзаказу) и комплектации заказа.
Отмена покупателем⚓︎
При отмене заказа покупателем на сайте формируется статус на заголовок с кодом 111
. Аптека формирует и возвращает новый статус (с новым уникальным идентификатором) подтверждения отмены заказа покупателем с кодом 211
. Заказ снимается с резерва.
Отмена заказа аптекой⚓︎
В случае если у аптеки выставлен параметр cancelOrder, аптека должна иметь возможность отменить заказ. При отмене формируется и возвращается новый статус (с новым уникальным идентификатором) отмены заказа по инициативе аптеки с кодом 212
. Заказ снимается с резерва.
Изменение времени бронирования⚓︎
Покупатель может попросить продлить время бронирования заказа. Если аптека принимает решение о продлении бронирования, то формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом 204
с измененной датой снятия товара с резерва (поле rcDate).
Сброс резерва⚓︎
Клиентское ПО должно контролировать дату снятия заказа с резерва. Эту дату сайт передает в статусах 100
, 104
, 108
. По достижению даты снятия товара с резерва, если товар не был выкуплен, формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом 205
. Заказ снимается с резерва.
Выкуп заказа⚓︎
Возможны следующие варианты: Если заказ был полностью выкуплен, то формируется и возвращается статус с кодом 210
. Если был выкуплен только резерв из наличия и(или) товар, частично пришедший по предзаказу, но не выкуплен весь заказ, то формируется и возвращается статус с кодом 209
на каждую выкупленную строку. Этот статус может формироваться несколько раз, на каждый из чеков.
Статусы заказов, формируемые сайтом⚓︎
Код | Название | Описание |
---|---|---|
100 | New | Новый заказ. Формируется на заголовок |
102 | OrderRowCancelled | Отмена строки на сайте. Формируется на строку |
104 | ChangeReservationTimeBySite | Изменение времени бронирования с сайта. Формируется на заголовок |
108 | OrderEditedByBuyer | Заказ отредактирован покупателем на сайте. Формируется на заголовок |
109 | PartiallyPurchased | Резерв выкуплен, ожидает предзаказ. Формируется на заголовок только в случае онлайн-оплаты |
110 | Purchased | Заказ выкуплен. Формируется на заголовок только в случае онлайн-оплаты |
111 | CancelledByBuyer | Отмена заказа покупателем на сайте. Формируется на заголовок |
Статусы заказов, формируемые аптекой⚓︎
Код | Название | Описание |
---|---|---|
200 | Accepted | Заказ принят аптекой. Формируется на заголовок |
201 | PartiallyAccepted | Заказ частично принят аптекой. Формируется на заголовок |
202 | Rejected | Отказ со стороны аптеки. Формируется на заголовок |
203 | WaitingForPreorder | Ожидание предзаказа. Формируется и на строку и на заголовок |
204 | ChangeReservationTime | Изменение времени бронирования. Формируется на заголовок |
205 | ReserveCancelled | Резерв сброшен. Формируется на заголовок |
206 | ExceededDeliveryTime | Превышение ожидаемого срока поставки. Формируется на заголовок |
207 | PreorderCompleted | Предзаказ выполнен. Формируется на заголовок |
208 | EditingIsForbidden | Редактирование строки запрещено. Формируется на строку |
209 | PartiallyPurchased | Резерв выкуплен, ожидает предзаказ. Формируется на каждую выкупленную строку |
210 | Purchased | Заказ выкуплен. Формируется на заголовок |
211 | CancellationAccepted | Отмена заказа подтверждена. Формируется на заголовок |
212 | CancelledByStore | Заказ отменен аптекой (если у нее есть такие права). Формируется на заголовок |
213 | Assembled | Заказ собран (укомплектован). Формируется на заголовок |
214 | IssuedToCourier | Выдан курьеру (для АСНА-МАРКЕТ). Формируется на заголовок |
215 | Delivered | Доставлен (для АСНА-МАРКЕТ). Формируется на заголовок |
ВНИМАНИЕ!
При получении в пакете нескольких статусов на один и тот же заголовок заказа или строку, ваше ПО обязано применить их к этому заголовку или строке четко в порядке их создания. Для этого нужно предварительно провести сортировку статусов по 2-м полям, полю ts, а затем по полю date в порядке возрастания этих дат.
Бизнес-процессы работы с заказами АСНА-Маркет⚓︎
Работа с заказами АСНА-МАРКЕТ аналогична работе с обычными заказами Заказы (бронирование) с некоторыми изменениями, указанными ниже.
В заказы добавились 2 новых статуса со стороны аптеки, 214
Выдан курьеру и 215
Доставлен.
В заголовках заказов появилось 2 дополнительных поля delivery (признак доставки) и deliveryInfo (информация о доставке).
При заказах с доставкой нет необходимости контролировать время резервирования в аптеке, поэтому текущие поля с временем резерва на всем жизненном цикле заказа = NULL.
Доставка⚓︎
Если заказ имел признак необходимости доставки(поле delivery), то при выдаче заказа курьеру ПО должно формировать и отсылать статус 214
. При этом в поле cmnt можно передать ФИО курьера, время доставки, телефон курьера. Передача информации о курьере - не обязательна для ПО. После фактической доставки заказа покупателю, ПО обязано сформировать и отправить статус 215
.
Получение информации о заказах аптеки⚓︎
Клиенты, которые работают с сайтом АСНА, могут получать через API информацию о новых заказах, сформированных на сайте, а также информацию об изменении статусов этих заказов.
ОГРАНИЧЕНИЕ
Запрашивать заказы необходимо не чаще 1-го раза в минуту для каждой аптеки.
ВНИМАНИЕ
Необходимо иметь в ПО возможность, например, по кнопке в кассовом модуле, запросить изменения заказов, так как заказ может быть сделан на терминале и клиент сразу подойдет к кассе.
/v5/stores/{storeId}/orders_exchanger?since={since}&orderId={orderId}&excludeOwn={false|true}
Описание⚓︎
Получить информацию по заказам аптеки storeId по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА | |
since | datetime | Дата, с которой необходимо получить изменения (не включительно) в формате ISO8601 | |
orderId | GUID | Уникальный код заказа | |
excludeOwn | bool | Исключать или не исключать собственные изменения, по умолчанию true, т.е. при запросе изменений с какой-либо даты, вы получите в ответ только изменения, созданные сайтом, иначе получите назад и созданные аптекой статусы. Только для тестирования можно его выставлять в false. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
1 2 3 4 5 |
|
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. Успешный запрос. Тело запроса содержит объект заказов |
Пример ответа⚓︎
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
|
Объект ответа⚓︎
Имя | Тип | Описание |
---|---|---|
headers | Header[] | Массив заголовков заказов |
rows | Row[] | Массив строк заказов |
statuses | Status[] | Массив статусов заказов |
Объект ответа Header(заголовок)⚓︎
Имя | Тип | Описание |
---|---|---|
orderId | GUID | Уникальный код заказа. Поле необходимо протаскивать в чек, сформированный по этому заказу, для дальнейшей выгрузки этого поля в хранилище данных АСНА (передача товародвижения через FTP) |
storeId | GUID | Уникальный код аптеки, на которой сделан заказ |
issuerId | GUID | Уникальный код аптеки, которая выдает заказ (для самовывоза) |
src | string | Источник заказа («desktop», «terminal», «mobile», «cashier» и т.д.). Поле необходимо протаскивать в чек, сформированный по этому заказу, для дальнейшей выгрузки этого поля в хранилище данных АСНА (передача товародвижения через FTP). Cписок источников заказа |
num | string | Номер заказа |
date | datetime | Дата заказа в формате ISO8601 с указанием часового пояса |
name | string | Имя покупателя |
mPhone | string | Номер телефона |
payType | string | Тип оплаты |
payTypeId | int | ИД типа оплаты по справочнику АСНА |
dCard | string | Дисконтная карта |
ae | int | Признак АСНА-Экономия (0 - нет, 1 - да). Заказ с признаком АСНА-Экономия не должен редактироваться через клиентское ПО |
unionId | GUID | ИД совместной покупки |
ts | datetime | Отметка времени, в формате ISO8601. Представляет собой дату и время создания или обновления заголовка сервисом АСНА(в нулевом часовом поясе) |
delivery | bool | Признак доставки (true - необходима доставка, false - самовывоз) |
deliveryInfo | string | Информация о доставке. Содержит строку в виде экранированного JSON, который при необходимости, можно распарсить и получить данные. Поля addr - адрес доставки, cmnt - комментарий покупателя, type - тип доставки, prc - стоимость доставки, email - почта покупателя |
Пример заполнения поля deliveryInfo⚓︎
1 2 3 4 5 6 7 8 |
|
Объект ответа Row(строка заказа)⚓︎
Имя | Тип | Описание |
---|---|---|
rowId | GUID | Уникальный код строки заказа |
orderId | GUID | Уникальный код заказа |
rowType | int | Тип строки (0 - наличие, 1 - предзаказ) |
prtId | string | Уникальный код партии. На данный момент не возвращается |
nnt | int | Код товара по справочнику АСНА |
qnt | float | Количество в заказе |
prc | decimal | Цена товара в момент заказа |
prcDsc | decimal | Цена товара, обещанная покупателю в момент оформления заказа, с учетом наценки или скидки (АСНА-Экономия,акции производителей, промо-кодов и т.д.) |
dscUnion | string | Признак дисконта |
dtn | decimal | Дотация для единицы товара. Поле необходимо протаскивать в чек, сформированный по этому заказу, для дальнейшей выгрузки этого поля в хранилище данных АСНА (передача товародвижения через FTP) |
prcLoyal | decimal | Цена реализации со скидкой по программам Pfizer, AstraZeneca и Eli Lilly |
prcOptNds | decimal | Цена поставки |
supInn | string | ИНН поставщика |
dlvDate | datetime | Дата поставки в формате ISO8601 |
qntUnrsv | float | Количество незарезервированного товара |
prcFix | decimal | Фиксированная цена |
ts | datetime | Отметка времени, в формате ISO8601. Представляет собой дату и время создания или обновления строки сервисом АСНА (в нулевом часовом поясе). |
mark | int | Признак расчета цены реализации с возмещаемой скидкой от производителей, ООО "АСНА" (промо-коды). 1 - Запрещается применение по строке заказа скидки производителей на стороне аптечного ПО, 0(null) - разрешены дополнительные скидки производителей на стороне аптечного ПО |
ВАЖНО
Производители при расчёте бюджетов возмещения контролируют примененные скидки на основании отчётов, предоставленных как аптечными сетями, так и АСНА. Обработка признака Mark на стороне аптечного ПО позволит избежать:
- Двойного применения скидки - скидка по заказам asna.ru компенсируется в аптечную сеть от производителя через АСНА.
- Ошибочной выгрузки транзакций по заказам asna.ru производителю со стороны аптечной сети - скидки по подобным транзакциям со стороны производителя компенсировать не будут.
Объект ответа Status(строка статуса)⚓︎
Имя | Тип | Описание |
---|---|---|
statusId | GUID | Уникальный код статуса |
orderId | GUID | Уникальный код заказа |
rowId | GUID | Уникальный код строки заказа (заполняется только если статус на строку) |
storeId | GUID | Уникальный код аптеки |
date | datetime | Дата и время статуса |
status | int | Код статуса |
rcDate | datetime | Дата и время сброса резерва в формате ISO8601. Поле заполняется только для 100 , 108 ,104 статусов заказа |
cmnt | string | Комментарий |
ts | datetime | Отметка времени, в формате ISO8601. Представляет собой дату и время создания или обновления статуса сервисом АСНА(в нулевом часовом поясе) |
ВНИМАНИЕ!
Поле ts в заголовках, строках и статусах заказа имеет чрезвычайно важное значение для корректного получения изменений по заказам. При запросе изменений по заказам, всегда задавайте параметр since следующего запроса равным максимальному значению поля ts из всех трех массивов(заголовки, строки, статусы) предыдущего запроса. Не используйте локальное время на ваших серверах в качестве параметра since.
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Список источников заказа⚓︎
Ид | Источник | Описание |
---|---|---|
1 | asna.ru | Заказ от сервисов asna.ru |
Получение информации о заказах сети ⚓︎
Клиенты, которые работают с сайтом АСНА, могут получать через API информацию о новых заказах, сформированных на сайте, а также информацию об изменении статусов этих заказов по сети.
/v5/nets/{storeId}/orders_exchanger?since={since}&excludeOwn={false|true}
Описание⚓︎
Получить информацию по заказам сети, в которую входит аптека storeId по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА | |
since | datetime | Дата, с которой необходимо получить изменения (не включительно) в формате ISO8601 | |
excludeOwn | bool | Исключать или не исключать собственные изменения, по умолчанию true, т.е. при запросе изменений с какой-либо даты, вы получите в ответ только изменения, созданные сайтом, иначе получите назад и созданные аптекой статусы. Только для тестирования можно его выставлять в false. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
1 2 3 4 5 |
|
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. Успешный запрос. Тело запроса содержит объект заказов |
Пример ответа⚓︎
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
|
Объект ответа⚓︎
Имя | Тип | Описание |
---|---|---|
headers | Header[] | Массив заголовков заказов |
rows | Row[] | Массив строк заказов |
statuses | Status[] | Массив статусов заказов |
Объект ответа Header(заголовок)⚓︎
Имя | Тип | Описание |
---|---|---|
orderId | GUID | Уникальный код заказа. Поле необходимо протаскивать в чек, сформированный по этому заказу, для дальнейшей выгрузки этого поля в хранилище данных АСНА (передача товародвижения через FTP) |
storeId | GUID | Уникальный код аптеки, на которой сделан заказ |
issuerId | GUID | Уникальный код аптеки, которая выдает заказ (для самовывоза) |
src | string | Источник заказа («desktop», «terminal», «mobile», «cashier» и т.д.). Поле необходимо протаскивать в чек, сформированный по этому заказу, для дальнейшей выгрузки этого поля в хранилище данных АСНА (передача товародвижения через FTP). Cписок источников заказа |
num | string | Номер заказа |
date | datetime | Дата заказа в формате ISO8601 с указанием часового пояса |
name | string | Имя покупателя |
mPhone | string | Номер телефона |
payType | string | Тип оплаты |
payTypeId | int | ИД типа оплаты по справочнику АСНА |
dCard | string | Дисконтная карта |
ae | int | Признак АСНА-Экономия (0 - нет, 1 - да). Заказ с признаком АСНА-Экономия не должен редактироваться через клиентское ПО |
unionId | GUID | ИД совместной покупки |
ts | datetime | Отметка времени, в формате ISO8601. Представляет собой дату и время создания или обновления заголовка сервисом АСНА(в нулевом часовом поясе) |
delivery | bool | Признак доставки (true - необходима доставка, false - самовывоз) |
deliveryInfo | string | Информация о доставке. Содержит строку в виде экранированного JSON, который при необходимости, можно распарсить и получить данные. Поля addr - адрес доставки, cmnt - комментарий покупателя, type - тип доставки, prc - стоимость доставки, email - почта покупателя |
Пример заполнения поля deliveryInfo⚓︎
1 2 3 4 5 6 7 8 |
|
Объект ответа Row(строка заказа)⚓︎
Имя | Тип | Описание |
---|---|---|
rowId | GUID | Уникальный код строки заказа |
orderId | GUID | Уникальный код заказа |
storeId | GUID | Уникальный код аптеки, на которой сделан заказ |
rowType | int | Тип строки (0 - наличие, 1 - предзаказ) |
prtId | string | Уникальный код партии. На данный момент не возвращается |
nnt | int | Код товара по справочнику АСНА |
qnt | float | Количество в заказе |
prc | decimal | Цена товара в момент заказа |
prcDsc | decimal | Цена товара, обещанная покупателю в момент оформления заказа, с учетом наценки или скидки (АСНА-Экономия,акции производителей, промо-коды и т.д.) |
dscUnion | string | Признак дисконта |
dtn | decimal | Дотация для единицы товара. Поле необходимо протаскивать в чек, сформированный по этому заказу, для дальнейшей выгрузки этого поля в хранилище данных АСНА (передача товародвижения через FTP) |
prcLoyal | decimal | Цена реализации со скидкой по программам Pfizer, AstraZeneca и Eli Lilly |
prcOptNds | decimal | Цена поставки |
supInn | string | ИНН поставщика |
dlvDate | datetime | Дата поставки в формате ISO8601 |
qntUnrsv | float | Количество незарезервированного товара |
prcFix | decimal | Фиксированная цена |
ts | datetime | Отметка времени, в формате ISO8601. Представляет собой дату и время создания или обновления строки сервисом АСНА (в нулевом часовом поясе). |
mark | int | Признак расчета цены реализации с возмещаемой скидкой от производителей, ООО "АСНА" (промо-коды). 1 - Запрещается применение по строке заказа скидки производителей на стороне аптечного ПО, 0(null) - разрешены дополнитель=ные скидки производителей на стороне аптечного ПО |
ВАЖНО
Производители при расчёте бюджетов возмещения контролируют примененные скидки на основании отчётов, предоставленных как аптечными сетями, так и АСНА. Обработка признака Mark на стороне аптечного ПО позволит избежать:
- Двойного применения скидки - скидка по заказам asna.ru компенсируется в аптечную сеть от производителя через АСНА.
- Ошибочной выгрузки транзакций по заказам asna.ru производителю со стороны аптечной сети - скидки по подобным транзакциям со стороны производителя компенсировать не будут.
Объект ответа Status(строка статуса)⚓︎
Имя | Тип | Описание |
---|---|---|
statusId | GUID | Уникальный код статуса |
orderId | GUID | Уникальный код заказа |
rowId | GUID | Уникальный код строки заказа (заполняется только если статус на строку) |
storeId | GUID | Уникальный код аптеки |
date | datetime | Дата и время статуса |
status | int | Код статуса |
rcDate | datetime | Дата и время сброса резерва в формате ISO8601. Поле заполняется только для 100 , 108 ,104 статусов заказа |
cmnt | string | Комментарий |
ts | datetime | Отметка времени, в формате ISO8601. Представляет собой дату и время создания или обновления статуса сервисом АСНА(в нулевом часовом поясе) |
ВНИМАНИЕ!
Поле ts в заголовках, строках и статусах заказа имеет чрезвычайно важное значение для корректного получения изменений по заказам. При запросе изменений по заказам, всегда задавайте параметр since следующего запроса равным максимальному значению поля ts из всех трех массивов(заголовки, строки, статусы) предыдущего запроса. Не используйте локальное время на ваших серверах в качестве параметра since.
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Список источников заказа⚓︎
Ид | Источник | Описание |
---|---|---|
1 | asna.ru | Заказ от сервисов asna.ru |
Отправка информации о заказах⚓︎
Клиенты, которые работают с заказами с сайта АСНА, должны передавать информацию об изменениях в заказах, произошедших в аптеке, а также информацию о статусе заказов.
/v5/stores/{storeId}/orders_exchanger
Описание⚓︎
Передать информацию по заказам аптеки storeId по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Тело запроса⚓︎
Объект запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
rows | Row[] | Массив строк заказов | |
statuses | Status[] | Массив статусов заказов |
Объект запроса Row(строка заказа)⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
rowId | GUID | Уникальный код строки заказа | |
qntUnrsv | float | Количество незарезервированного товара |
Объект запроса Status(статус заказа)⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
statusId | GUID | Уникальный код статуса. Генерируется клиентским ПО | |
orderId | GUID | Уникальный код заказа. Берется из обрабатываемого заказа | |
rowId | GUID | Уникальный код строки заказа (заполняется только если статус на строку). Берется из обрабатываемого заказа | |
storeId | GUID | Уникальный код аптеки. Берется из обрабатываемого заказа | |
date | datetime | Дата и время создания статуса в формате ISO8601 с указанием часового пояса | |
status | int | Код статуса | |
rcDate | datetime | Дата и время сброса резерва в формате ISO8601 с указанием часового пояса. Поле заполняется только для 204 статуса заказа |
|
cmnt | string | Комментарий |
Ссылка на JSON схему для валидации и тестирования
Пример запроса
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
201 | Created. Данные успешно записаны |
Пример ответа⚓︎
1 |
|
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Бизнес-процесс работы с заказами Пульс ⚓︎
Требования к обработке электронных накладных интернет заказов от поставщика ФК Пульс⚓︎
По каждому интернет заказу поставщик выгружает отдельную электронную накладную.
В текущую структуру электронной накладной для аптеки добавляются новые поля:
- PRICER - розничная цена, включающая все налоги;
- IDOC - оригинальный номер интернет заказа;
- ONLINE - признак интернет-заказ, возможные значения: 1 – интернет-заказ; 0 - обычная накладная;
Если в накладной поля pricer и idoc заполнены значениями или поле online = 1, то данная накладная сформирована и выгружена в аптеку по интернет заказу покупателя.
В аптечном ПО необходимо настроить прием и обработку электронных накладных интернет заказов от поставщика ФУ Пульс по аналогии обработки накладных по заказам apteka.ru и zdravcity.ru.
Минимальные требования к ПО:
- После прихода товара с розничными ценами по электронной накладной ФК Пульс, необходимо забронировать товар(исключить из свободной продажи, отложенный чек, чек резерва и т.п..);
- Сотрудник аптеки(первостольник) должен иметь возможность по номеру заказа(IDOC) найти/скопировать содержимое оприходованной накладной интернет заказа в чек.
Дополнительные возможности:
В накладных интернет заказов от поставщика ФК Пульс выгружается информация о покупателе (ФИО, телефон и email):
- В агрегированном виде в поле: ECOM_BUYER
-
В разагрегированном виде в полях:
-
ECOM_PERS – ФИО покупателя
- ECOM_PHONE – телефон покупателя
- ECOM_MAIL – email покупателя
Каждый заказ собирается на складе поставщика в отдельный пакет/коробку и маркируется этикеткой. Скачать пример этикетки.
На этикетке присутствует штрихкод, который содержит номер заказа(IDOC) дополненный лидирующими нулями слева до 12 символов + контрольный символ.
Данная информация может быть использована в аптечном ПО, для удобства обработки заказов сотрудником аптеки – поиск заказ по ФИО, номеру телефона, email покупателя, через сканирование ШК.
Если аптека получает накладные от поставщика ФК Пульс через сервисы сводных прайс-листов PharmSM и т.п.., то для обработки интернет заказов необходимо настроить прямое получение электронных накладных от поставщика.
Для этого необходимо согласовать с поставщиком:
- Способ получение электронных накладных: Email или FTP, передать адрес для доставки электронных накладных.
- Структуру файла электронной накладной: шаблон поставщика(Скачать) или шаблон аптечного ПО(передать требования к файлу накладной).
Требования к доработке файловой выгрузки в АСНА⚓︎
Требования к доработке файловой выгрузки в АСНА, согласно Регламенту информационного обмена
Доработать логику формирования файла "Данные о товародвижении" по приходным и расходным документам интернет заказов с доставкой со склада Пульс:
Название | Тип | Описание |
---|---|---|
5) Тип документа | Целочисленный | 15 - Приход сторонний интернет-заказ, 16 - Продажи сторонний интернет-заказ, 2 – продажа через ККМ |
26) Уникальный код заказа | Строковый(40) | Уникальный внутренний код заказа. Данное поле заполняется только для расходных документов типа – 2 (Чеки), документов типа 15 (Приход сторонний интернет-заказ) и 16 (Продажи сторонний интернет-заказ) В данном поле указывать оригинальный номер заказа из электронной накладной поставщика: поле IDOC Пример: "5093447" |
27) Источник заказа | Строковый(40) | Данное поле заполняется только для расходных документов типа – 2 (Чеки), 16 (Продажи сторонний интернет-заказ) и для приходных документов типа – 15 (Приход сторонний интернет-заказ). В данном поле указывать "puls.asna.ru" |
Требования к интеграции с сайтом asna.ru⚓︎
Для работы с заказами Пульс необходимо провести упрощенную интеграцию с сайтом asna.ru, если ваше ПО не интегрированно, а именно:
- Авторизация (см. Авторизация в АСНА REST API)
- Реализовать метод, описанный ниже (Отправка информации о выкупленных заказах)
Если ваше ПО уже интегрированно с сайтом asna.ru, то п.1 из списка выше выполнять не надо. Отправка информации о выкупленных заказах может производиться одним из двух способов.
- Это можно делать при пробитии чека с заказом на кассе, но обязательно способом, не блокирующим работу кассы, например в отдельном потоке.
- Информацию о выкупленных заказах можно передавать и по расписанию, например каждые 10-15 минут.
Обязательно наличие retry-логики, попытки отправить информацию должны продолжаться до тех пор, пока не будет получен статус успешного завершения операции, если вы получали от api транзиентную(временную) ошибку.
Отправка информации о выкупленных заказах Пульс⚓︎
Клиенты, которые работают с заказами Пульс на сайте asna.ru, должны передавать на сайт информацию о выкупленных в аптеке заказах.
/v5/stores/{storeId}/redeemed_orders_pulse
Описание⚓︎
Передать информацию по выкупленным заказам Пульс аптеки storeId по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Тело запроса⚓︎
Массив строк в формате JSON, где каждая строка - номер заказа Пульс, полученный в накладной.
Пример запроса⚓︎
1 2 3 4 5 6 7 8 9 10 |
|
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
201 | Created. Данные успешно записаны |
Пример ответа⚓︎
1 |
|
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. В случае если было отправлено несколько номеров заказов и не все заказы найдены в БД, то вернется этот статус со списком заказов, которые не были найдены в БД, в теле ответа. Найденные заказы при этом будут записаны. См. пример ниже. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Пример ответа, если заказ не найден⚓︎
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Созданный: 5 августа 2021 г. 12:36:05