Перейти к основному содержимому

index

@mineflow/client-react


@mineflow/client-react / HR

HR

HR (персонал, вахты, смены, табель, УЗ, закрепления техники) — рукописные хуки. Тривиальные read'ы (usePersonnel/useWatches/…) генерятся в ./hr.generated и ре-экспортируются ниже; здесь — нетривиальные read'ы (полный курсорный обход, singleton me, top-level asset-assignments, вахтовый ростер) и write-хуки жизненного цикла 5 агрегатов.

Все write HR синхронные (НЕ саги — ни один endpoint не отдаёт { sagaId }), поэтому каждый построен на useDomainMutation и на успехе инвалидирует свой раздел. Формы тел выводятся из @mineflow/api-client (codegen из OpenAPI) → не дрейфуют. IDEMPOTENT — плейсхолдер под required header-param Idempotency-Key; реальный ключ проставит fetch-слой (makeAuthenticatedFetch).

Interfaces​

InterfaceDescription
PersonnelOrderDocumentFileСкачанный файл документа приказа: тело + имя файла + MIME.
TimesheetExportРезультат выгрузки табеля: CSV как Blob + имя файла из Content-Disposition.
WatchArrivalOrderDocumentParamsПараметры печати приказа «О заезде на вахту» (BL-72).

Type Aliases​

Type AliasDescription
AdjustTimesheetBodyТело корректировки строки табеля (часы, причина, …).
AssignOrgNodeBodyТело назначения/снятия штатной позиции (orgNodeId=null — снять с должности).
CancelSurveyBodyТело отмены опроса (reason).
CancelWatchAssignmentBodyТело отмены назначения на вахту (reason, …).
ChangeUserLoginBodyТело переименования логина УЗ (новый login + обязательная причина).
CreateAssetAssignmentBodyТело закрепления техники за сотрудником (assetId, personnelId, роль, …).
CreateOrgNodeBodyТело создания узла оргструктуры (parentId/positionId/title/subdivision/plannedHeadcount).
CreatePersonnelOrderBodyТело создания черновика приказа (operationType + payload по схеме операции).
CreateShiftBodyТело создания смены (объект, дата, тип смены, вахта, …).
CreateSubstitutionBodyТело подмены в смене (кого кем, reason, …).
CreateSurveyBodyТело создания опроса (title, окно приёма, аудитория).
CreateUserAccountBodyТело создания учётной записи (логин, ФИО, роли, объект-скоуп, …).
CreateWatchAssignmentBodyТело назначения сотрудника на вахту (personnelId, план прибытия/убытия, опц. assetId станка).
CreateWatchBodyТело создания вахты (объект, диапазон дат вахтового цикла, …).
DeactivateUserAccountBodyТело деактивации УЗ (reason, …).
DeleteAssetAssignmentBodyТело снятия закрепления техники (reason, …).
DepartWatchAssignmentBodyТело фиксации убытия с вахты (фактическая дата, …).
HirePersonBodyТело найма сотрудника (ФИО, должность, объект, табельный номер, …).
IssuePersonnelOrderBodyТело выпуска приказа (draft → issued).
LockUserAccountBodyТело блокировки УЗ (reason, …).
MovePersonnelBodyТело операции «Переместить» (ТЗ «Админ-панель» § 4): вахтовая группа и/или статус.
PersonnelOrderDocumentFormatФормат выгрузки документа приказа (зеркалит бэковый DocumentFormat).
RevokePersonnelOrderBodyТело сторнирования приказа (issued → revoked; причина).
SetShiftForemanBodyТело назначения бригадира смены (foremanId).
SetSurveyQuestionsBodyТело задания вопросов опроса (замена целиком, в draft).
SetWatchStaffingBodyТело планового состава вахты по должностям (ADR-0082).
StartVacationBodyТело начала отпуска сотрудника (даты).
StartWatchBodyТело начала вахты сотрудника (даты вахтового цикла).
SubmitSurveyResponseBodyТело отправки заполнения (answers).
SupersedePersonnelOrderBodyТело замены приказа (issued → superseded; ссылка на заменяющий).
TerminatePersonBodyТело увольнения сотрудника (reason, дата, …).
TimesheetExportQueryФильтры выгрузки табеля (dateFrom/dateTo обязательны на бэке, objectId опц.).
TransferPersonBodyТело перевода сотрудника на другой объект (toObjectId, …).
UpdateOrgNodeBodyТело обновления узла (переименование/перенос/штат — частичное).
UpdatePersonBodyТело редактирования карточки сотрудника.
UpdatePersonnelOrderDraftBodyТело редактирования черновика приказа (частичное; только status=draft).
UpdateShiftBodyТело правки смены (shiftDate/shiftType/watchId).
UpdateSurveyBodyТело правки опроса (в draft).
UpdateUserRolesBodyТело смены ролей УЗ (массив системных ролей).
UpdateWatchBodyТело правки дат вахты до старта (startDate/endDate).
WatchArrivalOrderDocumentFormatФормат печатного приказа «О заезде на вахту» (html не поддержан — только файл).

Functions​

FunctionDescription
filenameFromContentDispositionДостаёт filename из Content-Disposition (attachment; filename="..."; filename*=UTF-8''...). RFC 5987 filename* имеет приоритет (несёт UTF-8 имя). Экспортирована как чистая функция — покрыта unit-тестом без рендера хука.

Действия​

FunctionDescription
useTimesheetExportВыгрузка табеля в CSV (GET /hr/timesheet/export). Это on-demand ЭКШЕН, не реактивный query: useApiMutation (без авто-запуска/кэша), тело тянется как Blob (parseAs: 'blob'), т.к. эндпоинт стримит файл без typed-ответа в спеке. Само скачивание — на стороне платформы (web: createObjectURL + <a download>; RN: запись в FS), как и у documents (ADR-0051).

Запись​

FunctionDescription
useAdjustTimesheetКорректировка строки табеля. Инвалидирует раздел табеля.
useArchiveOrgNodeАрхивирование узла (active → archived; узел должен быть пуст). Только Admin/CEO. Тело не требуется. Инвалидирует раздел оргструктуры.
useArchiveSurveyАрхивировать опрос (closed → archived).
useArriveWatchAssignmentФиксация прибытия по назначению на вахту. Тело не требуется. Инвалидирует раздел вахт.
useAssignPersonnelOrgNodeНазначение сотрудника на узел штатного расписания (ADR-0063). orgNodeId=null снимает с должности. Инвалидирует список персонала.
useCancelSurveyОтменить опрос (draft
useCancelWatchAssignmentОтмена назначения на вахту. Инвалидирует раздел вахт.
useChangeUserLoginПереименование логина УЗ (PATCH; только локальные учётки — федеративным бэкенд отвечает 422). Инвалидирует раздел УЗ.
useCloseSurveyЗакрыть приём ответов (published → closed).
useCreateAssetAssignmentЗакрепление техники за сотрудником. Инвалидирует список закреплений.
useCreateOrgNodeСоздание узла штатного расписания (позиция или подразделение). Только Admin/CEO. Инвалидирует дерево и детали оргструктуры.
useCreatePersonnelOrderСоздание черновика кадрового приказа (draft; без номера и эффекта). Admin only. Инвалидирует раздел приказов.
useCreateShiftСоздание смены. Инвалидирует список смен.
useCreateSubstitutionПодмена в смене. Инвалидирует раздел смен.
useCreateSurveyСоздать опрос (черновик). Инвалидирует список опросов.
useCreateUserAccountСоздание учётной записи. Инвалидирует список УЗ.
useCreateWatchСоздание вахты. Инвалидирует список вахт.
useCreateWatchAssignmentНазначение сотрудника на вахту. Инвалидирует раздел вахт.
useDeactivateUserAccountДеактивация УЗ. Инвалидирует раздел УЗ.
useDeleteAssetAssignmentСнятие закрепления техники. Инвалидирует список закреплений.
useDepartWatchAssignmentФиксация убытия по назначению на вахту. Инвалидирует раздел вахт.
useDiscardPersonnelOrderУдаление (DISCARD) черновика приказа — физическое удаление. Не-draft удалить нельзя (бэк отдаст 409). Admin only. Тела нет; БЕЗ Idempotency-Key (DELETE идемпотентен по HTTP-семантике, бэк не помечен @Idempotent). Инвалидирует раздел приказов.
useEndVacationЗавершение отпуска сотрудника. Тело не требуется.
useEndWatchЗавершение вахты сотрудника (FSM on_watch → rest). Тело не требуется.
useGenerateWatchShiftsГенерация смен day/night на дни вахты (ADR-0082, B1). Тело не требуется. Идемпотентно. Инвалидирует разделы вахт и смен: роут вахтовый, но создаёт записи hr/shifts, а экран вахты держит оба запроса рядом (таблица смен и график заездов) — без второго ключа они висели на старых данных до перезагрузки.
useHirePersonНайм (создание) сотрудника. На успехе инвалидирует список персонала.
useIssuePersonnelOrderВыпуск приказа (draft → issued): выделяет номер, фиксирует payload, диспатчит эффект на сотрудника. Admin only. Инвалидирует раздел приказов.
useLockUserAccountБлокировка УЗ. Инвалидирует раздел УЗ.
useMovePersonnel«Переместить» сотрудника (ТЗ «Админ-панель» § 4): смена вахты (A/B) и/или статуса одним PATCH; по каждому изменившемуся полю пишется запись в журнал «Перемещения». Синхронный write → useDomainMutation; инвалидирует раздел персонала (префикс personnel.all накрывает и списки, и журнал перемещений сотрудника).
usePublishSurveyОпубликовать опрос (draft → published).
useResetUserPasswordСброс пароля УЗ. Тело не требуется. Инвалидирует раздел УЗ.
useRestoreOrgNodeВосстановление узла из архива (archived → active). Только Admin/CEO. Тело не требуется. Инвалидирует раздел оргструктуры.
useRetryIamProvisioningПовтор IAM provisioning для pending/failed local УЗ. Инвалидирует раздел УЗ.
useRevokePersonnelOrderСторнирование приказа (issued → revoked): причина + async-компенсация эффекта в hr/personnel. Admin only. Инвалидирует раздел приказов.
useSetShiftForemanНазначение/смена бригадира смены (PUT). Инвалидирует раздел смен.
useSetSurveyQuestionsЗадать вопросы опроса (замена, в draft; после публикации заморожены).
useSetWatchStaffingПлановый состав вахты по должностям (ADR-0082, replace). Возвращает пересчитанное заполнение. Инвалидирует раздел вахт.
useStartVacationНачало отпуска сотрудника. Инвалидирует список персонала.
useStartWatchНачало вахты сотрудника (FSM rest → on_watch). Инвалидирует список персонала.
useSubmitSurveyResponseОтправить заполнение опроса (сторона респондента, offline-outbox).
useSupersedePersonnelOrderЗамена приказа новым (issued → superseded): помечает приказ заменённым новым issued-приказом. Admin only. Инвалидирует раздел приказов.
useTerminatePersonУвольнение сотрудника (terminal). Инвалидирует список персонала.
useTransferPersonПеревод сотрудника на другой объект. Инвалидирует список персонала.
useUnlockUserAccountРазблокировка УЗ. Тело не требуется. Инвалидирует раздел УЗ.
useUpdateOrgNodeОбновление узла (переименование, смена подразделения/штата ИЛИ перенос ветки — отличающийся parentId запускает проверку ацикличности на бэке). Только Admin/CEO. Инвалидирует раздел оргструктуры.
useUpdatePersonРедактирование карточки сотрудника (PATCH). Инвалидирует список персонала.
useUpdatePersonnelOrderDraftРедактирование черновика приказа (PATCH; только status=draft — выпущенный иммутабелен, бэк отдаст 409). Admin only. Инвалидирует раздел приказов.
useUpdateShiftПравка даты/типа/привязки смены (PATCH). Инвалидирует раздел смен.
useUpdateSurveyИзменить опрос (в draft). Инвалидирует раздел опросов.
useUpdateUserRolesСмена ролей УЗ (PATCH; без двойного согласования). Инвалидирует раздел УЗ.
useUpdateWatchПравка дат вахты до старта (PATCH). Инвалидирует раздел вахт.

Чтение​

FunctionDescription
useAssetAssignmentОдно закрепление техники по id.
useAssetAssignmentsСписок закреплений техники за персоналом (cursor-пагинация, фильтры objectId/assetId/personnelId/role/active). Путь top-level /asset-assignments (контроллер смонтирован без hr/-префикса), поэтому хук рукописный, не из генератора (тот ключует по area из пути).
useMeТекущая учётная запись (GET /hr/user-accounts/me) — кто залогинен: профиль, роли, объект-скоуп. Без параметров; ключ в разделе userAccounts (инвалидация userAccounts.all накроет и me).
useMyAuditLogСобственный security-журнал (GET /hr/user-accounts/me/audit-log, self-service HR 1.6). Учётка резолвится по JWT так же, как в useMe — видны ТОЛЬКО свои записи, поэтому доступно любой аутентифицированной роли (в отличие от useUserAccountAuditLog, который admin-only по id). Newest-first, первая страница.
useMySurveys«Мои опросы» — активные опросы, адресованные текущему сотруднику.
useOperationDefsРеестр операций КДП (GET /hr/personnel-orders/operations) — каталог OperationDef (метаданные форм, 19 типов) для динамического рендера/валидации формы создания приказа на FE (ADR-0042). Рукописный: bare-array read под отдельным долгоживущим ключом personnelOrders.operations (а не list()), чтобы мутации журнала приказов не инвалидировали реестр. Тривиальный list-генератор сюда не подходит (ключует под list()).
useOrgNodeОдин узел оргструктуры по id + занятые сотрудники.
useOrgStructureДерево оргструктуры (штатное расписание, ADR-0063) с счётчиками вакансий/подчинённых.
usePersonОдин сотрудник HR по id.
usePersonnelСписок персонала HR (cursor-пагинация).
usePersonnelAllПолный список персонала: стягивает ВСЕ страницы курсора (в отличие от usePersonnel — одна страница ≤200, молча обрезающая крупный участок). Курсор/ лимит хук гонит сам; caller передаёт только фильтры (objectId). Отдельный ключ (…list({…, all: true})), чтобы не пересекаться с кэшем usePersonnel.
usePersonnelMovementsЖурнал «Перемещения» сотрудника (ТЗ «Админ-панель» § 3.6): кадровые движения (вахтовая группа / статус), newest-first, первая страница. Рукописный: nested read под {id} генератор не распознаёт. Не запускается при пустом id. (Фильтры changeType/cursor пока вне контракта — на контроллере не проставлен @ApiQuery.)
usePersonnelOrderКарточка одного кадрового приказа КДП по id.
usePersonnelOrderDocumentInline-HTML документа выпущенного приказа (GET /hr/personnel-orders/{id}/document). Рукописный: ответ text/html, а не JSON — генератор list/detail сюда не годится (его unwrap(c.GET(...)) подразумевает JSON-тело). Здесь явный parseAs: 'text', чтобы openapi-fetch читал тело как строку (иначе .json() упал бы на HTML). Только status=issued (иначе бэк отдаёт 409 → unwrap бросит MineflowApiError). Не запускается при пустом id.
usePersonnelOrderDocumentDownloadИмперативная загрузка документа выпущенного приказа бинарём (pdf/docx) или html. Возвращает стабильный колбэк (id, format) => Promise<{blob, filename, contentType}>. Тянет файл аутентифицированным authFetch (Bearer) напрямую — минуя типизированный openapi-fetch, т.к. тело бинарное (не JSON) и форма ответа зависит от формата. Имя файла берётся из Content-Disposition (RFC 5987 → кириллица в номере приказа сохраняется). DOM-доставку (createObjectURL + a.download) делает платформа (web); RN сохраняет Blob иначе. Только status=issued (иначе 409 → колбэк бросает Error с сообщением бэка).
usePersonnelOrdersЖурнал кадровых приказов КДП (cursor-пагинация, фильтры personnelId/objectId/category/operationType/status).
useShiftОдна смена HR по id.
useShiftsСписок смен HR (cursor-пагинация, фильтры objectId/shiftDate/shiftType/watchId).
useSurveyОдин опрос HR по id (с вопросами).
useSurveyResponsesИндивидуальные (именные) ответы опроса (Admin).
useSurveyResultsАгрегированные результаты опроса (дашборд).
useSurveysСписок опросов HR (авторская сторона, cursor-пагинация).
useTimesheetТабель HR за период (query.dateFrom/dateTo обязательны на бэке).
useTimesheetEntryОдна строка табеля HR по id.
useTimesheetSummaryИтог табеля за период: сумма отработанных часов + простоев и число записей по всей выборке (не по странице). dateFrom/dateTo обязательны на бэке.
useUserAccountОдна учётная запись HR по id.
useUserAccountAuditLogSecurity-журнал учётки (HR 1.6, read-model SecurityAuditLog; admin). Newest-first, первая страница.
useUserAccountsСписок учётных записей HR (cursor-пагинация, фильтры status/systemRoleCode/objectId/search).
useWatchОдна вахта HR по id.
useWatchArrivalOrderDocumentDownloadИмперативная загрузка печатного приказа «О заезде на вахту» (GET /hr/watches/{id}/arrival-order/document). Документ собирается на лету из не-отменённых назначений вахты; номер и дата приходят из диалога печати — реестр приказов ведёт канцелярия. Тот же механизм, что у usePersonnelOrderDocumentDownload: аутентифицированный authFetch → Blob + имя файла из Content-Disposition (RFC 5987, кириллица целая).
useWatchAssignmentsНазначения (заезды) вахты — read-model для FSM-переходов arrive/depart/cancel.
useWatchesСписок вахт HR (без personnelId-фильтра — query опционален).
useWatchFillЗаполнение вахты по должностям (план/факт/% — ADR-0082).
useWatchRosterBulk-ростер вахтовых назначений участка (GET /hr/watches/roster?objectId, ADR-0081, ADR-0119) — плоский список не-отменённых назначений: ФИО + должность одним запросом, кто сейчас на вахте участка. Станка здесь нет: посменную привязку «человек ↔ станок» отдаёт useCrewRoster (наряд). Замена brigade-ростера; убирает N+1 по /watches/{id}/assignments. Рукописный: codegen не распознаёт query-read без {id}. Гейтится на наличие objectId.