Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 47 Следующий »

Описание

Сервер заказов предназначен для промежуточного хранения заказов покупателей, подготовленных во внешних системах (интернет-магазин, служба доставки) перед началом их обработки на кассе УКМ 5.

Помимо этого, сервер заказов, совместно с мобильным приложением Сборщик заказов, поддерживает процессы сборки (включая взаимодействие с заказчиком) и доставки заказа.

Далее описан функционал сервера заказов для оплаты на кассах заказов, подготовленных во внешних системах (интернет-заказы).

Поддержаны следующие сценарии:

- прием на кассе предоплаты/аванса по заказу;

- выдача на кассе заказа, по которому ранее была получена предоплата;

- выкуп на кассе ранее не оплаченного заказа;

- возврат денежных средств по заказам:

   - за которые получена предоплата;

   - переданным покупателю (как с предоплатой, так и без нее).

Сервер заказов является подчиненной системой по отношению к внешней системе. Это означает, что внешняя система может произвольно изменять/удалять ранее загруженные заказы, в том числе изменять их статус и содержимое. Сервер заказов никак не контролирует эти изменения.

Касса никогда не изменяет состав заказа, она может только изменить его статус в результате успешного выполнения операции.

Для внешней системы доступны следующие операции:

- загрузить заказ в сервер заказов – POST /api/v1.0/order;

- изменить заказ в сервере заказов – PUT /api/v1.0/order/{number};

- удалить заказ в сервере заказов – DELETE /api/v1.0/order/{number};

- запросить статус заказа – GET /api/v1.0/order/{number}/status;

- изменить статус заказа – POST /api/v1.0/order/{number}/status.

API сервера заказов описано здесь.

Статус заказа

Касса определяет, какую операцию необходимо выполнить над заказом, на основании его статуса (параметр status в запросах и в базе данных). Возможны следующие значения статусов заказа:

Значение устанавливает внешняя система

Значение устанавливает касса

 'WaitsPrepayment' (ожидает предоплаты)

'Prepaid' (предоплата получена)

'WaitsPurchase' (oжидает выкупа)

'Purchased' (выкуплен)

'WaitsPrepaymentReturn' (ожидает возврата предоплаты)

'PrepaymentReturned' (предоплата возвращена)

'WaitsReturn' (ожидает возврата)

'Returned' (возвращён)

'Cancelled' (отменен)


Если на кассе вводится номер заказа, который находится в одном из статусов, указанных в правой колонке, а также в статусе 'Cancelled', то касса выведет сообщение о невозможности его обработать и укажет его текущий статус.

Содержание заказа

- товары в заказе могут отсутствовать в базе кассы в момент загрузки заказа в сервер заказов, но должны быть в ней, когда заказ будет обрабатываться на кассе;

- в заказе могут быть позиции с одинаковыми товарами и ценами;

- для маркированных товаров на сервер заказов также передается их КиЗ, при этом:

   - если внешняя система заполняет значение КиЗ, то она должна заполнить его в точности так, как КиЗ нанесен на товар – при регистрации товара в ККТ касса будет регистрировать КиЗ так, как будто его содержание было прочитано сканером кассы. Соответственно, если информация о КиЗ в заказе будет отличаться от стандартной, то информация о маркировке товара либо совсем не будет зарегистрирована, либо может быть зарегистрирована с искажениями;

   - если внешняя система не загружает информацию о КиЗ, то в соответствующих запросах API item.kiz должен отсутствовать (не быть пустым – а именно отсутствовать).

Внешняя система может управлять правилами применения скидок (в том числе по карте покупателя). Для этого в заказе предназначен параметр discountPolicy (для каждой позиции в отдельности) со следующими возможными значениями:

   None – скидки не применяются;

   Bonuses – применяется только оплата бонусами;

   Front – применяются только фронтальные скидки (т.е. все, кроме оплаты бонусами);

   All – применяются любые скидки.

Независимо от политики применения скидок, информация о карте покупателя, если она указана в заказе, будет передана в систему лояльности LOYA и будет обрабатываться в чеке так же, как будто она была введена в чек в процессе его оформления.

Получение предоплаты

Внешняя система выгружает заказ в статусе 'WaitsPrepayment', в котором перечислены товары, за которые должна быть получена предоплата, с указанием их конечной стоимости продажи.

Касса особым образом зарегистрирует эти товары в ККТ (установит признак получения предоплаты, заменит НДС 20% на ставку 20/120 и 10% – на 10/110).

Чек выгружается во внешнюю систему (через API или XML-конвертер) с указанием заказа, на основании которого он был создан (доп. свойство properties. "id" : "ORDER_NUM"), к позициям чека привязывается доп. свойство с номером соответствующей позиции в заказе (properties. "id" : "ORDER_POSITION"). Кроме того, сохраняется значение статуса заказа, в котором он поступил на кассу (properties. "id" : "ORDER_ STATUS ").

