ИЕРАРХИЧЕСКАЯ СТРУКТУРА РАБОТ (ИСР), АТРИБУТЫ И ЗНАЧЕНИЯ

Иерархическая структура работ

Таблица 1. Модель данных иерархической структуры работ

Поле Тип Описание
id UUID v4 Уникальный идентификатор ИСР
parentId UUID v4 Уникальный идентификатор родительского узла
code string Идентификатор работы
type string Тип узла
level integer Уровень вложенности узла
indexNumber integer Индексный номер узла
sortOrder integer Порядок сортировки узла
values Number Идентификатор атрибута ИСР со значением
criticalPath boolean Идентификатор критического пути узла
materialPath string Путь материала узла
curatorAccepted boolean Куратор принял маркер для узла

Таблица 2. Типы записей в ИСР

Тип Описание
work Узел ИСР (Узел ИСР) – элемент структуры (суммарная задача), которая может содержать дочерние элементы (работы, вехи, драфты, узлы ИСР), определяющая иерархию и структуру графика. Старт, финиш, календарная длительность, прогресс определяется статусом, длительностью и последовательностью выполнения дочерних элементов.
task Работа - задача (операция), выполняемая в течение определенного времени, т.е. имеющая рабочую и календарную длительность выполнения, старт и финиш в качестве обязательных атрибутов. Прогресс работы может быть от 0 до 100, работа может принимать статусы «Не начата», «Выполняется», «Завершена».
milestone_start Веха старта – задача (операция), обладающая обязательным атрибутом старт (и не имеющая значение атрибута финиш), не имеющая рабочей и календарной длительности, означающая событие, предшествующее выполнению последующих работ или этапов. Прогресс вехи старта может быть 0 или 100, веха старта может принимать статусы «Не начата» и «Завершена».
milestone_finish Веха финиша – задача (операция), обладающая обязательным атрибутом финиш (и не имеющая значение атрибута старт), не имеющая рабочей и календарной длительности, означающая событие, завершающее выполнение предшествующих работ или этапов. Прогресс вехи старта может быть 0 или 100, веха старта может принимать статусы «Не начата» и «Завершена».
draft Драфт – задача (операция), не имеющая значений атрибутов старт и финиш. Атрибуты рабочей и календарной длительности могут быть как заполнены, так и отсутствовать для работы с данным типом. Драфт является «черновиком» работы, для которой пока не определены сроки ее выполнения. Прогресс драфта может быть только равен 0, возможный статус – «Не начата».
sum Суммарная работа – тип работ, предназначенный для объединения нескольких работ в одном или нескольких графиках. Суммарная задача может быть использована для представления графика 2 уровня, упрощения управления работами или для агрегации данных.

Примеры использования

Пример: Получить список работ версии графика.

curl -X 'GET' \
  'https://your-org.domain/public-api/wbs?epsId=bc1da5df-d644-461a-aa54-e60182195898' \
  -H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
  -H 'x-version: 509' \
  -H 'Authorization: your-api-key' \
  -H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad'

Пример: Получить значения указанных атрибутов для работы с кодом A110.

Внимание! Не используйте одновременно attributeIds и select.

curl -X 'GET' \
  'https://your-org.domain/public-api/wbs?epsId=bc1da5df-d644-461a-aa54-e60182195898 & \
    attributesIds=513200c8-6f15-4628-8d6e-2768e14f2add & \
    attributesIds=173be1d3-0afc-4156-8552-662a072b9980 & filter=code eq 'A110'' \
  -H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
  -H 'x-version: 409' \
  -H 'Authorization: your-api-key' \
  -H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad'

Пример: Создать новую работу в версии графика.

curl -X 'POST' \
  'https://your-org.domain/public-api/wbs' \
  -H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
  -H 'x-version: 409' \
  -H 'Authorization: your-api-key' \
  -H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
  -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \
  -d '{
    "epsId": "bc1da5df-d644-461a-aa54-e60182195898",
    "parentId": "2b73a1f8-833f-488c-9947-7fc1a4b76314",
    "type": "task",
    "name": "Заливка бетона",
    "values": {
        "eb3606f5-679c-4e4d-b9d1-072d5b988cfa": 27,
        "481863c5-bd1d-44ac-b968-5ee5df7ea861": "Value of WBS attribute"
    }
  }'
javascript;

const epsPath = 'https://your-org.domain/public-api/wbs';

const baseHeaders = {
  Authorization: 'your-api-key',
  'x-tenant-id': '5db13376-ba5c-4fd5-ba7f-dc56347956ad',
  'x-version': '409',
  accept: 'application/json',
  'Content-Type': 'application/json',
};

