[I128-2839] Реализовать WorkflowApproval для формальных согласований workflow-переходов


НАЧАЛО >> Оглавление >> Общее описание >> История изменений >> Что нового в проекте I128 >> Версия 2026.3 >> [I128-2839] Реализовать WorkflowApproval для формальных согласований workflow-переходов📄 Скачать в DOCX


Тип Версия Статус Приоритет Исполнитель
⚙️ Новые возможности 2026.3 🔘 Завершено Средний Unassigned

Компоненты: Нет

Завершено: 08.09.2026 13:44

  1. Цель

Нужно реализовать модуль WorkflowApproval для формальных согласований workflow-переходов в ИРБИС 128.

WorkflowApproval должен быть расширением семейства Workflow*, а не отдельным process engine. Модуль добавляет approval gate к WorkflowTransition, создает runtime request согласования, фиксирует решения участников, управляет сроками, делегированием, отказом, ошибками continuation, событиями, audit и безопасным продолжением перехода.

Финальное изменение статуса доменной записи выполняет только Workflow. WorkflowApproval не должен напрямую менять доменную запись, писать собственную альтернативную историю статусов или выполнять post-functions в обход Workflow.

  1. Контекст

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

Если согласования реализовать отдельно в каждом доменном модуле, система получит несколько несовместимых механизмов прав, уведомлений, дедлайнов, делегирования, истории и продолжения переходов. WorkflowApproval должен стать общим модулем формальных approval gates поверх существующего Workflow runtime.

  1. Что Нужно Сделать

Нужно реализовать три top-level record types первого промышленного контура:

В первом контуре Step, Participant, Decision, Delegation, Deadline, Context и Audit являются вложенными секциями policy/request, а не отдельными top-level записями. Отдельный жизненный цикл этих сущностей не нужен, пока они не маршрутизируются независимо от approval request.

1. WorkflowApprovalGate

Gate должен хранить:

WorkflowTransition должен хранить только approvalGateKey. Если approvalGateKey пустой, переход выполняется штатно. Если approvalGateKey заполнен, Workflow перед выполнением перехода обращается к WorkflowApproval.

Удаление или деактивация gate должны проверять where-used: опубликованные transitions, system JSON definitions и активные WorkflowApprovalRequest.

1. WorkflowApprovalPolicy

Policy должна поддерживать четыре модели принятия решения:

Роли проекта не являются отдельной policy. Они используются как способ выбора участников.

Policy должна хранить:

Participant должен поддерживать sourceType:

Resolver текущего ответственного не должен знать номера полей Tasks. Источник ответственного должен задаваться настройками проекта, типом записи или FieldConfiguration.

1. WorkflowApprovalRequest

Request должен создаваться при попытке выполнить WorkflowTransition с blocking gate. До завершения gate целевой статус доменной записи не меняется.

Request должен хранить:

screenDataSnapshot должен хранить только нормализованные разрешенные значения, привязанные к screen key/version и transition version. Нельзя хранить секреты, cookie, пароли, токены, raw upload content или избыточный HTTP payload. Вложения хранятся как ссылки на staging/permanent file objects.

Перед continuation snapshot должен повторно валидироваться через WorkflowScreen и Workflow. Если screen, transition, gate, policy, запись или права изменились несовместимо, старое согласование нельзя применять: пользователь должен заново запустить переход.

1. Runtime Flow

Нужно реализовать следующий процесс:

Отказ gate по умолчанию только отменяет ожидающий переход и оставляет доменную запись в текущем статусе. Если проекту нужен отдельный статус отказа, gate может задать onRejectTransitionKey. Такой переход выполняется только через обычный Workflow со всеми проверками и защитой от циклов.

Администратор может повторить continuation только для технически восстановимых ошибок: временная блокировка, transient DB/runtime failure, временная недоступность обязательной интеграции, сбой Queue/EventBus/outbox или идемпотентно повторяемая post-function.

Новый запуск перехода должен требоваться при смене текущего статуса, недоступности route, невыполнении condition, отказе Security, невалидном screen snapshot, несовместимой версии transition/gate/policy/screen или удалении/блокировке записи.

