Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Введение

Данный документ является Руководством Программиста, а так же Руководством Пользователя по использованию Программной Кассы.


В данной документации описан протокол, типы и ошибки, которые могут возникать при использовании протокола tsrv.

Данная документация будет дополняться в процессе доработок.

Сам по себе протокол взаимодействия предполагает схему “запрос-ответ”, с сообщениями в JSON формате.


На текущий момент tsrv поддерживает взаимодействие по:

Message

Базовой сущностью протокола является Message. Структура Message представляет собой JSON следующего формата:

{
  "type": MessageType,
  "address": String,
  "reply_address": String?,
  "data": Any?,
  "headers": Map<String, String>
}

MessageType передается как строка и может иметь следующие значения:

  • send - вызов метода
  • ping - запрос на проверку связи
  • pong - ответ на запрос проверки связи
  • error - сообщение сервера об ошибке

Поле type служит для объявления типа передаваемого сообщения. Список поддерживаемых сообщений со временем может расширяться.

Поле address имеет два значения в рамках протокола:

  • В случае клиентского сообщения, данное поле требуется для идентификации сервиса (dispatcher), который будет обслуживать данное сообщение
  • В случае серверного сообщения, данное поле заполняется значением из поля reply_address клиентского запроса, чтобы клиентская часть могла определить, на какое свое сообщение она получила ответ.

Поле reply_address является опциональным и служит для передачи “адреса”, на котором будет ожидать ответа клиентская часть. Сервер, в свою очередь, данное поле оставляет всегда в значении null и после успешной/неуспешной обработки клиентского сообщения помещает значение данного поля в address серверного сообщения.

Поле data содержит тело запроса. Тело запроса меняется в зависимости от обслуживающего сервиса, а так же исполняемой функции.

Поле headers содержит в себе дополнительную информацию, которая требуется для выполнения операции. В частности, поле headers, в случае клиентского запроса, обязано содержать поле action, в котором содержится название выполняемого метода в рамках сервиса. В случае серверного сообщения данное сообщение будет содержать значение null.

Заголовок action может иметь значение с использованием любой политики наименования, например:

  • getTokenBySerial
  • get_token_by_serial
  • GET_TOKEN_BY_SERIAL
  • GetTokenBySerial

являются полностью поддерживаемыми и валидными значения вызова одного и того же метода.

Важно: для уменьшения передаваемых данных следует передавать minified JSON (без переносов строк, пробелов между полями и т.п.), например:

{"type":"send","address":"ik.service.token","headers":{"action":"getTokenBySerial","token":"AVQ11031010703","refresh_tokens":"true"}}

Примеры

Валидный клиентский Message:

{
  "type": "send",
  "address": "ik.service.token",
  "headers": {
    "action": "getTokenBySerial",
    "token": "AVQ11031010703",
    "refresh_tokens": "true"
  }
}

Валидный успешный серверный Message:

{
  "type": "send",
  "address": null,
  "reply_address": null,
  "data": {
    "device_id": 131010703,
    "operator_code": 5,
    "organization": "ИП Моров А.М.",
    "pin_code_length": 5,
    "puk_code_length": 8,
    "serial": "AVQ11031010703",
    "tax_number": 191832203
  },
  "headers": null
}

Валидный неуспешный серверный Message:

{
  "type": "error",
  "address": null,
  "reply_address": null,
  "data": {
    "description": "dispatcher not found",
    "name": "TSRV_DISPATCHER_NOT_FOUND"
  },
  "headers": null
}

Комментарии

Работа с комментариями

В следующих запросах могут быть переданы комментарии:

  • create_sale
  • create_withdraw
  • create_rollback
  • create_client_withdraw
  • create_money_back

Используемые типы

Структура комментариев

В общей структуре data можно передать comments, состоящую из двух полей:

  • before - комментарии, которые будут отображены перед заголовком чека
  • after - комментарии, которые будут отображены после UID’a
{
  "data": {
    "sale": { ... },
    "comments": {
      "before": [],
      "after": []
    }
  }
}

Возможные типы комментариев:

  • QR - QR код
  • TEXT - текст
  • BARCODE - код, одного из типов: EAN13, CODE128, CODE39

Параметры:

  • transient - true/false - отображать ли на электронном чеке
  • align - выравнивание комментария: CENTER, LEFT, RIGHT
  • size - размер QR кода (от 1 до 16)

QR

Параметры

  • content - содержимое QR кода в base64

Пример комментария:

{
  "type": "QR",
  "content": "AA==",
  "size": 3,
  "align": "CENTER",
  "transient": false
}

TEXT

Параметры

  • content - текст комментария
  • dw - двойная ширина (true/false)
  • dh - двойная высота (true/false)

Пример комментария

{
  "type": "TEXT",
  "content": "Hello, World!",
  "dw": false,
  "dh": false,
  "align": "CENTER",
  "transient": false
}

BARCODE

  • kind - тип штрих-кода: EAN13, CODE128, CODE39
  • content - содержимое штрих-кода в base64
  • width - ширина штрих-кода
  • height - высота штрих-кода

Пример комментария

{
  "type": "BARCODE",
  "kind": "CODE128",
  "content": "MDc5OTQzOTExMjc2Ng==",
  "width": 2,
  "height": 100,
  "align": "CENTER",
  "transient": false
}

Пример запроса продажи с комментариями

{
  "address": "ik.service.token.sales.retail",
  "headers": {
    "action": "create_sale",
    "token": "AVQ11169990665",
    "printer.dummy": "true",
    "repr.esc_pos": true
  },
  "data": {
    "sale": {
      "header": {
        "cashier": "Test",
        "currency": "BYN"
      },
      "items": [
        {
          "code": {
            "gtin": "978020137962"
          },
          "price": "7.00",
          "quantity": "2.000",
          "name": "Test Flat white",
          "discount": "3.00",
          "markup": "1.00",
          "tax_rate": "tax20"
        }
      ],
      "payments": [
        {
          "payment_type": "cashless",
          "value": "12.00",
          "name": "Халва",
          "ref": "123414141124"
        }
      ],
      "cheque_discount": "0.00",
      "cheque_markup": "0.00",
      "tp_tax_number": 123456789
    },
    "comments": {
      "before": [
        {
          "type": "QR",
          "content": "AA==",
          "size": 3,
          "align": "CENTER",
          "transient": false
        },
        {
          "type": "TEXT",
          "content": "Это текст, в котором double_width и double_height и он справа",
          "dw": true,
          "dh": false,
          "align": "RIGHT",
          "transient": false
        },
        {
          "type": "TEXT",
          "content": "А это такой же текст, но он слева.",
          "dw": true,
          "dh": false,
          "align": "LEFT",
          "transient": false
        },
        {
          "type": "BARCODE",
          "kind": "EAN13",
          "content": "MDc5OTQzOTExMjc2Ng==",
          "width": 2,
          "height": 100,
          "align": "CENTER",
          "transient": false
        },
        {
          "type": "BARCODE",
          "kind": "CODE128",
          "content": "MDc5OTQzOTExMjc2Ng==",
          "width": 2,
          "height": 100,
          "align": "LEFT",
          "transient": false
        },
        {
          "type": "BARCODE",
          "kind": "CODE39",
          "content": "MDc5OTQzOTExMjc2Ng==",
          "width": 2,
          "height": 100,
          "align": "RIGHT",
          "transient": false
        }
      ],
      "after": [
        {
          "type": "TEXT",
          "content": "А это текст, который после UID'a",
          "dw": true,
          "dh": false,
          "align": "RIGHT",
          "transient": false
        }
      ]
    }
  },
  "type": "send"
}

Ошибки

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

{
    "description": String,
    "name": String
}

В случае возникновения ошибок на методах, отвечающих за фискализацию, ошибки, которые возникли ПОСЛЕ фискализации, помещаются в отдельное поле errors. Например, в случае возникновения ошибок с принтером, ответ будет следующего вида:

{
  "type": "send",
  "data": {
    "header": {
      "uid": "5B69B8EF9BE3E43E09894303",
      "number": 354,
      "date_time": "2025-03-01T15:01:36.933186+03:00",
      "shift_number": 78
    },
    "errors": {
      "printing": {
        "name": "rendering.io.error",
        "description": "Ошибка печати: Debug error"
      },
      "storage": null
    }
  }
}

Если в процессе возникли проблемы при работе с хранилищем данных (ФС), будет помещена так же в storage.

Стоит обратить внимание, что в случае отсутствия ошибок после фискализации поле errors не передается, либо может иметь значение null.

Список поддерживаемых заголовков

СКО

  • token - серийный номер СКО
  • tokens.refresh - обновление списка СКО
  • rendering.sn - вывод Серийного номера СКО после QR УИ (true/false)

Работа с принтерами и отрисовкой чеков

  • printer.[usb|dummy] - заголовки и подзаголовки для работы с принтерами
  • printer.spl - spl - symbols per line. Указание кол-ва символов в ширину на бумаге, на которой будет происходить печать. По умолчанию: 48
  • printer.cp866 - указание номера таблицы символов в принтере соответствующий кодировке CP866. По умолчанию - 17
  • printer.cp1251 - указание номера таблицы символов в принтере соответствующий кодировке CP1251. По умолчанию - 18
  • printer.feed - указание кол-во строк прокрутки бумаги после печати. По умолчанию: 5
  • printer.cut - принудительное отрезание бумаги после завершения печати. По умолчанию: true
  • printer.prefix - данные для печати перед печатью основного чека. Может быть использовано для печати лого или изменении шрифта для последующей печати
  • printer.code.skip - отображение кода товара на чеке. По умолчанию: true

Представление чеков

  • repr.esc_pos - отдавать в объекте фискального документа дополнительный объект repr с полем esc_pos, в котором находится esc_pos (base64) представление чека
  • repr.text - отдавать в объекте фискального документа дополнительный объект repr с полем text, в котором находится текстовое представление чека
  • repr.link - отдавать в объекте фискального документа дополнительный объект repr с полем link, в котором находится ссылка на эл. чек

Представление ответа

  • response.calculations - возвращает рузультаты расчетов по чеку в ответе (true/false)
  • printer.reports.zero_payments - при установленном значении true на печатном X/Z отчёте будет всегда выводиться информация о расшифровках базовых способов оплат (Наличными, Банк. Пл. Карта)

Важно!

Печатать чеки для клиентов, отданные в repr.text, repr.link категорически запрещается, из-за отсутствия в них QR кода с УИ!

Работа с принтером

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


Общее

Печать осуществляется путем построчного формирования для последующей печати, добавлением стилей, преобразованием в набор EscPos команд и отправкой на принтер данных.

Т.к. позиционирование построчное и основано на максимальном кол-ве символов в строке, имеется возможность передать кол-во символов для правильного формирования чека под конкретные размеры путем передачи заголовка printer.spl. Значение по умолчанию для данного заголовка - 48

Процесс вывода на печать выглядит следующим образом:

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

В случае возникновения ошибки на последнем этапе (вывод на печать), возвращается ошибка со всеми данными по совершенной операцией в поле op_data структуры.

Все данные передаются в кодировке CP866 и для корректного отображения данных на бумажном чеке, требуется, чтобы в принтере кодировкой по умолчанию была установлена кодировка CP866, либо требуется передача заголовка printer.cp866

Принтер выбирается на основе printer.* заголовков в следующей приоритетности:

  • USB
  • Dummy

Если заголовки первого принтера не были найдены - будет попытка найти следующий принтер. Dummy принтер всегда имеет низший приоритет.


USB-принтер

Для работы с USB принтером требуется передача двух заголовков:

  • printer.usb.vendor - строковое представление vendorId устройства
  • printer.usb.product - строковое представление productId устройства

Перед любой операцией печати с использованием USB принтера, программная касса “забирает” контроль над USB устройством. В случае, если программной кассе не удалось этого сделать, будет возвращена ошибка с префиксом USB_

В случае, если требуется вывести какую-то информацию на принтер до или после печати - USB устройство доступно для подключения соответственно ДО выполняемой операции и после ее завершения


Очередь печати Windows

Данный способ работает только на ОС Windows с принтерами, которые поддерживают печать через очередь печати.

Для отправки чека в очередь печати требуется передача заголовка printer.spool.name с указанием наименования принтера/очереди печати.


Dummy-принтер

