...
Техническое задание v.3.
|
Бизнес процесс:
...
№ | Имя файла | Описание назначения | Комментарий |
1. | store | магазины | Новый файл. Ранее СуперМаг плюс такой не формировал. |
2. | classif | Классификатор товаров | Без изменений. |
3. | updateItems | товары | Файл расширен новыми тегами. |
4. | storePrices | цены по месту хранения | Без изменений. |
5. | priceTagInfo | акционные цены | Новый файл. Ранее СуперМаг плюс такой не формировал. |
6. | itemInfo | QR-коды и PLU | Новый файл. Ранее СуперМаг плюс такой не формировал. |
Общее описание
Ниже описывается расширение существующего протокола обмена данными (СуперМаг XML) для создания готового "коробочного" решения, которое позволит клиентам, использующим СуперМаг Плюс, избежать отдельной интеграции с «СуперМаг DS» для использования электронных ценников (ESL) и Прайс-дисплеев.
Ранее данные из Торговой системы выгружались данные исключительно для кассовых систем и систем контроля цен. Теперь этот процесс дополняется: фактически те же самые данные будут параллельно передаваться и в DS. Это позволит системе «СуперМаг DS» получать актуальную информацию о товаре и их ценах.
...
- Наименование файла строго как в описание. (операционная система LINUX регистрозависима)
- Формат представления информации – XML.
- Кодировка – UTF-8.
- Десятичный разделитель – точка
- Каждый тип информации передаётся с помощью отдельного файла, который имеет название, соответствующее типу передаваемой информации. В одном файле может содержаться только один тип информации.
- Расширение существующих файлов в протоколе:
Тип информации
Имя файла и головного тега
Магазины
store
Товары
updateItems
- Добавление новых файлов в протокол:
- Расширение существующих файлов в протоколе:
...
Примечание | Формат | Источник данных из СуперМаг Плюс | |
<stores |
| ||
<version=""> | String(20) | ||
<store> | |||
<code> | Код магазина в торговой системе | String(100) | Код магазина в торговой системе |
<name> | Название магазина | String(100) | Название магазина |
<jurName> | Название юр. лица | String(100) | Собственный контрагент места хранения. Единственный из списка, или первый попавшийся. |
<address> | Адрес магазина | String(100) | Адрес магазина |
<director> | Новое поле: Директор магазина | String(100) | Требуется добавить новый атрибут места хранения или создать новую системную характеристику. |
<description> | Новое поле: Описание магазина | String(100) | Требуется добавить новый атрибут места хранения или создать новую системную характеристику. |
<INN> | ИНН юр. лица | String(40) | ИНН Собственного контрагента. |
<KPP> | КПП | String(40) | КПП Места хранения. |
<phone> | Телефон | String(40) | Телефон Места хранения. |
<active> | Активный/неактивный | Boolean | Фиксированное значение «true» |
<egaisIP> | IP-адрес и порт УТМ | String(255) | Требуется добавить новый атрибут места хранения или создать новую системную характеристику. |
<CFA> | Код ЦФО – открытый идентификационный код, определяющий центр финансовой ответственности (идентификатор магазина для казначеев) | String(255) | Требуется добавить новый атрибут места хранения или создать новую системную характеристику. |
<validatorIP> | IP-адрес и порт валидатора | String(255) | Требуется добавить новый атрибут места хранения или создать новую системную характеристику. |
<localModuleIP> | IP-адрес локального модуля (для обращения в случае отсутствия связи с системой "Честный знак") | String (255) | Требуется добавить новый атрибут места хранения или создать новую системную характеристику. |
<fsrarID> | Идентификатор организации в ФС РАР | String(255) | ФС РАР Собственного контрагента. |
<prismaIP> | IP-адрес и порт системы "Трассир" | String(255) | Требуется добавить новый атрибут места хранения или создать новую системную характеристику. |
<storeIP> | IP модуля интеграции магазина | String(100) | Требуется добавить новый атрибут места хранения или создать новую системную характеристику. |
<inputURL> | Полный URL входного каталога модуля интеграции магазина | String(255) | Требуется добавить новый атрибут места хранения или создать новую системную характеристику. |
<outputURL> | Полный URL выходного каталога модуля интеграции магазина | String(255) | Требуется добавить новый атрибут места хранения или создать новую системную характеристику. |
<region> | Код региона, к которому относится магазин | Int(11) | Требуется добавить новый атрибут места хранения или использовать новую системную характеристику. |
<storeType> | Код формата магазина из справочника форматов магазинов | Int(11) | Требуется добавить новый атрибут места хранения или создать новую системную характеристику. |
</store> | |||
</stores> |
...
Примечание | Формат | Источник данных из СуперМаг Плюс | |
<updateItems |
| ||
<version=""> | String(20) | ||
<item> | |||
<article> | String(40) | ||
<name> | String(255) | ||
<measure> | Сокращение (шт, кг, л) | String(40) | |
<measprec> | Количество знаков в дробной части; точность – 1, 0.001, 0.01, 0.1 | String(one of 1; 0.1; 0.01; 0.001) | |
<groupId> | Ссылка на узел классификатора | String(40) | |
<producer> | Новое поле: Страна производства | String(255) | Страна |
<description> | Новое поле: Описание товара
| String(255) | Требуется создать новую системную характеристику. |
<customType> | Новое поле: Атрибут товара | Int(11) | Требуется создать новую системную характеристику. |
<egaisType> | Тип маркировки товара | Int(11) | |
<SubExcise> | Признак подакцизности товара | Int(11) | |
<crptNotUnique> | Признак неуникальности контрольной марки | 0 – уникальная марка | |
<taxgroupId> | Код налоговой группы | ||
<propertyId> | Доп. свойство «Размер» | String(40) | |
<addProperty> | Доп. свойства | ||
<id> | String(40) | ||
<name> | String(80) | ||
<value> | String(100) | ||
</addProperty> | |||
<barcode> | Перечень штрихкодов Один штриховой код товара. | ||
<id> | Непосредственно штрихкод | String(40) | Первый попавшийся, или тот, что отмечен как «Использовать при EDI обмене \ GTIN» |
<propertyValue> | String(100) | ||
<quantity> | «Количество» для штрихкода | Decimal(16.3) | |
</barcode> | |||
<TNVDcode> | Идентификатор записи из справочника ТН ВЭД | String(50) | |
<productAlcCodes> | |||
<alcCode> | Специальный идентификатор кода алкогольной продукции | String(40) | |
</productAlcCodes> | |||
<supplierLink> | |||
<supplierINN> | ИНН поставщика | String(12) | |
<supplierTax> | НДС поставщика из контракта с поставщиком | Возможные значения: «20%», «10%», «Не облагается» | |
</supplierLink> | |||
</item> | |||
</updateItems> |
...
Примечание | Формат | Источник данных из СуперМаг Плюс | ||||||||
<priceTagInfofullness= "F/I"storeId = "" > | Значение может быть F или I (обязательное)Код магазина во внешней системе (обязательное) | |||||||||
<item article=""> | Код товара (артикул) (секция должна быть указана хотя бы один раз) | String(40) | Артикул из спецификации документа Маркетинговая акция. | |||||||
description | Название акции (обязательное) | String(100) | Название акции. | |||||||
dateFrom | Дата и время начала акции | DateTime() | Планируемая Дата и время начала акции | |||||||
dateTo | Дата и время окончания акции | DateTime() | Панируемая \ или \ Фактическая (при наличии) Дата и время окончания акции | |||||||
campaigntype | Тип компании. Один из предопределенных: (обязательное)
| String(40) | Фиксированное значение «discountbypercent» | |||||||
<campaign> | ||||||||||
Внутри секции <campaign> настройки кампании, которые зависят от типа кампании (см. таблицы далее) | ||||||||||
</campaign> | ||||||||||
</item> | ||||||||||
</priceTagInfo> | ||||||||||
| Якорь |
|---|
Секция
...
campaign:
| <campaign> | Источник данных из СуперМаг Плюс | ||
|---|---|---|---|
price | цена (обязательное) | Decimal(16.2) | Цена артикула из документа Маркетинговая акция. |
oldPrice | старая цена | Decimal(16.2) | Старая цена из документа Маркетинговая акция. |
discount | процент скидки | Decimal(16.2) | Процент скидки. Требуется рассчитать и округлить до целого числа в меньшую сторону. |
</campaign> |
Пример:
<priceTagInfo fullness="I" storeId="2">
<version>1.0</version>
<item article="000177">
<description>Покупайте наших слонов</description>
<dateFrom>01.01.2025</dateFrom>
<dateTo>31.12.2025</dateTo>
<campaigntype>discountbypercent</campaigntype><campaign>
<price>45</price>
<oldPrice>50</oldPrice>
<discount>10</discount></campaign>
</item>
</priceTagInfo>
...
Так же не исключены ситуации, при которых возможно пересечение артикулов в созданных маркетинговых акциях, а также досрочное завершение акции (вручную сотрудником).
Так как стоит задача, получить в DS акционные цены в строгом в соответствии в ценами в кассовой системе, то логика выгрузки определена следующая:
Маркетинговая акция запустилась (однократная выгрузка).
Задача: проинформировать DS о значении и начале действия аукционной цены.
- При формировании выгрузки storePrices (цены) - для товара участвующего в Маркетинговой акции, в качестве регулярной цены будет выгружаться текущая цена из карточки, она же на этот момент будет являться аукционной.
- При формировании выгрузки priceTagInfo (акционные цены) - для товара участвующего в действующей Маркетинговой акции, в качестве:
- «Цены» - должна выгружаться текущая цена из карточки, она же на этот момент будет являться акционной.
- «Старой цены» - должна быть выгружена цена, которая была зафиксирована как «цена до акции».
- «Название акции» - название акции, которая породила акционную цену.
- «Дата и время начала акции» - Планируемая Дата и время старта акции
- «Дата и время окончания акции» - Планируемая Дата и время окончания акции
Маркетинговая акция завершена (однократная выгрузка).
Задача: проинформировать DS о завершения действия аукционной цены.
- При формировании выгрузки storePrices (цены) - для товара участвующего в Маркетинговой акции, в качестве регулярной цены будет выгружаться текущая цена из карточки, она же на этот момент будет являться аукционной.
- При формировании выгрузки priceTagInfo (акционные цены) - для товара участвующего в действующей Маркетинговой акции, в качестве:
- «Цены» - должна выгружаться текущая цена из карточки, она же на этот момент будет являться регулярной ценой.
- «Старой цены» - должна быть выгружена цена из карточки, она же на этот момент будет являться регулярной ценой.
- «Название акции» - название акции, которая породила акционную цену.
- «Дата и время начала акции» - Планируемая Дата и время старта акции
- «Дата и время окончания акции» - Фактическая Дата и время окончания акции
Маркетинговая акция завершена, но артикул продолжает участвовать в другой акции (однократная выгрузка).
Задача: проинформировать DS о новом значении и начале действия новой аукционной цены.
- При формировании выгрузки storePrices (цены) - для товара участвующего в Маркетинговой акции, в качестве регулярной цены будет выгружаться текущая цена из карточки, она же на этот момент будет являться акционной.
- При формировании выгрузки priceTagInfo (акционные цены) - для товара участвующего в действующей Маркетинговой акции, в качестве:
- «Цены» - должна выгружаться текущая цена из карточки, она же на этот момент будет являться акционной.
- «Старой цены» - должна быть выгружена цена, которая была зафиксирована как «цена до акции».
- «Название акции» - название акции, которая породила акционную цену.
- «Дата и время начала акции» - Планируемая Дата и время старта акции
- «Дата и время окончания акции» - Планируемая Дата и время окончания акции
Публикация файлов в kafka (топики)
...
Каждый клиент идентифицируется уникальным ID (partner_id). Для каждого клиента создается отдельная группа топиков в формате: partner_id.doc_type
partner_id - id партнера на сервере DS
doc_type - тип передаваемой информации
...