Главное о кейсе
Федеральное агентство радиорекламы занимается размещением сетевой и мультилокальной рекламы на радио, а также рекламой в Digital Audio. Для такого бизнеса прайс-лист радиостанции - не просто файл с ценами. В нем хранится город, станция, период действия, стоимость спотов, НДС, скидки, сезонные коэффициенты, наценки и другие параметры, которые влияют на итоговый бюджет рекламной кампании.
До проекта команда работала в старой десктопной системе на Delphi и Firebird. Система была создана примерно 10-15 лет назад: она закрывала базовый процесс, но ее интерфейс, техническая база и внутренняя логика уже не соответствовали текущим задачам. Поддерживать и развивать такое решение было сложно: по системе оставалось мало документации, а часть знаний была завязана на разработчика, который давно не участвовал в проекте.
Нужно было не просто “перерисовать интерфейс”, а заменить старое приложение полноценным рабочим инструментом: сохранить накопленную бизнес-логику, перенести данные, собрать ключевые процессы в одном месте и заложить основу для дальнейшего развития продукта.
Мы спроектировали и разработали модульное веб-приложение на PHP/Symfony и Vue/PrimeVue. Бэкенд отвечает за бизнес-логику, расчеты, работу с данными и REST API. Фронтенд дает пользователям современный интерфейс для управления прайс-листами, медиапланами, письмами и справочниками.
Отдельно мы разработали дизайн приложения с нуля. Бизнес-аналитик подготовил прототипы, дизайнер собрал интерфейсы на UI-ките, а команда разработки реализовала их в продукте.
Как проект изменил жизнь пользователей
После проекта команда работает не с разрозненными файлами и старой системой, а с единым веб-приложением. В нем можно вести базу прайс-листов, связывать прайсы с городами и радиостанциями, хранить исходные письма и вложения, выбирать параметры рекламной кампании и формировать медиаплан в Excel.
Пользователь может создать прайс или черновик, указать период действия, тип прайса, НДС, инфляцию, предоплату, скидки, наценки, сезонные коэффициенты и другие коммерческие условия. Система помогает контролировать актуальность прайсов, подсвечивает статусы, не дает использовать заблокированные прайсы в расчете и проверяет дубли активных прайс-листов в связке “город + радиостанция”.
Генератор медиапланов собирает данные из выбранных прайсов и формирует Excel-файл в нужном формате. В одном медиаплане может быть до 100-200 прайс-листов. По каждому листу доступны расчетные блоки, месяцы, споты, минуты, скидки, НДС и итоговый бюджет.
Excel остался финальным рабочим документом, потому что для рынка это привычный формат согласования с клиентами и контрагентами. Но теперь файл создается из централизованных данных, а не собирается вручную с нуля.
Что изменилось для команды заказчика:
— прайс-листы хранятся как структурированные сущности, а не как набор файлов;
— исходные письма и вложения можно привязать к конкретным прайсам;
— медиаплан формируется из актуальной базы условий;
— Excel остался привычным форматом передачи результата;
— роли разделяют сценарии специалистов по прайс-листам, специалистов по медиапланам и администраторов;
— система стала основой для дальнейших доработок после первого релиза.
Бизнес-задача и ее решение
Бизнес-задача была в том, чтобы перенести ежедневную работу с прайс-листами и медиапланами из устаревшего приложения в современную систему, не потеряв привычную логику процесса.
Решение должно было:
— заменить старую десктопную систему;
— перенести исторические данные;
— сохранить привычный Excel-формат медиапланов;
— централизовать хранение прайс-листов и исходных писем;
— автоматизировать генерацию медиапланов;
— поддержать роли специалистов и администраторов;
— дать заказчику базу для последующего развития системы.
Мы разделили решение на несколько ключевых модулей. Модуль прайс-листов стал единой базой коммерческих условий. Модуль писем помогает хранить источники данных и связывать их с прайсами. Генератор медиапланов собирает условия из базы и формирует Excel-документ. Справочники городов, радиостанций и пользователей поддерживают структуру данных. Ролевая модель разграничивает доступ к функциям системы.
Отдельной частью проекта стала миграция. В новую систему перенесли города, радиостанции, пользователей, медиапланы и прайс-листы. В рабочем списке прайс-листов отображалось 506 страниц по 50 элементов, то есть более 25 тысяч записей с разными статусами: устаревшие, текущие и будущие.
Крафт (мастерство), реализация, технические детали
На старте мы разобрали старую систему, восстановили ключевые пользовательские сценарии и описали будущую архитектуру. Важно было сохранить смысл привычного процесса, но убрать ограничения старого приложения: устаревший интерфейс, сложность поддержки, зависимость от легаси-логики и недостаток документации.
Новое приложение построено как модульная веб-система. Серверная часть реализована на PHP/Symfony, клиентская - на Vue/PrimeVue. Обмен между фронтендом и бэкендом идет через REST API.
В рамках проекта мы:
— разработали новый интерфейс и дизайн приложения;
— реализовали модуль управления прайс-листами;
— добавили создание черновиков прайс-листов;
— настроили поиск, фильтрацию, сортировку и пагинацию списков;
— реализовали детальную карточку прайс-листа с вкладками по смысловым блокам;
— добавили привязку писем и файлов к конкретным прайс-листам;
— реализовали статусы и визуальную подсветку прайсов по актуальности;
— добавили контроль дублей активных прайс-листов в связке “город + радиостанция”;
— реализовали генератор медиапланов с выгрузкой в Excel;
— добавили модуль писем и вложений;
— перенесли исторические данные из старой системы;
— заложили ролевую модель для специалистов и администраторов.
Прайс-листы могут приходить не только по почте. Радиостанция может направить файл менеджеру по любому рабочему каналу, поэтому система не сводит процесс только к email. При этом письма и вложения остаются важным источником исходных данных: приложение может автоматически подгружать письма по настройкам почты, запускать синхронизацию вручную, загружать письма с устройства в форматах OFT, MSG и TXT, исключать повторную загрузку уже существующих писем и привязывать письма к прайс-листам.
После первого релиза появились дополнительные запросы. В медиаплан добавили брендирование, чтобы сохранить авторство документа и снизить риск некорректного использования. Также появилась задача ограничить редактирование файла, чтобы контрагенты не могли произвольно менять суммы и другие расчетные данные.
Для следующего этапа была подготовлена отдельная спецификация по обработке уже заполненного медиаплана. По этой логике администратор загружает Excel-файл обратно в систему, приложение распознает прайс-листы внутри документа, сопоставляет их с базой, предлагает выбрать найденные позиции и генерирует новый корректный медиаплан. Пользовательские изменения из файла должны сохраняться, а ключевые коммерческие данные пересчитываться по актуальным прайс-листам из приложения.
Инсайты, гипотезы, процесс создания и взаимодействия с заказчиком
Главный инсайт проекта: в таких системах нельзя просто заменить интерфейс и назвать это модернизацией. Старая логика может быть неудобной технически, но она часто отражает реальные правила бизнеса. Поэтому сначала нужно понять, какие сценарии действительно должны сохраниться, а какие ограничения появились только из-за старой технологии.
Второй важный вывод - Excel не всегда нужно убирать из процесса. В этом проекте Excel остался нормальным и полезным финальным форматом, потому что через него заказчик взаимодействует с клиентами и контрагентами. Ценность нового приложения не в том, чтобы отменить Excel, а в том, чтобы убрать ручную подготовку данных и сделать генерацию файла управляемой.
Третий вывод связан с миграцией. Для заказчика была важна не только новая система, но и преемственность: накопленная база городов, радиостанций, медиапланов и прайс-листов должна была продолжить жить в новом продукте. Поэтому миграция стала не техническим приложением к проекту, а одной из центральных задач.
Еще один инсайт - источники данных в реальном процессе редко бывают идеально упорядочены. Прайс-листы могут приходить письмами, файлами, через менеджеров и другие рабочие каналы. Поэтому система должна не только хранить структурированные данные, но и помогать быстро находить исходный источник условий.
Результат проекта - не разовая автоматизация отдельной операции, а новая рабочая основа для команды заказчика. Старое приложение заменено, данные перенесены, ежедневные сценарии собраны в одном интерфейсе, а система подготовлена к дальнейшему развитию после запуска.
Скриншоты