H-3821: задокументировал /admin/employment в v2 swagger #37
+151
-68
@@ -74,7 +74,7 @@ tags:
|
|||||||
- name: admin-user-api-token
|
- name: admin-user-api-token
|
||||||
description: Methods for admin oversight of personal API tokens. Requires "api-tokens-admin" permission.
|
description: Methods for admin oversight of personal API tokens. Requires "api-tokens-admin" permission.
|
||||||
- name: admin-employment
|
- name: admin-employment
|
||||||
description: Methods for admin read-only access to employee employments — primary source of origin_id ↔ user_id mapping for integrations. Requires "user-edit" permission.
|
description: Methods for administrative read-only access to employee employments, including external identifiers used by integrations. Requires "user-edit" permission.
|
||||||
|
|
||||||
paths:
|
paths:
|
||||||
/mobile/bind/{id}/{token}:
|
/mobile/bind/{id}/{token}:
|
||||||
@@ -7534,15 +7534,21 @@ paths:
|
|||||||
/admin/employment:
|
/admin/employment:
|
||||||
get:
|
get:
|
||||||
tags: [admin-employment]
|
tags: [admin-employment]
|
||||||
summary: Список трудоустройств — admin read-only
|
summary: Получить список трудоустройств
|
||||||
description: |
|
description: |
|
||||||
Постраничный список трудоустройств всего тенанта с фильтрами
|
Возвращает постраничный список трудоустройств тенанта с поддержкой
|
||||||
`EmploymentSearch`. Поведением и набором полей идентичен
|
фильтрации, сортировки и пагинации. Состав возвращаемых полей и
|
||||||
legacy-эндпоинту `/api/employment` (v1) — перенесён в v2 как
|
набор параметров фильтрации соответствуют существующему эндпоинту
|
||||||
основа для интеграций (web-zaim, sokolove и др.) и будущей
|
`/api/employment` версии 1.
|
||||||
Vue3-админки.
|
|
||||||
|
|
||||||
### Главный кейс — маппинг (origin_id, origin_organization_id) → user_id
|
## Получение идентификатора пользователя по внешнему ключу
|
||||||
|
|
||||||
|
Основной сценарий использования для интеграций — получение
|
||||||
|
идентификатора пользователя HRBox (`user_id`) по внешнему
|
||||||
|
идентификатору должности из системы-источника
|
||||||
|
(`origin_id`, `origin_organization_id`).
|
||||||
|
|
||||||
|
Пример запроса:
|
||||||
|
|
||||||
```
|
```
|
||||||
GET /api/v2/admin/employment
|
GET /api/v2/admin/employment
|
||||||
@@ -7550,20 +7556,23 @@ paths:
|
|||||||
&origin_organization_id=default
|
&origin_organization_id=default
|
||||||
```
|
```
|
||||||
|
|
||||||
В ответе `data[].user_id` — это родной HRBox UUIDv4 пользователя,
|
В поле `data[].user_id` возвращается идентификатор пользователя
|
||||||
который дальше можно передавать в любые v2-эндпоинты, ожидающие
|
в формате UUID версии 4, который может быть использован
|
||||||
`user_id`. Поддерживается батч: `?origin_id[]=...&origin_id[]=...`.
|
в последующих обращениях к v2 API. Поддерживается передача
|
||||||
|
нескольких значений через массив:
|
||||||
|
`?origin_id[]=...&origin_id[]=...`.
|
||||||
|
|
||||||
### Совместительства
|
## Множественные трудоустройства
|
||||||
|
|
||||||
Один пользователь может иметь несколько трудоустройств с разными
|
У одного пользователя может быть несколько трудоустройств
|
||||||
`origin_id`. Поле `is_main` отличает основное от дополнительных.
|
с различными значениями `origin_id`. Признак основного
|
||||||
|
трудоустройства передаётся в поле `is_main`.
|
||||||
|
|
||||||
### Уволенные
|
## Завершённые трудоустройства
|
||||||
|
|
||||||
Записи с `fired_date != null` включены по умолчанию — нужны для
|
Записи с заполненным полем `fired_date` включены в выдачу
|
||||||
синхронизации увольнений. Если нужны только активные —
|
по умолчанию. Для исключения завершённых трудоустройств
|
||||||
фильтруйте `status_id=1`.
|
используйте фильтр `status_id`.
|
||||||
operationId: adminEmploymentIndex
|
operationId: adminEmploymentIndex
|
||||||
parameters:
|
parameters:
|
||||||
- name: page
|
- name: page
|
||||||
@@ -7575,10 +7584,14 @@ paths:
|
|||||||
- name: sort
|
- name: sort
|
||||||
in: query
|
in: query
|
||||||
schema: { type: string }
|
schema: { type: string }
|
||||||
description: 'Префикс `-` для DESC. Атрибуты — `created_at`, `employment_date`, `fired_date`, и др. (по `EmploymentSearch::sort`).'
|
description: |
|
||||||
|
Поле сортировки. Для сортировки по убыванию используется префикс `-`.
|
||||||
|
Допустимые поля: `created_at`, `employment_date`, `fired_date` и другие
|
||||||
|
атрибуты, определённые в `EmploymentSearch::sort()`.
|
||||||
- name: id
|
- name: id
|
||||||
in: query
|
in: query
|
||||||
schema: { type: string, format: uuid }
|
schema: { type: string, format: uuid }
|
||||||
|
description: Идентификатор трудоустройства.
|
||||||
- name: user_id
|
- name: user_id
|
||||||
in: query
|
in: query
|
||||||
schema:
|
schema:
|
||||||
@@ -7587,15 +7600,20 @@ paths:
|
|||||||
format: uuid
|
format: uuid
|
||||||
- type: array
|
- type: array
|
||||||
items: { type: string, format: uuid }
|
items: { type: string, format: uuid }
|
||||||
description: 'UUID юзера. Массив через `?user_id[]=...&user_id[]=...` или comma-separated.'
|
description: |
|
||||||
|
Идентификатор пользователя. Допускается передача нескольких значений
|
||||||
|
в виде массива `?user_id[]=...&user_id[]=...` либо в виде строки
|
||||||
|
со значениями, разделёнными запятой.
|
||||||
- name: chief_id
|
- name: chief_id
|
||||||
in: query
|
in: query
|
||||||
schema: { type: string, format: uuid }
|
schema: { type: string, format: uuid }
|
||||||
description: UUID employment'а руководителя.
|
description: Идентификатор трудоустройства руководителя.
|
||||||
- name: department_id
|
- name: department_id
|
||||||
in: query
|
in: query
|
||||||
schema: { type: string, format: uuid }
|
schema: { type: string, format: uuid }
|
||||||
description: UUID подразделения (с автоматическим учётом поддерева).
|
description: |
|
||||||
|
Идентификатор подразделения. Фильтр учитывает все вложенные
|
||||||
|
подразделения иерархии.
|
||||||
- name: origin_id
|
- name: origin_id
|
||||||
in: query
|
in: query
|
||||||
schema:
|
schema:
|
||||||
@@ -7603,85 +7621,112 @@ paths:
|
|||||||
- type: string
|
- type: string
|
||||||
- type: array
|
- type: array
|
||||||
items: { type: string }
|
items: { type: string }
|
||||||
description: Внешний ID (например из 1С). Comma-separated или массив.
|
description: |
|
||||||
|
Внешний идентификатор должности из системы-источника. Допускается
|
||||||
|
передача нескольких значений в виде массива либо строки
|
||||||
|
со значениями, разделёнными запятой.
|
||||||
- name: origin_organization_id
|
- name: origin_organization_id
|
||||||
in: query
|
in: query
|
||||||
schema: { type: string }
|
schema: { type: string }
|
||||||
description: Идентификатор организации во внешней системе (для мульти-org тенантов).
|
description: |
|
||||||
|
Идентификатор организации в системе-источнике. Применяется
|
||||||
|
в сочетании с `origin_id` для однозначного сопоставления записи.
|
||||||
- name: org_num
|
- name: org_num
|
||||||
in: query
|
in: query
|
||||||
schema: { type: string }
|
schema: { type: string }
|
||||||
description: Comma-separated табельные номера.
|
description: |
|
||||||
|
Табельный номер. Допускается передача нескольких значений
|
||||||
|
в виде строки, разделённой запятой.
|
||||||
- name: first_name
|
- name: first_name
|
||||||
in: query
|
in: query
|
||||||
schema: { type: string }
|
schema: { type: string }
|
||||||
description: ilike-поиск.
|
description: Поиск по имени, регистронезависимое частичное совпадение.
|
||||||
- name: last_name
|
- name: last_name
|
||||||
in: query
|
in: query
|
||||||
schema: { type: string }
|
schema: { type: string }
|
||||||
description: ilike-поиск.
|
description: Поиск по фамилии, регистронезависимое частичное совпадение.
|
||||||
- name: name
|
- name: name
|
||||||
in: query
|
in: query
|
||||||
schema: { type: string }
|
schema: { type: string }
|
||||||
description: ilike по `first_name` + `last_name` через JOIN User.
|
description: |
|
||||||
|
Поиск по полю `name` пользователя (имя и фамилия),
|
||||||
|
регистронезависимое частичное совпадение.
|
||||||
- name: position
|
- name: position
|
||||||
in: query
|
in: query
|
||||||
schema: { type: string }
|
schema: { type: string }
|
||||||
description: ilike-поиск по должности.
|
description: Поиск по должности, регистронезависимое частичное совпадение.
|
||||||
- name: is_main
|
- name: is_main
|
||||||
in: query
|
in: query
|
||||||
schema: { type: boolean }
|
schema: { type: boolean }
|
||||||
description: Только основные трудоустройства.
|
description: Признак основного трудоустройства.
|
||||||
- name: status_id
|
- name: status_id
|
||||||
in: query
|
in: query
|
||||||
schema: { type: integer }
|
schema: { type: integer }
|
||||||
description: 'Стандартный enum `Status` (1=Active, 2=Disabled).'
|
description: |
|
||||||
|
Статус трудоустройства. Допустимые значения:
|
||||||
|
`1` — действующее, `2` — отключённое.
|
||||||
- name: reg_status_id
|
- name: reg_status_id
|
||||||
in: query
|
in: query
|
||||||
schema: { type: string }
|
schema: { type: string }
|
||||||
description: Comma-separated `RegStatus` (1=NO_ACCOUNT, 2=INVITED, 3=ACTIVE, 4=BLOCKED) — фильтр по статусу владельца.
|
description: |
|
||||||
|
Статус регистрации пользователя-владельца трудоустройства.
|
||||||
|
Допустимые значения: `1` — без аккаунта, `2` — приглашён,
|
||||||
|
`3` — активен, `4` — заблокирован. Допускается передача
|
||||||
|
нескольких значений через запятую.
|
||||||
- name: created_at
|
- name: created_at
|
||||||
in: query
|
in: query
|
||||||
schema: { type: string }
|
schema: { type: string }
|
||||||
description: 'Диапазон `from|to` (ISO).'
|
description: |
|
||||||
|
Период создания записи в формате `<начало>|<конец>`,
|
||||||
|
где даты указаны по ISO 8601.
|
||||||
- name: employment_date
|
- name: employment_date
|
||||||
in: query
|
in: query
|
||||||
schema: { type: string }
|
schema: { type: string }
|
||||||
description: 'Диапазон даты приёма `from|to`.'
|
description: |
|
||||||
|
Период даты приёма на работу в формате `<начало>|<конец>`.
|
||||||
- name: fired_date
|
- name: fired_date
|
||||||
in: query
|
in: query
|
||||||
schema: { type: string }
|
schema: { type: string }
|
||||||
description: 'Диапазон даты увольнения `from|to`.'
|
description: |
|
||||||
|
Период даты увольнения в формате `<начало>|<конец>`.
|
||||||
- name: user_list_key
|
- name: user_list_key
|
||||||
in: query
|
in: query
|
||||||
schema: { type: string, format: uuid }
|
schema: { type: string, format: uuid }
|
||||||
description: 'Ключ закэшированной выборки сотрудников (см. `/user-list-cache/set-user-list`).'
|
description: |
|
||||||
|
Ключ закэшированной выборки пользователей, полученный
|
||||||
|
от `/user-list-cache/set-user-list`.
|
||||||
- name: chief_only
|
- name: chief_only
|
||||||
in: query
|
in: query
|
||||||
schema: { type: boolean }
|
schema: { type: boolean }
|
||||||
description: Только прямые подчинённые текущего юзера.
|
description: |
|
||||||
|
Ограничить выборку прямыми подчинёнными текущего пользователя.
|
||||||
- name: chief_only_all
|
- name: chief_only_all
|
||||||
in: query
|
in: query
|
||||||
schema: { type: boolean }
|
schema: { type: boolean }
|
||||||
description: Все подчинённые рекурсивно.
|
description: |
|
||||||
|
Ограничить выборку всеми подчинёнными текущего пользователя
|
||||||
|
с учётом вложенной иерархии.
|
||||||
- name: multipleEmployment
|
- name: multipleEmployment
|
||||||
in: query
|
in: query
|
||||||
schema: { type: boolean }
|
schema: { type: boolean }
|
||||||
description: Только записи юзеров с несколькими трудоустройствами.
|
description: |
|
||||||
|
Ограничить выборку пользователями, у которых более одного
|
||||||
|
трудоустройства.
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
description: Список трудоустройств
|
description: Список трудоустройств.
|
||||||
content:
|
content:
|
||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
$ref: '#/components/schemas/AdminEmploymentList'
|
$ref: '#/components/schemas/AdminEmploymentList'
|
||||||
403:
|
403:
|
||||||
description: Нет права `user-edit`.
|
description: |
|
||||||
|
У текущего пользователя отсутствует право `user-edit`.
|
||||||
|
|
||||||
/admin/employment/view:
|
/admin/employment/view:
|
||||||
get:
|
get:
|
||||||
tags: [admin-employment]
|
tags: [admin-employment]
|
||||||
summary: Одно трудоустройство — admin read-only
|
summary: Получить трудоустройство по идентификатору
|
||||||
operationId: adminEmploymentView
|
operationId: adminEmploymentView
|
||||||
parameters:
|
parameters:
|
||||||
- name: id
|
- name: id
|
||||||
@@ -7690,17 +7735,20 @@ paths:
|
|||||||
schema: { type: string, format: uuid }
|
schema: { type: string, format: uuid }
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
description: Трудоустройство
|
description: Запись трудоустройства.
|
||||||
content:
|
content:
|
||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
$ref: '#/components/schemas/AdminEmployment'
|
$ref: '#/components/schemas/AdminEmployment'
|
||||||
400:
|
400:
|
||||||
description: Невалидный UUID.
|
description: Параметр `id` имеет некорректный формат.
|
||||||
403:
|
403:
|
||||||
description: Нет права `user-edit`.
|
description: |
|
||||||
|
У текущего пользователя отсутствует право `user-edit`.
|
||||||
404:
|
404:
|
||||||
description: Запись не найдена (включая cross-tenant).
|
description: |
|
||||||
|
Запись не найдена. Включает случаи обращения к записям,
|
||||||
|
принадлежащим другим тенантам.
|
||||||
|
|
||||||
components:
|
components:
|
||||||
securitySchemes:
|
securitySchemes:
|
||||||
@@ -12846,82 +12894,117 @@ components:
|
|||||||
AdminEmployment:
|
AdminEmployment:
|
||||||
type: object
|
type: object
|
||||||
description: |
|
description: |
|
||||||
Запись трудоустройства в admin-выдаче. Содержит как сырые поля
|
Запись трудоустройства в административной выдаче. Содержит поля
|
||||||
Employment, так и связанные `user` / `chiefUser` / `department`.
|
самого трудоустройства, а также связанные объекты пользователя,
|
||||||
|
руководителя и подразделения.
|
||||||
properties:
|
properties:
|
||||||
id:
|
id:
|
||||||
type: string
|
type: string
|
||||||
format: uuid
|
format: uuid
|
||||||
description: UUID трудоустройства (родной HRBox).
|
description: Идентификатор трудоустройства.
|
||||||
is_main:
|
is_main:
|
||||||
type: boolean
|
type: boolean
|
||||||
description: Основное трудоустройство (одно на юзера). Несколько `false` — совместительства.
|
description: |
|
||||||
|
Признак основного трудоустройства. Для пользователя с несколькими
|
||||||
|
трудоустройствами только одна запись имеет значение `true`.
|
||||||
user_id:
|
user_id:
|
||||||
type: string
|
type: string
|
||||||
format: uuid
|
format: uuid
|
||||||
description: UUID владельца (`hr_user.id`) — **то самое значение для маппинга origin → user**.
|
description: |
|
||||||
|
Идентификатор пользователя-владельца трудоустройства. Используется
|
||||||
|
для последующих обращений к v2 API, ожидающих `user_id`.
|
||||||
chief_id:
|
chief_id:
|
||||||
type: string
|
type: string
|
||||||
format: uuid
|
format: uuid
|
||||||
nullable: true
|
nullable: true
|
||||||
description: UUID employment'а руководителя (не User'а).
|
description: |
|
||||||
|
Идентификатор трудоустройства руководителя. Ссылается на запись
|
||||||
|
`Employment`, а не на `User`.
|
||||||
department_id:
|
department_id:
|
||||||
type: string
|
type: string
|
||||||
format: uuid
|
format: uuid
|
||||||
nullable: true
|
nullable: true
|
||||||
|
description: Идентификатор подразделения.
|
||||||
position:
|
position:
|
||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
|
description: Должность.
|
||||||
employment_date:
|
employment_date:
|
||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
description: Дата приёма (ISO).
|
description: Дата приёма на работу в формате ISO 8601.
|
||||||
fired_date:
|
fired_date:
|
||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
description: Дата увольнения (ISO). `null` для действующих.
|
description: |
|
||||||
|
Дата увольнения в формате ISO 8601. Поле имеет значение `null`
|
||||||
|
для действующих трудоустройств.
|
||||||
status_id:
|
status_id:
|
||||||
type: integer
|
type: integer
|
||||||
nullable: true
|
nullable: true
|
||||||
description: 'Стандартный `Status` (1=Active, 2=Disabled).'
|
description: |
|
||||||
|
Статус трудоустройства. Допустимые значения: `1` — действующее,
|
||||||
|
`2` — отключённое.
|
||||||
origin_id:
|
origin_id:
|
||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
description: Внешний идентификатор должности из системы-источника (1С и т.п.).
|
description: |
|
||||||
|
Внешний идентификатор должности из системы-источника.
|
||||||
origin_organization_id:
|
origin_organization_id:
|
||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
description: Идентификатор внешней организации. Маппинг — это **пара** `(origin_id, origin_organization_id)`.
|
description: |
|
||||||
|
Идентификатор организации в системе-источнике. Однозначное
|
||||||
|
сопоставление записи определяется парой
|
||||||
|
(`origin_id`, `origin_organization_id`).
|
||||||
org_num:
|
org_num:
|
||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
description: Табельный номер.
|
description: Табельный номер.
|
||||||
first_name: { type: string, nullable: true }
|
first_name:
|
||||||
last_name: { type: string, nullable: true }
|
type: string
|
||||||
|
nullable: true
|
||||||
|
description: Имя пользователя.
|
||||||
|
last_name:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
description: Фамилия пользователя.
|
||||||
photo:
|
photo:
|
||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
description: Имя файла фото из источника (если приходит из интеграции).
|
description: |
|
||||||
created_at: { type: string, nullable: true }
|
Имя файла фотографии, полученное от системы-источника.
|
||||||
updated_at: { type: string, nullable: true }
|
created_at:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
description: Дата создания записи.
|
||||||
|
updated_at:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
description: Дата последнего изменения записи.
|
||||||
experience:
|
experience:
|
||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
description: 'Стаж в человекочитаемом виде (например `15 years 3 months 19 days`).'
|
description: |
|
||||||
|
Стаж работы в текстовом представлении (например,
|
||||||
|
«15 years 3 months 19 days»).
|
||||||
name:
|
name:
|
||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
description: Готовая строка ФИО юзера-владельца.
|
description: Имя и фамилия пользователя-владельца трудоустройства.
|
||||||
nameDetails:
|
nameDetails:
|
||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
|
description: Расширенное представление имени пользователя.
|
||||||
iconUrl:
|
iconUrl:
|
||||||
type: string
|
type: string
|
||||||
format: uri
|
format: uri
|
||||||
nullable: true
|
nullable: true
|
||||||
|
description: URL изображения пользователя.
|
||||||
profilePosition:
|
profilePosition:
|
||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
|
description: Должность для отображения в профиле пользователя.
|
||||||
user:
|
user:
|
||||||
$ref: '#/components/schemas/AdminEmploymentUserShort'
|
$ref: '#/components/schemas/AdminEmploymentUserShort'
|
||||||
chiefUser:
|
chiefUser:
|
||||||
@@ -12935,19 +13018,19 @@ components:
|
|||||||
createdAt:
|
createdAt:
|
||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
description: 'Локализованная `created_at`.'
|
description: Дата создания записи в локализованном представлении.
|
||||||
employmentDate:
|
employmentDate:
|
||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
description: 'Локализованная `employment_date`.'
|
description: Дата приёма на работу в локализованном представлении.
|
||||||
firedDate:
|
firedDate:
|
||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
description: 'Локализованная `fired_date`.'
|
description: Дата увольнения в локализованном представлении.
|
||||||
statusName:
|
statusName:
|
||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
description: 'Локализованное имя статуса.'
|
description: Локализованное наименование статуса.
|
||||||
|
|
||||||
AdminEmploymentList:
|
AdminEmploymentList:
|
||||||
type: object
|
type: object
|
||||||
|
|||||||
Reference in New Issue
Block a user