// Для создания работы (тип task) в корне структуры, в качестве родителя (parentId) установите идентификатор узла СПП (epsId)
// Если нужно вложить работу (тип task) в узел ИСР (тип work), то предварительно нужно получить список WBS через
// точку WBS-GET, скопировать идентификатор узла ИСР и вставить в parentId

/// При установке для создаваемой работы атрибутов и их значений,
/// получить доступные аттрибуты работ(точка входа WbsAttributes-GET) для версии графика
/// добавить в values нужный аттрибут и его значение
/// если аттрибут типа string - "Жёлтый"
/// если аттрибут типа date - значение даты в стандартизированном формате EPOCH Timestamp в миллисекундах (13 знаков)
/// если аттрибут типа number - число

const wbsCreateBody = {
  epsId: '3cdd4b5d-f830-443e-9c49-2d4c6a356a85',
  parentId: '50b44ff5-5b60-489b-acb8-5cf4bde12382',
  code: 'Мой новый код',
  type: 'task',
  name: 'Моё имя для WBS',
  values: {
    'f76dad04-ab3a-4340-b80d-071cba968b60': 'Жёлтый',
    '19c27ceb-8302-4a2c-8bf9-2f34c1aca508': 1728982800000,
    '41054337-76cd-4393-99d0-ff90b5c79508': 16,
  },
};

fetch(epsPath, { headers: baseHeaders, method: 'POST', body: JSON.stringify(wbsCreateBody) })
  .then((response) => {
    if (response.ok) {
      return response.json();
    } else {
      throw new Error(`Ошибка: ${response.status}, ${response.statusText}`);
    }
  })
  .then((wbs) => {
    console.log(wbs);
  })
  .catch((error) => {
    console.error(error.message);
  });

Пример: Изменить существующую работу.

curl -X 'PUT' \
  'https://your-org.domain/public-api/wbs/be69f9e6-5e81-4aec-959f-516bceb6e8b8' \
  -H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
  -H 'x-version: 509' \
  -H 'Authorization: your-api-key' \
  -H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
  -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \
  -d '{
    "code":"Code001",
    "name": "Заливка бетона"
    "type":"milestone_start",
    "parentId":"77b4a87b-21bf-40d7-bdf6-aad8c77d506e",
    "values": {
        "eb3606f5-679c-4e4d-b9d1-072d5b988cfa": "walls",
        "481863c5-bd1d-44ac-b968-5ee5df7ea861": null
    }
}'

Пример: Удалить запись из версии графика.

curl -X 'DELETE' \
  'https://your-org.domain/public-api/wbs/be69f9e6-5e81-4aec-959f-516bceb6e8b8' \
  -H 'accept: */*' \
  -H 'x-version: 409' \
  -H 'Authorization: your-api-key' \
  -H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad'

Так же существует кастомная функция для поиска по идентификатору атрибута значения ИСР.

getById(values, 'Идентификатор атрибута ИСР')

Пример: В данном примере мы проверяем, что у ИСР должен быть атрибут идентификатор которого равен 624b6a37-f6a0-40a5-a2e1-4f2e6724167b и значение этого атрибута для ИСР эквивалентно значению Hotel building

curl -X 'GET' \
  'https://your-org.domain/public-api/wbs?epsId=70d6cb44-00e9-4535-9949-2d5596f0988a&filter=getById(values, '624b6a37-f6a0-40a5-a2e1-4f2e6724167b') eq 'Hotel building'' \
  -H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
  -H 'x-version: 507' \
  -H 'Authorization: your-api-key' \
  -H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad'

Пример: Существуют функции number('Строка') и boolean('Строка'), которые возвращают числовое и логическое значение соответственно.

curl -X 'GET' \
  'https://your-org.domain/public-api/wbs?epsId=70d6cb44-00e9-4535-9949-2d5596f0988a&filter=number(getById(values, 'be69f9e6-5e81-4aec-959f-516bceb6e8b8')) gt 15' \
  -H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
  -H 'x-version: 507' \
  -H 'Authorization: your-api-key' \
  -H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad'

Атрибуты

Таблица 3. Модель данных атрибута иерархической структуры работ

Поле Тип Описание
id UUID v4 Уникальный идентификатор атрибута
epsId UUID v4 Идентификатор узла СПП
label string Заголовок атрибута
key string Уникальный строковый код атрибута
type string Тип атрибута
directoryId UUID v4 Идентификатор справочника
directoryAttributeId UUID v4 Идентификатор атрибута в справочнике

Таблица 4. Типы атрибутов ИСР

Тип Описание
date Дата в формате timestamp
number Число в формате float
string Строка
money Число в формате float
boolean Логический в формате 1 или 0
percentage Процент
indicator Индикатор
through Сквозной

Примеры использования

