Создать модуль для CMS (1C-Bitrix, WooCommerce, OpenCart), обеспечивающий интеграцию интернет-магазина с приложением Бикодо: Онлайн-чеки и учет в кассе Эвотор.
Модуль должен автоматически передавать заказы из интернет-магазина в приложение на кассе, обеспечивать формирование чеков в соответствии с требованиями законодательства, а также синхронизировать остатки товаров между сайтом и кассой.
Дополнительно модуль должен поддерживать работу с маркированными товарами (т.е учитывать какой именно вид маркировки имеет товар), учитывать характеристики товаров (например, размер, цвет)
Касса Эвотор выполняет авторизацию в модуле с использованием ключа доступа.
При каждом запросе ключ передается в модуль и проходит проверку.
Доступ разрешается только при успешной валидации ключа.
Пользователь модуля может задать произвольный ключ доступа, который будет использоваться для подключения кассы Эвотор.
Необходимо реализовать поле выбора языка (select) для выгрузки данных в кассу Эвотор.
Требования
Тип поля: выпадающий список (select)
Значения: список доступных языков, настроенных в CMS
Значение по умолчанию: язык по умолчанию сайта
Логика работы
Выбранный язык используется при формировании данных для передачи в кассу Эвотор
При выгрузке товаров должны использоваться в:
наименование товара
характеристики
описания
Характеристика товара
Дать пользователю выбирать характеристики товара которые можно выводить при событиях продаж и экспорта товара в кассу Эвотор.
Как в итоге показываются в карточке товаров в кассе Эвотор:
т.е Наименование | Харктеристика 1, Харктеристика 2 и т.д
✏️Note
Характеристики товара — это дополнительные свойства товаров (цвет, размер, бренд), используемые для фильтрации, сравнения и детального описания на витрине.
Характеристика товара в CS-CART на витрине:
Характеристика товара в CS-CART в карточке товара:
Информация
Необходимо реализовать раздел «Информация» в административной части модуля.
Назначение
Раздел предназначен для предоставления пользователю ссылок на:
В карточке товара в административной панели необходимо добавить отдельный блок (вкладку или секцию) для настроек, связанных с маркированной и не маркированной продукцией.
Функциональные требования
В блоке должен быть доступен выбор вида товара (включая маркированные категории)
Если CMS поддерживает маркированные товары:
при условии что все виды маркированных и не маркированных товаров поддерживаются
Особенности
Список видов товаров должен соответствовать требованиям Эвотор
Выбранное значение передается при:
продаже товара
экспорте товаров в кассу
Массовые изменения карточек товара
Для упрощения работы с маркированными товарами необходимо реализовать функцию массового изменения вида товара.
Назначение
Функция позволяет избежать ручного редактирования каждой карточки товара и быстро назначить вид товара (в том числе маркированный) сразу для нескольких товаров.
Функциональные требования
В списке товаров (административная панель) добавить действие:
«Массовое изменение вида товара (Бикодо: Онлайн-чеки и учет)»
Действие применяется к выбранным товарам (через чекбоксы)
Поведение
При выборе действия:
1.
Открывается форма (модальное окно или отдельный блок)
2.
В форме доступно поле:
Вид товара (select со списком типов товаров)
3.
Кнопка: «Сохранить»
Логика работы
После сохранения выбранный вид товара применяется ко всем выбранным товарам
Значение записывается в поле модуля для каждого товара
Изменения должны происходить без необходимости открытия каждой карточки
Особенности
Используется тот же список видов товаров, что и в карточке товара
Функция должна работать быстро даже при большом количестве товаров
Должна быть защита от случайного применения (например, подтверждение действия)
Назначение для пользователя
Функция необходима для:
быстрой настройки маркированных товаров
массового обновления данных
сокращения времени на настройку каталога
Статусы заказов
Назначение
Для корректной работы с чеками необходимо добавить дополнительный (промежуточный) статус заказа.
Этот статус позволяет избежать повторной отправки чека на кассу.
Требование
В CMS необходимо создать новый статус заказа:
Обработан: Чек на обработке у кассы
Логика работы (без модуля)
Стандартный путь продажи выглядит так:
Логика работы (с модулем)
При продаже на сайте статус заказа изменяется на "Обработан" (статус "обработан" значит "оплачено клиентом")
Далее мы добавляем промежуточный статус:
Обработан: Чек на обработке у кассы
тем самым путь продажи меняется на:
Важно
Пока заказ находится в статусе:
«Обработан: Чек на обработке у кассы»
он считается уже отправленным в кассу
Повторная отправка чека не должна происходить
Зачем это нужно
Чтобы избежать ситуации, когда:
касса повторно запрашивает заказ
и чек печатается второй раз
Этот статус служит маркером, что чек уже был отправлен в кассу.
Тип запросов: Все входящие запросы являются POST запросами
Заголовки (Headers): Содержит Content-Type: application/json
Кодировка: UTF-8
Авторизация
URL для обработки запроса
Разработчик модуля должен реализовать endpoint (URL), который будет принимать входящие запросы от сервера Бикодо, и предоставить этот URL заказчику для настройки интеграции.
Endpoint должен принимать внешние HTTP/HTTPS-запросы
Ответ должен быть строго в формате JSON
Без дополнительных данных и сообщений
Проверка ключа обязательна для всех входящих запросов
Обязательное условие: Запрос от сервера и ответ модуля сохранить в логах CMS
Вывод остатков
URL для обработки запроса
Разработчик модуля должен реализовать endpoint (URL), который будет принимать входящие запросы от сервера Бикодо, и предоставить этот URL заказчику для настройки интеграции.
[
{
"code": "180",
"article_number": "Q01802L8VS",
"quantity": "23.00",
"price": "1.00",
"name": "Пакет2",
"description": "Пакет",
"alcoCodes": "[]",
"is_excisable": "false",
"is_age_limited": "false",
"classification_code": "",
"measure_name": "шт",
"tax": "NO_VAT",
"allow_to_sell": "true",
"cost_price": "0.00",
"id": "045117b0e0a14a24ab9765e79cbf113f",
"type": "NORMAL"
},
{
"code": "292",
"article_number": "ARE5JHDOLK03",
"quantity": "0.00",
"price": "5000.00",
"name": "HOKA M Challenger ATR 6 | Сезон:Лето, Бренд:Hoka",
"description": "В шестой версии Challenger ATR 6 укрепляет свою репутацию самых универсальных кроссовок. Как следует из названия, эти кроссовки-вездеходы бросают в",
"alcoCodes": "[]",
"is_excisable": "false",
"is_age_limited": "false",
"classification_code": "",
"measure_name": "шт",
"tax": "NO_VAT",
"allow_to_sell": "true",
"cost_price": "0.00",
"id": "1700002963a44da1b542e0726b7bb758",
"type": "NORMAL"
},
{
"code": "293",
"article_number": "6625110671AF0",
"quantity": "2.00",
"price": "5000.00",
"name": "HOKA M Challenger ATR 6 | Сезон:Лето, Бренд:Hoka",
"description": "В шестой версии Challenger ATR 6 укрепляет свою репутацию самых универсальных кроссовок. Как следует из названия, эти кроссовки-вездеходы бросают в",
"alcoCodes": "[]",
"is_excisable": "false",
"is_age_limited": "false",
"classification_code": "",
"measure_name": "шт",
"tax": "NO_VAT",
"allow_to_sell": "true",
"cost_price": "0.00",
"id": "53c3bce66e434e4fa09556518c2fcb54",
"type": "NORMAL"
}
...
Поле json остатков
Формат
обьяснение
code
INTEGER
Уникальный id товара Код товара или модификации товара. До 25 символов.
article_number
STRING
Артикул товара.
quantity
DECIMAL
Доступный к продаже остаток товара или модификации товара. До семи знаков в целой и двух знаков в дробной части.
price
DECIMAL
Отпускная цена товара (услуги) или модификации товара. Формат: DECIMAL
name
STRING
Название товара (услуги) или модификации товара.
Наименование мы показываем с характеристикой товара по выбранным показателям клиента. Например пользователь помечает что он хочет показать: далее мы берем эти харктеристики и ставим в наименование, например: HOKA M Challenger ATR 6 | Бренд:Hoka, Размер:40, Цвет:Красный
description
STRING
Описание товара или модификации товара. Поле не поддерживет данные в формате HTML и XML, только строка. Ограничение по количеству символов: 150
alcoCodes
ARRAY
Передаем пустой массив JSON_ARRAY() Массив кодов алкогольной продукции ЕГАИС для алкогольных товаров и модификаций товаров. Длина одной строки (кода) строго 19 символов, так как алкоголь не разрешается продавать в интернет магазинах массив должен быть пустым.
is_excisable
BOOLEAN
Просто создаем false Указывает, является ли товар подакцизным: true – товар подакцизный; false – товар не подакцизный.
is_age_limited
BOOLEAN
Определяет, установлены ли возрастные ограничения для товара: true – товар с возрастными ограничениями; false – товар без возрастных ограничений.
classification_code
STRING
просто создаем пустую строку Это классификационный код товара.
measure_name
STRING
Единица измерения для товара или модификации товара: - шт или ед - г - кг - т - см - дм - м - кв. см - кв. дм - кв. м - мл - л - куб. м - кВт*ч - Гкал - сутки - час - мин - с - Кбайт - Мбайт - Гбайт - Тбайт
Если это товар просто создаем строку "шт"
tax
STRING
Код ставки НДС для товара или модификации товара: NO_VAT – без НДС; VAT_0 – основная ставка 0%; VAT_10 – основная ставка 10%; VAT_10_110 – расчётная ставка 10%; VAT_18 – основная ставка 18%. С первого января 2019 года может содержать 20% VAT_18_118 – расчётная ставка 18%. С первого января 2019 года может содержать 20%. VAT_5 – основная ставка 5%; VAT_5_105 – расчётная ставка 5%; VAT_7 – основная ставка 7%; VAT_7_107 – расчётная ставка 7%; VAT_22 – основная ставка 22%; VAT_22_122 – расчётная ставка 22%.
allow_to_sell
BOOLEAN
Признак разрешения продажи. Указывает можно добавить товар в чек или нельзя:true - товар можно добавить в чек; false - товар нельзя добавить в чек.
cost_price
DECIMAL
Закупочная цена товара или модификации товара.
id
STRING
Идентификатор товара, услуги или модификации. Идентификатор уникален в рамках магазина. Максимальная длина идентификатора — 200 символов. Символы идентификатора должны удолетворять регулярному выражению A-a0-9-_. В качестве идентификаторов товаров вы можете использовать, например, uuid4, соответствующий RFC.
Настройки есть внутри товара во вкладке модули: также есть в списке товаров. Настройки - Массовое изменение "вида товара": 0-tovar, 100-service, 200-markbeer, 201-markbeerkegs, 202-excisealcoholstrong, 203-nonmarkbeer, 204-nonabeer, 300-lticket, 301-lwin, 401-Shoes, 402-Tobacco, 403-Tires, 404-Perfume, 405-Photographic goods, 406-Clothes and underwear, 407-Other smoking products, 408-Dairy products, 409-Water, 410-Fur products, 411-Bicycles, 412-Antiseptics and disinfectants, 413-Biologically active food supplements, 414-Juice products and soft drinks, 415-Wheelchairs, 416-Medical products, 417-VEGETABLE_OIL_MARKED, 418-CAVIAR_MARKED, 419-VETERINARY_MARKED, 420-PET_FOOD_MARKED, 421-MEDICINE_MARKED, 422-JEWELRY_MARKED или Товар = NORMAL Услуга = SERVICE Алкоголь: Маркированное пиво = BEER_MARKED Алкоголь: Маркированное пиво (кеги) = BEER_MARKED_KEG Алкоголь: Акцизный алкоголь (Крепкий) = ALCOHOL_MARKED Алкоголь: Немаркированный алкоголь (Пиво и слаб. алк.) = ALCOHOL_NOT_MARKED Алкоголь: Безалкогольное пиво = NOT_ALCOHOL_BEER_MARKED Лотерея: Лотерейный билет = LOTTERY_TICKET Лотерея: Выигрыш в лотерею = LOTTERY_PRIZE Маркированный товар: Обувь = SHOES_MARKED Маркированный товар: Табак = TOBACCO_MARKED Маркированный товар: Шины = TYRES_MARKED Маркированный товар: Духи = PERFUME_MARKED Маркированный товар: Фототовары = PHOTOS_MARKED Маркированный товар: Одежда и белье = LIGHT_INDUSTRY_MARKED Маркированный товар: Другая курительная продукция = TOBACCO_PRODUCTS_MARKED Маркированный товар: Молочная продукция = DAIRY_MARKED Маркированный товар: Вода = WATER_MARKED Маркированный товар: Меховые изделия = FUR_MARKED Маркированный товар: Велосипеды = BIKE_MARKED Маркированный товар: Антисептики и дезинфицирующие средства = ANTISEPTIC_MARKED Маркированный товар: Биологически активные добавки к пище = DIETARY_SUPPLEMENTS_MARKED Маркированный товар: Соковая продукция и безалкогольные напитки = JUICE_MARKED Маркированный товар: Кресла-коляски = WHEELCHAIRS_MARKED Маркированный товар: Медицинские изделия = MEDICAL_DEVICES_MARKED Маркированный товар: Растительные масла = VEGETABLE_OIL_MARKED Маркированный товар: Морепродукты (Икра) = CAVIAR_MARKED Маркированный товар: Ветеринарные препараты = VETERINARY_MARKED Маркированный товар: Корма для животных = PET_FOOD_MARKED
P.S: Список всех возможных типов товаров — вы найдёте в разделе «Схемы товаров».
Требования
Endpoint должен принимать внешние HTTP/HTTPS-запросы
Ответ должен быть строго в формате JSON
Без дополнительных данных и сообщений
Проверка ключа обязательна для всех входящих запросов
Обязательное условие: Запрос от сервера и ответ модуля сохранить в логах CMS
Запрос на вычитание остатков при офлайн-продажах
Данный запрос используется для передачи информации о продажах, совершённых непосредственно на кассе Эвотор (офлайн), с целью обновления остатков товаров в интернет-магазине.
Логика работы
1.
На кассе происходит продажа товара
2.
Приложение формирует данные о продаже
3.
Отправляется запрос в модуль CMS
4.
Модуль:находит товар по идентификатору
создает новый заказ (тем самым уменьшает количество остатка на сайте)
или:
уменьшает остаток товара
сохраняет изменения
URL для обработки запроса
Разработчик модуля должен реализовать endpoint (URL), который будет принимать входящие запросы от сервера Бикодо, и предоставить этот URL заказчику для настройки интеграции.
по "productCode", если значение в нем пустое или отсутсвует в массиве, по "name".
Далее есть два пути:
Вариант 1: Предпочтительный способ, это создать новый заказ: тем самым за счёт стандартной логики CMS произойдет списание остатков.
Важно: Заранее удостовериться чтобы этот заказ не передавался по событию продаж обратно на кассу или загрузке продаж
Напрямую уменьшить остаток товара на значение "quantity"
Ответ модуля:
Результат
JSON массив
Успешно
{ "0": true }
Ошибка
{ "0": false }
Требования
Endpoint должен принимать внешние HTTP/HTTPS-запросы
Ответ должен быть строго в формате JSON
Без дополнительных данных и сообщений
Проверка ключа обязательна для всех входящих запросов
Обязательное условие: Запрос от сервера и ответ модуля сохранить в логах CMS
Загрузка продаж
Данный запрос используется для передачи информации о продажах, совершённых непосредственно в интернет-магазине с целью формирования чека.
Логика работы
Касса запрашивает у модуля CMS список заказов, которые необходимо фискализировать (пробить чек).
Разработчик модуля должен реализовать endpoint (URL), который будет принимать входящие запросы от сервера Бикодо, и предоставить этот URL заказчику для настройки интеграции.
p_int2 - Это дата (UNIX-временная метка, в секундах).
Зачем это нужно:
Для того чтобы не грузить все заказы, которые уже не актульные с сервера поступает время с которой надо выгрузить данные.
Модуль должен вывести заказы созданные после указанного времени со статусом "Обработан"
Без этого механизма:
при каждом запросе пришлось бы передавать все заказы
Разработчик модуля должен реализовать endpoint (URL), который будет принимать входящие запросы от сервера Бикодо, и предоставить этот URL заказчику для настройки интеграции.
Статус заказа установлен: «Обработан: Чек на обработке у кассы»
При формировании чека произошла ошибка
Модуль должен: изменить статус заказа на «Обработан»
Условие: Событие онлайн продаж и передача чека в кассу не должна выполняться, чтобы предотвратить повторную отправку заказа в кассу и избежать бесконечного цикла формирования чеков.
URL для обработки запроса
Разработчик модуля должен реализовать endpoint (URL), который будет принимать входящие запросы от сервера Бикодо, и предоставить этот URL заказчику для настройки интеграции.