ipr.ipr.draft.add

Scope: ipr

Кто может вызывать: те же правила, что у ipr.ipr.add: актор готовит карточку себе (userId == текущий пользователь) либо может управлять сотрудником (canManageEmployee: руководитель по оргструктуре, участник группы ИПР/HR, администратор). Подробнее: Роли и права доступа

Проверяет данные для создания карточки ИПР/ПИС так же, как ipr.ipr.add, но карточку не создаёт. Проверенные данные сохраняются как черновик, а в ответе возвращается ссылка на штатную форму создания ИПР с параметром DRAFT_ID: форма открывается с предзаполненными полями, и карточку создаёт пользователь кнопкой «Создать». Сценарий HR-ассистента: ассистент собирает данные, пользователь утверждает их в знакомой форме.

HTTP: POST

Побочные эффекты: Создаёт запись черновика (таблица ithive_ipr_program_draft); у автора остаётся не более 50 неиспользованных черновиков — самые старые удаляются при создании нового. Элементы инфоблока ИПР, компетенции и действия не создаются.

Параметры метода

Состав, типы, алиасы и правила проверки параметров полностью совпадают с ipr.ipr.add.

Параметр Тип Обяз. Описание
userId int да ID сотрудника, для которого готовится карточка
managerId int да ID руководителя, должен отличаться от userId
competenceIds int[] да ID компетенций каталога (минимум одна)
type string нет IPR | PIS. По умолчанию — тип шаблона или IPR
templateId int нет ID шаблона программы
title string нет Название, максимум 255 символов
deadline string нет Дедлайн YYYY-MM-DD; если не задан — вычисляется из term
term int нет Срок в месяцах
sendBossAgreement bool нет Согласование руководителем, по умолчанию true
positionId int нет Текущая должность
targetPositionId int нет Целевая должность
nextTemplateId int нет Шаблон следующей программы
observers int[] нет Наблюдатели
targetFunction string нет Целевая функция
competenceDeadlines object нет { "<competenceId>": "YYYY-MM-DD" }
competenceRunOptions object нет Действия по компетенциям: ключи строго <type>_<id>, набор полей и проверка дат как в ipr.ipr.add (лишние поля отбрасываются, неверный ключ или дата — VALIDATION_ERROR)
competenceGoals object нет Цели по компетенциям: { "<competenceId>": "текст цели" }. HTML удаляется, пустые значения отбрасываются, максимум 4000 символов на цель

Проверяются права актора, существование сотрудника, руководителя и шаблона, тип программы, лимит активных программ сотрудника (IPR_ALREADY_EXISTS), формат дат и даты проведения мероприятий в competenceRunOptions.

Как форма использует черновик. Форма создания читает DRAFT_ID и подставляет сотрудника, руководителя, шаблон, срок и дату завершения, отмечает компетенции (с индивидуальными сроками из competenceDeadlines), цели и развивающие действия, наблюдателей и название. Черновик с templateId открывает форму в режиме ИПР/ПИС с выбранным шаблоном: срок в месяцах, целевая функция, целевая должность и согласование берутся из шаблона, как при ручном выборе, а дата завершения, компетенции с их сроками, цели, действия и наблюдатели — из черновика; черновик без templateId открывает форму в режиме свободного выбора компетенций. Открыть черновик может только его автор или привилегированный пользователь; несуществующий или чужой черновик открывает пустую форму с предупреждением. После нажатия «Создать» черновик помечается использованным (usedAt, iprId); повторное открытие использованного черновика тоже даёт пустую форму с предупреждением и ссылкой на созданную карточку, чтобы не создать дубль.

Размер сохраняемого payload ограничен 256 КБ (VALIDATION_ERROR, details.reason = draft_payload_too_large). Черновики не имеют срока действия: неиспользованные хранятся, пока их не вытеснят более новые (не более 50 на автора), использованные остаются как ссылка на созданную карточку.

Права на «Создать» в форме совпадают с ipr.ipr.add: администратор и группа ИПР/HR, руководитель по оргструктуре, текущий руководитель сотрудника, а себе — по настройкам доступа модуля (access_to_ipr / access_to_pis). Ограничение формы: черновик типа PIS без templateId открывается в режиме свободного выбора и создаёт ИПР, поэтому для ПИС всегда передавайте templateId.

Возвращаемые данные

