Компания «Фармакэй» пригласила нас написать новую программу для обработки экселевских файлов, потому что старая не справлялась с объемом данных. Когда мы изучили проблему, оказалось, что дело не только в программе. В самом подходе к обработке файлов было много узких мест.
Мы перестроили процесс обработки и разработали сервис, который берет на себя рутину, разгружает операторов и обучает новичков.
А теперь — по порядку.
Сервис для обработки данных
Клиент
Фармакэй занимается бизнес-аналитикой для фармацевтических компаний. Клиенты компании — крупные производители медикаментов. Они поставляют лекарства в аптечные сети, а те присылают производителям отчеты о продажах. По отчетам производители планируют дополнительный выпуск медикаментов, разрабатывают маркетинговые акции и дают аптечным сетям скидки.
За месяц одному производителю разные аптеки присылают более 700 отчетов. В каждом отчете — до 1 000 000 строк в экселе. Чтобы увидеть общую картину о продажах, нужно обработать отчеты всех сетей и составить сводный отчет.
700 отчетов от аптек в среднем получает каждый производитель медикаментов ежемесячно
С обработкой данных и составлением сводных отчетов производители медикаментов обращаются к Фармакэй. Любая ошибка в отчете влияет на прибыль производителей: они выпускают лишние лекарства или делают убыточную для себя скидку аптечной сети.
Процесс обработки до нас
Аптечные сети ежемесячно высылают отчеты о продажах в экселевских файлах. Самая важная информация в них — какая аптека, в каком городе, сколько и каких препаратов продала.
Аптечные сети составляют отчеты в удобном для них виде и загружают в систему. К работе с файлами подключаются старший и линейные операторы.
До нашего вмешательства операторы обрабатывали отчеты в Брике — самописном приложении для экселя. После Брика информация попадала в базу данных, и на основе нее сотрудники Фармакэй строили сводные отчеты для клиентов.
Чтобы понять, как работал Брик до нас, расскажем весь процесс обработки данных.
Оператор открывал Брик и видел разные отчеты по алфавиту. Он брал первый попавшийся файл и работал с ним. В файле было три листа — закупки, продажи и остатки. Оператору нужны продажи, а в них — название препарата, его количество, названия и адреса аптек. Если в файле была лишняя информация, оператор находил ее и убирал вручную, даже если в файле было 400 000 строк.
Оператор убирал ненужные данные вручную, даже если в файле было 400 000 строк
Чтобы данные после обработки встали в нужные столбцы базы данных, в Брике было цветовое кодирование. Оператор вручную раскрашивал заголовки таблицы: аптеки — красным, препарат — желтым, адрес — бордовым, продажи — зеленым. В конце таблицы раскраску нужно было повторить и не ошибиться.
Дальше оператор отправлял файл в обработку и ждал несколько минут или часов. Время зависело от размера файла. Пока обрабатывался один файл, оператор сидел без дела. Бывало, что оператор прождал два часа, а программа зависла и файл нужно обрабатывать заново.
После обработки Брик показывал оператору готовый отчет. Оператор проверял, чтобы столбцы с аптеками были в аптеках, препараты в препаратах, а общая сумма сходилась с суммой в изначальном отчете от аптеки. Если ошибок не было, оператор отправлял отчет в базу данных и продолжал работу с другими файлами.
Работа оператора в реальности
Оператор быстро справлялся с отчетом, если попадался несложный файл или если оператор работал давно и знал все тонкости. Но чаще операторы проходили несколько кругов ада, чтобы обработать один файл.
Мультистолбцы. Некоторые аптеки писали всю информацию в одном столбце. Представьте, оператор видит такой столбец: Аптека 1, Нижний Новгород, Катрен, Озверин, Протек, Успокоин. Опытный оператор понимал, что это значит: «Продажи в Аптеке 1 в Нижнем Новгороде препарата Озверин от производителя Катрен и препарата Успокоин от производителя Протек». Он вручную разносил данные.
Новичок ничего не понимал и часами сидел над одним файлом, а потом просил помощи у старшего оператора.
Сумма не сходится. Бывало, что сумма в отчете аптеки и готовом отчете Брика не сходились. Оператор часами искал ошибку, а в очереди копились другие файлы.
Неизвестные названия. У каждой аптеки свой шаблон отчета. Оператору нужно было разобраться, какие данные нужны, а какие — лишние.
Инструкции по обработке файлов не было, всей информацией владел только старший оператор. Новички его постоянно дергали вопросами.
Годовалов, ООО «Хелми» № 9, Катрен, OOO «Айболит» лучников 4, Вж-23-СА9. Угадайте, что из этого название аптеки?
Аврал. Старший оператор брал на себя очень много работы. Он один знал, как обрабатывать все типы файлов, разбирался в сложных файлах, учил новичков, анализировал ошибки в отчетах. А еще он отвечал за сроки и ошибки перед клиентами. Все боялись, что старший оператор заболеет или уволится, и работа встанет.
Работа оператора в цифрах:
1 000 000 строк в самом большом отчете. Больше в эксель не вмещается;
16 000 000 пересечений в самой большой сводной таблице;
300 отчетов приходит в среднем за день операторам.
Проблемы Брика
Мы проанализировали Брик и нашли, что тормозило обработку файлов.
Брик долго обрабатывал информацию. На обработку таблицы в 300 000 строк уходило полтора—три часа. Во время обработки одного файла операторы не могли работать с другими файлами. Поэтому за день один оператор обрабатывал не более 50 отчетов, даже если работал двенадцать часов.
50 отчетов в день обрабатывал один оператор
Работал нестабильно и не показывал прогресс обработки. Оператор не видел, если программа зависла.
Не помогал оператору. Программа не подсказывала операторам, как работать с разными видами файлов. Операторы учились на своих ошибках, но не передавали опыт новичкам.
Был сложным. Оператору нужно было знать особенности отчетов каждой аптеки и хорошо владеть экселем.
Не выставлял приоритет файлам. Отчеты приходили к оператору в том порядке, как их загружали аптечные сети. Оператор занимался несрочным файлом, а срочные в это время висели в очереди.
Новый Брик
Мы начали работу с Бриком в декабре 2016, а к маю 2017 из приложения в экселе сделали сервис по обработке данных.
Мы улучшали Брик по этапам. Первым делом сделали реестр ошибок и поняли, где чаще всего возникают сбои.
Конвейер. Программа знает, по каким файлам горят сроки, и выдает их оператору в первую очередь.
Автораскраска. Раньше оператор сам делал раскраску таблицы, чтобы информация попадала в нужные столбцы базы данных. Теперь Брик присылает оператору уже раскрашенный файл.
Предобработчик. Брик сам обрабатывает файлы, разносит данные из мультистолбцов в отдельные столбцы и строки и убирает ненужную информацию. Оператору остается проверить конечную сумму.
Предобработчик разгрузил операторов. Они обрабатывают до 40–50 файлов за час и 150–200 за рабочий день. Операторы больше не сидят перед компьютером по двенадцать часов, а справляются с работой за четыре—пять часов.
Разделение функций. Линейные операторы получают только предобработанные файлы. Если они замечают ошибки в файле, сразу отправляют такой файл старшему оператору. Он добавляет автораскраску для всех файлов такого типа. Если он не справляется с ошибкой сам, запрашивает информацию у клиента прямо из интерфейса Брика.
Обучение операторов. Мы внедрили удобные функции, чтобы новички обучались сами, а не дергали старшего оператора:
- к файлам автоматически подгружаются подсказки;
- в комментариях старший оператор пишет, как обработать такой тип файла;
- старший оператор подгружает скриншоты других правильно обработанных файлов;
- получает смски, если в очереди скопилось больше 50 файлов. Так он быстрее принимает решение, что пора подключить дополнительных операторов;
- операторы обмениваются опытом в общем чате;
- программа сообщает об ошибке, если нашла файл с такой же суммой.
Брик в цифрах:
80% файлов предобрабатываются автоматически.
2300 вариантов автораскрасок. Брик узнает разные типы отчетов и работает с ними без помощи оператора.
К 500 из 700 типам файлов старшие операторы добавили комментарии и скриншоты примеров для новичков.
150—200 отчетов обрабатывает один оператор за рабочий день.
После доработки Брик перестал быть вспомогательной программой для обработки файлов. Он стал системой, которая не зависит от старшего оператора, берет на себя монотонную работу и обучает новичков. Благодаря Брику, Фармакэй успевает вовремя отчитаться перед клиентами. Производительность выросла с 50 отчетов, которые обрабатывал оператор за двенадцать часов работы, до 150-200 отчетов за четыре—пять часов.