Сохранение онлайн-чека

Для сохранения документа необходимо выполнить POST-запрос на URL:

http://<host>:<port>/CSrest/rest/dictionaries/onlinechecks

Пример запроса через curl:

curl -i -X POST -d @check.json http://localhost:8080/CSrest/rest/dictionaries/onlinechecks --header "Content-Type: application/json"

, где localhost:8080 – это <host>:<port> кассового сервера, а check.json – это файл с содержимым онлайн-чека.

Просмотр онлайн-чека

http://localhost:8080/CSrest/rest/dictionaries/onlinechecks/484

, где 484 – идентификатор документа на сервере.

Структура онлайн-чека

Сам чек (document) имеет структуру json, но в теле запроса к кассовому серверу он передается как строка. Поэтому все кавычки должны быть экранированы \"вот так\".

{
  "cashcode": "123",
  "shopcode": "12323",
  "documentid": 484,
  "document": "{\"positions\":[{\"posnum\":1,\"vatsum\":3.08,\"code\":\"1094\",\"name\":\"Сапоги\",\"price\":15.5,\"barcode\":\"1094\",\"dept\":null,\"catalogcode\":1,\"paymentmethod\":0,\"paymentobject\":0,\"taramode\":0,\"quant\":2,\"measure\":1,\"vatrate\":24,\"measurename\":\"шт\",\"minprice\":14.31,\"vatcode\":3,\"tmctype\":\"shoes\",\"excisemark\":\"123123\",\"supplier\":{\"agentpaymentobject\":1,\"inn\":\"987654321012\",\"name\":\"S means Supplier\",\"phone\":\"88005553535\",\"suppliercode\":1}}],\"identifier\":\"\",\"payments\":[{\"type\":3,\"amount\":25.5,\"valcode\":1,\"valname\":\"Электронный платеж\"}],\"sum\":31.0, \"dontChange\":0}",
  "state": "NOT_PAID"
}

Параметры тела запроса:

НаименованиеТип данныхОписаниеПримечания
shopcodestringКод магазина

Необходимо для применения тегов в дисконте.

Поле необязательно для заполнения

cashcodestringКод кассы

Необходимо для применения тегов в дисконте.

Поле необязательно для заполнения

statestring

Статус загрузки онлайн-чека:

  • NOT_PAID – новый. Документ добавлен на сервер.
  • NEW – новый чек с полной/частичной онлайн-оплатой.
  • RESERVED – зарезервирован. Документ получен на кассе, но еще не закрыт.
    Нужен для того, чтобы нельзя было его продать на нескольких кассах одновременно.
  • CLOSED – закрыт. Документ успешно закрыт на кассе.
  • CANCELED – чек отменен.
  • ONLINE_PAYING – признак того, что по чеку проходила онлайн-оплата.
  • ONLINE_CLOSED – чек был оплачен онлайн.
  • UNDERREVIEW – на примерке/время примерки истекло.
  • EXPIRED – время примерки истекло. Данный статус отображается только по запросу статуса онлайн-чеков (не отображается в БД).

Для загрузки нового документа используется статус NOT_PAID или NEW.

  • Статусы онлайн-чека NEW и NOT_PAID можно перевести в статусы RESERVED, CANCELED, ONLINE_PAYING
  • Статус онлайн-чека RESERVED можно перевести в статусы NEW, NOT_PAID, CANCELED, CLOSED, ONLINE_PAYING, ONLINE_CLOSED, UNDERREVIEW
  • Статусы онлайн-чека CANCELED, CLOSED и ONLINE_CLOSED нельзя перевести в другие статусы
  • Статус онлайн-чека ONLINE_PAYING можно перевести в статусы ONLINE_PAYING, ONLINE_CLOSED
  • Статус онлайн-чека UNDERREVIEW можно перевести в статус RESERVED в том случае, если время примерки еще не истекло
documentidstringУникальный идентификатор документа. По идентификатору касса запрашивает документ
documentstringЧек в формате JSON с экранированными кавычками

Структура объекта document

{
    \"positions\": [
      {
        \"posnum\": 1,
        \"vatsum\": 3.08,
        \"code\": \"1094\",
        \"name\": \"Сапоги\",
        \"price\": 15.5,
        \"barcode\": \"1094\",
        \"dept\": null,
        \"catalogcode\":1,
        \"paymentmethod\": 0,
        \"paymentobject\": 0,
        \"taramode\": 0,
        \"quant\": 2,
        \"measure\": 1,
        \"vatrate\": 24,
        \"measurename\": \"шт\",
        \"minprice\": 14.31,
        \"vatcode\": 3,
        \"tmctype\": \"shoes\",
        \"excisemark\": \"123123\",
        \"supplier\": {
          \"agentpaymentobject\": 1,
          \"inn\": \"987654321012\",
          \"name\": \"S means Supplier\",
          \"phone\": \"88005553535\",
          \"suppliercode\": \"1\"
        },
        \"additionalprices\": {
            \"1\": {
                \"barcode\": \"100\",
                \"code\": 1,
                \"documentId\": \"1234\",
                \"effectiveDate\": \"2023-12-26T11:06:32.000\",
                \"name\": \"дополнительная цена 1\",
                \"packingPrice\": 0,
                \"price\": 14
            }
      }
    ],
    \"discounts\": [
        {
            \"campaigncode\": 19,
            \"campaignname\": \"акция\",
            \"discountcode\": 20,
            \"discountmode\": 1,
            \"discountname\": \"скидка с индексной ставкой\",
            \"discountrate\": 1,
            \"discountsum\": 12.5,
            \"discounttype\": 3,
            \"ispositiondiscount\": 1,
            \"minpriceignored\": false,
            \"posnum\": 1
        }
    ],
    \"identifier\": \"\",
    \"payments\": [
      {
        \"type\": 3,
        \"amount\": 25.5,
        \"valcode\": 1,
        \"valname\": \"Электронный платеж\"
      }
    ],
    \"sum\": 31,
    \"dontChange\": 0
  }

