Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Введение

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

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

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

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

  • 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)

Intent "Включить режим сервера"

  • добавлен тип операции #ТипОперации# = START_SERVER

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

В качестве ответа ПК возвращает обратно 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:

{
  "messageDetail": "Успешно распечатали X-отчет",
  "messageTitle": "Успех",
  "registerNumberSKO": "133030187",
  "resultCode": 200,
  "type": "Z_REPORT",
  "dateOpenShift": "2024-11-01T19:39:08+03:00",
  "amountDocument": "3",
  "numberFirstCheck": "4139",
  "numberLastCheck": "4144",
  "amountCurrency": "1",
  "amountOfSale": "3",
  "sumSalePerShift": "112.35",
  "sumSaleCardPerShift": "0",
  "sumSaleOtherPerShift": "0",
  "sumSaleCashPerShift": "112.35",
  "amountMoneyBackPerShift": "1",
  "sumMoneyBackPerShift": "34.5",
  "sumMoneyBackCashPerShift": "34.5",
  "sumMoneyBackCardPerShift": "0",
  "sumMoneyBackOtherPerShift": "0",
  "amountDepositPerShift": "2",
  "sumDepositPerShift": "400",
  "amountWithdrawPerShift": "1",
  "sumWithdrawPerShift": "319.22",
  "amountRollbackPerShift": "1",
  "sumRollbackPerShift": "41.05",
  "sumRollBackCashPerShift": "41.05",
  "sumRollbackCardPerShift": "0",
  "sumRollbackOtherPerShift": "0",
  "cardHolderWithdrawSum": "117.58",
  "cardHolderWithdrawCount": "1",
  "saleThirdPartySum": "112.35",
  "saleThirdPartyCount": "3",
  "rollbackThirdPartySum": "41.05",
  "rollbackThirdPartyCount": "1",
  "saleSiSum": "91.5",
  "saleSiCount": "5",
  "saleUkzSum": "0",
  "saleUkzCount": "0",
  "moneyBackSiSum": "34.5",
  "moneyBackSiCount": "2",
  "moneyBackUkzSum": "0",
  "moneyBackUkzCount": "0",
  "rollbackSiSum": "34.5",
  "rollbackSiCount": "2",
  "rollbackUkzSum": "0",
  "rollbackUkzCount": "0",
  "isPrintSuccess": true
}

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

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

Ответ 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",
  "prefix": [{"Text": {"text": "тексттекст"}}, {"QrCode": {"qrCode" : "BASE64"}}],
  "suffix": [{"Text": {"text": "тексттекст"}}, {"QrCode": {"qrCode" : "BASE64"}}],
  "operationId": "123"
}

Ответ BaseResponse:

{
  "dateTime": "2024-11-01T19:40:21+03:00",
  "messageDetail": "Успешное внесение",
  "messageTitle": "Успех",
  "numberCheck": "4138",
  "registerNumberSKO": "133030187",
  "resultCode": 200,
  "type": "DEPOSIT",
  "uid": "314FEAAAE1A0CD9F07EDE12B",
  "isPrintSuccess": true,
  "sum": "200"
}

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

Запрос:

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

Ответ BaseResponse:

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

Изъятие

Параметры

Header:

INTENT_OPERATION_TYPE - WITHDRAW

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

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

Примеры

Успех

Запрос:

{
  "cashier": "Кассир",
  "sum": "10",
  "prefix": [{"Text": {"text": "тексттекст"}}, {"QrCode": {"qrCode" : "BASE64"}}],
  "suffix": [{"Text": {"text": "тексттекст"}}, {"QrCode": {"qrCode" : "BASE64"}}],
  "operationId": "123"
}

Ответ 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 - CH_WITHDRAW

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

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

  • Для операции Выдача CH_WITHDRAW передача валюты недоступна.
  • Сумма выдачи: Значение не должно превышать 5 базовых величин.

Примеры

Успех

Запрос:

{
  "cashier": "Кассир",
  "sum": "10",
  "prefix": [{"Text": {"text": "тексттекст"}}, {"QrCode": {"qrCode" : "BASE64"}}],
  "suffix": [{"Text": {"text": "тексттекст"}}, {"QrCode": {"qrCode" : "BASE64"}}],
  "operationId": "123"
}

Ответ BaseResponse:

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

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

Запрос:

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

Ответ BaseResponse:

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

Продажа

Параметры

Header:

INTENT_OPERATION_TYPE - SALE

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

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

Примеры

Успех

Запрос:

{
    "cashier": "Кассир",
    "itemList": [
        {
            "nameTitle": "Товар 1",
            "codeNumber": "1",
            "typeCode": "0",
            "price": "4",
            "amount": "1"
        },
        {
            "nameTitle": "Товар 2",
            "codeNumber": "234002634987",
            "typeCode": "1",
            "markings": [
                {
                  "si": "midom0im20m03223d-2-d"
                },
                {
                  "ukz": "2321987121CAC"
                }
          ],
            ],
            "price": "1",
            "amount": "9999.99",
            "isPercentDiscount": false,
            "discount": "9999.98",
            "isPercentIncrease": true,
            "increase": "50",
            "section":{
              "code": 123,
              "name": "бакалея"
            }
        },
        {
            "codeNumber": "20",
            "price": "4",
            "amount": "1",
            "isPercentDiscount": true,
            "discount": "1"
        }
    ],
    "cash": "15",
    "cashless": "0",
    "certificate": "0",
    "isPercentIncrease": false,
    "chequeIncrease": "10",
    "isPercentDiscount": true,
    "chequeDiscount": "10",
    "tpTaxNumber": 193141246,
    "printCheque": false,
    "prefix": [{"Text": {"text": "тексттекст"}}, {"QrCode": {"qrCode" : "BASE64"}}], 
    "suffix": [{"Text": {"text": "тексттекст"}}, {"QrCode": {"qrCode" : "BASE64"}}],
    "operationId": "123"
}

Ответ 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",
    "isPrintSuccess": true,
    "uuid": "j1923-123mi1-123j19"
    "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": "133030187",
  "resultCode": 200,
  "type": "X_REPORT",
  "dateOpenShift": "2024-11-01T19:39:08+03:00",
  "amountDocument": "3",
  "bynIncome": "26343.1",
  "rubIncome": "3",
  "usdIncome": "2",
  "eurIncome": "2",
  "bynCashIn": "133.63",
  "numberFirstCheck": "4139",
  "numberLastCheck": "4144",
  "amountCurrency": "1",
  "amountOfSale": "3",
  "sumSalePerShift": "112.35",
  "sumSaleCardPerShift": "0",
  "sumSaleOtherPerShift": "0",
  "sumSaleCashPerShift": "112.35",
  "amountMoneyBackPerShift": "1",
  "sumMoneyBackPerShift": "34.5",
  "sumMoneyBackCashPerShift": "34.5",
  "sumMoneyBackCardPerShift": "0",
  "sumMoneyBackOtherPerShift": "0",
  "amountDepositPerShift": "2",
  "sumDepositPerShift": "400",
  "amountWithdrawPerShift": "0",
  "sumWithdrawPerShift": "0",
  "amountRollbackPerShift": "1",
  "sumRollbackPerShift": "41.05",
  "sumRollBackCashPerShift": "41.05",
  "sumRollbackCardPerShift": "0",
  "sumRollbackOtherPerShift": "0",
  "cardHolderWithdrawSum": "117.58",
  "cardHolderWithdrawCount": "1",
  "saleThirdPartySum": "112.35",
  "saleThirdPartyCount": "3",
  "rollbackThirdPartySum": "41.05",
  "rollbackThirdPartyCount": "1",
  "saleSiSum": "91.5",
  "saleSiCount": "5",
  "saleUkzSum": "0",
  "saleUkzCount": "0",
  "moneyBackSiSum": "34.5",
  "moneyBackSiCount": "2",
  "moneyBackUkzSum": "0",
  "moneyBackUkzCount": "0",
  "rollbackSiSum": "34.5",
  "rollbackSiCount": "2",
  "rollbackUkzSum": "0",
  "rollbackUkzCount": "0",
  "isPrintSuccess": true
}

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

Запрос:

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

Ответ BaseResponse:

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

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

Параметры

Header:

INTENT_OPERATION_TYPE - ROLLBACK_NUMBER_CHECK

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

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

Примеры

Успех

Запрос:

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

Ответ RollbackResponse:

{
  "dateTime": "2024-11-01T20:19:29+03:00",
  "messageDetail": "Успешное аннулирование чека №4144",
  "messageTitle": "Успех",
  "numberCheck": "4145",
  "registerNumberSKO": "133030187",
  "resultCode": 200,
  "uid": "A4FF71A9A7DB79C607EDE12B",
  "type": "ROLLBACK_NUMBER_CHECK",
  "numberCheckRollback": "4144",
  "uidDocumentRollback": "2C7794F09E5DBD7E07EDE12B"
}