1. UI И API

Нужно реализовать административный UI для gate и policy:

Карта workflow должна показывать только конфигурационный признак approval gate на transition и открывать редактор gate/policy по правам. Runtime-состояния конкретных requests на карте не показываются.

Карточка доменной записи должна показывать runtime-состояние approval request: статус, безопасный прогресс решений, сроки, просрочку, делегирование, ссылку на discussion thread и доступные текущему пользователю действия. Пользователь не должен видеть скрытых согласующих и внутренних причин сверх своих прав.

API WorkflowApproval должен поддерживать:

Первый пакет EventBus должен получать события:

WorkflowApproval публикует минимальный безопасный snapshot. Доставка, retries, deadletter и recipientspecific payload остаются ответственностью EventBus, Queue и Security.

1. System JSON, HealthCheck И Observability

Модуль должен поставлять системные JSON definitions для стандартных policies, gates, resolver definitions, screens, event profiles, TestA fixtures и Help metadata. System definitions защищены от редактирования без developer mode; пользовательское изменение выполняется через копию или override.

HealthCheck должен проверять:

Observability должен получать safe signals по созданию request, времени ожидания, числу решений, просрочкам, ошибкам resolver-а, ошибкам continuation и retry attempts. В signals нельзя передавать скрытые тексты, приватные комментарии и персональные данные сверх согласованного masking contract.

  1. Границы Ответственности

WorkflowApproval владеет approval gate, policy, request lifecycle, participant snapshot, decision rules, delegation rules, deadline state, retry classification, audit approval request, публикацией фактов согласования и безопасным DTO для UI/API.

Workflow владеет состоянием доменной записи, изменением статуса, route/condition проверками, post-functions, записью итогового действия в 907 и применением continuation.

WorkflowTransition владеет transition configuration и ссылкой approvalGateKey, но не хранит policy целиком.

WorkflowScreen валидирует экраны и screenDataSnapshot. WorkflowApproval хранит snapshot, но не реализует собственный редактор полей.

Collaboration владеет тредами, комментариями, уточнениями, вложениями в коммуникационной ленте и человекочитаемым обсуждением. WorkflowApproval хранит только ссылки и формальный результат.

EventBus владеет event log, outbox/inbox, delivery, retries, deadletter, notification profiles и recipientspecific payload.

Queue владеет runtime фоновых reminders, escalations и continuation jobs.

Security владеет правами, grants/denies, field/view masking, проверкой decision/delegation/admin actions и explain доступа.

WorkCalendar владеет календарным расчетом deadlines, reminders и escalation windows.

FieldConfiguration владеет field keys и источниками доменных полей вроде текущего ответственного.

Tasks и другие доменные модули только выбирают, какие transitions требуют approval, и задают доменные последствия через обычные workflowпереходы и postfunctions. Они не реализуют частный approval engine.

  1. Не Входит

В эту задачу не входит:

Администратор может создать policy anyOne, allParticipants, quorum и sequence, настроить участников, роли проекта, группы проекта, явных пользователей/группы, комментарии, delegation, abstain, fail-fast и repeat decision rules.

Администратор может создать gate, привязать его к transition через approvalGateKey, выбрать policy, screens, condition, executionPrincipal, onRejectTransitionKey, deadline/reminder/escalation settings и увидеть where-used.

Переход без approvalGateKey продолжает выполняться штатно.

Переход с required gate создает WorkflowApprovalRequest, не меняет статус доменной записи до завершения согласования и показывает пользователю состояние ожидания.

Participants snapshot создается на момент запуска request, дедуплицирует пользователей, найденных несколькими resolver-ами, и не использует hardcoded поля Tasks.

screenDataSnapshot сохраняет только безопасные нормализованные значения и повторно валидируется перед continuation.

После approved gate Workflow повторно проверяет актуальный статус, route, condition, locks, transition/gate/policy/screen versions и Security. Только после этого меняет статус записи и выполняет post-functions.

Отказ gate по умолчанию отменяет pending transition и не меняет доменную запись. onRejectTransitionKey, если задан, выполняется только через обычный Workflow.

