Производство
ENRU
Кейс - заказная ERP

Производство перестало планироваться на глаз.

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

FastAPIPostgreSQL 16CeleryReact 18 TypeScriptAPI Wildberries и Ozon1С файламиGoogle Sheets
77
таблиц данных в 23 модулях бэкенда
148
API-эндпоинтов, у каждого модуля свой README
1 673+551
автотестов бэкенда и фронта
4
кабинета на двух маркетплейсах в одном контуре
2
швейных направления, партия целиком в одном
3 / 11 нед
горизонт пошива и недели, которые видит расчёт
01 Контекст и боль

Цех работает, а неделю собирали из пяти Excel-файлов

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

Подсорт из пяти отчётов

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

Спрос в четырёх кабинетах, цех один

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

Загрузку цеха считали в голове

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

Маржа не сходилась с 1С

Суммы сходились до рубля, а база показа была другой. Учётная система считает выручку по чекам покупателей, а портал делил маржу на цену продавца, которая выше чеков в 1,6-2,4 раза. Маржа на портале выходила в разы ниже, чем в 1С.

Себестоимость в двух местах

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

Сезон жил в голове

Сезонность не была заведена ни в учётной системе, ни в Excel. У каждого артикула свой сезон: костюмные и льняные брюки из одной категории продаются в разные месяцы. А площадка отдаёт не больше года истории.

02 Архитектура

Четыре кабинета и файлы 1С на входе, неделя цеха на выходе

Ночью Celery стягивает четыре кабинета двух маркетплейсов в PostgreSQL: заказы по дням, воронку, отчёт площадки по размерам, остатки, начисления и рекламу. Остатки склада, часы отдела нормирования и спецификации приходят файлами. Модули считают подсорт, план, спрос и деньги на лету из последних снимков. Люди работают в React-портале, менеджеры видят ту же правду в Google-таблице, отклонения собираются на странице Сигналы.

НОЧНОЙ КОНВЕЙЕР · ВРЕМЯ МСК Wildberries 2 кабинета продавца заказы по дням · воронка размеры · остатки · отчёты 12 шагов ночного синка Ozon 2 кабинета продавца заказы · начисления по дням реклама · остатки Файлы заказчика остатки 1С по складам часы отдела нормирования спецификации шаблоном Слой синков Celery Beat, журнал прогонов идемпотентный импорт память о заказанном отчёте: после перезапуска доскачивается rate-limit на каждый кабинет границы суток по МСК кабинеты только читаются PostgreSQL 16 77 таблиц · 50 миграций Redis 7: кэш, брокер, очереди бэкап перед каждым выкатом Модули расчёта подсорт и книга с формулами советник и точный перебор направления и факт недели выкуп, размеры, сезон деньги по чекам, статьи товары и две себестоимости считают на лету, не хранят Портал Подсорт · План · Дашборд Товары · Аналитика · РНП 5 цветовых схем Google-витрина та же правда для менеджеров рендер в 07:35, до пулла Сигналы 21 тип отклонений страница портала и лист в Google-таблице ЖЕЛЕЗНОЕ ПРАВИЛО Система ничего не пишет в кабинеты площадок и в учётную систему. Поставки, цены, заказы тканей и документы 1С остаются за людьми: система считает, объясняет и готовит файл, а решение оставляет человеку.
23модуля бэкенда, у каждого свой README
50миграций схемы, выкат только аддитивный
07:35рендер Google-витрины, до пулла
0методов записи в кабинеты и в 1С
03 Подсорт

Что довезти со своего склада на площадки на эту неделю

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

прогноз = заказы в день за 3 дня × 7 дней
остаток площадки = склад площадки + склад продавца (FBS)
дефицит = остаток площадки − прогноз
доступно = max(0, остаток 1С − резерв открытых документов других кабинетов)
подсорт = max(0, min(неснижаемый 3 − дефицит, доступно))

Словами: довезти столько, чтобы хватило на неделю продаж и на полке осталось ещё три штуки, но не больше, чем лежит на складе. У каждой цифры на экране есть подстановка: заказы за 3 дня 6 шт, 2,0 в день × 7 дней = прогноз 14; остаток 6 - 14 = дефицит -8; неснижаемый 3 - (-8) = 11; на складе 53 - резерв 0 = 53; подсорт min(11, 53) = 11.

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

Книга с живыми формулами

Файл расчёта это не выгрузка чисел: восемь листов лист в лист с файлом планировщика, формулы строки совпадают символ в символ, справа колонки сверки с порталом и лист с легендой. Тест вычисляет формулы книги как Excel и требует совпадения с порталом. Человек сверяет систему в привычной раскладке и видит ошибку в любую сторону.

Заказы по размерам из отчёта площадки

