Ошибки

В случае возникновения ошибки, сервер отправит сообщение типом error и полем data следующего вида:

{
  "description": String,
  "name": String,
  "op_data": Any?
}

Для идентификации ошибки на клиентской стороне требуется ориентироваться на поле name, т.к. оно является гарантированно уникальным в рамках протокола.

Стоит так же отметить, что список данных ошибок может дополняться и требуется предусмотреть обработку неизвестных ошибок, а так же часть ошибок могут быть никогда не переданы на клиентскую часть и обработаны в рамках логики работы сервиса.

Так же, текстовое описание ошибок description может меняться/дополняться в рамках работы сервиса и, как следствие, полагаться на него как на уникальное значение запрещается.

Перечень ошибок, возможных в рамках протокола ошибок:

[errors]
AVQFR_INVALID_COMMAND = 'подана команда с неизвестным кодом или нарушен порядок подачи команд'
AVQFR_UNSUPPORTED_VERSION = 'версия протокола взаимодействия с устройством не поддерживается'
AVQFR_ACCESS_DENIED = 'неверно указана роль при авторизации (отличная от PIN, PUK или REG)'
AVQFR_BAD_SERIAL_NUMBER = 'неверно задан серийный номер устиойства'
AVQFR_BAD_DEVICE_MODE = 'команда не может быть выполнена в текущем режиме устройства'
AVQFR_INTERNAL_ERROR = 'внутренняя ошибка (возможная причина - аппаратный сбой)'
AVQFR_TIMEOUT = 'превышено время ожидания ответа при синхронизации времени'
AVQFR_BAD_FW_UPGRADE_KEY = 'отсутствует ключ обновления прошивки или его целостность нарушена'
AVQFR_NOT_MOUNTED = 'файловая система на смонтирована (внутренняя ошибка, устройство неисправно)'
AVQFR_NOT_FORMATTED = 'носитель на отформатирован (внутренняя ошибка, устройство неисправно)'
AVQFR_INSUFFICIENT_SPACE = 'недостаточно места для записи данных'
AVQFR_FILE_IS_TOO_BIG = 'превышен размер файла (внутренняя ошибка, устройство неисправно)'
AVQFR_FILE_NOT_EXIST = 'файл не найден, необходимые данные отсутствуют'
AVQFR_FILE_ALREADY_EXISTS = 'файл уже имеется (внутренняя ошибка, устройство неисправно)'
AVQFR_INVALID_OFFSET = 'неверное смещение (внутренняя ошибка, устройство неисправно)'
AVQFR_PROGRAM_ERROR = 'ошибка записи во флеш-память (внутренняя ошибка, устройство неисправно)'
AVQFR_BAD_ADDRESS = 'неверно задан адрес блока памяти (внутренняя ошибка, устройство неисправно)'
AVQFR_ERASE_ERROR = 'ошибка стирания флеш-памяти (внутренняя ошибка, устройство неисправно)'
AVQFR_NO_CIPHER_CALLBACKS = 'функции шифрования файловой системы недоступны (внутренняя ошибка, устройство неисправно)'
AVQFR_MAC_NOT_FOUND = 'у файла отсутствует имитовставка (внутренняя ошибка, устройство неисправно)'
AVQFR_NOT_ACTUAL_KEY = 'срок действия ключа не наступил или истек'
AVQFR_BAD_SIGN = 'подпись не верна'
AVQFR_INCORRECT_PARAM_SIZE = 'неверный размер параметра (один из параметров команды имеет неверную длину)'
AVQFR_BAD_SYNC_REQUEST_ID = 'неверный идентификатор запроса синхронизации времени'
AVQFR_BAD_FILE_INDEX = 'недопустимое имя файла (внутренняя ошибка, устройство неисправно)'
AVQFR_NO_DATA = 'запрашиваемые данные отсутствуют (попытка получить внутренний или отсутствующий документ)'
AVQFR_INTEGRITY_ERROR = 'нарушение целостности данных, хранящихся в устройстве (устройство неисправно)'
AVQFR_PRNG_NOT_INITIALIZED = 'генератор СЧП не инициализирован, инициализация устройства не завершена'
AVQFR_BAD_SIGN_CTR = 'неверное значение счетчика подписей'
AVQFR_BAD_STATUS_CODE = 'неверное значение кода завершения обработки запроса сервером'
AVQFR_INVALID_MODE = 'неверно задан режим алгоритма (внутренняя ошибка, устройство неисправно)'
AVQFR_INCORRECT_PARAM = 'один из переданных параметров имеет недопустимое значение'
AVQFR_SELF_TEST_FAILURE = 'ошибка самотестирования (устройство неисправно)'
AVQFR_SHIFT_IDLE_TIMEOUT = 'превышено время бездействия, требуется синхронизация времени'
AVQFR_BAD_KEY_AUTH_DATA = 'неверные данные для авторизации сессии (неверное значение PIN, PUK или REG)'
AVQFR_INVALID_ATTR_ID = 'неверный идентификатор атрибута устройства (атрибут, не поддерживается устройством)'
AVQFR_BAD_KEY_TOKEN = 'токен ключа сформирован некорректно'
AVQFR_FILE_BACKUP_ERROR = 'ошибка дублирования файла (внутренняя ошибка, устройство неисправно)'
AVQFR_BAD_KEY_ID = 'идентификатор ключа отсутствует или имеет неверный размер'
AVQFR_BAD_KEY = 'ключ отсутствует, имеет неверный размер или неверный формат набора ключей'
AVQFR_ASN1_PARSE_ERROR = 'невозможно разобрать ASN1-структуру (нарушена структура сертификата или ответа сервера)'
AVQFR_INCORRECT_DATA_SIZE = 'неверный общий размер данных команды (передана команда неподдерживаемой длины)'
AVQFR_SESSIONS_LIMIT_EXCEEDED = 'слишком много одновременно открытых сессий'
AVQFR_INVALID_SESSION_ID = 'неверный идентификатор сессии'
AVQFR_SHIFT_IS_PENDING = 'необходимо закрыть смену'
AVQFR_RECEIPT_IS_PENDING = 'в устройстве присутствуют кассовые документы, которые необходимо передать на сервер'
AVQFR_RECEIPT_SUM_OVERFLOW = 'переполнение счетчиков, необходимо закрыть смену'
AVQFR_RECEIPT_NEGATIVE_VALUE = 'задано отрицательное значение суммы'
AVQFR_NEGATIVE_SHIFT_BALANCE = 'получен отрицательный сменный баланс'
AVQFR_SESSION_ALREADY_AUTHORIZED = 'сессия уже авторизована (попытка повторной авторизации уже авторизованной сессии)'
AVQFR_SESSION_NOT_AUTHORIZED = 'сессия не авторизована (команда требует обязательной авторизации)'
AVQFR_SESSION_EXISTS = 'имеется открытая сессия (выполнение команды возможно только в монопольном режиме)'
AVQFR_SHIFT_IS_OPENED = 'смена открыта (команда возможна только при закрытой смене)'
AVQFR_SHIFT_IS_CLOSED = 'смена закрыта (команда возможна только при открытой смене)'
AVQFR_BAD_DATE_TIME = 'неверный формат или значение даты или времени (операция выполняется "задним" числом)'
AVQFR_BAD_CASH_REG_NUMBER = 'неверный номер кассового аппарата (номер КСА в СККО)'
AVQFR_BAD_CURRENCY_NAME = 'неверное наименование кода валюты'
AVQFR_BAD_RECEIPT_TYPE = 'неверный тип кассового документа'
AVQFR_BAD_RECEIPT_NUMBER = 'номер кассового документа отличается от значения внутренего счетчика кассовых документов'
AVQFR_BAD_RECEIPT_COST = 'рассогласование по полю "Итого общая стоимость"'
AVQFR_BAD_RECEIPT_DISCOUNT = 'рассогласование по полю "Сумма скидки (надбавки)"'
AVQFR_BAD_RECEIPT_TOTAL = 'рассогласование по полю "Итого к оплате"'
AVQFR_BAD_RECEIPT_CENTS = 'неправильное значение дробной части денежного поля'
AVQFR_BAD_TAXPAYER_NUMBER = 'задан неверный УНП'
AVQFR_BAD_CORRECTION_VALUE = 'задана ненулевая сумма коррекции при отсутствии коррекций'
AVQFR_TOTAL_TRADE_OVERFLOW = 'переполнение счетчика суммарного торгового оборота'
AVQFR_UNKNOWN = 'неизвестная ошибка'

TR_EMPTY_INPUT = 'неверные входные данные (данные отсутствуют)'
TR_INVALID_TYPE = 'неверный тип данных'
TR_INSUFFICIENT_BYTES = 'недостаточно данных для считывания информации'

USB_IO = "Input/Output Error"
USB_INVALID_PARAM = "Invalid parameter"
USB_ACCESS = "Access denied (insufficient permissions)"
USB_NO_DEVICE = "No such device (it may have been disconnected)"
USB_NOT_FOUND = "Entity not found"
USB_BUSY = "Resource busy"
USB_TIMEOUT = "Operation timed out"
USB_OVERFLOW = "Overflow"
USB_PIPE = "Pipe error"
USB_INTERRUPTED = "System call interrupted (perhaps due to signal)"
USB_NO_MEM = "Insufficient memory"
USB_NOT_SUPPORTED = "Operation not supported or unimplemented on this platform"
USB_BAD_DESCRIPTOR = "Malformed descriptor"
USB_OTHER = "Other error"

CRT_MISSING_DEVICE_ID = "missing device id"
CRT_MISSING_OWNER_TAX_NUMBER = "missing owner tax number"
CRT_MISSING_OPERATOR_CODE = "missing operator code"
CRT_MISSING_SERIAL_NUMBER = "missing serial number"
CRT_MISSING_OWNER_NAME = "missing owner name in certificate"
CRT_MISSING_CERT_SERIAL = "missing cert serial"
CRT_INVALID = "invalid certificate"

AVTPCR_ATTR_NOT_FOUND = 'missing required attribute'

TIN_CODE_LEN = "invalid code length"
TIN_EMPTY_NAME = "empty name"
TIN_NAME_LEN = "invalid name length"
TIN_INVALID_GTIN = "invalid gtin/ean"
TIN_ZERO_SUM = "invalid sum: can't be 0"
TIN_NEGATIVE_SUM = "invalid sum: can't be negative"
TIN_SUM_OVERFLOW = "sum overflow"
TIN_QUANTITY_OVERFLOW = "quantity overflow"
TIN_ZERO_QUANTITY = "invalid quantity: 0"
TIN_EMPTY_CASHIER = "empty cashier name"
TIN_NO_ITEMS = "invalid items array: no items"
TIN_MAX_ITEMS = "too many items"
TIN_NOT_ENOUGH_MONEY = "not enough payed"
TIN_CASHLESS_OVERFLOW = "too much cashless payment"
TIN_CASH_OVERFLOW = "too much cash"
TIN_NEGATIVE_CHANGE = "invalid change: can't be negative"
TIN_CASHIER_LEN = "invalid cashier length"
TIN_NOT_ENOUGH_CASH_IN = "not enough money in cash box"

TSRV_APP_WAS_NOT_CONFIGURED = "application was not configured properly"
TSRV_EMPTY_ADDRESS = "no address provided"
TSRV_DISPATCHER_NOT_FOUND = "dispatcher not found"
TSRV_DESERIALIZE_ERROR = "failed to deserialize value"
TSRV_EMPTY_MSG_DATA = "data field is required but was not provided"
TSRV_ACTION_NOT_FOUND = "'action' was not found"
TSRV_INVALID_HEADER = "invalid header value"
TSRV_TOKEN_NOT_FOUND = "token was not found"
TSRV_INVALID_SUM_DEC_PART = "invalid sum decimal part. should always have 2 digits after dot"
TSRV_INVALID_QUANTITY_DEC_PART = "invalid quantity decimal part. should always have 3 digits after dot"
TSRV_NEGATIVE_CHEQUE_DISCOUNT = "cheque discount can't be negative"
TSRV_TOKEN_NOT_ACTIVE = "token is not active"
TSRV_ITEM_NOT_FOUND = "item was not found in storage"

PR_IO_ERROR = "printer I/O error"
PR_NOT_FOUND = "printer was not found"
PR_USB_ERROR = "usb printer error"

SM_SESSION_EXISTS = "session already exists. remove existing session or restart app"
SM_INVALID_SESSION = "invalid session id"
SM_SID_NOT_FOUND = "session id was not found"

TORD_FAILED_TO_REMOVE = "failed to remove prev order"
TORD_FAILED_TO_DESER = "failed to deserialize prev order (file may be corrupted)"
TORD_READ_FAILED = "failed to read order"
TORD_WRITE_FAILED = "failed to write order"
TORD_NOT_FOUND = "order was not found"

Что делать если была возвращена ошибка...

  • AVQFR_NOT_ACTUAL_KEY - требуется проверить срок действия СКО и обратиться в тех. поддержку

  • AVQFR_BAD_KEY_AUTH_DATA - PIN/PUK код имеются неверные значения - проверить их правильность в соответствии с паспортом СКО

  • AVQFR_SHIFT_IDLE_TIMEOUT - требуется проверить подключение к интернету и попытаться открыть смену. При открытии смены осуществляется попытка синхронизации времени

  • AVQFR_INSUFFICIENT_SPACE - слишком много неотправленных документов - подключиться к интернету, проверить, что пройдена авторизация по PIN коду. Максимальное кол-во документов - около 4000

  • AVQFR_SESSIONS_LIMIT_EXCEEDED - Программная касса завершала свою работу некорректно какое-то кол-во раз. Требуется обратиться в тех. поддержку предоставив лог-файл и для продолжения работы - достать и вернуть СКО в устройство с запущенной программной кассой

  • AVQFR_SHIFT_IS_PENDING - требуется закрытие смены.

  • AVQFR_RECEIPT_IS_PENDING - требуется проверка наличия интернета на устройстве и убедиться, что пройдена авторизация по PIN коду, а так же дождаться, пока документы будут отправлены на сервер. Кол-во неотправленных документов можно получить с помощью метода get_stored_documents

  • AVQFR_RECEIPT_SUM_OVERFLOW - прибыль вашей компании за смену достигла невероятных объемов. Требуется закрыть смену и сообщить в тех. поддержку о данной ошибке

  • AVQFR_NEGATIVE_SHIFT_BALANCE - попытка уменьшения кол-ва наличных в кассе в отрицательную сторону - например операцией возврата или изьятия. это является ошибкой клиентского ПО и должно быть устранено на этапе интеграции. Так же данная ошибка может возникать при попытке закрытия смены, что говорит о том, что имеются наличные в кассе, которые подлежат изъятию перед закрытием смены

  • AVQFR_SESSION_ALREADY_AUTHORIZED - уже пройдена авторизация в СКО

  • AVQFR_SESSION_NOT_AUTHORIZED - требуется прохождение авторизации в СКО

  • AVQFR_SHIFT_IS_OPENED - требуется закрыть смену

  • AVQFR_SHIFT_IS_CLOSED - требуется открыть смену

  • AVQFR_BAD_DATE_TIME - требуется проверить время на устройстве

  • TIN_CODE_LEN - требуется проверить длину кода. Длина кода не должна превышать 13 знаков.

  • TIN_EMPTY_NAME - имя является обязательным полем, требуется проверить, что оно заполнено

  • TIN_NAME_LEN - неверная длина имени тов. позиции. Не должна превышать 128 символов

  • TIN_INVALID_GTIN - не пройдена валидация кода GTIN (проверочный знак неверный)

  • TIN_ZERO_SUM - значение цены/суммы не может быть равно 0 в одном из полей

  • TIN_NEGATIVE_SUM - значение цены/суммы не может быть отрицательным

  • TIN_SUM_OVERFLOW - слишком большое/маленькое значение цены/суммы. Об ограничениях написано в описании типа Sum

  • TIN_QUANTITY_OVERFLOW - слишком большое значение кол-во. Об ограничениях написано в описании типа Quantity

  • TIN_ZERO_QUANTITY - кол-во не может быть равно 0.

  • TIN_EMPTY_CASHIER - имя кассира не может быть пустым. Это обязательное поле

  • TIN_NO_ITEMS - попытка совершения продажи без товарных позиций

  • TIN_MAX_ITEMS - слишком много товарных позиций в чеке

  • TIN_NOT_ENOUGH_MONEY - недостаточная сумма при попытке оплаты чека

  • TIN_CASHLESS_OVERFLOW - слишком много безналичных средств. Ошибка возникает если значение способов безналичной оплаты и других способов оплаты превышает сумму. С данных способов оплаты невозможно выдать сдачу

  • TIN_CASH_OVERFLOW - слишком много наличных средств. Возникает если сумма безналичных и других способов оплаты полностью покрываем сумму по чеку, а наличные не равны 0

  • TIN_NEGATIVE_CHANGE - Отрицательная сдача.

  • TIN_CASHIER_LEN - неверная длина кассира. Превышает 16 символов

  • TIN_NOT_ENOUGH_CASH_IN - недостаточно наличных в кассе для совершения операции. Например, для выдачи сдачи

  • TSRV_APP_WAS_NOT_CONFIGURED - ошибка инициализации ПО. Требуется обратиться в тех. поддержку

  • TSRV_EMPTY_ADDRESS - не указано значение поля address в запросе, либо пустое значение

  • TSRV_DISPATCHER_NOT_FOUND - неверное значение address в запросе

  • TSRV_DESERIALIZE_ERROR - ошибка обработки входных данных. Требуется проверка правильности формата и указание обязательных полей

  • TSRV_EMPTY_MSG_DATA - требуемое тело запроса (поле data) отсутствует

  • TSRV_ACTION_NOT_FOUND - неверное значение заголовка action , либо address указан неверно

  • TSRV_INVALID_HEADER - неверное значение одного из заголовков

  • TSRV_TOKEN_NOT_FOUND - СКО не найдено

  • TSRV_INVALID_SUM_DEC_PART - неверное значение суммы (передано не в формате X.XX)

  • TSRV_INVALID_QUANTITY_DEC_PART - неверное значение кол-ва (передано не в формате X.XXX)

  • TSRV_NEGATIVE_CHEQUE_DISCOUNT - отрицательная скидка по чеку (надбавка на чек недоступна)

  • TSRV_TOKEN_NOT_ACTIVE - СКО заблокировано

  • TSRV_ITEM_NOT_FOUND - товар отсутствует в БД товаров

  • PR_IO_ERROR - ошибка чтения/записи принтера

  • PR_NOT_FOUND - принтер с указанными данными не найден

  • PR_USB_ERROR - ошибки при работе с принтером по USB

  • SM_SESSION_EXISTS - сессия уже существует. Описание работы с сессиями

  • SM_INVALID_SESSION - неизвестная сессия. Требуется либо пересоздание, либо перезапуск

  • SM_SID_NOT_FOUND - отсутствует заголовок sid в запросе

  • TORD_FAILED_TO_REMOVE - ошибка удаления предыдущего заказа

  • TORD_FAILED_TO_DESER - файл заказа поврежден либо не может быть обработан. Требуется пересоздать заказ предварительно удалив

  • TORD_READ_FAILED - ошибка чтения заказа из ФС. Требуется обратиться в тех. поддержку

  • TORD_WRITE_FAILED - ошибка записи заказа в ФС. Требуется обратиться в тех. поддержку

  • TORD_NOT_FOUND - заказ с данным идентификатором не найден. Требуется создание заказа