Skip to content

About

Программа для работы с кассами по SSH: терминал, обмен файлами, экран кассы, база данных и проверка железа в одном окне. Python / PySide6.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

CashControl

Настольная программа для работы с кассами, к которым обычно подключаются по SSH. Терминал, обмен файлами, экран кассы, база данных и проверка железа — всё в одном окне, а не в пяти разных программах с пятью наборами паролей.

Работает с кассами на TinyCore и Ubuntu, и с любыми другими Linux-системами, где есть SSH.


Что она умеет

Зайти на кассу и посмотреть, что происходит

Терминал с полноценной поддержкой: работа с окнами, правый клик, вставка из буфера, снипеты с часто повторяющимися командами. Можно запустить KiTTY, если привычнее, а можно не запускать ничего — свой терминал есть внутри.

Перекинуть файл на кассу

Файл можно просто перетащить на вкладку кассы. Программа сама поднимет соединение, создаст папку, если её нет, и положит файл куда надо. Если файл с таким именем уже есть, он не перезапишет старый, а сохранит оба — и скажет об этом.

Обратно тоже: с кассы на компьютер, из встроенного файлового менеджера, с предпросмотром и редактированием.

Посмотреть на экран кассы

Встроенный VNC. Не нужно искать и запускать отдельный клиент, не нужно вспоминать пароль от экрана. Касса видна прямо на вкладке, и вкладка переподключается сама, если связь мигнула.

Заглянуть в базу

Редактор PostgreSQL: список таблиц, поиск по названию, просмотр данных, импорт и выгрузка в CSV и JSON, правка строк. Поиск идёт по всей таблице, а не по загруженному куску, — иначе поиск молча не находит то, что есть.

Отдельная SQL-консоль для тех случаев, когда нужно написать запрос руками. История запросов сохраняется.

Понять, что сломалось

Вкладка кассы собирает то, что можно узнать о железе и о самой кассе: тип кассы и версия её программы, операционная система, процессор, сканеры, весы, клавиатура, дисплей покупателя. Показывает всё это списком с понятными названиями, а не списком сырых ключей.

Отдельный блок «Проблемы» собирает то, что обычно ищут руками: например, касса настроена так, что денежный ящик может остаться незакрытым, и это уже причина разбираться с расхождениями в конце смены. Некоторые такие вещи программа может исправить сама, по кнопке, с объяснением — что изменится и когда это вступит в силу.

Из чего состоит окно

Программа не перегружает экран. В ней несколько вкладок касс, и у каждой — своё состояние и свои инструменты:

  • Панель кассы — то, что собрано о кассе, плюс блок проблем сверху.
  • Файловый менеджер — касса слева, компьютер справа, задачи внизу.
  • Терминал — если открыт.
  • Консоль базы — если открыта.

Окна инструментов живут на вкладках и закрываются вместе с ними. Ничего не висит в фоне после закрытия вкладки.

Что нужно, чтобы запустить

На компьютере, с которого идём на кассу:

  • Windows 10 или новее. Это основная платформа: на ней программа собрана, проверена и используется.
  • Linux. Собирается и запускается, проверено в виртуалке — но вскользь. Если работаете на Linux и наткнётесь на что-то странное, это будет первый известный случай.
  • macOS. Не проверялось совсем. Теоретически должно работать, практически ничего не обещаю.

Дополнительно:

  • Python 3.11 и новее — только если запускаете из исходников. В готовой сборке Python не нужен, он внутри.
  • Касса с включённым SSH и PostgreSQL. Это два требования, без которых ничего не получится.

На самой кассе ничего ставить не нужно. Программа не агент и не служба: она подключается по SSH, делает что нужно и отключается.

Как поставить

Готовым установщиком

Скачиваете CashControl-setup-<версия>.exe, запускаете, ставится в %LOCALAPPDATA%\Programs\CashControl — без прав администратора.

Portable

Папку CashControl можно распаковать куда угодно и запустить CashControl.cmd или CashControl.exe. Папку можно переносить и переименовывать.

Из исходников

Нужен Python и uv.

uv sync
uv run python -m cashcontrol.main

При первом запуске откроется окно первоначальной настройки: доступ к кассе по SSH и к базе, пути к внешним программам, если вы предпочитаете их встроенным. Дальше программа запомнит настройки и обычный запуск будет обычным.

Пароли

Пароли хранятся в одном файле рядом с программой, зашифрованы ключом, который лежит там же. Никуда наружу они не уходят.

Два принципа, которые стоит знать:

  • При настройке пароль не показывается на экране. В окне первоначальной настройки поля паролей пустые — вместо них написано, сколько паролей уже сохранено. Так пароль не окажется в снимке экрана, в записи видео и в чужих глазах за плечом.
  • Пустое поле пароля означает «оставить как есть». Поправили логин — пароль не тронут. Удалить пароли можно отдельно и осознанно.

Посмотреть сохранённый пароль на экране можно во вкладке настроек — там есть кнопка «Показать» рядом с каждым списком. Это сознательное решение: иногда пароль нужно увидеть глазами, и прятать его от того, кто уже работает с настройками, значит только мешать. Но помните, что показанный пароль виден всем, кто смотрит на экран, и попадает в снимок экрана, если вы его сделали.

Если файл с паролями повреждён, программа скажет об этом сразу при открытии настроек, а не после первой неудачной попытки подключиться.

Чего в этой публичной версии нет

Репозиторий открыт, и в нём лежит только то, что можно показать постороннему. Отдельно собирается версия для внутреннего пользования, и в ней есть вещи, которые сюда не попадают намеренно:

  • сборщики, привязанные к конкретному торговому оборудованию и кассовым программам;
  • диагностические проверки и автоматические исправления для внутренних проверок;
  • рабочие документы отдела с адресами стендов и внутренними адресами сервисов.

Код написан так, что публичная сборка — это тот же исходник без одного каталога. Удаляете каталог — программа запускается и показывает меньше, но работает. Ничего не нужно переписывать, переключая сборки.

Открытый репозиторий — это подарок, а не формальность. Если вам это пригодилось, а если нет — тем более: вклад и замечания всё ещё приветствуются.

Если хочется копнуть

Тесты:

uv run pytest

Линтер:

uv run ruff check src tests

Сборка portable-версии и установщика:

build.bat

Сборка без внутреннего каталога — отдельной командой:

uv run python scripts/build_dist.py --variant public

Структура проекта, состояние работы и история изменений — в docs/ и в истории коммитов.

Безопасность

Ничего лишнего программа наружу не отправляет: ни телеметрии, ни отчётов, ни запросов на внешние сервера. Соединение с кассой — прямое, по SSH, с проверкой ключа хоста при первом подключении.

Что стоит держать в голове:

  • кто имеет доступ к компьютеру, имеет доступ и к сохранённым паролям;
  • файл с паролями стоит бэкапить вместе с настройками, но не отправлять в общие папки и не класть в репозиторий;
  • пароль от самой кассы стоит менять так же, как любой другой, — программа держит список, чтобы старые продолжали работать, а не чтобы их нельзя было сменить.

Лицензия

Отдельного файла лицензии в репозитории пока нет. Если планируете использовать CashControl в своей работе, договоритесь об условиях напрямую — так честнее, чем молчаливое «свободное ПО» без бумаги за ним.

About

Программа для работы с кассами по SSH: терминал, обмен файлами, экран кассы, база данных и проверка железа в одном окне. Python / PySide6.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages