Appearance
Формулы маршрута (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).

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

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 (приоритет) | 45 | Z-014, Z-015 |
| 2 | фрезеровка | F-007 | 30 | F-008 |
| 3 | термообработка | (ИКС cooperation) | 240 | — |
| 4 | шлифовка | Sh-002 | 60 | Sh-003 |
| 5 | сборка | A-001 | 90 | — |
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 встроен в три экрана:
- Tech object detail — редактируемый (для technologist role).
- RouteCardDetail (
/operational/route-cards/:id) — read-only, показывает финальный маршрут для конкретной партии (мастер видит). - OperatorStation (
/operational/operator) — read-only «текущий шаг», highlight на текущей операции, оператор видит только next step + дальнейшие.
5. Маршрут просмотра (когда найдётся живой объект)
После того как технолог откроет один из 24 ВСП объектов с заполненной формулой:
- Открыть карточку, перейти на вкладку «Технология».
- Виджет
RouteFormulaвверху таба — увидеть свёрнутую compact формулу. - Нажать
Развернуть— увидеть таблицу с РМ + альтернативами + временами. - Изменить одну операцию (например, вставить дополнительный шаг), нажать
Проверить→ должно быть зелёное «OK». - Сохранить — JSONB обновляется на tech object.
- Открыть 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. Что искать в обратной связи
- Compact vs expanded — какой формат предпочтительнее по умолчанию для технолога Кочарина?
- Названия операций — должны ли они показываться на русском («Точение»), коде («OP-001»), или комбинации?
- Альтернативные РМ — нужны ли приоритеты (rank=1, 2, 3) или достаточно списка?
- Validate ошибки — текст сообщений понятен или нужно более «человеческое» описание?
- 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.