food-market/docs/pos.md
nns 92befd1f05
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
docs(pos): мгновенный старт — замеры до/после, МойСклад-разбор, установщик Windows
- docs/moysklad-pos-startup.md: прямой замер «Кассы МойСклад» (Celeron N4120, 99–113 с
  до готовности; каталог перезаписывается целиком, полный JSON+FTS) — подтверждённые
  причины, не догадки.
- docs/pos-progress.md: раздел «Мгновенный старт» — что сделано (касса из локальной базы +
  фоновый синк, дельта остатков, gzip-каталог ×7.3, синк вне UI-потока) + таблица замеров
  (Linux/стенд + Win11 VM + 1 ядро как прокси Celeron). Цель <2 с тёплый старт на слабом
  CPU достигнута (<1 с). Серверный кэш снимка осознанно не делали (риск памяти, путь
  «раз на установку»).
- deploy/pos-install.ps1: установщик Windows (исключение Defender + прогрев + ярлык);
  холодный старт 10 с → 4,5 с. deploy/pos-win-measure.ps1 — скрипт замеров на VM.
- docs/pos.md: обновлён раздел первого запуска + варианты/стоимость подписи exe (не покупали).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 05:11:34 +05:00

8.7 KiB
Raw Permalink Blame History

Касса food-market — инструкция (кассир и администратор)

Кроссплатформенная касса на Avalonia 11 / .NET 8. Работает на Windows 10/11 и Linux x64. Быстрая, без лишнего; офлайн-режим; сервер — food-market (api/pos/v1).

Установка

Windows 10/11

  1. Скачайте food-market-pos-win-x64-<версия>.zip (ссылка — в админке, раздел «Точки продаж») и распакуйте в любую папку, напр. C:\food-market-pos.
  2. Запустите foodmarket.Pos.exe. .NET устанавливать НЕ нужно (сборка self-contained).
  3. Ярлык на рабочий стол — по желанию (правой кнопкой по exe → «Создать ярлык»).

Linux x64 (Ubuntu и др.)

  1. Распакуйте food-market-pos-linux-x64-<версия>.tar.gz.
  2. chmod +x foodmarket.Pos && ./foodmarket.Pos.
  3. Для весов/принтера по COM добавьте пользователя в группу dialout.
  4. Либо запустите переносимый food-market-pos-<версия>-x86_64.AppImage (если собран).

Скачать (администратор)

В админке на странице «Кассы» (точки продаж) — карточка «Кассовое приложение» со ссылками «Скачать для Windows / для Linux». Ссылки и версия задаются на сервере в конфигурации (секция Pos: LatestVersion, DownloadWindows, DownloadLinux).

Автообновление

При старте касса сверяет свою версию (VERSION.txt в сборке) с GET /api/pos/v1/version и при более новой версии показывает в статус-баре «Доступно обновление …» со ссылкой.

