Система управления городским прокатом
Прокат ведёт ежедневную работу — от выдачи инвентаря до закрытия смены — в одной системе.
Проект
Система построена вокруг физического процесса: инвентарь постоянно меняет статус, а руководителю нужна единая картина происходящего на площадке.
- Контекст
- Обезличенное описание процесса проката оборудования на нескольких точках городского парка — без названия оператора и конкретной локации.
- Бизнес-проблема
- Свести действия проката в один рабочий контур без потери скорости обслуживания на площадке.
Выбранный контур решения
Операционный интерфейс без лишних уровней: состояние проката, ключевые действия сотрудников и данные для контроля в одной системе.
Вклад
От границ задачи до работающей системы
- 01 Разбор процесса на площадке
- 02 Проектирование ролей и сценариев
- 03 Разработка собственной системы
- 04 Подготовка к развитию и интеграциям
Бизнес-проблема и контекст
Проблема
- Один заказ может включать несколько единиц оборудования и сувениры одновременно.
- Оплата и фискализация — разные операции, которые не всегда завершаются одновременно.
- Результат кассовой операции не всегда известен сразу и может остаться неопределённым.
- Оборудование проходит через выдачу, замену, ремонт и обслуживание батареи, и это состояние должно быть видно в момент обслуживания клиента.
Пользователи и контекст
- Сотрудник точки сканирует оборудование по QR, оформляет аренду и сувениры, принимает оплату и обрабатывает возврат или продление.
- Администратор локации управляет сотрудниками, ценами и устройствами и закрывает смены на своей точке.
- Управляющий уровень видит все локации, пользователей и общую операционную и финансовую картину.
Решение
- Проверка по QR с защитой от повторной активной аренды.
- Управление заказом оформление, продление, редактирование, отмена и замена оборудования внутри активного заказа.
- Оплата и возврат через внешний платёжный сервис с раздельным хранением статусов и очередью на ручную проверку при неопределённом результате.
- Учёт обслуживания ремонта и заряда батареи оборудования.
- Ежедневные задачи закрытие смен, сброс заряда батареи и выгрузка отчётов, защищённые от повторного запуска.
Как это работает
- Проверка и оформление
Сотрудник сканирует QR-код оборудования и формирует заказ с одной или несколькими позициями оборудования и сувенирами.
- Оплата
Платёжная операция создаётся во внешнем платёжном сервисе; результат может прийти сразу или через отложенное обновление статуса.
- Неопределённый результат
Если статус оплаты не подтверждён сразу, операция попадает в очередь на ручную проверку, а не считается автоматически успешной или неуспешной.
- Обслуживание
Активный заказ можно продлить, отредактировать или завершить; оборудование можно заменить при необходимости.
- Закрытие дня
Ежедневные фоновые задачи закрывают смены, обновляют состояние батарей и выгружают отчёты ровно один раз в день.
Экраны продукта




Архитектура и надёжность
Веб-приложение обслуживает точки проката и подключается к внешнему платёжному сервису и базе данных; отдельный процесс scheduler один раз в день закрывает смены, обновляет заряд батарей и выгружает отчёты.
- Веб-приложение для точек проката
- Внешний платёжный сервис
- Scheduler ежедневных задач
Надёжность и безопасность
- Роли доступа привязаны к конкретной точке; управляющий уровень видит все локации.
- История обслуживания и ремонта оборудования сохраняется как часть его жизненного цикла.
- Ежедневные задачи не останавливаются целиком из-за ошибки в одной из них.
- Возврат оплаты — только полный и только один раз на операцию: система не позволяет вернуть больше, чем было получено.
Инженерные решения
Неопределённый результат переводит операцию в отдельную очередь на ручную проверку, а не считается автоматическим успехом или отказом.
Проблема Результат платёжной операции на удалённом устройстве не всегда известен немедленно.
Почему важно Ошибка сети не приводит к обслуживанию клиента без подтверждённой оплаты и не блокирует точку без причины.
Возврат рассчитывается от исходной операции и уже возвращённой суммы, а не как отдельное независимое действие.
Проблема Возврат должен учитывать, что уже было возвращено ранее по тому же заказу.
Почему важно Повторный возврат не может задвоить сумму клиенту.
Каждая задача защищена блокировкой на уровне процесса и отдельной записью о выполнении, которая не создаётся повторно за один день.
Проблема Ежедневные задачи должны выполняться ровно один раз в день даже после перезапуска сервиса.
Почему важно Смены не закрываются повторно, а отчёты не задваиваются при рестарте.
Предусмотрен резервный сценарий выдачи без кассы для случаев, когда основной платёжный контур недоступен.
Проблема Кассовый или платёжный сервис может быть временно недоступен, а точка проката не должна останавливать обслуживание клиентов.
Почему важно Сбой внешнего сервиса не блокирует работу точки проката.
Новая продажа на устройстве блокируется, если по нему уже есть операция в обработке.
Проблема Один и тот же кассовый терминал не должен принимать новую оплату, пока предыдущая операция на нём ещё обрабатывается.
Почему важно Два платежа на одном терминале не пересекаются и не создают путаницу в кассовых итогах.
Технологии
- Python
- Flask
- PostgreSQL
- APScheduler
- Gunicorn