Воронка сходится с кабинетом, но не знает размеров. Список заказов знает размеры, но меньше воронки. Решение: отчёт площадки по размерам день за днём и ежедневная сверка с воронкой. В день без отчёта размер берёт свои заказы по списку, а долями делится только разница. Инварианты держит тест на 300 случайных случаях.

Кто выпустил документ, тот забрал

Кнопка Сформировать список для склада создаёт документ сразу открытым. Открытый документ резервирует свои штуки от других кабинетов и закрывается сам, когда приходит снимок 1С свежее его даты. Одна штука больше не уходит в два кабинета.

Файл собирается в фоне

Фоновая задача со статусом и процентом, замок от двойного клика, зависшая сборка через 10 минут читается как ошибка с кнопкой Повторить. Перед сборкой берутся свежие остатки площадки; отказ площадки сборку не роняет, файл собирается по последнему снимку, а причина сказана словами. 5 500 строк собираются за 6,6 секунды.

Остатки 1С заменяют только свой склад

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

Архив не значит не продаём

Архивные артикулы в подсорте по умолчанию включены. Архив значит больше не шьём, а остатки распродаются, и довозить их надо: почти половина заказов приходится на модели, снятые с производства.

Чего расчёт не видит, написано прямо на экране: поставки на склады площадки, товар в пути к покупателю, второй кабинет той же площадки. Без снимка площадки остаток показан прочерком с пометкой, а в арифметике взят нулём со словами принят за 0: иначе такую строку нельзя было бы довезти. Строка с дефицитом и пустым складом получает пометку нечем крыть. Это кандидат в пошив и мост к плану.

4настройки: окно, горизонт, неснижаемый, доля в пути
12видов пометок строки
9листов книги, 13 правил светофора
230+91автотестов модуля
04 План пошива

В план идёт то, что человек отметил галочкой шьём

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

  1. Каталог с признаками. Артикулы с движением: выкуп, себестоимость, маржа на штуку, часы на штуку, сезон, советуемое количество и дата шить не позже. Плашки подсказывают решение: чёрная метка при низком выкупе, у новинок условия тестовой партии. Галочка шьём сохраняется сразу.
  2. Советник по срочности. Кнопка Собрать план советником раскладывает всё отмеченное: сначала то, что уже поздно, потом эта неделя, потом позже; внутри по дате, когда кончится остаток; новинки раньше. Считается за секунды. Точный расчёт перебором с отсечением остался второй кнопкой.
  3. Партия от спроса после прихода. Размер партии это непокрытый спрос за окно покрытия после прихода партии, вверх до шага и не меньше минимальной партии. У каждой партии настоящие даты: раскрой, пошив, на складе, на площадке.
  4. Правка это новая версия. Штуки, неделя, направление, удалить, добавить: каждая правка создаёт версию руками со ссылкой на родителя и строкой было, стало. Отменить правку значит вернуться к родителю.
  5. Сделать рабочим и выгрузить. Партии уходят в рабочий план вместе с направлением и раскладкой по размерам, отметки шьём с них снимаются в той же транзакции. Выгрузка это книга на три листа без единой денежной цифры.
План пошива: сводка без денег, загрузка двух направлений по неделям и партии расчёта
План: пять плашек без денег, лента загрузки двух направлений по неделям, недели за горизонтом пошива серые, ниже партии расчёта с чипами размеров.
План по неделям: гант партий с раскроем, пошивом, дорогой до склада и дорожками тканей
Вид по неделям: раскрой, пошив цветом направления, дорога до склада и доставка. Под партиями дорожки тканей с ромбиками, когда размещать заказ.

Горизонт пошива отделён от недель расчёта

Партия, сшитая в последнюю неделю трёхнедельного горизонта, приезжает на площадку за край расчёта, и движок видел после прихода нулевой спрос. Поэтому недель расчёта = горизонт + срок прихода + окно покрытия = 3 + 2 + 6 = 11, а партии ставятся только в первые три. Точный перебор заодно ускорился: 1 141 вариант на товар вместо 20 489.

План без денег это фильтр, а не второй движок

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

Отметка человека сильнее совета

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

Версии со снимком входа

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

Совпадение с эталоном бит в бит

Python-движок сверен с движком макета на шести изделиях: та же раскладка, те же партии, то же число узлов перебора. Даже округление JavaScript воспроизведено как floor(x + 0.5).

Итог часов считается один раз

В книге итог часов считается от точных часов, а не сложением округлённых строк. Иначе файл спорил бы с экраном на десятую долю часа.

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

3 / 11недель: горизонт пошива / расчёт
30%часов недели новинкам первым проходом
40 / 120 слимиты точного расчёта
226автотестов движка плана
05 Направления цеха

Два швейных направления вместо пяти участков