Первый запуск (администратор точки)

  1. Адрес сервера — URL вашего food-market (напр. https://admin.food-market.kz).
  2. Регистрация устройства — касса привязывается к точке продаж (retail point). Кассир видит только свои точки (к которым он привязан в админке).
  3. Вход кассира — логин и PIN/пароль учётной записи кассира.

Горячие клавиши (работа без мыши)

  • Сканер — печатает штрихкод в поле ввода, Enter добавляет товар (keyboard-wedge, фокус не нужен).
  • F1 — помощь · F2 — поиск товара по названию · F7 — внесение/выплата.
  • F9 — возврат · F10 — смена (открыть/закрыть, X/Z) · F12 — оплата · Esc — отмена/очистить чек.
  • Del — удалить выделенную строку · +/− — количество.

Смена

  • Открыть смену (ввести размен). Без открытой смены продавать нельзя.
  • Внесение / выплата наличных (инкассация) — с причиной.
  • X-отчёт — промежуточный (смена не закрывается); Z-отчёт — при закрытии (должно быть / факт / разница). Деньги смены учитываются сервером в остатках счетов (см. docs/money.md).

Продажа

  • Пробитие по сканеру или поиск по названию.
  • Весовой товар: вес с весов по COM (CAS / Масса-К) или ручной ввод; весовой штрихкод с префиксом 20–29 (код + вес/цена) распознаётся автоматически.
  • Скидка на позицию и на чек (по праву).
  • Оплата: наличные / карта / смешанная; показывается сдача.
  • Отложенный чек — кнопка «Отложить» сохраняет текущий чек и открывает новый (обслужить другого покупателя), «Вернуть» — восстанавливает отложенный.

Возврат

  • По чеку (номер или скан QR) — частичный или полный.
  • Без чека — по праву администратора.

Весы (COM/serial)

  • Протоколы: CAS, Масса-К (ASCII). Настройка: порт (COM1 / /dev/ttyUSB0), скорость.
  • Нет весов/связи — ручной ввод веса.

Печать чека

  • ESC/POS на чековый принтер: USB (/dev/usb/lp0 или COMn), сеть (tcp:IP:9100), ширина 58 мм (32 симв.) или 80 мм (48 симв.).
  • Запасной вариант — текстовый/обычный принтер/PDF.
  • X/Z-отчёты печатаются так же.

Офлайн

  • Каталог (товары, цены, штрихкоды, весовые) хранится локально (SQLite) — первичная загрузка + дельта-синхронизация.
  • Без сети касса продолжает работать: чеки пишутся локально и уходят на сервер очередью с идемпотентным ключом (повтор не создаёт дублей).
  • В статус-баре: «на связи / нет связи» и число чеков в очереди.

Фискализация (ОФД Казахстана)

Сейчас касса НЕ фискализирует чеки (интерфейс-заглушка IFiscalProvider). Для реальной фискализации KZ потребуется:

  • Договор с ОФД-оператором (Казахтелеком/Webkassa/др.) и регистрация онлайн-ККМ.
  • Реализация IFiscalProvider.RegisterSaleAsync под API выбранного оператора (регистрация чека, получение фискального номера и QR, печать на чеке).
  • Хранение ключей/токенов ОФД защищённо (как refresh-токен кассира).
  • Серверная синхронизация фискальных признаков (поля уже есть в RetailSale).

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

  • Поиск по штрихкоду — ~14 мс, по названию на 30 000 товаров — ~47 мс (локальный SQLite с индексами).
  • Первичная загрузка 30 000 товаров — ~9 с (однократно при настройке).
  • Сборка self-contained + ReadyToRun (R2R). Холодный старт: Linux ~120 мс; Windows прогретый — ~220 мс (R2R) / ~150 мс (без R2R).

Первый запуск на Windows медленный — что делать

Тёплый старт кассы — доли секунды (окно из локальной SQLite, синк в фоне). Медленный только САМЫЙ первый запуск сразу после установки: Windows Defender на лету сканирует свежий неподписанный бандл (~115 МБ, self-contained + R2R). Замер на Win11 VM: холодный старт 10 с без исключения → 4,5 с с исключением Defender; тёплый ~0,6 с. Готовый установщик — deploy/pos-install.ps1 (распаковка + исключение Defender от админа + прогрев --smoke + ярлык). Вручную:

  1. Исключение в Defender для папки кассы (одноразово, от админа): Add-MpPreference -ExclusionPath "<папка кассы>".
  2. Прогрев — один запуск foodmarket.Pos.exe --smoke после распаковки.
  3. Подпись exe (code signing) — на решение владельца, пока НЕ покупали: OV ~ $200–400/год (Sectigo/DigiCert), EV ~ $300–600/год. Подписанный бинарник Defender сканирует быстрее, EV сразу снимает предупреждение SmartScreen без исключения Defender. Полные замеры до/после (Linux + Windows, 30 000 товаров) — см. docs/pos-progress.md, раздел «Мгновенный старт».