Поле Тип Описание
id int ID черновика
url string Ссылка на форму создания ИПР с черновиком: /university/ipr/add/?DRAFT_ID=<id> (относительно каталога сайта). Открывается в слайдере (BX.SidePanel.Instance.open(url)) или как обычная страница
userId int Сотрудник
createdBy int Автор черновика (актор)
createdAt string Дата создания, YYYY-MM-DD HH:MM:SS (время сервера)
usedAt string|null Когда по черновику создана карточка; null, пока форма не сохранена
iprId int|null ID созданной по черновику карточки, если она уже создана
payload object Нормализованные данные черновика, см. ниже

Структура payload

Это проверенные и приведённые к единому виду параметры запроса — ровно то, что подставляется в форму.

Поле Тип Описание
userId, managerId int Сотрудник и руководитель
competenceIds int[] Компетенции каталога
type string IPR | PIS
templateId int|null Шаблон программы
title string Название (пустая строка — форма подставит своё)
deadline string|null Дедлайн, как был передан
dateClose string Плановая дата завершения YYYY-MM-DD: deadline, либо вычислена из term
term int Срок в месяцах
pisPeriod string|null Для PIS — XML_ID периода (PERIOD_PIS), иначе null
sendBossAgreement bool Согласование руководителем
positionId, targetPositionId, nextTemplateId int 0, если не задано
targetFunction string Целевая функция
observers int[] Наблюдатели
competenceDeadlines object { "<competenceId>": "YYYY-MM-DD" } только для явно переданных компетенций; некорректная дата — VALIDATION_ERROR
competenceRunOptions object Нормализованы: ключи <type>_<id>, только разрешённые поля, даты проверены
competenceGoals object { "<competenceId>": "текст" } без пустых значений

Обработка ошибок

Справочник кодов: error-codes.md. Коды и условия совпадают с ipr.ipr.add.

Код Описание
UNAUTHORIZED Пользователь не авторизован
VALIDATION_ERROR Не передан обязательный параметр, managerId == userId, некорректный deadline/type, title длиннее 255 символов, цель длиннее 4000 символов, ключ действия не вида <type>_<id> или дата действия некорректна, дата проведения в competenceRunOptions не относится к мероприятию; details.reason = draft_payload_too_large — payload больше 256 КБ
NOT_FOUND Сотрудник, руководитель, templateId или дата проведения мероприятия не найдены
PERMISSION_DENIED Нет прав готовить карточку для указанного userId; прошедшая дата проведения не от администратора; тип программы не разрешён настройками для создания себе
IPR_ALREADY_EXISTS У сотрудника уже достигнут лимит активных программ
INTERNAL_ERROR Внутренняя ошибка сервера / не удалось сохранить черновик

Пример запроса (POST)

curl -X POST "https://{портал}/rest/{user_id}/{webhook_code}/ipr.ipr.draft.add.json"
          -H "Content-Type: application/json"
          -H "Accept: application/json"
          --data '{
          "userId": 15,
          "managerId": 1,
          "competenceIds": [1049, 1051],
          "deadline": "2026-12-30",
          "competenceGoals": {
            "1049": "Проводить переговоры с ключевыми клиентами без сопровождения руководителя"
          },
          "competenceRunOptions": {
            "1049": { "course_12": { "type": "course", "id": 12, "selected": true } }
          }
        }'
        

Пример ответа

{
          "result": {
            "result": {
              "id": 7,
              "url": "/university/ipr/add/?DRAFT_ID=7",
              "userId": 15,
              "createdBy": 1,
              "createdAt": "2026-10-28 12:00:00",
              "usedAt": null,
              "iprId": null,
              "payload": {
                "userId": 15,
                "managerId": 1,
                "competenceIds": [1049, 1051],
                "type": "IPR",
                "templateId": null,
                "title": "",
                "deadline": "2026-12-30",
                "dateClose": "2026-12-30",
                "term": 12,
                "pisPeriod": null,
                "sendBossAgreement": true,
                "positionId": 0,
                "targetPositionId": 0,
                "nextTemplateId": 0,
                "targetFunction": "",
                "observers": [],
                "competenceDeadlines": {},
                "competenceRunOptions": {
                  "1049": { "course_12": { "type": "course", "id": 12, "selected": true } }
                },
                "competenceGoals": {
                  "1049": "Проводить переговоры с ключевыми клиентами без сопровождения руководителя"
                }
              }
            },
            "total": null,
            "next": null,
            "error": null
          }
        }
        

См. также

Предыдущая
Следующая