Введение

Данный документ является руководством программиста для интеграции с программной кассой (ПК).

Вся интеракция с ПК происходит без взаимодейтсвия с пользователем. Исключением является:

  • Ожидание прикладывания карты пользователем.

Способы взаимодействия

  • Android Intent
    • Для взаимодействия с ПК по интентам необходимо создать Intent передав в него тип action - by.ikassa.smartx.android.TRANSACTION. Пример: val intent = Intent("by.ikassa.smartx.android.TRANSACTION")
  • HTTP Сервер
    • Для взаимодействия с ПК по HTTP, необходимо включить режим сервера в настройках кассы.
    • Отправка происходит через POST запросы используя порт 37015 по адресу v1. Пример: http://192.168.1.2:37015/v1

Для выбора типа операции необходимо предать Header с ключом INTENT_OPERATION_TYPE и значением из доступнх типов операций. Регистр ключа ОБЯЗАН быть передан в верхнем регистре. Значение передаваемое по ключу регистронезависимо и может быть передано в любом регистре. При получении неизвестного типа операции или его отсутсвии будет выброшена ошибка.

SSDP (Simple Service Discovery Protocol)

  • Пример запроса на python

    • ssdp discover --st 'ikassa-smartx'
  • Пример ответа

{
[::ffff:192.168.88.91]:41724 - - [Wed May 15 17:02:11 2024] HTTP/1.1 200 OK
ST: ikassa-smartx
USN: uuid:dcc76660-c8f5-11ed-afa1-0242ac120002
LOCATION: http://192.168.88.91:37015
SERIAL_NUMBER: AVQ11129961000
REG_NUMBER: 129961000
}
  • LOCATION - ip-адрес устройства и порт.
  • SERIAL_NUMBER: серийный номер СКО.
  • REG_NUMBER: регистрационный номер СКО.

Способы авторизации

  • Для того чтобы работать с кассой, необходима авторизация. После успешной авторизации, касса остается авторизована, до перезапуска ПК.
  • При передаче специального флага, ПК помимо авторизации вернет token. Этот токен валиден в течение 24 часов и дает возможность автоматической авторизации в случае если ПК была перезапущена. Для использования этой возможности необходимо передать полученный token в Header с ключом Auth-token.

Способы передачи INTENT_OPERATION_TYPE

