Введение
Данный документ является руководством программиста для интеграции с программной кассой (ПК
).
Вся интеракция с ПК происходит без взаимодейтсвия с пользователем. Исключением является:
- Ожидание прикладывания карты пользователем.
Способы взаимодействия
- 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)
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")
.
- Проверить 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:
{
"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
- Список товаров типа MoneyBackIte
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 -
Аванс
- 0 -
Код товара
- Непосредственно сам код товарной позиции.
- В случае, если
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
}
Код продукта
type
- Тип кодаvalue
- значение кода
Тип 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
}
rate
- BigDecimal- Ставка НДС
- от 0 до 25
value
- BigDecimal- Сумма НДС
Тип ChequeRequest
{
"info": ChequeInfo,
"currency": Currency = "BYN",
"items": [SaleItemRequest],
"chequeDiscount": Discount?,
"chequeIncrease": Increase?,
"isNotEditable": Boolean = false,
"tpTaxNumber": String?
}
info
- ChequeInfo- нефискальная информация о чеке
currency
- Не обязательное поле. Стандартное значение BYN.- Валюта чека. Типы валют.
items
- массив SaleItemRequestchequeDiscount
- 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
- массив 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 в виде строк
Тип 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.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
Операция уже выполняется
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
.
- добавлено поле