Чуйгун
Техническая документация

Печать (print-agent)

Модель работы локального print-agent, принтер XPrinter XP-T80Q, установка на месте, критический фикс кириллицы и шаблоны чеков.

Модель работы

Планшеты и касса не печатают напрямую. Заказ → Supabase Realtime → print-agent (Node.js daemon на ноутбуке кассы, в той же Wi-Fi) → термопринтер по LAN → чек.

  • Слушает status accepted → печатает. Локальная очередь на LowDB при offline, ретрай каждые 30 сек (#20).
  • API на Fastify: /api/health, /api/test; веб-дашборд http://localhost:9090.
  • Печатает кухонный ярлык и предчек — это не фискальный чек ГНС (фискальный — отдельная ККМ, зона заказчика).
  • print-agent не в workspaces монорепо — живёт локально на кассе, зависимости изолированы, к Cloudflare отношения не имеет.

Принтер XPrinter XP-T80Q (#39)

  • Интерфейс USB + LAN (рекомендуется LAN).
  • Скорость 200 мм/с, бумага 80 мм термолента.
  • Протокол ESC/POS, порт TCP 9100, 48 символов/строку (Font A).
  • Справочник xprinter-80-series.md.

Модель подтверждена по наклейке; отменяет прежние упоминания XP-T80A (ARCHITECTURE) и XP-N160II (старое ТЗ).

Установка на месте (кратко)

  1. Заправить термоленту (термослой к головке — проверка царапаньем ногтем).
  2. LAN-кабель в роутер → self-test (выкл → зажать FEED → вкл) → записать IP → закрепить статически (DHCP-резерв по MAC).
  3. Node.js 20+ на ноутбук, скопировать print-agent, ping <IP> проходит.
  4. .env (значения — см. закрытый файл доступов): SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY (секрет!), PRINTER_TYPE=xprinter, PRINTER_HOST=tcp://<IP>:9100, WEB_UI_PORT=9090.
  5. npm install && npm run dev → в логе Agent started, listening :9090.
  6. Health: GET /api/healthsupabase: connected, printer: online. Тест: POST /api/test.
  7. E2E: тестовый заказ → accepted → кухонный ярлык печатается → «Печать предчека» → предчек; offline-очередь: выключить принтер → заказ → включить → допечатывается.
  8. Автозапуск: Windows install-windows.bat (нужен nssm), macOS install-macos.sh.

Кириллица — критический фикс (withCyrillic, #46, #51)

Проблема: XP-T80Q залипает в китайском двухбайтовом режиме и печатает кириллицу иероглифами (GB18030). Одного FS . мало — принтер запоминает режим и релапсит на длинном чеке или после смены размера шрифта.

Решение: перед текстом слать сырую последовательность FS . + FS C 0 + ESC t 17 (байты 0x1C 0x2E 0x1C 0x43 0x00 0x1B 0x74 0x11) — принудительный однобайтовый режим + кодовая страница PC866.

Разовый сброс сверху чека не спасал → обёртка withCyrillic(printer) через Proxy шлёт эту последовательность перед каждым println / print / leftRight. Проверено на железе: с полной тройкой — чистый русский, без — иероглифы.

Шаблоны чеков (#49, #50)

Кухонный (renderTicket)

Cook-first по research Toast/KDS: тип + № крупно, количество СЛЕВА (2x Плов), блюда double-height, без цен и ИТОГО, повтор №N внизу, логотип убран. Per-item comment печатается под блюдом normal size (#56).

Предчек гостю (renderClientReceipt)

Бренд ЧУЙГУН / ЗАКАЗ № / ИТОГО крупно (double H+W), позиция = название + 2 x цена … сумма, дата/время для аудита, дисклеймер «Не является фискальным чеком».

Комментарий повару в гостевом чеке НЕ печатается — только в кухонном.

На этой странице