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

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

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


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

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

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

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

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

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

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

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

Описание регламента выполнения состояния процесса (regulation):
В результате которого мы получаем значение "finishedTime": "1970-01-01T00:00:00Z"

Свойство Описание Вводные данные Результат
discriminator Задаём вид фиксации даты
FixedStateRegulationModel Фиксированная дата в конечном виде str "2021-20-09T15:34:48Z"
TimePeriodStateRegulationModel Дата получаемая путём сдвига от текущей с отсчётом от полуночи
Years Сдвиг по годам int "2021-01-01T00:00:00Z"
Quarters Сдвиг по кварталам int "2021-07-01T00:00:00Z"
Months Сдвиг по месяцам int "2021-09-01T00:00:00Z"
Days Сдвиг по дням int "2021-09-24T00:00:00Z"
Hours Сдвиг по часам int "2021-09-24T08: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 }