Типом операции во всех случаях является строка String

  • Android Intent
    • Добавить поле в интент intent.putExtra("INTENT_OPERATION_TYPE", #ТипОперации#).
  • HTTP Сервер
    • Передать в Header запроса ["Content-Type": "application/json"]
    • Передать в Header запроса ["INTENT_OPERATION_TYPE": #ТипОперации#].

Способы передачи Auth-token

Типом операции во всех случаях является строка String

  • Android Intent
    • Добавить поле в интент intent.putExtra("Auth-token", #Токен#).
  • HTTP Сервер
    • Передать в Header запроса ["Auth-token": #Токен#].

Способы передачи тела запроса

Телом операции в запросах является Json строка String.

  • Android Intent
    • Добавить поле в интент intent.putExtra("INTENT_OPERATION_DATA", #JsonСтрока#).
  • HTTP Сервер
    • Передать в теле запроса Json строку.

Параметр финиширования активити

Передать в queryParam запроса closeActivity=true

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

suspend fun send() {
  val response: String = client.post("http://192.168.88.18:37015/v1?closeActivity=true", A(cashier = "admin", sum = "100")) {
  contentType(ContentType.Application.Json)
  header("INTENT_OPERATION_TYPE", "DEPOSIT")
}
println(response)

Получение ответа

В качестве ответа ПК возвращает обратно Json строку с обязательными полями вида Подробнее:

{    
    "messageDetail": "Успешная оплата",
    "messageTitle": "Успех",
    "registerNumberSKO": "123456789",
    "resultCode": 200,
    "type": "SALE"
}
  • Android Intent
    • Проверить resultCode на ошибку:
      • -1 (Activity.RESULT_OK) – ОК.
      • -2 – Ошибка.
    • Использовать ключ INTENT_OPERATION_RESULT_INFO для получения результата. Пример: val json = intent.getStringExtra("INTENT_OPERATION_RESULT_INFO").
  • HTTP Сервер
    • Проверить статус ответа:
      • 200 - ОК
      • 400 - Ошибка
    • Получить результат из body ответа.

Пример взаимодействия

Доступные операции

Авторизация в СКО

Параметры

Header:

INTENT_OPERATION_TYPE - AUTH

Тело запроса: Auth

  • Для того чтобы работать с кассой, необходима авторизация. После успешной авторизации, касса остается авторизована, до перезапуска ПК.
  • При передаче специального флага, ПК помимо авторизации вернет token. Этот токен валиден в течение 24 часов и дает возможность автоматической авторизации в случае если ПК была перезапущена. Для использования этой возможности необходимо передать полученный token в Header с ключом Auth-token.

Примеры

Успех

Запрос:

{
  "pin": "12345",
  "rememberPin": true,
  "returnToken": true
}

Ответ AuthResponse:

{
  "messageDetail": "Токен авторизован",
  "messageTitle": "Успех",
  "resultCode": 200,
  "type": "AUTH",
  "token": "fb890591-f294-4562-8654-e071c14e6f00"
}

Полученый "token" валиден в течении 24 часов

Успех

Запрос:

{
  "pin": "12345",
  "rememberPin": true
}

Ответ AuthResponse:

{
  "messageDetail": "Токен авторизован",
  "messageTitle": "Успех",
  "registerNumberSKO": "123456789",
  "resultCode": 200,
  "type": "AUTH"
}

Успех (пин код был предварительно сохранен)

Запрос:

{
  // Пустое тело
}

Ответ AuthResponse:

{
  "messageDetail": "Токен авторизован",
  "messageTitle": "Успех",
  "registerNumberSKO": "123456789",
  "resultCode": 200,
  "type": "AUTH"
}

Ошибка (неверный пин)

Запрос:

{
  "pin": "123",
  "rememberPin": true
}

Ответ AuthResponse:

{
  "messageDetail": "Неверный пароль доступа к токену",
  "messageTitle": "Ошибка",
  "resultCode": 405,
  "type": "AUTH"
}

Открытие смены

Параметры

Header:

INTENT_OPERATION_TYPE - OPEN_SHIFT

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: Shift (Опционально)

Примеры

Успех

Запрос:

{
  "bankShiftRequired": false
}

Ответ BaseResponse:

{
    "dateTime": "2022-07-05T16:41:48+03:00",
    "messageDetail": "Смена открыта",
    "messageTitle": "Успех",
    "numberCheck": "777",
    "registerNumberSKO": "123456789",
    "resultCode": 200,
    "type": "OPEN_SHIFT"
}

Ошибка (смена уже открыта)

Запрос: Тело пустое

Ответ BaseResponse:

{
    "messageDetail": "Смена уже открыта",
    "messageTitle": "Ошибка",
    "resultCode": 406,
    "type": "OPEN_SHIFT"
}

Ошибка (токен не авторизован/не подключен)

Запрос: Тело пустое

Ответ BaseResponse:

{
    "messageDetail": "Токен не авторизован",
    "messageTitle": "Ошибка",
    "resultCode": 401,
    "type": "OPEN_SHIFT"
}

Закрытие смены

Параметры

Header:

INTENT_OPERATION_TYPE - CLOSE_SHIFT

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: Shift (Опционально)

Примеры

Успех

Запрос:

{
  "cashier": "Кассир",
  "bankShiftRequired": false,
  "printCheque": true
}

Ответ ReportResponse:

{
  "uid": "C165D2FB2330358C07CF1091",
  "numberCheck": "767",
  "messageDetail": "Смена закрыта",
  "messageTitle": "Успех",
  "registerNumberSKO": "123456789",
  "resultCode": 200,
  "type": "CLOSE_SHIFT",
  "dateOpenShift": "2022-07-05T16:41:48+03:00",
  "dateCloseShift": "2022-07-05T21:21:11+03:00",
  "amountDocument": "4",
  "incomingBalance": "100000155460.96",
  "numberFirstCheck": "9127",
  "numberLastCheck": "9130",
  "amountCurrency": "1",
  "nameCurrency": "BYN",
  "amountOfPaymentsDocInCurrencyOne": "4",
  "sumSalePaymentsPerShift": "31.88",
  "sumSaleCashlessPerShift": "0",
  "sumSaleCardSumPerShift": "0",
  "sumSaleOtherSumPerShift": "0",
  "sumSaleCashPerShift": "31.88",
  "amountMoneyBackPerShift": "0",
  "sumMoneyBackPerShift": "0",
  "amountMoneyBackCashPerShift": "0",
  "sumMoneyBackCashPerShift": "0",
  "amountMoneyBackCashlessPerShift": "0",
  "sumMoneyBackCashlessPerShift": "0",
  "amountDepositPerShift": "1",
  "sumDepositPerShift": "10",
  "amountWithdrawPerShift": "1",
  "sumWithdrawPerShift": "41.88",
  "amountRollbackPerShift": "0",
  "sumRollbackPerShift": "0",
  "amountRollbackCashPerShift": "0",
  "sumRollBackCashPerShift": "0",
  "amountRollbackCardPerShift": "0",
  "sumRollbackCardPerShift": "0",
  "amountRollbackOtherPerShift": "0",
  "sumRollbackOtherPerShift": "0",
  "amountCorrectionPerShift": "0",
  "sumCorrectionPerShift": "0",
  "amountCancelPerShift": "0",
  "sumCancelPerShift": "0",
  "isPrintSuccess": false
}

Ошибка (смена уже закрыта)

Запрос: Тело пустое

Ответ BaseResponse:

{
    "messageDetail": "Смена уже закрыта",
    "messageTitle": "Ошибка",
    "resultCode": 408,
    "type": "CLOSE_SHIFT"
}

Ошибка (токен не авторизован/не подключен)

Запрос: Тело пустое

Ответ BaseResponse:

{
    "messageDetail": "Токен не авторизован",
    "messageTitle": "Ошибка",
    "resultCode": 401,
    "type": "CLOSE_SHIFT"
}

Внесение

Параметры

Header:

INTENT_OPERATION_TYPE - DEPOSIT

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: Sum

Примеры

Успех

Запрос:

{
  "cashier": "Кассир",
  "sum": "10"
}

Ответ BaseResponse:

{
  "dateTime": "2022-07-05T21:54:23+03:00",
  "messageDetail": "Успешное внесение",
  "messageTitle": "Успех",
  "numberCheck": "9132",
  "registerNumberSKO": "131010705",
  "resultCode": 200,
  "type": "DEPOSIT",
  "uid": "8B2363DB6192D5CD07CF1091",
  "sum": "10"
}

Ошибка (смена закрыта)

Запрос:

{
  "cashier": "Кассир",
  "sum": "10"
}

Ответ BaseResponse:

{
  "messageDetail": "Необходимо открыть смену",
  "messageTitle": "Ошибка",
  "resultCode": 400,
  "type": "DEPOSIT"
}

Изъятие

Параметры

Header:

INTENT_OPERATION_TYPE - WITHDRAW

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: Sum

Примеры

Успех

Запрос:

{
  "cashier": "Кассир",
  "sum": "10"
}

Ответ BaseResponse:

{
  "dateTime": "2022-07-05T21:57:17+03:00",
  "messageDetail": "Успешное изъятие из кассы",
  "messageTitle": "Успех",
  "numberCheck": "9133",
  "registerNumberSKO": "131010705",
  "resultCode": 200,
  "type": "WITHDRAW",
  "uid": "32B1E3361C6573F807CF1091",
  "sum": "5"
}

Ошибка (смена закрыта)

Запрос:

{
  "cashier": "Кассир",
  "sum": "10"
}

Ответ BaseResponse:

{
  "messageDetail": "Смена уже закрыта",
  "messageTitle": "Ошибка",
  "resultCode": 408,
  "type": "WITHDRAW"
}

Продажа

Параметры

Header:

INTENT_OPERATION_TYPE - SALE

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: Sale

Примеры

Успех

Запрос:

{
    "cashier": "Кассир",
    "itemList": [
        {
            "nameTitle": "Товар 1",
            "codeNumber": "1",
            "typeCode": "0",
            "price": "4",
            "amount": "1"
        },
        {
            "nameTitle": "Товар 2",
            "codeNumber": "10",
            "typeCode": "0",
            "price": "1",
            "amount": "9999.99",
            "isPercentDiscount": false,
            "discount": "9999.98"
        },
        {
            "codeNumber": "20",
            "price": "4",
            "amount": "1",
            "isPercentDiscount": true,
            "discount": "1"
        }
    ],
    "cash": "15",
    "cashless": "0",
    "certificate": "0",
    "printCheque": false,
    "address": "ул. Сторожевская д.8",
    "phone_number": "+375(29)123-45-67",
    "name_of_outlet": "iMlab",
    "advertising_text": "Рекламный текст"
}

Ответ BaseResponse:

{
    "dateTime": "2022-01-22T12:00:00+03:00",
    "messageDetail": "Успешная оплата",
    "messageTitle": "Успех",
    "numberCheck": "1234",
    "registerNumberSKO": "123456789",
    "resultCode": 200,
    "rrn": "",
    "type": "SALE",
    "uid": "461F60C220B2010407CF1091",
    "total": "7.97",
    "change": "7.03",
    "payments": [
       {
           "type": "Cash",
           "sum": "15"
       }
    ]
}

Ошибка (не передано имя кассира)

Запрос:

{
    "itemList": [
        {
            "nameTitle": "Товар 1",
            "codeNumber": "1",
            "typeCode": "0",
            "price": "4",
            "amount": "1"
        },
        {
            "nameTitle": "Товар 2",
            "codeNumber": "10",
            "typeCode": "0",
            "price": "1",
            "amount": "9999.99",
            "isPercentDiscount": false,
            "discount": "9999.98"
        },
        {
            "codeNumber": "20",
            "price": "4",
            "amount": "1",
            "isPercentDiscount": true,
            "discount": "1"
        }
    ],
    "cash": "15",
    "cashless": "0",
    "certificate": "0"
}

Ответ BaseResponse:

{
    "messageDetail": "Не передано имя кассира",
    "messageTitle": "Ошибка",
    "resultCode": 435,
    "type": "SALE"
}

Ошибка (превышен лимит цены)

Запрос:

{
    "cashier": "Кассир",
    "itemList": [
        {
            "nameTitle": "Товар 9999",
            "codeNumber": "999",
            "typeCode": "0",
            "price": "99999999",
            "amount": "9999.99",
            "isPercentDiscount": false,
            "discount": "9999.98"
        }
    ],
    "cash": "15",
    "cashless": "0",
    "certificate": "0"
}

Ответ BaseResponse:

{
    "messageDetail": "Максимально допустимая цена 99999999999.99",
    "messageTitle": "Ошибка",
    "resultCode": 414,
    "type": "SALE"
}

Х-отчет

Параметры

Header:

INTENT_OPERATION_TYPE - X_REPORT

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: BaseRequest

  • cashier в запросе игнорируется

Примеры

Успех

Запрос:

{
  "printCheque": true
}

Ответ ReportResponse:

{
  "messageDetail": "Успешно распечатали X-отчет",
  "messageTitle": "Успех",
  "registerNumberSKO": "131010705",
  "resultCode": 200,
  "type": "X_REPORT",
  "dateOpenShift": "2022-07-05T22:05:56+03:00",
  "amountDocument": "0",
  "numberFirstCheck": "0",
  "numberLastCheck": "0",
  "amountCurrency": "0",
  "nameCurrency": "BYN",
  "amountOfPaymentsDocInCurrencyOne": "0",
  "sumSalePaymentsPerShift": "0",
  "sumSaleCashlessPerShift": "0",
  "sumSaleCardSumPerShift": "0",
  "sumSaleOtherSumPerShift": "0",
  "sumSaleCashPerShift": "0",
  "amountMoneyBackPerShift": "0",
  "sumMoneyBackPerShift": "0",
  "amountMoneyBackCashPerShift": "0",
  "sumMoneyBackCashPerShift": "0",
  "amountMoneyBackCashlessPerShift": "0",
  "sumMoneyBackCashlessPerShift": "0.0",
  "amountDepositPerShift": "0",
  "sumDepositPerShift": "0",
  "amountWithdrawPerShift": "0",
  "sumWithdrawPerShift": "0",
  "amountRollbackPerShift": "0",
  "sumRollbackPerShift": "0",
  "amountRollbackCashPerShift": "0",
  "sumRollBackCashPerShift": "0",
  "amountRollbackCardPerShift": "0",
  "sumRollbackCardPerShift": "0",
  "amountRollbackOtherPerShift": "0",
  "sumRollbackOtherPerShift": "0",
  "amountCorrectionPerShift": "0",
  "sumCorrectionPerShift": "0",
  "amountCancelPerShift": "0",
  "sumCancelPerShift": "0",
  "isPrintSuccess": true
  }

Ошибка (смена закрыта)

Запрос:

{
  // Пустое тело
}

Ответ BaseResponse:

{
  "messageDetail": "Необходимо открыть смену",
  "messageTitle": "Ошибка",
  "resultCode": 400,
  "type": "X_REPORT"
}

Аннулирование последнего документа

Параметры

Header:

INTENT_OPERATION_TYPE - ROLLBACK

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: BaseRequest

Примеры

Успех

Запрос:

{
  "cashier": "Кассир",
  "printCheque": "false"
}

Ответ RollbackResponse:

{
  "dateTime": "2022-07-06T09:32:17+03:00",
  "messageDetail": "Успешное аннулирование чека №9139",
  "messageTitle": "Успех",
  "numberCheck": "9140",
  "registerNumberSKO": "131010705",
  "resultCode": 200,
  "uid": "04244F88CA070D5E07CF1091",
  "type": "ROLLBACK",
  "numberCheckRollback": "9139",
  "uidDocumentRollback": "7F788414C0C66A1507CF1091"
}

Ошибка (нет чека для аннулирования)

Запрос:

{
  "cashier": "Кассир",
  "printCheque": "false"
}

Ответ BaseResponse:

{
    "messageDetail": "Нет чека для аннулирования",
    "messageTitle": "Ошибка",
    "resultCode": 411,
    "type": "ROLLBACK"
}

Аннулирование по номеру чека

Параметры

Header:

INTENT_OPERATION_TYPE - ROLLBACK_NUMBER_CHECK

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: RollBack

Примеры

Успех

Запрос:

{
  "cashier": "Кассир",
  "chequeNumber": 9145,
  "printCheque": false
}

Ответ RollbackResponse:

{
  "dateTime": "2022-07-06T09:56:23+03:00",
  "messageDetail": "Успешное аннулирование чека №9145",
  "messageTitle": "Успех",
  "numberCheck": "9146",
  "registerNumberSKO": "131010705",
  "resultCode": 200,
  "uid": "98D7A2DB54527CD907CF1091",
  "type": "ROLLBACK_NUMBER_CHECK",
  "numberCheckRollback": "9145",
  "uidDocumentRollback": "4CA7C96C38E0A9B707CF1091"
}

Ошибка (нет чека для аннулирования)

Запрос:

{
  "cashier": "Кассир",
  "chequeNumber": 9121,
  "printCheque": false
}

Ответ BaseResponse:

{
    "messageDetail": "Нет чека для аннулирования",
    "messageTitle": "Ошибка",
    "resultCode": 411,
    "type": "ROLLBACK_NUMBER_CHECK"
}

Возврат

Параметры

Header:

INTENT_OPERATION_TYPE - MONEY_BACK

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: MoneyBack

Примеры

Успех

Запрос:

{
  "cashier": "Кассир",
  "codeNumber": "0",
  "typeCode": 0,
  "price": "1",
  "amount": "1.00",
  "discount": "0",
  "cashless": "0",
  "cash": "1",
  "other": "0"
}

Ответ BaseResponse:

{
  "dateTime": "2022-07-06T10:00:56+03:00",
  "messageDetail": "Успешный возврат",
  "messageTitle": "Успех",
  "numberCheck": "9148",
  "registerNumberSKO": "131010705",
  "resultCode": 200,
  "rrn": "",
  "type": "MONEY_BACK",
  "uid": "E0CC03A64326BAE607CF1091",
  "total": "1",
  "isPrintSuccess": false,
  "payments": [
      {
          "type": "Cash",
          "sum": "1"
      }
  ]
}

Ошибка (в кассе недостаточно средств)

Запрос:

{
  "cashier": "Кассир",
  "codeNumber": "0",
  "typeCode": 0,
  "price": "1000",
  "amount": "1.00",
  "discount": "0",
  "cashless": "0",
  "cash": "1000",
  "other": "0"
}

Ответ BaseResponse:

{
  "messageDetail": "Невозможно провести операцию, в кассе недостаточно средств",
  "messageTitle": "Ошибка",
  "resultCode": 425,
  "type": "MONEY_BACK"
}

Получение прочей информации

Параметры

Header:

INTENT_OPERATION_TYPE - OTHER_INFO

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: Отсутсвует

Примеры

Успех

Запрос:

{
  // Пустое тело
}

Ответ OtherInfo:

{
  "cash_in_shift": "208",
  "messageDetail": "Дополнительная информация получена",
  "messageTitle": "Успех",
  "registerNumberSKO": "131010705",
  "resultCode": 200,
  "type": "OTHER_INFO",
  "last_number_document": 9148,
  "version_code_apk": 7,
  "shift_status": true,
  "list_payment_method": [
    "EXTERNAL",
    "PAY_IKASSA"
  ],
  "date_open_shift": "2022-07-05T22:05:56+03:00",
  "date_last_close_shift": "2022-07-05T16:41:31+03:00",
  "number_shift": 769,
  "count_un_send_documents": 0
}

Ошибка (смена закрыта)

Запрос:

{
  // Пустое тело
}

Ответ BaseResponse:

{
  "messageDetail": "Необходимо открыть смену",
  "messageTitle": "Ошибка",
  "resultCode": 400,
  "type": "OTHER_INFO"
}

Печать контрольной ленты

Параметры

Header:

INTENT_OPERATION_TYPE - CONTROL_TAPE

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: Отсутсвует

Примеры

Успех

Запрос:

{
  // Пустое тело
}

Ответ BaseResponse:

{
  "messageDetail": "Контрольная лента распечаталась",
  "messageTitle": "Успех",
  "registerNumberSKO": "131010705",
  "resultCode": 200,
  "type": "CONTROL_TAPE"
}

Ошибка (принтер не подключен)

Запрос:

{
  // Пустое тело
}

Ответ BaseResponse:

{
  "messageDetail": "Unable to print reason: Принтер не подключен",
  "messageTitle": "Ошибка",
  "resultCode": 399,
  "type": "CONTROL_TAPE"
}

Запрос журнала кассовых документов

Параметры

Header:

INTENT_OPERATION_TYPE - GET_SHIFT_DOCUMENTS

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: Отсутсвует

Примеры

Успех

Запрос:

{
  // Пустое тело
}

Ответ BaseResponse:

{
    "messageTitle": "Успех",
    "resultCode": 200,
    "type": "GET_SHIFT_DOCUMENTS",
    "registerNumberSKO": "129961033",
    "documents": [
        {
            "dateTime": "2023-12-18T15:07:55+03:00",
            "messageDetail": "Успешный возврат",
            "messageTitle": "Успех",
            "numberCheck": "1992",
            "registerNumberSKO": "129961033",
            "resultCode": 200,
            "rrn": "335254462818",
            "type": "MONEY_BACK",
            "uid": "42344ADD7978D96907BF0C49",
            "total": "5",
            "isPrintSuccess": true,
            "metaInfo": {
                "bankName": "Белинвестбанк",
                "terminalId": "11000086"
            },
            "payments": [
                {
                    "type": "Cash",
                    "sum": "3"
                },
                {
                    "type": "Cashless",
                    "sum": "2",
                    "ref": "335254462818"
                }
            ]
        },
        {
            "dateTime": "2023-12-18T15:06:57+03:00",
            "messageDetail": "Успешная оплата",
            "messageTitle": "Успех",
            "numberCheck": "1991",
            "registerNumberSKO": "129961033",
            "resultCode": 200,
            "rrn": "NO_RRN,335254352816",
            "type": "SALE",
            "uid": "28A98E6B8D96819807BF0C49",
            "total": "10",
            "change": "2",
            "isPrintSuccess": true,
            "oplati_payment_number": "48552",
            "payments": [
                {
                    "type": "Cash",
                    "sum": "4"
                },
                {
                    "type": "QR",
                    "sum": "2",
                    "ref": "48552"
                },
                {
                    "type": "Other",
                    "sum": "2"
                },
                {
                    "type": "Cashless",
                    "sum": "2",
                    "ref": "NO_RRN"
                },
                {
                    "type": "Cashless",
                    "sum": "2",
                    "ref": "335254352816"
                }
            ]
        },
        {
            "dateTime": "2023-12-18T15:04:21+03:00",
            "messageDetail": "Успешное изъятие из кассы",
            "messageTitle": "Успех",
            "numberCheck": "1990",
            "registerNumberSKO": "129961033",
            "resultCode": 200,
            "type": "WITHDRAW",
            "uid": "85FA21A77816D22207BF0C49",
            "isPrintSuccess": false,
            "sum": "5"
        },
        {
            "dateTime": "2023-12-18T15:03:28+03:00",
            "messageDetail": "Успешное внесение",
            "messageTitle": "Успех",
            "numberCheck": "1989",
            "registerNumberSKO": "129961033",
            "resultCode": 200,
            "type": "DEPOSIT",
            "uid": "2FB8783C1C186A6A07BF0C49",
            "isPrintSuccess": true,
            "sum": "10"
        }
    ]
}

Журнал банковских операций

Параметры

Header:

INTENT_OPERATION_TYPE - GET_BANK_DOCUMENTS

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: BankOperation

Примеры

Успех

Запрос:

{ 
  "bankOperation": "JournalOfBankDocuments", 
  "merchantId": 1 
}

Ответ BaseResponse:

{
  "messageTitle": "Успех",
  "resultCode": 200,
  "type": "GET_BANK_DOCUMENTS"
}

Печать последнего документа продажи

Параметры

Header:

INTENT_OPERATION_TYPE - PRINT_LAST_CHECK

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: PrintAny

Примеры

Успех

Запрос:

{
  // Пустое тело
}

Ответ BaseResponse:

{
  "messageDetail": "Чек распечатался",
  "messageTitle": "Успех",
  "registerNumberSKO": "131010705",
  "resultCode": 200,
  "type": "PRINT_LAST_CHECK"
}

Ошибка (принтер не подключен)

Запрос:

{
  // Пустое тело
}

Ответ BaseResponse:

{
  "messageDetail": "Unable to print reason: Принтер не подключен",
  "messageTitle": "Ошибка",
  "resultCode": 399,
  "type": "PRINT_LAST_CHECK"
}

Печать по номеру чека

Параметры

Header:

INTENT_OPERATION_TYPE - PRINT

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: ChequeNumber

Примеры

Успех

Запрос:

{
  "chequeNumber": 9390
}

Ответ BaseResponse:

{
  "messageDetail": "Чек распечатался",
  "messageTitle": "Успех",
  "registerNumberSKO": "131010705",
  "resultCode": 200,
  "type": "PRINT"
}

Ошибка (смена закрыта)

Запрос:

{
  "chequeNumber": 9390
}

Ответ BaseResponse:

{
  "messageDetail": "Принтер не подключен",
  "messageTitle": "Ошибка",
  "resultCode": 450,
  "type": "PRINT"
}

Печать последнего Z-отчета

Параметры

Header:

INTENT_OPERATION_TYPE - PRINT_Z_REPORT

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: Отсутсвует

Примеры

Успех

Запрос:

{
  // Пустое тело
}

Ответ BaseResponse:

{
  "messageDetail": "Чек распечатался",
  "messageTitle": "Успех",
  "registerNumberSKO": "131010705",
  "resultCode": 200,
  "type": "PRINT_LAST_CHECK"
}

Ошибка (предыдущая смена не найдена)

Запрос:

{
  // Пустое тело
}

Ответ BaseResponse:

{
  "messageDetail": "Чек не найден",
  "messageTitle": "Ошибка",
  "resultCode": 427,
  "type": "PRINT_Z_REPORT"
}

Отправка чека на E-mail

Параметры

Header:

INTENT_OPERATION_TYPE - SEND_EMAIL

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: SendEmail

Примеры

Успех

Запрос:

{
  "chequeNumber": 9390,
  "emails": [
    "[email protected]",
    "[email protected]"
  ]
}

Ответ BaseResponse:

{
  "messageDetail": "Чек был отправлен на почту",
  "messageTitle": "Успех",
  "registerNumberSKO": "131010705",
  "resultCode": 200,
  "type": "SEND_EMAIL"
}

Ошибка (смена закрыта)

Запрос:

{
  "chequeNumber": 9390,
  "emails": [
    "[email protected]",
    "[email protected]"
  ]
}

Ответ BaseResponse:

{
  "messageDetail": "Необходимо открыть смену",
  "messageTitle": "Ошибка",
  "resultCode": 400,
  "type": "SEND_EMAIL"
}

Нефискальная печать

Параметры

Header:

INTENT_OPERATION_TYPE - PRINT_BASE64

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: PrintBase64

Примечение:

Печать изображений на Bluetooth принтерах отсутвует.

Примеры

Успех

Запрос:

{
  "is_image": false,
  "data_base64": "0KLQtdGB0YLQvtCy0LDRjyDQvdC10YTQuNGB0LrQsNC70YzQvdCw0Y8g0L/QtdGH0LDRgtGMLiBpS2Fzc2EgaUthc3NhIGlLYXNzYSBpS2Fzc2EgaUthc3NhIGlLYXNzYSBpS2Fzc2E="
}

Ответ BaseResponse:

{
  "messageDetail": "Чек распечатался",
  "messageTitle": "Успех",
  "registerNumberSKO": "131010705",
  "resultCode": 200,
  "type": "PRINT_BASE64"
}

Ошибка (принтер не подключен)

Запрос:

{
  "is_image": false,
  "data_base64": "0KLQtdGB0YLQvtCy0LDRjyDQvdC10YTQuNGB0LrQsNC70YzQvdCw0Y8g0L/QtdGH0LDRgtGMLiBpS2Fzc2EgaUthc3NhIGlLYXNzYSBpS2Fzc2EgaUthc3NhIGlLYXNzYSBpS2Fzc2E="
}

Ответ BaseResponse:

{
  "messageDetail": "Принтер не подключен",
  "messageTitle": "Ошибка",
  "resultCode": 450,
  "type": "PRINT_BASE64"
}

Добавление чеков

Параметры

Header:

INTENT_OPERATION_TYPE - ADD_CHEQUES

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: [ChequeRequest] (массив)

Примеры

Успех

Запрос:

[
  {
    "info": {
      "uuid": "9aa03f0c-d77c-40ae-8f4d-236c432054a8",
      "name": "Чек 1",
      "chequeType": "Postponed"
    },
    "currency": "BYN",
    "chequeDiscount": {
      "isPercent": true,
      "value": "5"
    },
    "items": [
      {
        "price": "5"
      },
      {
        "price": "5",
        "quantity": "3"
      },
      {
        "price": "5",
        "quantity": "3",
        "discount": {
          "isPercent": true,
          "value": "10"
        }
      },
      {
        "price": "5",
        "quantity": "3",
        "discount": {
          "isPercent": true,
          "value": "10"
        },
        "taxRate": "tax10"
      },
      {
        "price": "5",
        "quantity": "3",
        "discount": {
          "isPercent": true,
          "value": "10"
        },
        "code": {
          "type": 0,
          "value": 10
        },
        "taxRate": "tax10"
      }
    ]
  },
  {
    "info": {
      "uuid": "bb074ac8-3661-4c56-818e-26686d5a7ec3",
      "name": "Чек 2",
      "chequeType": "Order",
      "table": 2,
      "place": 3
    },
    "currency": "BYN",
    "chequeDiscount": {
      "isPercent": true,
      "value": "5"
    },
    "items": [
      {
        "name": "Чай",
        "price": "5"
      }
    ]
  }
]

Ответ BaseResponse:

{
  "messageDetail": "Чеки успешно добавлены",
  "messageTitle": "Успех",
  "registerNumberSKO": "131010705",
  "resultCode": 200,
  "type": "ADD_CHEQUES"
}

Ошибка (неуникальный UUID)

Запрос:

[
  {
    "info": {
      "uuid": "bb074ac8-3661-4c56-818e-26686d5a7ec3",
      "name": "Чек 2",
      "chequeType": "Order",
      "table": 2,
      "place": 3
    },
    "currency": "BYN",
    "chequeDiscount": {
      "isPercent": true,
      "value": "5"
    },
    "items": [
      {
        "name": "Чай",
        "price": "5"
      }
    ]
  }
]

Ответ BaseResponse:

{
  "messageDetail": "UUID чека \"bb074ac8-3661-4c56-818e-26686d5a7ec3\" не уникален",
  "messageTitle": "Ошибка",
  "resultCode": 491,
  "type": "ADD_CHEQUES"
}

Оплата чеков

Параметры

Header:

INTENT_OPERATION_TYPE - CHEQUE_PAYMENT

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: PaymentChequeRequest (массив)

* Частичная оплата чека производится по одному типу оплаты за раз
* Частичная оплата чека методом Наличными `cash` производится в последнюю очередь
* Интерфейс кассы блокируется при наличии незавершенной оплаты чека
* Если сумма по платежам больше (за счет суммы `cash` и формирования сдачи) или равна итогу к оплате предчека, происходит автоматическая фискализация
* При наличии незавершенного предчека операции с удалением данного предчека, с оплатой других предчеков, оплатой, возвратом и пр. не доступны

Примеры

Успех

Запрос:

{ 
    "uuid": "9aa03f0c-d77c-40ae-8f4d-236c432054a8", 
    "cash": "0", 
    "cashless": "20", 
    "certificate": "0", 
    "oplati": "0", 
    "payment_method": "INTERNAL" 
}

Ответ BaseResponse:

{
"messageDetail": "Успешная оплата",
"messageTitle": "Успех",
"registerNumberSKO": "129961053",
"resultCode": 200,
"type": "CHEQUE_PAYMENT",
"metaInfo": { 
        "bankName": "Белинвестбанк", 
        "terminalId": "11000086" 
    },
"uuid": "9aa03f0c-d77c-40ae-8f4d-236c432054a8",
"payments": [
        { 
            "type": "Cashless", 
            "sum": "20", 
            "ref": "402340452973" 
        }
    ],
"remain": "37.47"
}

Полная оплата чека (сопровождается фискализацией и печатью чека)

Ответ BaseResponse:

{
"dateTime": "2024-01-23T11:20:05+03:00",
"messageDetail": "Успешная оплата",
"messageTitle": "Успех",
"numberCheck": "409",
"registerNumberSKO": "129961053",
"resultCode": 200,
"rrn": "402340452973",
"type": "SALE",
"uid": "126AF405E6FD5ED307BF0C5D",
"total": "57.47",
"change": "0",
"isPrintSuccess": true,
"metaInfo": { 
        "bankName": "Белинвестбанк", 
        "terminalId": "11000086" 
    },
"uuid": "9aa03f0c-d77c-40ae-8f4d-236c432054a8",
"transactionId": "49784",
"payments": [
        { 
            "type": "Cashless", 
            "sum": "20", 
            "ref": "402340452973" 
        },
        { 
            "type": "Other", 
            "sum": "10", 
            "ref": "e0b92d58-4a07-4563-95a7-f1d44ac78a4f" 
        },
        { 
            "type": "Cash", 
            "sum": "5" 
        },
        { 
            "type": "QR", 
            "sum": "22.47", 
            "ref": "49784" 
        }
    ]
}

Аннулирование оплаты

Параметры

Header:

INTENT_OPERATION_TYPE - CHEQUE_ROLLBACK

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: RollbackChequeRequest

* При наличии незавершенного предчека операции с удалением данного предчека, с оплатой других предчеков, оплатой, возвратом и пр. не доступны

Примеры

Успех

Запрос:

{ 
    "uuid": "9aa03f0c-d77c-40ae-8f4d-236c432054a8", 
    "type": "Cashless", 
    "sum": "15", 
    "ref": "402341402975", 
    "payment_method": "INTERNAL" 
}

Ответ BaseResponse:

{ 
    "messageDetail": "Успешное аннулирование", 
    "messageTitle": "Успех", 
    "registerNumberSKO": "129961053", 
    "resultCode": 200, 
    "type": "CHEQUE_ROLLBACK" 
}

Получение чеков

Параметры

Header:

INTENT_OPERATION_TYPE - GET_CHEQUES

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: UUIDs

Запрос позволяет получить:

  • весь список чеков если передавать пустое тело или пустой массив uuids.
  • только выбранные uuids если передавать список.

Примеры

Успех

Запрос: Тело пустое

Запрос:

{
  "uuids": [
  ]
}

Ответ ChequesResponse:

{
  "messageDetail": "Чеки успешно получены",
  "messageTitle": "Успех",
  "resultCode": 200,
  "type": "GET_CHEQUES",
  "cheques": [
    {
      "info": {
        "uuid": "9aa03f0c-d77c-40ae-8f4d-236c432054a8",
        "name": "Чек 1",
        "chequeType": "Postponed"
      },
      "currency": "BYN",
      "chequeDiscount": {
        "isPercent": true,
        "value": "5",
        "sum": "3.03"
      },
      "subTotal": "60.5",
      "total": "57.47",
      "items": [
        {
          "price": "5",
          "quantity": "1",
          "sum": "5",
          "total": "5"
        },
        {
          "price": "5",
          "quantity": "3",
          "sum": "15",
          "total": "15"
        },
        {
          "price": "5",
          "quantity": "3",
          "discount": {
            "isPercent": true,
            "value": "10",
            "sum": "1.5"
          },
          "sum": "15",
          "total": "13.5"
        },
        {
          "price": "5",
          "quantity": "3",
          "discount": {
            "isPercent": true,
            "value": "10",
            "sum": "1.5"
          },
          "tax": {
            "rate": "10",
            "value": "1.23"
          },
          "sum": "15",
          "total": "13.5"
        },
        {
          "code": {
            "type": 0,
            "value": 10
          },
          "price": "5",
          "quantity": "3",
          "discount": {
            "isPercent": true,
            "value": "10",
            "sum": "1.5"
          },
          "tax": {
            "rate": "10",
            "value": "1.23"
          },
          "sum": "15",
          "total": "13.5"
        }
      ],
      "payments": [
      ]
    },
    {
      "info": {
        "uuid": "bb074ac8-3661-4c56-818e-26686d5a7ec3",
        "name": "Чек 2",
        "chequeType": "Order",
        "table": 2,
        "place": 3
      },
      "currency": "BYN",
      "chequeDiscount": {
        "isPercent": true,
        "value": "5",
        "sum": "0.25"
      },
      "subTotal": "5",
      "total": "4.75",
      "items": [
        {
          "name": "Чай",
          "price": "5",
          "quantity": "1",
          "sum": "5",
          "total": "5"
        }
      ],
      "payments": [
      ]
    }
  ]
}

Успех

Запрос:

{
  "uuids": [
    "bb074ac8-3661-4c56-818e-26686d5a7ec3"
  ]
}

Ответ ChequesResponse:

{
  "messageDetail": "Чеки успешно получены",
  "messageTitle": "Успех",
  "resultCode": 200,
  "type": "GET_CHEQUES",
  "cheques": [
    {
      "info": {
        "uuid": "bb074ac8-3661-4c56-818e-26686d5a7ec3",
        "name": "Чек 2",
        "chequeType": "Order",
        "table": 2,
        "place": 3
      },
      "currency": "BYN",
      "chequeDiscount": {
        "isPercent": true,
        "value": "5",
        "sum": "0.25"
      },
      "subTotal": "5",
      "total": "4.75",
      "items": [
        {
          "name": "Чай",
          "price": "5",
          "quantity": "1",
          "sum": "5",
          "total": "5"
        }
      ],
      "payments": [
      ]
    }
  ]
}

Ошибка (отсутствует UUID)

Запрос:

{
  "uuids": [
    "12345-6789-4c56-818e-26686d5a7ec3"
  ]
}

Ответ BaseResponse:

{
  "messageDetail": "Один или несколько чеков не найдены",
  "messageTitle": "Ошибка",
  "resultCode": 488,
  "type": "GET_CHEQUES"
}

Удаление чеков

Параметры

Header:

INTENT_OPERATION_TYPE - REMOVE_CHEQUES

Auth-token - Токен авторизации (опционально). Подробнее

Тело запроса: UUIDs

Примеры

Успех

Запрос:

{
  "uuids": [
    "bb074ac8-3661-4c56-818e-26686d",
    "bb074ac8-3661-4c56-818e-26686d5a7ec3"
  ]
}

Ответ ChequesResponse:

{
  "messageDetail": "Чеки успешно удалены",
  "messageTitle": "Успех",
  "resultCode": 200,
  "type": "REMOVE_CHEQUES",
  "cheques": [
    {
      "info": {
        "uuid": "bb074ac8-3661-4c56-818e-26686d",
        "name": "Счет №9",
        "chequeType": "Order"
      },
      "currency": "BYN",
      "items": [
        {
          "name": "Батареи литиевые кнопочные GP CR2016-7C5 55, 5 шт",
          "code": {
            "type": 0,
            "value": 4891199001123
          },
          "price": "0.59",
          "quantity": "1",
          "sum": "0.59",
          "total": "0.59"
        },
        {
          "name": "Aquafresh Standard Зубная щетка",
          "code": {
            "type": 0,
            "value": 5999518577553
          },
          "price": "1.36",
          "quantity": "1",
          "discount": {
            "value": "0.2",
            "sum": "0.2"
          },
          "sum": "1.36",
          "total": "1.16"
        },
        {
          "code": {
            "type": 0,
            "value": 2
          },
          "price": "10",
          "quantity": "1",
          "sum": "10",
          "total": "10"
        }
      ],
      "chequeDiscount": {
        "isPercent": true,
        "value": "2",
        "sum": "0.24"
      },
      "subTotal": "11.75",
      "total": "11.51",
      "payments": [
      ]
    },
    {
      "info": {
        "uuid": "bb074ac8-3661-4c56-818e-26686d5a7ec3",
        "name": "Чек 2",
        "chequeType": "Order",
        "table": 2,
        "place": 3
      },
      "currency": "BYN",
      "items": [
        {
          "name": "Чай",
          "price": "5",
          "quantity": "1",
          "sum": "5",
          "total": "5"
        }
      ],
      "chequeDiscount": {
        "isPercent": true,
        "value": "5",
        "sum": "0.25"
      },
      "subTotal": "5",
      "total": "4.75",
      "payments": [
      ]
    }
  ]
}

Успех

Запрос:

{
  "uuids": [
    "b5770c9b-c32a-4ea7-9062-6d2553611062"
  ]
}

Ответ ChequesResponse:

{
  "messageDetail": "Чеки успешно удалены",
  "messageTitle": "Успех",
  "resultCode": 200,
  "type": "REMOVE_CHEQUES",
  "cheques": [
    {
      "info": {
        "uuid": "b5770c9b-c32a-4ea7-9062-6d2553611062",
        "name": "Счет №9",
        "chequeType": "Order"
      },
      "currency": "BYN",
      "items": [
        {
          "code": {
            "type": 0,
            "value": 2
          },
          "price": "8",
          "quantity": "1",
          "sum": "8",
          "total": "8"
        }
      ],
      "subTotal": "8",
      "total": "8",
      "payments": [
      ]
    }
  ]
}

Ошибка (пустой список)

Запрос:

{
  "uuids": [
  ]
}

Ответ BaseResponse:

{
  "messageDetail": "Один или несколько чеков не найдены",
  "messageTitle": "Ошибка",
  "resultCode": 488,
  "type": "REMOVE_CHEQUES"
}

Ошибка (чек не найден)

Запрос:

{
  "uuids": [
    "b5770c9b-c32a-4ea7-9062-6d2553611062"
  ]
}

Ответ BaseResponse:

{
  "messageDetail": "Один или несколько чеков не найдены",
  "messageTitle": "Ошибка",
  "resultCode": 488,
  "type": "REMOVE_CHEQUES"
}

Типы данных

Тип Auth

{
    "pin": String?,
    "rememberPin": Boolean = false,
    "returnToken": Boolean = false
}
  • pin - Необязательное поле
    • Пин код для авторизации в СКО. Если ничего не передано будет использован сохраненный пин код если он был сохранен.
  • rememberPin - Необязательное поле. По умолчанию false
    • Флаг отвечающий за сохранение пин кода. Если пин код уже был сохранен, пин код не удалится.
  • returnToken - Необязательное поле. По умолчанию false
    • Флаг определяющий будет ли передан токен для последующей авторизации по токену
    • Возвращаемый токен валиден в течение 24 часов

Тип Sale

{
    "cashier": String,
    "itemList": [SaleItem],
    "currency": Currency = "BYN",

    "cash": BigDecimal,
    "cashless": BigDecimal,
    "certificate": BigDecimal,
    "oplati": BigDecimal,
    
    "isPercentDiscount": Boolean = false,
    "chequeDiscount": BigDecimal?,

    "payment_method": CashlessType?,
    "bank_package_name": String?,
    "merchantId": Int?,

    "address": String?,
    "phone_number": String?,
    "name_of_outlet": String?,
    "advertising_text": String?,
    "printCheque": Boolean = true
}
  • cashier
    • Имя кассира.
      • Хотя бы 1 символ. Все что больше 16 символов, отбрасывается.
  • itemList
    • Список товаров типа SaleItem
  • currency - Не обязательное поле. Стандартное значение BYN.
  • cash
    • Сумма наличными
  • cashless
    • Сумма безналичными
  • certificate
    • Сумма другими способами
  • oplati
    • Сумма способом QR
  • isPercentDiscount - Необязательное поле. Стандартное значение = false.
    • Показатель типа скидки.
      • Если true - добавляет скидку в процентах.
      • Если false - добавляет ценовую скидку.
  • chequeDiscount - Необязательное поле.
    • Если значение отрицательное, то применяется надбавка.
    • Процентная
      • Максимальное значение 100. 2 Знака после запятой.
    • Ценовая
      • Максимальное значение 99999999999.99.
  • payment_method CashlessType
    • Необязательное поле если cashless = 0.
    • Необязательное поле если в настройках включен только один способ оплаты.
  • bank_package_name
    • Передается только в случае если payment_method = PAY_IKASSA
    • Необязательный в случае если есть только один способ оплаты через iKassa Pay
  • merchantId - Необязательное поле.
    • Номер торговца
  • address - Необязательное поле.
    • Кастомный текст для поля адреса на чеке.
  • phone_number
    • Кастомный текст для поля номера телефона на чеке.
  • name_of_outlet
    • Кастомный текст для поля название тороговой точки на чеке.
  • advertising_text
    • Кастомный текст для поля рекламного текста на чеке.
  • printCheque - Необязательное поле. Стандартное значение = true.
    • Флаг определяющий будет ли печататься чек.

Тип SaleItem

{
    "nameTitle": String?,
    "typeCode": Long = 0,
    "codeNumber": String = "0",
    "price": BigDecimal,
    "amount": BigDecimal = "1",
    "isPercentDiscount": Boolean = false,
    "discount": BigDecimal?,
    "taxRate": TaxRate?
}
  • nameTitle - Необязательное поле.
    • Имя товара.
  • typeCode - Необязательное поле. Стандартное значение = 0.
  • codeNumber - Необязательное поле. Стандартное значение = "0".
  • price - BigDecimal
    • Цена товарной позиции.
    • Больше нуля.
    • Максимальное значение 99999999999.99.
  • amount - BigDecimal. Необязательное поле, стандартное значение - 1
    • Количество.
    • Больше нуля.
    • Максимальное значение 9999.999.
  • isPercentDiscount - Необязательное поле. Стандартное значение = false.
    • Показатель типа скидки.
      • Если true - добавляет скидку в процентах.
      • Если false - добавляет ценовую скидку.
  • discount - BigDecimal. Необязательное поле.
    • Если значение отрицательное, то применяется надбавка.
    • Процентная
      • Максимальное значение 100. 2 Знака после запятой.
    • Ценовая
      • Максимальное значение 99999999999.99.
  • taxRate - TaxRate. Необязательное поле.
    • ставка НДС для товарной позиции

Тип Sum

{
    "cashier": String,
    "sum": BigDecimal,
    "currency": Currency = "BYN",
    "printCheque": Boolean = true
}
  • cashier
    • Имя кассира.
      • Хотя бы 1 символ. Все что больше 16 символов, отбрасывается.
  • sum - BigDecimal
    • Передаваемая сумма для операции.
  • currency - Не обязательное поле. Стандартное значение BYN.
  • printCheque - Необязательное поле. Стандартное значение = true.
    • Флаг определяющий будет ли печататься чек.

Типы безналичных операций CashlessType

Для использования любого из спобов - способ должен быть включен в настройках.

  • INTERNAL - Встроенный терминал (если он есть)
  • EXTERNAL - Внешний терминал
  • PAY_IKASSA - SoftPos (iKassa Pay)
  • TAPXPHONE - TapXPhone

Тип RollBack

{
    "cashier": String,
    "chequeNumber": Long,
    "printCheque": Boolean = true
}
  • cashier
    • Имя кассира.
      • Хотя бы 1 символ. Все что больше 16 символов, отбрасывается.
  • chequeNumber
    • Номер чека для аннулирования.
  • printCheque - Необязательное поле. Стандартное значение = true.
    • Флаг определяющий будет ли печататься чек.

Тип MoneyBack

{
    "cashier": String,
    "nameTitle": String?,
    
    "typeCode": Long,
    "codeNumber": Long,
    
    "currency": Currency = "BYN",
    
    "price": BigDecimal,
    "amount": BigDecimal,
    "isPercentDiscount": Boolean = true,
    "discount": BigDecimal,
    "cash": BigDecimal,
    "cashless": BigDecimal,
    "oplati": BigDecimal,
    "other": BigDecimal,
    
    "rrn": String?,
    "transactionId": String?,
    "payment_method": CashlessType?,
    "bank_package_name": String?,
    "printCheque": Boolean = true
}
  • cashier
    • Имя кассира.
      • Хотя бы 1 символ. Все что больше 16 символов, отбрасывается.
  • nameTitle - Необязательное поле.
    • Имя товара.
  • typeCode - Обязательное поле.
  • codeNumber - Обязательное поле.
  • currency - Не обязательное поле. Стандартное значение BYN.
  • price - BigDecimal
    • Цена товарной позиции.
    • Больше нуля.
    • Максимальное значение 99999999999.99.
  • amount - BigDecimal
    • Количество.
    • Больше нуля.
    • Максимальное значение 9999.999.
  • isPercentDiscount - Необязательное поле. Стандартное значение = true.
    • Показатель типа скидки.
      • Если true - добавляет скидку в процентах.
      • Если false - добавляет ценовую скидку.
  • discount - Необязательное поле.
    • Если значение отрицательное, то применяется надбавка.
    • Процентная
      • Максимальное значение 100. 2 Знака после запятой.
    • Ценовая
      • Максимальное значение 99999999999.99.
  • cash
    • Сумма возврата наличными
  • cashless
    • Сумма возврата безналичными
  • other
    • Сумма возврата другими способами
  • oplati
    • Сумма возврата Оплати
  • rrn - Необязательное поле.
    • Номер банковского чека для совершения возврата.
    • Необязательный если только наличные.
    • Необязательный для некоторых типов терминала.
  • transactionId - Необязательное поле.
    • Номер операции с QR кодом.
  • payment_method CashlessType
    • Необязательное поле если cashless = 0.
    • Необязательное поле если в настройках включен только один способ оплаты.
  • bank_package_name
    • Передается только в случае если payment_method = PAY_IKASSA
    • Необязательный в случае если есть только один способ оплаты через iKassa Pay
  • merchantId - Необязательное поле.
    • Номер торговца
  • printCheque - Необязательное поле. Стандартное значение = true.
    • Флаг определяющий будет ли печататься чек.

Тип кода

  • Поддерживаемые значения:
    • 0 - plain-код (не имеет классификации)
    • 1 - GTIN/EAN
    • 3 - Услуга
    • 4 - Аванс

Код товара

  • Непосредственно сам код товарной позиции

Тип BigDecimal

Числовой дробный тип. Можно передавать в виде:

  • String - Рекомендуемый. Возвращаемый.
  • Long
  • Int
  • Double

Типы валют Currency

Передается как строка String

  • BYN - Белорусские рубли
  • RUB - Российские рубли
  • USD - Доллары
  • EUR - Евро

Базовый запрос BaseRequest

{
    "cashier": String?,
    "printCheque": Boolean = true
}
  • cashier
    • Имя кассира.
      • В некоторых запросах, где имя кассира не обязательно - это поле игнорируется.
      • Хотя бы 1 символ. Все что больше 16 символов, отбрасывается.
  • printCheque - Необязательное поле. Стандартное значение = true.
    • В некоторых запросах, где нет печати - это поле игнорируется.
    • Флаг определяющий будет ли печататься чек.

Тип ChequeNumber

{
    "chequeNumber": Long
}
  • chequeNumber
    • Номер документа

Тип PrintAny

{
    "PrintAny": Boolean = False
}
  • PrintAny - Необязательное поле. Стандартное значение = False.
    • печать последнего фискального документа

Тип SendEmail

{
    "chequeNumber": Long,
    "emails": [String]
}
  • chequeNumber
    • Номер документа
  • emails - Массив String
    • Получатели чека

Тип Shift

{
    "cashier": String?,
    "bankShiftRequired": Boolean,
    "printCheque": Boolean
}
  • cashier - Необязательное поле.
    • Имя кассира.
      • Хотя бы 1 символ. Все что больше 16 символов, отбрасывается.
  • bankShiftRequired - Не обязательное поле. Стандартное значение true.
    • Флаг указывающий обязательность закрытия/открытия смены банка. Если false, будет закрыта ТОЛЬКО фискальная смена, смена банка будет ПРОПУЩЕНА.
      • Использовать false только в случае необходимости закрыть смену при ошибке смены банка.
  • printCheque - Необязательное поле. Стандартное значение = true.
    • Флаг определяющий будет ли печататься чек.

Базовый запрос PrintBase64

{
    "is_image": Boolean = true,
    "data_base64": String
}
  • is_image - Необязательное поле. Стандартное значение = true.
    • Определяет тип передаваемых данных. Возможнные типы:
      • Изображение
      • Текст (UTF-8)
  • data_base64
    • Информация для печати закодированная в Base64

Тип ChequeInfo

{
    "uuid": String,
    "name": String,
    "chequeType": ChequeInfo.Type,
    "table": Long?,
    "place": Long?
}

Нефискальная информация о чеке

  • uuid
    • уникальный идентификатор чека
    • необходим для идентификации чеков, их сохранения, удаления и оплаты
  • name
    • отображаемое в приложении имя чека
      • должно содержать хотя бы 1 символ
    • не отображается на печатном чеке
  • chequeType - Тип чека
  • table - Необязательное поле. Стандартное значение null
    • игнорируется для Postponed чеков
    • номер стола для чека
    • печатается для печатного чека
  • place - Необязательное поле. Стандартное значение null
    • игнорируется для Postponed чеков
    • номер места для чека
    • печатается для печатного чека

Типы чеков ChequeType

  • Postponed - Отложеный чек
    • не может быть распечатан до фискализации
    • не имеет номера стола и места
  • Order
    • может быть распечатан перед фискализацией
    • может иметь номер стола и места

Передается в виде строки

Пример:

{
    ...
    "type": "Postponed",
    ...
}

Тип Code

{
    "type": Int,
    "value": Long
}

Код продукта

Тип Discount

{
    "isPercent": Boolean = false,
    "value": BigDecimal,
    "sum": BigDecimal?
}
  • isPercent - Необязательное поле. Стандартное значение false
    • флаг указывающий тип скидки - процентный или сумовой
      • true - процентный
      • false - сумовой
  • value - BigDecimal
    • значение скидки
      • в зависимости от типа скидки "isPercent", отбражает процент или сумму
  • sum - BigDecimal. Необязательное поле.
    • используется только при возврате результата
    • игноируется при получении
    • поле обязательное при возврате результата

Тип TaxRate

enum имеющий следующие поддерживаемые значения:

  • tax0
  • tax10
  • tax20
  • tax25

Пример:

{
    ...
    "taxRate": "tax0",
    ...
}

Тип Tax

{
    "rate": BigDecimal,
    "value": BigDecimal
}

Тип ChequeRequest

{
    "info": ChequeInfo,
    "currency": Currency = "BYN",
    "items": [SaleItemRequest],
    "chequeDiscount": Discount?,
    "isNotEditable": Boolean = false,

}
  • info - ChequeInfo
    • нефискальная информация о чеке
  • currency - Не обязательное поле. Стандартное значение BYN.
  • items - массив SaleItemRequest
  • chequeDiscount - Discount. Необязательное поле.
    • скидка на чек
  • isNotEditable - не обязатально поле. Стандартное значение = false
    • если true - запретить редактировать предчек чек на кассе

Тип SaleItemRequest

{
    "name": String?,
    "code": Code = {"type":0,"value":0},
    "price": BigDecimal,
    "quantity": BigDecimal = "1",
    "discount": Discount?,
    "taxRate": TaxRate?
}
  • name - Необязательное поле.
    • Имя товара.
  • code - Code. Необязательное поле, стандартное значение - тип: 0, значение: 0
    • Код товара
  • price - BigDecimal
    • Цена товарной позиции.
    • Больше нуля.
    • Максимальное значение 99999999999.99.
  • quantity - BigDecimal. Необязательное поле, стандартное значение - 1
    • Количество.
    • Больше нуля.
    • Максимальное значение 9999.999.
  • discount - Discount. Необязательное поле.
    • скидка на единицу товара
  • taxRate - TaxRate. Необязательное поле.
    • ставка НДС для товарной позиции

Тип PaymentChequeResponse

{
    "uuid": String,
    "cash": BigDecimal,
    "cashless": BigDecimal,
    "certificate": BigDecimal,
    "oplati": BigDecimal,
    "payment_method": CashlessType?,
    "bank_package_name": String?, 
    "ref": String?
}
  • uuid - обязательное поле. ChequeInfo
    • уникальных идентификатор чека в виде строки
  • cash
    • Сумма наличными
  • cashless
    • Сумма безналичными
  • certificate
    • Сумма другими способами
  • oplati
    • Сумма способом QR
  • payment_method CashlessType
    • Необязательное поле если cashless = 0.
    • Необязательное поле если в настройках включен только один способ оплаты.
  • bank_package_name
    • Передается только в случае если payment_method = PAY_IKASSA
    • Необязательный в случае если есть только один способ оплаты через iKassa Pay
  • ref - Необязательное поле.
    • используется для идентификации оплаты по сертификату
    • если не передать, то будет присвоен рандомный

Тип RollBackChequeRequest

{
    "uuid": String,
    "type": PaymentType?,
    "sum": BigDecimal,
    "ref": String?
    "payment_method": CashlessType?,
    "bank_package_name": String?
}
  • uuid - обязательное поле. ChequeInfo
    • уникальных идентификатор чека в виде строки
  • type - обязательное поле. PaymentType
    • идентификатор типа оплаты
  • sum - обязательное поле
    • сумма оплаты
  • ref - Необязательное поле.
    • при аннулировании безналом через встроенный терминал передаётся rrn
    • пля аннулировании оплаты внешним терминалом в необходимо передать "NO_RRN"
    • при аннулированиии через оплати передаётся номер transactionId
    • при аннулировании сертификата передаётся ref, которое было указано в методе CHEQUE_PAYMENT, или сгенерированное и переданное в ответе
      • для сертификата поле ref необязательное, если его не передать, будет идти проверка только по сумме
  • payment_method CashlessType
    • Необязательное поле если cashless = 0.
    • Необязательное поле если в настройках включен только один способ оплаты.
  • bank_package_name
    • Передается только в случае если payment_method = PAY_IKASSA
    • Необязательный в случае если есть только один способ оплаты через iKassa Pay

Тип ChequeResponse

{
    "info": ChequeInfo,
    "currency": Currency,
    "items": [SaleItemResponse],
    "chequeDiscount": Discount?
    "subTotal": BigDecimal,
    "total": BigDecimal,
    "payments": [Payment]
}
  • info - ChequeInfo
    • нефискальная информация о чеке
  • items - массив SaleItemResponse
  • currency
  • chequeDiscount - Discount. Необязательное поле.
    • скидка на чек
  • subTotal - BigDecimal
    • Под итог чека, без применения скидки на чек
  • total - BigDecimal
    • Итоговая сумма к оплате
  • payments - массив Payment
    • список совершенных оплат в чеке

Тип SaleItemResponse

{
    "name": String?,
    "code": Code,
    "price": BigDecimal,
    "quantity": BigDecimal,
    "discount": Discount?,
    "tax": Tax?,
    "sum": BigDecimal,
    "total": BigDecimal
}
  • name - Необязательное поле.
    • Имя товара.
  • code - Code
    • Код товара
  • price - BigDecimal
    • Цена товарной позиции.
    • Больше нуля.
    • Максимальное значение 99999999999.99.
  • quantity - BigDecimal
    • Количество.
    • Больше нуля.
    • Максимальное значение 9999.999.
  • discount - Discount. Необязательное поле.
    • скидка на единицу товара
  • tax - Tax. Необязательное поле.
    • НДС для товара
  • sum - BigDecimal
    • посчитанная сумма без применения скидки. price * quantity
  • total - BigDecimal
    • итоговая сумма товарной позиции с примененной скидкой

Тип Payment

{
    "type": PaymentType,
    "sum": BigDecimal,
    "ref": String?
}
  • type - PaymentType
    • Тип оплаты
  • sum - BigDecimal
    • сумма оплаты
  • ref - Необязательное поле.
    • идентификатор оплаты (если есть). Например:
      • rrn банковской операции
      • transactionId операции с QR кодом

Тип PaymentType

enum имеющий следующие поддерживаемые значения:

  • Cash
  • Cashless
  • Other
  • QR

Пример:

{
    ...
    "type": "Cash",
    ...
}

Тип BankOperation

{
    "type": BankOperationType,
    "merchantId": Int?
}
  • type - BankOperationType
    • Тип отчета
  • merchantId - Необязательное поле.
    • Номер торговца

Тип BankOperationType

enum имеющий следующие поддерживаемые значения:

  • JournalOfBankDocuments
    • Детальный отчет
  • XReport
    • Краткий отчет
  • BankReconciliation
    • Сверка итогов

Пример:

{
    ...
    "type": "JournalOfBankDocuments",
    ...
}

Тип UUIDs

{
    "uuids": [String] = []
}
  • uuids - Необязательное поле, стандартное значение - пустой массив.
    • список уникальных id в виде строк

HeaderComments

{
    "comment": [
     { "text": String\n, "isBold": true, "align": "Center" }
	]
}

Доступно для операций: SALE, MONEY_BACK, WITHDRAW, ROLLBACK, ROLLBACK_NUMBER_CHECK

  • comment
    • принимает массив текста с учетом разметки.
  • text
    • текстовое содержание. принимает параметры Разметки.

Разметка

  • \n
    • новая строка
  • \n\n
    • пустая строка
  • isBold: Boolean
    • жирный шрифт
  • align
    • выравнивание. Принимает значения: Center, Left, Right

Типы ответов

Базовый ответ BaseResponse

{
    "dateTime": String?,
    "messageDetail": String,
    "messageTitle": String,
    "numberCheck": String?,
    "registerNumberSKO": String?,
    "resultCode": Long,
    "rrn": String?,
    "type": String,
    "uid": String?,
    "isPrintSuccess": Boolean?
    "total": String?,
    "change": String?,
    "remain": String?
}

Поле dateTime (опциональное) в формате ISO8601 yyyy-MM-dd'T'HH:mm:ssZ. Время и дата совершения фискальной операции. Например 2022-01-21T12:00:00+03:00.

Поле messageDetail описание результата. Например "Токен авторизован" или "Неверный пароль доступа к токену".

Поле messageTitle оглавление результата. Например "Успех" или "Ошибка".

Поле numberCheck (опциональное) номер чека, после успешной фискализации.

Поле registerNumberSKO (отсутсвует для ошибок) регистрационный номер ско.

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

Поле rrn (опциональное) номер банковской операции. Если несколько то разделены запятыми.

Поле type (опциональное) тип операции переданный в INTENT_OPERATION_TYPE.

Поле uid (опциональное) уникальный идентификатор фискальной операции.

Поле isPrintSuccess (опциональное) возвращает null в случае если был передан флаг "printCheque": false. Возвращает true если чек был успешно распечатан и false если произошла ошибка при печати.

Поле total (опциональное) возвращает итоговую сумму для Продажи и Возврата.

Поле change (опциональное) возвращает сумму сдачи для Продажи.

Поле remain (опциональное) возвращает сумму остатка для оплаты незавершенного чека.

Ответ с чеками AuthResponse

{
    "messageDetail": String,
    "messageTitle": String,
    "resultCode": Long,
    "type": String,
    "token": String?
}

Поле messageDetail описание результата. Например "Токен авторизован" или "Неверный пароль доступа к токену".

Поле messageTitle оглавление результата. Например "Успех" или "Ошибка".

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

Поле type тип операции переданный в INTENT_OPERATION_TYPE.

Поле token уникальный токен для автоматической авторизации в течение 24 часов.

  • не обязательное
  • наличие зависит от переданного в запрос авторизации флага returnToken

Ответ с отчетом ReportResponse

    uid: String?,
    numberCheck: String?,
    messageDetail: String,
    messageTitle: String,
    registerNumberSKO: String,
    resultCode: Long,
    type: String,
    dateOpenShift: String,
    dateCloseShift: String?,
    amountDocument: String,
    incomingBalance: String,
    numberFirstCheck: String,
    numberLastCheck: String,
    amountCurrency: String,
    amountOfPaymentsDocInCurrencyOne: String,
    sumSalePaymentsPerShift: String,
    sumSaleCashlessPerShift: String,
    sumSaleCardSumPerShift: String,
    sumSaleOtherSumPerShift: String,
    sumSaleCashPerShift: String,
    amountMoneyBackPerShift: String,
    sumMoneyBackPerShift: String,
    amountMoneyBackCashPerShift: String,
    sumMoneyBackCashPerShift: String,
    amountMoneyBackCashlessPerShift: String,
    sumMoneyBackCashlessPerShift: String,
    amountDepositPerShift: String,
    sumDepositPerShift: String,
    amountWithdrawPerShift: String,
    sumWithdrawPerShift: String,
    amountRollbackPerShift: String,
    sumRollbackPerShift: String,
    amountRollbackCashPerShift: String,
    sumRollBackCashPerShift: String,
    amountRollbackCardPerShift: String,
    sumRollbackCardPerShift: String,
    amountRollbackOtherPerShift: String,
    sumRollbackOtherPerShift: String,
    amountCorrectionPerShift: String,
    sumCorrectionPerShift: String,
    amountCancelPerShift: String,
    sumCancelPerShift: String,
    isPrintSuccess: Boolean?

Поле uid (отсутвует для Х-отчета) уникальный идентификатор документа.

Поле numberCheck (отсутствует для Х-отчета) номер закрытой смены.

Поле messageDetail описание результата. Например "Смена закрыта".

Поле messageTitle оглавление результата. Например "Успех" или "Ошибка".

Поле registerNumberSKO (отсутсвует для ошибок) регистрационный номер ско

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

Поле type (опциональное) тип операции переданный в INTENT_OPERATION_TYPE.

Поле dateOpenShift в формате ISO8601 yyyy-MM-dd'T'HH:mm:ssZ. Время открытия смены.

Поле dateCloseShift (отсутствует для Х-отчета) в формате ISO8601. Время закрытия смены.

Поле amountDocument количество документов.

Поле incomingBalance накопленный оборот только для CLOSE_SHIFT

Поле numberFirstCheck номер первого чека. 0 если не было фискализировано ни одной операции.

Поле numberLastCheck номер последнего чека. 0 если не было фискализировано ни одной операции.

Поле amountCurrency количетсво валют.

Поле amountOfPaymentsDocInCurrencyOne количество продаж в базовой валюте.

Поле sumSalePaymentsPerShift сумма продаж за смену.

Поле sumSaleCashlessPerShift сумма безналичных продаж.

Поле sumSaleCardSumPerShift сумма безналичных продаж по карте.

Поле sumSaleOtherSumPerShift сумма безналичных продаж другими способами.

Поле sumSaleCashPerShift сумма наличных продаж.

Поле amountMoneyBackPerShift количество возвратов

Поле sumMoneyBackPerShift сумма возвратов.

Поле amountMoneyBackCashPerShift количество возвратов наличными.

Поле sumMoneyBackCashPerShift сумма возвратов наличными.

Поле amountMoneyBackCashlessPerShift количество возвратов безналичными.

Поле sumMoneyBackCashlessPerShift сумма возвратов безналичными.

Поле amountDepositPerShift количество внесений.

Поле sumDepositPerShift сумма депозита.

Поле amountWithdrawPerShift количество изъятий.

Поле sumWithdrawPerShift сумма изъятий.

Поле amountRollbackPerShift количество аннулирований.

Поле sumRollbackPerShift сумма аннулирований.

Поле amountRollbackCashPerShift количество аннулирований наличными.

Поле sumRollBackCashPerShift сумма аннулирований наличными.

Поле amountRollbackCardPerShift количество аннулирований по карте.

Поле sumRollbackCardPerShift сумма аннулирований по карте.

Поле amountRollbackOtherPerShift количество аннулирований другими способами.

Поле sumRollbackOtherPerShift сумма аннулирований другими способами.

Поле amountCorrectionPerShift количество коррекций.

Поле sumCorrectionPerShift сумма коррекций.

Поле amountCancelPerShift количество отмен.

Поле sumCancelPerShift сумма отмен.

Поле isPrintSuccess (опциональное) Возвращает null в случае если был передан флаг "printCheque": false. Возвращает true если чек был успешно распечатан и false если произошла ошибка при печати.

Ответ с прочей информацией OtherInfoResponse

{
    cash_in_shift: BigDecimal,
    usd_cash_in_shift: BigDecimal?,
    eur_cash_in_shift: BigDecimal?,
    rub_cash_in_shift: BigDecimal?,
    messageDetail: String,
    messageTitle: String,
    registerNumberSKO: String,
    resultCode: Int,
    type: String,
    last_number_document: Long,
    version_code_apk: Int,
    shift_status: Boolean,
    list_payment_method: [CashlessType],
    date_open_shift: String,
    date_last_close_shift: String?,
    number_shift: Long,
    count_un_send_documents: Int
}

Поле cash_in_shift наличные BYN в кассе.

Поле usd_cash_in_shift (опциональное) наличные USD в кассе.

Поле eur_cash_in_shift (опциональное) наличные EUR в кассе.

Поле rub_cash_in_shift (опциональное) наличные RUB в кассе.

Поле messageDetail описание результата. Например "Токен авторизован" или "Неверный пароль доступа к токену".

Поле messageTitle оглавление результата. Например "Успех" или "Ошибка".

Поле registerNumberSKO регистрационный номер ско

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

Поле type тип операции переданный в INTENT_OPERATION_TYPE.

Поле last_number_document номер последнего документа. 0 если нет документов за смену.

Поле version_code_apk номер версии ПК.

Поле shift_status - true - если открыта. false - если открыта более 24 часов.

Поле list_payment_method список доступных способов безналичного платежа.

Поле date_open_shift дата открытия смены. ISO8601 yyyy-MM-dd'T'HH:mm:ssZ.

Поле date_last_close_shift (опциональное) дата закрытия предыдущей смены. ISO8601 yyyy-MM-dd'T'HH:mm:ssZ.

Поле number_shift номер текущей смены.

Поле count_un_send_documents кол-во неотправленных документов в СКО.

Ответ аннулирования RollBackResponse

{
    dateTime: String,
    messageDetail: String,
    messageTitle: String,
    numberCheck: String,
    registerNumberSKO: String,
    resultCode: Long,
    uid: String,
    type: String,
    numberCheckRollback: String,
    uidDocumentRollback : String,
    isPrintSuccess: Boolean?
}

Поле dateTime (опциональное) в формате ISO8601 yyyy-MM-dd'T'HH:mm:ssZ. Время и дата совершения фискальной операции. Например 2022-01-21T12:00:00+03:00.

Поле messageDetail описание результата. Например "Токен авторизован" или "Неверный пароль доступа к токену".

Поле messageTitle оглавление результата. Например "Успех" или "Ошибка".

Поле numberCheck (опциональное) номер чека, после успешной фискализации.

Поле registerNumberSKO (отсутсвует для ошибок) регистрационный номер ско

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

Поле uid уникальный идентификатор фискальной операции.

Поле type тип операции переданный в INTENT_OPERATION_TYPE.

Поле numberCheckRollback номер чека аннулированной операции.

Поле uidDocumentRollback уникальный идентификатор аннулированной операции.

Поле isPrintSuccess (опциональное) Возвращает null в случае если был передан флаг "printCheque": false. Возвращает true если чек был успешно распечатан и false если произошла ошибка при печати.

Ответ с чеками ChequesResponse

{
    "messageDetail": String,
    "messageTitle": String,
    "resultCode": Long,
    "type": String,
    "cheques": [ChequeResponse]
}

Поле messageDetail описание результата. Например "Токен авторизован" или "Неверный пароль доступа к токену".

Поле messageTitle оглавление результата. Например "Успех" или "Ошибка".

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

Поле type тип операции переданный в INTENT_OPERATION_TYPE.

Поле cheques массив чеков в результате типа ChequeResponse

Возможные коды ответа resultCode

  • 200 Успех
  • 399 Общая ошибка
    • Если у ошибки нет своего кода.
  • 400 Необходимо открыть смену
  • 401 Требуется авторизация
  • 402 Сумма должна быть >= 0.01
  • 403 Получена недействительная цена товарной позиции
    • При превышении лимита цены 99999999999.99
    • При отрицательной цене
  • 404 Получен отрицательный итог
    • Может возникнуть если скидка на чек превышает под итог
  • 405 Ошибка токена
  • 406 Смена уже открыта
  • 407 Срок действия сертификата истек
    • может возникнуть если время на устройстве синхронизировано не корректно
    • может возникнуть если сертификат истек
  • 408 Смена уже закрыта
  • 409 Касса заблокирована или не инициализирована
  • 410 Невозможно выполнить продажу пока присутствует незавершенная продажа.
    • Может возникнуть если в продаже были добавлены безналичные платежи и/или платежи другими способами и произошла ошибка фискализации.
    • Завершить такой платеж можно только вручную зайдя в ПК.
  • 411 Нет чека для аннулирования
  • 412 Смена уже открыта более 24 часов
  • 413 Неверное тело запроса
  • 414 Сумма должна быть <= 99999999999.99
  • 415 Количество должно быть >= 0.001
  • 416 Количество должно быть <= 9999.999
  • 418 Для совершения операции требуется RRN
    • Для совершения операции возврата необходимо передать RRN банковской транзакции.
  • 420 Cумма нал + безнал превышает итого к возврату
  • 421 Сумма безнал + др. способы превышает итого к оплате
  • 422 Переданная сумма меньше чем итого к оплате
    • Может возникнуть если нал + безнал + др. способы меньше чем итого к оплате
  • 423 Переданный терминал выключен в настройках терминала
  • 424 Не выбран терминал для безналичной оплаты
  • 425 Невозможно провести операцию, в кассе недостаточно средств
    • При изъятии суммы больше чем есть в кассе
    • При совершении возврата и аннулировании при недостаточном количестве средств
    • При попытке закрыть смену без изъятия всех денег
  • 426 Токен не подключен
  • 427 Чек не найден
    • Может возникнуть если чек для печати или для отправки на e-mail не найден
  • 430 Неизвестный тип операции
    • Передан неизвестный INTENT_OPERATION_TYPE
  • 432 Передана некорректная скидка
  • 433 Сумма не должна быть отрицательной
  • 434 Количество товарных позиций не должно превышать 150
  • 435 Требуется передать имя кассира
  • 450 Ошибка принтера: принтер не подключен
  • 451 Ошибка принтера: низкий заряд
  • 452 Ошибка принтера: нет бумаги
  • 453 Ошибка принтера
    • Общая ошибка для принтера
  • 454 Не поддерживаемый формат для печати
  • 488 Один или несколько чеков не найдены
    • Может возникнуть при запросе на получение или удаление чеков
  • 489 В чеке присутствует незавершенная оплата
    • Может возникнуть при попытке удалить чек у которого есть незавершенная оплата, например сохранена оплата картой
  • 490 В запросе присутствуют UUID дубликаты
    • Может возникнуть при отправке чеков с не уникальными UUID
  • 491 В запросе присутствует не уникальный UUID который уже был сохранен
    • Может возникнуть при отправке чека с UUID который уже был сохранен в кассе
  • 494 Необходимо разблокировать экран для обработки внешнего запроса
  • 495 Приложение должно быть в фокусе для обработки внешних запросов
  • 499 Операция уже выполняется