После встречи с фабрикой планируется только пошив, двумя направлениями по мастерам. Раскрой, ОТК, утюг и комплектовка выключены из загрузки, но их рубли по-прежнему идут в себестоимость. Жёстко расписывать участки вредно: фабрика теряет возможность маневрировать.

мощность направления, ч в неделю = людей × часов в смене × смен в неделю × (1 − резерв) − часы сторонним заказам
часы на штуку = часы отдела нормирования из спецификации, иначе расценка пошива / ставка перевода
часы партии = штук × часы на штуку
загрузка, % = часы партий недели / мощность × 100 больше 100 красный, от 85 жёлтый

Пример на условных числах: 20 человек по 8 часов, 5 смен, резерв 3% дают 20 × 8 × 5 × 0,97 = 776 часов в неделю. Изделие с нормой 2,03 часа в партии 180 штук займёт 365 часов, почти половину недели направления.

Настройки: два швейных направления с мощностью в часах и выключенные участки
Участки: два швейных направления с формулой мощности и строкой Пошив всего. Раскрой, ОТК, утюг и комплектовка выключены и серые внизу, в загрузке они не участвуют.

Одна функция часов на все экраны

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

Партия целиком в одном направлении

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

Первая отметка пошива закрепляет направление

Иначе новая партия недели переложила бы уже начатую в другое направление и переписала бы историю фактических часов. Закрепить можно и кнопкой, и переводом расчёта в рабочий план.

Файл нормирования грузится как есть

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

Пустота честнее нуля. Если у направления не указано число людей, мощности нет: ячейка серая с причиной, а не ноль и не 100%, и направление не входит в сумму Пошив всего, о чём сказано словами. Участок со ставкой на проверке считается, но цифра серая и в решениях не используется.

2 + 4направления и выключенных участка
>100%красная клетка: неделю не успеть
85-100%жёлтая: запаса на переделку нет
196автотестов модуля производства
06 План и факт

Дашборд производства: как идёт неделя

Сделанный план надо вести: что раскроено и отшито, что опаздывает, сколько часов реально ушло. Бывает и обратное: фабрика уже шьёт то, чего в плане не было, и это тоже заводится списком прямо из Excel.

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

Статус выводится из отметок

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

Отставание словами

У каждой партии написано, где она сейчас и насколько отстаёт: пошив по плану до 13.09, сделано 40 из 100. Клик по клетке недели раскрывает, из каких партий сложились её часы.

Размеры с живой суммой

Раскладка по размерам правится в раскрытой партии, рядом сумма 230 из 240, и кнопка Сохранить выключена, пока сумма не сошлась с партией.

4этапа: раскрой, пошив, готово, отгрузка
6статусов, выведенных из отметок
4 / 8 / 12недель в окне дашборда
07 Модель спроса

Выкуп, размеры и сезон считаются лесенкой источников

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

Выкуп: шесть ступеней, первая сработавшая

  1. Руками у артикула. Решение человека сильнее любой статистики.
  2. Свой выкуп артикула, если заказов в окне не меньше 20.
  3. Руками у категории.
  4. Выкуп категории по сумме штук всех её артикулов, а не среднее процентов: иначе товар с тремя заказами весил бы как товар с тремя тысячами.
  5. Выкуп всего каталога.
  6. Значение из настроек как последняя ступень.

Окно с отступом и ноль как нет данных

Воронка площадки дописывает выкуп ещё около двух недель, поэтому последние 14 дней в окно не берутся: иначе свежие дни всегда выглядели бы провалом. Ноль выкупов при живых заказах это нет данных, а не 0%: иначе движок объявил бы убыточной любую партию артикула.

Со склада уходит только выкупленное

Невыкупленное возвращается на склад через три недели и продаётся снова. На учебной партии 240 штук при выкупе 50% эта поправка меняет знак прибыли партии: без неё советник ставил бы убыточные партии всем.

Доли размеров и раскладка партии

Доли берутся руками, из своих заказов за 180 дней, из своих продаж, из профиля категории или поровну. Партия раскладывается по размерам: сначала закрывается нехватка каждого размера за месяц прихода, остаток по долям, кратно 10, и сумма всегда равна партии. Нехватка 48-го не закрывается излишком 54-го.

Golden-тест против Excel заказчика

Перенос помесячного расчёта потребности проверен на входах и ожиданиях самой книги: 13 786 пар размер-месяц в полном прогоне. Округление один раз и только от половины вверх, как ROUND в Excel. Помесячный экран потом уступил место ежедневному подсорту, а движок живёт в плане, раскладке партий и карточке товара.

Сезон из собственной истории

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

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

Близнец категории без AI

Категории Ozon находят пару на Wildberries правилом по основам слов: сдвоенные буквы схлопываются, окончания снимаются, кандидат берётся только короче исходного имени. Уточнение можно отбросить, но нельзя придумать: майка не становится майкой спортивной. Пару находят 23 категории из 29, остальным донора выбирает человек.

