карточка = один сценарий: {{ s.bindKey }} · канон {{ s.bindProc }} · {{ s.nodeCount }} узлов на холсте
iВсе числа на этом экране — агрегаты с бэка (успешность, ожидания, ошибки). Фронт их только показывает. Версия сценария и «кто изменил» приходят из журнала.
Сводка сценария
{{ peekTitle }}{{ peekKey }}{{ peekDesc }}
{{ peekReady }}
{{ p.mark }}{{ p.text }}
Блокеров нет: все шаги на живых verb, гейты привязаны к DMN.
ТРИГГЕР{{ peekTrigger }}
ШАГИ
{{ st.n }}{{ st.title }}{{ st.badge }}
ГЕЙТ И РЕШЕНИЕ{{ peekGate }}
Массовое переименование узлов{{ renCountLabel }}
К КАКИМ УЗЛАМ
{{ renTokens }}
{{ b.was }}→{{ b.verbId }}
{{ renFooter }}
{{ scenarioTitle }}{{ canvasMeta }}
{{ zoomLabel }}
прогон появится, когда будет триггер
{{ hintText }}
Проблем нет: у всех узлов есть вход, у гейтов задана роль, параметры заполнены.
← перетащите действие из палитры или начните отсюда
Начните с триггераСценарий всегда начинается с события в CRM. Дальше — действия бэка, при необходимости гейт «нужен человек», в конце запись обратно в CRM.
Или соберите из шаблона ТЗ
ЧТО НУЖНО СЦЕНАРИЮ
{{ c.mark }}{{ c.text }}
порт справа → порт слева = связьDelete — удалить узел«Выровнять» разложит граф по уровням
Пустой сценарий нельзя ни сохранить, ни запустить — поэтому кнопки прогона тут нет вовсе, а не задизейбленная. Проверки движка появятся в панели «Проблемы».
Ничего не найдено. Палитра приходит с бэка — новых действий тут не появится, пока их не отдаст /v1/verbs.
{{ c.k }}{{ c.v }}
{{ contractJson }}
Палитра, параметры, формы ответа и capability каждого действия — из этого пакета. Фронт ничего не добавляет от себя.
{{ palGeom }}
Панель настройки
{{ inspectorTitle }}i
{{ sel.kindLabel }}{{ sel.avail }}
{{ sel.verbId }} · шаг {{ sel.pos }} · {{ sel.module }}Как настроить узел: выбрать действие в списке выше (список приходит с бэка), заполнить параметры во вкладке «Параметры», подставить данные предыдущих шагов кнопкой «{{ '{{' }}переменная{{ '}}' }}», проверить вход-выход во вкладке «Данные».
ПРОБЛЕМЫ УЗЛА{{ p.text }}
{{ sel.contract }}
ДАННЫЕ ПРЕДЫДУЩИХ ШАГОВi
{{ varsHint }}
Это первый шаг — данных от предыдущих узлов нет.
ЧТО ВЕРНЁТ ЭТОТ ШАГ
{{ selOutput }}
Форму ответа объявляет бэкенд вместе с verb — фронт её не придумывает.
СВЯЗИУзел ни к чему не подключён — в прогоне он не выполнится.
Политику ретраев и таймаутов исполняет очередь бэкенда. Интерфейс её задаёт и показывает — но не реализует.
{{ selIdempotency }}
Delete / Backspace — удалить выбранный узел
Выберите узел на холсте, чтобы настроить параметры. Select a node to edit its params.
scenarios.v1 · steps / use / input{{ canvasExportedLine }}
{{ schemaJson }}
{{ inspGeom }}
Прогон · {{ scenarioTitle }}
{{ runStateLabel }}{{ runIdLabel }}
{{ runMetaLine }}
i
прошлые прогоны
{{ k.k }}{{ k.v }}
Проверка перед прогоном{{ preflightVerdict }}
{{ p.mark }}{{ p.text }}{{ p.where }}
Блокеров нет: все шаги на живых verb, гейты привязаны к DMN, SLA заданы.
ВХОД
{{ r.input }}
ВЫХОД
{{ r.output }}
{{ r.endpoint }}{{ r.attempts }}{{ r.crm }}
{{ r.capability }}{{ r.idem }}{{ r.bpmnEl }}
Прогонов ещё не былоЗапустите сухой прогон: движок пройдёт узлы, покажет вход/выход каждого шага и остановится на первом гейте.
Движок сценариев ещё не построен: этот прогон — спроектированное поведение (ADR 0016), а не работающий код. Эндпоинты verbs и очередь — есть.
Конструктор действий · язык описания нод
{{ verbsMetaLine }}
Нода описывается декларативно: ключ, вид, сущность ядра, параметры, выходные поля, capability и элемент BPMN. Из этого описания строится карточка в палитре — фронт не пишется под каждое действие. Бэку остаётся модуль на Go с той же подписью: кнопка «Заготовка модуля .go» отдаёт скелет.
Пять шагов · токен в интерфейс не вводится ни на одном из них
Какая CRM
Список поддерживаемых CRM приходит с бэка вместе с диалектами — карточек ровно столько, сколько диалектов реализовано.
Секрет кладёт администратор
{{ i.n }}{{ i.text }}
ожидаемый secretRef{{ wizSecretRef }}
{{ wizSecretState }}
Поля «введите токен» и кнопки «показать секрет» тут нет и быть не должно: интерфейс ждёт появления ссылки, а не значения.
Проверка связи
{{ c.mark }}{{ c.label }}{{ c.detail }}
{{ checkSummary }}
Проверка — сухая: ничего не пишется в CRM. Поля без соответствия — не ошибка, а работа для внедренца на следующем шаге.
Соответствие полей и воронки
ПОЛЕ ЯДРАПОЛЕ В CRMСТАТУС
{{ m.core }}→{{ m.crm }}{{ m.badge }}
КАКИЕ ВОРОНКИ ПОДКЛЮЧАЕМ
{{ wizFunnelsHint }}
Итог
{{ r.k }}{{ r.v }}
После сохранения подключение появится в списке слева. Секрет остаётся в хранилище — интерфейс продолжает работать со ссылкой.
{{ wizGateHint }}
{{ conn.name }}
{{ conn.state }}{{ conn.role }}
{{ conn.host }} · проверено {{ conn.checked }}
Проверка связи{{ checkSummary }}
{{ c.mark }}{{ c.label }}{{ c.detail }}
{{ m.k }}{{ m.v }}{{ m.sub }}
Конфликты · rules.v1{{ conn.posture }}
Классы — из rules.v1: то, что попадает в review_required или требует approval_required. Клик ведёт в журнал.
Сущности и синхронизацияi
СУЩНОСТЬНАПРАВЛЕНИЕЗАПИСЕЙСОСТОЯНИЕ
{{ e.name }}{{ e.dir }}{{ e.count }}{{ e.state }}
Где используется
{{ u.title }}{{ u.verbs }}
Отключение подключения остановит эти сценарии — предупреждение обязательно.
Диалект: {{ conn.dialect }}. Соответствие полей задаёт бэкенд, интерфейс его показывает и позволяет выбрать поле CRM из списка, который пришёл с сервера.
ПОЛЕ ЯДРАПОЛЕ В CRMТИП
{{ m.core }}→{{ m.crm }}{{ m.badge }}{{ m.type }}
capabilities.v1 · что умеет коннектор
{{ c.label }}
Серым — то, чего диалект не умеет: сценарий с таким шагом на этом подключении не запустится.
{{ conn.dialectNote }}
Подписки на события
{{ t.label }}
{{ e.name }}{{ e.code }}{{ e.rate }}
Очередь и лимитыi
{{ l.k }}{{ l.v }}
Последние ошибки
{{ e.at }}{{ e.msg }}{{ e.code }}
Тела ответов CRM в интерфейсе не показываем — только код и человеческая формулировка.
Подключение — это не «настройки», а набор версионированных пакетов, как в sync-bridge. Каждый со своим uid, rev и постурой проверки; интерфейс их показывает и валидирует, но не редактирует руками.
ПАКЕТUIDREVПОСТУРА
{{ connPkgTitle }}
{{ connPkgJson }}
пересборка: {{ t.label }}
Секретi
secretRef{{ conn.secretRef }}
{{ m.k }}{{ m.v }}
Значение секрета интерфейсу недоступно. Ротацию делает администратор в хранилище; здесь — только ссылка, срок и кнопка «запросить ротацию».
Доступ по ролямi
{{ r.label }}{{ r.state }}
Недоступное роли — скрыто, а не задизейблено: строка исчезает из интерфейса целиком.
Опасные действия
Отключение требует подтверждения со списком затронутых сценариев ({{ conn.usedCount }}).
Процесс{{ procFunnelSc }}
{{ workZoomLabel }}
{{ workBpmnLine }}{{ workErr }}
Этапы ТЗ
{{ workFunnelName }}выбор воронки — в шапке «Процесса»
{{ workSourceLine }}
ГОТОВНОСТЬ К ИСПОЛНЕНИЮ
{{ r.k }}{{ r.v }}
{{ wLeftGeom }}
Привязка этапа
{{ bindTitle }}{{ bindPath }}
ЭЛЕМЕНТ BPMN
{{ bindElement }}{{ bindType }}
ГЕЙТ → DMN + RULES.V1
ЧТО МЕШАЕТ ИСПОЛНЕНИЮ
{{ g.mark }}{{ g.text }}
Шаг исполним: verb живой, параметры заданы, решение привязано.
{{ bindTrace }}
{{ wRightGeom }}
Режим ТЗ · spec.v1
{{ specStateLabel }}
{{ specMetaLine }}
{{ specImportTitle }}{{ l.text }}⚠ {{ w.text }}
ЧТО ИЗМЕНИТСЯ · trigger: spec_changed{{ d.text }}
Этапы · {{ specFunnelTitle }}{{ specFunnelSub }} · выбор воронки — в шапке «Процесса»
{{ st.num }}📋 {{ st.nf }}⚙️ {{ st.na }}
Порядок этапов — это порядок в BPMN: он определяет sequenceFlow и порядок шагов сценария. Номера пересчитываются автоматически.
Этап · редактор
{{ specStageTitle }}{{ specStagePath }}
📋 ПОЛЯ ЭТАПА
⚙️ АВТОМАТИЗАЦИИ
{{ au.hint }}
Список действий — из контракта /v1/verbs. «вне движка» означает, что шаг требует чего-то ещё (генератор документов, калькулятор).
Запись в репозиторий — за бэкендом (PUT /v1/spec). Отсюда правки выгружаются файлом; экраны «Схемы» и холст читают их сразу.
{{ sRightGeom }}
Ролиi
Роли и права проверяет бэкенд. Интерфейс их отражает: запрещённое не показывает.
Ни одной capability — роль не видит движок вообще.
{{ capsJson }}
Нотация как в sync-bridge: project_key / team_key / role_key → строки Domain.Object.Action. Тумблеры выше — это её визуальная форма, не отдельная модель прав.
Что эта роль не увидит вовсе
скрыто{{ h.text }}
Эта роль видит все экраны — скрывать нечего.Не «серые кнопки с подсказкой», а отсутствие элемента: ни кнопки, ни строки, ни пункта меню.
Локации и объём данных
{{ roleLocHint }}
{{ r.k }}{{ r.v }}
Покрытие гейтов ролями{{ coverVerdict }}
{{ c.mark }}{{ c.text }}{{ c.where }}
Проверка идёт по привязкам ТЗ: у каждого гейта есть роль, а у роли должна быть capability AnyCore.Scenario.Gate.Approve — иначе прогон встанет навсегда.
Люди в роли{{ peopleLine }}
{{ p.name }}{{ p.loc }}{{ p.pending }}
Кто «на смене» и сколько решений ждёт лично его. Если у роли один человек и он вне смены — гейт с PT4H сгорит.
Проверить и сохранить
{{ r.mark }}{{ r.text }}
Любое изменение прав пишется в журнал аудита: кто, когда, какая capability.
Какие гейты подтверждаетi
{{ g.title }}{{ g.node }}SLA {{ g.sla }}
Эта роль не подтверждает гейты — прогоны её не ждут.
iМатрица — макет для дизайнера: набор объектов и действий финализируется вместе с контрактом /v1/roles. Изменения прав всегда попадают в журнал аудита с указанием, кто их сделал.
Журнал · аудит
{{ auditMeta }}
⌕
ВРЕМЯСОБЫТИЕСЦЕНАРИЙ / УЗЕЛКТОСТАТУС
ЧТО ПРОИЗОШЛО
{{ d.k }}{{ d.v }}
ДЕЙСТВИЯ{{ a.idLine }}
Записей нетИзмените фильтр или поиск.
iЖурнал только читается: правок и удалений в интерфейсе нет. Записи привязаны к арендатору — чужие не видны даже владельцу. Хранение 18 месяцев, дальше — выгрузка.
Это полноценный редактор (bpmn-js modeler): палитра слева, правка задач и потоков, импорт чужого .bpmn и экспорт файла. Канон лежит в bpmn/ и сгенерирован из ТЗ; правки скачиваются файлом — запись в репозиторий делает бэкенд (контракта ещё нет).
dmn/crm_gates.dmn · 7 таблиц решений · канон правил
ГЕЙТ НА ХОЛСТЕDECISIONВХОДЫВЫХОДЫ
{{ r.g }}{{ r.d }}{{ r.i }}{{ r.o }}
{{ dmnXmlText }}
{{ dmnPathLine }}
{{ dmnErr }}Пять таблиц решений из ТЗ (dmn-js): бюджет подготовки, возврат с ОТК, постоплата, распределение партии, согласование сделки. Выход каждой строки — класс rules.v1 + роль + SLA + auto_apply; именно его показывает гейт в прогоне. Метки TBD_* — значения, которых в ТЗ нет.
{{ funnelImg }}
BPMN 2.0 — формат обмена процессамиКартинка нужна человеку, машине нужен BPMN: из него сценарий собирается за один клик, без перерисовки.
ЭЛЕМЕНТ BPMNУЗЕЛ ДВИЖКАПОДДЕРЖКА
{{ m.bpmn }}{{ m.node }}{{ m.badge }}
{{ bpmnFileName }}
{{ bpmnXml }}
Честно: парсера BPMN на бэке ещё нет — это часть движка сценариев (ADR 0016). Дизайнеру важно спроектировать импорт и разбор ошибок: неподдерживаемые элементы (подпроцессы, таймеры, сообщения) нужно показывать списком, а не молча игнорировать.