Ошибка (Переданный номер чека не является последней продажнй в смене)

Запрос:

{
  "messageDetail": "Переданный номер чека не является последней продажнй в смене",
  "messageTitle": "Ошибка",
  "resultCode": 420,
  "type": "ROLLBACK_NUMBER_CHECK"
}

Ответ BaseResponse:

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

Возврат

Параметры

Header:

INTENT_OPERATION_TYPE - MONEY_BACK

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

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

Примеры

Успех

Запрос:

{
  "cashier": "Кассир",
  "itemList": [
    {
      "nameTitle": "Товар 2",
      "codeNumber": "234002634987",
      "typeCode": "1",
      "markings": [
        {
          "si": "midom0im20m03223d-2-d"
        },
        {
          "ukz": "2321987121CAC"
        }
      ]
    },
      "price": "1",
      "amount": "9999.99",
      "isPercentDiscount": false,
      "discount": "9999.98",
      "isPercentIncrease": true,
      "increase": "50",
      "section": {
        "code": 123,
        "name": "бакалея"
      }
    ],
  "cashless": "0",
  "cash": "1",
  "other": "0", 
  "prefix": [{"Text": {"text": "тексттекст"}}, {"QrCode": {"qrCode" : "BASE64"}}],
  "suffix": [{"Text": {"text": "тексттекст"}}, {"QrCode": {"qrCode" : "BASE64"}}],
  "operationId": "123"
}

Ответ 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,
  "coreVersion": "2.0.0 (Smart X)",
  "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 - GET_WEIGHT

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

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

Примеры

Успех

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

Ответ Ответ с результатами веса:

{
    "weight": "0.374"
}

Ошибка

{
"messageDetail": "Не удалось получить вес с весов",
"messageTitle": "Ошибка",
"resultCode": 399,
"type": "GET_WEIGHT"
}

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

Параметры

Header:

INTENT_OPERATION_TYPE - ADD_CHEQUES

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

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

Примеры

Успех

Запрос:

[
  {
    "info": {
      "uuid": "9aa03f0c-d77c-40ae-8f4d-236c432054a8",
      "name": "Чек 1",
      "chequeType": "Postponed",
      "note": "Cheque2",
      "number": "111IKASSA"
    },
    "currency": "BYN",
    "chequeDiscount": {
      "isPercent": true,
      "value": "5"
    },
    "chequeIncrease": {
      "isPercent": true,
      "value": "5"
    },
    "tpTaxNumber": "123456789",
    "items": [
      {
        "price": "100",
        "name": "Tovar",
        "quantity": "1",
        "code": {
          "type": "1",
          "value": "112321312310"
        },
        "discount": {
          "isPercent": true,
          "value": "10"
        },
        "increase": {
          "isPercent": true,
          "value": "5"
        },
        "section": {
          "code": 111,
          "name": "имя секции"
        },
        "markings": [
          {
            "si": "midom0im20m03223d-2-d"
          },
          {
            "ukz": "2321987121CAC"
          }
        ],
        "taxRate": "tax10"
      }
    ]
  }
]

Ответ 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",
    "cashier": "Админ"
}

Ответ 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"
}

Получение фискализированного чека по UUID

Параметры

Header:

INTENT_OPERATION_TYPE - GET_DOCS_BY_UUID

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

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

Примеры

Успех

Запрос:

{
    "uuid": "323.156.25123459"
}

Ответ BaseResponse:

{
  "messageTitle": "Успех",
  "resultCode": 200,
  "type": "GET_DOCS_BY_UUID",
  "registerNumberSKO": "111600670",
  "documents": [
    {
      "dateTime": "2025-07-04T09:40:26+03:00",
      "messageDetail": "Успешная оплата",
      "messageTitle": "Успех",
      "numberCheck": "3991",
      "registerNumberSKO": "111600670",
      "resultCode": 200,
      "rrn": "040700507405,040700507343",
      "type": "SALE",
      "uid": "ADAEB851CE0161F306A6E41E",
      "total": "68",
      "change": "0",
      "isPrintSuccess": true,
      "metaInfo": {
        "bankName": "",
        "terminalId": "11000082",
        "merchantId": ""
      },
      "uuid": "323.156.25123459",
      "payments": [
        {
          "type": "Cash",
          "sum": "65.63"
        },
        {
          "type": "Other",
          "sum": "2.33"
        },
        {
          "type": "Cashless",
          "sum": "0.03",
          "ref": "040700507405"
        },
        {
          "type": "Cashless",
          "sum": "0.01",
          "ref": "040700507343"
        }
      ]
    }
  ]
}