Retry continuation разрешен только для восстановимых технических ошибок и каждый раз повторяет проверки Workflow, WorkflowScreen и Security.

Карта workflow показывает configuration marker approval gate на transition. Карточка записи показывает runtime request, прогресс решений, сроки, просрочку, delegation и доступные действия с учетом прав.

EventBus получает события lifecycle request, decisions, delegation, clarification, reminders, escalations и continuation result.

HealthCheck блокирует публикацию workflow-конфигурации при битом approvalGateKey, policyKey, condition, screen, resolver, deadline, calendar, Queue/EventBus profile или небезопасном onRejectTransitionKey.

System JSON definitions импортируются воспроизводимо, поддерживают dry-run/conflict report и защищены от ручного изменения без developer mode.

  1. Проверки И Документация

Нужно подготовить TestA-сценарии:

В Help должны быть подготовлены:

-

I128-2839: первый контрактный срез WorkflowApproval.

Состав изменений:

Проверки:

1. Связанные задачи

1.1. 🔗 blocks: I128-2804

[I128-2804] Доменные сущности, связи и классификация задач Статус: Завершено | Автор: Ilya Mikhaylenko

1.2. 🔗 blocks: I128-2840

[I128-2840] Реализовать WorkflowDesigner как единую административную студию настройки workflow-проектов Статус: Завершено | Автор: Ilya Mikhaylenko

1.3. 🔗 blocks: I128-2790

[I128-2790] Расширить Workflow* для промышленного контура задач Статус: Завершено | Автор: Ilya Mikhaylenko

1.4. 🔗 blocks: I128-2791

[I128-2791] Расширить WorkflowScreen/WorkflowView для публичных ws-форм и представлений Статус: Завершено | Автор: Ilya Mikhaylenko

1.5. 🔗 blocks: I128-2793

[I128-2793] Ввести TraceContext для сквозной трассировки операций Статус: Завершено | Автор: Ilya Mikhaylenko

1.6. 🔗 blocks: I128-2794

[I128-2794] Реализовать системную событийную шину EventBus Статус: Завершено | Автор: Ilya Mikhaylenko

1.7. 🔗 blocks: I128-2795

[I128-2795] Расширить Queue как runtime фоновых заданий, retry и расписаний Статус: Завершено | Автор: Ilya Mikhaylenko

1.8. 🔗 blocks: I128-2797

[I128-2797] Расширить Security для проектных прав, полей, действий и аудита доступа Статус: Завершено | Автор: Ilya Mikhaylenko

1.9. 🔗 blocks: I128-2798

[I128-2798] Реализовать HealthCheck для workflow-проектов и задач Статус: Завершено | Автор: Ilya Mikhaylenko

1.10. 🔗 blocks: I128-2799

[I128-2799] Подготовить TestA-контракты системных JSON и end-to-end сценариев Статус: Завершено | Автор: Ilya Mikhaylenko

1.11. 🔗 blocks: I128-2806

[I128-2806] Системные треды и публичные коммуникации Collaboration Статус: Завершено | Автор: Ilya Mikhaylenko

1.12. 🔗 blocks: I128-2813

[I128-2813] Расширить Users/Organisations для заявителей и resolver участников процессов Статус: Завершено | Автор: Ilya Mikhaylenko

1.13. 🔗 blocks: I128-2817

[I128-2817] Реализовать общесистемные рабочие календари WorkCalendar Статус: Завершено | Автор: Ilya Mikhaylenko

1.14. 🔗 blocks: I128-2818

[I128-2818] Реализовать наблюдаемость Observability для промышленных модулей Статус: Завершено | Автор: Ilya Mikhaylenko

1.15. 🔗 blocks: I128-2825

[I128-2825] Расширить FieldConfiguration как реестр полей workflow-проектов Статус: Завершено | Автор: Ilya Mikhaylenko

1.16. 🔗 blocks: I128-2826

[I128-2826] Расширить Help для документации задач, API и эксплуатационных runbook Статус: Завершено | Автор: Ilya Mikhaylenko