Пример: Получить список атрибутов работ для указанного узла СПП.

curl -X 'GET' \
  'https://your-org.domain/public-api/wbs-attributes?epsId=5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
  -H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
  -H 'x-version: 409' \
  -H 'Authorization: your-api-key' \
  -H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
  -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true'

Пример: Получить список атрибутов работ типа date для указанного узла СПП с помощью протокола OData.

curl -X 'GET' \
  ''https://your-org.domain/public-api/wbs-attributes?epsId=5db13376-ba5c-4fd5-ba7f-dc56347956ad&filter=type eq 'date''' \
  -H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
  -H 'x-version: 409' \
  -H 'Authorization: your-api-key' \
  -H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
  -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true'

Пример: Создать новый атрибут.

curl -X 'POST' \
  'https://your-org.domain/public-api/wbs-attributes' \
  -H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
  -H 'x-version: 409' \
  -H 'Authorization: your-api-key' \
  -H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
  -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \
  -d '{
  "epsId": "5db13376-ba5c-4fd5-ba7f-dc56347956ad",
  "label": "Дата выпуска документации",
  "type": "date",
}'

Пример: Изменить наименование существующего атрибута.

curl -X 'PUT' \
  'https://your-org.domain/public-api/wbs-attributes/3fa85f64-5717-4562-b3fc-2c963f66afa6' \
  -H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
  -H 'x-version: 409' \
  -H 'Authorization: your-api-key' \
  -H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
  -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \
  -d '{
  "label": "Дата выпуска документации",
}'

Пример: Удалить существующий пользовательский атрибут.

curl -X 'DELETE' \
  'https://your-org.domain/public-api/wbs-attributes/3fa85f64-5717-4562-b3fc-2c963f66afa6' \
  -H 'accept: */*' \
  -H 'x-version: 409' \
  -H 'Authorization: your-api-key' \
  -H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad'

Связи

Таблица 5. Модель данных связей иерархической структуры работ

Поле Тип Описание
id UUID v4 Уникальный идентификатор связи
versionId UUID v4 Идентификатор версии графика
wbsId UUID v4 Идентификатор узла ИСР
linkedWbsId UUID v4 Идентификатор узла ИСР, с которым устанавливается связь
type string Тип связи
lag Число Задержка между работами в часах

Таблица 6. Типы связей

Тип Описание
fs Финиш-Старт - работа последователь начинается после завершения работы-предшественника
ss Старт-Старт - работа последователь начинается одновременно с работой-предшественником
ff Финиш-Финиш - работа последователь заканчивается одновременно с работой-предшественником
sf Старт-Финиш - работа последователь заканчивается до начала работы-предшественника

Примеры использования

Пример: Получить список связей узла ИСР по его идентификатору.

curl -X 'GET' \
  'https://your-org.domain/public-api/wbs-relations/5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
  -H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
  -H 'x-version: 503' \
  -H 'Authorization: your-api-key' \
  -H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
  -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true'

Пример: Получить список связей узлов ИСР типа fs для указанной версии графика.

curl -X 'GET' \
  'https://your-org.domain/public-api/wbs-relations?filter=type eq 'fs' and versionId=1a986208-0500-43e4-a4cf-66611ca3fea5' \
  -H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
  -H 'x-version: 409' \
  -H 'Authorization: your-api-key' \
  -H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
  -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true'

Пример: Создать новую связь между узлами ИСР.

curl -X 'POST' \
  'https://your-org.domain/public-api/wbs-relations' \
  -H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
  -H 'x-version: 503' \
  -H 'Authorization: your-api-key' \
  -H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
  -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \
  -d '{
  "versionId": "5db13376-ba5c-4fd5-ba7f-dc56347956ad",
  "wbsId": "8276566e-0ec8-496f-ae18-7183e43ebd6d",
  "linkedWbsId": "bdb66e70-0231-411f-a3de-68c8fc341676",
  "type": "fs",
  "lag": 0
}'

Пример: Изменить параметры связи между узлами ИСР.

curl -X 'PUT' \
  'https://your-org.domain/public-api/wbs-relations/36b60d7c-fba9-4fb6-8d5a-a054f2043827' \
  -H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
  -H 'x-version: 503' \
  -H 'Authorization: your-api-key' \
  -H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
  -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \
  -d '{
    "type": "ff",
    "lag": 25
}'

Пример: Удалить связь между узлами ИСР.

curl -X 'DELETE' \
  'https://your-org.domain/public-api/wbs-relations/36b60d7c-fba9-4fb6-8d5a-a054f2043827' \
  -H 'accept: */*' \
  -H 'x-version: 503' \
  -H 'Authorization: your-api-key' \
  -H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad'

509.1-59ba7826