Форма сезона, а не штуки

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

Ровный год не сохраняется

Двенадцать единиц закрыли бы дорогу к истории категории, поэтому осознанное не учитывать сезон это отдельная кнопка. Коэффициенты по всем категориям разом не пишутся: шумные категории надо смотреть глазами.

6ступеней выкупа
5ступеней долей размеров
13 786пар в golden-прогоне
23 из 29категорий находят близнеца
08 Деньги

Деньги сходятся с 1С заказчика до копейки

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

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

Окно расшифровки статьи

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

Итог окна равен строке по построению

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

Каждый отчёт площадки сверяется

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

Перенос считается один раз

Очередь с тишиной 120 секунд, каждый перенос отодвигает срок, а пересчёт идёт теми же функциями, что ночная сборка: второй формулы прибыли в системе не появляется.

Копейки не теряются при делении

Деление поровну и пропорционально идёт в целых копейках: минус 5 копеек на три части это 1, 2 и 2 копейки, и сумма частей всегда равна целому.

Те же дни прошлого месяца

Седьмого сентября сравнение идёт с 1-7 августа, а не со всем августом: иначе в начале месяца все карточки показывали бы минус 75%.

7карточек дашборда
31строка свода, у каждой подсказка
11проверок на отчёт площадки
21тип сигналов
09 Товары

Один артикул, одна карточка, две себестоимости

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

действующая СС = прайс фабрики, версиями по дате → дашборд, аналитика, РНП
операции = пошив × (1 + премия) + раскрой + ОТК + утюг + комплектовка
СС производства = материалы + операции
утверждённая СС = утверждённая цена, иначе СС производства × К1 × К2 → советник, план
расхождение, % = |утверждённая − действующая| / действующая × 100 подсветка больше 15%
Карточка артикула: две себестоимости, трудоёмкость, партия и совет, движение и размеры
Карточка артикула: шесть плашек, себестоимость цепочкой, трудоёмкость, партия и совет, сезон, движение за 12 недель и размеры.
Спецификации: часы пошива с источником, коэффициенты и цепочка себестоимости
Спецификации: часы пошива с чипом источника, премия, коэффициенты и три себестоимости. Раскрытая строка показывает цепочку от материалов до утверждённой цены.

Без автосинхронизации двух СС

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

История прибыли не переписывается

Первая версия себестоимости ложится на всю историю, следующие только вперёд. Ноль и скачок больше чем в 10 раз откладываются на проверку: ноль превратил бы убыточный товар в сверхприбыльный. Новая цена сама пересчитывает витрины, и в шапке виден ход пересчёта.

Архив одной кнопкой

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

10 Язык интерфейса

Никаких буферов, барабанов и узких мест на экране

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

В коде и в ТЗВ интерфейсе
ключ товара, item_keyАртикул
спецификация, BOMИз чего шьём
норма расходаТкани на 1 штуку, м
логистическое плечоТкань едет, дней
точка заказаЗаказать до
мощность участкаЧасов в неделю
решение о запускегалочка шьём
жадная раскладка по срочностикнопка Собрать план советником
ветви и границыкнопка Точный расчёт
дефицит без покрытияпометка нечем крыть

Как посчитано у каждой цифры

Цифра с пунктиром открывает формулу словами и строку подстановки. Цифра, которую нельзя объяснить за десять секунд, в этом интерфейсе считается недоделанной.

Фильтр в каждой колонке

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

Порядок, как на фабрике

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

11 Итоги

Что изменилось у заказчика

БылоСтало
Подсорт на каждый кабинет из пяти отчётов и подстановок, резерв между кабинетами обнулялся. Подсорт на лету по каждому штрихкоду, книга с живыми формулами планировщика и сверкой с порталом, резерв между кабинетами документом.
Спрос считали по кабинету, выкуп одной константой, сезон в голове. Заказы четырёх кабинетов по ключу товара, выкуп, размеры и сезон лесенкой источников, история копится сама.
Что шить и когда, решалось таблицей. Человек отмечает, что шьём, советник раскладывает по неделям и направлениям, план уходит на фабрику файлом без денег.
Загрузку цеха считали в голове. Два направления с мощностью в часах, партия целиком в одном, план против факта по неделям на дашборде.
Маржа на портале в разы ниже, чем в 1С. Лестница денег как в 1С: выручка по чекам, статьи расходов с расшифровкой, каждый отчёт площадки сверен до копейки.
Себестоимость в двух местах и спор о цифрах. Две себестоимости по назначению в одной карточке артикула, расхождение подсвечено.
Почему такая цифра, никто не мог объяснить. У каждой цифры как посчитано с подстановкой, у плана блок Почему так и что не вошло.

Кирилл Седов

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

Связаться в LinkedIn