Параметры объекта document:

НаименованиеОписаниеПримечания
positionsСписок позиций чека
identifier

Для внутреннего использования. Остается пустым


paymentsОплаты
sumСумма чека
dontChange

Возможность модифицировать чек (удаление позиций):

  • 0 – чек с возможностью модификации,
  • 1 – чек неизменяемый.

Поле необязательно для заполнения.

Значение по умолчанию 0

Параметры объекта position:

НаименованиеТип данныхОписаниеПримечания
posnumintНомер позиции в чеке
vatsumdoubleСумма налогаМожно указать 0. Используется для печати отчетов
codestringКод товара
namestringНаименование товара

articul

stringАртикул товара
pricedoubleЦена товара
barcodestringШтрих-код товара
deptintКод отдела
catalogcodeintКод каталогаИспользуется для считывания кода номенклатуры средств индивидуальной защиты

paymentmethod

intПризнак способа расчетаПризнак способа расчета указывается на основании признака предмета расчета
paymentobjectintПризнак предмета расчета
taramodeintЗначение 0Для внутреннего использования
quantdoubleКоличество товара
measureintКод единицы измеренияИспользуется для совместимости с обычной кассой. Указываем любое числовое значение
vatratedoubleСтавка налогаМожно указать 0. Используется для печати отчетов
measurenamestringНаименование единицы измерения

isfractionalmeasure

boolean

Дробная единица измерения:

  • true – для весовых товаров (количество товара может принимать дробные значения),
  • false – для штучных товаров (количество товара может быть только целочисленным).

По умолчанию false

minpricedoubleМинимальная цена товара
vatcodestringКод налогаДолжен быть больше или равен 1
tmctypestring

Тип товара:

  • shoes – обувной товар,
  • protectivemeans – индивидуальное средство защиты,
  • markedgoods – маркированный товар,
  • tobacco – табачная продукция,
  • alcohol – алкогольная продукция.

excisemarkstringКод маркировкиИспользуется для алкогольной и табачной продукции, для обувных и маркированных товаров
supplierobjectПоставщик товаров
additionalpricesobjectДополнительные цены

Параметры объекта supplier:

НаименованиеТип данныхОписание
agentpaymentobjectintПризнак агента по предмету расчета
innstring

ИНН поставщика

namestringНаименование поставщика
phonestringТелефон поставщика
suppliercodestringКод поставщика

Параметры объекта additionalprices:

Наименование

Тип данных

Описание

barcode

string

Штрих-код товара

code

int

Код индекса цены

documentidstringИдентификатор документа переоценки
effectivedatedatetimeДата переоценки
namestringНазвание цены
packingpricenumberЦена для расфасовки
price

number

Дополнительная цена

Параметры объекта discounts:

Наименование

Тип данных

Описание

campaigncode

int

Код группы акций

campaignname

string

Название группы акций

discountcode

int

Код скидки

discountmode

int

Режим скидки:

  • 1 – автоматическая,
  • 2 – по карте,
  • 3 – вручную,
  • 4 – фиксированная,
  • 5 – скидка на комплект,
  • 6 – скидка "на мелочь" (округление),
  • 8 – оплата сертификатом как скидкой на чек,
  • 9 – скидка по купону,
  • 10 – корректирующая скидка,
  • 11 – фискальное округление.

discountname

string

Название скидки

discountrate

number

Ставка скидки (проценты в случае процентной скидки, сумма в случае суммовой скидки,
индекс цены в случае скидки по индексу цены, отрицательная ставка – надбавка)

discountsum

number

Сумма скидки

discounttype

int

Тип скидки:

  • 1 – процентная,
  • 2 – суммовая,
  • 3 – индекс цены,
  • 4 – фиксированная цена,
  • 5 – бонус.

ispositiondiscount

int

Флаг на что применялась скидка:

  • 0 – на чек,
  • 1 – на позицию.
minpriceignoredintФлаг игнорирования минимальной цены при применении скидки

posnum

int

Номер товарной позиции

Параметры объекта payments:

НаименованиеТип данныхОписаниеПримечания
typeint

Тип оплаты:

  • 1 – Наличными,
  • 2 – Электронными,
  • 3 – Предварительная оплата (аванс),
  • 4 – Последующая оплата (кредит),
  • 5 – Иная форма оплаты (встречное предоставление),
  • 6..10 – расширенные типы оплаты.

Для онлайн-чеков необходимо указывать тип оплаты 3 (аванс).

Для корректной работы необходимо настроить соотнесение типов оплат на кассе

amountdoubleСумма оплаты в рубляхНапример, 15.20 рубля.
valcodeintКод валюты

Нужен для продаж, чтобы отличать офлайн оплаты от онлайн оплат.

Значение может быть любым.

valnamestringНаименование валюты