Торговая система не должна рассматривать чеки с получением предоплаты как реализацию. Распознать такие чеки можно по привязанному к ним доп. свойству properties. "id" : "ORDER_ STATUS = WaitsPrepayment (ожидает предоплаты). Все товары в таких чеках не являются реализацией.

В заказ, ожидающий предоплату, на кассе нельзя добавить никакие другие товары.

Примечание. Заказ совсем не обязательно должен проходить стадию приема предоплаты: внешняя система может просто выгрузить заказ для выкупа при получении или только для получения (если ранее по такому заказу уже была получена предоплата – например, во внешней системе). Более того, кассовая система никак не отслеживает связь заказа и получения предоплаты за него – предполагается, что контроль и управление статусами заказа происходит во внешней системе.

Выдача заказа

Когда придет время получать товары по заказу на кассе, то внешняя система должна выгрузить заказ со статусом 'WaitsPurchase' с тем же номером и тем же товарным составом, а также с пометкой, что для него была получена предоплата. Для этого в заказе должна быть заполнена секция Payment с суммой предоплаты и указанием, какими средствами был получен аванс – наличные/банковская карта.

Полученная сумма предоплаты будет зафиксирована в ККТ с типом оплаты Ранее полученные авансы.

Если указанная сумма предоплаты не равна сумме товаров в заказе, то касса не будет обрабатывать заказ и выведет сообщение об ошибке.

Касса и сервер заказов не контролируют:

- товарный состав заказов;

- суммы, по которым была получена предоплата;

- в каком объеме произошла передача товаров покупателю.

Авансовые платежи

Для получения авансов за неопределенный перечень товаров или за товары, которых нет в товарном справочнике, в качестве содержания заказа со статусом 'WaitsPrepayment' внешняя система должна указать товар, который имеет в товарном справочнике кассы атрибут Аванс. Там же к этому товару должна быть привязана налоговая группа с НДС=20/120. Стоимость этого товара должна быть равна сумме аванса; она также должна быть равна сумме конечного заказа.

При выгрузке чека с товаром-авансом в торговую систему, к нему также привязано доп. свойство properties. "id" : "ORDER_ STATUS = WaitsPrepayment.

Когда придет время получать товары по этому заказу на кассе, внешняя система должна выгрузить заказ в статусе 'WaitsPurchase' с этим же номером, но с реальным составом заказа и указанием, что ранее по нему была получена предоплата (аналогично предоплате).

Для заказов в статусе 'WaitsPurchase' (oжидает выкупа) касса разрешает добавлять в чек товары по текущим ценам магазина, к ним могут быть применены и текущие скидки магазина.

Для заказов в статусе 'WaitsPrepayment' (ожидает предоплаты) добавить товары в чек нельзя.

Для товаров, подлежащих обязательной маркировке, в заказе может быть указано содержимое марки (полное содержание – т.е. в том виде, в котором марка была считана со средства идентификации). Если содержание марки не указано, то касса запросит его ввод. Для штучных товаров, количество в позиции должно быть равно 1, даже если содержимое марки не указано. Для мерных товаров количество может быть любым значением.

Расформирование заказа

В случае, если текущие акции в магазине более привлекательны для покупателя, есть возможность расформировать заказ, т.е. превратить чек, созданный на основании заказа, в обычный кассовый чек с текущими ценами магазина. Чек может быть произвольно изменен, к нему применятся текущие маркетинговые акции. При этом касса изменит статус заказа в cервере заказов на ‘Cancelled’, а к чеку будет привязан номер заказа и статус ‘Cancelled’ – таким же способом, как и для чеков на основании заказов. Если для товара из заказа в магазине не определена цена, то в чеке останется цена из заказа (раcсчитанная в интернет-магазине).

Функционал применим для заказов в статусе Ожидает выкупа и при отсутствии в них предоплат.

Возвраты

Возможны два режима выполнения возврата товаров, полученных покупателями по заказам:

1) возврат только на основании заказов на возврат. В этом случае, касса формирует чек возврата без ссылки на чек продажи (но с ссылкой на заказ на возврат);

2) штатный возврат на основании чека на продажу: может быть разрешен или запрещен.

1. В первом режиме, при попытке осуществить возврат по чеку продажи, касса выведет сообщение о запрете операции.

Для управления правами на создание чеков на возврат (без ссылки на чек продажи), существует два дополнительных права: Возврат без чека на основании заказа и Возврат без чека не на основании заказа, благодаря использованию которых рядовые кассиры смогут создавать чеки на возврат на основании заказов, без риска создания «опасных» чеков на возврат.

