Кейс 05 · Внутренний сервис, работает в проде

500 страниц PDF раскладываются на 23 файла за минуты. Раньше на это уходил рабочий день

Маркировка «Честный знак»: коды на партию приходят одним PDF, а на складе нужен отдельный файл под каждую модель. Резали руками. Собрал веб-сервис, который делает это сам и сам же сверяет, что ни один код не потерялся и не задвоился.

500 → 23

первый прогон

минуты

вместо дня

авто-сверка

кодов

Задача

Маркировка устроена так: на партию приходит один PDF, внутри — коды всех моделей подряд. Складу такой файл бесполезен. Ему нужен отдельный документ под каждую модель, иначе нечего отправлять в печать.

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

Проблема даже не в часах. Ручная нарезка — операция, где ошибку не видно сразу:

  • код может уехать не в тот файл;
  • диапазон может обрезаться на страницу раньше или позже;
  • один и тот же код может попасть в два документа.

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

Как делал — конвейер в работе

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

01

Разбор формата

Первым шёл агент-исследователь: разобрал структуру исходного PDF — как коды лежат внутри, по какому признаку определяется граница модели, что считать одной позицией. Пока правило не описано словами, кодировать нечего.

02

Правило на бумаге, потом в коде

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

03

Сборка сервиса

Веб-интерфейс с входом по логину: загружаешь файл — получаешь готовые PDF по каждой модели. Ни Python, ни командной строки, ни инструкций на две страницы. Менеджер работает так же, как с любым сайтом.

04

Авто-сверка

Отдельный шаг после нарезки пересчитывает коды: сколько было на входе, сколько разошлось по выходным файлам, нет ли дублей и потерь. Не сошлось — сервис говорит об этом сразу, до того как файлы уйдут в печать.

05

Прод, а не разовый скрипт

Сервис работает под systemd — поднимается сам после перезагрузки сервера, — отдаётся по HTTPS и закрыт логином. Это разница между «однажды запускали» и «этим пользуются».

06

Приёмка на живом файле

Проверял не автор кода: отдельный проход прогнал реальную партию и сверил результат постранично. Тот, кто делал, свою работу не принимает.

Результат

ЧтоЦифра
Первый прогон: страниц на входе500
Файлов на выходе, разложенных по моделям23
Времени на разбор партииминуты вместо рабочего дня
Кодов, оставшихся без проверки0 — сверка идёт автоматически на каждом прогоне
Людей, которым нужно объяснять инструментзагрузил файл — забрал результат
Статусбоевой сервис: systemd + HTTPS + вход по логину

Минуты вместо дня — только половина выигрыша. Вторая: операция перестала зависеть от внимательности человека в конце смены. Сервис делает одно и то же одинаково и сам сообщает, если что-то не сошлось.

Сервис живёт на домене legion-gpu.ru — том же, где собран сайт аренды GPU-серверов с 19+ посадочными и сквозной атрибуцией заявок.

ПОХОЖАЯ ЗАДАЧА → РАЗБОР · 0 ₽ · ДО КОНЦА ДНЯ

Есть похожая задача?

Опишите её в двух-трёх предложениях. За рабочий день верну разбор: что автоматизируется, что не стоит трогать, срок и вилка.

Что придёт в ответ

  • Первый ответ — в течение часа днём по Москве.
  • За рабочий день — план: что автоматизируется, что не стоит трогать, срок и вилка.
  • Разбор остаётся у вас, даже если дальше мы не работаем.

Готовые формулировки — нажмите, текст подставится в поле

или опишите словами

или на почту kirilla7350@gmail.com

Как это выглядит

Любой скриншот открывается в полный размер по клику.

Страница входа: содержимое сервиса за логином не показываем.

Стек

Обработка: Python, работа с PDF постранично, сверка кодов как проверяемый инвариант.

Интерфейс: веб-форма с входом по логину, загрузка файла → выдача готового архива по моделям.

Прод: systemd-юнит (автозапуск после перезагрузки), HTTPS, домен компании.

Процесс: конвейер агентов — разбор формата → правило → код → приёмка на реальной партии.

Коротко о проекте

Что делает сервис «Честный знак», собранный Кириллом Юсуповым?

Это внутренний веб-сервис для ООО «Легион» (legion-gpu.ru/znak/): PDF с кодами маркировки на всю партию автоматически делится по моделям, и сервис сам сверяет, что ни один код не потерялся и не задвоился. Первый прогон — 500 страниц разложены на 23 файла за минуты, хотя раньше на ту же операцию уходил рабочий день сотрудника. Сервис боевой, работает каждый день.

Какие задачи автоматизируются в первую очередь?

Признаки одни и те же: файл или выгрузка приходят регулярно, обработка идёт по понятному правилу, человек тратит на неё часы, а ошибка вылезает уже у клиента. Прайсы поставщиков, акты, спецификации, реестры, коды маркировки — это одна и та же задача в разных обложках. Кирилл Юсупов, Москва, разбирает такой процесс и говорит, автоматизируется ли он, за сколько и что понадобится со стороны заказчика.

Чем такой сервис отличается от скрипта на коленке?

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

У вас точно есть такая же рутина

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

Расскажите, что у вас режут, сводят или перебивают руками. Скажу, автоматизируется ли это, за сколько и что понадобится с вашей стороны. Если задача не моя — скажу прямо.

Разбор задачи · Москва