Настольная программа для работы с кассами, к которым обычно подключаются по 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 — без прав администратора.
Папку 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 в своей работе, договоритесь об условиях напрямую — так честнее, чем молчаливое «свободное ПО» без бумаги за ним.