Данный тип принтера не выводит ничего на печать. Для задействования требуется передача заголовка printer.dummy с любым значением

Работа с СКО

Для работы с СКО не требуется дополнительных настроек.

В случае компрометации устройства, либо по решению РУП ИИЦ МНС или Оператора Программной Кассы СКО может быть заблокировано для совершения всех фискальных операций.

При попытке совершения фискальных в случаях, приведенных в абзаце выше, будет возникать ошибка avtpcr.status.blocked. В случае, если статус СКО устарел (Отсутствовала синхронизация с сервером более 7 дней), будет возвращаться ошибка avtpcr.status.sync-required.

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

В случае, если конфигурация не удалась или не завершилась (отсутствие интернета или другие причины), при попытке совершения фискальных операций будет возвращена ошибка avtpcr.not-configured. Автоматическая попытка конфигурации СКО осуществляется раз в 2 секунды. При последующих запусках, если данные не устарели и присутствуют, конфигурация может осуществляться без наличия интернета

Определить состояние работы с СКО можно путем запроса Данных об СКО. Поля is_configured и is_compatible должны быть установлены в значение true, а status.block_reasons должен быть пустым

Обновление списка СКО

Важно помнить, что список доступных СКО обновляется в ручном режиме, путем передачи заголовка tokens.refresh со значением "true".

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

Исходя из изложенного выше, стоит передавать tokens.refresh исключительно в том случае, если СКО не было найдено, либо по какой-то причине команда отдала ошибку TSRV_TOKEN_NOT_FOUND

Переменные окружения

2.0.x

  • TSRV_ADDR - адрес, который будет слушаться HTTP сервером. По умолчанию - 127.0.0.0:1828

Логирование

Пример файла логгирования с ротацией по дням:

refresh_rate: 15 seconds
appenders:
  stdout:
    kind: console
  stdout_rolling:
    kind: rolling_file
    path: ./logs/log.log
    append: true
    encoder:
      pattern: "{d(%d.%m.%Y %H:%M:%S)} {({l}):5.5} {m}{n}"
    policy:
      trigger:
        kind: time
        interval: 1 day
        modulate: true
      roller:
        kind: fixed_window
        pattern: "./logs/log_{}.log"
        count: 100
        base: 1
root:
  level: info
  appenders:
    - stdout
    - stdout_rolling
# Логировать ответы и запросы
loggers:
   srv::router::with_debug:
      level: debug

Важно: В случае установки как службы, в поле path необходимо указывать абсолютный путь путь к файлу логирования.

Настройки:

  1. Путь по умолчанию: ./configs/log.yaml
  2. Путь к файлу может быть настроен с помощью аргументов при запуске ПО
    • Например: tsrv --logs-config C:/tsrv/log-config.yaml

Конфигурация Менеджера СКО

См Настройки

Настройки

Настройки:

  • trade_point
    • information - доп. информация о торговой точке для печати
  • tokens - настройки работы с СКО
    • {СЕРИЙНЫЙ_НОМЕР_СКО} - указывается серийный номер СКО
      • auto_login - true | false - флаг, для автоматической авторизации в СКО. Попытка авторизации совершается 1 раз, как только найдено СКО
      • pin_code - значение пин кода для авторизации. Требуется при указании auto_login
  • headers
    • defaults - перечисление заголовком по умолчанию
  • server
    • addr - указание адреса и порта, который будет слушать ПО
  • renderer
    • replacements
      • {кодировка} - указывается кодировка, либо cp866, либо cp1251
        • Список символов для замены
          • char - одиночный символ для замены
          • with - символ, на который заменять
    • comments - комментарии, которые будут печататься на всех док-тах продажи
      • before - До чека
        • Список объектов
      • after - После чека
        • Список объектов
    • extra - дополнительные параметры отчётов
  • reformat_non_1_marking_quantity - (true/false) работает при указании в настройках и включении дополнительного параметра для УНП на бэкэнде. Позволяет принимать количество для маркированного весового товара не кратно 1, с пересчетом стоимости товара и отображением на печатном чеке. (в СККО уходит значение количества = 1, а цена согласно пересчета)

Пример файла настроек:

trade_point:
  information: |
    Время работы магазина зависит только от вас:
    Пн-Пт: 10:00-20:00
    Сб-Вс: 10:00-18:00

tokens:
  AVQ11159990531:
    auto_login: true
    pin_code: 123456

headers:
  defaults:
    repr.link: true
    printer.dummy: ''
    repr.text: true

server:
  addr: 0.0.0.0:1828

renderer:
  extra: ["income", "discounts", "markups", "saleItemPrepayments"]
  replacements:
    # Кодировка
    cp866:
      # char - символ, который заменять
      # with - на что заменять
      - char: '«'
        with: '"'
      - char: '»'
        with: '"'
  comments:
    before:
      - kind: text
        dw: true
        content: |
          Добро пожаловать и спасибо, что выбрали магазин "У Лукоморья"!
          С рождеством и новым годом!
    after:
      - kind: qr
        content: 'aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8='
        size: 5
      - kind: text
        text: |
          Скидка на бесплатный кофе!
      - kind: barcode
        content: 'MTIzNDU2Nzg5MA=='
        width: 5
        height: 5
        format: code128

Установка TSRV как сервиса (службы) Windows

  • Установить tsrv как сервис
    • Рядом с tsrv.exe создать файл по имени install.bat со следующим содержимым:
    cd %~dp0
    .\tsrv.exe --install-service
    pause
    
    • Запустить install.bat от администратора
  • Альтернативный способ:
    • Запустить cmd.exe от Администратора
    • Выполнить c:\путь\к\tsrv.exe --install-service
  • Проверить, что сервис успешно запустился:
    • sc query tsrv-native
    • В случае, если сервис не в статусе RUNNING необходимо посмотреть логи сервиса

Важно! Служба автоматически не создаёт файл настроек и конфигурации логирования.

Логи сервиса

  • Настройка логирования сервиса находятся в файле .configs/log.yaml, подробнее в разделе Логирование

Конфигурация сервиса

  • Конфигурация сервиса находится в файле .configs/settings.yaml, подробнее в разделе Конфигурация

Общее описание принципов взаимодействия

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

Обработка ошибок

Ошибки разделяются на подтипы, на основании используемых префиксов, например:

  • $.avtpcr.* - ошибки, которые отдаются от СКО или связаны с внутренней работой с СКО, например:
    • $.avtpcr.not_authorized - Не пройдена авторизация в СКО
    • $.avtpcr.space.insufficient - Недостаточно памяти в СКО для записи данных
  • $.io.* - ошибки, связанные с передачей данных из/в СКО
  • $.transport.* - ошибки, связанные с обработкой данных от СКО
  • $.internal.* - ошибки, связанные с внутренними особенностями реализации протоколов взаимодействия с ПК. В случае возникновения ошибок такого рода стоит сообщать оператору
  • avtpcr.* - ошибки связанные с несоблюдением требований при взаимодействии с ПК. Например:
    • avtpcr.status.blocked - Касса заблокирована
    • avtpcr.bundle.unique_id.length - Превышена макс. длина уникального идентификатора для чека
  • rendering.* - ошибки, связанные с отрисовкой или печатью данных
  • sko.core.receipt.* - ошибки, связанные непосредственно с функционалом ПК, который отвечает за обработку и формирование кассовых документов
  • orders.* - ошибки работы с функционалом обслуживания за столиками

Command Line Interface

Usage: tsrv [OPTIONS] [COMMAND]

Commands:
  upgrade-sko    Запустить проверку и установку обновлений СКО. Требуется передача PUK кода для обновления
  analyze        Запустить анализ СКО
  detach-avtpcr  Перезапустить все найденные AvTPCR устройства
  help           Print this message or the help of the given subcommand(s)

Options:
      --install-service
          Установить TSRV как службу. Доступно только для Windows.
      --logs-config <LOGS_CONFIG>
          Путь к файлу с настройками логгирования. По умолчанию: './configs/log.yaml'
      --data-dir <DATA_DIR>
          Путь к папке, в которой будут находиться данные. По умолчанию: './tstorage'
      --settings-config <SETTINGS_CONFIG>
          Путь к файлу настроек. По умолчанию: './configs/settings.yaml'
  -h, --help
          Print help
  -V, --version
          Print version

Дополнительные возможности при фискализации

Для перечисленных ниже операций доступны доп. возможности:

  • create_sale
  • create_withdraw
  • create_rollback
  • create_client_withdraw
  • create_money_back
  • pay_order

Уникальный ID операции (unique_id)

Имеется возможность передачи дополнительного идентификатора операции, например:

{
  "data": {
    "unique_id": "...",
    "sale": {  }
  }
}

Максимальная длина: 36 символов

Используется для поиска данных на сервере, а так же для интеграции через WebHooks на стороне АИС ПКС*

Пользовательские данные (user_data)

Имеется возможность передачи и хранения данных фронт-офиса, например:

{
  "data": {
    "user_data": "...",
    "sale": {  }
  }
}

Используется в случаях, если требуется сохранять доп. данные Фронт-офиса внутри СКО.

Данные хранятся внутри СКО, соответственно объем данных может повлиять на скорость фискализации.

Данные хранятся между операциями и могут быть получены посредством API вызовов.

Комментарии (comments)

См. Комментарии

Информация о торговой точке (trade_point_information)

Имеется возможность передачи и хранения информации о торговой точке, например:

{
  "data": {
    "trade_point_information": "...",
    "sale": {  }
  }
}

Данная информация печатается на чеке, если присутствует

Данные хранятся внутри СКО, соответственно объем данных может повлиять на скорость фискализации.

Данные хранятся между операциями и могут быть получены посредством API вызовов.

Для “удаления” данных требуется передать пустую строку

Отправка на электронную почту (emails)

Имеется возможность пометки чека для отправки на почту*, например:

{
  "data": {
    "emails": [ "[email protected]" ],
    "sale": {  }
  }
}

Максимальное кол-во эмейлов - 5 штук

Данные хранятся внутри СКО, соответственно объем данных может повлиять на скорость фискализации.

Отображение маркировки в чеке (expand_marking_items)

Позволяет управлять отображением маркировки в печатном чеке, построчно, по умолчанию включено (true)


* - Функционал на стадии разработки

Транспортный уровень

Данный раздел будет дополняться поддерживаемыми транспортными протоколами.

HTTP

Устаревший подход. Рекомендуется для всех новых интеграций использовать “Альтернативный”

Обмен сообщения происходит по адресу: host:port/tsrv

По умолчанию HTTP сервер стартует на 0.0.0.0:1828, однако это можно поменяв, установив переменную окружения TSRV_ADDR в значение формата host:port

Все запросы совершаются методом POST

Заголовок Content-Type должен иметь значение application/json

Пример:

> POST /tsrv HTTP/1.1
> Host: localhost:1828
> User-Agent: insomnia/2021.5.3
> Content-Type: application/json
> Accept: */*
> Content-Length: 109

| {
|   "address": "ik.service.app",
|   "headers": {
|     "action": "init_session"
|   },
|   "data": null,
|   "type": "send"
| }

Альтернативный способ взаимодействия по HTTP

Возможен так же вариант взаимодействия по следующему URL методом POST: /tsrv/{address}/{action}.

В данном варианте все заголовки (поле headers сообщения) могут быть помещены в заголовки HTTP запроса, а заголовок action может быть опущен, т.к. находится внутри пути запроса. В тело HTTP запроса помещается поле data сообщения.

В данном случае пример инициализации сессии выглядит следующим образом:

> POST /tsrv/ik.service.app/init_session HTTP/1.1
> Host: localhost:1828
> User-Agent: insomnia/2021.5.3
> Content-Type: application/json
> Accept: */*
> Content-Length: 0

В то же время запрос на авторизацию (с телом запроса) выглядит следующим образом:

