Формат (XML) интерфейса работы с порционным крепким алкоголем
Версионность
Номер версии протокола указывается в версии транспортной DLL (rkalcosh.dll или rkalcoex.dll) на втором месте.
Например, версия rkalcosh.dll 7.2.30.0, где:
- 7 — всегда, так как r_keeper 7
- 2 — версия протокола
- 30 — версия DLL
- 0 — подверсия, номер специального билда, как правило 0.
Текущая версия протокола — 6
В версии 2:
- Добавлены команды MarkCloseBottle и MarkListOpened
- Добавлен атрибут salePlaceGuid в тэг MarkPlaceInfo
- Добавлены специально обрабатываемые ошибки ECODE_ALREADY_SALED, ECODE_ALREADY_CANCELED
В версии 3
- Добавлен атрибут localTime в корневой тэг MarkQuery
В версии 4
- Добавлены атрибуты в MarkReceipt fiscDocNumber, fiscDeviceId,fiscShift
В версии 5
- Добавлена команда MarkBlockMark
В версии 6
- В MarkGetVersionResult добавлен атрибут protocolVersion
- В ServiceOptions в MarkGetVersionResult добавлены возможная опция OpenBottle
Кодировка
Используется кодировка UTF-8
Общий формат корневых тэгов
Имена тэгов начинаются с больших букв. Имена атрибутов – с маленьких букв.
- Корневой тэг на вход MarkQuery
- localTime (начиная с версии 3) — локальная дата-время главного кассового сервера
- Корневой тэг выхода MarkQueryResult
- dllVersion — версия модуля связи с системой учёта, добавляется внутри r_ k 7, снаружи передавать не надо
- status
- Ok
- Error
- errorCode — числовой код ошибки. Отрицательные коды – предустановленные, могут иметь специфическую обработку в r_k 7
- ECODE_UNKNOWN = -1 — неизвестная ошибка
- ECODE_PARSE = -2 — ошибка разбора входных данных
- ECODE_NOT_INITIALIZED = -3 — не был успешно инициализирован (нет связи с системой учёта)
- ECODE_SHORTAGE = -4 — не хватает для списания
- ECODE_ALREADY_SALED = -5 (с версии 2) — r_k 7, получив такую ошибку при MarkSale, выполнит MarkCancelSale, затем повторит MarkSale с новым номером транзакции
- ECODE_ALREADY_CANCELED = -6 (с версии 2) — r_k 7 будет игнорировать такую ошибку на MarkCancelSale
- положительные ошибки — ошибки от системы учёта, только логируются и/или отображаются оператору
- errorText — текст ошибки, если была
- errorModule — модуль, сгенерировавший ошибку, коды ошибок в рамках модуля
- dateTime — дата-время окончания выполнения
- workTime — время выполнения в миллисекундах
- processed — количество успешно выполненных команд (пока возможны варианты 0 или 1).
MarkGetVersion — получение версии сервиса учёта алкоголя
вход
выход
MarkGetVersionResult
- serviceVersion — версия системы учёта
- protocolVersion - начиная с версии 6, версия поддерживаемого протокола
- [ ServiceOptions ] — опционный подтэг, содержащий в тексте список опций, разделённых пробелами и/или переводом строки. Поддерживаемые тэги:
- OpenBottle - начиная с версии 6 - опция, что сервис поддерживает команды MarkOpenedList, MarkOpen, MarkCloseBottle
Пример
Вызов
|
Ответ
|
MarkGetConnected — получение статуса связи
Вызывается внутри r_k 7, наружу не посылается
вход
выход
MarkGetConnectedResult
Пример
Вызов
|
Ответ
|
MarkOpen — вскрытие бутылки
вход
- MarkPlaceInfo — информация о месте реализации
- restaurantGuid
- restaurantCode — полный 9-значный код ресторана
- orderCategGuid — идентификатор места учёта внутри ресторана (категория заказа)
- orderCategCode — код места учёта внутри ресторана (категория заказа)
- kpp
- inn
- fiasId
- salePlaceGuid — место реализации для SH в соответствии с параметром SH4SalePlace. Начиная с версии протокола 2
- gtin - gtin/ean13 код
- [ isOld ] — бутылка, вскрытая до 01.07.2024
- [ restVolume ] — оставшийся объём в мл, необходимо задавать при isOld=true
- MarkMark — просканированная марка в Base64
выход
- MarkOpenResult
- shortName
- fullName
- volume — объём в миллилитрах
Пример
Вызов
|
Ответ
|
MarkCloseBottle — отмена вскрытия бутылки (если ещё не использовалась)
Начиная с версии протокола 2
вход
- MarkMark — просканированная марка в Base64
выход
MarkCloseBottleResult
Пример
Вызов
|
Ответ
|
MarkSale — продажа списка блюд с алкоголем, списание бутылок
вход
- MarkSale
- transactionUni — уникальный по ресторану int64 номер транзакции, меняется при следующей попытке после отмены (например при ошибке печати), не пересекается между кассовыми серверами (ресторана)
- MarkReceipt — информация о заказе
- guid
- visit — int32
- uni — int32
- fiscDocNumber — будущий номер фискального документа (с версии 4)
- fiscDeviceId — номер фискального накопителя (с версии 4)
- fiscShift — номер фискальной смены (с версии 4)
- MarkShift — информация о смене (кассового сервера)
- restaurantGuid
- restaurantCode — полный 9-значный код ресторана
- logicDate — "YYYY-MM-DD"
- serverNetName
- shiftNum
- guid
- MarkPlaceInfo — информация о месте реализации
- restaurantGuid
- restaurantCode — полный 9-значный код ресторана
- orderCategGuid — идентификатор места учёта внутри ресторана (категория заказа)
- orderCategCode — код места учёта внутри ресторана (категория заказа)
- kpp
- inn
- fiasId
- fsrarId
- salePlaceGuid — место реализации для SH в соответствии с параметром SH4SalePlace. Начиная с версии протокола 2
- MarkItems — позиции заказа с алкоголем
- MarkItem — позиция заказа
- guid — идентификатор позиции заказа
- uni — целочисленный идентификатор позиции заказа в рамках визита
- quantity — количество позиции. Например, если 2 стопки водки по 50 грамм, значит 2
- kind — одно из следующих значений (на данный момент)
- Alcohol — чистый алкоголь
- Cocktail — коктейль, смесь ингредиентов с использованием алкогольных напитков
- MarkMenuItem — информация об элементе справочника меню этой позиции заказа
- guid
- code
- extCode
- name
- receiptItemValue — сумма соответствующей позиции фискального чека
- volume — объём в миллилитрах, рассчитывается на основе свойства Объём из элемента меню, точнее объём из технологической карты
- MarkItem — позиция заказа
выход при успешном списании
- MarkSaleResult
- done = "1"
- online = "1"
- extTransactionId — строковый уникальный в рамках корпорации идентификатор транзакции в системе учёта алкоголя, может использоваться потом для подвязывания данных
- MarkUTMSlip
- url — атрибут, содержащий url, присланный УТМ
- sign — атрибут, содержащий sign, присланный УТМ
- ver — атрибут, содержащий ver, присланный УТМ
- MarkUTMSlipText — в тексте этого подтэга можно передать произвольную информацию, которая может быть напечатана в чеке
- MarkItemResult — таких подтэгов столько, сколько в вызове было чистого алкоголя (kind="Alcohol"), для коктейлей не возвращается
- guid — идентификатор позиции заказа
- MarkItemSourceUsed — информация о части позиции, налитой из одной бутылки, таких частей может быть несколько (из разных бутылок)
- gtin - gtin/ean13 код
- volume — объём, налитый из конкретной бутылки, в миллилитрах
- fullName — полное наименование закупленного товара, используемого при розливе порции или приготовлении коктейля
- shortName — краткое наименование закупленного товара, используемого при розливе порции или приготовлении коктейля
- MarkMark — тэг – марка, содержимое – марка в формате base64
- isOld — boolean признак, что марка бутылки, которая вскрыта до 1.7.2024
выход при нехватке алкоголя для списании
Возвращается информация по тем позициям заказа, для которых не хватило алкоголя. Если существует позиция, для которой вообще нет информации по бутылкам, то тэг MarkItemShortage отсутствует, заполняется ошибка в корневом тэге.
- MarkSaleResult
- done = "0"
- online = "1"
- MarkItemShortage
- volume — недостающий объём, может быть равен запрошенному, если остаток 0.
- fullName — полное наименование закупленного товара, используемого при розливе порции или приготовлении коктейля
- shortName — краткое наименование закупленного товара, используемого при розливе порции или приготовлении коктейля
Примеры
- вызов при отсутствии связи (марки обязательно заполнены для чистого алкоголя, но чистый алкоголь может в этом режиме превращаться в коктейли)
Вызов
|
Ответ
|
- вызов в режиме с открытием бутылок
Вызов
|
Ответ
|
MarkCancelSale — отмена продажи по заголовку чека (идентификатору транзакции)
вход
- MarkCancelSale
- transactionUni — уникальный целый номер транзакции, меняется при следующей попытке после отмены (например, при ошибке печати)
- MarkReceipt — информация о заказе
- guid
- visit — int32
- uni — int32
- fiscDocNumber — номер фискального документа (будущий)
- fiscDeviceId — номер фискального накопителя
- fiscShift — номер фискальной смены
- MarkShift — информация о смене (кассового сервера)
- restaurantGuid
- restaurantCode — полный 9-значный код ресторана
- logicDate — "YYYY-MM-DD"
- serverNetName
- shiftNum
- guid
- MarkPlaceInfo — информация о месте реализации
- restaurantGuid
- restaurantCode — полный 9-значный код ресторана
- orderCategGuid — идентификатор места учёта внутри ресторана (категория заказа)
- orderCategCode — код места учёта внутри ресторана (категория заказа)
- kpp
- inn
- fiasId
- fsrarId
- salePlaceGuid — место реализации для SH в соответствии с параметром SH4SalePlace. Начиная с версии протокола 2.
выход при успешном списании
- MarkCancelSaleResult
Пример
Вызов
|
Ответ
|
MarkCloseShift — закрытие смены
вход
- MarkShift — информация о смене (кассового сервера)
- restaurantGuid
- restaurantCode — полный 9-значный код ресторана
- logicDate — "YYYY-MM-DD"
- serverNetName
- shiftNum
- guid
выход
- MarkCloseShiftResult
Пример
Вызов
|
Ответ
|
MarkListOpened — запрос списка открытых бутылок
Начиная с версии протокола 2
вход
- MarkPlaceInfo — информация о месте реализации
- restaurantGuid
- restaurantCode — полный 9-значный код ресторана
- orderCategGuid — идентификатор места учёта внутри ресторана (категория заказа)
- orderCategCode — код места учёта внутри ресторана (категория заказа)
- kpp
- inn
- fiasId
- fsrarId
salePlaceGuid — место реализации для SH в соответствии с параметром SH4SalePlace. Начиная с версии протокола 2
выход
MarkListOpenedResult
- MarkOpenedRest
- gtin - gtin/ean13 код
- volume — объём целой бутылки в миллилитрах
- fullName — полное наименование товара, используемого при розливе порции или приготовлении коктейля
- shortName — краткое наименование товара, используемого при розливе порции или приготовлении коктейля
- MarkMark — тэг – марка, содержимое – марка в формате base64
- isOld — boolean признак, что марка бутылки, которая вскрыта до 01.07.2024
- restVolume — неизрасходованный объём бутылки целый в миллилитрах
- openDateTime — дата-время открытия бутылки ISO
- isBlocked — boolean признак, что марка бутылки заблокирована
- MarkOpenedRest
Пример
Вызов
|
Ответ
|
MarkBlockMark - блокировка марки вскрытой бутылки (по ошибке от ЕГАИС)
Начиная с версии протокола 5
вход
- MarkMark - марка в Base64
выход
MarkBlockMarkResult
- shortName
- fullName
- volume - объём в миллилитрах
- restVolume - оставшийся объём в миллилитрах
Пример
Вызов
|
Ответ
|
XCD схемы
- Версионность
- Кодировка
- Общий формат корневых тэгов
- MarkGetVersion — получение версии сервиса учёта алкоголя
- MarkGetConnected — получение статуса связи
- MarkOpen — вскрытие бутылки
- MarkCloseBottle — отмена вскрытия бутылки (если ещё не использовалась)
- MarkSale — продажа списка блюд с алкоголем, списание бутылок
- MarkCancelSale — отмена продажи по заголовку чека (идентификатору транзакции)
- MarkCloseShift — закрытие смены
- MarkListOpened — запрос списка открытых бутылок
- MarkBlockMark - блокировка марки вскрытой бутылки (по ошибке от ЕГАИС)
- XCD схемы