Основная задача — создать экономически рабочую, масштабируемую информационную систему, с возможностью расширять модель, чтобы можно было открывать новые клубы, развивать их и получать прибыль. Нами была создана информационная система, позволяющая оцифровать большинство процессов, которые происходят в клубе (посещение клиентов, покупка и продление абонементов, работа с тренерами и т.д.).
Какие были цели у заказчиков?
Предыдущая система была плохо расширяема. У заказчика не было возможности добавлять/изменять/удалять абонементы. Все это происходило доработками в коде через команду разработки и занимало много времени. Также не было возможности открытия новых клубов, т.к клубы были жестко заданы в системе и для открытия нового клуба делались большие доработки.
Поэтому была необходима система, позволяющая самим заказчикам добавлять абонементы, изменять их цены и условия и открывать новые клубы без головной боли от информационной системы. При этом была необходимость в поддержке старой, работающей ИС.
Как вы решили задачу?
Была создана орг. структура сети фитнес-клубов, благодаря которой появилась возможность в пару кликов открыть новый клуб и приступить к работе.
Реализована схема шаблонов абонементов с настройками стоимости, условий посещения и продления, что позволяет легко добавлять новые абонементы и запускать их продажу на сайте.
Все настройки могут изменяться через пользовательский интерфейс, а не жестко запрограммированы в коде.
Фазы проекта
Первым этапом любого проекта является изучение бизнес-процесса заказчика. У нас была возможность изучения на основе существующей системы.
Так как мы имели унаследованную систему, то реализовывать задачи начали параллельно с поддержкой существующей системы — для плавного перехода бизнеса между версиями.
Далее начался процесс разработки:
- Спроектировали архитектуру системы с возможностью масштабирования. Были заложены модели клиентов, сотрудников, абонементов и их настроек. Определены процессы покупки, посещения и продления.
- Создали новую админку, в которую в первую очередь были добавлены выгрузки регулярных отчетов, которые часто требовались сотрудникам фитнес-клубов для аналитики. Раньше такие выгрузки делались разработчиками с помощью запросов в базу данных. Это отнимало время у разработчика и заставляло ждать сотрудников фитнес-клубов.
- Далее в новую систему были перенесены карточки клиентов с информацией о клиентах (ФИО, дата рождения, номер телефона, email, номер RFID-метки, фотография, адрес, реферальный код, паспортные данные, банковская карта, бонусные баллы, данные о контрактах, вложенные документы), информация о заказах клиента, штрафах, блокировках, посещениях, а также есть возможность поставить на паузу или расторгнуть контракт.
- Продумали и реализовали схему шаблонов абонементов. Это позволило гибко задавать их настройки. Контракты бывают платные и бесплатные, ограниченные и неограниченные по времени и по количеству посещений, с доступом в конкретные клубы или с расширенным доступом в несколько клубов сети. Также настраивается возможность бесплатного пробного посещения клуба.
У клиента может быть один основной абонемент. И несколько дополнительных контрактов, расширяющих возможности основного. Например, посещение нескольких клубов, аренда шкафчика. Также был продуман вариант доп. абонемента для доступа на тренировки партнерских организаций, арендующих помещения в клубе для проведения своих тренировок.
- Подключили автопродление абонементов и аренды шкафчиков — оплата списывается автоматически и доступ к посещению клуба и использованию услуг продлевается.
- Создали клиентский сайт для покупки абонементов. Клиент выбирает абонемент, заполняет данные о себе, совершает онлайн-покупку. В системе создается карточка клиента с информацией о нем. После этого у клиента открывается доступ в личный кабинет на сайте и возможность посещения клуба, где он завершает регистрацию и получает индивидуальную RFID-метку.
- Разработали личный кабинет клиента на сайте. В личном кабинете клиент может самостоятельно редактировать личную информацию (телефон, email, пароль), посмотреть номер и статус договора, может подать заявку на расторжения договора, поставить абонемент на паузу для приостановления его действия, посмотреть и изменить данные привязанной банковской карты.
- Реализовали оформление абонементов через систему. При оформлении делается фото клиента, и клиент ставит электронную подпись в договоре. Для подписи сделали интеграцию с графическим планшетом. Для фотографии сделали интеграцию с веб-камерой. Подписанные документы и фотографии сохраняются в файловом хранилище.
- Изучили механизм работы с RFID-метками и реализовали отслеживание посещений клиентов, сотрудников и тренеров при проходе через турникеты. Каждому посетителю выдается браслет с индивидуальной RFID-меткой, которая используется для прохода в клуб. После входа в клуб, посетитель с помощью этой же метки может воспользоваться солярием, взять полотенце в аренду, приложив браслет к считывателю.
- Сделали интеграцию с системой арендных шкафчиков GatRelaxx. Посетитель получает доступ к шкафчику в раздевалке с помощью своей RFID-метки после покупки дополнительного контракта.
- Реализовали программу лояльности с возможностью начисления баллов и использования их для оплаты абонементов и услуг.
- Создали конструктор акций с возможностью гибкой настройки условий применения. Акции применяются автоматически или при использовании промокода.
- Добавили в системе создание шаблона сертификата и возможность приобретения подарочного сертификата на сайте. После оплаты на email клиента отправляется электронный сертификат с промокодом, который можно активировать при покупке абонемента.
- Когда новая система по функциональным возможностям не уступала старой, плавно совершили переход на использование новой системы, перенеся все данные клиентов из старой.
Результат
Запустили новую систему полностью заменив старую. У заказчика появилась возможность самостоятельно создавать абонементы с гибкими настройками. Анализировать доходность и посещаемость клубов. Новая система поддерживает масштабирование, что позволит легко и быстро открывать новые клубы в информационной системе. В том числе в системе заложен функционал для продажи франшизы клубов.
Специфика проекта.
— Система интегрирована со считывателями RFID-меток для обработки прохода посетителей через турникеты и посещения услуг, например, солярия или тренировок.
— Система интегрирована с системой управления шкафчиками GatRelaxx от Gantner. При покупке абонемента на шкафчик RFID-метка пользователя привязывается к шкафчику и шкафчик может быть открыт этой меткой.
— Система интегрирована с платежной системой Альфа-банка для покупки и рекуррентных платежей для продления абонементов, оплаты солярия и арендных шкафчиков.
— Система интегрирована с онлайн-кассой Orange Data. При покупке чеки автоматически отправляются в ОФД
— Система интегрирована с сервисом массовой SMS-рассылки SMS Aero для рассылки напоминаний о продлениях абонементов и рекламных предложений клиентам.
— Система интегрирована с сервисом email-рассылок SendGrid. В качестве альтернативного сервиса используется SMTP-клиента Microsoft 365.
— Система интегрирована с графическим планшетом для электронных подписей документов посетителями.
С какими техническими сложностями столкнулись?
Поддержка предыдущей системы усложнялась тем, что в коде не было строго определенных моделей, которые можно было бы связать с предметной областью бизнеса. Все было написано с помощью набора строковых пар ключ-значение, так называемого «JsonObject». Для исправления ошибок или доработки функционала приходилось держать в голове все возможные строковые имена полей типов. Чтобы начать поддерживать код, много времени было потрачено на изучение этих строк. После определения структуры основных сущностей, JsonObject’ы заменялись на удобочитаемые модели, что упрощало ориентирование в коде.
Идентификаторы контрактов были зашиты прямо в коде, из-за чего добавление новых контрактов могло происходить только через программистов, изменяя код. А добавление каждого нового клуба усложнялось бы в квадратической прогрессии, т.к. идентификаторы клубов были также зашиты кодом и все места их использования необходимо было бы расширять.