From 6ad75bdd1ebe5221d6aff9febf403da8c35c8e9e Mon Sep 17 00:00:00 2001 From: Denis Date: Thu, 28 May 2026 16:01:35 +0300 Subject: [PATCH 1/2] =?UTF-8?q?H-3821:=20=D0=B7=D0=B0=D0=B4=D0=BE=D0=BA?= =?UTF-8?q?=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BB=20/admin/employment=20=D0=B2=20v2=20swagger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Новый admin read-only API трудоустройств. Основной кейс — маппинг (origin_id, origin_organization_id) → user_id для интеграторов (web-zaim, sokolove и др.). - Тег admin-employment (Methods for admin read-only access...). - GET /admin/employment: index с полным набором фильтров EmploymentSearch (origin_id[], origin_organization_id, user_id[], department_id, chief_id, is_main, status_id, reg_status_id, employment_date/fired_date/created_at range, name/position ilike, user_list_key, chief_only*, multipleEmployment). - GET /admin/employment/view?id=: одна запись. - Доступ: user-edit (тот же perm что в legacy /api/employment v1). - Схемы AdminEmployment, AdminEmploymentList, AdminEmploymentUserShort, AdminEmploymentChiefUserShort, AdminEmploymentDepartmentShort. - В описании метода — главный кейс маппинга origin → user_id, совместительства, поведение uvol'нённых, батч origin_id[]. Источники: контроллер app\controllers\api\v2\admin\EmploymentController, testrix tests/v2/admin/test_admin_employment.py + hrbox/models/v2/AdminEmploymentModel.py (pydantic). Проверено живьём на denis.hrbox.io: totalCount=9393, все поля схемы совпадают с реальным ответом. Co-Authored-By: Claude Opus 4.7 (1M context) --- v2/swagger.yaml | 314 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 314 insertions(+) diff --git a/v2/swagger.yaml b/v2/swagger.yaml index c29476c..f4353f0 100644 --- a/v2/swagger.yaml +++ b/v2/swagger.yaml @@ -73,6 +73,8 @@ tags: description: Methods for managing personal API tokens (PATs) for server-to-server access. Requires "api-tokens-manage" permission. - name: admin-user-api-token description: Methods for admin oversight of personal API tokens. Requires "api-tokens-admin" permission. + - 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. paths: /mobile/bind/{id}/{token}: @@ -7529,6 +7531,177 @@ paths: 404: description: Токен не найден. + /admin/employment: + get: + tags: [admin-employment] + summary: Список трудоустройств — admin read-only + description: | + Постраничный список трудоустройств всего тенанта с фильтрами + `EmploymentSearch`. Поведением и набором полей идентичен + legacy-эндпоинту `/api/employment` (v1) — перенесён в v2 как + основа для интеграций (web-zaim, sokolove и др.) и будущей + Vue3-админки. + + ### Главный кейс — маппинг (origin_id, origin_organization_id) → user_id + + ``` + GET /api/v2/admin/employment + ?origin_id=12345 + &origin_organization_id=default + ``` + + В ответе `data[].user_id` — это родной HRBox UUIDv4 пользователя, + который дальше можно передавать в любые v2-эндпоинты, ожидающие + `user_id`. Поддерживается батч: `?origin_id[]=...&origin_id[]=...`. + + ### Совместительства + + Один пользователь может иметь несколько трудоустройств с разными + `origin_id`. Поле `is_main` отличает основное от дополнительных. + + ### Уволенные + + Записи с `fired_date != null` включены по умолчанию — нужны для + синхронизации увольнений. Если нужны только активные — + фильтруйте `status_id=1`. + operationId: adminEmploymentIndex + parameters: + - name: page + in: query + schema: { type: integer, minimum: 1, default: 1 } + - name: per-page + in: query + schema: { type: integer, minimum: 1, default: 20 } + - name: sort + in: query + schema: { type: string } + description: 'Префикс `-` для DESC. Атрибуты — `created_at`, `employment_date`, `fired_date`, и др. (по `EmploymentSearch::sort`).' + - name: id + in: query + schema: { type: string, format: uuid } + - name: user_id + in: query + schema: + oneOf: + - type: string + format: uuid + - type: array + items: { type: string, format: uuid } + description: 'UUID юзера. Массив через `?user_id[]=...&user_id[]=...` или comma-separated.' + - name: chief_id + in: query + schema: { type: string, format: uuid } + description: UUID employment'а руководителя. + - name: department_id + in: query + schema: { type: string, format: uuid } + description: UUID подразделения (с автоматическим учётом поддерева). + - name: origin_id + in: query + schema: + oneOf: + - type: string + - type: array + items: { type: string } + description: Внешний ID (например из 1С). Comma-separated или массив. + - name: origin_organization_id + in: query + schema: { type: string } + description: Идентификатор организации во внешней системе (для мульти-org тенантов). + - name: org_num + in: query + schema: { type: string } + description: Comma-separated табельные номера. + - name: first_name + in: query + schema: { type: string } + description: ilike-поиск. + - name: last_name + in: query + schema: { type: string } + description: ilike-поиск. + - name: name + in: query + schema: { type: string } + description: ilike по `first_name` + `last_name` через JOIN User. + - name: position + in: query + schema: { type: string } + description: ilike-поиск по должности. + - name: is_main + in: query + schema: { type: boolean } + description: Только основные трудоустройства. + - name: status_id + in: query + schema: { type: integer } + description: 'Стандартный enum `Status` (1=Active, 2=Disabled).' + - name: reg_status_id + in: query + schema: { type: string } + description: Comma-separated `RegStatus` (1=NO_ACCOUNT, 2=INVITED, 3=ACTIVE, 4=BLOCKED) — фильтр по статусу владельца. + - name: created_at + in: query + schema: { type: string } + description: 'Диапазон `from|to` (ISO).' + - name: employment_date + in: query + schema: { type: string } + description: 'Диапазон даты приёма `from|to`.' + - name: fired_date + in: query + schema: { type: string } + description: 'Диапазон даты увольнения `from|to`.' + - name: user_list_key + in: query + schema: { type: string, format: uuid } + description: 'Ключ закэшированной выборки сотрудников (см. `/user-list-cache/set-user-list`).' + - name: chief_only + in: query + schema: { type: boolean } + description: Только прямые подчинённые текущего юзера. + - name: chief_only_all + in: query + schema: { type: boolean } + description: Все подчинённые рекурсивно. + - name: multipleEmployment + in: query + schema: { type: boolean } + description: Только записи юзеров с несколькими трудоустройствами. + responses: + 200: + description: Список трудоустройств + content: + application/json: + schema: + $ref: '#/components/schemas/AdminEmploymentList' + 403: + description: Нет права `user-edit`. + + /admin/employment/view: + get: + tags: [admin-employment] + summary: Одно трудоустройство — admin read-only + operationId: adminEmploymentView + parameters: + - name: id + in: query + required: true + schema: { type: string, format: uuid } + responses: + 200: + description: Трудоустройство + content: + application/json: + schema: + $ref: '#/components/schemas/AdminEmployment' + 400: + description: Невалидный UUID. + 403: + description: Нет права `user-edit`. + 404: + description: Запись не найдена (включая cross-tenant). + components: securitySchemes: SessionAuth: @@ -12647,6 +12820,147 @@ components: _meta: $ref: '#/components/schemas/_meta' + AdminEmploymentUserShort: + type: object + properties: + id: { type: string, format: uuid } + name: { type: string, nullable: true } + faceUrl: { type: string, format: uri, nullable: true } + + AdminEmploymentChiefUserShort: + type: object + properties: + id: { type: string, format: uuid } + name: { type: string, nullable: true } + + AdminEmploymentDepartmentShort: + type: object + properties: + id: { type: string, format: uuid } + name: { type: string, nullable: true } + departmentPath: + type: string + nullable: true + description: 'Полный путь от корня структуры через `/`.' + + AdminEmployment: + type: object + description: | + Запись трудоустройства в admin-выдаче. Содержит как сырые поля + Employment, так и связанные `user` / `chiefUser` / `department`. + properties: + id: + type: string + format: uuid + description: UUID трудоустройства (родной HRBox). + is_main: + type: boolean + description: Основное трудоустройство (одно на юзера). Несколько `false` — совместительства. + user_id: + type: string + format: uuid + description: UUID владельца (`hr_user.id`) — **то самое значение для маппинга origin → user**. + chief_id: + type: string + format: uuid + nullable: true + description: UUID employment'а руководителя (не User'а). + department_id: + type: string + format: uuid + nullable: true + position: + type: string + nullable: true + employment_date: + type: string + nullable: true + description: Дата приёма (ISO). + fired_date: + type: string + nullable: true + description: Дата увольнения (ISO). `null` для действующих. + status_id: + type: integer + nullable: true + description: 'Стандартный `Status` (1=Active, 2=Disabled).' + origin_id: + type: string + nullable: true + description: Внешний идентификатор должности из системы-источника (1С и т.п.). + origin_organization_id: + type: string + nullable: true + description: Идентификатор внешней организации. Маппинг — это **пара** `(origin_id, origin_organization_id)`. + org_num: + type: string + nullable: true + description: Табельный номер. + first_name: { type: string, nullable: true } + last_name: { type: string, nullable: true } + photo: + type: string + nullable: true + description: Имя файла фото из источника (если приходит из интеграции). + created_at: { type: string, nullable: true } + updated_at: { type: string, nullable: true } + experience: + type: string + nullable: true + description: 'Стаж в человекочитаемом виде (например `15 years 3 months 19 days`).' + name: + type: string + nullable: true + description: Готовая строка ФИО юзера-владельца. + nameDetails: + type: string + nullable: true + iconUrl: + type: string + format: uri + nullable: true + profilePosition: + type: string + nullable: true + user: + $ref: '#/components/schemas/AdminEmploymentUserShort' + chiefUser: + allOf: + - $ref: '#/components/schemas/AdminEmploymentChiefUserShort' + nullable: true + department: + allOf: + - $ref: '#/components/schemas/AdminEmploymentDepartmentShort' + nullable: true + createdAt: + type: string + nullable: true + description: 'Локализованная `created_at`.' + employmentDate: + type: string + nullable: true + description: 'Локализованная `employment_date`.' + firedDate: + type: string + nullable: true + description: 'Локализованная `fired_date`.' + statusName: + type: string + nullable: true + description: 'Локализованное имя статуса.' + + AdminEmploymentList: + type: object + properties: + data: + type: array + items: + $ref: '#/components/schemas/AdminEmployment' + _links: + $ref: '#/components/schemas/_links' + _meta: + $ref: '#/components/schemas/_meta' + parameters: boardDateTypeParam: in: query -- 2.54.0 From 0ce01297a7acd7554c49913d46999a22cc5e63f5 Mon Sep 17 00:00:00 2001 From: Denis Date: Thu, 28 May 2026 16:35:46 +0300 Subject: [PATCH 2/2] =?UTF-8?q?H-3821:=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=B0=D0=BB=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20/admin/employment=20=D0=B2=20=D0=BD=D0=B5=D0=B9?= =?UTF-8?q?=D1=82=D1=80=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D0=BE?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B9=20=D1=81=D1=82=D0=B8=D0=BB=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Убрал разговорные обороты («главный кейс», «уволенные», «совместительства», «юзер», «UUID юзера», «то самое значение», «cross-tenant», «нет права», «ilike-поиск»). Описания параметров, полей схемы и ответов переведены в нейтральный документационный регистр без жаргона и эмоциональной разметки. Технический смысл сохранён полностью — изменения только стилистические. Co-Authored-By: Claude Opus 4.7 (1M context) --- v2/swagger.yaml | 219 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 151 insertions(+), 68 deletions(-) diff --git a/v2/swagger.yaml b/v2/swagger.yaml index f4353f0..03713c2 100644 --- a/v2/swagger.yaml +++ b/v2/swagger.yaml @@ -74,7 +74,7 @@ tags: - name: admin-user-api-token description: Methods for admin oversight of personal API tokens. Requires "api-tokens-admin" permission. - 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: /mobile/bind/{id}/{token}: @@ -7534,15 +7534,21 @@ paths: /admin/employment: get: tags: [admin-employment] - summary: Список трудоустройств — admin read-only + summary: Получить список трудоустройств description: | - Постраничный список трудоустройств всего тенанта с фильтрами - `EmploymentSearch`. Поведением и набором полей идентичен - legacy-эндпоинту `/api/employment` (v1) — перенесён в v2 как - основа для интеграций (web-zaim, sokolove и др.) и будущей - Vue3-админки. + Возвращает постраничный список трудоустройств тенанта с поддержкой + фильтрации, сортировки и пагинации. Состав возвращаемых полей и + набор параметров фильтрации соответствуют существующему эндпоинту + `/api/employment` версии 1. - ### Главный кейс — маппинг (origin_id, origin_organization_id) → user_id + ## Получение идентификатора пользователя по внешнему ключу + + Основной сценарий использования для интеграций — получение + идентификатора пользователя HRBox (`user_id`) по внешнему + идентификатору должности из системы-источника + (`origin_id`, `origin_organization_id`). + + Пример запроса: ``` GET /api/v2/admin/employment @@ -7550,20 +7556,23 @@ paths: &origin_organization_id=default ``` - В ответе `data[].user_id` — это родной HRBox UUIDv4 пользователя, - который дальше можно передавать в любые v2-эндпоинты, ожидающие - `user_id`. Поддерживается батч: `?origin_id[]=...&origin_id[]=...`. + В поле `data[].user_id` возвращается идентификатор пользователя + в формате UUID версии 4, который может быть использован + в последующих обращениях к v2 API. Поддерживается передача + нескольких значений через массив: + `?origin_id[]=...&origin_id[]=...`. - ### Совместительства + ## Множественные трудоустройства - Один пользователь может иметь несколько трудоустройств с разными - `origin_id`. Поле `is_main` отличает основное от дополнительных. + У одного пользователя может быть несколько трудоустройств + с различными значениями `origin_id`. Признак основного + трудоустройства передаётся в поле `is_main`. - ### Уволенные + ## Завершённые трудоустройства - Записи с `fired_date != null` включены по умолчанию — нужны для - синхронизации увольнений. Если нужны только активные — - фильтруйте `status_id=1`. + Записи с заполненным полем `fired_date` включены в выдачу + по умолчанию. Для исключения завершённых трудоустройств + используйте фильтр `status_id`. operationId: adminEmploymentIndex parameters: - name: page @@ -7575,10 +7584,14 @@ paths: - name: sort in: query schema: { type: string } - description: 'Префикс `-` для DESC. Атрибуты — `created_at`, `employment_date`, `fired_date`, и др. (по `EmploymentSearch::sort`).' + description: | + Поле сортировки. Для сортировки по убыванию используется префикс `-`. + Допустимые поля: `created_at`, `employment_date`, `fired_date` и другие + атрибуты, определённые в `EmploymentSearch::sort()`. - name: id in: query schema: { type: string, format: uuid } + description: Идентификатор трудоустройства. - name: user_id in: query schema: @@ -7587,15 +7600,20 @@ paths: format: uuid - type: array items: { type: string, format: uuid } - description: 'UUID юзера. Массив через `?user_id[]=...&user_id[]=...` или comma-separated.' + description: | + Идентификатор пользователя. Допускается передача нескольких значений + в виде массива `?user_id[]=...&user_id[]=...` либо в виде строки + со значениями, разделёнными запятой. - name: chief_id in: query schema: { type: string, format: uuid } - description: UUID employment'а руководителя. + description: Идентификатор трудоустройства руководителя. - name: department_id in: query schema: { type: string, format: uuid } - description: UUID подразделения (с автоматическим учётом поддерева). + description: | + Идентификатор подразделения. Фильтр учитывает все вложенные + подразделения иерархии. - name: origin_id in: query schema: @@ -7603,85 +7621,112 @@ paths: - type: string - type: array items: { type: string } - description: Внешний ID (например из 1С). Comma-separated или массив. + description: | + Внешний идентификатор должности из системы-источника. Допускается + передача нескольких значений в виде массива либо строки + со значениями, разделёнными запятой. - name: origin_organization_id in: query schema: { type: string } - description: Идентификатор организации во внешней системе (для мульти-org тенантов). + description: | + Идентификатор организации в системе-источнике. Применяется + в сочетании с `origin_id` для однозначного сопоставления записи. - name: org_num in: query schema: { type: string } - description: Comma-separated табельные номера. + description: | + Табельный номер. Допускается передача нескольких значений + в виде строки, разделённой запятой. - name: first_name in: query schema: { type: string } - description: ilike-поиск. + description: Поиск по имени, регистронезависимое частичное совпадение. - name: last_name in: query schema: { type: string } - description: ilike-поиск. + description: Поиск по фамилии, регистронезависимое частичное совпадение. - name: name in: query schema: { type: string } - description: ilike по `first_name` + `last_name` через JOIN User. + description: | + Поиск по полю `name` пользователя (имя и фамилия), + регистронезависимое частичное совпадение. - name: position in: query schema: { type: string } - description: ilike-поиск по должности. + description: Поиск по должности, регистронезависимое частичное совпадение. - name: is_main in: query schema: { type: boolean } - description: Только основные трудоустройства. + description: Признак основного трудоустройства. - name: status_id in: query schema: { type: integer } - description: 'Стандартный enum `Status` (1=Active, 2=Disabled).' + description: | + Статус трудоустройства. Допустимые значения: + `1` — действующее, `2` — отключённое. - name: reg_status_id in: query schema: { type: string } - description: Comma-separated `RegStatus` (1=NO_ACCOUNT, 2=INVITED, 3=ACTIVE, 4=BLOCKED) — фильтр по статусу владельца. + description: | + Статус регистрации пользователя-владельца трудоустройства. + Допустимые значения: `1` — без аккаунта, `2` — приглашён, + `3` — активен, `4` — заблокирован. Допускается передача + нескольких значений через запятую. - name: created_at in: query schema: { type: string } - description: 'Диапазон `from|to` (ISO).' + description: | + Период создания записи в формате `<начало>|<конец>`, + где даты указаны по ISO 8601. - name: employment_date in: query schema: { type: string } - description: 'Диапазон даты приёма `from|to`.' + description: | + Период даты приёма на работу в формате `<начало>|<конец>`. - name: fired_date in: query schema: { type: string } - description: 'Диапазон даты увольнения `from|to`.' + description: | + Период даты увольнения в формате `<начало>|<конец>`. - name: user_list_key in: query schema: { type: string, format: uuid } - description: 'Ключ закэшированной выборки сотрудников (см. `/user-list-cache/set-user-list`).' + description: | + Ключ закэшированной выборки пользователей, полученный + от `/user-list-cache/set-user-list`. - name: chief_only in: query schema: { type: boolean } - description: Только прямые подчинённые текущего юзера. + description: | + Ограничить выборку прямыми подчинёнными текущего пользователя. - name: chief_only_all in: query schema: { type: boolean } - description: Все подчинённые рекурсивно. + description: | + Ограничить выборку всеми подчинёнными текущего пользователя + с учётом вложенной иерархии. - name: multipleEmployment in: query schema: { type: boolean } - description: Только записи юзеров с несколькими трудоустройствами. + description: | + Ограничить выборку пользователями, у которых более одного + трудоустройства. responses: 200: - description: Список трудоустройств + description: Список трудоустройств. content: application/json: schema: $ref: '#/components/schemas/AdminEmploymentList' 403: - description: Нет права `user-edit`. + description: | + У текущего пользователя отсутствует право `user-edit`. /admin/employment/view: get: tags: [admin-employment] - summary: Одно трудоустройство — admin read-only + summary: Получить трудоустройство по идентификатору operationId: adminEmploymentView parameters: - name: id @@ -7690,17 +7735,20 @@ paths: schema: { type: string, format: uuid } responses: 200: - description: Трудоустройство + description: Запись трудоустройства. content: application/json: schema: $ref: '#/components/schemas/AdminEmployment' 400: - description: Невалидный UUID. + description: Параметр `id` имеет некорректный формат. 403: - description: Нет права `user-edit`. + description: | + У текущего пользователя отсутствует право `user-edit`. 404: - description: Запись не найдена (включая cross-tenant). + description: | + Запись не найдена. Включает случаи обращения к записям, + принадлежащим другим тенантам. components: securitySchemes: @@ -12846,82 +12894,117 @@ components: AdminEmployment: type: object description: | - Запись трудоустройства в admin-выдаче. Содержит как сырые поля - Employment, так и связанные `user` / `chiefUser` / `department`. + Запись трудоустройства в административной выдаче. Содержит поля + самого трудоустройства, а также связанные объекты пользователя, + руководителя и подразделения. properties: id: type: string format: uuid - description: UUID трудоустройства (родной HRBox). + description: Идентификатор трудоустройства. is_main: type: boolean - description: Основное трудоустройство (одно на юзера). Несколько `false` — совместительства. + description: | + Признак основного трудоустройства. Для пользователя с несколькими + трудоустройствами только одна запись имеет значение `true`. user_id: type: string format: uuid - description: UUID владельца (`hr_user.id`) — **то самое значение для маппинга origin → user**. + description: | + Идентификатор пользователя-владельца трудоустройства. Используется + для последующих обращений к v2 API, ожидающих `user_id`. chief_id: type: string format: uuid nullable: true - description: UUID employment'а руководителя (не User'а). + description: | + Идентификатор трудоустройства руководителя. Ссылается на запись + `Employment`, а не на `User`. department_id: type: string format: uuid nullable: true + description: Идентификатор подразделения. position: type: string nullable: true + description: Должность. employment_date: type: string nullable: true - description: Дата приёма (ISO). + description: Дата приёма на работу в формате ISO 8601. fired_date: type: string nullable: true - description: Дата увольнения (ISO). `null` для действующих. + description: | + Дата увольнения в формате ISO 8601. Поле имеет значение `null` + для действующих трудоустройств. status_id: type: integer nullable: true - description: 'Стандартный `Status` (1=Active, 2=Disabled).' + description: | + Статус трудоустройства. Допустимые значения: `1` — действующее, + `2` — отключённое. origin_id: type: string nullable: true - description: Внешний идентификатор должности из системы-источника (1С и т.п.). + description: | + Внешний идентификатор должности из системы-источника. origin_organization_id: type: string nullable: true - description: Идентификатор внешней организации. Маппинг — это **пара** `(origin_id, origin_organization_id)`. + description: | + Идентификатор организации в системе-источнике. Однозначное + сопоставление записи определяется парой + (`origin_id`, `origin_organization_id`). org_num: type: string nullable: true description: Табельный номер. - first_name: { type: string, nullable: true } - last_name: { type: string, nullable: true } + first_name: + type: string + nullable: true + description: Имя пользователя. + last_name: + type: string + nullable: true + description: Фамилия пользователя. photo: type: string nullable: true - description: Имя файла фото из источника (если приходит из интеграции). - created_at: { type: string, nullable: true } - updated_at: { type: string, nullable: true } + description: | + Имя файла фотографии, полученное от системы-источника. + created_at: + type: string + nullable: true + description: Дата создания записи. + updated_at: + type: string + nullable: true + description: Дата последнего изменения записи. experience: type: string nullable: true - description: 'Стаж в человекочитаемом виде (например `15 years 3 months 19 days`).' + description: | + Стаж работы в текстовом представлении (например, + «15 years 3 months 19 days»). name: type: string nullable: true - description: Готовая строка ФИО юзера-владельца. + description: Имя и фамилия пользователя-владельца трудоустройства. nameDetails: type: string nullable: true + description: Расширенное представление имени пользователя. iconUrl: type: string format: uri nullable: true + description: URL изображения пользователя. profilePosition: type: string nullable: true + description: Должность для отображения в профиле пользователя. user: $ref: '#/components/schemas/AdminEmploymentUserShort' chiefUser: @@ -12935,19 +13018,19 @@ components: createdAt: type: string nullable: true - description: 'Локализованная `created_at`.' + description: Дата создания записи в локализованном представлении. employmentDate: type: string nullable: true - description: 'Локализованная `employment_date`.' + description: Дата приёма на работу в локализованном представлении. firedDate: type: string nullable: true - description: 'Локализованная `fired_date`.' + description: Дата увольнения в локализованном представлении. statusName: type: string nullable: true - description: 'Локализованное имя статуса.' + description: Локализованное наименование статуса. AdminEmploymentList: type: object -- 2.54.0