Введение
Данный документ является руководством программиста для интеграции с программной кассой (ПК
).
Вся интеракция с ПК происходит без взаимодейтсвия с пользователем. Исключением является:
- Ожидание прикладывания карты пользователем.
Способы взаимодействия
- Android
Intent
- Для взаимодействия с ПК по интентам необходимо создать Intent передав в него тип action -
by.ikassa.smartx.android.TRANSACTION
. Пример:val intent = Intent("by.ikassa.smartx.android.TRANSACTION")
- Для взаимодействия с ПК по интентам необходимо создать Intent передав в него тип action -
- 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")
.
- Проверить resultCode на ошибку:
- 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 -
Аванс
- 0 -
Код товара
- Непосредственно сам код товарной позиции
Тип 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
}
Код продукта
type
- Тип кодаvalue
- значение кода
Тип 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
}
rate
- BigDecimal- Ставка НДС
- от 0 до 25
value
- BigDecimal- Сумма НДС
Тип ChequeRequest
{
"info": ChequeInfo,
"currency": Currency = "BYN",
"items": [SaleItemRequest],
"chequeDiscount": Discount?,
"isNotEditable": Boolean = false,
}
info
- ChequeInfo- нефискальная информация о чеке
currency
- Не обязательное поле. Стандартное значение BYN.- Валюта чека. Типы валют.
items
- массив SaleItemRequestchequeDiscount
- 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
- массив SaleItemResponsecurrency
- Валюта чека. Типы валют.
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.01403
Получена недействительная цена товарной позиции- При превышении лимита цены 99999999999.99
- При отрицательной цене
404
Получен отрицательный итог- Может возникнуть если скидка на чек превышает под итог
405
Ошибка токена406
Смена уже открыта407
Срок действия сертификата истек- может возникнуть если время на устройстве синхронизировано не корректно
- может возникнуть если сертификат истек
408
Смена уже закрыта409
Касса заблокирована или не инициализирована410
Невозможно выполнить продажу пока присутствует незавершенная продажа.- Может возникнуть если в продаже были добавлены безналичные платежи и/или платежи другими способами и произошла ошибка фискализации.
- Завершить такой платеж можно только вручную зайдя в ПК.
411
Нет чека для аннулирования412
Смена уже открыта более 24 часов413
Неверное тело запроса414
Сумма должна быть <= 99999999999.99415
Количество должно быть >= 0.001416
Количество должно быть <= 9999.999418
Для совершения операции требуется 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
Операция уже выполняется