Skip to content

Формулы маршрута (dual: операции + РМ)

Обновлено: 17.05.2026 Статус: wave K-P9 ACCEPTED 2026-05-03, production на main 01905a3b, e2e walk-through verified. Виджет RouteFormula встроен в карточку tech-object'а, в RouteCardDetail и OperatorStation. Адресат: технолог (правит формулы), мастер (читает развёрнутый маршрут), оператор (видит next step).

Описывает виджет «Формула маршрута» — двухтипный селектор маршрута изделия: формула по операциям (per-operation override) + формула по рабочим местам (per-WP override). Парсер, кнопки Развернуть / Проверить, ошибки валидации.

1. Что это и зачем

Маршрут изделия в Кочарине — это последовательность операций (точение → фрезеровка → термообработка → шлифовка → сборка → контроль). Но для конкретного изделия может быть:

  • override по операции: «вместо точение использовать точение-черновое + точение-чистовое»;
  • override по РМ: «эту партию обработать на токарном станке Z-013 вместо общего пула токарных».

K-P9 даёт два параллельных формат-поля на tech object:

  • route_formula_operations (JSONB) — последовательность операций (необязательно с указанием РМ);
  • route_formula_workplaces (JSONB) — последовательность РМ (необязательно с указанием операций).

Оба поля независимы. Виджет позволяет редактировать обе формулы с подсказками (parser+validate), сохраняет в JSONB на tech object.

2. Виджет на карточке tech-object

Открываем /technology/objects — список изделий. У ВСП 24 объекта (см. Integrator console §4).

Tech objects list

Кликаем на конкретный объект — открывается карточка с табом «Технология»:

Tech object detail page

RouteFormula widget не показан на этом скриншоте

Скриншот выше — детальная страница первого объекта в списке. У этого конкретного объекта поля route_formula_operations / route_formula_workplaces пока пустые (NULL или JSONB null), поэтому виджет не рендерится.

Текущее состояние на dev-стенде (verified 17.05): у всех импортированных Кочарин-объектов формулы маршрута не заполнены. Импорт K-O2 Block B6 строит другие структуры (operations_route, base_route_snapshot, поля на technological_object_route_rows таблице), не route_formula_* JSONB. K-P9 виджет рассчитан на ручное заполнение технологом или импорт следующей итерации.

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

3. Что виджет показывает

(Описание без реального скриншота на текущем стенде, по K-P9 methodology §4-5.)

3.1. Свёрнутая (compact) форма

Маршрут по операциям: точение → фрезеровка → термообработка → шлифовка → сборка
[Развернуть] [Проверить]

3.2. Развёрнутая (expanded) форма

После клика Развернуть — таблица с одной строкой на шаг:

#ОперацияРабочее местоВремя, минАльт. РМ
1точениеZ-013 (приоритет)45Z-014, Z-015
2фрезеровкаF-00730F-008
3термообработка(ИКС cooperation)240
4шлифовкаSh-00260Sh-003
5сборкаA-00190

3.3. Кнопка Проверить

Парсер проверяет:

  • все операции существуют в global KOCH_* operations vocab;
  • все РМ существуют в текущей organization (Workplace);
  • альтернативные РМ — в той же organization (нет cross-tenant утечек);
  • временные нормативы — числа > 0;
  • кооперационные шаги (термообработка ИКС) — есть active TechnologicalObjectShare или cooperation_routes запись.

При ошибке — Alert с указанием конкретной строки и причины.

3.4. Validate error states

(По K-P9 6 блоков, 15+ codex review iterations.)

Возможные сообщения:

  • «Операция xyz не найдена в справочнике»;
  • «РМ Q-099 не существует в KOC-4505016987»;
  • «Альт.РМ Z-099 принадлежит другой organization (KOC-7203456955) — недопустимо»;
  • «Шаг 3 ссылается на кооперацию ИКС, но active share отсутствует — попросите интегратора создать TechnologicalObjectShare».

4. Виджет в других местах

RouteFormula встроен в три экрана:

  1. Tech object detail — редактируемый (для technologist role).
  2. RouteCardDetail (/operational/route-cards/:id) — read-only, показывает финальный маршрут для конкретной партии (мастер видит).
  3. OperatorStation (/operational/operator) — read-only «текущий шаг», highlight на текущей операции, оператор видит только next step + дальнейшие.

5. Маршрут просмотра (когда найдётся живой объект)

После того как технолог откроет один из 24 ВСП объектов с заполненной формулой:

  1. Открыть карточку, перейти на вкладку «Технология».
  2. Виджет RouteFormula вверху таба — увидеть свёрнутую compact формулу.
  3. Нажать Развернуть — увидеть таблицу с РМ + альтернативами + временами.
  4. Изменить одну операцию (например, вставить дополнительный шаг), нажать Проверить → должно быть зелёное «OK».
  5. Сохранить — JSONB обновляется на tech object.
  6. Открыть RouteCardDetail для партии этого изделия — увидеть новый маршрут.

6. Что отложено

  • Drag-and-drop переупорядочивание операций — сейчас только текстовый редактор. Полноценный визуальный builder — после пилота.
  • Branching маршруты (if/else по модификаторам) — описано в K-A2 conditional materials, не входит в K-P9 scope.
  • History диффа формул — изменения формулы логируются в HistoricalRecords, но UI-таймлайн не реализован.
  • Bulk apply — изменить формулу одновременно у N tech object'ов через интегратора. Сейчас только по одному.

7. Что искать в обратной связи

  1. Compact vs expanded — какой формат предпочтительнее по умолчанию для технолога Кочарина?
  2. Названия операций — должны ли они показываться на русском («Точение»), коде («OP-001»), или комбинации?
  3. Альтернативные РМ — нужны ли приоритеты (rank=1, 2, 3) или достаточно списка?
  4. Validate ошибки — текст сообщений понятен или нужно более «человеческое» описание?
  5. Read-only вид в OperatorStation — нужно ли видеть весь маршрут или только current + next step?

Приложение. Evidence в репозитории

  • docs/sprint_2026_may/closed/2026-05/K-P9-route-formulas-dual.md — закрытая methodology с 6 блоками и 15+ codex iterations.
  • frontend/src/components/common/RouteFormula.tsx — виджет.
  • frontend/src/components/common/RouteFormula.test.tsx — vitest unit.
  • antroute_backend/technology/models/technological_object.py (поля route_formula_operations, route_formula_workplaces).
  • antroute_backend/technology/services/route_formula_parser.py — парсер + validate.
  • antroute_backend/technology/tests/test_route_formula_parser.py — backend pytest.

AntRoute MES — управление блуждающими узкими местами