Процесс выполнения операции
Общий сценарий
Взаимодействие ПО ККМ с LP Drive следует следующей последовательности:
- ПО ККМ вызывает метод нужной операции (например,
lpdrive_sale). - LP Drive валидирует входные параметры. При ошибке валидации транзакция не создаётся.
- Если
transaction_idне передан — LP Drive генерирует UUID и использует его во всех последующих сообщениях. - LP Drive запускает обработку операции.
- В процессе выполнения LP Drive передаёт промежуточные статусы через callback и/или помещает их в очередь polling.
- При необходимости выбора кассира LP Drive отправляет
action_request. ПО ККМ отвечает вызовомlpdrive_send_choice(). - По завершении операции LP Drive сохраняет финальный ответ в объекте транзакции.
- ПО ККМ получает финальный ответ через
lpdrive_get_status()при получении статусаLPDRIVE_STATUS_FINAL.
Модели получения статусов
LP Drive поддерживает два независимых механизма получения промежуточных статусов:
| Механизм | Описание | Когда использовать |
|---|---|---|
| Callback | LP Drive вызывает зарегистрированную функцию при появлении каждого статуса. Вызовы последовательны, без повторного входа. | Когда нужна мгновенная реакция на статус из отдельного потока. |
| Polling | ПО ККМ периодически вызывает lpdrive_get_status() и получает последний известный статус. Если статуса нет — возвращается EMPTY. | Когда архитектура ПО ККМ не предполагает callback или требует pull-модели. |
Ограничения параллельности
- Одновременно допускается только одна активная кассовая транзакция на экземпляр LP Drive.
- Повторный вызов кассового метода при наличии активной транзакции будет отклонён с кодом занятости (
LPDRIVE_STATUS_BUSY). - Служебные методы (
lpdrive_get_status,lpdrive_cancel,lpdrive_send_choice) могут вызываться параллельно с активной транзакцией.