Остатки товаров⚓︎
Передача остатков в АСНА⚓︎
Передача остатков в АСНА осуществляется следующими методами:
- Передача информации о полных остатках
- Передача изменений
Передача полных остатков аптеки⚓︎
Ежедневно, желательно в период наименьшей загруженности сервисов, интегрированное с АСНА программное обеспечение должно отправлять полные сведения о наличии товаров в каждой аптеке. Выгрузка полных сведений об остатках должна производиться не чаще одного раза в сутки. Так как объем передаваемой информации о полных остатках большой, пакет не обрабатывается сразу, а ставится в очередь на обработку.
ОГРАНИЧЕНИЕ
Отправлять полные остатки необходимо один раз в сутки. Желательно отправлять полные остатки в период с 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 - идентификатор вашей аптеки.
Инструкция по работе с веб-интерфейсом фильтра встроена в веб-интефейс.