АСНА REST API
Description | Документация по АСНА REST API |
Copyright | Copyright © 2016 - 2024 Лебедев Алексей, Шибаев Николай. Online illustrations by Storyset |
Содержание
Регламент интеграции ↵
Регламент интеграции с веб-сервисами АСНА⚓︎
Перед тем как приступать к интеграции с веб-сервисами АСНА, аптечная сеть должна пройти первичную интеграцию с АСНА согласно Регламенту информационного обмена, выполнить связки справочника товаров на портале связок Alphaone.
Сервисы asna.ru и функциональные возможности аптечного ПО⚓︎
Сервисы⚓︎
Сервисы asna.ru | Описание |
---|---|
Бронирование | Возможно забронировать товар по ценам аптеки и выкупить заказ в ваших аптеках |
Подмена аптечных цен | Возможность транслировать цены на товар, отличные от розничных цен в аптеках по трем шаблонам ценообразования |
Контроль сроков годности | Контроль сроков годности на asna.ru |
Контроль цен списка ЖНВЛС | Контроль максимально допустимой цены на товары из списка ЖНВЛС |
Асна Экономия | Возможность увеличить товарооборот за счёт новых покупателей с большими покупками |
Предзаказ | Возможность увеличить широту аптечного ассортимента, уменьшать затраты на товарные запасы и текущие издержки |
Доставка со склада | Доставка готового заказа в аптеку. Возврат невыкупленных заказов на склад |
Доставка на дом | Возможность предложить покупателю доставку на дом |
Функциональные возможности ПО⚓︎
Функциональные возможности аптечного ПО | Описание |
---|---|
Получение новых заказов в автоматическом режиме | Получение с asna.ru новых/измененных заказов, резервирование товара в аптеке |
Получение новых заказов в ручном режиме | Получение с asna.ru новых/измененных заказов, резервирование товара в аптеке |
Уведомление на кассе о новых/измененных/сброшенных/отмененных заказах | Информирование первостольника о событиях требующих обработки заказов |
Распечатка сборочных листов | Формирование и печать сборочных листов по заказам asna.ru |
Комплектация заказа | Уведомление покупателя о готовности заказа к выдаче после фактической сборки заказа в аптеке |
Изменение времени бронирования | Продление срока хранения/бронирования заказа в аптеке |
Отпуск заказа покупателю | Реализация заказа в ценах на товара, обещанные покупателю на asna.ru |
Сбор заказа по истечению времени резерва | Заказ в аптеке снимается с резерва |
Отмена заказа покупателем | Заказ в аптеке снимается с резерва |
Отмена заказа аптекой(ручной привод) | Заказ в аптеке снимается с резерва |
Выход с кассы в админку первостольника | Просмотр, редактирование и отмена заказов покупателей сотрудником аптеки |
Редактирование заказа | Поддержка изменений в заказах после их первичной обработки |
ВНИМАНИЕ!
В зависимости от выбранных к интеграции опций, ниже в документации определяются списки обязательных атрибутов/полей сущностей, участвующих в информационном обмене.
Требования к функционалу аптечного ПО⚓︎
-
Пользователь в кассовом модуле ПО должен получать уведомления о приходе новых или измененных заказов, не мешающие работе на кассовом модуле, например в виде неблокирующего всплывающего окна, с максимальной периодичностью один раз в одну минуту, поверх окна «продажа товаров», либо другим способом, до подтверждения первостольником обработки заказа, например, до установки статуса «Собран». В случае, если заказ отредактирован покупателем, повторно отрабатываем данную логику в полном объеме. ПО должно извещать первостольника о том, что заказ можно разукомплектовывать в следующих случаях:
- отмена на сайте покупателем
- отмена в аптеке первостольником
- сброшенные автоматически в аптеке по таймауту (достижении времени сброса резерва)
-
Пользователь должен иметь возможность распечатать заказ (форма произвольная), для комплектации и удобства работы с сервисом сотруднику аптеки, из кассового модуля. В распечатанном документе выводится список зарезервированных партий по подтвержденному заказу с необходимой информацией по партии для сбора заказа(серия, срок годности, поставщик, количество, название товара, производитель, обещанная покупателю цена реализации в момент оформления заказа на сайте и т.п.)
- Пользователь должен иметь возможность переходить на сайт по кнопке «Кабинет первостольника» (вызывается браузер «по умолчанию» с введенным URL https://www.asna.ru/bitrix/admin/?guid={GUID_аптеки} ) для возможности просмотра заказов на сайте, редактирования, отмены. GUID_аптеки - обязательный параметр.
- Пользователь должен иметь возможность принудительно запустить обмен с сайтом для получения заказов по нажатию кнопки «Получить заказы» (т.к. клиент, оформивший заказ на терминале не должен ждать стандартного обмена по расписанию).
Интеграция⚓︎
Для интеграции с веб-сервисами АСНА, аптечная сеть силами своих специалистов или с помощью разработчиков ПО, которое использует аптечная сеть, должна реализовать протокол обмена, описанный в этой документации. Протокол реализуется в следующем порядке:
- Авторизация (раздел Авторизация в АСНА REST API). Для авторизации требуется выбрать тестовую аптеку из интегрируемой сети и сообщить ее юридическое лицо, а также полный адрес, выделенному сотруднику отдела разработки веб-сервисов АСНА. Сотрудник АСНА выдаст необходимые для авторизации данные (client_id и client_secret), а также настроит эту аптеку на тестовый режим. Аптека будет видна на сайте АСНА, после регулярной выгрузки полных остатков, на ней можно будет делать заказы.
- Загрузка справочников АСНА (раздел Справочник связок номенклатуры). Этот вызов API нужно использовать для получения связок номенклатуры аптечной сети и АСНА. Связки аптечная сеть выполняет на этапе базовой интеграции с АСНА.
- Выгрузка остатков (раздел Остатки товаров). Необходимо реализовать выгрузку полных остатков аптеки, раз в сутки, желательно ночью, а также выгрузку изменений остатков, каждые 10 минут, если было движение за этот период.
- Бронирование (раздел Заказы (бронирование)). Необходимо реализовать запрос изменений по заказам, бронирование, выгрузку ответа по обработанным заказам. Необходимо реализовать обработку
100
,102
,108
,111
статусов от сайта и перередачу на сайт статусов200
,201
,202
,204
,205
,210
,211
,212
,213
. Запрос изменений по заказам, а также передача ответа, должны происходить раз в минуту. - Предзаказы (раздел Сводный прайс-лист). Необходимо реализовать выгрузку полного сводного прайс-листа юридического лица, раз в сутки, после загрузки всех прайс-листов поставщиков, а также изменений по сводному прайс-листу, после обновления прайс-листа поставщика, участвующего в формировании сводного прайс-листа. В рамках работы с бронированием по сводному прайс-листу должны быть реализованы следующие статусы заказов:
203
,206
,207
,208
,209
. Реализовать доработку по предзаказам можно после реализации бронирования с наличия, совместного тестирования и запуска ПО в рабочем режиме.
Тестирование интеграции⚓︎
После реализации протокола и тщательного тестирования собственными силами, интегрируемое ПО должно пройти совместное приемочное тестирование с выделенным сотрудником отдела разработки веб-сервисов АСНА. Целью приемочного тестирования является обнаружение ошибок интеграции и своевременного их устранения, перед запуском сети или ПО в рабочем режиме. Перед выполнением совместного тестирования, аптечное ПО должно заранее обеспечить полную выгрузку остатков тестовой аптеки, желательно за несколько часов (более 3) до начала тестирования. Выделенный сотрудник аптечной сети или разработчик ПО должен убедиться, что тестовая аптека появилась на сайте, ее остатки видны и есть возможность формировать заказы.
Выделенный сотрудник отдела разработки веб-сервисов АСНА, совместно с выделенным сотрудником аптечной сети или разработчиком ПО, проводит следующие тесты, чеклист которых можно скачать здесь.
Ended: Регламент интеграции
Документация API ↵
Введение⚓︎
Общие сведения об АСНА REST API⚓︎
АСНА REST API предназначен для интеграции со сторонним ПО и построен по принципам REST1. По мере развития проекта мы будем стараться максимально придерживаться принципов REST, чтобы наш API соответствовал Level 3 Maturity RESTful Services. Для работы с API используется HTTP(S) протокол.
Основным адресом АСНА REST API служит URL: https://api.asna.cloud/ или http://api.asna.cloud/ . Все обращения к API должны идти на этот адрес, дополненный адресом ресурса, к которому вы обращаетесь. Адреса ресурсов, а также разрешенные методы доступа к ресурсам описаны далее в документации.
Основные используемые HTTP методы⚓︎
Метод | Описание |
---|---|
Используется только для получения данных | |
Используется для изменения данных, а также для операций upsert | |
Используется только для добавления новых данных | |
Используется только для удаления данных |
Основные коды состояний ответов⚓︎
Успешные2
Код | Название | Описание |
---|---|---|
200 | OK | Запрос прошел успешно и этот запрос не привел к изменению данных |
201 | Created | Запрос прошел успешно и этот запрос привел к созданию новых данных |
202 | Accepted | Запрос прошел успешно, но переданные данные требуют отложенной обработки |
204 | No Content | Запрос прошел успешно, данные удалены |
Ошибочные2
Код | Название | Описание |
---|---|---|
400 | Bad Request | Ошибка в передаваемых со стороны клиента данных |
401 | Unauthorized | Клиент не авторизован для выполнения запросов к API |
403 | Forbidden | Клиент авторизован, но у него нет прав на выполнение данного запроса |
404 | Not Found | Был запрошен отсутствующий URL |
429 | Too Many Requests | С клиента было превышено количество запросов в единицу времени |
500 | Internal Server Error | Произошла ошибка на стороне API, подробное описание ошибки уходит разработчикам сервисов |
Более подробное описание этих статусов можно найти здесь HTTP статусы
Версионирование⚓︎
В API сервисах АСНА используется версионирование. Версия API, которую вы используете, указывается в URL при запросах к сервису.
Поддерживаемые, а также устаревшие версии API, вы можете узнать из заголовков api-supported-versions и api-deprecated-versions в каждом ответе от сервиса.
Поддерживаемая версия API указана в документации у каждой операции над ресурсами.
Поддерживаемые форматы данных (media-types)⚓︎
Основным форматом для работы с API является JSON. Для уменьшения объемов передаваемой и принимаемой информации вы можете настроить ваш сериализатор JSON так, чтобы поля, содержащие null или значения по умолчанию, не передавались (мы передаем данные именно в таком виде). Формат данных, передаваемых на сервисы АСНА, указывается в HTTP заголовке Content-Type запроса, для JSON это application/json. Формат, в котором вы хотите получить данные, указывается в заголовке Accept запроса. Кодировка текста - UTF-8.
ВНИМАНИЕ!
Еще раз обращаем особое внимание на то что мы передаем и можем принимать данные в JSON без полей, имеющих значение null или значение по умолчанию для типа данных. Т.е. если какое-то поле имеет значение null или значение по умолчанию (например, для булевого поля false, для целого 0), то его не будет в JSON, который мы вернем. Если ваше ПО или десериализатор не умеет работать с таким JSON, то можно получать его полную версию, добавив заголовок Accept со значением application/x-json-full, но просьба не злоупотреблять этим, так как это сильно увеличивает объемы передаваемых данных.
Компрессия данных⚓︎
При использовании HTTPS протокола не рекомендуется использование gzip компрессии. Это связано с потенциальной возможностью использования уязвимостей SSL в этом случае. Если объем передаваемых или принимаемых данных велик, и передача/прием занимает много времени или не проходит, или вы используете протокол HTTP, вы можете использовать компрессию. За компрессию отвечают HTTP заголовки Content-Encoding и Accept-Encoding.
Поддержка Swagger⚓︎
Помимо данного руководства, сервисы API АСНА предоставляют автоматически генерируемую документацию в формате Swagger3. Вы можете использовать эту возможность для изучения нашего API, а также для автоматического формирования клиентского кода, используя обширный набор коммерческих и бесплатных инструментов. Получить swagger.json можно по адресу https://api.asna.cloud/swagger/v5/swagger.json. Подробнее про работу со Swagger можно прочитать в разделе Тестирование АСНА Web API. АСНА REST API имеет встроенный инструмент для просмотра документации в формате Swagger, которым можно воспользоваться, перейдя по адресу https://api.asna.cloud/swagger. Указанный инструмент позволяет не только просматривать документацию, но и выполнять запросы к API.
Локализация⚓︎
С версии 5 API может возвращать большинство информации об ошибках на русском языке (по умолчанию используется английский). Для этого необходимо добавить в запросы HTTP-заголовок Accept-Language со значением ru. Возможно, не все сообщения имеют перевод на русский язык, если вы столкнулись с такой ситуацией, то сообщите, пожалуйста, службе технической поддержки.
Валидация данных⚓︎
Все, передаваемые в API, данные проходят первичную валидацию (проверку на правильность заполнения данных). В случае, если в передаваемых данных содержится ошибка, то весь пакет отклоняется. При этом API возвращает 400
HTTP статус(код состояния) и подробную информацию об ошибках в теле ответа. Следует иметь в виду, что подробная информация об ошибках возможна только в том случае, если API удалось распарсить передаваемый пакет, в противном случае информация об ошибках несет только общий характер.
Основные этапы валидации
- Проверяется соответствие типов данных
- Проверяется заполнение обязательных полей
- Проверяется корректность заполнения полей, например предельная розничная цена для ЖНВЛС не должна быть меньше розничной или закупочной
- Проверяется дублирование ключа, например кода партии в остатках
- Дополнительные проверки
URL энкодинг⚓︎
При работе с API не забывайте что многие символы для успешной передачи в URL необходимо по стандарту кодировать. Для этого используется URL энкодинг, он же Percent энкодинг. Например, URL не может по стандарту содержать пробелов, для передачи пробелов в URL применяется знак +. Поэтому если нужно передать в URL параметр, содержащий + (часто встречается в датах с часовым поясом), то небходимо произвести энкодинг, заменив + на %2B. Более подробную информацию можно получить по ссылкам ниже.
Ограничение частоты запросов⚓︎
Для поддержания необходимого уровня сервиса и исключения излишней нагрузки API использует механизмы ограничения частоты запросов с одного IP адреса (rate limiter). Возможная частота запросов либо указана в документации по конкретному методу, либо может быть получена в техподдержке. Кроме того, не стоит делать запросы к API, если вы не собрали никаких данных, например, не было изменений остатков за период, заказов, пр. Если вам необходимо с одного IP отправлять много запросов, по разным аптекам, и не получается это сделать, то напишите в техподдержку АСНА.
Рекомендации по работе с API⚓︎
РЕКОМЕНДАЦИЯ
Сервисы API АСНА расположены в облаке и используют облачные ресурсы, поэтому со стороны клиентов, работающих с API необходимо наличие логики повтора вызова API, в случае возникновения временных (transient errors) ошибок, например, таких как таймауты подключения и т.д.
Логика повтора (retry logic) необходима при работе с любыми ресурсами, расположенными в Интернет (в локальной сети это тоже будет не лишним), так как в любой момент возможна потеря связи, отказ коммутационного оборудования, а также апдейт облачных сервисов или внезапная пиковая нагрузка на них. При этом необходимо понимать, какие ошибки являются временными, а какие нет. Например, таймауты подключения, с высокой долей вероятности, ошибка временная, вызванная нагрузкой или временным отсутствием связи, а 400
статус ответа от сервиса является ошибкой постоянной. Если передаваемый на наши сервисы пакет данных содержит ошибки, то вне зависимости от количества попыток, результат будет тот же, пока передаваемый пакет не будет исправлен. В этом случае, нет смысла повторять запросы с ошибочным пакетом. К постоянным ошибкам относится и 404
статус. Повторы запросов должны происходить с некоторой временной задержкой, в идеальном случае увеличивающейся при каждом повторе экспоненциально. Добавление небольшого джиттера(смещения) к задержке также будет большим плюсом.
При отсутствии со стороны клиента логики повтора, претензии к работе API, связанные с временной недоступностью, рассматриваться не будут.
Веб-сервисы АСНА, это сложная, распределенная система, и как любая сложная система требует периодического обслуживания, например обновления статистики БД или индексов. Для выполнения этих работ предусмотрено технологическое окно, с 5:00
по 9:00
утра по московскому времени. В это время веб-сервисы сервисы АСНА могут быть доступны частично. Пожалуйста, имейте это в виду при работе над интеграцией с нашими сервисами.
Для решения проблем при возникновении инцидентов, необходимо наличие логирования запросов к API со стороны клиентского ПО, список необходимых данных указан ниже:
- Точное время запроса с таймзоной
- Полный URL запроса и метод
- Все заголовки запроса
- Тело запроса, если его размер небольшой
- Статус ответа от API
- Тело ответа, если его размер небольшой
-
Representational State Transfer (REST) в переводе — это передача состояния представления. Технология позволяет получать и модифицировать данные и состояния удаленных приложений, передавая HTTP-вызовы через интернет или любую другую сеть. Краткое введение ↩
-
Swagger(OpenAPI) это язык описания интерфейсов для REST API, выраженный с помощью JSON. Swagger используется вместе с набором программных средств с открытым исходным кодом для проектирования, создания, документирования и использования веб-сервисов RESTful. Swagger включает автоматизированную документацию, генерацию кода (на многие языки программирования) и генерацию тестовых примеров. Ссылка ↩
Авторизация в АСНА REST API⚓︎
АСНА REST API поддерживает авторизацию на основе JWT токенов.
Для обращения к любому из ресурсов АСНА REST API требуется наличие JWT токена в заголовке Authorization HTTP запроса, с типом Bearer. При отсутствии токена API вернет 401
статус (Unauthorized), этот же статус вернется в случае, если время действия токена закончилось (токен выдается на определенное время). В обоих случаях нужно запросить новый токен.
Получение токена⚓︎
Для выполнения запросов к API, необходимо получить JWT токен от службы единой авторизации облачных сервисов АСНА, расположенной по адресу https://sso.asna.cloud:5000
ЗАПРОС
/connect/token
Описание⚓︎
Получение авторизационного токена
Параметры запроса⚓︎
Параметры этого запроса передаются в теле запроса, см. пример запроса
Имя | Обяз. | Описание |
---|---|---|
client_id | Идентификатор аптеки по справочнику АСНА | |
client_secret | Пароль аптеки, полученный от службы техподдержки или клиентского маркетинга | |
grant_type | Тип авторизации. В данном случае всегда client_credentials |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Content-Type | Должно иметь значение application/x-www-form-urlencoded |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. Запрос к сервису авторизации прошел успешно, в теле ответа содержится JSON с информацией о выданном токене. |
Пример ответа⚓︎
- Токен, используемый для авторизации в API
- Время жизни токена в секундах, вы можете контролировать это значение для получения обновления токена. Значение может меняться
- Схема авторизации
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. Например, при отсутствии аптеки с таким идентификатором выдается invalid_client |
500 | Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Порядок выполнения авторизации на сервисах API⚓︎
- Получаем токен на сервере авторизации
-
Полученный токен (берется из поля access_token ответа от службы единой авторизации) сохраняется клиентским ПО и используется для запросов к API.
-
При получении от API статуса
401
(Unauthorized), т.е. по истечении срока годности токена, токен запрашивается повторно
Диаграммы авторизации⚓︎
Flow⚓︎
graph TD
A[Запрос токена в SSO] -->|200| B[Запрос к API]
B --> |Ответ| C{Проверка статуса ответа}
C ---> |401| A
C ---> |200, 201, 202, 204, 500 etc| B
Sequence⚓︎
sequenceDiagram
autonumber
loop
Клиент->>+SSO: Хочу получить токен
SSO-->>-Клиент: Пожалуйста, вот токен
loop Пока статус ответа <> 401
Клиент->>+API: Выполни запрос (токен в заголовке)
API-->>+Клиент: Запрос выполнен, вот результат
Note over Клиент, API: Успешный запрос, токен принят
end
API-->>-Клиент: Запрос не выполнен, статус 401
Note over Клиент, API: Неуспешный запрос, токен не прошел проверку
end
Справочники⚓︎
Справочник номенклатуры нормализованный⚓︎
Вы можете получать справочник номенклатуры АСНА, в нормализованном виде, через следующий вызов API. Дополнительные справочники, при необходимости, получаются отдельными вызовами API.
ВНИМАНИЕ!
Запрашивать справочник номенклатуры желательно не чаще одного раза в сутки. Из-за большого размера справочника, выдача ограничена 10000 записей за вызов. Для получения всего справочника используйте параметры count и rvInt при запросе.
ЗАПРОС
/v5/references/goods_normalized?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник номенклатуры по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. Запрос к сервису авторизации прошел успешно, в теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
nnt | int | Уникальный код товара по справочнику АСНА |
name | string | Cокращенное наименование товара по справочнику АСНА |
nameFull | string | Полное наименование товара по справочнику АСНА |
tmId | int | Код справочника торговых марок АСНА |
pack | double | Фасовка |
doseVal | double | Значение дозировки |
doseId | int | Код справочника дозировок АСНА |
rfId | int | Код справочника форм выпуска АСНА |
ppId | int | Код первичной упаковки из справочника упаковок АСНА |
psId | int | Код вторичной упаковки из справочника упаковок АСНА |
ptId | int | Код третичной упаковки из справочника упаковок АСНА |
manCId | int | Код страны производителя из справочника стран АСНА |
manId | int | Код справочника производителей АСНА |
actual | bool | Признак актуальности строки |
gnvls | bool | Признак ЖНВЛС |
vat | double | НДС |
gpId | int | Код справочника групп АСНА |
aaId | int | Код справочника областей применения АСНА |
mnnId | int | Код справочника МНН АСНА |
aId | int | Код справочника аналогов АСНА |
speId | int | Код справочника СПЕ АСНА |
catId | int | Код справочника категорий АСНА |
dirId | int | Код справочника направлений АСНА |
megaId | int | Код справочника мегакатегорий АСНА |
ex | bool | Признак эксклюзива |
stm | bool | Признак СТМ |
ustm | bool | Признак УСТМ |
exch | bool | Признак Биржевой товар |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник номенклатуры денормализованный⚓︎
Вы можете получать справочник номенклатуры АСНА, в нормализованном виде, через следующий вызов API. Дополнительные справочники, при необходимости, получаются отдельными вызовами API.
ВНИМАНИЕ!
Запрашивать справочник номенклатуры желательно не чаще одного раза в сутки. Из-за большого размера справочника, выдача ограничена 10000 записей за вызов. Для получения всего справочника используйте параметры count и rvInt при запросе.
ЗАПРОС
/v5/references/goods_denormalized?count={count}&rvInt={rvInt}
Описание⚓︎
Получить денормализованный справочник номенклатуры по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. Запрос к сервису авторизации прошел успешно, в теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
nnt | int | Уникальный код товара по справочнику АСНА |
name | string | Cокращенное наименование товара по справочнику АСНА |
nameFull | string | Полное наименование товара по справочнику АСНА |
tm | string | Торговая марка |
pack | double | Фасовка |
doseVal | double | Значение дозировки |
doseName | string | Наименование дозировки |
rf | string | Форма выпуска |
pp | string | Первичная упаковка |
ps | string | Вторичная упаковка |
pt | string | Третичная упаковка |
manC | string | Cтрана производителя |
man | string | Производитель |
actual | bool | Признак актуальности строки |
gnvls | bool | Признак ЖНВЛС |
vat | double | НДС |
gp | string | Группа товаров |
aa | string | Область применения |
mnnRus | string | МНН |
mm | string | Маркетинговый производитель |
a | string | Аналог |
spe | string | СПЕ |
cat | string | Категория |
dir | string | Направление |
mega | string | Мегакатегория |
ex | bool | Признак эксклюзива |
stm | bool | Признак СТМ |
ustm | bool | Признак УСТМ |
exch | bool | Признак Биржевой товар |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник связок номенклатуры⚓︎
Работа с REST API АСНА происходит в кодах справочников АСНА. Для получения информации о связках номенклатуры вашей аптеки со справочником АСНА, можно использовать следующий вызов API.
ОГРАНИЧЕНИЕ
В процессе работы, связки в справочнике могут редактироваться и удаляться. Просим обратить внимание, что удаленные связки не передаются по API. При получении справочника связок, необходимо регулярно полностью перезаписывать данные в локальной базе, либо синхронизировать их проверкой и частичным удалением позиций на вашей стороне.
Запрашивать информацию о связках номенклатуры необходимо ежедневно, но желательно не чаще одного раза в сутки, либо в случае крайней необходимости, например изменился справочник и были сделаны перепривязки.
ЗАПРОС
/v5/references/goods_links?names={false|true}
Описание⚓︎
Получение справочника связок номенклатуры АСНА и аптеки по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
names | bool | Возвращать или нет наименования товаров по справочнику АСНА, по умолчанию false(не возвращать) |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со связками. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
nnt | int | Уникальный код товара по справочнику АСНА |
sku | string | Уникальный код товара по справочнику аптеки |
name | string | Наименование товара по справочнику АСНА |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник торговых марок⚓︎
Данный вызов API предназначен для получения справочника торговых марок АСНА.
ЗАПРОС
/v5/references/trademarks?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник торговых марок по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код торговой марки по справочнику АСНА |
name | string | Наименование торговой марки |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник дозировок⚓︎
Данный вызов API предназначен для получения справочника дозировок АСНА.
ЗАПРОС
/v5/references/dosages?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник дозировок по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код дозировки по справочнику АСНА |
name | string | Наименование дозировки |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник форм выпуска⚓︎
Данный вызов API предназначен для получения справочника форм выпуска АСНА.
ЗАПРОС
/v5/references/release_forms?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник форм выпуска по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | ОБяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код формы выпуска по справочнику АСНА |
name | string | Наименование формы выпуска |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник упаковок⚓︎
Данный вызов API предназначен для получения справочника упаковок АСНА.
ЗАПРОС
/v5/references/packagings?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник упаковок по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код упаковки по справочнику АСНА |
name | string | Наименование упаковки |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник стран⚓︎
Данный вызов API предназначен для получения справочника стран АСНА.
ЗАПРОС
/v5/references/countries?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник стран по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код страны по справочнику АСНА |
name | string | Наименование страны |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник производителей⚓︎
Данный вызов API предназначен для получения справочника производителей АСНА.
ЗАПРОС
/v5/references/manufacturers?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник производителей по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код производителя по справочнику АСНА |
name | string | Наименование производителя |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник групп товаров⚓︎
Данный вызов API предназначен для получения справочника групп товаров АСНА.
ЗАПРОС
/v5/references/groups?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник групп товаров по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код группы товара по справочнику АСНА |
parentId | int | Уникальный код родительской группы товара по справочнику АСНА |
name | string | Наименование группы товара |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник МНН⚓︎
Данный вызов API предназначен для получения справочника МНН АСНА.
ЗАПРОС
/v5/references/mnns?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник МНН по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код МНН по справочнику АСНА |
rusName | string | Русское наименование МНН |
latname | string | Латинское наименование МНН |
engName | string | Английское наименование МНН |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник областей применения⚓︎
Данный вызов API предназначен для получения справочника областей применения АСНА.
ЗАПРОС
/v5/references/application_areas?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник групп товаров по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код области применения по справочнику АСНА |
parentId | int | Уникальный код родительской области применения по справочнику АСНА |
name | string | Наименование области применения |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник маркетинговых производителей⚓︎
Данный вызов API предназначен для получения справочника маркетинговых производителей АСНА.
ЗАПРОС
/v5/references/marketing_manufacturers?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник маркетинговых производителей по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код маркетингового производителя по справочнику АСНА |
name | string | Наименование маркетингового производителя |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник аналогов⚓︎
Данный вызов API предназначен для получения справочника маркетинговых производителей АСНА.
ЗАПРОС
/v5/references/analogs?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник аналогов по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код аналога по справочнику АСНА |
name | string | Наименование аналога |
clusterId | int | Уникальный код кластера |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник категорий⚓︎
Данный вызов API предназначен для получения справочника категорий АСНА.
ЗАПРОС
/v5/references/categories?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник категорий по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код категории по справочнику АСНА |
name | string | Наименование категории |
dirId | int | Уникальный код направления |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник направлений⚓︎
Данный вызов API предназначен для получения справочника направлений АСНА.
ЗАПРОС
/v5/references/directions?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник направлений по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код направления по справочнику АСНА |
name | string | Наименование направления |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник мегакатегорий⚓︎
Данный вызов API предназначен для получения справочника мегакатегорий АСНА.
ЗАПРОС
/v5/references/megacategories?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник мегакатегорий по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код мегакатегории по справочнику АСНА |
name | string | Наименование мегакатегории |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник СПЕ⚓︎
Данный вызов API предназначен для получения справочника СПЕ(стратегических плановых единиц) АСНА.
ЗАПРОС
/v5/references/spes?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник СПЕ по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код СПЕ по справочнику АСНА |
name | string | Наименование СПЕ |
actual | bool | Признак актуальности строки |
catId | int | Уникальный код категории |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник маркетинговых кластеров⚓︎
Данный вызов API предназначен для получения справочника маркетинговых кластеров АСНА.
ЗАПРОС
/v5/references/marketing_clusters?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник маркетинговых кластеров по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код маркетингового кластера по справочнику АСНА |
name | string | Наименование маркетингового кластера |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник маркетинговых брендов⚓︎
Данный вызов API предназначен для получения справочника маркетинговых брендов АСНА.
ЗАПРОС
/v5/references/marketing_brands?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник маркетинговых брендов по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код маркетингового бренда по справочнику АСНА |
name | string | Наименование маркетингового бренда |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник связей кластер-бренд-товар⚓︎
Данный вызов API предназначен для получения справочника связей кластер-бренд-товар АСНА.
ЗАПРОС
/v5/references/cluster_brand_product_links?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник связей кластер-бренд-товар по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
mcId | int | Уникальный код маркетингового кластера по справочнику АСНА |
nnt | int | Уникальный код товара |
brandId | int | Уникальный код маркетингового бренда |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник связей товар - маркетинговый производитель⚓︎
Данный вызов API предназначен для получения справочника связей товар - маркетинговый производитель АСНА.
ЗАПРОС
/v5/references/product_marketing_manufacturer_links?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник связей товар - маркетинговый производитель по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код связи товар - маркетинговый производитель по справочнику АСНА |
mmId | int | Уникальный код маркетингового производителя |
actual | bool | Признак актуальности строки |
nnt | int | Уникальный код товара |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник связей маркетинговый производитель - поставщик⚓︎
Данный вызов API предназначен для получения справочника связей маркетинговый производитель-поставщик АСНА.
ЗАПРОС
/v5/references/marketing_manufacturer_supplier_links?count={count}&rvInt={rvInt}
Описание⚓︎
Получить справочник связей маркетинговый производитель - поставщик по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 10000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код связи маркетинговый производитель - поставщик по справочнику АСНА |
mmId | int | Уникальный код маркетингового производителя |
inn | string | ИНН поставщика |
begDate | datetime | Дата начала действия. В формате ISO8601 с указанием часового пояса |
endDate | datetime | Дата окончания действия. В формате ISO8601 с указанием часового пояса |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Справочник штрих-кодов производителя⚓︎
Данный вызов API предназначен для получения справочника штрих-кодов производителя
ЗАПРОС
/v5/references/barcodes?count={count}&rvInt={rvInt}&actual={actual}
Описание⚓︎
Получить справочник штрих-кодов по протоколу версии 5, count записей, начиная с версии rvInt
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. | |
actual | bool | Возвращать только актуальные записи, если параметр выставлен в true, иначе все. По умолчанию false. Если параметр выставлен в true, не забывайте предварительно зачищать свои таблицы. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP | cтатус Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
nnt | int | Код товара по справочнику АСНА |
barcode | string | Штрих-код производителя |
actual | bool | Признак актуальности строки |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Работа с сайтом ↵
Остатки товаров⚓︎
Передача остатков в АСНА⚓︎
Передача остатков в АСНА осуществляется следующими методами:
- Передача информации о полных остатках
- Передача изменений
Передача полных остатков аптеки⚓︎
Ежедневно, желательно в период наименьшей загруженности сервисов, интегрированное с АСНА программное обеспечение должно отправлять полные сведения о наличии товаров в каждой аптеке. Выгрузка полных сведений об остатках должна производиться не чаще одного раза в сутки. Так как объем передаваемой информации о полных остатках большой, пакет не обрабатывается сразу, а ставится в очередь на обработку.
ОГРАНИЧЕНИЕ
Отправлять полные остатки необходимо один раз в сутки. Желательно отправлять полные остатки в период с 05:15 до 08:45 по московскому времени. В остальное время вы должны передавать только то, что изменилось с момента предыдущей отправки. См. Передача изменений по остаткам аптеки.
ВНИМАНИЕ
Перед обработкой полных остатков и записью их в БД, сервис произведет удаление всех остатков в БД по этой аптеке.
ЗАПРОС
/v5/stores/{storeId}/stocks
Описание⚓︎
Передать полные остатки по аптеке storeId по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Тело запроса⚓︎
Объект запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
date | datetime | Дата выгрузки остатков в формате ISO8601 с указанием часового пояса, см. примеры | |
stocks | Stock[] | Массив строк остатков |
Объект запроса Stock (строка остатков)⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
prtId | string(50) | Уникальный код партии, должен быть уникальным в пределах отправляемого пакета, т.к. это ключ, по которому происходит, обновление записей. Максимум 50 символов. | |
nnt | int | Код товара по справочнику АСНА | |
sku | string(50) | Код товара по справочнику клиента. Максимум 50 символов. | |
qnt | float | Текущее количество в партии (с учетом забронированного товара). Не передавать дробное количество. | |
supDate | datetime | Дата поставки в формате ISO8601 с указанием часового пояса, см. примеры | |
nds | int | НДС товара. Все расчеты идут по ставкам НДС из справочника номенклатуры АСНА | |
gnvls | bool | Признак ЖНВЛС товара (поле обязательно для ЖНВЛС). Если ПО самостоятельно не контролирует максимально допустимые цены ЖНВЛС, то поле обязательно | |
man | string(255) | Производитель. Максимум 255 символов | |
series | string(50) | Cерия товара. Максимум 50 символов | |
exp | datetime | Cрок годности в формате ISO8601, см. примеры. Поле не является обязательным, т.к. не у всех товаров есть срок годности, но если у товара есть срок, убедительная просьба его заполнять. Покупатели хотят видеть срок на сайте. Для сервиса Контроль сроков годности поле обязательно. | |
prcMan | decimal | Цена производителя | |
prcOpt | decimal | Цена оптовая | |
prcOptNds | decimal | Цена оптовая (закупочная) с НДС. Для сервисов Подмена аптечных цен, Асна Экономия поле обязательно. Если вы не предусматриваете работу с этими сервисами, то выгружайте эту цену равную розничной, т.к. поле не может быть пустым | |
prcRet | decimal | Цена реализации | |
prcReestr | decimal | Цена реестра | |
prcGnvlsMax | decimal | Максимально допустимая розничная цена для ЖНВЛС (поле обязательно для ЖНВЛС). Если товар не ЖНВЛС, то это поле заполнять не нужно, если товар ЖНВЛС и включен расчет цен, то поле обязательно заполняется значением, и оно не может быть меньше розничной цены аптеки. Если ПО самостоятельно не контролирует максимально допустимые цены ЖНВЛС, то поле обязательно | |
mrGnvls | decimal | Процент наценки для ЖВЛНС | |
tag | int | Признак товара. Может принимать значения: 0 - нормальный, 1- сроковый, 2 - уценка, 3 - мятая упаковка |
classDiagram
StocksDto *-- "1..*" StockDto
class StocksDto{
+DatetimeOffset date
+StockDto[] stocks
}
class StockDto{
+String prtId
+Int nnt
+String sku
+Float qnt
+DatetimeOffset supDate
+Int nds
+Bool gnvls
+String man
+String series
+Datetime exp
+Decimal prcMan
+Decimal prcOpt
+Decimal prcOptNds
+Decimal prcRet
+Decimal prcReestr
+Decimal prcGnvlsMax
+Decimal mrGnvls
+Int tag
}
JSON схема для валидации и тестирования
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
202 | Accepted. Принято к обработке. В заголовке Location содержится URL для получения статуса обработки переданного пакета. |
Пример ответа⚓︎
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Передача изменений по остаткам аптеки⚓︎
С определенной периодичностью, интегрированное с АСНА программное обеспечение должно отправлять изменения по остаткам товаров в каждой аптеке. При отсутствии изменений по остаткам, отправлять данные не нужно. Пакеты с изменениями также ставятся в очередь на обработку.
ОГРАНИЧЕНИЕ
Передача изменений остатков ограничена одним запросом в 10 минут.
ВНИМАНИЕ!
Если товар по партии закончился, то необходимо передать эту запись с количеством равным нулю.
ИНФОРМАЦИЯ
Перед обработкой изменений по остаткам аптеки и записью их в БД, сервис не будет производить удаление всех остатков в БД по этой аптеке. Будет произведена операция upsert (update для уже имеющихся в БД строк и insert для отсутствующих).
ЗАПРОС
/v5/stores/{storeId}/stocks
Описание⚓︎
Передать изменения по остаткам аптеки storeId по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Тело запроса⚓︎
Объект запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
date | datetime | Дата выгрузки остатков в формате ISO8601 с указанием вашего часового пояса, см. примеры | |
stocks | Stock[] | Массив строк остатков |
Объект запроса Stock (строка остатков)⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
prtId | string | Уникальный код партии, должен быть уникальным в пределах отправляемого пакета, т.к. это ключ, по которому происходит, обновление записей. Максимум 50 символов. | |
nnt | int | Код товара по справочнику АСНА | |
sku | string | Код товара по справочнику клиента. Максимум 50 символов. | |
qnt | float | Текущее количество в партии (с учетом забронированного товара). Не передавать дробное количество. | |
supDate | datetime | Дата поставки в формате ISO8601 с указанием часового пояса, см. примеры | |
nds | int | НДС товара. Все расчеты идут по ставкам НДС из справочника номенклатуры АСНА | |
gnvls | bool | Признак ЖНВЛС товара (поле обязательно для ЖНВЛС). Если ПО самостоятельно не контролирует максимально допустимые цены ЖНВЛС то поле обязательно | |
man | string | Производитель. Максимум 255 символов | |
series | string | Cерия товара. Максимум 50 символов | |
exp | datetime | Cрок годности в формате ISO8601, см. примеры. Поле не является обязательным, т.к. не у всех товаров есть срок годности, но если у товара есть срок, убедительная просьба его заполнять. Покупатели хотят видеть срок на сайте. Для сервиса Контроль сроков годности поле обязательно | |
prcMan | decimal | Цена производителя | |
prcOpt | decimal | Цена оптовая | |
prcOptNds | decimal | Цена оптовая (закупочная) с НДС. Для сервисов Подмена аптечных цен, Асна Экономия поле обязательно. Если вы не предусматриваете работу с этими сервисами, то выгружайте эту цену равную розничной, т.к. поле не может быть пустым | |
prcRet | decimal | Цена реализации | |
prcReestr | decimal | Цена реестра | |
prcGnvlsMax | decimal | Максимально допустимая розничная цена для ЖНВЛС (поле обязательно для ЖНВЛС). Если товар не ЖНВЛС, то это поле заполнять не нужно, если товар ЖНВЛС и включен расчет цен, то поле обязательно заполняется значением, и оно не может быть меньше розничной цены аптеки. Если ПО самостоятельно не контролирует максимально допустимые цены ЖНВЛС то поле обязательно | |
mrGnvls | decimal | Процент наценки для ЖВЛНС | |
tag | int | Признак товара. Может принимать значения: 0 - нормальный, 1- сроковый, 2 - уценка, 3 - мятая упаковка |
JSON схема для валидации и тестирования
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
202 | Accepted. Принято к обработке. В заголовке Location содержится URL для получения статуса обработки переданного пакета. |
Пример ответа⚓︎
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Удаление информации по остаткам аптеки⚓︎
В некоторых случаях бывает необходимо удалить всю информацию об остатках аптеки, для этого используйте следующий вызов.
ВНИМАНИЕ!
После удаления информации об остатках аптеки, перед отправкой информации об изменениях остатков, не забудьте сделать полную выгрузку остатков аптеки.
ЗАПРОС
/v5/stores/{storeId}/stocks
Описание⚓︎
Удалить информацию по остаткам аптеки storeId по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
204 | No Content. Данные удалены |
Пример ответа⚓︎
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Получение информации по остаткам аптеки⚓︎
Для периодической проверки остатков, переданных в АСНА, вы можете получить данные по остаткам аптеки, используя следующий запрос:
ЗАПРОС
/v5/stores/{storeId}/stocks
Описание⚓︎
Передать изменения по остаткам аптеки storeId по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА | |
since | datetime | Дата/время в формате ISO8601, см. примеры, с которой необходимо получить остатки |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. Успешный запрос. Тело запроса содержит массив остатков |
Пример ответа⚓︎
Объект ответа (строка остатков)⚓︎
Имя | Тип | Описание |
---|---|---|
realNetId | int | Идентификатор сети |
storeId | GUID | Идентификатор аптеки по справочнику АСНА |
prtId | string | Уникальный код партии, должен быть уникальным в пределах отправляемого пакета, т.к. это ключ, по которому происходит, обновление записей. Максимум 50 символов. |
nnt | int | Код товара по справочнику АСНА |
sku | string | Код товара по справочнику клиента. Максимум 50 символов. |
qnt | float | Текущее количество в партии (с учетом забронированного товара) |
supDate | datetime | Дата поставки в формате ISO8601 с указанием часового пояса, см. примеры |
nds | int | НДС товара |
gnvls | bool | Признак ЖНВЛС товара (поле обязательно для ЖНВЛС) |
man | string | Производитель. Максимум 255 символов |
series | string | Cерия товара. Максимум 50 символов |
exp | datetime | Cрок годности в формате ISO8601, см. примеры. Поле не является обязательным, т.к. не у всех товаров есть срок годности, но если у товара есть срок, убедительная просьба его заполнять. Покупатели хотят видеть срок на сайте |
prcMan | decimal | Цена производителя |
prcOpt | decimal | Цена оптовая |
prcOptNds | decimal | Цена оптовая (закупочная) с НДС |
prcRet | decimal | Цена реализации |
prcReestr | decimal | Цена реестра |
prcGnvlsMax | decimal | Максимально допустимая розничная цена для ЖНВЛС (поле обязательно для ЖНВЛС). Если товар не ЖНВЛС, то это поле заполнять не нужно, если товар ЖНВЛС и включен расчет цен, то поле обязательно заполняется значением, и оно не может быть меньше розничной цены аптеки |
mrGnvls | decimal | Процент наценки для ЖВЛНС |
tag | int | Признак товара. Может принимать значения: 0 - нормальный, 1- сроковый, 2 - уценка, 3 - мятая упаковка |
stkDate | datetime | Дата остатков в формате ISO8601 с указанием часового пояса, см. примеры |
loadDate | datetime | Дата загрузки остатков в формате ISO8601 с указанием часового пояса, см. примеры |
rv | byte[] | Версия записи |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Фильтрация остатков⚓︎
Для исключения попадания на сайт товаров с некорректными(слишком низкими) ценами, которые, как правило, получаются из-за некорректных привязок справочника товаров аптеки и справочника товаров АСНА, мы фильтруем такие товары.
Если вы подписаны на рассылку мониторинга, то ежедневно вы будете получать уведомления по электронной почте с вложенной инструкцией, если нет то вы можете перейти на веб-интерфейс фильтра по ссылке http://api.asna.cloud/dispersion?storeId={storeId}, где storeId - идентификатор вашей аптеки.
Инструкция по работе с веб-интерфейсом фильтра встроена в веб-интефейс.
Сводный прайс-лист (предзаказ)⚓︎
Сводный прайс-лист - это прайс-лист, сформированный из прайс-листов всех поставщиков аптеки, где по каждой номенклатуре выбирается только один поставщик, с наиболее выгодной для аптеке ценой. Исходя из этого, сводный прайс-лист должен содержать в себе только строки с уникальными (не повторяющимися в пределах прайс-листа) кодами номенклатуры (nnt).
Передача сводных прайс-листов в АСНА⚓︎
Передача сводных прайс-листов в АСНА осуществляется следующими методами:
- Передача полного сводного прайс-листа
- Передача изменений по сводному прайс-листу
Передача полного сводного прайс-листа юридического лица⚓︎
Ежедневно, желательно в период наименьшей загруженности сервисов, интегрированное с АСНА программное обеспечение должно отправлять полный сводный прайс-лист по каждому юридическому лицу. Выгрузка полного сводного прайс-листа должна производиться не чаще одного раза в сутки. Так как объем передаваемой информации большой, она не обрабатывается сразу, а ставится в очередь на обработку.
ОГРАНИЧЕНИЕ
Передача полных предзаказов ограничена одним запросом в 4 часа, но отправлять полные предзаказы чаще чем раз в сутки нет необходимости. Желательно отправлять полные предзаказы в период с 05:15 до 08:45 по московскому времени.
ВНИМАНИЕ!
Перед обработкой полного прайс-листа и записью его в БД, сервис произведет удаление сводного прайс-листа в БД по этому юрлицу.
ЗАПРОС
/v5/legal_entities/{storeId}/preorders
Описание⚓︎
Передать полный сводный прайс-лист по юрлицу аптеки storeId по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА. По нему мы определяем юридическое лицо. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Тело запроса⚓︎
Объект запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
date | datetime | Дата выгрузки полного прайс-листа в формате ISO8601 с указанием часового пояса, см. примеры | |
preorders | Preorder[] | Массив строк полного прайс-листа |
Объект запроса Preorder(строка прайс-листа)⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
nnt | int | Код товара по справочнику АСНА | |
sku | string(50) | Код товара по справочнику клиента. Максимум 50 символов. | |
qnt | float | Количество товара | |
supInn | string | ИНН поставщика. Обязательно, если хотите получать ИНН в строках заказа с asna.ru | |
supDate | datetime | Дата поставки в формате ISO8601 с указанием часового пояса, см. примеры | |
exp | datetime | Cрок годности в формате ISO8601, см. примеры. Поле не является обязательным, т.к. не у всех товаров есть срок годности, но если у товара есть срок, убедительная просьба его заполнять. Покупатели хотят видеть срок на сайте. Для сервиса Контроль сроков годности поле обязательно | |
prcOptNds | decimal | Цена оптовая (закупочная) с НДС. Обязательно, если не передается Цена реализации | |
prcRet | decimal | Цена реализации. Обязательно, если не передается Цена оптовая (закупочная) с НДС | |
prcGnvlsMax | decimal | Максимально допустимая розничная цена для ЖНВЛС (поле обязательно для ЖНВЛС). Если эта цена не указана, то АСНА не будет контролировать превышение наценки на ЖНВЛС при расчете розничной цены. В этом случае ПО должно делать это самостоятельно. Если ПО самостоятельно не контролирует максимально допустимые цены ЖНВЛС то поле обязательно | |
prclDate | datetime | Дата прайс-листа в формате ISO8601 с указанием часового пояса, см. примеры | |
plType | int | Тип прайслиста, 0 - для юрлица, 1 - для хаба, 2 - для аптеки | |
status | int | Признак активной или удаленной строки (0 - активная, 1 - удаленная). В полном прайс-листе всегда 0, т.к. в нем должны быть только активные строки |
JSON схема для валидации и тестирования
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
202 | Accepted. Принято к обработке. В заголовке Location содержится URL для получения статуса обработки переданного пакета. |
Пример ответа⚓︎
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Передача изменений по сводному прайс-листу юридического лица⚓︎
С определенной периодичностью, интегрированное с АСНА программное обеспечение должно отправлять изменения по сводному прайс-листу для каждого юрлица. При отсутствии изменений по сводному прайс-листу, отправлять данные не нужно.
ВНИМАНИЕ!
Если товар был удален из сводного прайс-листа, то необходимо передать эту запись со статусом равным 1.
ИНФОРМАЦИЯ
Перед обработкой изменений по сводному прайс-листу юрлица и записью их в БД, сервис не будет производить удаление сводного прайс-листа в БД по этому юрлицу. Будет произведена операция upsert (update для уже имеющихся в БД строк и insert для отсутствующих).
ЗАПРОС
/v5/legal_entities/{storeId}/preorders
Описание⚓︎
Передать изменения по сводному прайс-листу юрлица аптеки storeId по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА. По нему мы определяем юридическое лицо. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Тело запроса⚓︎
Объект запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
date | datetime | Дата выгрузки полного прайс-листа в формате ISO8601 с указанием часового пояса, см. примеры | |
preorders | Preorder[] | Массив строк полного прайс-листа |
Объект запроса Preorder(строка прайс-листа)⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
nnt | int | Код товара по справочнику АСНА | |
sku | string | Код товара по справочнику клиента. Максимум 50 символов. | |
qnt | float | Количество товара | |
supInn | string | ИНН поставщика. Обязательно, если хотите получать ИНН в строках заказа с asna.ru | |
supDate | datetime | Дата поставки в формате ISO8601 с указанием часового пояса, см. примеры | |
exp | datetime | Cрок годности в формате ISO8601, см. примеры. Поле не является обязательным, т.к. не у всех товаров есть срок годности, но если у товара есть срок, убедительная просьба его заполнять. Покупатели хотят видеть срок на сайте. Для сервиса Контроль сроков годности поле обязательно | |
prcOptNds | decimal | Цена оптовая (закупочная) с НДС. Обязательно, если не передается Цена реализации | |
prcRet | decimal | Цена реализации. Обязательно, если не передается Цена оптовая (закупочная) с НДС | |
prcGnvlsMax | decimal | Максимально допустимая розничная цена для ЖНВЛС (поле обязательно для ЖНВЛС). Если эта цена не указана, то АСНА не будет контролировать превышение наценки на ЖНВЛС при расчете розничной цены. В этом случае ПО должно делать это самостоятельно. Если ПО самостоятельно не контролирует максимально допустимые цены ЖНВЛС то поле обязательно | |
prclDate | datetime | Дата прайс-листа в формате ISO8601 с указанием часового пояса, см. примеры | |
plType | int | Тип прайслиста, 0 - для юрлица, 1 - для хаба, 2 - для аптеки | |
status | int | Признак активной или удаленной строки (0 - активная, 1 - удаленная). В полном прайс-листе всегда 0, т.к. в нем должны быть только активные строки |
JSON схема для валидации и тестирования
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
202 | Accepted. Принято к обработке. В заголовке Location содержится URL для получения статуса обработки переданного пакета. |
Пример ответа⚓︎
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Получение информации по сводному прайс-листу юрлица⚓︎
Для периодической проверки информации по сводному прайс-листу, переданному в АСНА, вы можете получить данные по сводному прайс-листу юрлица, используя следующий запрос:
ЗАПРОС
/v5/legal_entities/{storeId}/preorders?since={since}
Описание⚓︎
Получить сводный прайс-лист по юрлицу аптеки storeId по протоколу v5, с даты since
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА. По нему мы определяем юридическое лицо | |
since | datetime | Дата/время в формате ISO8601, с которой необходимо получить сводный прайс-лист, см. примеры |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | OK. Успешный запрос. В теле ответа содержится массив строк прайс-листа |
Пример ответа⚓︎
Объект ответа (строка прайс-листа)⚓︎
Имя | Тип | Описание |
---|---|---|
srcId | GUID | Уникальный код юрлица по справочнику АСНА |
nnt | int | Код товара по справочнику АСНА |
sku | string | Код товара по справочнику клиента. Максимум 50 символов. |
qnt | float | Количество товара |
supInn | string | ИНН поставщика |
supDate | datetime | Дата поставки в формате ISO8601 с указанием часового пояса, см. примеры |
exp | datetime | Cрок годности в формате ISO8601, см. примеры. Поле не является обязательным, т.к. не у всех товаров есть срок годности, но если у товара есть срок, убедительная просьба его заполнять. Покупатели хотят видеть срок на сайте |
prcOptNds | decimal | Цена оптовая (закупочная) с НДС |
prcRet | decimal | Цена реализации |
prcGnvlsMax | decimal | Максимально допустимая розничная цена для ЖНВЛС (поле обязательно для ЖНВЛС). Если эта цена не указана, то АСНА не будет контролировать превышение наценки на ЖНВЛС при расчете розничной цены. В этом случае ПО должно делать это самостоятельно |
prclDate | datetime | Дата прайс-листа в формате ISO8601 с указанием часового пояса, см. примеры |
plType | int | Тип прайслиста, 0 - для юрлица, 1 - для хаба, 2 - для аптеки |
status | int | Признак активной или удаленной строки (0 - активная, 1 - удаленная). В полном прайс-листе всегда 0, т.к. в нем должны быть только активные строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Передача полного сводного прайс-листа аптеки⚓︎
Ежедневно, желательно в период наименьшей загруженности сервисов, интегрированное с АСНА программное обеспечение может отправлять полный сводный прайс-лист по аптеке. Выгрузка полного сводного прайс-листа должна производиться не чаще одного раза в сутки. Так как объем передаваемой информации большой, она не обрабатывается сразу, а ставится в очередь на обработку.
ВНИМАНИЕ!
Перед обработкой полного прайс-листа и записью его в БД, сервис произведет удаление сводного прайс-листа в БД по этой аптеке.
ЗАПРОС
/v5/stores/{storeId}/preorders
Описание⚓︎
Передать полный сводный прайс-лист по аптеке storeId по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА. По нему мы определяем юридическое лицо. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Тело запроса⚓︎
Объект запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
date | datetime | Дата выгрузки полного прайс-листа в формате ISO8601 с указанием часового пояса, см. примеры | |
preorders | Preorder[] | Массив строк полного прайс-листа |
Объект запроса Preorder(строка прайс-листа)⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
nnt | int | Код товара по справочнику АСНА | |
sku | string | Код товара по справочнику клиента. Максимум 50 символов. | |
qnt | float | Количество товара | |
supInn | string | ИНН поставщика | |
supDate | datetime | Дата поставки в формате ISO8601 с указанием часового пояса, см. примеры | |
exp | datetime | Cрок годности в формате ISO8601, см. примеры. Поле не является обязательным, т.к. не у всех товаров есть срок годности, но если у товара есть срок, убедительная просьба его заполнять. Покупатели хотят видеть срок на сайте | |
prcOptNds | decimal | Цена оптовая (закупочная) с НДС | |
prcRet | decimal | Цена реализации | |
prcGnvlsMax | decimal | Максимально допустимая розничная цена для ЖНВЛС (поле обязательно для ЖНВЛС). Если эта цена не указана, то АСНА не будет контролировать превышение наценки на ЖНВЛС при расчете розничной цены. В этом случае ПО должно делать это самостоятельно | |
prclDate | datetime | Дата прайс-листа в формате ISO8601 с указанием часового пояса, см. примеры | |
plType | int | Тип прайслиста, 0 - для юрлица, 1 - для хаба, 2 - для аптеки | |
status | int | Признак активной или удаленной строки (0 - активная, 1 - удаленная). В полном прайс-листе всегда 0, т.к. в нем должны быть только активные строки |
JSON схема для валидации и тестирования
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
202 | Accepted. Принято к обработке. В заголовке Location содержится URL для получения статуса обработки переданного пакета. |
Пример ответа⚓︎
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Передача изменений по сводному прайс-листу аптеки⚓︎
С определенной периодичностью, интегрированное с АСНА программное обеспечение может отправлять изменения по сводному прайс-листу аптеки. При отсутствии изменений по сводному прайс-листу, отправлять данные не нужно.
ВНИМАНИЕ!
Если товар был удален из сводного прайс-листа, то необходимо передать эту запись со статусом равным 1.
ИНФОРМАЦИЯ
Перед обработкой изменений по сводному прайс-листу аптеки и записью их в БД, сервис не будет производить удаление сводного прайс-листа в БД по этой аптеке. Будет произведена операция upsert (update для уже имеющихся в БД строк и insert для отсутствующих).
ЗАПРОС
/v5/stores/{storeId}/preorders
Описание⚓︎
Передать изменения по сводному прайс-листу аптеки storeId по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА. По нему мы определяем юридическое лицо. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Тело запроса⚓︎
Объект запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
date | datetime | Дата выгрузки полного прайс-листа в формате ISO8601 с указанием часового пояса, см. примеры | |
preorders | Preorder[] | Массив строк полного прайс-листа |
Объект запроса Preorder(строка прайс-листа)⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
nnt | int | Код товара по справочнику АСНА | |
sku | string(50) | Код товара по справочнику клиента. Максимум 50 символов. | |
qnt | float | Количество товара | |
supInn | string(50) | ИНН поставщика | |
supDate | datetime | Дата поставки в формате ISO8601 с указанием часового пояса, см. примеры | |
exp | datetime | Cрок годности в формате ISO8601, см. примеры. Поле не является обязательным, т.к. не у всех товаров есть срок годности, но если у товара есть срок, убедительная просьба его заполнять. Покупатели хотят видеть срок на сайте | |
prcOptNds | decimal | Цена оптовая (закупочная) с НДС | |
prcRet | decimal | Цена реализации | |
prcGnvlsMax | decimal | Максимально допустимая розничная цена для ЖНВЛС (поле обязательно для ЖНВЛС). Если эта цена не указана, то АСНА не будет контролировать превышение наценки на ЖНВЛС при расчете розничной цены. В этом случае ПО должно делать это самостоятельно | |
prclDate | datetime | Дата прайс-листа в формате ISO8601 с указанием часового пояса, см. примеры | |
plType | int | Тип прайслиста, 0 - для юрлица, 1 - для хаба, 2 - для аптеки | |
status | int | Признак активной или удаленной строки (0 - активная, 1 - удаленная). В полном прайс-листе всегда 0, т.к. в нем должны быть только активные строки |
JSON схема для валидации и тестирования
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
202 | Accepted. Принято к обработке. В заголовке Location содержится URL для получения статуса обработки переданного пакета. |
Пример ответа⚓︎
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Получение информации по сводному прайс-листу аптеки⚓︎
Для периодической проверки информации по сводному прайс-листу, переданному в АСНА, вы можете получить данные по сводному прайс-листу аптеки, используя следующий запрос:
ЗАПРОС
/v5/stores/{storeId}/preorders?since={since}
Описание⚓︎
Получить сводный прайс-лист по аптеке storeId по протоколу v5, с даты since
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА. По нему мы определяем юридическое лицо | |
since | datetime | Дата/время в формате формат ISO8601, с которой необходимо получить сводный прайс-лист, см. примеры |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | OK. Успешный запрос. В теле ответа содержится массив строк прайс-листа |
Пример ответа⚓︎
Объект ответа (строка прайс-листа)⚓︎
Имя | Тип | Описание |
---|---|---|
srcId | GUID | Уникальный код юрлица по справочнику АСНА |
nnt | int | Код товара по справочнику АСНА |
sku | string | Код товара по справочнику клиента. Максимум 50 символов. |
qnt | float | Количество товара |
supInn | string | ИНН поставщика |
supDate | datetime | Дата поставки в формате ISO8601 с указанием часового пояса, см. примеры |
exp | datetime | Cрок годности в формате ISO8601, см. примеры. Поле не является обязательным, т.к. не у всех товаров есть срок годности, но если у товара есть срок, убедительная просьба его заполнять. Покупатели хотят видеть срок на сайте |
prcOptNds | decimal | Цена оптовая (закупочная) с НДС |
prcRet | decimal | Цена реализации |
prcGnvlsMax | decimal | Максимально допустимая розничная цена для ЖНВЛС (поле обязательно для ЖНВЛС). Если эта цена не указана, то АСНА не будет контролировать превышение наценки на ЖНВЛС при расчете розничной цены. В этом случае ПО должно делать это самостоятельно |
prclDate | datetime | Дата прайс-листа в формате ISO8601 с указанием часового пояса, см. примеры |
plType | int | Тип прайслиста, 0 - для юрлица, 1 - для хаба, 2 - для аптеки |
status | int | Признак активной или удаленной строки (0 - активная, 1 - удаленная). В полном прайс-листе всегда 0, т.к. в нем должны быть только активные строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Бронирование (интернет-заказ)⚓︎
Бизнес-процессы работы с заказами⚓︎
Бронирование⚓︎
Возможные варианты схем интеграции в части требований этапов жизненного цикла заказа:
С определенной периодичностью клиентское ПО должно опрашивать 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 | Уникальный код заказа (передавать только для тестов, не должен использоваться для работы с API) | |
excludeOwn | bool | Исключать или не исключать собственные изменения, по умолчанию true, т.е. при запросе изменений с какой-либо даты, вы получите в ответ только изменения, созданные сайтом, иначе получите назад и созданные аптекой статусы. Только для тестирования можно его выставлять в false. |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. Успешный запрос. Тело запроса содержит объект заказов |
Пример ответа⚓︎
Объект ответа⚓︎
Имя | Тип | Описание |
---|---|---|
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⚓︎
Объект ответа 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. Если вы используете параметр orderId при запросе заказа, то вы либо не должны указывать параметр since, либо должны указывать в качестве этого параметра дату, равную максимальному значению поля ts из всех трех массивов(заголовки, строки, статусы) этого заказа.
Неуспешный ответ⚓︎
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 |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. Успешный запрос. Тело запроса содержит объект заказов |
Пример ответа⚓︎
Объект ответа⚓︎
Имя | Тип | Описание |
---|---|---|
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⚓︎
Объект ответа 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 схема для валидации и тестирования
Пример запроса
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
201 | Created. Данные успешно записаны |
Пример ответа⚓︎
Неуспешный ответ⚓︎
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, где каждая строка - номер заказа Пульс, полученный в накладной.
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
201 | Created. Данные успешно записаны |
Пример ответа⚓︎
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. В случае если было отправлено несколько номеров заказов и не все заказы найдены в БД, то вернется этот статус со списком заказов, которые не были найдены в БД, в теле ответа. Найденные заказы при этом будут записаны. См. пример ниже. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Пример ответа, если заказ не найден⚓︎
Ended: Работа с сайтом
Маркетинг и планы ↵
Маркетинговые мероприятия⚓︎
Общие положения начисления бюджета⚓︎
- Бюджет для каждой аптеки начисляется отдельно, но зависит от показателей работы всей сети, к которой относится аптека
- Бюджет делится на две части: «Общий маркетинг» и «Товар дня» итоговая сумма складывается арифметически из двух этих частей, которые рассчитываются независимо.
- Бюджет за мероприятие «Товар дня» начисляется независимо от выполнения планов по другим типам мероприятий. Базой для расчета бонуса является объем закупки в промо-период (стандарт: месяц проведения акции и 10 дней до него) конкретных товаров (или разрешенных для их замены SKU), в зачет идет закуп только у разрешенных дистрибьюторов (по контракту, содержащему конкретный товар). В одном мероприятии участвует 4 товара (без учета разрешенных заменителей), мероприятие организуется на каждый месяц отдельно. План выставляется в упаковках на каждый товар и на каждую участвующую аптеку. Бонус за каждую закупленную упаковку устанавливается для каждого товара в каждом мероприятии индивидуально (стандарт = 30% от суммы закупа в учетных ценах АСНА) Выполнение оценивается по сети целиком, в соответствии с описанием мероприятия «Товар дня»
- Бюджет по «Общему маркетингу» начисляется по каждому товару из маркетингового ассортимента в отдельности. На каждый товар может быть несколько уровней возможного бонуса (2 или 4) в зависимости от группы маркетингового ассортимента, к которой товар относится. Какой уровень бонуса в итоге получит сеть по каждому товару зависит от выполнения сетью планов по маркетинговым мероприятиям.
- Базой для расчета бюджета аптеки является маркетинговая закупка в учетных ценах АСНА-CIP (учетная цена на каждый маркетинговый товар устанавливается на квартал со стороны АСНА) закупленного аптекой товара, при условии, что для этой аптеки товар является маркетинговым в данном квартале (определяется мероприятиями типа «Маркетинговый ассортимент») и товар был куплен у разрешенного поставщика (для части производителей на квартал устанавливаются ограничения дистрибьюторов – только купленный у этих поставщиков товар данного производителя идет в зачет для начисления бюджета).
Условия начисления бюджета⚓︎
Маркетинговый ассортимент⚓︎
Для товаров из Группа 1 и Группа 2
На товары данных групп начисляется:
- Бонус 1, если БДН по сети не выполнено.
- Бонус 2, если БДН по сети выполнено.
Для товаров из Группа 3 УСТМ
На товары данной группы начисляется:
- Бонус 1, если БДН по сети не выполнено и план по УСТМ-мероприятию (с данным товаром) не выполнен.
- Бонус 2, если БДН по сети выполнено, но план по УСТМ-мероприятию (с данным товаром) не выполнен.
- Бонус 3, если БДН по сети не выполнено, но план по УСТМ-мероприятию (с данным товаром) выполнен.
- Бонус 4, если БДН по сети выполнено, и план по УСТМ-мероприятию (с данным товаром) тоже выполнен.
Бездефектурное наличие⚓︎
Для всех товаров
Выполнение считается по сети целиком. Выполненным условие БДН для сети считается от 85% строк.
УСТМ⚓︎
Для товаров из Группа 3 УСТМ
Выполнение считается в разрезе Сеть-мероприятие-квартал. Мероприятие считается выполненным для сети, если план выполнен на 100% и более.
Товар дня⚓︎
Если мероприятие выполнено по сети, то за зачтенный (по разрешенным дистрибьюторам) факт закупки каждого товара в учетных ценах (АСНА-CIP цены) начисляется заранее обозначенный процент бонуса.
Условия выполнения мероприятия⚓︎
Маркетинговый ассортимент⚓︎
Сеть в любом случае получает минимум Бонус 1. Получение бонуса от 2 до 4 уровня определяется выполнением БДН и УСТМ-мероприятий.
Бездефектурное наличие⚓︎
Процент выполнения сетью матрицы БДН = количество строк (товаров по аптекам сети с планом по БДН), по которым товар был на остатке 80% и более дней в квартале, разделить на суммарное количество строк с планом по аптекам данной сети. Выполненным условие БДН для сети считается от 85% строк.
УСТМ⚓︎
Сеть имеет план закупа в учетных ценах (АСНА-CIP) по каждому мероприятию (набор SKU одного бренда в одной конкурентной группе - "кластере") на квартал. В зачет идет только закуп у разрешенных дистрибьюторов.
Товар дня⚓︎
Мероприятие считается выполненым для сети, если план по 3 из 4-х товаров, участвующих в акции, выполенн минимум на 90%, а на 1 товар минимум на 50%.
Варианты использования в аптечном ПО, повышающие эффективность работы сети с маркетингом⚓︎
Маркетинговый ассортимент⚓︎
- Подсветка в интерфейсе закупки товара
- Приоритезация товаров в рамках группы аналогичных к закупке (если расчет потребности и закуп организован "слотами", и возможен закуп аналогичного товара при более выгодной цене или отсутствии первичного по потребности)
- Использование в кассовом интерфейсе: приоритет при запросе покупателя, подсветка, часть мотивации персонала.
- Комплексный подход к мотивации персонала - начисление баллов за маркетинговые товары, 0 или "-" за немаркетинговые и немаржинальные товары. Отчетность по индивидуальной мотивации, информаирование на кассе о результатах текущей сессии по набранным баллам/выполнению плана конкретным фармацевтом/аптекой/сменой.
Бездефектурное наличие⚓︎
1.Подсветка в интерфейсах закупки, в заказах и черновых накладных, возможно блок на возможность исключить из чернового заказа для заведующих. Подсветка в интерфейсе настройки ассортиментного плана аптеки.
- Автоматический заказ/попадание в черновые заказы
- Увеличенная потребность для заказа - например, на 1 упаковку больше, чем под статистику продаж, чтобы сток не обнулялся.
- Оповещения при обнулении стоков по данным SKU
- Внутренняя аналитика выполнения условий по БДН в разрезе аптек и сети
- Автоматическое включение в ассортиментный план аптеки, невозможность локального (заведующей) исключения позиций - при централизованном управлении сетью.
Разрешенные дистрибьюторы⚓︎
- При заказе товара в первую очередь посылать заказ только разрешенным дистрибьюторам, а к запрещенным, например, только при согласовании ответственным пользователем, если ни у одного разрешенного нет товара, или, какой-то лимит по отличию цены превышен. То есть приоритезация заказа товара по разрешенным поставщикам.
- Подсветка товаров, для которых есть ограничения поставщиков в интерфейсах заказа товара, ассортиментного плана.
УСТМ⚓︎
- Внутренний мониторинг сетью/аптекой выполнения планов АСНА в отчетности. Более оперативен относительно куба и портала АСНА - так как данные не надо валидировать и ждать обменов.
- Настройка мотивации персоанала на продажу конкретных товаров в конкурентных группах (кластерах) - баллы/планы на фармацевта/аптеку + системы мониторинга - индивидуальные на кассе и общие в отчетности.
- Настройка замен/расширения с приоритетом для товаров УСТМ в кассовых модулях. Запрос покупателя на аналогичные товары - напоминание фармацевту о замене в порядке приоритета, о расширении (связанная нозология/группа) - тоже в порядке приоритета с учетом принадлежности товаров к УСТМ и маркетинговому ассортименту в принципе.
Выкладка⚓︎
- Товар из выкладки всегда есть в мероприятиях бездефектурного наличия, поэтому дополнительные меры контроля наличия при соблюдении выше описанных рекомендаций не нужны.
- Если в ПО есть признаки и интерфейс по работе с выкладкой (адресация выкладки, напоминания, авто-печать ценников и т.п.), то там везде можно учитывать этот признак автоматически. Подсвечивать в прайсе, если необходимо.
- При приходовании товаров (в накладных или в ином интерфейсе) нужно подсвечивать и напоминать о необходимости выложить данный товар.
Товар дня⚓︎
- Если в ПО есть календарь мероприятий/ электронная отметка принадлежности к акционной витрине - можно использовать информацию там.
- Можно заранее добавить нужные количества товара/какую-то часть плана в авто-заказ для каждой участвующей аптеки. Избежать таким образом акционной дефектуры.
- Если есть возможность автоматической настройки скидок под мероприятие на определенный период - можно также использовать поступившую информацию.
- Можно использовать для мотивации персонала, загружая планы в систему напрямую/распределяя между сотрудниками.
- Напоминание первостольнику в кассовом модуле при запросе товара из нозологии/группы аналогов. Напоминание на расширение покупки при заказе связанной группы товаров.
- Мотивация персонала: план на аптеку/фармацевта в ПО, отчеты, мониторинг выполнения планов, баллы за продажу и т.п.
- Внутренний мониторинг сетью/аптекой выполнения планов АСНА в отчетности. Более оперативен относительно куба и портала АСНА - так как данные не надо валидировать и ждать обменов.
Скачать описание мероприятий в виде файла Excel
Рекомендуемые поставщики⚓︎
Ежедневно, желательно не чаще одного раза в сутки, вы можете получать информацию о рекомендуемых поставщиках маркетингового товара на каждый товар.
ВНИМАНИЕ!
Справочник содержит очень большое количество записей, поэтому необходимо запрашивать его частями. Если в ответе пришло количество записей меньше чем запрашиваемое количество, то вы получили все имеющиеся записи на данный момент. Кроме этого существует возможность получить справочник рекомендуемых поставщиков другим способом, см. Справочник связей маркетинговый производитель - поставщик и Справочник связей товар - маркетинговый производитель
ЗАПРОС
/v5/references/recommended_suppliers?rv={rv}&count={count}&rvInt={rvInt}&actual={false|true}
Описание⚓︎
Получить справочник рекомендуемых поставщиков по протоколу версии 5, count строк, начиная с версии rv (массив байт) или версии rvInt (int64)
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 100000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. | |
actual | bool | Если true, то возвращает только актуальные записи за текущий период. Не забывайте в этом случае перед получением зачищать все полученные ранее данные по рекомендуемым поставщикам в своей базе. Следует иметь в виду, что с этим параметром при получении данных частями, если в момент получения какая-либо запись стала неактуальной, то она не будет передана. Таким образом до следующего получения полного списка, эта строка будет у вас числиться актуальной. По умолчанию false. | |
test | bool | Если true, то вы получите тестовый набор данных |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
nnt | int | Уникальный код товара по справочнику АСНА |
inn | string | ИНН поставщика |
begDate | datetime | Дата начала действия рекомендуемого поставщика |
endDate | datetime | Дата окончания действия рекомендуемого поставщика |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Рекомендуемые поставщики по ИНН⚓︎
Ежедневно, желательно не чаще одного раза в сутки, вы можете получать информацию о рекомендуемых поставщиках маркетингового товара на каждый товар.
ЗАПРОС
/v5/references/recommended_suppliers?rv={rv}&count={count}&rvInt={rvInt}&actual={false|true}
Описание⚓︎
Получить справочник рекомендуемых поставщиков, по списку ИНН, по протоколу версии 5, count строк, начиная с версии rv (массив байт) или версии rvInt (int64)
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
count | int | Количество возвращаемых записей, для загрузки частями. Не должно превышать 100000. | |
rv | byte[] | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. В JSON массив байт представлен в кодировке base64. | |
rvInt | long | Версия последней записи, для загрузки частями. Берется текущее максимальное значение поля из базы данных. | |
actual | bool | Если true, то возвращает только актуальные записи за текущий период. Не забывайте в этом случае перед получением зачищать все полученные ранее данные по рекомендуемым поставщикам в своей базе. Следует иметь в виду, что с этим параметром при получении данных частями, если в момент получения какая-либо запись стала неактуальной, то она не будет передана. Таким образом до следующего получения полного списка, эта строка будет у вас числиться актуальной. По умолчанию false. | |
test | bool | Если true, то вы получите тестовый набор данных |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Accept | application/json или application/x-json-full |
Тело запроса⚓︎
Массив строк(ИНН поставщиков) в формате JSON, см. пример ниже
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со справочником. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
nnt | int | Уникальный код товара по справочнику АСНА |
inn | string | ИНН поставщика |
begDate | datetime | Дата начала действия рекомендуемого поставщика |
endDate | datetime | Дата окончания действия рекомендуемого поставщика |
actual | bool | Признак актуальности строки |
rv | byte[] | Версия строки. В JSON массив байт представлен в кодировке base64. |
rvInt | int | Версия строки |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Маркетинговые планы⚓︎
Ежедневно, желательно не чаще одного раза в сутки, вы можете получать информацию о планах аптеки по маркетинговым мероприятиям.
ЗАПРОС
/v5/stores/{storeId}/marketing?type={typeId}&test={false|true}
Описание⚓︎
Получить планы по маркетинговым мероприятиям для аптеки storeId по протоколу версии 5, с типом typeId
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА | |
type | int | Тип мероприятия, параметр не является обязательным, если его не указать то вернутся все типы. Таблица с типами мероприятий расположена в конце раздела. Можно передать несколько типов мероприятий, например type=13&type=16&type=9 | |
test | bool | Если true, то вы получите тестовый набор данных | |
full | bool | Если true, то получать не только со статусом Активно, но и с другими статусами. По умолчанию false |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON с планами. |
Пример ответа⚓︎
Объект ответа⚓︎
Имя | Тип | Описание |
---|---|---|
full | bool | Признак того что в пакете пришли все мероприятия, а не только изменения (пока true для всех пакетов) |
currentVersion | int | Версия данных (пока не используется) |
headers | Header[] | Массив заголовков маркетинговых мероприятий |
plans | Plan[] | Массив планов мероприятий |
Объект ответа Header⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код мероприятия |
name | string | Наименование мероприятия |
begDate | datetime | Дата начала действия мероприятия |
endDate | datetime | Дата окончания действия мероприятия |
typeId | int | Код типа мероприятия |
type | string | Наименование типа мероприятия |
status | int | Признак удаления (1 - удалена) |
stateId | int | Код состояния мероприятия |
stateName | string | Состояние мероприятия |
Объект ответа Plan⚓︎
Имя | Тип | Описание |
---|---|---|
actionId | int | Уникальный код мероприятия |
periodYM | int | Месяц, на который рассчитан план (ггггмм). |
nnt | int | Код номенклатуры по справочнику АСНА |
qnt | float | План в упаковках |
nntParent | int | Код основного товара по справочнику АСНА |
cip | decimal | АСНА CIP-цена |
bonusPerPiece | decimal | Бонус в рублях на упаковку |
sum | decimal | План в рублях |
status | int | Признак удаления (1 - удалена) |
pf | bool | Признак ПФ (парафарма) |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Типы маркетинговых мероприятий⚓︎
Код | Название | Описание |
---|---|---|
9 | Бездефектурное наличие | Ежедневное наличие на остатках. Передаются поля nnt, qnt (равно 1 для рекомендуемого наличия), nntParent (если есть) |
10 | Выкладка | Ежедневное наличие на витринах. Передаются поля nnt, nntParent (если есть) |
13 | Маркетинговый ассортимент | Наличие в маркетинговом асортименте. Передаются поля nnt, nntParent (если есть), cip |
15 | Товар дня | План продаж. Передаются поля nnt, cip, qnt, bonus, nntParent (если есть) |
16 | УСТМ | План закупок. Передаются поля nnt, cip, sum |
17 | Лидер продаж | Передаются поля nnt, qnt |
18 | Объемное соглашение | Передаются поля nnt, qnt |
19 | Рекомендованный ассортимент | Передается поле nnt |
Маркетинговые планы по сети⚓︎
Ежедневно, желательно не чаще одного раза в сутки, вы можете получать информацию о планах сети по маркетинговым мероприятиям.
ЗАПРОС
/v5/nets/{storeId}/marketing?type={typeId}
Описание⚓︎
Получить планы по маркетинговым мероприятиям для сети, в которую входит аптека со storeId по протоколу версии 5, с типом typeId
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА | |
type | int | Тип мероприятия, параметр не является обязательным, если его не указать то вернутся все типы. Таблица с типами мероприятий расположена в конце раздела. Можно передать несколько типов мероприятий, например type=13&type=16&type=9 | |
full | bool | Если true, то получать не только со статусом Активно, но и с другими статусами. По умолчанию false |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON с планами. |
Пример ответа⚓︎
Объект ответа⚓︎
Имя | Тип | Описание |
---|---|---|
full | bool | Признак того что в пакете пришли все мероприятия, а не только изменения (пока true для всех пакетов) |
currentVersion | int | Версия данных (пока не используется) |
headers | Header[] | Массив заголовков маркетинговых мероприятий |
plans | Plan[] | Массив планов мероприятий |
Объект ответа Header⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Уникальный код мероприятия |
name | string | Наименование мероприятия |
begDate | datetime | Дата начала действия мероприятия |
endDate | datetime | Дата окончания действия мероприятия |
typeId | int | Код типа мероприятия |
type | string | Наименование типа мероприятия |
status | int | Признак удаления (1 - удалена) |
stateId | int | Код состояния мероприятия |
stateName | string | Состояние мероприятия |
Объект ответа Plan⚓︎
Имя | Тип | Описание |
---|---|---|
actionId | int | Уникальный код мероприятия |
periodYM | int | Месяц, на который рассчитан план (ггггмм). |
nnt | int | Код номенклатуры по справочнику АСНА |
qnt | float | План в упаковках |
nntParent | int | Код основного товара по справочнику АСНА |
sum | decimal | План в рублях |
status | int | Признак удаления (1 - удалена) |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Маркетинговые группы и бонусы⚓︎
Ежедневно, желательно не чаще одного раза в сутки, вы можете получать информацию о маркетинговых группах и бонусах.
ЗАПРОС
/v5/stores/{storeId}/marketing_groups_bonuses
Описание⚓︎
Получить информацию по маркетинговым группам и бонусам для аптеки storeId по протоколу версии 5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON с планами. |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
nnt | int | Уникальный код товара АСНА |
actionId | int | Уникальный код мероприятия |
groupId | int | Группа товара ( 1 - Группа 1, 2 - Группа 2, 3 - Группа 3 УСТМ) |
type | string | Тип мероприятия |
bonusTypePrem | int | Тип бонуса для АС с бюджетом Премиальный |
useAvgBonusUSTM | bool | Использовать средний бонус USTM |
bonusGrnt | decimal | Бонус 1. Гарантированный |
bonusMid | decimal | Бонус 2. Средний |
bonusMax | decimal | Бонус 3. Максимальный |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Ended: Маркетинг и планы
Интеграция ↵
Продажи (чеки) товаров по заказам⚓︎
Передача продаж по заказам⚓︎
Интегрированное с АСНА программное обеспечение периодически должно отправлять полные сведения о продажах по заказам с сайта АСНА. Периодичность может быть как ежедневная (желательно), так и еженедельная или ежемесячная. Передавать данные можно как по одной аптеке, так и по всем аптекам сети. Так как объем передаваемой информации о продажах может быть большой, пакет не обрабатывается сразу, а ставится в очередь на обработку.
ВНИМАНИЕ
Перед обработкой продаж и записью их в БД, сервис произведет удаление ВСЕХ продаж в БД за указанный в передаваемом пакете период, по указанным в пакете аптекам.
ЗАПРОС
integration/v5/nets/{storeId}/sales
Описание⚓︎
Передать продажи по аптечной сети, в которую входит аптека storeId по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
storeId | GUID | Идентификатор аптеки по справочнику АСНА |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Тело запроса⚓︎
Объект запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
beg_date | datetime | Дата начала выгружаемого периода продаж в формате yyyy-mm-dd, включительно | |
end_date | datetime | Дата конца выгружаемого продаж в формате yyyy-mm-dd, не включительно | |
checks | Check[] | Массив строк чеков |
Объект запроса Check (строка чека)⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
store_id | string(50) | Уникальный код аптеки по справочнику АСНА | |
date | datetime | Дата строки чека в формате ISO-8601 с указанием часового пояса | |
order_num | string(50) | Номер заказа АСНА | |
sku | string(50) | Код товара по справочнику клиента. Максимум 50 символов. | |
name | string | Полное название товара, включая производителя и страну | |
ean | string(13) | Штрих-код производителя | |
qnt | float | Количество по строке чека | |
prc_opt | decimal | Цена оптовая без НДС | |
prc_sale | decimal | Цена продажи с учетом всех скидок | |
fiscal_date | datetime | Дата фискального документа в формате ISO8601 | |
fiscal_sum | decimal | Сумма фискального документа. Сумма фискального документа должна сходиться с переданными суммами строк по данному чеку/документу | |
rn | string(16) | Регистрационный номер ККТ | |
fn | string(16) | Заводской номер фискального накопителя | |
fd | string(10) | Номер фискального документа | |
fp | string(10) | Фискальный признак документа | |
sgtin | string(27) | sGTIN товара, поле обязательно для маркированного товара |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
202 | Accepted. Принято к обработке. В заголовке Location содержится URL для получения статуса обработки переданного пакета. |
Пример ответа⚓︎
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Ended: Интеграция
Дополнительно ↵
Прочие возможности⚓︎
Информирование о событиях API (Webhooks)⚓︎
АСНА REST API может уведомлять заинтересованных подписчиков о событиях, происходящих в сервисе. Например, вы можете получать уведомление о поступлении новых заказов или об успешной загрузке ваших остатков в облако. Для это API использует технологию Webhooks, т.е. осуществляет HTTP запросы на ваши адреса, зарегистрированные в API. Использование уведомлений возможно, если ваши сервисы находятся в открытом доступе и имеют либо постоянный IP адрес, либо постоянное доменное имя. В случае отсутствия постоянного доменного имени или адреса можно воспользоваться службами Dynamic DNS или утилитами, типа ngrok1 . За консультацией вы можете обратиться в Отдел веб-сервисов компании АСНА.
Список событий, поддерживаемых API⚓︎
Название | Описание |
---|---|
stocks_full | Приняты полные остатки аптеки |
stocks_updates | Приняты изменения остатков аптеки |
preorders_full | Принят полный сводный прайс-лист юрлица |
preorders_updates | Приняты изменения сводного прайс-листа юрлица |
orders_updates_store | Приняты изменения заказов со стороны аптеки |
orders_updates_site | Приняты изменения заказов со стороны сайта |
Безопасность webhooks⚓︎
В целях обеспечения безопасности, при запросе на ваш адрес, в заголовке X-Signature запроса мы передаем хэш (HMAC SHA256) тела запроса.
При получении запроса на ваш URL, вы можете вычислить хэш тела запроса по алгоритму SHA256 и сравнить его значение с содержимым заголовка X-Signature. В случае если вычисленное вами значение совпадает с тем, что находится в заголовке, вы обрабатываете запрос, иначе отклоняете его.
Алгоритм формирования значения заголовка X-Signature⚓︎
- Содержимое тела запроса в виде массива байт хэшируется по алгоритму SHA256 с использованием секретного ключа.
- Полученный массив байт переводим в строку с шестнадцатиричным кодированием (hex-encoded string)
- Спереди к полученной строке добавляем строку sha256=
Проверка подписи не обязательна, но если вы хотите быть уверены что запрос пришел именно от АСНА API, а не от постороннего, возможно вредоносного, ПО, то наличие этой проверки в вашем сервисе сделает его более защищенным.
Получение ключа⚓︎
Клиенты, которые желают защитить от несанкционированного доступа свои URL, используемые для получения уведомлений от АСНА REST API, должны получить ключ, который будет использоваться для формирования подписи запроса.
ЗАПРОС
/v5/keys/webhooks
Описание⚓︎
Получить ключ для проверки подписи webhooks по протоколу v5
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | OK. Ключ выдан. |
Пример ответа⚓︎
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Подписка на события⚓︎
Клиенты, которые желают получать уведомление от API о событии, должны подписаться на это событие.
ЗАПРОС
/v5/events/{eventName}/subscribe
Описание⚓︎
Подписаться на событие eventName по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
eventName | string | Название события |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Пример запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
clientId | GUID | Уникальный идентификатор клиента по справочнику АСНА (например, если нужно получить уведомление о событии приема полных остатков по определенной аптеке, то в качестве clientId подставляется уникальный идентификатор этой аптеки ) | |
url | string | URL, на который API должен делать запрос при возникновении события |
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
201 | Created. Новая подписка создана. |
Пример ответа⚓︎
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Обновление информации о подписке⚓︎
Клиенты могут изменить подписку на событие, например, при изменении URL, который должен вызывать API.
ЗАПРОС
/v5/events/{eventName}/subscribe
Описание⚓︎
Изменить подписку на событие eventName по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
eventName | string | Название события |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Пример запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
clientId | GUID | Уникальный идентификатор клиента по справочнику АСНА (например, если нужно получить уведомление о событии приема полных остатков по определенной аптеке, то в качестве clientId подставляется уникальный идентификатор этой аптеки ) | |
url | string | URL, на который API должен делать запрос при возникновении события |
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | OK. Подписка изменена. |
Пример ответа⚓︎
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Удаление подписки⚓︎
Клиенты могут удалить подписку на событие, если в ней больше нет необходимости.
ЗАПРОС
/v5/events/{eventName}
Описание⚓︎
Удалить подписку на событие eventName по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
eventName | string | Название события |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Пример запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
clientId | GUID | Уникальный идентификатор клиента по справочнику АСНА (например, если нужно удалить уведомление о событии приема полных остатков по определенной аптеке, то в качестве clientId подставляется уникальный идентификатор этой аптеки ) |
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
204 | No Content. Подписка удалена. |
Пример ответа⚓︎
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Проверка отложенной обработки⚓︎
Если вы, при вызове API, получили в ответ HTTP-статус 202
Accepted, то это значит что переданные данные требуют отложенной обработки и были поставлены в очередь на обработку. В этом случае HTTP-заголовок Location содержит URL, запросив который вы получите статус обработки.
Проверить статус отложенной обработки можно несколькими способами.
- Через вызов API, описанный в этом разделе, можно получить информацию о статусе отложенной обработки.
- Получить статус отложенной обработки можно, кроме вышеописанного, способом, описанным в Информирование о событиях API (Webhooks).
- Запросить через API остатки назад и убедиться что они соответствуют отправленным Получение информации по остаткам аптеки.
- Получить информацию об остатках и прайс-листах можно через бота.
ЗАПРОС
/v5/messages/{messageId}/status
Описание⚓︎
Получить информацию о статусе отложенной обработки упаковки данных c messageId по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
messageId | GUID | Идентификатор упаковки данных |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со связками. |
204 | No Content. Информации о пакете нет в БД |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Идентификатор записи |
messageId | GUID | Идентификатор упаковки |
statusId | int | Код статуса |
statusMessage | string | Статус |
statusDate | datetime | Дата статуса в формате ISO8601 в нулевом часовом поясе |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Статусы пакетов⚓︎
Код (statusId) | Название | Описание |
---|---|---|
0 | Accepted | Принято к обработке |
1 | Processing | Обрабатывается |
2 | Processed | Обработано |
3 | Error | Ошибка. Пакет не был обработан |
Валидация данных в формате JSON⚓︎
Иногда может возникнуть необходимость проверить отправляемые данные на соответствие формату JSON. Как правило, это происходит если API отклоняет запрос со статусом 400
, но вы не можете обнаружить причину. Для проверки ваших данных, вы можете использовать следующий вызов API:
ЗАПРОС
/v5/json_schemas/{schemaName}/validation
Описание⚓︎
Валидировать данные по схеме schemaName по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
schemaName | string | Имя схемы для валидации. Может принимать значения: stocks, preorders, orders, transactions |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Тело запроса⚓︎
Тело запроса должно содержать в формате JSON пакет, который требуется валидировать
Пример запроса
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | OK. Пакет не содержит ошибок |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Пример ответа с ошибками валидации⚓︎
Имя | Тип | Описание |
---|---|---|
field | string | Поле, в котором обнаружена ошибка |
message | string | Описание ошибки |
Возможна ситуация когда пакет не удается распарсить, в этом случае мы не можем понять в каких полях ошибка. Ниже пример такого ответа.
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Ended: Дополнительно
Ended: Документация API
Техподдержка ↵
Техподдержка⚓︎
Тестирование АСНА REST API⚓︎
При разработке интеграции может возникнуть необходимость предварительно ознакомиться с работой API, понять как он устроен, сделать тестовые запросы и получить тестовые ответы. Для этого существует несколько вариантов, которые будут описаны ниже.
Swagger⚓︎
Помимо данного руководства, сервисы API АСНА предоставляют автоматически генерируемую документацию в формате Swagger (OpenAPI). Скачать ее можно по ссылке https://api.asna.cloud/swagger/v5/swagger.json. Существует целый ряд бесплатных и коммерческих инструментов, которые позволяют просматривать документацию в этом формате в структурированном виде. АСНА Web API имеет встроенный инструмент для просмотра документации в формате Swagger, которым можно воспользоваться, перейдя по адресу https://api.asna.cloud/swagger, либо Открыть его из документации. Указанный инструмент позволяет не только просматривать документацию, но и выполнять запросы к API.
Postman⚓︎
Для тестирования любого REST API, не исключая и АСНА Web API, существует приложение Postman. Официальная страница приложения расположена по адресу https://www.getpostman.com , а само приложение можно скачать для вашей операционной системы по ссылке https://www.getpostman.com/apps . Приложение бесплатно. Postman удобнее всего использовать совместно со Swagger.
Swagger (OpenAPI 3.0 спецификация)⚓︎
Основные HTTP статусы⚓︎
Успешный запрос⚓︎
200 OK⚓︎
Статус говорит о том что запрос выполнен успешно, все действия выполнены.
201 Created⚓︎
Этот статус мы возвращаем если запрос был выполнен успешно, необходимые данные получены и записаны в БД.
202 Accepted⚓︎
Статус возвращается в случае если запрос прошел успешно, но полученные данные требуют время на обработку. В БД они появятся не сразу, а через некоторое время, когда будет завершена их обработка. Узнать о том что данные попали в базу можно несколькими способами, описанными здесь
204 No Content⚓︎
Запрос прошел успешно, но данные для возврата отсутствуют.
Неуспешный запрос⚓︎
400 Bad Request⚓︎
Этот статус сообщает вам о том что в запросе, переданном вами на API, были ошибки. Это может быть ошибка в параметрах запроса или в теле запроса, т.е. неверно сформированном JSON, отсутствии каких-либо обязательных полей и т.д. Как проверить правильность отправлямых данных можно прочитать тут Решение проблем при работе с API
401 Unauthorized⚓︎
Этот статус сообщает вам о том что вы не авторизованы для выполнения вызова API. Возможно вы не передаете авторизационный токен, либо он не проходит валидацию по каким-либо причинам. Убедитесь что срок жизни токена не истек, для аптек на данный момент его срок жизни составляет 1 час. Более точное время жизни токена вы можете получить при запросе токена на сервере авторизации. Посмотреть содержимое токена можно здесь
403 Forbidden⚓︎
Данный статус выдается в случае если вы прошли авторизацию при помощи токена, но у вас нет прав на выполнение конкретного вызова API. Обратитесь, пожалуйста, в техподдержку, если вы считаете что такие права у вас должны быть.
404 Not Found⚓︎
Выдается в случае если в API нет такого URL, который вы пытаетесь вызвать. Проверьте правильность URL, полное соответствие его документации.
405 Method Not Allowed⚓︎
Этот статус вы можете получить если вызываемый URL существует, но вы используете HTTP метод, который не поддерживается для данного URL. Например, вы пытаетесь выполнить метод POST, когда URL поддерживает только метод GET.
429 Too Many Requests⚓︎
Статус выдается если вы превысили допустимое число запросов в единицу времени. Сервисы имеют небезграничные ресурсы, кроме того, нет необходимости выполнять какие-то вызовы слишком часто, например, отправку полных остатков досточно произвести раз в сутки.
500 Internal Server Error⚓︎
Этот статус может придти от сервиса если случился какой-либо сбой в его работе. Сбой может быть вызван ошибкой в сервисе, нагрузкой на компоненты сервиса, некорректными запросами. Как правило, данный статус носит временный характер и при повторе запроса уже не возвращается.
1С ↵
Интеграция с 1С⚓︎
Получить информацию о интеграции с 1С можно здесь
Ended: 1С
Развитие ↵
Дорожная карта⚓︎
- Переход на Net Core 5. Ускорит сервис за счет новых оптимизаций компилятора, JITa и сборщика мусора, а также оптимизации библиотек.
- Переход на сериализатор System.Text.Json. Ожидается ускорении механизма сериализации-десериализации.
- Переход на модель валидации Fail Fast по умолчанию. При первой же ошибке валидации пакет отклоняется и дальнейшая валидация не происходит. Сократит нагрузку. Признак настраивается.
- Возможность приема упаковки полных остатков если в ней присутствуют ошибки валидации. Строки, не прошедшие валидацию, выкидываются из упаковки. Процент разрешенных ошибок настраивается. Не будет работать при модели Fail Fast.
- Обновленный Rate Limiter. Возможно не нужен будет белый список и пр. для его обхода
- Восстановление работы механизма получения статуса принятых пакетов. Вместо БД используем Redis
- Собственная очередь для каждого шарда. В случае, если один или несколько шардов находятся под нагрузкой и в очереди скапливаются сообщения, это не повлияет на прием данных на другие шарды. К сожалению, потребители на очереди создаются при старте шины, которая запускается при старте воркера, поэтому необходимо перезапускать воркеры при создании новых шардов. Экспериментальная функция
- Для полных остатков
- Для полных предзаказов
- Встроенная система мониторинга статусов заказа. Экспериментальная функция
- Конвертация внешних кодов товара в коды АСНА и обратно. Экспериментальная функция, так как непонятна пока нагрузка
- Две служебные шины, одна для данных, вторая для событий. Для улучшения масштабирования и обхода ограничений на количество запросов и объектов.
- Обновленная система уведомлений (webhooks). Для каждого домена создается своя очередь уведомлений, что позволяет задать rate limit и kill switch, снизив нагрузку на уведомляемый сервис. Как и с очередями для остатков, нужно перезапускать воркер при добавлении новых доменов в подписку. Нужен механизм авторестарта
- Новая документация
- Возможность записи больших пакетов в базу батчами. Экспериментальная функция, возможно улучшит работу СУБД
- Остатки
- Предзаказы
- Возможность приема в качестве параметра даты с +, т.е. без энкодинга
- Новая авторизация.
- Перевод ее на Net Core 5, заодно подчистить права для уменьшения размера токена.
- Импорт аптек из справочников через SQL для его ускорения
- Объединение очередей полных и изменений
- Запуск API в Azure Kubernetes Service (AKS)
- Возможность изменения функционала сервиса на лету (Feature Management)
- Healthchecks
- Рефакторинг кода
- Тестирование
- Переход на Net Core 6
- Работа с сертификатами
- Перевод Automapper на кодогенераторы. Ожидается прирост производительности механизма мэппинга более чем в 4 раза
- Перевод System.Text.Json на кодогенераторы. Ожидается 20-30% прирост производительности механизма сериализации-десериализации
Ended: Развитие
Ended: Техподдержка
FAQ⚓︎
Решение проблем при работе с API⚓︎
ВОПРОС
Отправленные данные не появляются на сервисах АСНА.
При каждом вызове API сервис возвращает HTTP статус (код ответа, КодОтвета в 1С), именно он служит индикатором успешной или неуспешной передачи. Как правило, при успешном вызове, сервис возвращает статусы 200
, 201
, 202
. Если при вызове сервис вернул 400
статус (Bad Request), то с большой вероятностью вы отправляете данные, которые не проходят первичную валидацию на сервере. При этом сервис возвращает в теле ответа информацию об ошибках в полученных данных и данные не поступают на дальнейшую обработку.
Если в теле ответа вы получили сообщение Missing required data или {«»:[«The input was not valid.»]}, то это говорит о том что JSON, который вы отправляете на сервис, не является валидным с точки зрения стандарта.
- Проверьте ваш JSON на наличие ошибок и соответствие стандарту через онлайн-валидаторы, такие как JSON Formatter & Validator и JSONLint.
- Убедитесь в том что JSON не содержит символа запятая в качестве разделителя дробной и целой части в числах, т.к. в стандарте запятыми разделяются поля. Убедитесь в том что в значениях полей типа string не содержатся двойные кавычки, т.к. в стандарте этот символ используется для указания начала и конца значения текстового поля. Если же в значении текстового поля необходимо передать символ двойной кавычки, то этот символ необходимо экранировать символом .
- Убедитесь в том что необязательные поля, которые вы не заполняете по тем или иным причинам, либо отсутствуют в сформированном JSON, либо имеют значение null. Убедитесь в том, что кодировка текста в передаваемых данных UTF-8. Данные должны пересылаться без маркера BOM.
- Внесите необходимые исправления и, при необходимости, снова проверьте онлайн-валидатором.
Если сформированный вами JSON валиден с точки зрения стандарта, но не проходит валидацию на обязательные поля и типы значений на сервере АСНА, то сервис вернет в теле ответа подробную информацию о том, какие поля не прошли валидацию.
- Для проверки вы можете использовать JSON схему, которая прилагается в виде ссылки в каждом разделе документации, связанном с передачей данных. Произвести валидацию по схеме вы можете по ссылке JSON Schema Lint. В левое окно загружается схема, в правое ваш JSON. Не забудьте указать версию спецификации схемы - draft-04.
- Внесите соответствующие изменения и повторите отправку.
Видео-инструкция по валидации данных с помощью схемы⚓︎
ВОПРОС
При передаче данных на сервисы АСНА возвращается 400 «Missing required data».
Этот статус и сообщение сервисы АСНА возвращают, если не могут десериализовать присланные данные. Проверьте что кодировка JSON utf-8, а также наличие HTTP-заголовка Content-Type со значением application/json. Если json загружается в тело запроса из файла, то убедитесь что в тело запроса не попадает BOM (несколько байт перед началом json), например для utf-8 BOM EF BB BF.
ВОПРОС
Я получил токен на сервере авторизации и передаю его при вызовах API, но в ответ приходит HTTP статус 401.
Авторизационный токен действителен в течение некоторого времени (на данном этапе это время составляет 60 минут), это сделано для того, чтобы даже перехватив токен, злоумышленник не смог им пользоваться постоянно . Кроме того, короткоживущий токен позволяет быстро отключить от API клиентов, которые по тем или иным причинам прекратили сотрудничество с АСНА. В случае получения 401
статуса, клиентское ПО должно получить новый токен на сервере авторизации. Этот процесс подробно описан в разделе Авторизация в АСНА REST API документации.
ВОПРОС
Мы не видим своей аптеки на сайте asna.ru
Для того, чтобы аптека появилась на сайте asna.ru, необходимо выполнение следующих условий:
- Аптека должна выполнить интеграцию по протоколу АСНА Web API в части выгрузки полных остатков и изменений по остаткам, а также бронирования товара.
- Аптека должна регулярно выгружать по протоколу полные остатки (раз в сутки) и изменения остатков (раз в 10 минут), если было товародвижение за этот интервал времени. При отсутствии выгрузки полных остатков более 24 часов, аптека убирается с сайта.
- На Портале настроек АСНА-Экономия у данной аптеки должны быть выполнены настройки в разделе Центр управления параметрами АСНА-Экономия: включено бронирование товара и выставлены параметры брони.
После включения настроек аптека появится на сайте после синхронизации настроек (1-2 часа). Для проверки даты остатков вы можете использовать АСНА-бот.
Если все три пункта выполнены, но аптеки на сайте нет, то обратитесь, пожалуйста, в техподдержку отдела веб-сервисов.
Авторизация⚓︎
ВОПРОС
Не могу подключиться к серверу авторизации. В чем причина?
Сервер авторизации работает по адресу sso.asna.cloud, используя порт 5000 для протокола HTTPS и порт 6000 для протокола HTTP. Всегда используйте протокол HTTPS для работы с сервером авторизации, за исключением ситуаций, когда это физически невозможно. Если при подключении по HTTPS на порт 5000 возникают проблемы, а подключение к серверу авторизации по HTTP (порт 6000) работает, то убедитесь что ваше ПО использует для подключения по HTTPS один из следующих протоколов - TLS 1.0, TLS 1.1, TLS 1.2. Протоколы SSL 2.0, SSL 3.0 не поддерживаются, как устаревшие и небезопасные. Проверьте настройки Свойства браузера (Internet Options) в Панели управления, согласно приведенной ниже картинке:
Общий порядок действий при возникновении проблемы подключения к серверу авторизации
- Убедитесь в том что ваш DNS сервер разрешает хост sso.asna.cloud в IP адрес, дав команду ping sso.asna.cloud в командной строке. Если вы увидели в ответе IP адрес, то DNS работает.
- Убедитесь что вы запрашиваете корректный адрес. Это должен быть либо https://sso.asna.cloud:5000/connect/token , либо http://sso.asna.cloud:6000/connect/token.
- Убедитесь что включена поддержка TLS 1.0 или TLS 1.1 или TLS 1.2 в Свойствах браузера.
Остатки товаров⚓︎
ВОПРОС
Нужно ли выгружать разобранные упаковки на сайт?
Нет, не нужно. На сайт должны выгружаться только целые упаковки, цена должна соответствовать цене целой упаковки.
ВОПРОС
У нас к одному коду товара по справочнику АСНА привязано несколько наших кодов. Как нам выгружать остатки?
Если есть множественная привязка ваших товаров к одному по справочнику АСНА, то такие позиции выгружать на сайт не нужно. Для того чтобы эти товары попали на сайт, необходимо избавиться от множественных связок, используя возможности портала связок Alphaone.
ВОПРОС
У нас несколько партий товара с разными ценами. Почему на сайте мы видим не все партии?
Мы сворачиваем все остатки по номенклатуре, отбирая максимальную розничную цену и минимальный срок годности, при этом суммируя количество. Принцип, по которому идет сворачивание остатков, может в дальнейшем измениться.
ВОПРОС
Мы не видим нашей аптеки на сайте. В чем причина?
Причин может быть много, например, у аптеки сняли признак Активна, не выставлены признаки выгрузки на сайт и бронирования на портале Alphaone. Кроме этого, аптека убирается с сайта, если не было выгрузки полных остатков больше 24 часов. Все эти параметры можно проверить в боте отдела веб-сервисов АСНА Бот отдела веб-сервисов АСНА.
Бронирование⚓︎
ВОПРОС
Что такое административная панель первостольника?
Административная панель первостольника это закрытая часть сайта, в которую возможен доступ только сотрудникам аптеки. В этой административной панели сотрудники аптеки могут видеть все заказы покупателей в этой аптеке, а также изменять их, при необходимости. Разработчики аптечного ПО могут реализовать возможность входа в админку первостольника непосредственно из ПО, например по кнопке или пункту меню.
Ссылки на административную панель первостольника⚓︎
Действие | Ссылка |
---|---|
Переход в админку | https://www.asna.ru/bitrix/admin/sale_order.php?lang=ru&guid={storeId} |
Новый заказ | https://www.asna.ru/bitrix/admin/sale_order_create.php?lang=ru&SITE_ID=s1&guid={storeId} |
Редактирование заказа | https://www.asna.ru/bitrix/admin/sale_order_edit.php?lang=ru&guid={storeId}&ID={num} |
В ссылках необходимо подставить параметры storeId - уникальный идентификатор аптеки по справочнику АСНА, а num - номер заказа
ВОПРОС
Что делать, если при сборе заказа выяснилось что та или иная позиция заказа отсутствует в аптеке?
Так как процесс бронирования из наличия автоматизирован и предполагает что бронирование осуществляется по тем остаткам товара, которые числятся в ПО, то возможны ситуации, когда в ПО товар есть, а в наличии его нет (пересорт, недостача и т.д.). При обнаружении такой ситуации, аптека должна уведомить покупателя по телефону, а покупатель в свою очередь может либо отредактировать заказ либо отменить его. Именно для того, чтобы избежать таких ситуаций, мы просим выгружать нам остатки своевременно и из первоисточника (аптеки), а не из центральной БД (офиса), что, конечно, не устанит проблему на 100%, но уменьшит количество подобных ситуаций.
ВОПРОС
Как должна происходить продажа заказа, в котором есть товар и по наличию и по предзаказу?
Идеальная ситуация, к которой мы стремимся - один чек на один заказ, т.е. покупатель ожидает поступления всего предзаказа и только потом выкупает весь заказ. В случае, если заказ был сделан с терминала в аптеке или покупатель находится рядом с аптекой и хочет выкупить ту часть заказа, которая была забронирована из наличия, есть возможность выкупить заказ в два этапа. Сначала покупатель может выкупить то что было забронировано из наличия аптеки, затем, после получения подтверждения о поступлении предзаказа, выкупить оставшуюся часть. Продажа предзаказа в несколько этапов нежелательна и не предусмотрена, в крайнем случае, покупатель может выкупить то что уже поступило по предзаказу и отказаться от оставшейся части.
ВОПРОС
Может ли покупатель редактировать заказ, в котором есть товар по предзаказу?
Да, может, при этом ни добавлять товары по предзаказу, ни увеличивать количество товара по предзаказу будет невозможно, как только сайт получит 203 статус по заказу.
ВОПРОС
Может ли покупатель редактировать заказ с признаком АСНА-Экономия?
Да, может. При этом цены на товары будут перерасчитываться, исходя из суммы заказа. При уменьшении суммы заказа ниже порога АСНА-Экономии, признак АСНА-Экономия на заказ будет сброшен и покупатель получит заказ по черным (розничным) ценам.
ВОПРОС
Заказ был сделан по АСНА-Экономия, но при выкупе заказа покупатель решил отказаться от некоторых товаров. Как должна происходить продажа?
Заказ с признаком АСНА-Экономия не должен редактироваться через клиентское ПО. Есть два варианта:
- Первостольник, через админку первостольника, может изменить заказ покупателя. Цены на товары могут перерасчитаться, исходя из суммы заказа. Желательно, чтобы ПО имело возможность быстро получить изменения с сайта, например, по нажатию на кнопку или пункт меню.
- Покупатель может отменить заказ и купить товар, который ему нужен, по ценам аптеки.
ВОПРОС
Что делать если к одному sku по справочнику АСНА привязано 2 или более sku по справочнику номенклатуры аптеки?
В случае, если существуют множественные привязки (много кодов аптеки к одному коду АСНА), клиентское ПО должно иметь возможность проверять каждый код аптеки и бронировать актуальный товар.
Маркетинг⚓︎
ВОПРОС
Может ли товар находиться в нескольких маркетинговых мероприятиях одного типа?
Один товар может находиться во всех мероприятиях, но не может находиться дважды в одном мероприятии.
ВОПРОС
nntParent - за что отвечает данное поле?
В некоторых мероприятиях есть основной товар и дополнительный. План рассчитывается только на основной товар, а если товар дополнительный, то у него будет заполнено parentNnt, а план нулевой. Дополнительные товары идут в зачет.
ВОПРОС
Для типа мероприятий 9 количество всегда равно 1, или есть исключения?
Количество не всегда равно 1. Возможны другие значения. 30(31) - обязательные товары для БДН, 1 - рекомендуемые товары для БДН(например, новый вводимый товар или товар, который сложно заказать у поставщиков)
ВОПРОС
periodYM - для чего нужен данный параметр, если у мероприятия есть период действия?
Например, мероприятие Товар дня, может быть на месяц, но мероприятие само годовое. И значения ННТ меняются от месяца к месяцу.
ВОПРОС
Меняется ли CIP-цена в зависимости от мероприятия?
Нет, не изменяется. CIP-цена одна для одного SKU во всех типах мероприятий.