> POST /tsrv/ik.service.token.authority/authorize HTTP/1.1
> Host: localhost:1828
> User-Agent: insomnia/2021.5.3
> Content-Type: application/json
> token: AVQ11071080687
> tokens.refresh: true
> Accept: */*
> Content-Length: 19

| {
|   "pin": "47702"
| }

Требуется обратить внимание на HTTP заголовки token и tokens.refresh - они находятся в HTTP запросе

Проверки

Проверка имени кассира

Важно: перед началом проверки удаляются пробелы в начале и конце строки.

Список проверок

  • Длина поля cashier не равна 0
  • Длина поля cashier не превышает 20 символов

Проверка суммы

Список проверок

  • value имеет не более 2 знаков после запятой
  • value является положительным числом
  • value не превышает максимального значения

Проверка скидки и надавки тов. позиции

Список проверок

  • discount и markup имеет не более 2 знаков после запятой
  • discount и markup находится в интервале от -549755813887.99 до 549755813887.99 включительно

Проверка наименования тов. позиции

Важно: перед началом проверки удаляются пробелы в начале и конце строки.

Осуществляемые проверки

  • Длина name не равна 0
  • Длина name не превышает 128 символов

Проверка способов оплат и сдачи

Осуществляемые проверки

  • cash + cashless + other больше, либо равно сумме К оплате по чеку
  • cashless + other меньше, либо равно сумме К оплате по чеку
  • cashless + other равно сумме К оплате по чеку и сумма оплат наличными равна 0. Обьяснение: если сумма наличных и безналичных платежей равна требуемой сумме к оплате, то нет возможности дать сдачу, а значит сумма наличных должна быть равна 0.
  • change (сдача) должна быть больше либо равна 0

Правила округления

Все значения, имеющий тип Sum и требующие округления, округляются в 2 этапа:

  • Округление до 3 знаков в сторону 0 (было: 1.2356, стало: 1.235)
  • Округление до 2 знаков, по правилам математики
    • Пример 1. было: 1.235, стало: 1.24
    • Пример 2. было: 1.234, стало: 1.23

Все поля, требующие округления, описаны в соответствующих запросах, либо описании полей.

Последовательность расчетов для магазинов беспошлинной торговли:

  • При добавлении товара, цена отображается в чеке в BYN;
  • Предоставляется возможность оплаты в любой используемой валюте и их комбинации;
  • Порядок действий после каждого внесения суммы оплаты**:
    • конвертация суммы остатка к оплате по чеку в валюту внесенной оплаты;
    • вычитание внесенной суммы из результата конвертированной суммы по чеку;
    • обратное приведение суммы остатка по чеку к базовой валюте (BYN);
    • суммы остатка к оплате и сдачи округляются до 2х знаков после запятой после каждого последующего внесения суммы;

** Если стоимость чека не закрыта действия повторяются в цикле от остатка в BYN последовательно для каждой валюты оплаты.

Формирование и передача документов для магазинов беспошлинной торговли

  • Документы Продажа, Возврата и Аннулирования формируется в базовой валюте BYN:
    • В СККО и на печатном форме документы будут содержать данные, приведенные к одной валюте – BYN
  • Документы Внесения и Изъятия формируются в валюте совершаемой операции:
    • В СККО и на печатной форме документы будут содержать данные о средствах в тех валютах, в которых осуществлялись кассовые операции (без приведения к одной валюте – BYN)
  • Z-отчет формируется по каждой валюте отдельно:
    • Документы Продажа, Возврата и Аннулирования в СККО и на печатной форме отражаются в BYN;
    • Документы Внесения и Изъятия в СККО и на печатной форме отражаются в соответствии с валютой операции;

Сервисы

Сервисы представляют собой наборы функций, агрегированные по назначению.

Название каждого сервиса (например - app) передается в поле address клиентского сообщения. Сервер, в свою очередь, передает обработку данного сообщения “сервису”, с указанным наименованием, который в свою очередь пытается найти функцию для вызова на основании заголовка action. Стандартные сервисы, описанные в данном документе, преобразуют значение поля action в camel_case вне зависимости от переданного значения.

Напоминание: поле action может быть передано с любой политикой наименования, для сервисов, описанных в данной документации.

Важно: термин “возвращаемое значение” подразумевает под собой данные, передающиеся в поле data ответа сервера.

Все сервисы в данном разделе, которые взаимодействуют с конкретным СКО, принимают следующие заголовки:

  • token - серийный номер СКО. В случае, если подключено 1 СКО и заголовок не передан - будет использовано единственное подключенное СКО
  • tokens.refresh (необязательный) - "true" / "false"

ik.service.app

Данный сервис предназначен для работы с операциями управления и получения информации о приложении.

version

Вызов данной функции возвращает информацию о версии протокола приложения.

В случае выполнения данной функции, поле data отсутствует. Возвращаемое значение: Version


Примеры

Запрос:

{
  "type": "send",
  "address": "ik.service.app",
  "reply_address": "version-msg",
  "data": null,
  "headers": {
    "action": "version"
  }
}

Ответ

{
  "type": "send",
  "data": {
    "version": "2.0.1",
    "kind": "tsrv",
    "build": "20250225.075316"
  }
}

Работа с принтерами

request

Метод позволяет послать данные на принтер и опционально ожидать ответа на ту или иную команду.


Входные данные: EscPosReq

Возвращаемые данные:

  • Error - если произошла ошибка чтения/записи при работе с принтером
  • String - base64 представление ответа, если имеется
  • null - если в поле reply_size запроса отсутствует или имеет значение 0

ik.service.token

Данный сервис предназначен для получения информации об СКО.

get_tokens

Данный метод предназначен для получения информации о доступных СКО.

Данный метод не требует передачи поля data в сообщении.

Возвращаемое значение: Массив значений TokenInformation

Важно: данный метод сканирует список USB-устройств автоматически при вызове, вне зависимости от того, было ли найдено СКО или нет. После сканирования СКО попадает в список доступных к использованию.


Примеры

Запрос:

{
  "type": "send",
  "address": "ik.service.token",
  "reply_address": "example",
  "data": null,
  "headers": {
    "action": "get_tokens"
  }
}

Ответ:

{
  "type": "send",
  "data": {
    "device_id": 159990531,
    "operator_code": 5,
    "organization": "ООО «АЙЭМЛЭБ»",
    "pin_code_length": 6,
    "puk_code_length": 8,
    "serial": "AVQ11159990531",
    "tax_number": 193141246,
    "is_configured": true,
    "is_compatible": true,
    "version": "1.17.643",
    "status": {
      "last_update": "2025-03-01T16:01:39.233842481+03:00",
      "block_reasons": []
    },
    "server_config": {
      "last_update": "2025-03-01T16:01:40.777846386+03:00",
      "chw_max_value": 21000,
      "trade_point": {
        "addr": "Адрес тестовой торговой точки",
        "name": "Название тестовой торговой точка"
      },
      "organization": "ООО \"АЙЭМЛЭБ\""
    }
  }
}

get_token_by_serial

Данный метод предназначен для получения информации об СКО по серийному номеру.

Необходимость во входных данных отсутствует, однако серийный номер требуется к передаче в заголовке token. (в версии v2.x заголовок опционален, если подключено только 1 СКО)

Так же, опционально может быть передан заголовок tokens.refresh со следующими значениями:

  • "true" - будет совершено обновление сканирование USB-устройств
  • "false" (по умолчанию) - сканирование USB-устройств совершено не будет

Возвращаемое значение: TokenInformation


Примеры

Пример успешного выполнения

Запрос с заголовком tokens.refresh:

{
  "type": "send",
  "address": "ik.service.token",
  "reply_address": "example",
  "data": null,
  "headers": {
    "action": "get_token_by_serial",
    "tokens.refresh": "true",
    "token": "AVQ11031010703"
  }
}

Ответ:

{
  "type": "send",
  "data": {
    "device_id": 159990531,
    "operator_code": 5,
    "organization": "ООО «АЙЭМЛЭБ»",
    "pin_code_length": 6,
    "puk_code_length": 8,
    "serial": "AVQ11159990531",
    "tax_number": 193141246,
    "is_configured": true,
    "is_compatible": true,
    "version": "1.17.643",
    "status": {
      "last_update": "2025-03-01T16:01:39.233842481+03:00",
      "block_reasons": []
    },
    "server_config": {
      "last_update": "2025-03-01T16:01:40.777846386+03:00",
      "chw_max_value": 21000,
      "trade_point": {
        "addr": "Адрес тестовой торговой точки",
        "name": "Название тестовой торговой точка"
      },
      "organization": "ООО \"АЙЭМЛЭБ\""
    }
  }
}

get_cash_in_token

Данный метод предназначен для получения сумм наличных в кассе.

Входные данные:

  • null.
  • либо строковое значение Currency

Возвращаемые данные:

  • В случае, если во входных данных был передан null, будет возвращен массив значений CashIn, со всеми поддерживаемыми валютами
  • В случае, если было передано значение Currency, будет возвращен массив с 1 элементом CashIn, соответствующий переданной валюте

Важно: должны быть соблюдены следующие условия: В СКО должна быть произведения авторизация по PIN-коду


Успех (все валюты)

Запрос

{
  "address": "ik.service.token",
  "headers": {
    "action": "get_cash_in_token",
    "tokens.refresh": "true",
    "token": "AVQ11169990670"
  },
  "data": null,
  "type": "send"
}

Ответ:

{
  "type": "send",
  "data": [
    {
      "cash": "352.50",
      "currency": "BYN"
    },
    {
      "cash": "0",
      "currency": "USD"
    },
    {
      "cash": "0",
      "currency": "EUR"
    },
    {
      "cash": "0",
      "currency": "RUB"
    }
  ]
}

Успех (указание валюты)

Запрос:

{
  "type": "send",
  "address": "ik.service.token",
  "reply_address": "example",
  "data": "BYN",
  "headers": {
    "token": "AVQ11031010703",
    "action": "get_cash_in_token"
  }
}

Ответ:

{
  "type": "send",
  "address": "example",
  "reply_address": null,
  "data": [
    {
      "cash": "0.00",
      "currency": "BYN"
    }
  ],
  "headers": null
}

next_cheque_number

Данный метод предназначен для получения номера следующего документа.

Входные данные: null

Возвращаемые данные: u32 - номер следующего чека


Примеры

Успешный (пройдена авторизация)

Запрос:

{
  "type": "send",
  "address": "ik.service.token",
  "reply_address": "example",
  "data": null,
  "headers": {
    "action": "next_cheque_number",
    "tokens.refresh": "true",
    "token": "AVQ11031010703"
  }
}

Ответ:

{
  "type": "send",
  "address": "example",
  "reply_address": null,
  "data": 5782,
  "headers": null
}

get_stored_documents

Данный метод предназначен для получения информации, о количестве неотправленных записей в СКО.

На каждый документ создается 2 или более записей в СКО, кол-во документов возвращает кол-во записей, а не документов

С клиентской стороны отсутствует возможность повлиять на количество отправленных или неотправленных документов и этот метод хоть и может вводить в панику числом, отличным от 0, является лишь справочным для проверки, что документы (не)отправляются на сервер Оператора Программной Кассы.

Входные данные: null

Возвращаемые данные: u16 - количество неотправленных документов на сервер.


Примеры

Успех

Запрос:

{
  "type": "send",
  "address": "ik.service.token",
  "reply_address": "example",
  "data": null,
  "headers": {
    "token": "AVQ11031010703",
    "tokens.refresh": "true",
    "action": "get_stored_documents"
  }
}

Ответ:

{
   "type": "send",
   "address": "example",
   "reply_address": null,
   "data": 100,
   "headers": null
}

Ошибка (не пройдена авторизация)

Запрос:

{
  "type": "send",
  "address": "ik.service.token",
  "reply_address": "example",
  "data": null,
  "headers": {
    "token": "AVQ11031010703",
    "action": "get_stored_documents",
    "tokens.refresh": "true"
  }
}

Ответ:

{
  "type": "error",
  "address": "example",
  "reply_address": null,
  "data": {
    "description": "сессия не авторизована (команда требует обязательной авторизации)",
    "name": "AVQFR_SESSION_NOT_AUTHORIZED"
  },
  "headers": null
}

get_oldest_document

Данный метод предназначен для получения самого “старого” неотправленного документа на сервер Оператора Программной Кассы.

Входные данные: null

Возвращаемые данные: OldestDocument


Примеры

Успех

Запрос:

{
  "type": "send",
  "address": "ik.service.token",
  "reply_address": "example",
  "data": null,
  "headers": {
    "token": "AVQ11031010703",
    "action": "get_oldest_document",
    "tokens.refresh": "true"
  }
}

Ответ:

{
  "type": "send",
  "address": "example",
  "reply_address": null,
  "data": {
    "date": "2021-09-13T10:17:35+03:00",
    "uid": "A50B7A727894C03707CF108F"
  },
  "headers": null
}

get_token_state

Данный метод позволяет получить сохраненную информацию об СКО.


Входные данные: отсутствуют

Возвращаемые данные:

  • null если авторизация не пройдена
  • State, если авторизация пройдена

update_status

Принудительное обновление статуса СКО.


Входные данные: отсутствуют

Возвращаемые данные: UpdateStatus


get_total_income


Входные данные: Currency

Возвращаемые данные: Sum


get_status

Получение статуса СКО.

Статус unknown означает то, что приложение не смогло узнать статус кассы.

Статус blocked означает, что касса была заблокирована.

Статус active означает, что все хорошо и касса может работать.


Входные данные: отсутствуют

Возвращаемые данные: Status


print_prev_receipt

Получение и печать ранее фискализированного документа.


Входные данные: ReceiptRequest

Возвращаемые данные:

  • null - если чек не найден
  • [FiscalResponse) - если чек найден

Важно: Данный метод требует авторизации в СКО.

Важно: если data.shift_number передано значение null требуется наличие открытой смены

Важно: для данного запроса требуются заголовки для работы с принтером

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

{
    "address": "ik.service.token",
    "headers": {
        "action": "print_prev_receipt",
        "printer.usb.vendor": "0x0471",
        "printer.usb.product": "0x0055",
        "printer.feed": "2",
        "tokens.refresh": "true",
        "printer.debug": true
    },
    "type": "send",
    "data": {
        "shift_number": 59,
        "number": 242
    }
}

Ответ (успех)

{
  "type": "send",
  "data": {
    "repr": {
      "text": "Добро пожаловать и спасибо, что выбрали магазин \n\"У Андрея Кирилловича\"!                           \nС рождеством и новым годом!                     \n                 ООО \"АйЭмЛэб\"                  \n                  Офис Скорины                  \n       г. Минск УЛ. СКОРИНЫ ФРАНЦИСКА, 8        \n  Время работы магазина зависит только от вас:  \n                Пн-Пт: 10:00-20:00              \n                Сб-Вс: 10:00-18:00              \nУНП 193141246                  РН СККО 119026738\n        Не является платежным документом        \n               Документ внесения                \n                   N док. 343                   \n------------------------------------------------\nСумма:                                    100.00\n------------------------------------------------\nКассир: Test                 04.11.2025 17:55:55\n          УИ D756D6D53709586B07183432           \n          Скидка % на бесплатный кофе!          \n\n",
      "link": "https://receipts.cloud.stage.imlab.by/render/D756D6D53709586B07183432"
    },
    "unique_id": "123774",
    "header": {
      "uid": "D756D6D53709586B07183432",
      "number": 343,
      "date_time": "2025-11-04T17:55:55.352882+03:00",
      "shift_number": 104
    },
    "errors": null
  }
}

get_minmax_receipts

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


Входные данные:

  • null - получение чеков в текущей смене
  • u16 - номер смены, из которой требуется получение номеров первого и последнего документа

Возвращаемые данные:

  • AVQFR_SHIFT_IS_CLOSED - если передано null во входных данных и смена закрыта
  • AVQFR_SESSION_NOT_AUTHORIZED - если не пройдена авторизация в СКО
  • MinMaxReceipts - в случае успеха

set_trade_point_info


Входные данные:

{
   "content": "TradePointInformation"
}
  • TradePointInformation - указывается режим работы торгового объекта, контактные данные (телефон) и другое

firmware

Добавлены эндпоинты для обновления прошивки СКО.

⚠️Важно! Этот процесс достаточно чувствительный к питанию СКО

⚠️При отключении питания СКО может стать неисправно

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

⚠️После завершения обновления СКО “переподключается”, соответственно без передачи заголовка tokens.refresh со значением true будет не найдено.

Проверить совместимость tsrv c версией СКО можно следующим образом:

  1. Запросить информацию об СКО: Получение СКО
  2. В ответе извлечь поле is_compatible. В случае, если версия ПО несовместима с версией прошивки СКО, значение будет равно false

Перед обновлением стоит убедиться, что прошивка доступна: 1.

{
   "address": "ik.service.token.firmware",
   "headers": {
      "action": "check",
   },
   "data": null,
   "type": "send"
}

Ответ следующего формата:

{
   "type": "send",
   "data": {
      "version": "1.17" <--- или `null`, если прошивка отсутствует
   }
}

В случае, если is_compatible == false и в ответе на наличие обновления прошивки пришел null в поле version, следует обратиться в соответствующий интеграционный чат с предоставлением информации о рег. номере и серийном номере СКО.

Процесс обновления прошивки через эндпоинты выглядит следующим образом:

  1. Требуется авторизация по PUK коду:
{
   "address": "ik.service.token.authority",
   "headers": {
      "action": "authorize",
      "tokens.refresh": true
   },
   "type": "send",
   "data": {
      "puk": "12345678"
   }
}

⚠️Если авторизация по пин-коду была пройдена, требуется сделать logout

  1. Выполнить запрос на обновление прошивки:
{
   "address": "ik.service.token.firmware",
   "headers": {
      "action": "upgrade",
      "tokens.refresh": "true"
   },
   "data": null,
   "type": "send"
}

В ответ будет отдан ответ в формате:

{
   "type": "send",
   "data": {
      "version": "1.17" <--- Либо null, если обновление не найдено
   }
}

⚠️ Этот этап может занять существенно времени в зависимости от ряда условий: интернет соединение, скорость и стабильность USB порта. Важно, что на этом этапе отключение tsrv, перезапуск ПК или отключение СКО в том числе из-за сбоя питания недопустимо и может привести к полной неисправности СКО

  1. После получения ответа СКО будет переподключено и можно выполнить авторизацию по пин-коду. При авторизации рекомендуется передать tokens.refresh со значением true для поиска СКО среди USB устройств

ik.service.token.authority

Данный сервис предназначен для совершения операций с СКО - связанных с PIN/PUK кодами.

authorize

Данный метод предназначен для совершения авторизации в СКО.

Входные данные: Pin

Возвращаемые данные:

  • null в случае успеха.

Важно: после каждой неверной попытки авторизации задержка ответа увеличивается. После 3 попытки время ожидания ответа авторизации составляет 10 секунд. После ввода успешного PIN-кода задержка сбрасывается.


Примеры

Успех

Запрос:

{
  "type": "send",
  "address": "ik.service.token.authority",
  "reply_address": "example",
  "data": {
    "pin": "16522"
  },
  "headers": {
    "tokens.refresh": "true",
    "token": "AVQ11031010703",
    "action": "authorize"
  }
}

Ответ:

{
  "type": "send",
  "address": "example",
  "reply_address": null,
  "data": null,
  "headers": null
}

logout

Данный метод предназначен для совершения выхода из авторизованной сессии.

Входные данные: null

Возвращаемые данные:

  • null в случае успеха

Примеры

Успех

Запрос:

{
  "type": "send",
  "address": "ik.service.token.authority",
  "reply_address": "example",
  "data": null,
  "headers": {
    "tokens.refresh": "true",
    "token": "AVQ11031010703",
    "action": "logout"
  }
}

Ответ:

{
  "type": "send",
  "address": "example",
  "reply_address": null,
  "data": null,
  "headers": null
}

ik.service.token.shift

Данный сервис предназначен для работы со сменой.

open_shift

Данный метод предназначен для открытия смены.

Входные данные: OpenShiftRequest

{
  "mode": "default" | "restaurant" | null
}
  • mode - Необязательный параметр для работы в режиме ретейла.

Возвращаемые данные:

  • null в случае успеха.

Важно: смена может быть открыта не более 24 часов.


Примеры

Успех

Запрос:

{
  "address": "ik.service.token.shift",
  "headers": {
    "action": "open_shift"
  },
  "type": "send"
}

Ответ:

{
  "type": "send",
  "data": null
}

get_x_report

Данный метод предназначен для получения X-отчета.

Входные данные: null

Возвращаемые данные:

  • Report в случае успеха

Важно: данный метод НЕ отдает документ на печать. Для отправки на печать следует использовать метод печати X-отчёта


Примеры

Успех

Запрос:

{
  "type": "send",
  "address": "ik.service.token.shift",
  "reply_address": "example",
  "data": null,
  "headers": {
    "action": "get_x_report",
    "token": "AVQ11169990670",
    "tokens.refresh": "true"
  }
}

print_x_report

Данный метод предназначен для получения X-отчета.

Входные данные: PrintXReportReq или null

Важно: для печати требуется передача заголовков для работы с принтером

Возвращаемые данные:

  • Report в случае успеха

Важно: в случае, если в операции не совершалось никаких операций, массив счетчиков (data.counters) будет пустым, однако на печать в любом случае уйдут счетчики с нулевыми значениями по валюте BYN

Примеры

Примеры аналогичны получению Х-отчета, за исключением необходимых заголовков для работы с принтером

close_shift

Данный метод предназначен для закрытия смены с последующим получением Z-отчета.

Входные данные:

Возвращаемые данные:

  • Report в случае успеха.

Важно: для закрытия смены, требуется полное изъятие наличных.


Примеры

Успех

Запрос:

{
  "address": "ik.service.token.shift",
  "headers": {
    "action": "close_shift",
    "token": "AVQ11169990670",
    "printer.dummy": ""
  },
  "type": "send"
}

Ответ:

{
  "type": "send",
  "data": {
    "close_date": "2024-07-18 21:06:21",
    "company_name": "ООО \"АЙЭМЛЭБ\"",
    "currency_counters": {
      "BYN": {
        "additional": {
          "third_party": {
            "rollback": {
              "count": 1,
              "sum": "5.00"
            },
            "total": {
              "count": 10,
              "sum": "104.00"
            }
          }
        },
        "client_withdraws": {
          "count": 1,
          "sum": "1.00"
        },
        "deposits": {
          "count": 4,
          "sum": "310.00"
        },
        "marking_si": {
          "count": 0,
          "sum": "0.00"
        },
        "marking_ukz": {
          "count": 0,
          "sum": "0.00"
        },
        "money_backs": {
          "card": "0.50",
          "cash": "0.50",
          "count": 1,
          "other": "0.00",
          "sum": "1.00"
        },
        "rollbacks": {
          "card": "6.00",
          "cash": "0.00",
          "count": 1,
          "other": "0.00",
          "sum": "6.00"
        },
        "sales": {
          "card": "60.00",
          "cash": "44.00",
          "count": 10,
          "other": "0.00",
          "sum": "104.00"
        },
        "si_refund": {
          "count": 0,
          "sum": "0.00"
        },
        "si_rollback": {
          "count": 0,
          "sum": "0.00"
        },
        "ukz_refund": {
          "count": 0,
          "sum": "0.00"
        },
        "ukz_rollback": {
          "count": 0,
          "sum": "0.00"
        },
        "withdraws": {
          "count": 1,
          "sum": "352.50"
        }
      }
    },
    "first_sale_number": 19,
    "last_sale_number": 35,
    "number": 3,
    "open_date": "2024-07-18 17:07:22",
    "repr": {},
    "sales_count": 10,
    "serial_number": "AVQ11169990670",
    "tax_number": 193141246,
    "total_income": {
      "BYN": "149.00"
    },
    "uid": "D5CCDF029529C4E606A6E41E"
  }
}

get_z_report_copy

Данный метод предназначен для печати копии Z-отчета.

Входные данные:

null

Возвращаемые данные:

  • Report в случае успеха.
  • Repr Результаты отрисовки чека и прочие доп. данные (при наличии)

Важно: требуется авторизация

Важно: : Метод доступен только в закрытой смене и отдает информацию только о последней закрытой смене

ik.service.token.deposit

create_deposit

Входные данные: NewSumChequeRequest

Возвращаемые данные: FiscalResponse


Важно: Для совершения данной операции требуется Авторизация в СКО

Важно: Для совершения данной операции требуется открытая смена

Важно: Для совершения данной операции смена должна быть открыта менее 24 часов


Примеры запросов

Успех

Запрос:

{
  "address": "ik.service.token.deposit",
  "headers": {
    "action": "create_deposit",
    "token": "AVQ11031010703",
    "printer.dummy": ""
  },
  "data": {
    "sum_cheque_data": {
      "header": {
        "cashier": "Test",
        "currency": "BYN"
      },
      "sum": "1.00"
    }
  },
  "type": "send"
}

Ответ:

{
  "type": "send",
  "data": {
    "repr": {
      "text": "Добро пожаловать и спасибо, что выбрали магазин \n\"У Андрея Бракодела\"!                           \nС рождеством и новым годом!                     \n                 ООО \"АйЭмЛэб\"                  \n                  Офис Скорины                  \n       г. Минск УЛ. СКОРИНЫ ФРАНЦИСКА, 8        \n  Время работы магазина зависит только от вас:  \n                Пн-Пт: 10:00-20:00              \n                Сб-Вс: 10:00-18:00              \nУНП 193141246                  РН СККО 119026738\n        Не является платежным документом        \n               Документ внесения                \n                   N док. 359                   \n------------------------------------------------\nСумма:                                    100.00\n------------------------------------------------\nКассир: Test                 05.11.2025 17:23:12\n          УИ 78E24333F1D9399507183432           \n          Скидка % на бесплатный кофе!          \n\n",
      "link": "https://receipts.cloud.stage.imlab.by/render/78E24333F1D9399507183432"
    },
    "header": {
      "uid": "78E24333F1D9399507183432",
      "number": 359,
      "date_time": "2025-11-05T17:23:12.498732+03:00",
      "shift_number": 112
    },
    "errors": null
  }
}

ik.service.token.withdraw

create_withdraw

Входные данные: NewSumChequeRequest

Возвращаемые данные: FiscalResponse


Важно: Для совершения данной операции требуется Авторизация в СКО

Важно: Для совершения данной операции требуется открытая смена

Важно: Для совершения данной операции смена должна быть открыта менее 24 часов, либо сумма изъятия должна быть на сумму всех наличных в кассе по указанной валюте


Примеры запросов

Успех

Запрос:

{
  "address": "ik.service.token.withdraw",
  "headers": {
    "action": "create_withdraw",
    "token": "AVQ11169990670",
    "printer.dummy": ""
  },
  "data": {
    "sum_cheque_data": {
      "header": {
        "cashier": "Test",
        "currency": "BYN"
      },
      "sum": "352.50"
    }
  },
  "type": "send"
}

Ответ:

{
  "type": "send",
  "data": {
    "header": {
      "uid": "EEBAE74068406C4509894303",
      "number": 362,
      "date_time": "2025-03-01T18:54:35.761641+03:00",
      "shift_number": 78
    },
    "errors": null
  }
}

create_client_withdraw

Входные данные: NewSumChequeRequest

Возвращаемые данные: FiscalResponse


Важно: Для совершения данной операции требуется Авторизация в СКО

Важно: Для совершения данной операции требуется открытая смена

Важно: Сумма выдачи в рамках одной операции ограничена законодательно, не должна превышать 5 базовых величин

Важно: Доступная валюта для операции выдачи BYN

Важно: Для совершения данной операции смена должна быть открыта менее 24 часов


Примеры запросов

Успех

Запрос:

{
  "address": "ik.service.token.withdraw",
  "headers": {
    "action": "create_client_withdraw",
    "token": "AVQ11031010703",
    "printer.dummy": ""
  },
  "data": {
    "sum_cheque_data": {
      "header": {
        "cashier": "Test",
        "currency": "BYN"
      },
      "sum": "1.00"
    }
  },
  "type": "send"
}

Ответ:

{
  "type": "send",
  "data": {
    "header": {
      "uid": "598813A9ECD7CB4B09894303",
      "number": 356,
      "date_time": "2025-03-01T17:25:14.490005+03:00",
      "shift_number": 78
    },
    "errors": null
  }
}

ik.service.token.sales.retail

create_sale

Данный метод предназначен для совершения операции продажи.

Входные данные: SaleRequest

Возвращаемые данные: FiscalResponse


Важно: Для совершения данной операции требуется Авторизация в СКО

Важно: Для совершения данной операции требуется открытая смена

Важно: Для совершения данной операции смена должна быть открыта менее 24 часов


Примеры

Успех

Запрос:

{
  "address": "ik.service.token.sales.retail",
  "headers": {
    "action": "create_sale",
    "token": "AVQ11169990670",
    "printer.dummy": ""
  },
  "data": {
    "sale": {
      "header": {
        "cashier": "Test",
        "currency": "BYN"
      },
      "items": [
        {
          "section": {
            "code": 1,
            "name": "Тестовая секция"
          },
          "code": {
            "code": "1845678901001"
          },
          "price": "7.00",
          "quantity": "1.000",
          "name": "Test Flat white",
          "discount": "1.00",
          "markup": "1.00",
          "tax_rate": "tax20"
        },
        {
          "code": {
            "code": "123132"
          },
          "price": "10.00",
          "quantity": "1.000",
          "name": "Не gtin товар",
          "discount": "1.00",
          "markup": "2.00",
          "tax_rate": "tax10"
        }
      ],
      "payments": [
        {
          "payment_type": "cashless",
          "value": "6.00",
          "name": "Халва",
          "ref": "123414141124"
        },
        {
          "payment_type": "cash",
          "value": "20.00"
        }
      ],
      "cheque_discount": "2.00",
      "cheque_markup": "1.00",
      "tp_tax_number": 123456789
    }
  },
  "type": "send"
}

Ответ:

{
  "type": "send",
  "data": {
    "repr": {
      "link": "https://receipts.cloud.stage.imlab.by/render/60061721731D714C07183432"
    },
    "header": {
      "uid": "60061721731D714C07183432",
      "number": 344,
      "date_time": "2025-11-04T18:25:31.139989+03:00",
      "shift_number": 104
    },
    "errors": null
  }
}

ik.service.token.moneyback

create_money_back

Операция возврата.


Входные данные: NewMoneyBackRequest

Возвращаемые данные: FiscalResponse


Важно: Для совершения данной операции требуется Авторизация в СКО

Важно: Для совершения данной операции требуется открытая смена

Важно: Для совершения данной операции смена должна быть открыта менее 24 часов

Важно: Кол-во наличных в кассе по указанной валюте должно быть больше, либо равно сумме возврата наличными средствами


Примеры

Успех

Запрос:

{
  "address": "ik.service.token.moneyback",
  "headers": {
    "action": "create_money_back",
    "token": "AVQ11169990670",
    "printer.dummy": ""
  },
  "data": {
    "money_back": {
      "header": {
        "cashier": "Test",
        "currency": "BYN"
      },
      "items": [
        {
          "section": {
            "code": 1,
            "name": "Тестовая секция"
          },
          "code": {
            "scan": [
              {
                "gtin": "123456789012"
              },
              {
                "unknown": "j239ej2je"
              },
              {
                "ukz": "midom0im20m03223d-2-d"
              }
            ]
          },
          "price": "7.00",
          "quantity": "1.000",
          "name": "Test Flat white",
          "markup": "1.50",
          "discount": "2.20"
        },
        {
          "code": {
            "service": "121"
          },
          "price": "10.00",
          "quantity": "1.000",
          "name": "Не gtin товар",
          "markup": "1.10",
          "discount": "2.40"
        }
      ],
      "payments": [
        {
          "payment_type": "cash",
          "value": "10"
        },
        {
          "payment_type": "cashless",
          "value": "5"
        }
      ]
    }
  },
  "type": "send"
}

Ответ:

{
  "type": "send",
  "data": {
    "header": {
      "uid": "20DDAEBDBD0A31E309894303",
      "number": 357,
      "date_time": "2025-03-01T17:40:45.794886+03:00",
      "shift_number": 78
    },
    "errors": null
  }
}

ik.service.token.rollback

create_rollback

Операция аннулирования

Входные данные: NewRollbackRequest

Возвращаемые данные: FiscalResponse


Важно: Для совершения данной операции требуется Авторизация в СКО

Важно: Для совершения данной операции требуется открытая смена

Важно: Для совершения данной операции смена должна быть открыта менее 24 часов

Важно: данная операция требует того, чтобы аннулируемый документ находился в текущей смене, а так же того, что чек не был аннулирован ранее

Важно: Для данного запроса поле currency игнорируется и может быть не передано

Важно: Доступно аннулирование только последнего документа, если он является документом продажи

Важно: Дополнительно можно передать поле rollback.target_num с указанием номера аннулируемого док-та продажи. Если переданный номер не совпадает с последним док-том продажи будет возвращена ошибка.


Примеры

Успех

Запрос:

{
  "address": "ik.service.token.rollback",
  "headers": {
    "action": "create_rollback",
    "token": "AVQ11031010703",
    "printer.dummy": ""
  },
  "data": {
    "rollback": {
      "header": {
        "cashier": "Кассир"
      }
    }
  },
  "type": "send"
}

Ответ:

{
  "type": "send",
  "data": {
    "header": {
      "uid": "F9BC5D1B0A3D061709894303",
      "number": 359,
      "date_time": "2025-03-01T17:50:25.365454+03:00",
      "shift_number": 78
    },
    "errors": null
  }
}

Ресторанный режим

1

create_or_edit_order

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

  1. В СКО записывается краткая информация о заказе - Сумма + Номер счёта, если имеется
  2. Если для заказа был распечатан счёт и вызван метод редактирования этого заказа, номер счёта будет сброшен
  3. При редактировании заказа, изменение суммы заказа влечет за собой увеличение счётчиков “Коррекции” или “Сумма заказов”
  4. Если заказ не был закрыт / отменен / оплачен, на момент закрытия смены он увеличивает счётчики “Перемещенных” заказов
  5. Детальная информация о заказе хранится на ФС. В случае ее повреждения и/или несоответствия данным в СКО требуется повторно вызвать этот метод. Если заказ существует в СКО и его сумма совпадает с известной - увеличения счётчиков не произойдет

Взаимодействие

Входные данные:

ПолеТипПримечание
idstringID заказа. Макс. длина - 36 символов
cashierstringКассир, работающий с заказом
tableu32Номер столика
placeu32?Номер места за столиком, если имеется
itemsМассив ItemМассив товарных позиций
markupMoney?Надбавка, если имеется
discountMoney?Скидка, если имеется
prepaymentPayment?Предоплата с указанием способа. На момент оплаты будет преобразовано в тип оплаты “Др. способы”

Ответ:

ПолеТипПримечание
errorsErrors?Объект с ошибками, не связанными с СКО, если они возникали

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

{
  "address": "ik.service.token.orders",
  "type": "send",
  "headers": {
    "action": "create_or_edit_order"
  },
  "data": {
    "id": "test_id",
    "cashier": "test",
    "table": 1,
    "items": [
      {
        "code": {
          "code": "1059429"
        },
        "price": "10.99",
        "quantity": "1.000",
        "name": "Вазелин"
      }
    ]
  }
}

Пример успешного запроса:

{
  "type": "send",
  "data": {
    "errors": null
  }
}

cancel_order

Отмена заказа

Данные

Входные данные:

{
  "id": "string"
}

В поле id передается идентификатор заказа для печати счёта

Возвращаемые:

ПолеТипПримечание
errorsErrors?Объект с ошибками, не связанными с СКО, если они возникали

get_orders_information

Получение информации о заказе, хранящейся в СКО

Входные данные: Отсутствуют

Ответ:

{
  "orders": {
    "test_id": {
      "sum": "10.99",
      "bill_number": null
    }
  }
}

Orders

ПолеТипПримечание
ordersMap<ID, OrderInformation>Словарь с информацией о заказами. Ключ - id заказа

OrderInformation

ПолеТипПримечание
sumMoneyСумма по заказу
bill_numberu32?Номер счёта по заказу, существует счёт по этому заказу

pay_order

Данные

Входные:

ПолеТипПримечание
order_idStringID заказа
paymentsМассив PaymentСпособы оплаты заказа. Перед началом фискализации в этот массив попадут данные из поля prepayment заказа. Тип способа оплаты у prepayment будет изменен на Other
bundleBundle?Доп. данные для передачи в СКО

Bundle

ПолеТипПримечание
unique_idString?ID операции
user_dataString?base64 пользовательские данные
commentsComments?Комментарии
emailsМассив StringЭмейлы для отправки чека
trade_point_informationString?Доп. информация о торговой точке, если требуется

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

{
  "address": "ik.service.token.orders",
  "type": "send",
  "headers": {
    "action": "pay_order",
    "token.trade_point.info": "Касса12",
    "printer.cut": false,
    "printer.feed": 0,
    "printer.dummy": "true"
  },
  "data": {
    "order_id": "test_id",
    "cashier": "test",
    "table": 1,
    "payments": [
      {
        "payment_type": "cash",
        "value": "10.99"
      }
    ]
  }
}

bill

Печать счёта.

Для корректной печати требуется передачи заголовком для работы с принтером

Входные данные:

{
  "id": "string",
  "comments": Comments?
}

В поле id передается идентификатор заказа для печати счёта

Используемые типы

Ответ:

{
  "type": "send",
  "data": {
    "number": 43,
    "errors": null
  }
}
  • number - сформированный / присвоенный номер счёта

Типы данных

Errors

ПолеТипПримечание
printingError?Ошибка печати
storageError?Ошибка работы с хранилищем данных

Error

ПолеТипПримечание
nameStringКод ошибки
descriptionStringТекст ошибки

Тип extra

[
"income", "discounts", "markups", "saleItemPrepayments"
]

Описание полей

  • income - накопленный оборот
  • discounts - скидки
  • markups - надбавки
  • saleItemPrepayments - авансовые платежи

Тип Version

{
  "version": "2.0.1",
  "kind": "tsrv",
  "build": "20250225.075316"
}
  • version - Версия ПК
  • kind - Тип ПК
  • build - Версия сборки API-слоя (tsrv)

Поле version отдается в формате SemVer.

Результат выполнения фискальной операции

{
  "repr": Repr?,
  "unique_id": String?,
  "header": {
    "uid": String,
    "number": Int,
    "date_time": String,
    "shift_number": Integer
  },
  "errors": Errors?
}

Поля:

ПолеТипПримечание
reprRepr?Результаты отрисовки чека и прочие доп. данные
unique_idString?Может отсутствовать. Уникальный ID операции
headerHeaderСодержит uid, number (номер док-та), date_time (в формате RFC3339), shift_number (номер смены)
errorsErrors?Ошибки, которые могли возникнуть после (!) фискализации

Repr

ПолеТипПримечание
esc_posString?Может отсутствовать. Содержит набор EscPos команд в base64 формате
textString?Может отсутствовать. Текстовое представление чека (без QR с УИ)
text_b64String?Может отсутствовать. Текстовое представление чека (без QR с УИ) в base64 формате
linkString?Может отсутствовать. Ссылка на чек

Тип PrintXReportReq

{
  "comments": Comments?
  "extra": Extra?
}

Тип CloseShiftRequest

{
  "comments": Comments?
}

Описание полей

Тип Sum

Данный тип представляет собой значение, с плавающей точкой, представленное в строковом виде.

В случае, если данное значение фигурирует во входных данных, оно обязано содержать 2 знака после запятой (иметь формат X.XX), даже если последние равны 0 (например: 12345.00)

На данный тип наложен ряд ограничений:

  1. Максимальное значение: 549755813887.99
  2. Минимальное значение: -549755813887.99

Данные ограничения продиктованы ограничениями протокола СККО.

Пример валидного значения Sum:

"12345.67"

Тип UID

Данный тип представляет собой строковое значение в HEX формате Уникального Идентификатора (УИ) кассового документа

Пример значения:

"8914D11E9BA4471D0A327BFB"

Тип DateTime

Данный тип представляет собой дату и время в строковом формате. В зависимости от выполняемого метода и данных может содержать или не содержать информацию о миллисекундах, однако обязательно содержит информацию о часовом поясе.

Примеры:

С миллисекундами:

"2021-09-13T10:17:35.123+03:00"

Без миллисекунд:

"2021-09-13T10:17:35+03:00"

Тип Currency

Возможные значения:

enum варианты значения*:

  • BYN

  • USD

  • RUB

  • EUR

  • список значений расширяется в зависимости от настроек сервера

Пример:

"BYN"

Тип TokenInformation

{
   serial: String,
   device_id: u32,
   organization: String,
   tax_number: u32,
   pin_code_length: u32,
   puk_code_length: u32,
   operator_code: u32,
   "trade_point_name": String?
}
  • serial - серийный номер СКО
  • device_id - Регистрационный номер ПК в СККО
  • organization - наименование компании, на которую зарегистрировано СКО
  • tax_number - УНП СХ
  • pin_code_length - длина PIN-кода требуемого для авторизации
  • puk_code_length - длина PUK-кода требуемого для авторизации
  • operator_code - код Оператора Программной Кассы в соответствии с реестром
  • trade_point_name - наименование торговой точки (отсутствует, если не было установлено)

Пример:

{
  "type": "send",
  "data": [
    {
      "device_id": 119026738,
      "operator_code": 910000001,
      "organization": "Общество с ограниченной ответственностью \"АЙЭМЛЭБ\"",
      "pin_code_length": 6,
      "puk_code_length": 8,
      "serial": "AVQ11159990839",
      "tax_number": 193141246,
      "is_configured": true,
      "is_compatible": true,
      "version": "1.17.643",
      "status": {
        "last_update": "2025-11-05T18:46:09.192369818+03:00",
        "block_reasons": []
      },
      "server_config": {
        "last_update": "2025-11-05T18:48:10.816893147+03:00",
        "chw_max_value": 21000,
        "trade_point": {
          "addr": "г. Минск УЛ. СКОРИНЫ ФРАНЦИСКА, 8",
          "name": "Офис Скорины"
        },
        "organization": "ООО \"АйЭмЛэб\""
      }
    }
  ]
}

Тип CashIn

{
  "currency": Currency,
  "cash": Sum
}

Используемые типы:

Пример:

{
  "cash": "25.46",
  "currency": "BYN"
}

Тип OldestDocument

{
  "uid": UID,
  "date" DateTime
}

Используемые типы:

Пример:

{
  "uid": "A50B7A727894C03707CF108F",
  "date": "2021-09-13T10:17:35+03:00"
}

Тип Pin

{
  "pin": String
}
  • pin - строковое представление PIN-кода

Пример:

{
  "pin": "16522"
}

Тип MinMaxReceipts

{
  min: u32,
  max: u32
}

Описание полей

  • min - номер первого документа в смене
  • max - номер последнего документа в смене

Пример


{
  "min": 5981,
  "max": 5981
}

Тип ReceiptRequest

{
  shift_number: u16?,
  number: u32
}

Описание полей

  • shift_number - опциональное поле номера смены, если не указано используется текущий номер смены
  • number - номер фискального документа в указанной/текущей смене

Пример

{
   "shift_number": null, 
   "number": 5981
}

Тип Comments

"comments": {
    "before": [ *Comment ]?,
    "after": [ *Comment ]?,
}

Описание полей

before - не обязательное поле, комментарии до заголовка чека

name - не обязательное поле, комментарии после UID чека

Используемые типы

Тип Comment

{
    "type:" CommentType,
    "content": String,
    "kind": CodeType?,
    "width": u8?,
    "height": u8?,
    "size": u8?,
    "align": Align?
}

Описание полей

type - тип комментария, может принимать значения: QR, TEXT, BARCODE

content - содержание комментария. В случае TEXT - utf-8 строка, в случае QR или BARCODE - base64 строка

kind - тип кода, может принимать значения: CODE128, EAN13, CODE39. Передается только, если type - BARCODE

size - размер QR-кода, передается только, если type - QR

width - ширина штрихкода, передается только, если type - BARCODE

height - высота штрихкода, передается только, если type - BARCODE

align - выравнивание, может принимать значения: LEFT, CENTER, RIGHT

Тип EscPosReq

{
  "b64_content": String,
  "reply_size": usize?
}

Описание полей

  • b64_content - EscPos команды в формате base64
  • reply_size - размер ожидаемого ответа. Если ответ не требуется, размер - 0, если значение данного поля null, то значением по умолчанию является 0

Тип Report

{
  uid: UID?,
  cashier: String?,
  device_id: u32,
  tax_number: u32,
  company_name: String,
  open_date: DateTime,
  close_date: DateTime?,
  number: u16,
  first_sale_number: u32,
  last_sale_number: u32,
  sales_count: u16,
  counters: [ *ReportCounter ]
}
  • uid - УИ. В случае, если это Z-отчет - обязательное поле
  • cashier - Имя кассира в Z-отчете - опциональное поле, в X-отчете всегда null
  • device_id - Регистрационный номер ПК в СККО
  • tax_number - УНП
  • company_name - Наименование организации
  • open_date - Дата открытия смены
  • close_date - Дата закрытия смены, присутствует только в Z-отчете
  • number - Номер смены
  • first_sale_number - Номер первого документа продажи в смене
  • last_sale_number - Номер последнего документа продажи в смене
  • sales_count - количество документов продаж
  • currency_counters - Массив сменных счетчиков, содержит информацию по каждой валюте, по которой совершались операции в смене
  • total_income - накопленный оборот
  • additional.third_party - счетчики операций в пользу 3-х лиц

Используемые типы:

Пример:

{
  "type": "send",
  "data": {
    "close_date": "2024-07-18 11:17:03",
    "company_name": "ООО \"АЙЭМЛЭБ\"",
    "currency_counters": {
      "BYN": {
        "additional": {
          "third_party": {
            "rollback": {
              "count": 1,
              "sum": "6.00"
            },
            "total": {
              "count": 1,
              "sum": "6.00"
            }
          }
        },
        "client_withdraws": {
          "count": 1,
          "sum": "1.00"
        },
        "deposits": {
          "count": 1,
          "sum": "10.00"
        },
        "marking_si": {
          "count": 0,
          "sum": "0.00"
        },
        "marking_ukz": {
          "count": 0,
          "sum": "0.00"
        },
        "money_backs": {
          "card": "0.50",
          "cash": "0.50",
          "count": 1,
          "other": "0.00",
          "sum": "1.00"
        },
        "rollbacks": {
          "card": "6.00",
          "cash": "0.00",
          "count": 1,
          "other": "0.00",
          "sum": "6.00"
        },
        "sales": {
          "card": "45.00",
          "cash": "0.00",
          "count": 10,
          "other": "0.00",
          "sum": "45.00"
        },
        "si_refund": {
          "count": 0,
          "sum": "0.00"
        },
        "si_rollback": {
          "count": 0,
          "sum": "0.00"
        },
        "ukz_refund": {
          "count": 0,
          "sum": "0.00"
        },
        "ukz_rollback": {
          "count": 0,
          "sum": "0.00"
        },
        "withdraws": {
          "count": 2,
          "sum": "8.50"
        }
      }
    },
    "first_sale_number": 4,
    "last_sale_number": 13,
    "number": 1,
    "open_date": "2024-07-18 07:49:17",
    "repr": {},
    "sales_count": 10,
    "serial_number": "AVQ11169990670",
    "tax_number": 193141246,
    "total_income": {
      "BYN": "45.00"
    },
    "uid": "791261D74283114906A6E41E"
  }
}

Тип ReportCounter

"currency_counters": {
    "BYN": {
        "additional": {
            "third_party": {
                "rollback": {
                    "count": u16
                    "sum": Sum
                },
                "total": {
                    "count": u16
                    "sum": Sum
                }
            }
        },
        "client_withdraws": {
            "count": u16
            "sum": Sum
        },
        "deposits": {
            "count": u16
            "sum": Sum
        },
        "marking_si": {
            "count": u16
            "sum": Sum
        },
        "marking_ukz": {
            "count": u16
            "sum": Sum
        },
        "money_backs": {
            "card": Sum
            "cash": Sum
            "count": u16
            "other": Sum
            "sum": Sum
        },
        "rollbacks": {
            "card": Sum
            "cash": Sum
            "count": u16
            "other": Sum
            "sum": Sum
        },
        "sales": {
            "card": Sum
            "cash": Sum
            "count": u16
            "other": Sum
            "sum": Sum
        },
        "si_refund": {
            "count": u16
            "sum": Sum
        },
        "si_rollback": {
            "count": u16
            "sum": Sum
        },
        "ukz_refund": {
            "count": u16
            "sum": Sum
        },
        "ukz_rollback": {
            "count": u16
            "sum": Sum
        },
        "withdraws": {
            "count": u16
            "sum": Sum
        }
    }
}
  • currency_counters - валюта счетчика

  • count - кол-во операций в валюте

  • sum - сумма продаж в валюте

  • card - сумма по карте

  • cash - сумма за наличные

  • other - сумма другими способами

  • third_party - счетчик операций в пользу 3х лиц

  • total - сумма продаж в валюте в пользу 3х лиц

  • sales - счетчик продаж

  • money_backs - счетчик возвратов

  • rollback - счетчик аннулирования

  • withdraws - счетчик изъятий

  • client_withdraws - счетчик выдачи

  • deposits - счетчик внесений

  • marking_si - счетчик продаж СИ

  • marking_ukz - счетчик продаж УКЗ

  • si_refund - счетчик возврата СИ

  • si_rollback - счетчик аннулирования СИ

  • ukz_refund - счетчик возврата УКЗ

  • ukz_rollback - счетчик аннулирования УКЗ

Используемые типы:

Тип TaxRate

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

  • tax0
  • tax10
  • tax20
  • tax25

Пример:

"tax0"

Тип TokenChequeHeader

{
  "cashier": String,
  "currency": Currency?
}

Описание полей

  • cashier - имя кассира. Не может превышать 20 символов длинной, не может быть пустым. Пробелы в начале и конце строки удаляются и таким образом гарантируется, что не будет передано пустое имя кассира
  • currency - Валюта совершаемой операции, если не передано - byn

Используемые типы

Тип Items

{
  "id": String?,
  "price": Sum,
  "quantity": Quantity,
  "discount": Sum?,
  `discount_info`: Discount_info?
  "markup": Sum?,
  `markup_info`: Markup_info?
  "code": ItemCode,
  "section": ItemSection,
  "name": String,
  "tax_rate": TaxRate?
}

Важно!: Поле name поддерживает только символы кодировки CP1251.

Описание полей

  • id - клиентский идентификатор товарной позиции, на текущий момент не используется сервисом
  • price - Цена товарной позиции за 1 единицу
  • quantity - Кол-во товарной позиции
  • discount - Скидка товарной позиции. В случае, если скидка не должна быть применена, должно быть передано значение null
  • markup - Надбавка товарной позиции. В случае, если надбавка не должна быть применена, должно быть передано значение null
  • code - Описание Кода товарной позиции
  • section - Описание Секции товарной позиции
  • name - Наименование товарной позиции. Не может быть пустым. Максимальная длина: 128 символов
  • tax_rate - НДС. Важно помнить, что НДС0 и отсутствие НДС - разные вещи.
  • discount_info / markup_info Наименования скидок/надбавок - позволяет указывать наименования и ключи группировки скидок/надбавок

Используемые типы

Тип ItemCode

"code": {
  "scan": [
    { "si": "SiTest" },
    { "ukz": "UKZTest" },
    { "gtin": "12134" }
  ]
}

Описание полей

code - Опциональное поле. Информация о коде и типе кода тов. позиции Представляет из себя обьект следующего формата: { "типКода": "значениеКода" } типКода может иметь следующие значения: code - без GTIN/EAN gtin - GTIN/EAN service - Услуга prepayment - Аванс

Важно! Вне зависимости от типа кода значениеКода может содержать исключительно цифры.

Важно! В случае, если типКода указан как gtin, максимальная длина значенияКода равна 14 символам. Для остальных случаев ограничение в 13 символов.

Важно! В маркировке встречается символ GS. Его требуется передавать как \u001D.

типКода так же может быть установлен в значение scan. В этом случае значениеКода передается как массив следующего формата: [ { "типСкана": "значениеСкана" } ] Где типСкана может иметь следующие значения: si - маркировка СИ ukz - маркировка УКЗ unknown - неизвестный тип маркировки gtin - GTIN товара

Тип ItemSection

"section": {
    "code": u8,
    "name": String?,
}

Описание полей

code - не обязательное поле, принимает значение от 0 до 255, 0 если номер секции отсутствует.

name - не обязательное поле, наименование секции для оторажения на чеке

Тип Payment

{
  "payment_type": PaymentType,
  "name": String?,
  "value": Sum,
  "ref": String?,
  "currency": String?
}

Описание полей

  • payment_type - Тип платежа
  • name - Наименование платежа. Может отсутствовать
  • value - Сумма платежа
  • ref - Идентификатор платежного средства. Является опциональным полем и может быть использовано для идентификации RRN банковской транзакции, информации о банковском платеже, либо номере сертификата
  • currency - Валюта способа оплаты (применяется только в магазинах беспошлинной торговли)

Используемые типы

Change

Тип Change

{
  "currency": String?,
  "sum": Sum
}

Описание полей

  • currency - Валюта сдачи
  • sum - Сумма сумма сдачи

Используемые типы

Тип Dfs

{
  "customer": String?,
  "doc_number": String?,
  "train": String?,
  "flight": String?
}

Описание полей

  • customer - Собственное имя и фамилия покупателя. Может отсутствовать
  • doc_number - Номер документа для выезда за границу. Может отсутствовать
  • train - Номер поезда. Может отсутствовать
  • flight - Номер авиарейса. Может отсутствовать

Тип PaymentType

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

  • cash
  • cashless
  • other

Пример:

"cashless"

Тип Quantity

Данный тип представляет собой значение, с плавающей точкой, представленное в строковом виде.

В случае, если данное значение фигурирует во входных данных, оно обязано содержать 3 знака после запятой (иметь формат X.XXX), даже если последние равны 0 (например: 12345.000)

На данный тип наложен ряд ограничений:

  1. Максимальное значение: 16777.215
  2. Минимальное значение: 0

Данные ограничения продиктованы ограничениями протокола СККО.

Пример валидного значения Quantity:

"12345.607"

Тип DiscountInfo

Скидка

"discount_info": {
    "name": String?
}

Надбавка

"markup_info": {
    "name": String?
}

Описание полей

name - не обязательное поле, наименование скидки/надбавки

Тип State

{
  "last_uid": UID,
  "shift_state": ShiftState?
}

Описание полей

  • last_uid - УИ последнего документа
  • shift_state - информация о смене. Отсутствует в случае, если смена закрыта

Используемые типы

Тип Status

Возможные значения:

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

  • unknown
  • active
  • blocked

Пример:

"active"

Тип Status

{
"type": "send",
"data": {
    "blockReasons": blockReasons?,
    "chwMaxValue": Int?,
    "companyName": String?,
    "isActive": Boolean?,
    "rn": Int?,
    "taxNumber": Int?,
    "tradeAddr": String?,
    "tradeName": Strint?
    }
}

Описание полей

  • blockReasons - причина блокировки возвращает объект {code: String, message: String}
  • chwMaxValue - максимальное значение суммы выдачи в копейках
  • companyName - название организации
  • isActive - статус блокировки
  • rn - рег. номер кассы
  • taxNumber - УНП
  • tradeAddr - адрес торговой точки
  • tradeName - название торговой точки

Тип ShiftState

{
  "next_cheque_number": u32,
  "shift_number": u16,
  "shift_open_date": DateTime,
  "cash_in": Map<Currency, Sum>,
  "user_data": String?,
  "trade_point_information": String?
}

Описание полей

  • next_cheque_number - номер следующего документа
  • shift_number - номер текущей смены
  • shift_open_date - Дата-время открытия смены
  • cash_in - Информация о наличных в смене. Представляет собой объект, где ключом является наименование валюты и значением значение наличных в кассе

Доп поля доступные с версии 2.x:

  • user_data - Пользовательские данные в base64 формате
  • trade_point_information - Информация о торговой точке

Внесение/Изъятие/Выдача

Тип NewSumChequeRequest

{
  "sum_cheque_data": SumChequeData,
  "comments": Comments?,
  "user_data: String?
}

Описание полей

  • sum_cheque_data - Информация по чеку
  • comments - Комментарии к операции
  • user_data - пользовательские данные, base64 строка не более 128 байт

Используемые типы

Тип SumChequeData

{
  "header": TokenChequeHeader,
  "sum": Sum,
  "id": String?
}

Описание полей

  • header - описание заголовка чека
  • sum - сумма операции
  • id - идентификатор операции

Используемые типы

Продажа

Тип SaleRequest

{
  "sale": NewSale,
  "comments": Comments?
}

Описание полей

  • sale - описание продажи
  • comments - комментарии к чеку

Используемые типы

Тип NewSale

{
  "header": TokenChequeHeader?,
  "items": [ *Item ],
  "payments": [ *Payment ],
  "cheque_discount": Sum,
  "cheque_markup": Sum,
  "tp_tax_number: u32?,
  "id": String?,
  "change": [ *Change* ]?,
  "dfs": Dfs?
}

Описание полей

  • header - описание заголовка чека
  • items - массив товарных позиций
  • payments - массив способов оплат
  • cheque_discount - скидка по чеку
  • cheque_markup - надбавка по чеку
  • tp_tax_number - УНП 3-го лица
  • id - идентификатор операции

Дополнительные поля. Применяется только в магазинах беспошлинной торговли

  • change - массив сумм и валют сдачи
  • dfs - иная обязательная информация

Используемые типы

Возврат

Тип NewMoneyBack

{
  "header": TokenChequeHeader,
  "items": [ Items ],
  "payments": [ *Payment* ],
  "id": String?
}

Описание полей

Используемые типы

Тип NewMoneyBackRequest

{
  "money_back": NewMoneyBack,
  "comments": Comments?
}

Описание полей

Используемые типы

Аннулирование

Тип NewRollback

{
  "header": TokenChequeHeader,
  "target_num": u32?,
  "id": String?
}

Описание полей

  • header - заголовок чека. Для данного запроса поле currency игнорируется.
  • target_num - номер чека, который необходимо аннулировать. Используется для валидации
  • id - идентификатор операции

Используемые типы

Тип NewRollbackRequest

{
  "rollback": NewRollback,
  "comments": Comments?
}

Описание полей

  • rollback - информация для совершения операции аннулирования

Используемые типы

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

Тип OpenShiftRequest

{
  "mode": Mode?
}

Возможные значения mode. Необязательное поле:

  • default или null - режим смены ретейл
  • restaurant - режим смены ресторан (обслуживание за столиками)
  • dfs - режим смены МБТ (магазин беспошлинной торговли)

Используемые типы

Тип ModeDfs

{
    "kind": Kind?,
    "rates": Rates?
}

Описание полей

  • kind - тип смены МБТ
  • rates - курсы валют в смене

Возможные значения Kind:

  • 0 - указывается для магазинов типа 1 и магазинах типа 3
  • 1- указывается для магазинов типа 2

Используемые типы

Тип Rates

{
    "USD": {
      "sum": Sum,
      "per": Per
    }
}

Описание полей

  • currency - указывается валюта для применения заданных курсов
  • sum - значение курса валюты
  • per - количество единиц иностранной валюты,

  • Для работы в режиме магазина беспошлинной торговли (МБТ), при каждом открытии смены требуется ввести курсы валют:
    • Значение устанавливается для каждой валюты отдельно в эквиваленте добавленных валют с бэкофиса кассы с указанием суммы валюты при пересчете курса (за 1, 10, 100);
    • Курсы устанавливаются в BYN и передаются с 4 знаками после запятой;

Возможные значения Per:

  • 1
  • 10
  • 100

Используемые типы

Changelog

Изменения от 2025-12-15

  • Удалены разделы, относящиеся к версии 1.8.x
  • Добавлены типы относящиеся к режиму МБТ:
  • В NewSale добавлены поля для режима МБТ
  • Для Windows добавлена команда detach-avtpcr, подробнее в CLI
  • Добавлена информация про правила округления в режиме МБТ в Проверки
  • Добавлены эндпоинты для обновления прошивки СКО в Firmware
  • Добавлена возможность передавать наименования скидок/надбавок в Item
  • Добавлена возможность вывода кол-ва и суммы авансовых платежей в X/Z-отчётах

Изменения от 2025-03-01

  • Ошибки
    • Дополнен раздел с пояснениями для версии 2.x
  • Общее описание принципов взаимодействия
    • Дополнено описание разделение ошибок для версии 2.x
  • Список поддерживаемых заголовков
    • Удалены устаревшие заголовки
  • Идентификатор операции
    • Операция больше не поддерживается в том же виде.
  • Работа с СКО
    • Удалены устаревшие методы и разделы
    • Добавлено описание работы в случае версий 2.x+
  • Служба (Windows)
    • Раздел помечен для 1.8.х
  • Удалены разделы и методы приостановки и возобновления отправки док-в
  • Сервисы
    • Для версии 2.х параметр token не является обязательным, если подключено 1 СКО
  • Получение версии ПО
    • Добавлен пример для версии 2.x
    • Обновлена информация о типе данных Version
  • Авторизация (authorize)
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
  • Смена пин-кода (change_pin)
    • Метод помечен для версии 1.8.х. В 2.х отсутствует
  • logout
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
  • Добавлен тип FiscalResponse
  • Выдача (client_withdraw)
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
    • Убраны осуществляемые проверки
    • Добавлен пример возвращаемого ответа для v2.x
    • Добавлено указание возвращаемого типа для v2.x
  • Внесение (deposit)
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
    • Убраны осуществляемые проверки
    • Добавлен пример возвращаемого ответа для v2.x
    • Добавлено указание возвращаемого типа для v2.x
  • Изъятие (withdraw)
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
    • Убраны осуществляемые проверки
    • Добавлен пример возвращаемого ответа для v2.x
    • Добавлено указание возвращаемого типа для v2.x
  • Возврат (create_money_back)
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
    • Убраны осуществляемые проверки
    • Добавлен пример возвращаемого ответа для v2.x
    • Добавлено указание возвращаемого типа для v2.x
  • Аннулирование (create_rollback)
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
    • Убраны осуществляемые проверки
    • Добавлен пример возвращаемого ответа для v2.x
    • Добавлено указание возвращаемого типа для v2.x
    • Добавлена возможность передачи номера аннулируемого док-та для проверки соответствия с фронт-офисом
  • Продажа (create_sale)
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
    • Убраны осуществляемые проверки
    • Добавлен пример возвращаемого ответа для v2.x
    • Добавлено указание возвращаемого типа для v2.x
    • Убраны примеры мат. вычислений
  • Закрытие смены (close_shift)
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
  • Открытие смены (open_shift)
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
    • Добавлено описание входных значений для версии v2.x
  • Получение X-отчёта (get_x_report)
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
  • Получение копии Z-отчёта
    • В 2.x версии метод отдает информацию только в закрытой смене и только по последней закрытой смене. Передача номера смены не требуется
  • Открытие смены (create_sale)
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
  • Получение наличных в СКО (create_sale)
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
  • Печать счёта
    • Изменен входящий тип данных
  • Отмена заказа
    • Изменен входящий тип данных
  • Печать отложенного чека
    • Метод устарел и не поддерживается. Помечен “только для версии” 1.8.x
  • Получение самого старого док-та в СКО (get_oldest_document)
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
  • Получение номера первого и последнего док-та в смене
    • Не поддерживается в 2.x
  • Получение ранее фискализированного чека
    • Не поддерживается в 2.x
  • Получение кол-во неотправленных док-в
    • Добавлено описание того, как формируется выходное значение
  • ShiftState
    • Добавлены поля trade_point_information и user_data
  • TokenInformation2
    • Добавлен тип
  • Получение информации об СКО
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
    • Добавлено уточнение типа данных, возвращаемого на версии 2.x
  • Получение СКО
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
    • Добавлено уточнение типа данных, возвращаемого на версии 2.x
  • Получение номера след. док-та
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
  • Печать ранее фиск. док-та
    • Убраны примеры неверных запросов и примеры ошибок (коды ошибок отличаются на 2.х и их кол-во увеличивается)
  • Установка наименования торг. точки
    • Метод помечен как для версии 1.8.0. Недоступен, т.к. информация обязана запрашиваться от СККО
  • Доп. возможности
    • Добавлено описание доп. возможностей для версии 2.x

Изменения от 2025-02-03

Изменения от 2024-07-01

Устревшие страницы документации:

Устаревшие запросы:

Работа с сессиями:

  • удалено action init_session
  • удалено action clear_session
  • удалено action get_active_session_hash
  • удалено Header sid

Работа с принтерами и отрисовкой чеков

  • удалено Header printer.code.policy
  • удалено Header repr.text
  • удалено Header repr.html
  • удалено Header dreceipt.emails

Кассовые операции:

  • удалено поле extra
  • удалено action on_cancel
    • Тип CancelRequest
  • удалено поле target_num для операции create_rollback
  • удален Тип CloseShiftRequest
    • удален Тип CloseShiftData

Комментарии:

  • удалено поле comments
    • удален Тип MoneyBackComments
    • удален Тип PaymentsComments
    • удален Тип ReportComments
    • удален Тип RollbackComments
    • удален Тип SaleComments
  • удален Тип BlockComments
  • удален Тип HeaderComments
  • удален Тип ItemsBlockComments

Временно недоступны операции для Ресторанного режима:

  • Тип OrderRequest
  • Тип Order
  • Тип PayOrderRequest
  • Тип PrintBillRequest

Изменения:

  • Для операции create_money_back поле Item заменено на Items и теперь принимает массив
  • Изменения в структуре полей типа Items:
    • добавлено поле section:
      • добавлено поле code,
      • добавлено поле name.
    • изменено поле code:
      • удалено поле type,
      • удалено поле value,
      • добавлено поле scan.
    • добавлено поле markup
    • поле discount больше не принимает отрицательные значения
  • Добавлено поле cheque_markup
  • Добавлено поле tp_tax_number
  • Для операции close_shift больше не требуется поле cashier
  • Добавлено новый action в Header create_client_withdraw - операция Выдачи наличных
  • Изменения в поле type_id и Типа ChequeType
    • новый тип client_withdraw_v2
    • изменено deposit -> deposit_v2
    • изменено money_back -> money_back_v2
    • изменено rollback -> rollback_v2
    • изменено sale -> sale_v2
    • изменено withdraw -> cashier_withdraw_v2
    • изменено z_report -> z_report_v2 для ChequeType
  • изменено counters -> currency_counters и состав данных в сменных счетчиках
  • поле cashier количество символов увеличено до 20

Ошибки

Добавлены ошибки:

  • AVQFR_BAD_DOCUMENT_FORMAT = “bad document format”
  • AVQFR_CH_WITHDRAW_MAX_SUM = ‘Сумма выдачи наличных держателю превышает максимально допустимую’
  • AVQFR_CH_WITHDRAW_ONLY_BYN = ‘Выдача наличных держателю возможна только в белорусских рублях’
  • AVQFR_MAX_DOC_COUNT_OVERFLOW = ‘Превышено максимальное количество документов в смене’
  • AVQFR_TOO_MANY_ITEMS = ‘Превышено максимальное количество позиций в документе или размер документа слишком большой’
  • CRT_MISSING_LEGAL_ADDR = “missing legal address in certificate”
  • TIN_ONLY_SALE_ROLLBACK = “rollback can only be applied to sale”
  • TIN_MARKING_QUANTITY_1 = “marking quantity should be 1”
  • TIN_MULTIPLE_CASH_PAYMENTS = “multiple cash payments”
  • TIN_TOO_MANY_MARKING_CODES = “too many marking codes”
  • TIN_MULTIPLE_MARKING_CODES = “multiple marking codes”
  • TIN_MARKING_CODE_LEN = “marking code len is exhausted”
  • TIN_MARKING_CODE_WITHOUT_GTIN = “marking code without gtin”
  • TIN_TOO_MANY_DISCOUNTS = “too many discounts”
  • TIN_TOO_MANY_MARKUPS = “too many markups”
  • TIN_EMPTY_ITEMS = “empty items”
  • TIN_MISSING_LAST_SALE = “Отсутствует последний документ продажи”

Удалены ошибки:

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

Изменение от 2022-08-31

Пример ответа со всеми переданными заголовками repr.*:

{
  "type": "send",
  "data": {
    "header": {
      "cashier": "Test",
      "company_name": "ИП Моров А.М.",
      "currency": "BYN",
      "date_time": "2022-08-31T09:56:22.794436+03:00",
      "device_id": 131010705,
      "number": 10398,
      "serial_number": "AVQ11031010705",
      "shift_number": 878,
      "tax_number": 191832203,
      "trade_point_name": null,
      "type_id": "deposit",
      "uid": "1A5663901D4B4CE607CF1091"
    },
    "sum": "15.00",
    "repr": {
      "link": "https://receipts.test.imlab.by/?documentId=1A5663901D4B4CE607CF1091",
      "esc_pos": "G3QRICAgICAgICAgICAgICAgICCIjyCMruCuoiCALowuICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgk42POiAxOTE4MzIyMDMgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KG0UBICAgICAgICCNhSCfgoufhZKRnyCPi4CShYaNm4wghI6Kk4yFjZKOjCAgICAgICAgG0UACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIISuquOspa3iIOClo6jh4uCg5qioIK6vpeCg5qioIKKtpeGlrajvICAgICAKICAgICAgICAgICAgICAgICAgICD8IDEwMzk4ICAgICAgICAgICAgICAgICAgICAgChtFAZCloy78IIqg4eHrOiAbRQAxMzEwMTA3MDUgG0UBh6CiLvwgkYqOOiAbRQBBVlExMTAzMTAxMDcwNQobRQGCoKvu4qA6IBtFAEJZTiAgICAbRQGErqot4iCnoKrg6+I6IBtFADMxLjA4LjIwMjIgMDk6NTY6MjIKG0UBiqDh4ajgOhtFAC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5UZXN0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQobRQGCraXhpa2uOhtFAC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMTUuMDAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICCTiDogMUE1NjYzOTAxRDRCNENFNjA3Q0YxMDkxICAgICAgICAgIAobYTEdKGsDADFDAx0oawMAMUUxHShrGwAxUDAxQTU2NjM5MDFENEI0Q0U2MDdDRjEwOTEdKGsDADFRMAoKCgoKCh1WAQ==",
      "html": "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ИП&nbsp;Моров&nbsp;А.М.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;УНП:&nbsp;191832203&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>------------------------------------------------<br/><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;НЕ&nbsp;ЯВЛЯЕТСЯ&nbsp;ПЛАТЕЖНЫМ&nbsp;ДОКУМЕНТОМ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b><br/>------------------------------------------------<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Документ&nbsp;регистрации&nbsp;операции&nbsp;внесения&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;№&nbsp;10398&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><b>Рег.№&nbsp;Кассы:&nbsp;</b>131010705&nbsp;<b>Зав.№&nbsp;СКО:&nbsp;</b>AVQ11031010705<br/><b>Валюта:&nbsp;</b>BYN&nbsp;&nbsp;&nbsp;&nbsp;<b>Док-т&nbsp;закрыт:&nbsp;</b>31.08.2022&nbsp;09:56:22<br/><b>Кассир:</b>.....................................Test<br/>------------------------------------------------<br/><b>Внесено:</b>...................................15.00<br/>------------------------------------------------<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;УИ:&nbsp;1A5663901D4B4CE607CF1091&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>",
      "text": "                 ИП Моров А.М.                  \n                 УНП: 191832203                 \n------------------------------------------------\n        НЕ ЯВЛЯЕТСЯ ПЛАТЕЖНЫМ ДОКУМЕНТОМ        \n------------------------------------------------\n     Документ регистрации операции внесения     \n                    № 10398                     \nРег.№ Кассы: 131010705 Зав.№ СКО: AVQ11031010705\nВалюта: BYN    Док-т закрыт: 31.08.2022 09:56:22\nКассир:.....................................Test\n------------------------------------------------\nВнесено:...................................15.00\n------------------------------------------------\n          УИ: 1A5663901D4B4CE607CF1091          \n\n"
    }
  }
}

Изменения от 2022-04-18

  • Добавлено описание заголовка dreceipt.emails в разделе Заголовки
  • Добавлено описание заголовка printer.style в разделе Заголовки
  • Добавлено описание заголовка printer.prefix в разделе Заголовки
  • Добавлено поле cash_in в типе ShiftState
  • Исправлено описание поведения в методе получения наличных СКО
  • Добавлено описание поля link в SaleRequest
  • Добавление описание заголовка printer.escpos.required в разделе Заголовки

Изменения от 2022-02-09

Документация:

Изменения от 2022-02-02:

Документация: