a
anyCore · Сценарии Scenario engine — target model
TENANT / PROJECT i
React + React Flow i
Интерфейс глазами роли: {{ viewRoleLabel }} {{ viewRoleHidden }}

Сценарии

{{ listCountLabel }} · {{ tenantLabel }}
представления сортировка
Требует внимания гейты ждут решения — SLA тикает
{{ a.title }} {{ a.node }} {{ a.sla }} {{ a.who }}
Выбрано: {{ bulkCount }}
СЦЕНАРИЙТРИГГЕР7 ДНЕЙУСПЕШНОСТЬЖДУТИЗМЕНЁНВКЛ
{{ r.groupLabel }}
{{ r.title }} {{ r.state }} {{ r.version }} {{ r.chain }}
{{ r.triggerFunnel }} {{ r.triggerEvent }}
{{ r.success }} {{ r.runsLabel }}
{{ r.waiting }}
{{ r.updated }} {{ r.owner }}
ЦЕПОЧКА УЗЛОВ
{{ c.title }}
{{ r.desc }}
ПОСЛЕДНИЕ ПРОГОНЫ
{{ l.mark }} {{ l.at }} {{ l.ms }}
ВЕРСИИ И ДЕЙСТВИЯ {{ r.versionLine }}
Ничего не найдено Измените фильтр или поиск. Пустое состояние тоже надо отрисовать.
{{ s.title }} {{ s.titleEn }}
{{ s.state }}
{{ s.desc }}
{{ s.nodeCount }} узлов {{ s.success }} ждут: {{ s.waiting }} {{ s.updated }}
карточка = один сценарий: {{ 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 — удалить узел «Выровнять» разложит граф по уровням
Пустой сценарий нельзя ни сохранить, ни запустить — поэтому кнопки прогона тут нет вовсе, а не задизейбленная. Проверки движка появятся в панели «Проблемы».
{{ n.kindLabel }} {{ n.statusLabel }}
{{ n.title }}
{{ n.verbId }}
{{ pp.k }} {{ pp.v }}
{{ n.summary }} {{ n.errBadge }}
Гейт: {{ gateTitle }} rules.v1 · {{ gateRuleLine }} · ждёт {{ gateRole }}
Палитра действий
{{ palCount }} i
Перетащите на холст или кликните · {{ palCount }}
{{ p.title }} {{ p.badge }}
{{ p.verbId }} {{ p.summary }} {{ p.mod }}
Ничего не найдено. Палитра приходит с бэка — новых действий тут не появится, пока их не отдаст /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 }}
Прогонов ещё не было Запустите сухой прогон: движок пройдёт узлы, покажет вход/выход каждого шага и остановится на первом гейте.
Гейт · решение человека i
{{ gateTitle }}
{{ rc.label }}
{{ g.k }} {{ g.v }}
КАК ПОЛУЧЕНО РЕШЕНИЕ · {{ dmnDecisionId }}
сработала строка {{ dmnRuleNo }} · hit policy FIRST {{ dmnRuleText }}
{{ do.text }}
{{ dmnTbdNote }}
SLA {{ slaText }} {{ slaSub }}
{{ gateWho }} {{ gateSourceLine }}
{{ gateIdleTitle }} {{ gateIdleBody }}
РЕШЕНИЯ ПО ЭТОМУ СЦЕНАРИЮ
{{ g.verdict }} {{ g.at }}
{{ g.who }} {{ g.note }}
Движок сценариев ещё не построен: этот прогон — спроектированное поведение (ADR 0016), а не работающий код. Эндпоинты verbs и очередь — есть.

Конструктор действий · язык описания нод

{{ verbsMetaLine }}
Нода описывается декларативно: ключ, вид, сущность ядра, параметры, выходные поля, capability и элемент BPMN. Из этого описания строится карточка в палитре — фронт не пишется под каждое действие. Бэку остаётся модуль на Go с той же подписью: кнопка «Заготовка модуля .go» отдаёт скелет.
ПАРАМЕТРЫ УЗЛА · РИСУЮТСЯ В ПАНЕЛИ НАСТРОЙКИ
{{ vSaveLine }}
КАК ЭТО ЖИВЁТ
{{ r.k }} {{ r.v }}
Подключения i
Арендатор: {{ tenantLabel }}
Роль: {{ roleLabel }}

Подключить CRM

Пять шагов · токен в интерфейс не вводится ни на одном из них
Какая 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
Роли и права проверяет бэкенд. Интерфейс их отражает: запрещённое не показывает.

{{ roleTitle }}

{{ rolePeopleLine }}
{{ roleMetaLine }}
ОБЪЕКТВИДЕТЬМЕНЯТЬЗАПУСКАТЬПОДТВЕРЖДАТЬАДМИН
{{ m.label }} {{ m.scope }}
Capabilities · role-capabilities.v1 {{ capsCount }}
{{ c.label }}
Ни одной 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 месяцев, дальше — выгрузка.
{{ k.k }} {{ k.v }}
Этап · что нужно бэку i
{{ stage.pos }} {{ stage.name }} {{ stage.countLabel }}
📋 ПОЛЯ ЭТАПА
{{ f.label }}
Своих полей нет — этап только меняет состояние.
⚙️ АВТОМАТИЗАЦИИ И ПОКРЫТИЕ
{{ a.text }}
{{ a.verb }}
{{ a.badge }}
Автоматизаций по ТЗ нет — этап ведёт человек. Это тоже результат: сценарий здесь не нужен.
ОТКУДА ЭТО И КАК МЕНЯТЬ
{{ r.k }} {{ r.v }}
{{ stageNote }}
{{ svgZoomLabel }}
Оригинал ↗
{{ funnelCaption }}
Что это за экран {{ svgWhat }}
{{ o.k }} {{ o.v }}
{{ bpmnPathLine }}
{{ bpmnErr }}
{{ bpmnStat }} {{ bpmnSkippedLine }}
Это полноценный редактор (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). Дизайнеру важно спроектировать импорт и разбор ошибок: неподдерживаемые элементы (подпроцессы, таймеры, сообщения) нужно показывать списком, а не молча игнорировать.
Что из этой схемы ложится на движок i
{{ a.badge }} {{ a.text }}
{{ tipTitle }} {{ tipBody }} {{ tipEn }}