Единый центр обработки данных для департамента закупок

Единый центр обработки данных для департамента закупок

Мы спроектировали высоконагруженную систему обработки данных для департамента закупок крупной компании, объединили наши сервисы в масштабный проект с единым пользовательским интерфейсом, успешно запустили ЦОД и хотим поделиться экспертизой.

Наша практика будет интересна, если вы:

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

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

Потребности многочисленных филиалов и подразделений компании непрерывно поступали в единственный департамент закупок в необработанном виде, в форме Excel таблиц с перечнями товаров. Их было необходимо рассортировать, сопоставить с прайсами поставщиков, расценить, согласовать с начальством и купить.

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

В таких случаях отдельных функциональных сервисов, о которых мы рассказывали в прошлых статьях цикла, недостаточно. С их помощью автоматизируются лишь отдельные процедуры: расценки товаров и поиска лучших цен в товарных прайсах и каталогах интернет-магазинов. Заказчику могло помочь только комплексное решение.

Поэтому, мы разработали ЦОД. Под этим сокращением обычно подразумевают серверные решения, но мы говорим о едином программном центре обработки данных о закупках. Он объединяет наши сервисы, вписывает в бизнес-процессы компании и дает к ним доступ из единого пользовательского интерфейса.

Разработка системы

Разработка ЦОД для департамента закупок любой крупной компании связана с многочисленными сложностями.

Типичный товарный лист, с которым работают сотрудники такой организации, содержит порядка пятидесяти тысяч строк с наименованиями и больше 100 столбцов с характеристиками товаров. Попав в ЦОД, товарные листы прирастают новыми данными: столбцами, связанными с расценкой, категоризацией и другими параметрами, характеризующими жизненный цикл позиции в системе.

Большой объем данных, проходящих через систему, отражается на всем, от выбранных нами технологий и до внешнего вида и возможностей интерфейса ЦОД. Для того чтобы система справлялась с высокой нагрузкой, мы уделяем много времени оптимизации отдельных ее элементов.

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

  2. Не во всех компаниях скорость внутренних сетей достаточно высока для передачи больших объемов данных, поэтому в дополнение к прочим оптимизациям мы используем собственный механизм компрессии передаваемой информации.

  3. Большие объемы обрабатываемой информации сказываются и на пользовательском интерфейсе ЦОД. Чтобы пользователям было проще ориентироваться в таблицах, мы делаем интерфейс гибким, настраиваемым.

Отдельный раздел меню ЦОД позволяет скрыть ненужные для работы элементы таблиц и рассортировать оставшиеся поля в произвольном порядке. Эти настройки влияют на запрос к базе данных. На компьютер пользователя загружается не таблица целиком, а только выбранные поля, это помогает снизить нагрузку на канал связи.

Мы прислушиваемся к пожеланиям сотрудников заказчика. Зачастую они подсказывают удобные решения. Так, мы реализовали фильтрацию, подобную используемой в Excel, но более функциональную.

Для фильтров мы выделили отдельную настраиваемую панель, расположенную в левой части экрана. Большинство из них пришлось разрабатывать заново — в фреймворке AngularJS, что использовался для разработки, не нашлось инструментов, подходящих для многоуровневой контекстной фильтрации товарных позиций. То есть, в фреймворке не было гибкой системы фильтров, в которой можно задавать не только простые условия, но и в пару кликов формулировать сложные правила фильтрации для каждого из многочисленных столбцов таблицы.

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

Как это работает

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

Товарные листы, которые поступают в департамент закупок, сначала попадают к диспетчеру. Сотрудник импортирует их в ЦОД. Система сама распознает валюту, в которой ведется расчет по позициям, сохраняет дату и время загрузки товарного листа, отчеты об ошибках, статистику по данным из ключевых полей  таблиц.

Импортированные в систему позиции отправляются в сервис автоматической категоризации, разработанный на основе общедоступных библиотек. Там каждому товару присваивается одна из двух сотен различных категорий и подкатегорий: инструменты, строительные материалы, мебель, электрооборудование и так далее. Диспетчер может изменить категорию или подкатегорию отдельной позиции, если считает, что алгоритм машинного обучения допустил ошибку.

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

Каждый расценщик видит только те позиции, для которых ему предстоит подобрать цену, удовлетворяющую условиям закупки. Это по-прежнему тысячи строк, потому интерфейс спроектирован так, чтобы операции можно было проводить не только с отдельными позициями в таблице, но и с сотнями и тысячами товарных позиций одновременно.

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

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

Расценщик сравнивает цены и выбирает одну или несколько оптимальных. После этого система рассчитывает среднюю цену и устанавливает ее как рекомендуемую, а позицию помечает, как готовую к отправке на согласование.

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

Согласующий либо отклоняет предложенную цену (тогда позиция возвращается расценщику), либо утверждает ее. 

Когда позиция согласована, в рабочий процесс вновь включается диспетчер. Он применяет к ценам один из поправочных коэффициентов. Это может быть показатель инфляции, который система загружает с сайта Центробанка РФ. А может быть одно из значений из справочника коэффициентов, который диспетчеры заполняют самостоятельно, исходя из внутренних нужд компании.

Затем обработанные позиции направляются на выгрузку в другие IT-системы заказчика и бизнес-процесс  завершается.

С момента запуска наш ЦОД успешно обработал уже миллионы позиций, но мы продолжаем доработки: ускоряем экспорт и импорт файлов, совершенствуем интерфейс и регулярно выпускаем обновления. В ближайших планах добавить профили для быстрого переключения между несколькими вариантами настроек таблиц. В этом нуждаются расценщики, работающие с разнообразными потребностями. Им удобнее использовать индивидуальные предустановки для различных типов товарных позиций.

Наша команда готова применить свои опыт, навыки и наработки при создании аналогичных высоконагруженных IT-систем. Если у вас есть сложная задача и неважно, связана она с закупками или другим аспектом бизнеса — свяжитесь с нами. Мы расскажем, как ее решить.