Платформа 3V/Согласование

Материал из 3v-wiki
Перейти к навигации Перейти к поиску

Согласование - это объект системы, описывающий жизненный цикл сущности при помощи состояний (states) и переходов/шагов (steps). Согласования используются для построения бизнес-процессов, при этом состояние описывает устойчивое положение сущности в рамках жизненного цикла, а переход описывает изменение одного состояния на другое.


Общие сведения

Описание атрибутов состояния (state):

Свойство Описание
id Идентификатор состояния
name Название
icon Иконка используемая для визуального обозначения состояния
dataAvailabilitySettings Настройки доступности данных для состояния процесса
regulation Регламент выполнения состояния процесса.

Описание атрибутов перехода (step):

Свойство Описание
fromStateId Состояние из которого переходит объект
toStateId Состояние в которое переходит объект
id Идентификатор перехода
name Название перехода

Для гибкой настройки согласования в системе предусмотрена настройка прав доступа (permissions) на переходы. В зависимости от прав доступа для разных ролей может быть настроен персональный набор переходов.

Описание атрибутов прав доступа (permission):

Свойство Описание
stepId Состояние из которого переходит объект
subjectId Состояние в которое переходит объект
type Идентификатор перехода

Описание регламента выполнения состояния процесса (regulation):

Свойство Описание
discriminator Задаём вид фиксации даты
FixedStateRegulationModel Фиксированная дата в конечном виде
TimePeriodStateRegulationModel Дата получаемая путём сдвига от текущей с отсчётом от полуночи
FixedStateRegulationModel
str, "1970-01-01T00:00:00Z"
TimePeriodStateRegulationModel
Years int, Сдвиг по годам
Quarters int, Сдвиг по кварталам
Months int, Сдвиг по месяцам
Days int, Сдвиг по дням
Hours int, Сдвиг по часам
Результат
finishedTime Конечная дата исполнения состояния
"2021-10-30T12:00:00Z"

Пример согласования:

  1 {
  2   "template": {
  3     "schema": {
  4       "states": [
  5         {
  6           "icon": {
  7             "type": "svg",
  8             "data": "<svg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'><path d='M0 10L1.19249e-07 0L10 1.19249e-07L6 5L10 10L0 10Z' fill='#F08513'/></svg>"
  9           },
 10           "id": 1,
 11           "dataAvailabilitySettings": null,
 12           "name": "Черновик"
 13         },
 14         {
 15           "icon": {
 16             "type": "svg",
 17             "data": "<svg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'><path d='M0 10L1.19249e-07 0L10 1.19249e-07L6 5L10 10L0 10Z' fill='#0066DD'/></svg>"
 18           },
 19           "id": 2,
 20           "dataAvailabilitySettings": {
 21             "disableEdit": true
 22           },
 23           "regulation": {
 24             "discriminator": "TimePeriodStateRegulationModel",
 25             "Years" : 8,
 26             "Quarters" : 2,
 27             "Months": 2,
 28             "Days": 2,
 29             "hours": 5
 30           },
 31           "name": "На согласовании"
 32         },
 33         {
 34           "icon": {
 35             "type": "svg",
 36             "data": "<svg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'><path d='M0 10L1.19249e-07 0L10 1.19249e-07L6 5L10 10L0 10Z' fill='#05C19F'/></svg>"
 37           },
 38           "id": 3,
 39           "dataAvailabilitySettings": {
 40             "disableEdit": true
 41           },
 42           "regulation":{
 43               "discriminator": "FixedStateRegulationModel",
 44               "finishedDate": "2021-09-17T10:45:00Z"
 45           },
 46           "name": "Согласовано"
 47         },
 48         {
 49           "icon": {
 50             "type": "svg",
 51             "data": "<svg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'><path d='M0 10L1.19249e-07 0L10 1.19249e-07L6 5L10 10L0 10Z' fill='#8053DF'/></svg>"
 52           },
 53           "id": 4,
 54           "dataAvailabilitySettings": null,
 55           "name": "На доработке"
 56         }
 57       ],
 58       "steps": [
 59         {
 60           "fromStateId": 1,
 61           "toStateId": 2,
 62           "id": 1,
 63           "name": "Отправить на согласование"
 64         },
 65         {
 66           "fromStateId": 2,
 67           "toStateId": 3,
 68           "id": 2,
 69           "name": "Согласовать"
 70         },
 71         {
 72           "fromStateId": 2,
 73           "toStateId": 4,
 74           "id": 3,
 75           "name": "Отклонить"
 76         },
 77         {
 78           "fromStateId": 4,
 79           "toStateId": 2,
 80           "id": 4,
 81           "name": "Вернуть на согласование"
 82         },
 83         {
 84           "fromStateId": 3,
 85           "toStateId": 1,
 86           "id": 5,
 87           "name": "Вернуть на Черновик"
 88         }
 89       ],
 90       "startStateId": 1
 91     },
 92     "permissions": [
 93       {
 94         "stepId": 1,
 95         "subjectId": "USERS",
 96         "type": "Allow"
 97       },
 98       {
 99         "stepId": 2,
100         "subjectId": "APPROVERS",
101         "type": "Allow"
102       },
103       {
104         "stepId": 3,
105         "subjectId": "APPROVERS",
106         "type": "Allow"
107       },
108       {
109         "stepId": 4,
110         "subjectId": "USERS",
111         "type": "Allow"
112       },
113       {
114         "stepId": 5,
115         "subjectId": "APPROVERS",
116         "type": "Allow"
117       }
118     ],
119     "parameters": {
120       "definitions": [
121         {
122           "id": 1,
123           "name": "Сотрудники",
124           "dictionaryId": 19,
125           "discriminator": "DictionaryParameterModel"
126         },
127         {
128           "id": 2,
129           "name": "Оценщики",
130           "dictionaryId": 126,
131           "discriminator": "DictionaryParameterModel"
132         },
133         {
134           "id": 3,
135           "name": "Квартал оценки",
136           "dictionaryId": 120,
137           "discriminator": "DictionaryParameterModel"
138         }
139       ],
140       "defaultValues": [
141         {
142           "parameterId": 1,
143           "value": 2
144         },
145         {
146           "parameterId": 2,
147           "value": 2
148         },
149         {
150           "parameterId": 3,
151           "value": 320210101
152         }
153       ]
154     },
155     "notifications": null
156   },
157   "forceWorkflowNotificationTemplate": false
158 }