food-market/docs/pos.md
nns 81085aed8b
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
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
Docker Web / Build + push Web (push) Waiting to run
Docker Web / Deploy Web on stage (push) Blocked by required conditions
build(pos): сборка Win/Linux + AppImage, документация, скриншоты
- deploy/pos-publish.sh: self-contained Windows x64 (zip) + Linux x64 (tar.gz) +
  AppImage (если есть appimagetool); VERSION.txt для автообновления.
- docs/pos.md — инструкция кассиру/администратору (установка, горячие клавиши,
  смена, продажа, возврат, весы, печать, офлайн, фискализация-позже, автообновление).
- docs/pos-moysklad-reference.md — сверка розничной модели с МойСклад.
- docs/pos-progress.md — честный статус 11/11 пунктов + замеры + известные огранич.
- docs/pos-screenshots/ — 20 кадров (1920×1080 + 1366×768) + index.html галерея.
- .gitignore: сборки кассы (deploy/pos-dist) и TestResults — не в git.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 04:59:06 +05:00

6.9 KiB
Raw 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; замеры холодного старта — см. docs/pos-progress.md.