
Ещё одному клиенту на Odoo 10 нужно было, чтобы Точка продаж (POS) умела пробивать фискальный чек и принимать оплату картой на физической смарт-кассе Эвотор — без ручного дублирования каждой продажи в отдельном приложении кассы.
Важное ограничение — сразу и честно
У Эвотора нет публичного облачного API, который позволял бы стороннему серверу (в данном случае Odoo) удалённо приказать конкретному физическому терминалу напечатать чек или запустить оплату картой на встроенном эквайринге. Печать и эквайринг на конкретной кассе доступны только приложению, установленному прямо на самом терминале — это отдельная Android-разработка на SDK «Эвотор.Терминал для партнёров», публикуемая через Эвотор.Маркет, а не то, что можно закрыть одним модулем Odoo.
Поэтому мы полностью реализовали ту половину интеграции, которую можно сделать средствами Odoo, и определили чёткий REST-контракт, под который позже можно написать приложение-компаньон на терминал.
Где искать в интерфейсе
Точка продаж → Конфигурация → <нужная точка> → вкладка «Эвотор»: включить «Пробивать чеки на Эвоторе», указать UUID магазина и терминала (берутся из личного кабинета Эвотора, раздел «Оборудование»), нажать «Сгенерировать» для токена доступа, выбрать журналы для наличных и оплаты картой.
Как это работает
- Кассир пробивает продажу в POS как обычно. Как только заказ оплачен, Odoo сам собирает JSON с позициями, ставками НДС и разбивкой суммы по наличным/карте — и ставит чек в очередь Эвотора. От кассира здесь ничего не требуется.
- Приложение на терминале (или пока его нет — сам кассир) забирает очередь через REST-эндпоинт
GET /pos_evotor/v1/receipts/pending— до 50 чеков за раз, каждый переходит в статус «отправлен». - После того как чек фактически пробит на кассе, эндпоинт
POST /pos_evotor/v1/receipts/ackвозвращает в Odoo фискальные данные — номера ФН/ФД/ФП и номер чека — либо текст ошибки.
Статус каждого чека, фискальные данные и текст ошибки видны прямо в карточке заказа POS — там же кнопка «Вернуть в очередь Эвотора» для чеков, зависших с ошибкой. Отдельный журнал в меню Точка продаж → Журнал обмена Эвотор собирает историю обмена для диагностики. Фоновая задача каждые 5 минут возвращает в очередь чеки, которые терминал забрал, но не подтвердил дольше заданного тайм-аута — на случай обрыва связи.
Что дальше
Код модуля закоммичен в репозиторий, версия 10.0.1.0.0. Дальше — на выбор: обрабатывать очередь чеков как есть (кассир сверяет чек по уникальному идентификатору вручную на терминале), либо довести дело до полной автоматизации и написать под SDK Эвотора отдельное Android-приложение-компаньон, которое будет опрашивать REST API этого модуля и печатать чек/запускать эквайринг без участия кассира.