Получение статуса операции

Параметры

Header:

INTENT_OPERATION_TYPE - OPERATION_ID

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

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

Примеры

Успех

Запрос:

{
  "operationId": "123"
}

Ответ OperationResponse:

{
  "operationId": "123",
  "uid": "32B1E3361C6573F807CF1091",
  "uuid": "bb074ac8-3661-4c56-818e-26686d5a7ec3",
  "header": {
    "cashier": "Администратор",
    "chequeNumber": 3192,
    "date": "2022-07-05T21:57:17+03:00",
    "currency": "BYN"
  },
  "total": "2.15",
  "payments": ["Cash"],
  "operationType": "Sale",
  "isSucceed": true
}

Повторая попытка фискализации

Параметры

Header:

INTENT_OPERATION_TYPE - FISCAL_UNCOMPLETED

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

Запрос позволяет:

  • совершить повторную попытку фискализации последнего чека при ошибке записи операции в СКО
  • рекомендуется применять для операция содержащих безналичные способы оплаты

Примеры

Успех

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

Запрос:

null

Ответ ChequesResponse:

{
    "messageDetail": "Неверный GTIN '232002234987'",
    "messageTitle": "Ошибка",
    "resultCode": 399,
    "type": "FISCAL_UNCOMPLETED"
}

Типы данных

Тип 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?,
    
    "isPercentIncrease": Boolean = false,
    "chequeIncrease": BigDecimal?,

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

    "printCheque": Boolean = true?,
    "prefix": [Printable]?,
    "suffix": [Printable]?,
    "operationId": String?,
    "printQrCheque": Boolean = false?
}
  • cashier
    • Имя кассира.
      • Хотя бы 1 символ. Все что больше 20 символов, отбрасывается.
  • itemList
    • Список товаров типа SaleItem
  • currency - Не обязательное поле. Стандартное значение BYN.
  • cash
    • Сумма наличными
  • cashless
    • Сумма безналичными
  • certificate
    • Сумма другими способами
  • oplati
    • Сумма способом QR
  • isPercentDiscount - Необязательное поле. Стандартное значение = false.
    • Показатель типа скидки.
      • Если true - добавляет скидку в процентах.
      • Если false - добавляет ценовую скидку.
  • chequeDiscount - Необязательное поле.
    • Процентная
      • Максимальное значение 100. 2 Знака после запятой.
    • Ценовая
      • Максимальное значение 99999999999.99.
  • isPercentIncrease - Необязательное поле. Стандартное значение = false.
    • Показатель типа надбавки.
      • Если true - добавляет надбавку в процентах.
      • Если false - добавляет ценовую надбавку.
  • chequeIncrease - Необязательное поле.
    • Процентная
      • Максимальное значение 100. 2 Знака после запятой.
    • Ценовая
      • Максимальное значение 99999999999.99.
  • payment_method CashlessType
    • Необязательное поле если cashless = 0.
    • Необязательное поле если в настройках включен только один способ оплаты.
  • bank_package_name
    • Передается только в случае если payment_method = PAY_IKASSA
    • Необязательный в случае если есть только один способ оплаты через iKassa Pay
  • merchantId - Необязательное поле.
    • Номер торговца
  • tpTaxNumber - Необязательное поле. УНП третьего лица, в пользу которого оформляется док-т продажи. Применяется при приеме платежей в адрес третьих лиц платежными агрегаторами.
    • 9 десятичных цифр
  • printCheque - Необязательное поле. Стандартное значение = true.
    • Флаг определяющий будет ли печататься чек.
  • prefix - Необязательное поле. Printable
    • адрес торгового объекта (магазина), объекта выполнения работ, объекта оказания услуг
  • suffix - Необязательное поле. Printable
    • Иная необязательная информация, необходимая субъекту хозяйствования информация, не являющаяся обязательной
  • operationId - Идентификатор операции.
  • printQrCheque - Необязательное поле. Стандартное значение = false.
    • печать короткого чека в виде QR со ссылкой на электронный документ.

Тип SaleItem

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

Тип Sum

{
    "cashier": String,
    "sum": BigDecimal,
    "currency": Currency = "BYN",
    "printCheque": Boolean = true,
    "operationId": String?,
    "prefix": [Printable]?,
    "suffix": [Printable]?,
    "terminalType": CashlessType?
}
  • cashier
    • Имя кассира.
      • Хотя бы 1 символ. Все что больше 20 символов, отбрасывается.
  • sum - BigDecimal
    • Передаваемая сумма для операции.
  • currency - Не обязательное поле. Стандартное значение BYN.
    • Для операции Выдача CH_WITHDRAW изменение валюты с BYN недоступно.
    • Валюта для проведения операции. Типы валют.
  • printCheque - Необязательное поле. Стандартное значение = true.
    • Флаг определяющий будет ли печататься чек.
  • operationId - Идентификатор операции.
  • prefix - Необязательное поле. Printable
    • адрес торгового объекта (магазина), объекта выполнения работ, объекта оказания услуг
  • suffix - Необязательное поле. Printable
    • Иная необязательная информация, необходимая субъекту хозяйствования информация, не являющаяся обязательной
  • terminalType - CashlessType
    • Для операции Выдача CH_WITHDRAW
      • доступные способы INTERNAL(для устройств с поддержкой функции) и EXTERNAL

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

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

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

Тип RollBack

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

Тип MoneyBack

{
    "cashier": String,
    
    "itemList": [MoneyBackItem],
   
    "cash": BigDecimal,
    "cashless": BigDecimal,
    "oplati": BigDecimal,
    "other": BigDecimal,
    
    "rrn": String?,
    "transactionId": String?,
    "payment_method": CashlessType?,
    "bank_package_name": String?,
    "printCheque": Boolean = true,
    "prefix": [Printable]?,
    "suffix": [Printable]?,
    "operationId": String?
}
  • cashier
    • Имя кассира.
      • Хотя бы 1 символ. Все что больше 20 символов, отбрасывается.
  • itemList
  • cash
    • Сумма возврата наличными
  • cashless
    • Сумма возврата безналичными
  • other
    • Сумма возврата другими способами
  • oplati
    • Сумма возврата Оплати
  • rrn - Необязательное поле.
    • Номер банковского чека для совершения возврата.
    • Необязательный если только наличные.
    • Необязательный для некоторых типов терминала.
  • transactionId - Необязательное поле.
    • Номер операции с QR кодом.
  • payment_method CashlessType
    • Необязательное поле если cashless = 0.
    • Необязательное поле если в настройках включен только один способ оплаты.
  • bank_package_name
    • Передается только в случае если payment_method = PAY_IKASSA
    • Необязательный в случае если есть только один способ оплаты через iKassa Pay
  • merchantId - Необязательное поле.
    • Номер торговца
  • printCheque - Необязательное поле. Стандартное значение = true.
    • Флаг определяющий будет ли печататься чек.
  • prefix - Необязательное поле. Printable
    • адрес торгового объекта (магазина), объекта выполнения работ, объекта оказания услуг
  • suffix - Необязательное поле. Printable
    • Иная необязательная информация, необходимая субъекту хозяйствования информация, не являющаяся обязательной
  • operationId - Идентификатор операции.

Тип MoneyBackItem

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

Тип кода

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

Код товара

  • Непосредственно сам код товарной позиции.
  • В случае, если typeCode указан как GTIN/EAN, максимальная длина значения равна 14 символам.
  • Для остальных случаев ограничение в 13 символов.

Тип Section

{
    "code": Int, 
    "name": "String"
}
  • code - Код/Идентификатор секции.
    • Принимает значение От 1 до 255
    • Если было передано значение 0 - секция будет проигнорирована.
  • name
    • Наименование секции для отображения на чеке.

Тип Markings

[
{"si": "value"?},
{"ukz": "value"?},
{"unknown": "value"?}
]
  • si - маркировка СИ
  • ukz - маркировка УКЗ
  • unknown - неизвестный тип маркировки

Если у товара указан признак любой из маркировки то:

  • Тип typeCode должен быть указан как GTIN/EAN.
  • Кол-во ед. продаваемого товара должно быть равно 1 шт.
  • Невозможно передать более одного СИ или УКЗ
  • Максимальная длинна маркировки: 256 для СИ и 64 для УКЗ
  • Если передано СИ или УКЗ и Неизвестный тип маркировки, значение последнего будет помещено в поле УКЗ или СИ соответственно
  • Если передано 2 Неизвестных типа маркировки, значения будут распределены следующим обрзаом:
    • Если оба значения меньше или равны по длине 64 символам, то первое сканирование кладется в СИ, второе в УКЗ
    • Если одно из сканирований превышает длину в 64 символа, то оно помещается в СИ, а второе в УКЗ

Тип markingKindToScan

  • Поддерживаемые значения:
    • si - маркировка СИ
    • ukz - маркировка УКЗ
    • siukz - маркировка УКЗ и СИ
    • unknown - неизвестный тип маркировки

Если у товара указан признак любой из маркировки то:

  • Тип typeCode должен быть указан как GTIN/EAN.
  • Кол-во ед. продаваемого товара должно быть равно 1 шт.
  • Невозможно передать более одного СИ, УКЗ или unknown
  • Максимальная длинна маркировки: 256 для СИ и 64 для УКЗ
  • Если передано siukz или unknown на кассе будет предложено выбрать тип маркировки после сканирования
  • Если при сканировании на кассе будут указаны 2 Неизвестных типа маркировки, значения будут распределены следующим обрзаом:
    • Если оба значения меньше или равны по длине 64 символам, то первое сканирование кладется в СИ, второе в УКЗ
    • Если одно из сканирований превышает длину в 64 символа, то оно помещается в СИ, а второе в УКЗ

Тип 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.
    • печать последнего фискального документа

Тип Printable

[
        {
            "Text": {
                "text": String?
            }
        }
        {
            "QrCode": {
                "qrCode": String?
            }
        }
]
  • text
    • Текстовое значение для печати на чеке.
  • qrCode
    • Контент qrCode в BASE64.

Тип 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,
    "note": String?,
    "number": String?
}

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

  • chequeType - Тип чека
  • uuid - уникальный идентификатор чека. Необязательное поле.
    • необходим для идентификации чеков, их сохранения, удаления и оплаты
    • уникален в рамках сохраненных в приложении предчеков
  • name - отображаемое в приложении имя чека.
    • ограничение 100 символов
    • не отображается на печатном чеке
  • note - примечание. Необязательное поле
    • ограничение 200 символов
    • не отображается на печатном чеке
  • number - номер чека. Необязательное поле
    • поддерживает буквы и цифры, ограничение 20 символов
    • не отображается на печатном чеке

Типы чеков ChequeType

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

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

Пример:

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

Тип Code

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

Код продукта

Тип Discount/Increase

{
    "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?,
    "chequeIncrease": Increase?,
    "isNotEditable": Boolean = false,
    "tpTaxNumber": String?

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

Тип SaleItemRequest

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

Тип PaymentChequeResponse

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

Тип 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 в виде строк

Тип UUID

{
    "uuid": String
}
  • uuid - уникальный идентификатор предчека

Типы ответов

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

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

Поле 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 (опциональное) уникальный идентификатор фискальной операции.

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

Поле 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,
    bynIncome: String,
    rubIncome: String,
    usdIncome: String,
    eurIncome: String,
    bynCashIn: String?
    rubCashIn: String?
    usdCashIn: String?
    eurCashIn: String?
    numberFirstCheck: String,
    numberLastCheck: String,
    amountCurrency: String,
    amountOfSale: String,
    sumSalePerShift: String,
    sumSaleCardPerShift: String,
    sumSaleOtherPerShift: String,
    sumSaleCashPerShift: String,
    amountMoneyBackPerShift: String,
    sumMoneyBackPerShift: String,
    sumMoneyBackCashPerShift: String,
    sumMoneyBackCardPerShift: String,
    sumMoneyBackOtherPerShift: String,
    amountDepositPerShift: String,
    sumDepositPerShift: String,
    amountWithdrawPerShift: String,
    sumWithdrawPerShift: String,
    amountRollbackPerShift: String,
    sumRollbackPerShift: String,
    sumRollBackCashPerShift: String,
    sumRollbackCardPerShift: String,
    sumRollbackOtherPerShift: String,
    cardHolderWithdrawSum: String,
    cardHolderWithdrawCount: String,
    saleThirdPartySum: String,
    saleThirdPartyCount: String,
    rollbackThirdPartySum: String,
    rollbackThirdPartyCount: String,
    saleSiSum: String,
    saleSiCount: String,
    saleUkzSum: String,
    saleUkzCount: String,
    moneyBackSiSum: String,
    moneyBackSiCount: String,
    moneyBackUkzSum: String,
    moneyBackUkzCount: String,
    rollbackSiSum: String,
    rollbackSiCount: String,
    rollbackUkzSum: String,
    rollbackUkzCount: 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 количество документов.

Поля bynIncome / rubIncome / usdIncome / eurIncome накопленный оборот по валюте

Поля bynCashIn /rubCashIn / usdCashIn / eurCashIn наличные в кассе по валюте (отсутствует для Z-отчета)

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

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

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

Поле amountOfSale количество продаж за смену.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Поле cardHolderWithdrawSum сумма выдачи.

Поле cardHolderWithdrawCount количество выдачи.

Поле saleThirdPartySum сумма прода в пользу 3-х лиц.

Поле saleThirdPartyCount количество продаж в пользу 3-х лиц.

Поле rollbackThirdPartySum сумма аннулирований наличными в пользу 3-х лиц.

Поле rollbackThirdPartyCount количество аннулирований наличными в пользу 3-х лиц.

Поле saleSiSum сумма продажи СИ.

Поле saleSiCount количество проданных товаров СИ.

Поле saleUkzSum сумма продажи УКЗ.

Поле saleUkzCount количество проданных товаров УКЗ.

Поле moneyBackSiSum сумма возвратов СИ.

Поле moneyBackSiCount количество возвратов товаров СИ.

Поле moneyBackUkzSum сумма вовзратов УКЗ.

Поле moneyBackUkzCount количество возвратов товаров УКЗ.

Поле rollbackSiSum сумма аннулирований СИ.

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

Поле rollbackUkzSum сумма аннулирований УКЗ.

Поле rollbackUkzCount количество аннулирований товаров УКЗ.

Поле 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,
    coreVersion: String,
    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 номер версии интерфейса.

Поле coreVersion версия ПК.

Поле 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

Ответ с результатами веса WeightResponse

{
   "weight": String
}

Поле weight - значение веса

Возможные коды ответа 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 Операция уже выполняется

Changelog

1.11.2024 Версия 2.0.0

Изменения:

  • Операция SALE:

  • Изменение в структуре запроса:

    • добавлено поле isPercentIncrease,

    • добавлено поле chequeIncrease,

    • добавлено поле tpTaxNumber,

    • добавлено поле prefix,

    • добавлено поле suffix,

    • удалено поле phone_number,

    • удалено поле address,

    • удалено поле name_of_outlet,

    • удалено поле advertising_text,

    • Изменения в структуре полей типа itemList:

      • добавлено поле section:
        • добавлено поле code,
        • добавлено поле name.
      • добавлено поле isPercentIncrease,
      • добавлено поле increase,
      • добавлено поле markings.
  • Операция MONEY_BACK:

  • Изменение в структуре запроса:

    • добавлено поле prefix,
    • добавлено поле suffix,
    • добавлено поле itemList:
      • добавлено поле nameTitle,
      • добавлено поле typeCode,
      • добавлено поле section:
        • добавлено поле code,
        • добавлено поле name.
      • добавлено поле price,
      • добавлено поле amount,
      • добавлено поле isPercentDiscount,
      • добавлено поле discount,
      • добавлено поле isPercentIncrease,
      • добавлено поле increase,
      • добавлено поле taxRate,
      • добавлено поле markings.
    • удалено поле phone_number,
    • удалено поле address,
    • удалено поле name_of_outlet,
    • удалено поле advertising_text,
    • удалено поле typeCode,
    • удалено поле codeNumber.
  • Операция ADD_CHEQUES:

  • Изменение в структуре запроса:

    • добавлено поле chequeIncrease:

      • добавлено поле isPercent,
      • добавлено поле value,
      • добавлено поле sum.
    • добавлено поле tpTaxNumber.

    • Изменения в структуре полей типа items:

      • добавлено поле section:
        • добавлено поле code,
        • добавлено поле name.
      • добавлено поле increase:
        • добавлено поле isPercent,
        • добавлено поле value,
        • добавлено поле sum.
      • добавлено поле markings.
  • Операция CLOSE_SHIFT:

  • Изменение в структуре ответа:

    • добавлено поле amountOfSale,
    • добавлено поле sumSalePerShift,
    • добавлено поле sumSaleCardPerShift,
    • добавлено поле sumSaleOtherPerShift,
    • добавлено поле sumMoneyBackCashPerShift,
    • добавлено поле sumMoneyBackCardPerShift,
    • добавлено поле sumMoneyBackOtherPerShift,
    • добавлено поле cardHolderWithdrawSum,
    • добавлено поле cardHolderWithdrawCount,
    • добавлено поле saleThirdPartySum,
    • добавлено поле saleThirdPartyCount,
    • добавлено поле rollbackThirdPartySum,
    • добавлено поле rollbackThirdPartyCount,
    • добавлено поле saleSiSum,
    • добавлено поле saleSiCount,
    • добавлено поле saleUkzSum,
    • добавлено поле saleUkzCount,
    • добавлено поле moneyBackSiSum,
    • добавлено поле moneyBackSiCount,
    • добавлено поле moneyBackUkzSum,
    • добавлено поле moneyBackUkzCount,
    • добавлено поле rollbackSiSum,
    • добавлено поле rollbackSiCount,
    • добавлено поле rollbackUkzSum,
    • добавлено поле rollbackUkzCount.
    • удалено поле amountOfPaymentsDocInCurrencyOne,
    • удалено поле sumSalePaymentsPerShift,
    • удалено поле amountMoneyBackCashlessPerShift,
    • удалено поле sumMoneyBackCashlessPerShift,
    • удалено поле amountRollbackCashPerShift,
    • удалено поле amountRollbackCardPerShift,
    • удалено поле amountRollbackOtherPerShift,
    • удалено поле amountCorrectionPerShift,
    • удалено поле sumCorrectionPerShift,
    • удалено поле amountCancelPerShift,
    • удалено поле sumCancelPerShift.
  • Операция X_REPORT:

  • Изменение в структуре ответа:

    • добавлено поле amountOfSale,
    • добавлено поле sumSalePerShift,
    • добавлено поле sumSaleCardPerShift,
    • добавлено поле sumSaleOtherPerShift,
    • добавлено поле sumMoneyBackCashPerShift,
    • добавлено поле sumMoneyBackCardPerShift,
    • добавлено поле sumMoneyBackOtherPerShift,
    • добавлено поле cardHolderWithdrawSum,
    • добавлено поле cardHolderWithdrawCount,
    • добавлено поле saleThirdPartySum,
    • добавлено поле saleThirdPartyCount,
    • добавлено поле rollbackThirdPartySum,
    • добавлено поле rollbackThirdPartyCount,
    • добавлено поле saleSiSum,
    • добавлено поле saleSiCount,
    • добавлено поле saleUkzSum,
    • добавлено поле saleUkzCount,
    • добавлено поле moneyBackSiSum,
    • добавлено поле moneyBackSiCount,
    • добавлено поле moneyBackUkzSum,
    • добавлено поле moneyBackUkzCount,
    • добавлено поле rollbackSiSum,
    • добавлено поле rollbackSiCount,
    • добавлено поле rollbackUkzSum,
    • добавлено поле rollbackUkzCount.
    • удалено поле amountOfPaymentsDocInCurrencyOne,
    • удалено поле sumSalePaymentsPerShift,
    • удалено поле amountMoneyBackCashlessPerShift,
    • удалено поле sumMoneyBackCashlessPerShift,
    • удалено поле amountRollbackCashPerShift,
    • удалено поле amountRollbackCardPerShift,
    • удалено поле amountRollbackOtherPerShift,
    • удалено поле amountCorrectionPerShift,
    • удалено поле sumCorrectionPerShift,
    • удалено поле amountCancelPerShift,
    • удалено поле sumCancelPerShift.
  • Операция DEPOSIT:

  • Изменение в структуре запроса:

    • добавлено поле prefix,
    • добавлено поле suffix.
  • Операция WITHDRAW:

  • Изменение в структуре запроса:

    • добавлено поле prefix,
    • добавлено поле suffix.
  • Операция ROLLBACK_NUMBER_CHECK:

  • Изменение в структуре запроса:

    • добавлено поле prefix,
    • добавлено поле suffix.
  • Операция ROLLBACK_NUMBER_CHECK:

  • Изменение в структуре запроса:

    • добавлено поле prefix,
    • добавлено поле suffix.
  • Добавлена Операция CH_WITHDRAW:

    • добавлено поле cashier,
    • добавлено поле sum,
    • добавлено поле prefix,
    • добавлено поле suffix,
    • добавлено поле terminalType.