Товарное содержимое заказа на возврат нельзя изменить в чеке. Кроме товарного состава, заказы на возврат должны иметь информацию о средствах оплаты, которыми должен быть выполнен возврат. Если в заказе на возврат сумма по средствам оплаты не совпадает с суммарной стоимостью возвращаемых товаров, то такой заказ касса обрабатывать не будет и выведет сообщение об ошибке.

Если происходит возврат предоплаты, то к позициям чека будет привязан признак, что это не возврат товара (тот же признак, что и при получении предоплаты).

К чеку на возврат будет привязан номер заказа на возврат, по которому сформирован чек на возврат.

Если чек возврата формировался не на основании заказа, а на основании чека продажи, который был создан по заказу, то информации о заказе продажи в нем не будет.

2. Второй режим является настраиваемым: возврат товаров из заказа на основании чека их продажи может быть как разрешен, так и запрещен. Настройки осуществляются на кассовом сервере по адресу: Магазин – Типы касс нужно выбрать тип кассы и нажать кнопку Настройки:

В конфигурационном файле return_by_receipt.conf (applications\return_by_receipt\return_by_receipt.conf) необходимо установить значение параметра isAllowedRefundReceiptForOrders:

ReturnByReceipt: {
    subsystems: [
        app_return_by_receipt: {
            params: {
                bl: {
                    isAllowedRefundReceiptForOrders = true

При isAllowedRefundReceiptForOrders = true возврат будет разрешен, при isAllowedRefundReceiptForOrders = false – запрещен.

После изменения значения параметра, настройки необходимо сохранить.

Ограничения

1. Касса обрабатывает заказы с предоплатой в размере только 100%.

2. При обработке заказа на возврат внешняя система должна определить, каким средством оплаты (наличные/банковская карта) должен быть сделан возврат на кассе. Возврат не может быть выполнен более, чем одним средством оплаты.

3. Товары, подлежащие обязательной маркировке, должны указываться всегда с количеством 1, даже если для них не указывается содержание марки (КиЗ).

4. В заказах обрабатываются карты покупателей только системы лояльности LOYA, поддержка прочих систем лояльности выполняется при необходимости.

5. При обработке карты лояльности покупателя в выкупаемых заказах, будут выполнены все маркетинговые акции, которые действуют для данного магазина. При этом акции, не связанные с уменьшением суммы покупки, будут выполнены независимо от указанной политики применения скидок.

6. Касса не использует следующие параметры заказа:

registrationDate

Дата/время регистрации заказа

deliveryDate

Дата/время доставки заказа

buyerName

ФИО покупателя

buyerPhoneNumber

Моб. тел. покупателя

pickingStatus

Статус сборки

pickerId

Идентификатор сборщика заказа

Работа с заказами на кассе

Функционал кассы при оформлении заказов и возвратов по заказам подробно описан здесь.

Настройки

1. На кассовом сервере по адресу: Магазин – Типы касс нужно выбрать тип кассы и нажать кнопку Настройки:

Для обеспечения возможности работы с интернет-заказами, в разделе bl файла sale.conf (applications\sale\sale.confнужно раскомментировать строку:

# include file("conf/applications/sale/order.conf").

2. В файле order.conf (applications\sale\order.conf) нужно указать актуальный URL сервера заказов, например:

3. На кассовом сервере по адресу: Магазин – Кассы нужно выбрать необходимую кассу и нажать кнопку Оборудование:

В появившемся иерархическом древе в конфигурационном файле keyboard_layout (hardware/keyboard_layout/keyboardLayout.conf) нужно посмотреть, какой тип клавиатуры используется (он должен быть раскомментирован в общем списке):

В конфигурационный файл с актуальной раскладкой клавиатуры по адресу: hardware\keyboard_layout\файл актуальной раскладки необходимо добавить следующий фрагмент, после чего нажать кнопку Сохранить:

{ 

  code: 118

  keyType: "UIAction"

  params: "FindOrder"

}

После этого в раскладке клавиатуры (для клавиатурной кассы) будет запрограммирована новая кнопка, посылающая при нажатии запрос на поиск заказа (FindOrder), а в меню кассы возникнет новый пункт меню Заказы. На touch-кассе, соответственно, появится новая кнопка в левой части рабочего стола.

Примечание. Пункт будет доступен, только если в Init придет параметр useOrder=true, и если чек не открыт.

4. Также можно настроить горячую клавишу поиска заказа на клавиатуре кассы, добавив в конфигурационный файл с актуальной раскладкой клавиатуры по адресу: hardware\keyboard_layout\файл актуальной раскладки следующий фрагмент, после чего нажать кнопку Сохранить:

{

  code = 119 # F8

  type = "FindOrder"

  params = ""

}

5. Дальнейшие настройки осуществляются через API.

  • Нет меток