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

MineFlow Core API (0.1.0)

Download OpenAPI specification:Download

HTTP API ядра MineFlow (PRD, EAM, SCM, HR, IAM, Notifications)

Health

Liveness/readiness probes для Kubernetes

Liveness probe (процесс жив)

Kubernetes livenessProbe — возвращает 200 если процесс API отвечает.

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
{
  • "status": "ok",
  • "service": "string",
  • "version": "string",
  • "at": "2019-08-24T14:15:22Z"
}

Liveness probe (alias)

Алиас корневого liveness endpoint для k8s.

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
{
  • "status": "ok"
}

Readiness probe (Postgres + Redis + Keycloak + MinIO)

Kubernetes readinessProbe — проверяет доступность всех зависимостей.

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
{
  • "status": "ok",
  • "info": {
    },
  • "error": {
    },
  • "details": {
    }
}

Deep dependencies check (alias readiness)

Расширенная проверка зависимостей (alias readiness).

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
{
  • "status": "ok",
  • "info": {
    },
  • "error": {
    },
  • "details": {
    }
}

Observability

Метрики Prometheus и системные эндпоинты

Prometheus scrape endpoint

Возвращает текстовый snapshot всех зарегистрированных prom-client метрик в exposition-формате Prometheus. Эндпоинт публичный, потребляется prometheus-сервером.

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
"string"

Ingest client Web Vitals → Prometheus (ADR-0077)

Публичный beacon-ingest клиентских Web Vitals (LCP/INP/CLS/…) в Prometheus через libs/observability. Тело валидируется Zod .strict() с bounds; ответ 204 No Content. @Public — navigator.sendBeacon не ставит Authorization; edge rate-limit на Traefik.

Authorizations:
beareroauth2
Request Body schema: application/json
required
required
Array of objects [ 1 .. 20 ] items
Array ([ 1 .. 20 ] items)
name
required
string
Enum: "lcp" "inp" "fcp" "ttfb" "cls"
value
required
number >= 0
rating
required
string
Enum: "good" "needs-improvement" "poor"

Responses

Request samples

Content type
application/json
{
  • "metrics": [
    ]
}

Refs / registry

Общий справочник реестров системы

Реестр зарегистрированных справочников

Discovery-список всех справочников, зарегистрированных через RefRegistry (ADR-0014). Возвращает module, entity, displayName, ownerModule и readPath для UI и интеграций.

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Admin / Organizations

Управление организациями (multi-tenancy)

Создать новую организацию (super-admin)

Onboarding нового арендатора платформы. Slug должен быть уникальным; при коллизии возвращается 409. Создаёт пустую организацию — seed справочников выполняется отдельным шагом per-tenant.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
slug
required
string [ 3 .. 50 ] characters ^[a-z0-9](?:[a-z0-9-]{1,48}[a-z0-9])?$

Стабильный URL-safe идентификатор арендатора

name
required
string [ 1 .. 200 ] characters

Человекочитаемое название организации

Responses

Request samples

Content type
application/json
{
  • "slug": "explosion-solutions",
  • "name": "ТОО Explosion Solutions"
}

Response samples

Content type
application/json
{
  • "id": "00000000-0000-4000-8000-000000000001",
  • "slug": "explosion-solutions",
  • "name": "ТОО Explosion Solutions",
  • "status": "active",
  • "createdAt": "2026-05-21T08:00:00.000Z"
}

Список всех организаций (super-admin)

Возвращает все организации платформы. Доступно только super-admin.

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Карточка организации

Super-admin видит любую; обычный Admin видит только свою собственную (user.organizationId === id).

Authorizations:
beareroauth2
path Parameters
id
required
string
Example: 00000000-0000-4000-8000-000000000001

UUID организации

Responses

Response samples

Content type
application/json
{
  • "id": "00000000-0000-4000-8000-000000000001",
  • "slug": "explosion-solutions",
  • "name": "ТОО Explosion Solutions",
  • "status": "active",
  • "createdAt": "2026-05-21T08:00:00.000Z"
}

Обновить организацию (super-admin)

Меняет только name. Slug — иммутабельный URL-key, для смены slug нужно создать новую организацию и мигрировать данные.

Authorizations:
beareroauth2
path Parameters
id
required
string
Example: 00000000-0000-4000-8000-000000000001

UUID организации

Request Body schema: application/json
required
name
string [ 1 .. 200 ] characters

Новое человекочитаемое название. Slug менять нельзя — он URL-key.

Responses

Request samples

Content type
application/json
{
  • "name": "ТОО Explosion Solutions International"
}

Response samples

Content type
application/json
{
  • "id": "00000000-0000-4000-8000-000000000001",
  • "slug": "explosion-solutions",
  • "name": "ТОО Explosion Solutions",
  • "status": "active",
  • "createdAt": "2026-05-21T08:00:00.000Z"
}

Деактивировать организацию (super-admin)

Помечает статус как deactivated. ВНИМАНИЕ: сегодня deactivated НЕ блокирует API-вход пользователей этой организации (требует cached org-status lookup в OrgScopeInterceptor — отдельный ADR). Сейчас это operator-visible маркер.

Authorizations:
beareroauth2
path Parameters
id
required
string

UUID организации

Responses

Response samples

Content type
application/json
{
  • "id": "00000000-0000-4000-8000-000000000001",
  • "slug": "explosion-solutions",
  • "name": "ТОО Explosion Solutions",
  • "status": "active",
  • "createdAt": "2026-05-21T08:00:00.000Z"
}

Реактивировать организацию (super-admin)

Возвращает status в active. Парная операция к deactivate.

Authorizations:
beareroauth2
path Parameters
id
required
string

UUID организации

Responses

Response samples

Content type
application/json
{
  • "id": "00000000-0000-4000-8000-000000000001",
  • "slug": "explosion-solutions",
  • "name": "ТОО Explosion Solutions",
  • "status": "active",
  • "createdAt": "2026-05-21T08:00:00.000Z"
}

Admin / Sagas DLQ

Просмотр и переотправка задач из DLQ саг

Список failed jobs в DLQ саг

BullMQ failed jobs из очередей steps и compensate.

Authorizations:
beareroauth2
query Parameters
limit
number

Максимум записей на каждую очередь (default 50)

Responses

Response samples

Content type
application/json
{
  • "entries": [
    ],
  • "truncated": true
}

Счётчики job-ов по статусам

Метрики для алертов: failed / waiting / active / delayed / completed.

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
{
  • "queues": [
    ]
}

Перезапустить failed job из DLQ

BullMQ переводит job из failed в waiting; attempts счётчик сбрасывается. Используется когда downstream сервис восстановлен.

Authorizations:
beareroauth2
path Parameters
queue
required
string
Enum: "mineflow-saga-steps" "mineflow-saga-compensate"
jobId
required
string

BullMQ jobId (формат ${sagaId}__${stepName} — двойной underscore, не двоеточие; BullMQ 5.x запрещает : в jobId)

Responses

Response samples

Content type
application/json
{
  • "title": "Asset already decommissioned",
  • "status": 409,
  • "code": "ASSET_ALREADY_DECOMMISSIONED",
  • "instance": "/api/v1/eam/assets/11111111-1111-4111-8111-111111111111"
}

Удалить failed job из DLQ

Job удаляется навсегда. Используется когда retry бессмыслен.

Authorizations:
beareroauth2
path Parameters
queue
required
string
Enum: "mineflow-saga-steps" "mineflow-saga-compensate"
jobId
required
string

BullMQ jobId

Responses

Response samples

Content type
application/json
{
  • "title": "Asset already decommissioned",
  • "status": 409,
  • "code": "ASSET_ALREADY_DECOMMISSIONED",
  • "instance": "/api/v1/eam/assets/11111111-1111-4111-8111-111111111111"
}

Admin / Trash

Soft-deleted записи и восстановление

Список supported entity types для soft-delete trash

Возвращает Prisma model names (PascalCase) которые поддерживают soft-delete (имеют колонку deletedAt). Используется UI для построения dropdown.

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
{
  • "entities": [
    ]
}

Soft-deleted rows entity-типа

Per-tenant выборка rows с deletedAt != null. Сортировка по deletedAt DESC. Limit 1..200 (default 50). entity — URL slug в kebab-case (production-objects, asset-classes, watches, etc.).

Authorizations:
beareroauth2
path Parameters
entity
required
string

Entity slug (kebab-case)

query Parameters
limit
number

1..200, default 50

Responses

Response samples

Content type
application/json
{
  • "entity": "string",
  • "rows": [
    ],
  • "count": 0
}

Восстановить soft-deleted row

Снимает deletedAt; re-checks unique constraints (см. KNOWN_UNIQUE_CHECKS). Если bizkey уже занят активной записью — 409 TRASH_RESTORE_UNIQUE_CONFLICT.

Authorizations:
beareroauth2
path Parameters
entity
required
string

Entity slug (kebab-case)

id
required
string <uuid>

UUID restored row

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}

Audit

Доступ к журналу аудита действий

История изменений сущности

Cursor-пагинированный список audit-записей по конкретной сущности (entityType + entityId). Сортировка по at DESC (новые сверху). Используется на detail-страницах для отображения «кто и когда менял».

Authorizations:
beareroauth2
query Parameters
entityType
required
string [ 1 .. 64 ] characters
Example: entityType=asset

Тип сущности

entityId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: entityId=11111111-1111-4111-8111-111111111111

UUID сущности (v4)

limit
number [ 1 .. 200 ]
Default: 50
Example: limit=50

1–200, default 50

cursor
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: cursor=2026-05-25T08:30:15.123Z

ISO-timestamp из nextCursor предыдущей страницы

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "2026-05-25T08:30:15.123Z"
}

Org-wide лента аудита (Admin)

Cursor-пагинированная лента ВСЕХ audit-записей организации без entity-фильтра. Опциональные фильтры: тип сущности, действие, актор, диапазон дат. Сортировка по at DESC. Только для роли Admin.

Authorizations:
beareroauth2
query Parameters
entityType
string [ 1 .. 64 ] characters
Example: entityType=personnel

Фильтр по типу сущности

action
string [ 1 .. 64 ] characters
Example: action=transfer

Фильтр по действию

actorId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: actorId=11111111-1111-4111-8111-111111111111

Фильтр по актору (Keycloak sub)

from
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: from=2026-05-01T00:00:00.000Z

Нижняя граница at (ISO)

to
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: to=2026-06-01T23:59:59.999Z

Верхняя граница at (ISO)

limit
number [ 1 .. 200 ]
Default: 50
Example: limit=50

1–200, default 50

cursor
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: cursor=2026-05-25T08:30:15.123Z

ISO-timestamp из nextCursor

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "2026-05-25T08:30:15.123Z"
}

Documents

Прикреплённые документы (MinIO)

Список документов сущности-владельца

Возвращает метаданные документов по entityType+entityId (без presigned-URL — URL отдельным GET /:id). Роли: Engineer, Mechanic, Foreman, CEO.

Authorizations:
beareroauth2
query Parameters
entityType
required
string [ 1 .. 100 ] characters
Example: entityType=prd.shift-report

Тип сущности-владельца (например prd.shift-report)

entityId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: entityId=22222222-2222-4222-8222-222222222222

UUID сущности-владельца

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Инициировать загрузку документа (presigned PUT URL)

Создаёт запись документа в статусе pending и возвращает presigned PUT URL. Роли: Engineer, Mechanic, Foreman, CEO.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
entityType
required
string [ 1 .. 100 ] characters

Тип сущности-владельца (например eam.asset)

entityId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID сущности-владельца

filename
required
string [ 1 .. 255 ] characters

Имя файла с расширением

mimeType
string [ 1 .. 200 ] characters

MIME-тип (опционально, для Content-Type при PUT)

bucket
string
Enum: "documents" "hse-photos" "reports" "asset-passports"

MinIO bucket для хранения файла

Responses

Request samples

Content type
application/json
{
  • "entityType": "eam.asset",
  • "entityId": "22222222-2222-4222-8222-222222222222",
  • "filename": "passport-scan.pdf",
  • "mimeType": "application/pdf",
  • "bucket": "documents"
}

Response samples

Content type
application/json
{}

Подтвердить загрузку после PUT в MinIO

Проверяет наличие объекта, virus scan, переводит документ в ready. Роли: Engineer, Mechanic, Foreman, CEO.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID документа

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
sha256
string = 64 characters

SHA-256 хеш загруженного файла (hex, 64 символа)

Responses

Request samples

Content type
application/json
{
  • "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "status": "ready",
  • "size": 1024
}

Получить presigned GET URL для скачивания

Возвращает временный URL для скачивания готового документа.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID документа

Responses

Response samples

Content type
application/json
{}

Sagas

Статусы и метаданные исполнения саг

Прогресс любой саги по sagaId

Универсальный endpoint для опроса async-саг. После запуска саги (например, POST /eam/sagas/asset-decommission или approve shift-report) FE получает sagaId и опрашивает этот endpoint до тех пор, пока последний шаг не примет терминальный статус (completed/failed/compensated). Cross-org изоляция: возвращаются только шаги саг своей организации.

Authorizations:
beareroauth2
path Parameters
sagaId
required
string <uuid>

UUID саги, возвращённый при запуске

Responses

Response samples

Content type
application/json
{
  • "sagaId": "11111111-1111-4111-8111-111111111111",
  • "steps": [
    ]
}

PRD / Shift Reports

Сменные отчёты буровзрывных работ

Список сменных отчётов с фильтрами и пагинацией

Cursor pagination (по createdAt desc). Фильтры: status, productionObjectId, shiftDateFrom, shiftDateTo. Роли: Engineer, Foreman, CEO.

Authorizations:
beareroauth2
query Parameters
status
string
Enum: "draft" "submitted" "approved" "rejected"
productionObjectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID

shiftDateFrom
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

YYYY-MM-DD

shiftDateTo
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

YYYY-MM-DD

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID

limit
number [ 1 .. 100 ]
Default: 20

1..100, default 20

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "53a4a333-2825-45a4-80d2-5f430d088f36"
}

Создать черновик сменного отчёта

Один черновик на (organization, productionObject, shiftDate, shiftType). Дубль → 409. Idempotent через заголовок Idempotency-Key.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
productionObjectId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID производственного объекта (карьера/участка)

shiftDate
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Календарный день смены (YYYY-MM-DD)

shiftType
required
string
Enum: "day" "night"

Тип смены: day | night

Responses

Request samples

Content type
application/json
{
  • "productionObjectId": "3a0a4af6-394b-45a9-92bd-735ed933b284",
  • "shiftDate": "2026-05-20",
  • "shiftType": "day"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "organizationId": "7bc05553-4b68-44e8-b7bc-37be63c6d9e9",
  • "productionObjectId": "3a0a4af6-394b-45a9-92bd-735ed933b284",
  • "shiftDate": "2026-05-20",
  • "shiftType": "day",
  • "status": "draft",
  • "submittedBy": "a641a425-2470-49a5-92c2-5825c2833a34",
  • "submittedAt": "string",
  • "approvedBy": "c91bd49a-5920-43a3-b792-1660455e23bf",
  • "approvedAt": "string",
  • "approveSagaId": "06106995-2439-4b39-8e3c-8433c7579030",
  • "rejectedBy": "5cb42f49-c6a2-45fc-805c-4333469e59d0",
  • "rejectedAt": "string",
  • "rejectReason": "string",
  • "createdAt": "string",
  • "updatedAt": "string"
}

Получить сменный отчёт по ID

Возвращает 404 если отчёт не найден или принадлежит другой организации.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID сменного отчёта

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "organizationId": "7bc05553-4b68-44e8-b7bc-37be63c6d9e9",
  • "productionObjectId": "3a0a4af6-394b-45a9-92bd-735ed933b284",
  • "shiftDate": "2026-05-20",
  • "shiftType": "day",
  • "status": "draft",
  • "submittedBy": "a641a425-2470-49a5-92c2-5825c2833a34",
  • "submittedAt": "string",
  • "approvedBy": "c91bd49a-5920-43a3-b792-1660455e23bf",
  • "approvedAt": "string",
  • "approveSagaId": "06106995-2439-4b39-8e3c-8433c7579030",
  • "rejectedBy": "5cb42f49-c6a2-45fc-805c-4333469e59d0",
  • "rejectedAt": "string",
  • "rejectReason": "string",
  • "createdAt": "string",
  • "updatedAt": "string"
}

Подать черновик на утверждение

FSM draft → submitted. Подавать может Foreman (заполнял) или Engineer.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID сменного отчёта

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "organizationId": "7bc05553-4b68-44e8-b7bc-37be63c6d9e9",
  • "productionObjectId": "3a0a4af6-394b-45a9-92bd-735ed933b284",
  • "shiftDate": "2026-05-20",
  • "shiftType": "day",
  • "status": "draft",
  • "submittedBy": "a641a425-2470-49a5-92c2-5825c2833a34",
  • "submittedAt": "string",
  • "approvedBy": "c91bd49a-5920-43a3-b792-1660455e23bf",
  • "approvedAt": "string",
  • "approveSagaId": "06106995-2439-4b39-8e3c-8433c7579030",
  • "rejectedBy": "5cb42f49-c6a2-45fc-805c-4333469e59d0",
  • "rejectedAt": "string",
  • "rejectReason": "string",
  • "createdAt": "string",
  • "updatedAt": "string"
}

Утвердить сменный отчёт (запускает 5-шаговую approve-сагу)

FSM submitted → approved. Возвращает sagaId; следите за прогрессом через GET /sagas/:sagaId/status. Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID сменного отчёта

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "shiftReportId": "182d8849-6881-41ef-8195-03d54008fea2",
  • "sagaId": "d171ccc5-4e45-4ee5-8129-c6924a02cf9a",
  • "status": "enqueued"
}

Отклонить сменный отчёт ИЗ submitted (без сторно-саги)

FSM submitted → rejected. Применяется когда инженер увидел проблему до approve. Approve-сага ещё не запускалась, компенсация не требуется — это простой статус-переход с reason. Доступно Engineer и CEO. Idempotent. После rejected мастер может создать новый отчёт на ту же смену (partial unique).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID сменного отчёта

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
required
string [ 5 .. 500 ] characters

Причина отклонения — не менее 5 символов, попадает в audit_log + событие

Responses

Request samples

Content type
application/json
{
  • "reason": "Отсутствуют замеры топлива на 3 машины"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "organizationId": "7bc05553-4b68-44e8-b7bc-37be63c6d9e9",
  • "productionObjectId": "3a0a4af6-394b-45a9-92bd-735ed933b284",
  • "shiftDate": "2026-05-20",
  • "shiftType": "day",
  • "status": "draft",
  • "submittedBy": "a641a425-2470-49a5-92c2-5825c2833a34",
  • "submittedAt": "string",
  • "approvedBy": "c91bd49a-5920-43a3-b792-1660455e23bf",
  • "approvedAt": "string",
  • "approveSagaId": "06106995-2439-4b39-8e3c-8433c7579030",
  • "rejectedBy": "5cb42f49-c6a2-45fc-805c-4333469e59d0",
  • "rejectedAt": "string",
  • "rejectReason": "string",
  • "createdAt": "string",
  • "updatedAt": "string"
}

Сторно утверждённого сменного отчёта (запускает обратную сагу)

FSM approved → rejected. Запускает 5-шаговую сторно-сагу prd.shift-report.reject-after-approve. Применяется когда после approve обнаружена ошибка и нужно откатить все эффекты (топливо, ТМЦ, моточасы, статистика, табель). Возвращает rejectSagaId + originalApproveSagaId для трассировки. Idempotent. Доступно только CEO (двойное согласование).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID сменного отчёта

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
required
string [ 10 .. 500 ] characters

Причина сторно — не менее 10 символов, попадает в audit_log и reject-сагу

Responses

Request samples

Content type
application/json
{
  • "reason": "Ошибочно учтены моточасы из-за сбоя датчика"
}

Response samples

Content type
application/json
{
  • "shiftReportId": "182d8849-6881-41ef-8195-03d54008fea2",
  • "rejectSagaId": "de64eefe-15a8-40ca-9b7d-5ca22190d775",
  • "originalApproveSagaId": "f8d8d7fa-5387-48c6-a2e9-e2de8173ae00",
  • "status": "enqueued"
}

Снимок всех child entries отчёта

Возвращает personnel, asset-usages, drilling, blasting, fuel, downtime, tmcUsage одним запросом. Используется сагой и админ-просмотром.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID отчёта

Responses

Response samples

Content type
application/json
{
  • "personnel": [
    ],
  • "assetUsages": [
    ],
  • "drilling": [
    ],
  • "blasting": [
    ],
  • "fuel": [
    ],
  • "downtime": [
    ],
  • "tmcUsage": [
    ]
}

Добавить запись о сотруднике в смене (Q2)

Добавляет shift-personnel в отчёт в статусе draft. После approve запись становится иммутабельной.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID отчёта

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
personnelId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID работника (hr.personnel)

positionId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID должности (soft-ref)

hoursWorked
required
number [ 0 .. 24 ]

Отработанные часы в смене (0..24)

downtimeHours
required
number [ 0 .. 24 ]

Часы простоя сотрудника (0..24)

Responses

Request samples

Content type
application/json
{
  • "personnelId": "430ebe5f-1db2-4480-bb3a-6df8655231f8",
  • "positionId": "da3402dc-13f8-45f9-83a6-bde06dd8eb35",
  • "hoursWorked": 24,
  • "downtimeHours": 24
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "organizationId": "7bc05553-4b68-44e8-b7bc-37be63c6d9e9",
  • "shiftReportId": "182d8849-6881-41ef-8195-03d54008fea2",
  • "personnelId": "430ebe5f-1db2-4480-bb3a-6df8655231f8",
  • "positionId": "da3402dc-13f8-45f9-83a6-bde06dd8eb35",
  • "hoursWorked": 0,
  • "downtimeHours": 0,
  • "createdAt": "string",
  • "updatedAt": "string"
}

Добавить использование актива в смене (Q2)

Регистрирует факт работы единицы оборудования в смене. Допускается только в статусе draft.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID отчёта

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
assetId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID актива (eam.assets)

string or null

UUID оператора (опционально)

hoursWorked
required
number [ 0 .. 24 ]
meterReadingStart
required
number >= 0
meterReadingEnd
required
number >= 0

Responses

Request samples

Content type
application/json
{
  • "assetId": "9179b887-04ef-4ce5-ab3a-b5bbd39ea3c8",
  • "operatorPersonnelId": "a2bc08b5-d34a-49ca-9fa6-8702a73bbbde",
  • "hoursWorked": 24,
  • "meterReadingStart": 0,
  • "meterReadingEnd": 0
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "organizationId": "7bc05553-4b68-44e8-b7bc-37be63c6d9e9",
  • "shiftReportId": "182d8849-6881-41ef-8195-03d54008fea2",
  • "assetId": "9179b887-04ef-4ce5-ab3a-b5bbd39ea3c8",
  • "operatorPersonnelId": "a2bc08b5-d34a-49ca-9fa6-8702a73bbbde",
  • "hoursWorked": 0,
  • "meterReadingStart": 0,
  • "meterReadingEnd": 0,
  • "createdAt": "string",
  • "updatedAt": "string"
}

Добавить запись о бурении (Q2)

Фиксирует объёмы бурения и износ долота. Допускается только в статусе draft.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID отчёта

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
assetUsageId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID соответствующего ShiftAssetUsage

holesDrilled
required
integer ( 0 .. 2147483647 ]

Количество пробуренных скважин (1..2^31-1)

depthMeters
required
number > 0

Глубина бурения, м

number or null

Износ долота, % (0..100); null если не замерили

Responses

Request samples

Content type
application/json
{
  • "assetUsageId": "45cf15f4-0b7d-4176-8eeb-93df63812a87",
  • "holesDrilled": 15,
  • "depthMeters": 0,
  • "drillBitWearPercent": 100
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "organizationId": "7bc05553-4b68-44e8-b7bc-37be63c6d9e9",
  • "shiftReportId": "182d8849-6881-41ef-8195-03d54008fea2",
  • "assetUsageId": "45cf15f4-0b7d-4176-8eeb-93df63812a87",
  • "holesDrilled": -9007199254740991,
  • "depthMeters": 0,
  • "drillBitWearPercent": 0,
  • "createdAt": "string"
}

Добавить запись о взрывных работах (Q2)

Фиксирует взрывные работы и расход ВВ. Может ссылаться на разрешение (permit). Допускается только в статусе draft.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID отчёта

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
blocksBlasted
required
integer [ 0 .. 2147483647 ]

Количество взорванных блоков (0..2^31-1)

explosiveType
required
string [ 1 .. 80 ] characters

Тип ВВ (например, ANFO, Emulsion)

explosiveKg
required
number >= 0

Масса ВВ, кг

number or null

Взорванный объём, м³ (D2 — источник blasting-факта; опц.)

string or null

UUID разрешения hse.permits (опц.)

Responses

Request samples

Content type
application/json
{
  • "blocksBlasted": 12,
  • "explosiveType": "string",
  • "explosiveKg": 0,
  • "volumeM3": 0,
  • "permitId": "64d20f38-151e-42d0-9ba0-57274d8c8075"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "organizationId": "7bc05553-4b68-44e8-b7bc-37be63c6d9e9",
  • "shiftReportId": "182d8849-6881-41ef-8195-03d54008fea2",
  • "blocksBlasted": -9007199254740991,
  • "explosiveType": "string",
  • "explosiveKg": 0,
  • "volumeM3": 0,
  • "permitId": "64d20f38-151e-42d0-9ba0-57274d8c8075",
  • "createdAt": "string"
}

Добавить запись о расходе топлива (Q2)

Регистрирует расход топлива/смазочных материалов в смене. Допускается только в статусе draft.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID отчёта

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
assetUsageId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID соответствующего ShiftAssetUsage

tankId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID резервуара ДТ (scm/fuel.FuelTank) — обязательно

fuelType
required
string
Enum: "diesel" "gasoline" "lubricant"

Тип топлива/смазки

litersIssued
required
number >= 0

Выдано, литры

litersConsumed
required
number >= 0

Израсходовано, литры (<= litersIssued)

Responses

Request samples

Content type
application/json
{
  • "assetUsageId": "45cf15f4-0b7d-4176-8eeb-93df63812a87",
  • "tankId": "3b32d356-ac69-4c5f-ac39-eee74f13db7b",
  • "fuelType": "diesel",
  • "litersIssued": 0,
  • "litersConsumed": 0
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "organizationId": "7bc05553-4b68-44e8-b7bc-37be63c6d9e9",
  • "shiftReportId": "182d8849-6881-41ef-8195-03d54008fea2",
  • "assetUsageId": "45cf15f4-0b7d-4176-8eeb-93df63812a87",
  • "tankId": "3b32d356-ac69-4c5f-ac39-eee74f13db7b",
  • "fuelType": "diesel",
  • "litersIssued": 0,
  • "litersConsumed": 0,
  • "createdAt": "string"
}

Добавить событие простоя (Q2)

Фиксирует интервал простоя оборудования с причиной. Допускается только в статусе draft.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID отчёта

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
string or null

UUID ShiftAssetUsage (опц.); null если простой не привязан к технике

reasonCode
required
string
Enum: "breakdown" "maintenance" "no_fuel" "weather" "other" "relocation" "waiting_work_front"
startedAt
required
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

ISO 8601 момент начала

endedAt
required
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

ISO 8601 момент конца, должен быть > startedAt

string or null

Responses

Request samples

Content type
application/json
{
  • "assetUsageId": "45cf15f4-0b7d-4176-8eeb-93df63812a87",
  • "reasonCode": "breakdown",
  • "startedAt": "2019-08-24T14:15:22Z",
  • "endedAt": "2019-08-24T14:15:22Z",
  • "description": "string"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "organizationId": "7bc05553-4b68-44e8-b7bc-37be63c6d9e9",
  • "shiftReportId": "182d8849-6881-41ef-8195-03d54008fea2",
  • "assetUsageId": "45cf15f4-0b7d-4176-8eeb-93df63812a87",
  • "reasonCode": "breakdown",
  • "startedAt": "string",
  • "endedAt": "string",
  • "description": "string",
  • "createdAt": "string"
}

Добавить расход материала (Q2)

Регистрирует расход ТМЦ (запчастей/расходников) в смене. Допускается только в статусе draft.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID отчёта

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
string or null

UUID ShiftAssetUsage (опц.)

tmcItemId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID позиции ТМЦ (scm soft-ref)

quantity
required
number > 0

Количество (> 0)

unit
required
string [ 1 .. 20 ] characters

Единица измерения (л, шт, кг, ...)

Responses

Request samples

Content type
application/json
{
  • "assetUsageId": "45cf15f4-0b7d-4176-8eeb-93df63812a87",
  • "tmcItemId": "85836b85-d3d9-4915-84ec-5fbcd0cd4ec4",
  • "quantity": 0,
  • "unit": "string"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "organizationId": "7bc05553-4b68-44e8-b7bc-37be63c6d9e9",
  • "shiftReportId": "182d8849-6881-41ef-8195-03d54008fea2",
  • "assetUsageId": "45cf15f4-0b7d-4176-8eeb-93df63812a87",
  • "tmcItemId": "85836b85-d3d9-4915-84ec-5fbcd0cd4ec4",
  • "quantity": 0,
  • "unit": "string",
  • "createdAt": "string"
}

EAM / Assets

Активы (техника, оборудование)

Список активов с фильтрами и пагинацией

Курсорная пагинация. Фильтрация по objectId, responsibleMechanicId и status. Роли: Engineer, Mechanic, Foreman, CEO.

Authorizations:
beareroauth2
query Parameters
objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по производственному объекту

responsibleMechanicId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: responsibleMechanicId=11111111-1111-4111-8111-111111111111

Фильтр по ответственному механику (техника, закреплённая за сотрудником)

status
string
Enum: "operational" "maintenance" "conserved" "decommissioned"
Example: status=operational

Фильтр по статусу FSM

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: cursor=11111111-1111-4111-8111-111111111111

UUID последнего элемента предыдущей страницы

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": null
}

Создать актив

Создание актива с паспортом. Idempotent. Роли: Mechanic, Engineer.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
inventoryNumber
required
string [ 5 .. 20 ] characters ^[А-ЯA-Z]{2,3}-\d{3,5}$

Инвентарный номер актива (БС-001, КОМ-12345)

name
required
string [ 2 .. 200 ] characters

Наименование актива

assetClassId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID класса актива

currentObjectId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID объекта размещения

responsibleMechanicId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID ответственного механика

commissionedAt
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Дата ввода в эксплуатацию (не в будущем, EAM-INV-07)

required
object (CreateAssetDtoAssetPassportInput)

Паспортные данные при создании актива

Responses

Request samples

Content type
application/json
{
  • "inventoryNumber": "БС-001",
  • "name": "Atlas Copco DM45 №1",
  • "assetClassId": "22222222-2222-4222-8222-222222222222",
  • "currentObjectId": "33333333-3333-4333-8333-333333333333",
  • "responsibleMechanicId": "44444444-4444-4444-8444-444444444444",
  • "commissionedAt": "2026-05-18",
  • "passport": {
    }
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "inventoryNumber": "БС-001",
  • "name": "Atlas Copco DM45 №1",
  • "assetClassId": "22222222-2222-4222-8222-222222222222",
  • "currentObjectId": "33333333-3333-4333-8333-333333333333",
  • "responsibleMechanicId": "44444444-4444-4444-8444-444444444444",
  • "status": "operational",
  • "commissionedAt": "2026-05-18T08:00:00.000Z",
  • "passport": {
    }
}

Дерево реестра активов (объект → класс → единица)

Серверная агрегация для иерархического вида (ADR-0059). Объекты без активов не возвращаются. Object-scope как у списка: scoped-роли видят только свои объекты. Фильтры: objectId, status. Роли: CEO, Engineer, Foreman, Mechanic, Admin.

Authorizations:
beareroauth2
query Parameters
objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по производственному объекту

status
string
Enum: "operational" "maintenance" "conserved" "decommissioned"
Example: status=operational

Фильтр по статусу FSM

Responses

Response samples

Content type
application/json
{
  • "objects": [
    ],
  • "totals": {
    }
}

Получить актив по id

Возвращает актив с паспортом. Object scope по id.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID актива

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "inventoryNumber": "БС-001",
  • "name": "Atlas Copco DM45 №1",
  • "assetClassId": "22222222-2222-4222-8222-222222222222",
  • "currentObjectId": "33333333-3333-4333-8333-333333333333",
  • "responsibleMechanicId": "44444444-4444-4444-8444-444444444444",
  • "status": "operational",
  • "commissionedAt": "2026-05-18T08:00:00.000Z",
  • "passport": {
    }
}

Редактировать паспорт актива

Паспортная табличка, типизированные характеристики (по классу) и гарантия. Частичное обновление (PATCH). Idempotent. Object scope по id. Роли: Mechanic, Engineer, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID актива

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
string or null
string or null
integer or null
string or null
object
string or null
integer or null
string or null

Responses

Request samples

Content type
application/json
{
  • "manufacturer": "Kaishan",
  • "model": "KG 920B",
  • "productionYear": 2022,
  • "techPassportNumber": "ТП-2022-077",
  • "specifications": {
    },
  • "warrantyUntil": "2027-12-31",
  • "warrantyMonths": 24,
  • "warrantyTermsText": "Гарантия 24 мес. или 2000 моточасов"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "inventoryNumber": "БС-001",
  • "name": "Atlas Copco DM45 №1",
  • "assetClassId": "22222222-2222-4222-8222-222222222222",
  • "currentObjectId": "33333333-3333-4333-8333-333333333333",
  • "responsibleMechanicId": "44444444-4444-4444-8444-444444444444",
  • "status": "operational",
  • "commissionedAt": "2026-05-18T08:00:00.000Z",
  • "passport": {
    }
}

Статус ТО по наработке

Остаток до ТО (моточасы/дни), средняя суточная наработка за 30 дней и статус (Норма/Критично/Просрочено/Нет данных). Object scope по id. Роли: Engineer, Mechanic, Foreman, CEO, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID актива

Responses

Response samples

Content type
application/json
{
  • "status": "normal",
  • "metric": "motohours",
  • "currentMeter": 12500,
  • "avgDailyRate": 18.5,
  • "nextDue": {
    },
  • "perNorm": [
    ]
}

Помесячная проходка станка

Σ пробуренных п/м по месяцам (из утверждённых сменных рапортов). Для буровых станков; у прочих классов пусто. Object scope по id. Роли: Engineer, Mechanic, Foreman, CEO, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID актива

query Parameters
from
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: from=2026-01-01

Начало периода (ISO 8601, включительно); опционально

to
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: to=2026-06-30

Конец периода (ISO 8601, включительно); опционально

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "totalMeters": 3471
}

Внести показание счётчика

Ручной ввод показания (моточасы/пробег) с датой замера; автор фиксируется. Idempotent. Object scope по id. Роли: Mechanic, Foreman, Engineer, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID актива

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
value
required
number ( 0 .. 100000000 ]

Показание счётчика (моточасы / пробег, км)

measuredAt
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Дата замера (ISO YYYY-MM-DD, не в будущем)

Responses

Request samples

Content type
application/json
{
  • "value": 12500,
  • "measuredAt": "2026-05-18"
}

Response samples

Content type
application/json
{
  • "status": "normal",
  • "metric": "motohours",
  • "currentMeter": 12500,
  • "avgDailyRate": 18.5,
  • "nextDue": {
    },
  • "perNorm": [
    ]
}

Переместить актив на другой объект

FSM: operational → operational на другом объекте. Idempotent. Роли: Mechanic, Engineer, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID актива

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
toObjectId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID целевого производственного объекта

reason
string <= 1000 characters

Комментарий к операции (до 1000 символов)

Responses

Request samples

Content type
application/json
{
  • "toObjectId": "33333333-3333-4333-8333-333333333333",
  • "reason": "Перемещение на участок Борлы"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "inventoryNumber": "БС-001",
  • "name": "Atlas Copco DM45 №1",
  • "assetClassId": "22222222-2222-4222-8222-222222222222",
  • "currentObjectId": "33333333-3333-4333-8333-333333333333",
  • "responsibleMechanicId": "44444444-4444-4444-8444-444444444444",
  • "status": "operational",
  • "commissionedAt": "2026-05-18T08:00:00.000Z",
  • "passport": {
    }
}

Отправить актив в ТО

FSM: operational → maintenance. Idempotent. Роли: Mechanic, Engineer, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID актива

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
required
string [ 2 .. 500 ] characters

Причина отправки в ТО

Responses

Request samples

Content type
application/json
{
  • "reason": "Плановое ТО по моточасам"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "inventoryNumber": "БС-001",
  • "name": "Atlas Copco DM45 №1",
  • "assetClassId": "22222222-2222-4222-8222-222222222222",
  • "currentObjectId": "33333333-3333-4333-8333-333333333333",
  • "responsibleMechanicId": "44444444-4444-4444-8444-444444444444",
  • "status": "operational",
  • "commissionedAt": "2026-05-18T08:00:00.000Z",
  • "passport": {
    }
}

Законсервировать актив

FSM: operational → conserved. Idempotent. Роли: Engineer, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID актива

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
required
string [ 2 .. 500 ] characters

Причина консервации актива

Responses

Request samples

Content type
application/json
{
  • "reason": "Сезонная консервация"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "inventoryNumber": "БС-001",
  • "name": "Atlas Copco DM45 №1",
  • "assetClassId": "22222222-2222-4222-8222-222222222222",
  • "currentObjectId": "33333333-3333-4333-8333-333333333333",
  • "responsibleMechanicId": "44444444-4444-4444-8444-444444444444",
  • "status": "operational",
  • "commissionedAt": "2026-05-18T08:00:00.000Z",
  • "passport": {
    }
}

Расконсервировать актив

FSM: conserved → operational. Idempotent. Роли: Engineer, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID актива

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
object (Reactivate asset request)

Расконсервация актива (conserved → operational). Тело запроса не требуется ({}).

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "inventoryNumber": "БС-001",
  • "name": "Atlas Copco DM45 №1",
  • "assetClassId": "22222222-2222-4222-8222-222222222222",
  • "currentObjectId": "33333333-3333-4333-8333-333333333333",
  • "responsibleMechanicId": "44444444-4444-4444-8444-444444444444",
  • "status": "operational",
  • "commissionedAt": "2026-05-18T08:00:00.000Z",
  • "passport": {
    }
}

Вернуть актив из ТО

FSM: maintenance → operational. Закрывает открытую запись ТО реактивно. Idempotent. Роли: Mechanic, Engineer, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID актива

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
object (Complete maintenance (asset) request)

Возврат актива из ТО (maintenance → operational). Закрывает открытую запись MaintenanceRecord реактивно. Тело запроса не требуется ({}).

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "inventoryNumber": "БС-001",
  • "name": "Atlas Copco DM45 №1",
  • "assetClassId": "22222222-2222-4222-8222-222222222222",
  • "currentObjectId": "33333333-3333-4333-8333-333333333333",
  • "responsibleMechanicId": "44444444-4444-4444-8444-444444444444",
  • "status": "operational",
  • "commissionedAt": "2026-05-18T08:00:00.000Z",
  • "passport": {
    }
}

Списать актив (требует двойного согласования)

FSM → decommissioned. Требует coApprovedBy (CEO/Engineer). Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID актива

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
required
string or "" (string)

UUID второго согласующего (CEO/Engineer); пустая строка → 422

reason
required
string [ 5 .. 1000 ] characters

Обоснование списания

Responses

Request samples

Content type
application/json
{
  • "reason": "Списание по износу",
  • "coApprovedBy": "44444444-4444-4444-8444-444444444444"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "inventoryNumber": "БС-001",
  • "name": "Atlas Copco DM45 №1",
  • "assetClassId": "22222222-2222-4222-8222-222222222222",
  • "currentObjectId": "33333333-3333-4333-8333-333333333333",
  • "responsibleMechanicId": "44444444-4444-4444-8444-444444444444",
  • "status": "operational",
  • "commissionedAt": "2026-05-18T08:00:00.000Z",
  • "passport": {
    }
}

Узлы/агрегаты актива

Список узлов с состоянием. Object scope по id актива. Роли: Engineer, Mechanic, Foreman, CEO, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID актива

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Добавить узел/агрегат

Idempotent. Object scope по id актива. Роли: Mechanic, Engineer, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID актива

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
name
required
string [ 1 .. 200 ] characters

Наименование узла

kind
required
string [ 1 .. 100 ] characters

Тип узла (код)

state
string
Enum: "ok" "worn" "needs_repair" "replaced"

Состояние (по умолчанию ok)

installedAt
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Дата установки (ISO 8601); опционально

warrantyUntil
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Гарантия на узел до (ISO 8601); опционально

note
string <= 2000 characters

Примечание; опционально

Responses

Request samples

Content type
application/json
{
  • "name": "Двигатель",
  • "kind": "engine",
  • "state": "ok",
  • "installedAt": "2024-01-15",
  • "warrantyUntil": "2026-01-15",
  • "note": "string"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "assetId": "22222222-2222-4222-8222-222222222222",
  • "name": "Двигатель",
  • "kind": "engine",
  • "state": "ok",
  • "installedAt": "2024-01-15",
  • "warrantyUntil": "2026-01-15",
  • "note": null
}

Обновить узел/агрегат (в т.ч. смена состояния)

Частичное обновление. Idempotent. Object scope по id актива. Роли: Mechanic, Engineer, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID актива

componentId
required
string <uuid>

UUID узла

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
name
string [ 1 .. 200 ] characters
kind
string [ 1 .. 100 ] characters
state
string
Enum: "ok" "worn" "needs_repair" "replaced"
string or null
string or null
string or null

Responses

Request samples

Content type
application/json
{
  • "state": "needs_repair",
  • "note": "Повышенный шум, требуется диагностика"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "assetId": "22222222-2222-4222-8222-222222222222",
  • "name": "Двигатель",
  • "kind": "engine",
  • "state": "ok",
  • "installedAt": "2024-01-15",
  • "warrantyUntil": "2026-01-15",
  • "note": null
}

Удалить узел/агрегат

Мягкое удаление. Object scope по id актива. Роли: Mechanic, Engineer, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID актива

componentId
required
string <uuid>

UUID узла

Responses

Response samples

Content type
application/json
{
  • "title": "Asset already decommissioned",
  • "status": 409,
  • "code": "ASSET_ALREADY_DECOMMISSIONED",
  • "instance": "/api/v1/eam/assets/11111111-1111-4111-8111-111111111111"
}

EAM / Maintenance

Техобслуживание и ремонты активов

Список ТО с фильтрами и пагинацией

Курсорная пагинация. Фильтрация по assetId и status. Роли: Engineer, Mechanic, Foreman, CEO.

Authorizations:
beareroauth2
query Parameters
assetId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: assetId=11111111-1111-4111-8111-111111111111

Фильтр по UUID актива

status
string
Enum: "scheduled" "inProgress" "completed" "cancelled"
Example: status=scheduled

Фильтр по статусу FSM ТО

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: cursor=11111111-1111-4111-8111-111111111111

UUID последнего элемента предыдущей страницы

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": null
}

Запланировать ТО

Создание записи ТО в статусе scheduled. Idempotent. Роли: Mechanic, Engineer, CEO.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
assetId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID актива для планового ТО

scheduledAt
required
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Плановая дата и время ТО (ISO 8601, не в прошлом)

reason
required
string [ 2 .. 500 ] characters

Причина / описание планового ТО

kind
string
Default: "planned_to"
Enum: "planned_to" "unplanned_repair"

Вид записи: плановое ТО по регламенту или внеплановый ремонт (ADR-0070)

normCode
string [ 1 .. 32 ] characters

Код интервала регламента (MaintenanceNorm), например «ТО-250». Для планового ТО

Responses

Request samples

Content type
application/json
{
  • "assetId": "22222222-2222-4222-8222-222222222222",
  • "scheduledAt": "2026-05-18T08:00:00.000Z",
  • "reason": "Плановое ТО по моточасам",
  • "kind": "planned_to",
  • "normCode": "ТО-250"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "assetId": "22222222-2222-4222-8222-222222222222",
  • "status": "scheduled",
  • "scheduledAt": "2026-05-18T08:00:00.000Z",
  • "startedAt": null,
  • "completedAt": null,
  • "cancelledAt": null,
  • "cancelledBy": null,
  • "cancellationReason": null,
  • "reason": "Плановое ТО по моточасам",
  • "performedBy": "44444444-4444-4444-8444-444444444444",
  • "kind": "planned_to",
  • "normCode": "ТО-250",
  • "meterAtScheduled": 12500,
  • "meterAtCompleted": null
}

Получить ТО по id

Возвращает запись ТО. Object scope по id.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи ТО

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "assetId": "22222222-2222-4222-8222-222222222222",
  • "status": "scheduled",
  • "scheduledAt": "2026-05-18T08:00:00.000Z",
  • "startedAt": null,
  • "completedAt": null,
  • "cancelledAt": null,
  • "cancelledBy": null,
  • "cancellationReason": null,
  • "reason": "Плановое ТО по моточасам",
  • "performedBy": "44444444-4444-4444-8444-444444444444",
  • "kind": "planned_to",
  • "normCode": "ТО-250",
  • "meterAtScheduled": 12500,
  • "meterAtCompleted": null
}

Начать ТО

FSM: scheduled → inProgress. Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи ТО

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
object (Start maintenance request)

Начало ТО (пустое тело; идемпотентность по Idempotency-Key)

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "assetId": "22222222-2222-4222-8222-222222222222",
  • "status": "scheduled",
  • "scheduledAt": "2026-05-18T08:00:00.000Z",
  • "startedAt": null,
  • "completedAt": null,
  • "cancelledAt": null,
  • "cancelledBy": null,
  • "cancellationReason": null,
  • "reason": "Плановое ТО по моточасам",
  • "performedBy": "44444444-4444-4444-8444-444444444444",
  • "kind": "planned_to",
  • "normCode": "ТО-250",
  • "meterAtScheduled": 12500,
  • "meterAtCompleted": null
}

Завершить ТО

FSM: inProgress → completed. Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи ТО

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
notes
string <= 2000 characters

Заметки по завершённому ТО (до 2000 символов)

Responses

Request samples

Content type
application/json
{
  • "notes": "Замена масла и фильтров выполнена"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "assetId": "22222222-2222-4222-8222-222222222222",
  • "status": "scheduled",
  • "scheduledAt": "2026-05-18T08:00:00.000Z",
  • "startedAt": null,
  • "completedAt": null,
  • "cancelledAt": null,
  • "cancelledBy": null,
  • "cancellationReason": null,
  • "reason": "Плановое ТО по моточасам",
  • "performedBy": "44444444-4444-4444-8444-444444444444",
  • "kind": "planned_to",
  • "normCode": "ТО-250",
  • "meterAtScheduled": 12500,
  • "meterAtCompleted": null
}

Отменить ТО

Отмена из scheduled или inProgress. Idempotent. Роли: Engineer, CEO.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи ТО

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
required
string [ 2 .. 500 ] characters

Причина отмены ТО

Responses

Request samples

Content type
application/json
{
  • "reason": "Актив списан — ТО не требуется"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "assetId": "22222222-2222-4222-8222-222222222222",
  • "status": "scheduled",
  • "scheduledAt": "2026-05-18T08:00:00.000Z",
  • "startedAt": null,
  • "completedAt": null,
  • "cancelledAt": null,
  • "cancelledBy": null,
  • "cancellationReason": null,
  • "reason": "Плановое ТО по моточасам",
  • "performedBy": "44444444-4444-4444-8444-444444444444",
  • "kind": "planned_to",
  • "normCode": "ТО-250",
  • "meterAtScheduled": 12500,
  • "meterAtCompleted": null
}

EAM / Movements

Перемещения активов между объектами

Журнал перемещений с фильтрами

Курсорная пагинация. Фильтры: assetId, objectId, op, status, dateFrom/dateTo. Роли: CEO, Engineer, Foreman (object), Mechanic (object/all), Admin.

Authorizations:
beareroauth2
query Parameters
assetId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: assetId=11111111-1111-4111-8111-111111111111

Фильтр по UUID актива

objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по from/to productionObjectId

op
string
Enum: "conservation" "from_conservation" "transfer_audit"
Example: op=conservation

Фильтр по типу операции

status
string
Enum: "draft" "applied"
Example: status=applied

Фильтр по статусу FSM

dateFrom
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Нижняя граница opDate (ISO 8601)

dateTo
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Верхняя граница opDate (ISO 8601)

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: cursor=11111111-1111-4111-8111-111111111111

UUID последнего элемента предыдущей страницы

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": null
}

Получить запись movement по id

Object scope через asset.currentObjectId.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи movement

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "assetId": "22222222-2222-4222-8222-222222222222",
  • "op": "conservation",
  • "status": "applied",
  • "fromObjectId": null,
  • "toObjectId": null,
  • "opDate": "2026-05-18T08:00:00.000Z",
  • "responsibleId": "44444444-4444-4444-8444-444444444444",
  • "reason": "Сезонная консервация — нерабочий период",
  • "relatedMaintenanceId": null,
  • "sourceEventId": null,
  • "appliedAt": "2026-05-18T08:00:00.000Z",
  • "failureReason": null,
  • "cancelledAt": null,
  • "cancelledBy": null,
  • "createdAt": "2026-05-18T08:00:00.000Z"
}

EAM / Sagas

Саги домена EAM (декомиссия, миграция)

Запустить сагу декомиссии актива

Reference-сага из 2 шагов с компенсацией. Возвращает sagaId — для опроса используйте GET /sagas/:sagaId/status. Idempotent. Роли: Engineer, CEO.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
assetId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID актива для декомиссии

coApprovedBy
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID второго согласующего (CEO/Engineer)

reason
required
string [ 3 .. 500 ] characters

Обоснование списания актива

Responses

Request samples

Content type
application/json
{
  • "assetId": "11111111-1111-4111-8111-111111111111",
  • "coApprovedBy": "44444444-4444-4444-8444-444444444444",
  • "reason": "Списание по износу"
}

Response samples

Content type
application/json
{
  • "sagaId": "22222222-2222-4222-8222-222222222222",
  • "status": "enqueued"
}

EAM / refs / asset-classes

Справочник классов активов

Список справочника asset-classes

Возвращает записи справочника asset classes. Параметр activeOnly=true исключает неактивные записи. Роли: CEO, Engineer, Foreman, Mechanic, OtibSpecialist, Supply, Admin.

Authorizations:
beareroauth2
query Parameters
activeOnly
boolean

Передай true чтобы получить только активные записи (без soft-deleted/expired)

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Карточка записи asset-classes по id

Возвращает одну запись справочника asset classes по UUID. Роли: CEO, Engineer, Foreman, Mechanic, OtibSpecialist, Supply, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи справочника asset-classes

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "code": "DRILL",
  • "name": "Буровая установка",
  • "active": true,
  • "createdAt": "2026-05-18T08:00:00.000Z"
}

Обновить запись asset-classes

Частичное обновление записи справочника asset classes. Роли: Admin, CEO. Допустимые поля задаёт updateSchema модуля-владельца. Идемпотентно: требуется заголовок Idempotency-Key (повтор с тем же ключом возвращает сохранённый ответ).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи справочника asset-classes

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "name": "Новое наименование",
  • "active": true
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "code": "DRILL",
  • "name": "Буровая установка",
  • "active": true,
  • "createdAt": "2026-05-18T08:00:00.000Z"
}

Preview bulk-import: eam/asset-classes

Валидирует строки импорта и возвращает diff (создание/обновление/деактивация) без записи в БД. Роли: Admin, CEO.

Authorizations:
beareroauth2
Request Body schema: application/json
required
required
Array of objects <= 10000 items

Строки импорта (поля зависят от справочника)

mode
string
Enum: "merge" "full_replace"

Режим импорта: merge — upsert по бизнес-ключу; full_replace — деактивация отсутствующих строк

Responses

Request samples

Content type
application/json
{
  • "rows": [
    ],
  • "mode": "merge"
}

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "module": "hr",
  • "entity": "positions",
  • "mode": "merge",
  • "totalRows": 1,
  • "diff": {
    },
  • "expiresAt": "2026-05-18T08:00:00.000Z"
}

Commit bulk-import: eam/asset-classes

Применяет ранее провалидированный batch из preview. Требует Idempotency-Key. Роли: Admin, CEO.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
batchId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID batch'а, полученный из ответа preview

Responses

Request samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222"
}

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "status": "committed",
  • "applied": {
    },
  • "eventId": "evt-import-001"
}

Commit bulk-import по batchId в URL: eam/asset-classes

Альтернатива commit с batchId в path вместо body. Требует Idempotency-Key. Роли: Admin, CEO.

Authorizations:
beareroauth2
path Parameters
batchId
required
string <uuid>

UUID batch'а, полученный из preview

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "status": "committed",
  • "applied": {
    },
  • "eventId": "evt-import-001"
}

EAM / refs / fuel-consumption-norms

Нормы расхода ДТ по активам

Preview bulk-import: eam/fuel-consumption-norms

Валидирует строки импорта и возвращает diff (создание/обновление/деактивация) без записи в БД. Роли: Admin, CEO, Mechanic.

Authorizations:
beareroauth2
Request Body schema: application/json
required
required
Array of objects <= 10000 items

Строки импорта (поля зависят от справочника)

mode
string
Enum: "merge" "full_replace"

Режим импорта: merge — upsert по бизнес-ключу; full_replace — деактивация отсутствующих строк

Responses

Request samples

Content type
application/json
{
  • "rows": [
    ],
  • "mode": "merge"
}

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "module": "hr",
  • "entity": "positions",
  • "mode": "merge",
  • "totalRows": 1,
  • "diff": {
    },
  • "expiresAt": "2026-05-18T08:00:00.000Z"
}

Commit bulk-import: eam/fuel-consumption-norms

Применяет ранее провалидированный batch из preview. Требует Idempotency-Key. Роли: Admin, CEO, Mechanic.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
batchId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID batch'а, полученный из ответа preview

Responses

Request samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222"
}

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "status": "committed",
  • "applied": {
    },
  • "eventId": "evt-import-001"
}

Commit bulk-import по batchId в URL: eam/fuel-consumption-norms

Альтернатива commit с batchId в path вместо body. Требует Idempotency-Key. Роли: Admin, CEO, Mechanic.

Authorizations:
beareroauth2
path Parameters
batchId
required
string <uuid>

UUID batch'а, полученный из preview

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "status": "committed",
  • "applied": {
    },
  • "eventId": "evt-import-001"
}

Список нормативов расхода ГСМ

По умолчанию — активные «сейчас». Передай asOf (ISO datetime) для point-in-time, includeHistory=true для всех версий.

Authorizations:
beareroauth2
query Parameters
assetClassCode
string non-empty
Example: assetClassCode=DRILL

Фильтр по коду класса актива

norm
string non-empty
Example: norm=engine-oil-500h

Фильтр по коду норматива

asOf
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: asOf=2026-05-18T08:00:00.000Z

Точка во времени для temporal-выборки

includeHistory
boolean
Example: includeHistory=false

Включить исторические (неактивные) записи

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Карточка норматива расхода ГСМ по id

Возвращает одну запись норматива расхода ГСМ по UUID.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID норматива расхода ГСМ

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "assetClassCode": "DRILL",
  • "norm": "engine-oil-500h",
  • "value": 500,
  • "unit": "hours",
  • "validFrom": "2026-01-01T00:00:00.000Z",
  • "validTo": null,
  • "createdAt": "2026-01-01T00:00:00.000Z"
}

EAM / refs / maintenance-norms

Нормы ТО по типам активов

Preview bulk-import: eam/maintenance-norms

Валидирует строки импорта и возвращает diff (создание/обновление/деактивация) без записи в БД. Роли: Admin, CEO, Mechanic.

Authorizations:
beareroauth2
Request Body schema: application/json
required
required
Array of objects <= 10000 items

Строки импорта (поля зависят от справочника)

mode
string
Enum: "merge" "full_replace"

Режим импорта: merge — upsert по бизнес-ключу; full_replace — деактивация отсутствующих строк

Responses

Request samples

Content type
application/json
{
  • "rows": [
    ],
  • "mode": "merge"
}

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "module": "hr",
  • "entity": "positions",
  • "mode": "merge",
  • "totalRows": 1,
  • "diff": {
    },
  • "expiresAt": "2026-05-18T08:00:00.000Z"
}

Commit bulk-import: eam/maintenance-norms

Применяет ранее провалидированный batch из preview. Требует Idempotency-Key. Роли: Admin, CEO, Mechanic.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
batchId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID batch'а, полученный из ответа preview

Responses

Request samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222"
}

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "status": "committed",
  • "applied": {
    },
  • "eventId": "evt-import-001"
}

Commit bulk-import по batchId в URL: eam/maintenance-norms

Альтернатива commit с batchId в path вместо body. Требует Idempotency-Key. Роли: Admin, CEO, Mechanic.

Authorizations:
beareroauth2
path Parameters
batchId
required
string <uuid>

UUID batch'а, полученный из preview

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "status": "committed",
  • "applied": {
    },
  • "eventId": "evt-import-001"
}

Список нормативов ТО

По умолчанию — активные «сейчас». Передай asOf (ISO datetime) для point-in-time, includeHistory=true для всех версий.

Authorizations:
beareroauth2
query Parameters
assetClassCode
string non-empty
Example: assetClassCode=DRILL

Фильтр по коду класса актива

norm
string non-empty
Example: norm=engine-oil-500h

Фильтр по коду норматива

asOf
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: asOf=2026-05-18T08:00:00.000Z

Точка во времени для temporal-выборки

includeHistory
boolean
Example: includeHistory=false

Включить исторические (неактивные) записи

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Карточка норматива ТО по id

Возвращает одну запись норматива ТО по UUID.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID норматива ТО

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "assetClassCode": "DRILL",
  • "norm": "engine-oil-500h",
  • "value": 500,
  • "unit": "hours",
  • "validFrom": "2026-01-01T00:00:00.000Z",
  • "validTo": null,
  • "createdAt": "2026-01-01T00:00:00.000Z"
}

Core / refs / production-objects

Справочник production objects

Список справочника production-objects

Возвращает записи справочника production objects. Параметр activeOnly=true исключает неактивные записи. Роли: CEO, Engineer, Foreman, Mechanic, OtibSpecialist, Supply, Admin.

Authorizations:
beareroauth2
query Parameters
activeOnly
boolean

Передай true чтобы получить только активные записи (без soft-deleted/expired)

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Создать запись production-objects

Создаёт новую запись справочника production objects. Роли: Admin, CEO. Поля задаёт createSchema модуля-владельца. Идемпотентно: требуется заголовок Idempotency-Key (повтор с тем же ключом возвращает сохранённый ответ).

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "code": "MECH",
  • "name": "Механик",
  • "active": true
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "code": "BORLY",
  • "name": "Участок Борлы",
  • "region": "Караганда",
  • "active": true,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Карточка записи production-objects по id

Возвращает одну запись справочника production objects по UUID. Роли: CEO, Engineer, Foreman, Mechanic, OtibSpecialist, Supply, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи справочника production-objects

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "code": "BORLY",
  • "name": "Участок Борлы",
  • "region": "Караганда",
  • "active": true,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Обновить запись production-objects

Частичное обновление записи справочника production objects. Роли: Admin, CEO. Допустимые поля задаёт updateSchema модуля-владельца. Идемпотентно: требуется заголовок Idempotency-Key (повтор с тем же ключом возвращает сохранённый ответ).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи справочника production-objects

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "name": "Новое наименование",
  • "active": true
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "code": "BORLY",
  • "name": "Участок Борлы",
  • "region": "Караганда",
  • "active": true,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Preview bulk-import: core/production-objects

Валидирует строки импорта и возвращает diff (создание/обновление/деактивация) без записи в БД. Роли: Admin, CEO.

Authorizations:
beareroauth2
Request Body schema: application/json
required
required
Array of objects <= 10000 items

Строки импорта (поля зависят от справочника)

mode
string
Enum: "merge" "full_replace"

Режим импорта: merge — upsert по бизнес-ключу; full_replace — деактивация отсутствующих строк

Responses

Request samples

Content type
application/json
{
  • "rows": [
    ],
  • "mode": "merge"
}

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "module": "hr",
  • "entity": "positions",
  • "mode": "merge",
  • "totalRows": 1,
  • "diff": {
    },
  • "expiresAt": "2026-05-18T08:00:00.000Z"
}

Commit bulk-import: core/production-objects

Применяет ранее провалидированный batch из preview. Требует Idempotency-Key. Роли: Admin, CEO.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
batchId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID batch'а, полученный из ответа preview

Responses

Request samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222"
}

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "status": "committed",
  • "applied": {
    },
  • "eventId": "evt-import-001"
}

Commit bulk-import по batchId в URL: core/production-objects

Альтернатива commit с batchId в path вместо body. Требует Idempotency-Key. Роли: Admin, CEO.

Authorizations:
beareroauth2
path Parameters
batchId
required
string <uuid>

UUID batch'а, полученный из preview

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "status": "committed",
  • "applied": {
    },
  • "eventId": "evt-import-001"
}

Core / refs / tmc-categories

Категории ТМЦ

Список справочника tmc-categories

Возвращает записи справочника tmc categories. Параметр activeOnly=true исключает неактивные записи. Роли: CEO, Engineer, Foreman, Mechanic, OtibSpecialist, Supply, Admin.

Authorizations:
beareroauth2
query Parameters
activeOnly
boolean

Передай true чтобы получить только активные записи (без soft-deleted/expired)

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Карточка записи tmc-categories по id

Возвращает одну запись справочника tmc categories по UUID. Роли: CEO, Engineer, Foreman, Mechanic, OtibSpecialist, Supply, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи справочника tmc-categories

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "code": "FUEL",
  • "name": "ГСМ",
  • "parentId": null,
  • "createdAt": "2026-05-18T08:00:00.000Z"
}

Обновить запись tmc-categories

Частичное обновление записи справочника tmc categories. Роли: Admin, CEO, Supply. Допустимые поля задаёт updateSchema модуля-владельца. Идемпотентно: требуется заголовок Idempotency-Key (повтор с тем же ключом возвращает сохранённый ответ).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи справочника tmc-categories

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "name": "Новое наименование",
  • "active": true
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "code": "FUEL",
  • "name": "ГСМ",
  • "parentId": null,
  • "createdAt": "2026-05-18T08:00:00.000Z"
}

Preview bulk-import: core/tmc-categories

Валидирует строки импорта и возвращает diff (создание/обновление/деактивация) без записи в БД. Роли: Admin, CEO, Supply.

Authorizations:
beareroauth2
Request Body schema: application/json
required
required
Array of objects <= 10000 items

Строки импорта (поля зависят от справочника)

mode
string
Enum: "merge" "full_replace"

Режим импорта: merge — upsert по бизнес-ключу; full_replace — деактивация отсутствующих строк

Responses

Request samples

Content type
application/json
{
  • "rows": [
    ],
  • "mode": "merge"
}

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "module": "hr",
  • "entity": "positions",
  • "mode": "merge",
  • "totalRows": 1,
  • "diff": {
    },
  • "expiresAt": "2026-05-18T08:00:00.000Z"
}

Commit bulk-import: core/tmc-categories

Применяет ранее провалидированный batch из preview. Требует Idempotency-Key. Роли: Admin, CEO, Supply.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
batchId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID batch'а, полученный из ответа preview

Responses

Request samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222"
}

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "status": "committed",
  • "applied": {
    },
  • "eventId": "evt-import-001"
}

Commit bulk-import по batchId в URL: core/tmc-categories

Альтернатива commit с batchId в path вместо body. Требует Idempotency-Key. Роли: Admin, CEO, Supply.

Authorizations:
beareroauth2
path Parameters
batchId
required
string <uuid>

UUID batch'а, полученный из preview

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "status": "committed",
  • "applied": {
    },
  • "eventId": "evt-import-001"
}

Core / refs / downtime-categories

Категории простоев

Список справочника downtime-categories

Возвращает записи справочника downtime categories. Параметр activeOnly=true исключает неактивные записи. Роли: CEO, Engineer, Foreman, Mechanic, OtibSpecialist, Supply, Admin.

Authorizations:
beareroauth2
query Parameters
activeOnly
boolean

Передай true чтобы получить только активные записи (без soft-deleted/expired)

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Карточка записи downtime-categories по id

Возвращает одну запись справочника downtime categories по UUID. Роли: CEO, Engineer, Foreman, Mechanic, OtibSpecialist, Supply, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи справочника downtime-categories

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "code": "PLAN-TO",
  • "name": "Плановое ТО",
  • "group": "planned",
  • "parentId": null,
  • "createdAt": "2026-05-18T08:00:00.000Z"
}

Обновить запись downtime-categories

Частичное обновление записи справочника downtime categories. Роли: Admin, CEO. Допустимые поля задаёт updateSchema модуля-владельца. Идемпотентно: требуется заголовок Idempotency-Key (повтор с тем же ключом возвращает сохранённый ответ).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи справочника downtime-categories

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "name": "Новое наименование",
  • "active": true
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "code": "PLAN-TO",
  • "name": "Плановое ТО",
  • "group": "planned",
  • "parentId": null,
  • "createdAt": "2026-05-18T08:00:00.000Z"
}

Preview bulk-import: core/downtime-categories

Валидирует строки импорта и возвращает diff (создание/обновление/деактивация) без записи в БД. Роли: Admin, CEO.

Authorizations:
beareroauth2
Request Body schema: application/json
required
required
Array of objects <= 10000 items

Строки импорта (поля зависят от справочника)

mode
string
Enum: "merge" "full_replace"

Режим импорта: merge — upsert по бизнес-ключу; full_replace — деактивация отсутствующих строк

Responses

Request samples

Content type
application/json
{
  • "rows": [
    ],
  • "mode": "merge"
}

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "module": "hr",
  • "entity": "positions",
  • "mode": "merge",
  • "totalRows": 1,
  • "diff": {
    },
  • "expiresAt": "2026-05-18T08:00:00.000Z"
}

Commit bulk-import: core/downtime-categories

Применяет ранее провалидированный batch из preview. Требует Idempotency-Key. Роли: Admin, CEO.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
batchId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID batch'а, полученный из ответа preview

Responses

Request samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222"
}

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "status": "committed",
  • "applied": {
    },
  • "eventId": "evt-import-001"
}

Commit bulk-import по batchId в URL: core/downtime-categories

Альтернатива commit с batchId в path вместо body. Требует Idempotency-Key. Роли: Admin, CEO.

Authorizations:
beareroauth2
path Parameters
batchId
required
string <uuid>

UUID batch'а, полученный из preview

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "status": "committed",
  • "applied": {
    },
  • "eventId": "evt-import-001"
}

Core / refs / hse-incident-classifiers

Классификаторы HSE-инцидентов

Список справочника hse-incident-classifiers

Возвращает записи справочника hse incident classifiers. Параметр activeOnly=true исключает неактивные записи. Роли: CEO, Engineer, Foreman, Mechanic, OtibSpecialist, Supply, Admin.

Authorizations:
beareroauth2
query Parameters
activeOnly
boolean

Передай true чтобы получить только активные записи (без soft-deleted/expired)

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Карточка записи hse-incident-classifiers по id

Возвращает одну запись справочника hse incident classifiers по UUID. Роли: CEO, Engineer, Foreman, Mechanic, OtibSpecialist, Supply, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи справочника hse-incident-classifiers

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "code": "NEAR-MISS",
  • "group": "safety",
  • "severity": "low",
  • "name": "Почти инцидент",
  • "createdAt": "2026-05-18T08:00:00.000Z"
}

Обновить запись hse-incident-classifiers

Частичное обновление записи справочника hse incident classifiers. Роли: Admin, CEO, OtibSpecialist. Допустимые поля задаёт updateSchema модуля-владельца. Идемпотентно: требуется заголовок Idempotency-Key (повтор с тем же ключом возвращает сохранённый ответ).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи справочника hse-incident-classifiers

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "name": "Новое наименование",
  • "active": true
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "code": "NEAR-MISS",
  • "group": "safety",
  • "severity": "low",
  • "name": "Почти инцидент",
  • "createdAt": "2026-05-18T08:00:00.000Z"
}

Preview bulk-import: core/hse-incident-classifiers

Валидирует строки импорта и возвращает diff (создание/обновление/деактивация) без записи в БД. Роли: Admin, CEO, OtibSpecialist.

Authorizations:
beareroauth2
Request Body schema: application/json
required
required
Array of objects <= 10000 items

Строки импорта (поля зависят от справочника)

mode
string
Enum: "merge" "full_replace"

Режим импорта: merge — upsert по бизнес-ключу; full_replace — деактивация отсутствующих строк

Responses

Request samples

Content type
application/json
{
  • "rows": [
    ],
  • "mode": "merge"
}

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "module": "hr",
  • "entity": "positions",
  • "mode": "merge",
  • "totalRows": 1,
  • "diff": {
    },
  • "expiresAt": "2026-05-18T08:00:00.000Z"
}

Commit bulk-import: core/hse-incident-classifiers

Применяет ранее провалидированный batch из preview. Требует Idempotency-Key. Роли: Admin, CEO, OtibSpecialist.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
batchId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID batch'а, полученный из ответа preview

Responses

Request samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222"
}

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "status": "committed",
  • "applied": {
    },
  • "eventId": "evt-import-001"
}

Commit bulk-import по batchId в URL: core/hse-incident-classifiers

Альтернатива commit с batchId в path вместо body. Требует Idempotency-Key. Роли: Admin, CEO, OtibSpecialist.

Authorizations:
beareroauth2
path Parameters
batchId
required
string <uuid>

UUID batch'а, полученный из preview

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "status": "committed",
  • "applied": {
    },
  • "eventId": "evt-import-001"
}

HR / refs / positions

Справочник должностей

Список справочника positions

Возвращает записи справочника positions. Параметр activeOnly=true исключает неактивные записи. Роли: CEO, Engineer, Foreman, Mechanic, OtibSpecialist, Supply, Admin.

Authorizations:
beareroauth2
query Parameters
activeOnly
boolean

Передай true чтобы получить только активные записи (без soft-deleted/expired)

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Создать запись positions

Создаёт новую запись справочника positions. Роли: Admin, CEO. Поля задаёт createSchema модуля-владельца. Идемпотентно: требуется заголовок Idempotency-Key (повтор с тем же ключом возвращает сохранённый ответ).

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "code": "MECH",
  • "name": "Механик",
  • "active": true
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "code": "MECH",
  • "name": "Механик",
  • "active": true,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "systemRoleId": null,
  • "systemRoleCode": "Foreman",
  • "positionGroup": "production"
}

Карточка записи positions по id

Возвращает одну запись справочника positions по UUID. Роли: CEO, Engineer, Foreman, Mechanic, OtibSpecialist, Supply, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи справочника positions

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "code": "MECH",
  • "name": "Механик",
  • "active": true,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "systemRoleId": null,
  • "systemRoleCode": "Foreman",
  • "positionGroup": "production"
}

Обновить запись positions

Частичное обновление записи справочника positions. Роли: Admin, CEO. Допустимые поля задаёт updateSchema модуля-владельца. Идемпотентно: требуется заголовок Idempotency-Key (повтор с тем же ключом возвращает сохранённый ответ).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи справочника positions

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "name": "Новое наименование",
  • "active": true
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "code": "MECH",
  • "name": "Механик",
  • "active": true,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "systemRoleId": null,
  • "systemRoleCode": "Foreman",
  • "positionGroup": "production"
}

Preview bulk-import: hr/positions

Валидирует строки импорта и возвращает diff (создание/обновление/деактивация) без записи в БД. Роли: Admin, CEO.

Authorizations:
beareroauth2
Request Body schema: application/json
required
required
Array of objects <= 10000 items

Строки импорта (поля зависят от справочника)

mode
string
Enum: "merge" "full_replace"

Режим импорта: merge — upsert по бизнес-ключу; full_replace — деактивация отсутствующих строк

Responses

Request samples

Content type
application/json
{
  • "rows": [
    ],
  • "mode": "merge"
}

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "module": "hr",
  • "entity": "positions",
  • "mode": "merge",
  • "totalRows": 1,
  • "diff": {
    },
  • "expiresAt": "2026-05-18T08:00:00.000Z"
}

Commit bulk-import: hr/positions

Применяет ранее провалидированный batch из preview. Требует Idempotency-Key. Роли: Admin, CEO.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
batchId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID batch'а, полученный из ответа preview

Responses

Request samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222"
}

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "status": "committed",
  • "applied": {
    },
  • "eventId": "evt-import-001"
}

Commit bulk-import по batchId в URL: hr/positions

Альтернатива commit с batchId в path вместо body. Требует Idempotency-Key. Роли: Admin, CEO.

Authorizations:
beareroauth2
path Parameters
batchId
required
string <uuid>

UUID batch'а, полученный из preview

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "batchId": "22222222-2222-4222-8222-222222222222",
  • "status": "committed",
  • "applied": {
    },
  • "eventId": "evt-import-001"
}

HR / refs / system-roles

Системные роли (canonical PascalCase)

Список справочника system-roles

Возвращает записи справочника system roles. Параметр activeOnly=true исключает неактивные записи. Роли: CEO, Engineer, Foreman, Mechanic, OtibSpecialist, Supply, Admin.

Authorizations:
beareroauth2
query Parameters
activeOnly
boolean

Передай true чтобы получить только активные записи (без soft-deleted/expired)

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Карточка записи system-roles по id

Возвращает одну запись справочника system roles по UUID. Роли: CEO, Engineer, Foreman, Mechanic, OtibSpecialist, Supply, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи справочника system-roles

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "code": "Mechanic",
  • "name": "Механик",
  • "description": "Обслуживание и ремонт техники на объекте",
  • "permissions": [
    ],
  • "scopeByObject": true,
  • "version": 1,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Обновить запись system-roles

Частичное обновление записи справочника system roles. Роли: Admin. Допустимые поля задаёт updateSchema модуля-владельца. Идемпотентно: требуется заголовок Idempotency-Key (повтор с тем же ключом возвращает сохранённый ответ).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи справочника system-roles

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "name": "Новое наименование",
  • "active": true
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "code": "Mechanic",
  • "name": "Механик",
  • "description": "Обслуживание и ремонт техники на объекте",
  • "permissions": [
    ],
  • "scopeByObject": true,
  • "version": 1,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

SCM / Fuel

Резервуары ДТ, поставки, списания

Резервуары ДТ — список

Курсорная пагинация. Для Foreman / Mechanic — только свой production object (или укажите objectId)

Authorizations:
beareroauth2
query Parameters
objectId
string <uuid> (Uuid) ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
Example: objectId=11111111-1111-4111-8111-111111111111

UUID v4

status
string
Enum: "normal" "attention" "critical"
cursor
string
limit
integer ( 0 .. 200 ]
active
string
Enum: "true" "false"

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "53a4a333-2825-45a4-80d2-5f430d088f36"
}

Создать резервуар

По умолчанию — роль Admin (корпоративный справочник объекта)

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
objectId
required
string <uuid> (CreateFuelTankDtoUuid) ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID v4

code
required
string [ 1 .. 64 ] characters

Уникальный код резервуара в рамках организации

capacityLiters
required
integer ( 0 .. 9007199254740991 ]
minLevelLiters
required
integer [ 0 .. 9007199254740991 ]
initialBalanceLiters
number >= 0

Responses

Request samples

Content type
application/json
{
  • "objectId": "11111111-1111-4111-8111-111111111111",
  • "code": "string",
  • "capacityLiters": 9007199254740991,
  • "minLevelLiters": 9007199254740991,
  • "initialBalanceLiters": 0
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "objectId": "11111111-1111-4111-8111-111111111111",
  • "code": "string",
  • "capacityLiters": 0,
  • "minLevelLiters": 0,
  • "currentBalanceLiters": 0,
  • "active": true,
  • "statusDerived": "normal",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Резервуар по id

Возвращает карточку резервуара. Доступ ограничен ролью и object scope по production object.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "objectId": "11111111-1111-4111-8111-111111111111",
  • "code": "string",
  • "capacityLiters": 0,
  • "minLevelLiters": 0,
  • "currentBalanceLiters": 0,
  • "active": true,
  • "statusDerived": "normal",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Обновить minLevel резервуара

Меняет пороговое значение minLevel, на котором поднимается алерт «low stock». Аудит + idempotency обязательны.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
minLevelLiters
number >= 0

Новый нижний порог контроля, л — не может превышать ёмкость

Responses

Request samples

Content type
application/json
{
  • "minLevelLiters": 0
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "objectId": "11111111-1111-4111-8111-111111111111",
  • "code": "string",
  • "capacityLiters": 0,
  • "minLevelLiters": 0,
  • "currentBalanceLiters": 0,
  • "active": true,
  • "statusDerived": "normal",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Заявки на пополнение — список

Курсорная пагинация заявок на пополнение ДТ. Фильтрация по статусу и production object.

Authorizations:
beareroauth2
query Parameters
tankId
string <uuid> (Uuid) ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
Example: tankId=11111111-1111-4111-8111-111111111111

UUID v4

string or Array of strings
cursor
string
limit
integer ( 0 .. 200 ]

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "53a4a333-2825-45a4-80d2-5f430d088f36"
}

Создать заявку на пополнение

Создаёт заявку в статусе draft. Передача в согласование — отдельный submit.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
tankId
required
string <uuid> (CreateFuelSupplyRequestDtoUuid) ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID v4

requestedVolumeLiters
required
number > 0
desiredDeliveryDate
required
string^\d{4}-\d{2}-\d{2}$
justification
required
string [ 1 .. 2000 ] characters

Responses

Request samples

Content type
application/json
{
  • "tankId": "11111111-1111-4111-8111-111111111111",
  • "requestedVolumeLiters": 0,
  • "desiredDeliveryDate": "string",
  • "justification": "string"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "organizationId": "11111111-1111-4111-8111-111111111111",
  • "tankId": "11111111-1111-4111-8111-111111111111",
  • "requestedVolumeLiters": 0,
  • "desiredDeliveryDate": "2019-08-24",
  • "justification": "string",
  • "status": "draft",
  • "initiatorId": "11111111-1111-4111-8111-111111111111",
  • "submittedAt": "2026-05-18T08:00:00.000Z",
  • "approvedById": "e14877de-475e-46ee-a353-ff17542c6dab",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "rejectedById": "6c20ebb9-9a39-46e5-82e0-45b38ea7cfd3",
  • "rejectedAt": "2026-05-18T08:00:00.000Z",
  • "rejectReason": "string",
  • "fulfilledSupplyId": "bb48ac53-1b89-440a-8a91-66ca9626dfe6",
  • "fulfilledAt": "2026-05-18T08:00:00.000Z",
  • "lastReturnComment": "string",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Заявка по id

Карточка заявки на пополнение со связанными поставками. Доступ ограничен object scope.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "organizationId": "11111111-1111-4111-8111-111111111111",
  • "tankId": "11111111-1111-4111-8111-111111111111",
  • "requestedVolumeLiters": 0,
  • "desiredDeliveryDate": "2019-08-24",
  • "justification": "string",
  • "status": "draft",
  • "initiatorId": "11111111-1111-4111-8111-111111111111",
  • "submittedAt": "2026-05-18T08:00:00.000Z",
  • "approvedById": "e14877de-475e-46ee-a353-ff17542c6dab",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "rejectedById": "6c20ebb9-9a39-46e5-82e0-45b38ea7cfd3",
  • "rejectedAt": "2026-05-18T08:00:00.000Z",
  • "rejectReason": "string",
  • "fulfilledSupplyId": "bb48ac53-1b89-440a-8a91-66ca9626dfe6",
  • "fulfilledAt": "2026-05-18T08:00:00.000Z",
  • "lastReturnComment": "string",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Обновить заявку на пополнение

Правка полей заявки в статусе draft. После submit редактирование запрещено.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
requestedVolumeLiters
number > 0
desiredDeliveryDate
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
justification
string [ 1 .. 2000 ] characters

Responses

Request samples

Content type
application/json
{
  • "requestedVolumeLiters": 0,
  • "desiredDeliveryDate": "2019-08-24",
  • "justification": "string"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "organizationId": "11111111-1111-4111-8111-111111111111",
  • "tankId": "11111111-1111-4111-8111-111111111111",
  • "requestedVolumeLiters": 0,
  • "desiredDeliveryDate": "2019-08-24",
  • "justification": "string",
  • "status": "draft",
  • "initiatorId": "11111111-1111-4111-8111-111111111111",
  • "submittedAt": "2026-05-18T08:00:00.000Z",
  • "approvedById": "e14877de-475e-46ee-a353-ff17542c6dab",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "rejectedById": "6c20ebb9-9a39-46e5-82e0-45b38ea7cfd3",
  • "rejectedAt": "2026-05-18T08:00:00.000Z",
  • "rejectReason": "string",
  • "fulfilledSupplyId": "bb48ac53-1b89-440a-8a91-66ca9626dfe6",
  • "fulfilledAt": "2026-05-18T08:00:00.000Z",
  • "lastReturnComment": "string",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Отправить заявку на согласование

Переводит заявку draft → submitted. Триггерит уведомление утверждающим.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "organizationId": "11111111-1111-4111-8111-111111111111",
  • "tankId": "11111111-1111-4111-8111-111111111111",
  • "requestedVolumeLiters": 0,
  • "desiredDeliveryDate": "2019-08-24",
  • "justification": "string",
  • "status": "draft",
  • "initiatorId": "11111111-1111-4111-8111-111111111111",
  • "submittedAt": "2026-05-18T08:00:00.000Z",
  • "approvedById": "e14877de-475e-46ee-a353-ff17542c6dab",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "rejectedById": "6c20ebb9-9a39-46e5-82e0-45b38ea7cfd3",
  • "rejectedAt": "2026-05-18T08:00:00.000Z",
  • "rejectReason": "string",
  • "fulfilledSupplyId": "bb48ac53-1b89-440a-8a91-66ca9626dfe6",
  • "fulfilledAt": "2026-05-18T08:00:00.000Z",
  • "lastReturnComment": "string",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Согласовать заявку

submitted → approved. Поставщик получает разрешение на отгрузку.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
comment
string <= 1000 characters

Responses

Request samples

Content type
application/json
{
  • "comment": "string"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "organizationId": "11111111-1111-4111-8111-111111111111",
  • "tankId": "11111111-1111-4111-8111-111111111111",
  • "requestedVolumeLiters": 0,
  • "desiredDeliveryDate": "2019-08-24",
  • "justification": "string",
  • "status": "draft",
  • "initiatorId": "11111111-1111-4111-8111-111111111111",
  • "submittedAt": "2026-05-18T08:00:00.000Z",
  • "approvedById": "e14877de-475e-46ee-a353-ff17542c6dab",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "rejectedById": "6c20ebb9-9a39-46e5-82e0-45b38ea7cfd3",
  • "rejectedAt": "2026-05-18T08:00:00.000Z",
  • "rejectReason": "string",
  • "fulfilledSupplyId": "bb48ac53-1b89-440a-8a91-66ca9626dfe6",
  • "fulfilledAt": "2026-05-18T08:00:00.000Z",
  • "lastReturnComment": "string",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Отклонить заявку

submitted → rejected с причиной отказа. Терминальный статус.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
required
string [ 10 .. 1000 ] characters

Responses

Request samples

Content type
application/json
{
  • "reason": "stringstri"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "organizationId": "11111111-1111-4111-8111-111111111111",
  • "tankId": "11111111-1111-4111-8111-111111111111",
  • "requestedVolumeLiters": 0,
  • "desiredDeliveryDate": "2019-08-24",
  • "justification": "string",
  • "status": "draft",
  • "initiatorId": "11111111-1111-4111-8111-111111111111",
  • "submittedAt": "2026-05-18T08:00:00.000Z",
  • "approvedById": "e14877de-475e-46ee-a353-ff17542c6dab",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "rejectedById": "6c20ebb9-9a39-46e5-82e0-45b38ea7cfd3",
  • "rejectedAt": "2026-05-18T08:00:00.000Z",
  • "rejectReason": "string",
  • "fulfilledSupplyId": "bb48ac53-1b89-440a-8a91-66ca9626dfe6",
  • "fulfilledAt": "2026-05-18T08:00:00.000Z",
  • "lastReturnComment": "string",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Вернуть заявку на доработку

submitted → draft с комментарием. Автор правит и повторно отправляет на submit.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
comment
required
string >= 10 characters

Комментарий руководителю до доработки заявки (минимум 10 символов)

Responses

Request samples

Content type
application/json
{
  • "comment": "stringstri"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "organizationId": "11111111-1111-4111-8111-111111111111",
  • "tankId": "11111111-1111-4111-8111-111111111111",
  • "requestedVolumeLiters": 0,
  • "desiredDeliveryDate": "2019-08-24",
  • "justification": "string",
  • "status": "draft",
  • "initiatorId": "11111111-1111-4111-8111-111111111111",
  • "submittedAt": "2026-05-18T08:00:00.000Z",
  • "approvedById": "e14877de-475e-46ee-a353-ff17542c6dab",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "rejectedById": "6c20ebb9-9a39-46e5-82e0-45b38ea7cfd3",
  • "rejectedAt": "2026-05-18T08:00:00.000Z",
  • "rejectReason": "string",
  • "fulfilledSupplyId": "bb48ac53-1b89-440a-8a91-66ca9626dfe6",
  • "fulfilledAt": "2026-05-18T08:00:00.000Z",
  • "lastReturnComment": "string",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Привязать поставку к заявке

Связывает фактически зарегистрированную поставку с approved-заявкой для закрытия плана.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
supplyId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID зарегистрированной поставки ДТ

fulfilledQuantityLiters
number > 0

Фактически принятый объём, л (по умолчанию = requestedVolume заявки)

Responses

Request samples

Content type
application/json
{
  • "supplyId": "11111111-1111-4111-8111-111111111111",
  • "fulfilledQuantityLiters": 0
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "organizationId": "11111111-1111-4111-8111-111111111111",
  • "tankId": "11111111-1111-4111-8111-111111111111",
  • "requestedVolumeLiters": 0,
  • "desiredDeliveryDate": "2019-08-24",
  • "justification": "string",
  • "status": "draft",
  • "initiatorId": "11111111-1111-4111-8111-111111111111",
  • "submittedAt": "2026-05-18T08:00:00.000Z",
  • "approvedById": "e14877de-475e-46ee-a353-ff17542c6dab",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "rejectedById": "6c20ebb9-9a39-46e5-82e0-45b38ea7cfd3",
  • "rejectedAt": "2026-05-18T08:00:00.000Z",
  • "rejectReason": "string",
  • "fulfilledSupplyId": "bb48ac53-1b89-440a-8a91-66ca9626dfe6",
  • "fulfilledAt": "2026-05-18T08:00:00.000Z",
  • "lastReturnComment": "string",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

История поставок ДТ

Курсорная пагинация фактически зарегистрированных поставок ДТ по объекту.

Authorizations:
beareroauth2
query Parameters
tankId
string <uuid> (Uuid) ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
Example: tankId=11111111-1111-4111-8111-111111111111

UUID v4

supplierId
string <uuid> (Uuid) ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
Example: supplierId=11111111-1111-4111-8111-111111111111

UUID v4

cursor
string
limit
integer ( 0 .. 200 ]

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "53a4a333-2825-45a4-80d2-5f430d088f36"
}

Регистрация поставки (приёмка)

Создаёт запись приёмки топлива в резервуар; обновляет баланс и аудит.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
tankId
required
string <uuid> (RecordFuelSupplyDtoUuid) ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID v4

supplierId
required
string <uuid> (RecordFuelSupplyDtoUuid) ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID v4

quantityLiters
required
number > 0
RecordFuelSupplyDtoUuid (string) or null
RecordFuelSupplyDtoUuid (string) or null
occurredAt
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Responses

Request samples

Content type
application/json
{
  • "tankId": "11111111-1111-4111-8111-111111111111",
  • "supplierId": "11111111-1111-4111-8111-111111111111",
  • "quantityLiters": 0,
  • "supplyRequestId": "11111111-1111-4111-8111-111111111111",
  • "sagaId": "11111111-1111-4111-8111-111111111111",
  • "occurredAt": "2019-08-24T14:15:22Z"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "tankId": "11111111-1111-4111-8111-111111111111",
  • "organizationId": "11111111-1111-4111-8111-111111111111",
  • "supplierId": "11111111-1111-4111-8111-111111111111",
  • "quantityLiters": 0,
  • "occurredAt": "2026-05-18T08:00:00.000Z",
  • "supplyRequestId": "11111111-1111-4111-8111-111111111111",
  • "sagaId": "11111111-1111-4111-8111-111111111111",
  • "actorId": "11111111-1111-4111-8111-111111111111",
  • "reversed": true
}

Сторно поставки (counter-entry)

Создаёт обратную транзакцию по поставке: оригинал не удаляется, баланс компенсируется.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
required
string [ 3 .. 500 ] characters
comment
required
string [ 10 .. 2000 ] characters

Responses

Request samples

Content type
application/json
{
  • "reason": "string",
  • "comment": "stringstri"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "tankId": "11111111-1111-4111-8111-111111111111",
  • "organizationId": "11111111-1111-4111-8111-111111111111",
  • "kind": "supply",
  • "signedQuantityLiters": 0,
  • "occurredAt": "2026-05-18T08:00:00.000Z",
  • "actorId": "11111111-1111-4111-8111-111111111111",
  • "sagaId": "11111111-1111-4111-8111-111111111111",
  • "supplierId": "11111111-1111-4111-8111-111111111111",
  • "shiftReportId": "11111111-1111-4111-8111-111111111111",
  • "supplyRequestId": "11111111-1111-4111-8111-111111111111",
  • "fuelEntryId": "11111111-1111-4111-8111-111111111111",
  • "manualPurpose": "string",
  • "reversesEntryId": "11111111-1111-4111-8111-111111111111",
  • "reason": "string",
  • "comment": "string"
}

История списаний ДТ

Курсорная пагинация списаний топлива (как PRD-автоматических, так и ручных).

Authorizations:
beareroauth2
query Parameters
tankId
string <uuid> (Uuid) ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
Example: tankId=11111111-1111-4111-8111-111111111111

UUID v4

kinds
string

CSV: consumption_auto,consumption_manual

shiftReportId
string <uuid> (Uuid) ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
Example: shiftReportId=11111111-1111-4111-8111-111111111111

UUID v4

cursor
string
limit
integer ( 0 .. 200 ]

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "53a4a333-2825-45a4-80d2-5f430d088f36"
}

Ручное списание ДТ

Регистрирует списание топлива вручную (вне PRD shift-report). Снижает баланс резервуара.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
tankId
required
string <uuid> (RecordManualConsumptionDtoUuid) ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID v4

quantityLiters
required
number > 0
manualPurpose
required
string [ 3 .. 500 ] characters
RecordManualConsumptionDtoUuid (string) or null
occurredAt
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Responses

Request samples

Content type
application/json
{
  • "tankId": "11111111-1111-4111-8111-111111111111",
  • "quantityLiters": 0,
  • "manualPurpose": "string",
  • "sagaId": "11111111-1111-4111-8111-111111111111",
  • "occurredAt": "2019-08-24T14:15:22Z"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "tankId": "11111111-1111-4111-8111-111111111111",
  • "organizationId": "11111111-1111-4111-8111-111111111111",
  • "kind": "consumption_auto",
  • "quantityLiters": 0,
  • "occurredAt": "2026-05-18T08:00:00.000Z",
  • "shiftReportId": "11111111-1111-4111-8111-111111111111",
  • "fuelEntryId": "11111111-1111-4111-8111-111111111111",
  • "manualPurpose": "string",
  • "sagaId": "11111111-1111-4111-8111-111111111111",
  • "actorId": "11111111-1111-4111-8111-111111111111",
  • "reversed": true
}

Сторно списания (counter-entry)

Создаёт обратную транзакцию по списанию: оригинал сохраняется, баланс восстанавливается.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
required
string [ 3 .. 500 ] characters
comment
required
string [ 10 .. 2000 ] characters

Responses

Request samples

Content type
application/json
{
  • "reason": "string",
  • "comment": "stringstri"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "tankId": "11111111-1111-4111-8111-111111111111",
  • "organizationId": "11111111-1111-4111-8111-111111111111",
  • "kind": "supply",
  • "signedQuantityLiters": 0,
  • "occurredAt": "2026-05-18T08:00:00.000Z",
  • "actorId": "11111111-1111-4111-8111-111111111111",
  • "sagaId": "11111111-1111-4111-8111-111111111111",
  • "supplierId": "11111111-1111-4111-8111-111111111111",
  • "shiftReportId": "11111111-1111-4111-8111-111111111111",
  • "supplyRequestId": "11111111-1111-4111-8111-111111111111",
  • "fuelEntryId": "11111111-1111-4111-8111-111111111111",
  • "manualPurpose": "string",
  • "reversesEntryId": "11111111-1111-4111-8111-111111111111",
  • "reason": "string",
  • "comment": "string"
}

SCM / Suppliers

Справочник поставщиков

Список поставщиков с фильтрами и пагинацией

По умолчанию — только active. Фильтры: status[], category, q (legalName/shortName/bin/iin). Поставщики — компанийный справочник, без object-scope.

Authorizations:
beareroauth2
query Parameters
status
Array of strings
Items Enum: "draft" "underReview" "active" "suspended" "archived"
Example: status=active

Фильтр по статусу FSM (можно несколько). По умолчанию — только active

category
string
Enum: "tmc" "fuel" "service" "equipment"
Example: category=tmc

Фильтр по категории поставщика

q
string <= 100 characters
Example: q=БурТех

Поиск по legalName / shortName / bin / iin

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: cursor=11111111-1111-4111-8111-111111111111

UUID последнего элемента предыдущей страницы

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": null
}

Создать поставщика (статус draft)

Доступно ролям: Supply, Admin. Затем — POST /:id/submit для отправки на проверку.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
string or null

БИН юр. лица (12 цифр). Заполняется ЛИБО bin, ЛИБО iin (XOR, SCM-SUP-INV-02)

string or null

ИИН индивидуального предпринимателя (12 цифр)

legalName
required
string [ 2 .. 500 ] characters

Полное юридическое наименование

shortName
required
string [ 2 .. 100 ] characters

Краткое наименование для UI

legalAddress
required
string [ 5 .. 500 ] characters

Юридический адрес

countryCode
string = 2 characters
Default: "KZ"

ISO 3166-1 alpha-2 (по умолчанию KZ)

string or null

КПФ (41 ТОО, 42 АО, 17 ИП). Опционально — выводится из bin/iin

categories
required
Array of strings non-empty
Items Enum: "tmc" "fuel" "service" "equipment"

Категории поставщика (одна или несколько). Q2 — финальный список с PO

Responses

Request samples

Content type
application/json
{
  • "bin": "190140012345",
  • "iin": null,
  • "legalName": "Товарищество с ограниченной ответственностью \"БурТехСервис\"",
  • "shortName": "ТОО БурТехСервис",
  • "legalAddress": "г. Алматы, ул. Тестовая 1",
  • "countryCode": "KZ",
  • "categories": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "bin": "190140012345",
  • "iin": null,
  • "legalName": "Товарищество с ограниченной ответственностью \"БурТехСервис\"",
  • "shortName": "ТОО БурТехСервис",
  • "legalAddress": "г. Алматы, ул. Тестовая 1",
  • "legalFormCode": "41",
  • "countryCode": "KZ",
  • "status": "draft",
  • "categories": [
    ],
  • "suspendedReason": null,
  • "archivedReason": null,
  • "submittedAt": null,
  • "submittedBy": null,
  • "activatedAt": null,
  • "activatedBy": null,
  • "suspendedAt": null,
  • "archivedAt": null,
  • "archivedCoApprovedBy": null
}

Получить поставщика по id

Возвращает карточку. Контакты/счета — отдельные эндпоинты GET :id/contacts и :id/bank-accounts.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID поставщика

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "bin": "190140012345",
  • "iin": null,
  • "legalName": "Товарищество с ограниченной ответственностью \"БурТехСервис\"",
  • "shortName": "ТОО БурТехСервис",
  • "legalAddress": "г. Алматы, ул. Тестовая 1",
  • "legalFormCode": "41",
  • "countryCode": "KZ",
  • "status": "draft",
  • "categories": [
    ],
  • "suspendedReason": null,
  • "archivedReason": null,
  • "submittedAt": null,
  • "submittedBy": null,
  • "activatedAt": null,
  • "activatedBy": null,
  • "suspendedAt": null,
  • "archivedAt": null,
  • "archivedCoApprovedBy": null
}

Отправить поставщика на проверку (draft → under_review)

Требует ≥1 primary contact + ≥1 primary bank с валидным IBAN (SCM-SUP-INV-05). Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID поставщика

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
comment
string <= 500 characters

Опциональный комментарий финдиректору при отправке на проверку

Responses

Request samples

Content type
application/json
{
  • "comment": "Реквизиты заполнены, прошу проверить"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "bin": "190140012345",
  • "iin": null,
  • "legalName": "Товарищество с ограниченной ответственностью \"БурТехСервис\"",
  • "shortName": "ТОО БурТехСервис",
  • "legalAddress": "г. Алматы, ул. Тестовая 1",
  • "legalFormCode": "41",
  • "countryCode": "KZ",
  • "status": "draft",
  • "categories": [
    ],
  • "suspendedReason": null,
  • "archivedReason": null,
  • "submittedAt": null,
  • "submittedBy": null,
  • "activatedAt": null,
  • "activatedBy": null,
  • "suspendedAt": null,
  • "archivedAt": null,
  • "archivedCoApprovedBy": null
}

Утвердить поставщика (under_review → active)

Split of duty: approvedBy ≠ submittedBy (SCM-SUP-INV-13). Доступно ceo/admin. Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID поставщика

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
comment
string <= 500 characters

Опциональный комментарий при approve (финдиректор/CEO)

Responses

Request samples

Content type
application/json
{
  • "comment": "Реквизиты проверены, согласовано"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "bin": "190140012345",
  • "iin": null,
  • "legalName": "Товарищество с ограниченной ответственностью \"БурТехСервис\"",
  • "shortName": "ТОО БурТехСервис",
  • "legalAddress": "г. Алматы, ул. Тестовая 1",
  • "legalFormCode": "41",
  • "countryCode": "KZ",
  • "status": "draft",
  • "categories": [
    ],
  • "suspendedReason": null,
  • "archivedReason": null,
  • "submittedAt": null,
  • "submittedBy": null,
  • "activatedAt": null,
  • "activatedBy": null,
  • "suspendedAt": null,
  • "archivedAt": null,
  • "archivedCoApprovedBy": null
}

Вернуть в draft с комментарием (under_review → draft)

Доступно ceo/admin. comment обязателен (≥10 символов).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID поставщика

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
comment
required
string [ 10 .. 1000 ] characters

Что исправить (минимум 10 символов) — будет видно снабжению

Responses

Request samples

Content type
application/json
{
  • "comment": "Уточнить юридический адрес — указан фактический"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "bin": "190140012345",
  • "iin": null,
  • "legalName": "Товарищество с ограниченной ответственностью \"БурТехСервис\"",
  • "shortName": "ТОО БурТехСервис",
  • "legalAddress": "г. Алматы, ул. Тестовая 1",
  • "legalFormCode": "41",
  • "countryCode": "KZ",
  • "status": "draft",
  • "categories": [
    ],
  • "suspendedReason": null,
  • "archivedReason": null,
  • "submittedAt": null,
  • "submittedBy": null,
  • "activatedAt": null,
  • "activatedBy": null,
  • "suspendedAt": null,
  • "archivedAt": null,
  • "archivedCoApprovedBy": null
}

Заблокировать поставщика (active → suspended)

Reason обязателен. После события scm.supplier.suspended соседние модули отменяют draft закупки (SCM-SUP-INV-03c).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID поставщика

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
suspendedReason
required
string
Enum: "payment_delay" "tax_issue" "quality_complaint" "sanction" "other"

Категория причины блокировки

suspendedReasonText
required
string [ 10 .. 1000 ] characters

Свободный текст причины (минимум 10 символов)

Responses

Request samples

Content type
application/json
{
  • "suspendedReason": "payment_delay",
  • "suspendedReasonText": "Просрочка оплаты по счёту № 12345 от 2026-04-01"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "bin": "190140012345",
  • "iin": null,
  • "legalName": "Товарищество с ограниченной ответственностью \"БурТехСервис\"",
  • "shortName": "ТОО БурТехСервис",
  • "legalAddress": "г. Алматы, ул. Тестовая 1",
  • "legalFormCode": "41",
  • "countryCode": "KZ",
  • "status": "draft",
  • "categories": [
    ],
  • "suspendedReason": null,
  • "archivedReason": null,
  • "submittedAt": null,
  • "submittedBy": null,
  • "activatedAt": null,
  • "activatedBy": null,
  • "suspendedAt": null,
  • "archivedAt": null,
  • "archivedCoApprovedBy": null
}

Разблокировать поставщика (suspended → active)

Reason обязателен (минимум 10 символов).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID поставщика

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
required
string [ 10 .. 1000 ] characters

Обоснование снятия блокировки (минимум 10 символов)

Responses

Request samples

Content type
application/json
{
  • "reason": "Задолженность погашена согласно платёжному поручению № 67890"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "bin": "190140012345",
  • "iin": null,
  • "legalName": "Товарищество с ограниченной ответственностью \"БурТехСервис\"",
  • "shortName": "ТОО БурТехСервис",
  • "legalAddress": "г. Алматы, ул. Тестовая 1",
  • "legalFormCode": "41",
  • "countryCode": "KZ",
  • "status": "draft",
  • "categories": [
    ],
  • "suspendedReason": null,
  • "archivedReason": null,
  • "submittedAt": null,
  • "submittedBy": null,
  • "activatedAt": null,
  • "activatedBy": null,
  • "suspendedAt": null,
  • "archivedAt": null,
  • "archivedCoApprovedBy": null
}

Архивировать поставщика (* → archived, terminal)

Двойное согласование для active/suspended (Q5): coApprovedBy обязателен, ≠ actorId. Cross-aggregate sync guards (SCM-SUP-INV-11/-11c) — TODO до wiring scm/tmc + eam.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID поставщика

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
archivedReason
required
string [ 10 .. 1000 ] characters

Причина архивации (минимум 10 символов)

string or null

Responses

Request samples

Content type
application/json
{
  • "archivedReason": "Контракт расторгнут по соглашению сторон",
  • "coApprovedBy": "22222222-2222-4222-8222-222222222222"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "bin": "190140012345",
  • "iin": null,
  • "legalName": "Товарищество с ограниченной ответственностью \"БурТехСервис\"",
  • "shortName": "ТОО БурТехСервис",
  • "legalAddress": "г. Алматы, ул. Тестовая 1",
  • "legalFormCode": "41",
  • "countryCode": "KZ",
  • "status": "draft",
  • "categories": [
    ],
  • "suspendedReason": null,
  • "archivedReason": null,
  • "submittedAt": null,
  • "submittedBy": null,
  • "activatedAt": null,
  • "activatedBy": null,
  • "suspendedAt": null,
  • "archivedAt": null,
  • "archivedCoApprovedBy": null
}

Список контактов поставщика

ADR-0028: secondary entities. Primary-контакт идёт первым (orderBy isPrimary desc). Без object-scope.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID поставщика

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Добавить контактное лицо поставщику

ADR-0028: secondary entity. isPrimary:true назначает контакт primary в одной транзакции (SCM-SUP-INV-07). Минимум один primary contact нужен для submit (SCM-SUP-INV-05). Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID поставщика

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
fullName
required
string non-empty

ФИО контактного лица

position
required
string non-empty

Должность

phone
required
string non-empty

Телефон

string or null

Email (опционально)

isPrimary
boolean

Сделать primary-контактом (SCM-SUP-INV-07)

Responses

Request samples

Content type
application/json
{
  • "fullName": "string",
  • "position": "string",
  • "phone": "string",
  • "email": "user@example.com",
  • "isPrimary": true
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "supplierId": "11111111-1111-4111-8111-111111111111",
  • "fullName": "string",
  • "position": "string",
  • "phone": "string",
  • "email": "string",
  • "isPrimary": true,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Список банковских счетов поставщика

ADR-0028: secondary entities. Primary-счёт идёт первым (orderBy isPrimary desc). Без object-scope.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID поставщика

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Добавить банковский счёт поставщику

ADR-0028: secondary entity. IBAN валидируется KZ mod-97 (SCM-SUP-INV-06). isPrimary:true назначает счёт primary в одной транзакции (SCM-SUP-INV-07). Минимум один primary bank с валидным IBAN нужен для submit (SCM-SUP-INV-05). Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID поставщика

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
bankName
required
string non-empty

Наименование банка

iban
required
string non-empty

IBAN (KZ mod-97, SCM-SUP-INV-06)

string or null

БИК (опционально)

string or null

Код бенефициара Кбе (опционально)

currency
string non-empty

Валюта (по умолчанию KZT)

isPrimary
boolean

Сделать primary-счётом (SCM-SUP-INV-07)

Responses

Request samples

Content type
application/json
{
  • "bankName": "string",
  • "iban": "string",
  • "bik": "string",
  • "bk": "string",
  • "currency": "string",
  • "isPrimary": true
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "supplierId": "11111111-1111-4111-8111-111111111111",
  • "bankName": "string",
  • "bik": "string",
  • "iban": "string",
  • "bk": "string",
  • "currency": "string",
  • "isPrimary": true,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Назначить primary-контакт у поставщика

SCM-SUP-INV-07: два UPDATE в транзакции (сброс текущего primary + установка нового). Partial UNIQUE страхует от гонок (ADR-0028). Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID поставщика

contactId
required
string <uuid>

UUID контакта

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "title": "Asset already decommissioned",
  • "status": 409,
  • "code": "ASSET_ALREADY_DECOMMISSIONED",
  • "instance": "/api/v1/eam/assets/11111111-1111-4111-8111-111111111111"
}

Назначить primary-счёт у поставщика

SCM-SUP-INV-07 для bank accounts. Аналогично контактам — два UPDATE в транзакции. Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID поставщика

bankId
required
string <uuid>

UUID банковского счёта

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "title": "Asset already decommissioned",
  • "status": 409,
  • "code": "ASSET_ALREADY_DECOMMISSIONED",
  • "instance": "/api/v1/eam/assets/11111111-1111-4111-8111-111111111111"
}

Изменить реквизиты банковского счёта поставщика

SCM-SUP-INV-10: смена IBAN валидируется через mod-97 + reason ≥ 10 символов. Каждое изменённое поле пишется в supplier_audit_log; публикуется событие scm.supplier.updated (ADR-0028).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID поставщика

bankId
required
string <uuid>

UUID банковского счёта

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
iban
string^KZ[A-Z0-9]{18}$

KZ IBAN (20 символов, mod-97)

bankName
string [ 1 .. 200 ] characters

Название банка

string or null

БИК (8 символов) или null

string or null

КБе или null

currency
string = 3 characters

ISO 4217 валюта счёта

reason
required
string [ 10 .. 1000 ] characters

Причина изменения реквизитов (≥10 символов) — попадает в supplier_audit_log

Responses

Request samples

Content type
application/json
{
  • "iban": "string",
  • "bankName": "string",
  • "bik": "stringst",
  • "bk": "st",
  • "currency": "str",
  • "reason": "stringstri"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "supplierId": "11111111-1111-4111-8111-111111111111",
  • "bankName": "string",
  • "bik": "string",
  • "iban": "string",
  • "bk": "string",
  • "currency": "string",
  • "isPrimary": true,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Удалить банковский счёт поставщика (soft-delete)

ADR-0028 secondary entity. Soft-delete (deletedAt). Нельзя удалить primary-счёт — сначала переназначь primary (SCM-SUP-INV-05/-07). Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID поставщика

bankId
required
string <uuid>

UUID банковского счёта

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "title": "Asset already decommissioned",
  • "status": 409,
  • "code": "ASSET_ALREADY_DECOMMISSIONED",
  • "instance": "/api/v1/eam/assets/11111111-1111-4111-8111-111111111111"
}

Изменить контактное лицо поставщика

ADR-0028 secondary entity. Правка ФИО/должности/телефона/email. Симметрично PATCH bank-accounts, но без reason/audit-log (контакт не финансово-чувствителен). Переключение primary — отдельным set-primary. Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID поставщика

contactId
required
string <uuid>

UUID контакта

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
fullName
string non-empty

ФИО контактного лица

position
string non-empty

Должность

phone
string non-empty

Телефон

string or null

Email (null — очистить)

Responses

Request samples

Content type
application/json
{
  • "fullName": "string",
  • "position": "string",
  • "phone": "string",
  • "email": "user@example.com"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "supplierId": "11111111-1111-4111-8111-111111111111",
  • "fullName": "string",
  • "position": "string",
  • "phone": "string",
  • "email": "string",
  • "isPrimary": true,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Удалить контактное лицо поставщика (soft-delete)

ADR-0028 secondary entity. Soft-delete (deletedAt). Нельзя удалить primary-контакт — сначала переназначь primary (SCM-SUP-INV-05/-07). Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID поставщика

contactId
required
string <uuid>

UUID контакта

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "title": "Asset already decommissioned",
  • "status": 409,
  • "code": "ASSET_ALREADY_DECOMMISSIONED",
  • "instance": "/api/v1/eam/assets/11111111-1111-4111-8111-111111111111"
}

SCM / TMC

Товарно-материальные ценности (склад, инвентаризация)

Список позиций номенклатуры ТМЦ

Список позиций номенклатуры ТМЦ

Authorizations:
beareroauth2
query Parameters
category
string [ 1 .. 32 ] characters
Example: category=01.01

Фильтр по коду узла классификатора (TmcCategory.code)

active
boolean
q
string <= 200 characters
boolean or string

true → только позиции без категории или с кодом вне классификатора (раздел «Требует проверки»)

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
limit
integer [ 1 .. 200 ]
Default: 50

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "string"
}

Создать позицию ТМЦ

Создать позицию ТМЦ

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
nomenclatureCode
required
string [ 1 .. 64 ] characters

Уникальный код номенклатуры в рамках организации

name
required
string [ 2 .. 500 ] characters

Полное наименование позиции

category
required
string [ 1 .. 32 ] characters

Код узла классификатора ТМЦ (TmcCategory.code, refs) — группа или подгруппа

unit
required
string
Enum: "шт" "кг" "л" "м" "компл" "пар" "упак" "лист" "т" "рул" "м2" "м3"

Единица измерения

string or null
string or null

Старый код номенклатуры из 1С (ЦБ…) — мост для миграции

initialPrice
number >= 0

Начальная цена (если есть остаток на старте)

Responses

Request samples

Content type
application/json
{
  • "nomenclatureCode": "01.01.0001",
  • "name": "Долото буровое 152мм",
  • "category": "01.01",
  • "unit": "шт",
  • "assetClassId": "11111111-1111-4111-8111-111111111111",
  • "externalCode": "ЦБ000005987",
  • "initialPrice": 0
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "nomenclatureCode": "string",
  • "name": "string",
  • "category": "01.01",
  • "unit": "string",
  • "assetClassId": "11111111-1111-4111-8111-111111111111",
  • "externalCode": "string",
  • "lastPurchasePrice": 0,
  • "weightedAvgPrice": 0,
  • "active": true,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Получить позицию по id

Получить позицию по id

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "nomenclatureCode": "string",
  • "name": "string",
  • "category": "01.01",
  • "unit": "string",
  • "assetClassId": "11111111-1111-4111-8111-111111111111",
  • "externalCode": "string",
  • "lastPurchasePrice": 0,
  • "weightedAvgPrice": 0,
  • "active": true,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Обновить карточку позиции

Обновить карточку позиции

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
name
string [ 2 .. 500 ] characters
string or null

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "assetClassId": "11111111-1111-4111-8111-111111111111"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "nomenclatureCode": "string",
  • "name": "string",
  • "category": "01.01",
  • "unit": "string",
  • "assetClassId": "11111111-1111-4111-8111-111111111111",
  • "externalCode": "string",
  • "lastPurchasePrice": 0,
  • "weightedAvgPrice": 0,
  • "active": true,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Снять позицию с учёта (TMC-INV-14)

Снять позицию с учёта (TMC-INV-14)

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "nomenclatureCode": "string",
  • "name": "string",
  • "category": "01.01",
  • "unit": "string",
  • "assetClassId": "11111111-1111-4111-8111-111111111111",
  • "externalCode": "string",
  • "lastPurchasePrice": 0,
  • "weightedAvgPrice": 0,
  • "active": true,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Счётчики позиций по категориям классификатора

Число не удалённых позиций номенклатуры по коду TmcCategory (org-scoped). Узлы дерева (название/родитель) берутся из GET /core/refs/tmc-categories; коды вне классификатора и пустой код → раздел «Требует проверки».

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
{
  • "counts": [
    ]
}

Список складов

Список складов организации (TMC-INV-13: 1 объект ⇔ 1 склад). Фильтры: objectId, active. Cursor-пагинация.

Authorizations:
beareroauth2
query Parameters
objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

UUID производственного объекта

active
boolean
cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
limit
integer [ 1 .. 500 ]
Default: 100

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "string"
}

Обзор остатков по складам

Карточный обзор «Снабжение · ТМЦ»: на каждый склад — кладовщик, число позиций (положительный остаток) и суммарная стоимость остатка (Σ остаток × средневзвешенная цена). Без пагинации (складов единицы). object-scope: cross-роль видит все, object-scoped — только склады своих объектов.

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Назначить/снять кладовщика склада

Назначить материально ответственного кладовщика склада (BL-37 задача 3). storekeeperId=null — снять назначение. Если кладовщик назначен — приёмку передачи на этот склад подтверждает только он. Только Admin: выбор кладовщика требует доступа к справочнику персонала (hr/personnel), которого нет у Supply (DoR).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
required
string or null
Any of
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID кладовщика (ref hr/personnel); null — снять назначение

Responses

Request samples

Content type
application/json
{
  • "storekeeperId": "11111111-1111-4111-8111-111111111111"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "kind": "central",
  • "objectId": "11111111-1111-4111-8111-111111111111",
  • "name": "string",
  • "storekeeperId": null,
  • "active": true,
  • "createdAt": "2026-05-18T08:00:00.000Z"
}

Список документов поступления

Список документов поступления ТМЦ (TmcInbound). Фильтры: warehouseId, requestId, source. Cursor-пагинация. id-ы используются как linkedInboundIds при закрытии заявки (fulfill).

Authorizations:
beareroauth2
query Parameters
warehouseId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: warehouseId=11111111-1111-4111-8111-111111111111

UUID склада

requestId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: requestId=11111111-1111-4111-8111-111111111111

UUID связанной заявки

source
string
Enum: "supplier" "transfer" "return"
cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
limit
integer [ 1 .. 500 ]
Default: 100

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "string"
}

Зарегистрировать поступление ТМЦ

Зарегистрировать поступление ТМЦ

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
warehouseId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

Склад-получатель

source
required
string
Enum: "supplier" "transfer" "return"
string or null
inboundDate
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Дата поступления (ISO date)

documentNumber
required
string [ 1 .. 100 ] characters

Номер документа-основания (TMC-INV-07 — обязательно)

string or null
string or null
string or null
receivedById
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID получателя из hr/personnel

required
Array of objects non-empty

Responses

Request samples

Content type
application/json
{
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "source": "supplier",
  • "supplierId": "11111111-1111-4111-8111-111111111111",
  • "inboundDate": "2019-08-24",
  • "documentNumber": "string",
  • "documentReference": "http://example.com",
  • "requestId": "11111111-1111-4111-8111-111111111111",
  • "provisioningOrderId": "11111111-1111-4111-8111-111111111111",
  • "receivedById": "11111111-1111-4111-8111-111111111111",
  • "lines": [
    ]
}

Response samples

Content type
application/json
{
  • "inboundId": "11111111-1111-4111-8111-111111111111",
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "totalAmount": 0,
  • "lineCount": 9007199254740991
}

Ручной акт списания

Ручной акт списания

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
warehouseId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

Склад-источник

string or null
targetObjectId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID ProductionObject — куда списано

reason
required
string
Enum: "planned_to" "repair" "production" "loss"

Основание списания (для manual_act обязательно)

string or null
occurredAt
required
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Когда произошло списание (ISO datetime)

required
Array of objects non-empty

Responses

Request samples

Content type
application/json
{
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "assetId": "11111111-1111-4111-8111-111111111111",
  • "targetObjectId": "11111111-1111-4111-8111-111111111111",
  • "reason": "planned_to",
  • "documentReference": "http://example.com",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "lines": [
    ]
}

Response samples

Content type
application/json
{
  • "consumptionId": "11111111-1111-4111-8111-111111111111",
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "lineCount": 9007199254740991
}

Список перемещений

Список перемещений

Authorizations:
beareroauth2
query Parameters
status
string
Enum: "issued" "confirmed"
warehouseId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: warehouseId=11111111-1111-4111-8111-111111111111

UUID склада (источник или получатель)

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
limit
integer [ 1 .. 200 ]
Default: 50

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "string"
}

Issue: создать перемещение (issued)

Issue: создать перемещение (issued)

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
fromWarehouseId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

Склад-источник

toWarehouseId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

Склад-получатель

transferDate
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
documentNumber
required
string [ 1 .. 100 ] characters
required
Array of objects non-empty

Responses

Request samples

Content type
application/json
{
  • "fromWarehouseId": "11111111-1111-4111-8111-111111111111",
  • "toWarehouseId": "11111111-1111-4111-8111-111111111111",
  • "transferDate": "2019-08-24",
  • "documentNumber": "string",
  • "lines": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "fromWarehouseId": "11111111-1111-4111-8111-111111111111",
  • "toWarehouseId": "11111111-1111-4111-8111-111111111111",
  • "status": "issued",
  • "transferDate": "string",
  • "documentNumber": "string",
  • "issuedById": "11111111-1111-4111-8111-111111111111",
  • "confirmedById": "11111111-1111-4111-8111-111111111111",
  • "issuedAt": "2026-05-18T08:00:00.000Z",
  • "confirmedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Получить перемещение по id

Получить перемещение по id

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "fromWarehouseId": "11111111-1111-4111-8111-111111111111",
  • "toWarehouseId": "11111111-1111-4111-8111-111111111111",
  • "status": "issued",
  • "transferDate": "string",
  • "documentNumber": "string",
  • "issuedById": "11111111-1111-4111-8111-111111111111",
  • "confirmedById": "11111111-1111-4111-8111-111111111111",
  • "issuedAt": "2026-05-18T08:00:00.000Z",
  • "confirmedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Confirm: подтвердить прибытие (issued → confirmed)

Confirm: подтвердить прибытие (issued → confirmed)

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
note
string <= 500 characters

Responses

Request samples

Content type
application/json
{
  • "note": "string"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "fromWarehouseId": "11111111-1111-4111-8111-111111111111",
  • "toWarehouseId": "11111111-1111-4111-8111-111111111111",
  • "status": "issued",
  • "transferDate": "string",
  • "documentNumber": "string",
  • "issuedById": "11111111-1111-4111-8111-111111111111",
  • "confirmedById": "11111111-1111-4111-8111-111111111111",
  • "issuedAt": "2026-05-18T08:00:00.000Z",
  • "confirmedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Список выдач ТМЦ

Список выдач ТМЦ со склада лицу (TmcIssue). Фильтры: warehouseId, recipientPersonnelId. Cursor-пагинация. Object-scoped пользователь видит выдачи только со складов своих объектов.

Authorizations:
beareroauth2
query Parameters
warehouseId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: warehouseId=11111111-1111-4111-8111-111111111111

UUID склада

recipientPersonnelId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: recipientPersonnelId=11111111-1111-4111-8111-111111111111

UUID получателя

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
limit
integer [ 1 .. 200 ]
Default: 50

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "string"
}

Оформить выдачу ТМЦ лицу

Создаёт TmcIssue + TmcMovement(issue_out, -qty), уменьшая остаток склада. Получатель — recipientPersonnelId (hr/personnel) ИЛИ recipientName; основание — basisRequestId (заявка) ИЛИ workOrderRef (наряд).

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
warehouseId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID склада, с которого выдаётся ТМЦ

recipientPersonnelId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID получателя из hr/personnel

recipientName
string [ 1 .. 200 ] characters
basisRequestId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID заявки-основания (TmcRequest)

workOrderRef
string [ 1 .. 200 ] characters
documentNumber
required
string [ 1 .. 100 ] characters
issueDate
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
required
Array of objects non-empty

Responses

Request samples

Content type
application/json
{
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "recipientPersonnelId": "11111111-1111-4111-8111-111111111111",
  • "recipientName": "string",
  • "basisRequestId": "11111111-1111-4111-8111-111111111111",
  • "workOrderRef": "string",
  • "documentNumber": "string",
  • "issueDate": "2019-08-24",
  • "lines": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "recipientPersonnelId": "11111111-1111-4111-8111-111111111111",
  • "recipientName": "string",
  • "basisRequestId": "11111111-1111-4111-8111-111111111111",
  • "workOrderRef": "string",
  • "documentNumber": "string",
  • "issuedById": "11111111-1111-4111-8111-111111111111",
  • "issuedAt": "2026-05-18T08:00:00.000Z",
  • "totalAmount": 0,
  • "lines": [
    ]
}

Получить выдачу по id (ведомость)

Карточка выдачи ТМЦ с позициями и суммой — основа печатной ведомости выдачи.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "recipientPersonnelId": "11111111-1111-4111-8111-111111111111",
  • "recipientName": "string",
  • "basisRequestId": "11111111-1111-4111-8111-111111111111",
  • "workOrderRef": "string",
  • "documentNumber": "string",
  • "issuedById": "11111111-1111-4111-8111-111111111111",
  • "issuedAt": "2026-05-18T08:00:00.000Z",
  • "totalAmount": 0,
  • "lines": [
    ]
}

Список заявок на пополнение

Список заявок на пополнение

Authorizations:
beareroauth2
query Parameters
status
string
Enum: "draft" "sent" "approved" "in_progress" "fulfilled" "rejected"
warehouseId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: warehouseId=11111111-1111-4111-8111-111111111111

UUID склада

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
limit
integer [ 1 .. 200 ]
Default: 50

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "string"
}

Создать заявку (draft)

Создать заявку (draft)

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
warehouseId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

Целевой склад

justification
required
string [ 3 .. 2000 ] characters
type
string
Default: "urgent"
Enum: "urgent" "emergency"
required
Array of objects non-empty

Responses

Request samples

Content type
application/json
{
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "justification": "string",
  • "type": "urgent",
  • "lines": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "createdById": "11111111-1111-4111-8111-111111111111",
  • "justification": "string",
  • "type": "urgent",
  • "status": "draft",
  • "approvedById": "11111111-1111-4111-8111-111111111111",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "rejectReason": "string",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Получить заявку по id

Получить заявку по id

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "createdById": "11111111-1111-4111-8111-111111111111",
  • "justification": "string",
  • "type": "urgent",
  • "status": "draft",
  • "approvedById": "11111111-1111-4111-8111-111111111111",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "rejectReason": "string",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Отправить заявку (draft → sent)

Отправить заявку (draft → sent)

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
object (SubmitTmcRequestDto)

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "createdById": "11111111-1111-4111-8111-111111111111",
  • "justification": "string",
  • "type": "urgent",
  • "status": "draft",
  • "approvedById": "11111111-1111-4111-8111-111111111111",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "rejectReason": "string",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Согласовать заявку (sent → approved). Только Engineer/Admin.

Согласовать заявку (sent → approved). Только Engineer/Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
object (ApproveTmcRequestDto)

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "createdById": "11111111-1111-4111-8111-111111111111",
  • "justification": "string",
  • "type": "urgent",
  • "status": "draft",
  • "approvedById": "11111111-1111-4111-8111-111111111111",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "rejectReason": "string",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Отклонить заявку (sent → rejected)

Отклонить заявку (sent → rejected)

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
required
string [ 3 .. 500 ] characters

Responses

Request samples

Content type
application/json
{
  • "reason": "string"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "createdById": "11111111-1111-4111-8111-111111111111",
  • "justification": "string",
  • "type": "urgent",
  • "status": "draft",
  • "approvedById": "11111111-1111-4111-8111-111111111111",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "rejectReason": "string",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Вернуть на доработку (sent → draft)

Вернуть на доработку (sent → draft)

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
comment
required
string [ 3 .. 500 ] characters

Responses

Request samples

Content type
application/json
{
  • "comment": "string"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "createdById": "11111111-1111-4111-8111-111111111111",
  • "justification": "string",
  • "type": "urgent",
  • "status": "draft",
  • "approvedById": "11111111-1111-4111-8111-111111111111",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "rejectReason": "string",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Взять в работу (approved → in_progress)

Взять в работу (approved → in_progress)

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
object (StartTmcRequestDto)

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "createdById": "11111111-1111-4111-8111-111111111111",
  • "justification": "string",
  • "type": "urgent",
  • "status": "draft",
  • "approvedById": "11111111-1111-4111-8111-111111111111",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "rejectReason": "string",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Закрыть (in_progress → fulfilled)

Закрыть (in_progress → fulfilled)

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
linkedInboundIds
required
Array of strings <uuid> [ items <uuid >^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{... ]

Responses

Request samples

Content type
application/json
{
  • "linkedInboundIds": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "createdById": "11111111-1111-4111-8111-111111111111",
  • "justification": "string",
  • "type": "urgent",
  • "status": "draft",
  • "approvedById": "11111111-1111-4111-8111-111111111111",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "rejectReason": "string",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Список приказов обеспечения вахты

Перечень приказов обеспечения (TmcProvisioningOrder). Фильтр: status. Cursor-пагинация.

Authorizations:
beareroauth2
query Parameters
status
string
Enum: "draft" "approved" "closed"
cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
limit
integer [ 1 .. 200 ]
Default: 50

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "string"
}

Создать приказ обеспечения вахты (draft)

Создаёт TmcProvisioningOrder(status=draft) с перечнем ТМЦ и approvedQty на период.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
orderRef
required
string [ 1 .. 100 ] characters
periodStart
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
periodEnd
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
required
Array of objects non-empty

Responses

Request samples

Content type
application/json
{
  • "orderRef": "string",
  • "periodStart": "2019-08-24",
  • "periodEnd": "2019-08-24",
  • "lines": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "orderRef": "string",
  • "periodStart": "string",
  • "periodEnd": "string",
  • "status": "draft",
  • "createdById": "11111111-1111-4111-8111-111111111111",
  • "approvedById": "11111111-1111-4111-8111-111111111111",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "closedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Получить приказ обеспечения по id

Карточка приказа со строками: approvedQty / purchasedQty (по привязанным поступлениям) / остаток к закупке.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "orderRef": "string",
  • "periodStart": "string",
  • "periodEnd": "string",
  • "status": "draft",
  • "createdById": "11111111-1111-4111-8111-111111111111",
  • "approvedById": "11111111-1111-4111-8111-111111111111",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "closedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Утвердить приказ обеспечения (draft → approved)

После утверждения по приказу можно закупать — TmcInbound с provisioningOrderId.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
object (ApproveTmcProvisioningOrderDto)

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "orderRef": "string",
  • "periodStart": "string",
  • "periodEnd": "string",
  • "status": "draft",
  • "createdById": "11111111-1111-4111-8111-111111111111",
  • "approvedById": "11111111-1111-4111-8111-111111111111",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "closedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Закрыть приказ обеспечения (approved → closed)

Терминальный переход — закупки по приказу завершены.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
object (CloseTmcProvisioningOrderDto)

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "orderRef": "string",
  • "periodStart": "string",
  • "periodEnd": "string",
  • "status": "draft",
  • "createdById": "11111111-1111-4111-8111-111111111111",
  • "approvedById": "11111111-1111-4111-8111-111111111111",
  • "approvedAt": "2026-05-18T08:00:00.000Z",
  • "closedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Список инвентаризаций

Список инвентаризаций

Authorizations:
beareroauth2
query Parameters
status
string
Enum: "in_progress" "completed"
warehouseId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: warehouseId=11111111-1111-4111-8111-111111111111

UUID склада

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
limit
integer [ 1 .. 200 ]
Default: 50

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "string"
}

Стартовать инвентаризацию (snapshot TmcBalance)

Стартовать инвентаризацию (snapshot TmcBalance)

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
warehouseId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

Склад

inventoryDate
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
string or null

Responses

Request samples

Content type
application/json
{
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "inventoryDate": "2019-08-24",
  • "documentReference": "http://example.com"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "inventoryDate": "string",
  • "responsibleId": "11111111-1111-4111-8111-111111111111",
  • "status": "in_progress",
  • "completedAt": "2026-05-18T08:00:00.000Z",
  • "documentReference": "string",
  • "lines": [
    ]
}

Получить инвентаризацию по id

Получить инвентаризацию по id

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "inventoryDate": "string",
  • "responsibleId": "11111111-1111-4111-8111-111111111111",
  • "status": "in_progress",
  • "completedAt": "2026-05-18T08:00:00.000Z",
  • "documentReference": "string",
  • "lines": [
    ]
}

Завершить инвентаризацию (in_progress → completed). Создаёт TmcMovement(inventory_adjustment) для variance != 0.

Завершить инвентаризацию (in_progress → completed). Создаёт TmcMovement(inventory_adjustment) для variance != 0.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
required
Array of objects non-empty
Array (non-empty)
lineId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID строки

actualQuantity
required
number >= 0
string or null

Responses

Request samples

Content type
application/json
{
  • "lines": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "inventoryDate": "string",
  • "responsibleId": "11111111-1111-4111-8111-111111111111",
  • "status": "in_progress",
  • "completedAt": "2026-05-18T08:00:00.000Z",
  • "documentReference": "string",
  • "lines": [
    ]
}

Остатки ТМЦ

Фильтры: warehouseId, itemId, onlyLowStock. Object-scope для foreman/mechanic — фильтрация по warehouseId (TODO интеграция с @RequiresObjectScope после регистрации Warehouse в Refs-Kit).

Authorizations:
beareroauth2
query Parameters
warehouseId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: warehouseId=11111111-1111-4111-8111-111111111111

UUID склада

itemId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: itemId=11111111-1111-4111-8111-111111111111

UUID позиции

onlyLowStock
boolean
cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
limit
integer [ 1 .. 500 ]
Default: 100

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "string"
}

Задать минимальный запас по позиции и складу

Индивидуальный мин. запас (itemId+warehouseId в теле). Остаток должен существовать (404 если нет). Триггерит флаг низкого остатка в списке остатков.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
itemId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID позиции

warehouseId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID склада

minStock
required
number >= 0

Responses

Request samples

Content type
application/json
{
  • "itemId": "11111111-1111-4111-8111-111111111111",
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "minStock": 0
}

Response samples

Content type
application/json
{
  • "itemId": "11111111-1111-4111-8111-111111111111",
  • "warehouseId": "11111111-1111-4111-8111-111111111111",
  • "nomenclatureCode": "string",
  • "itemName": "string",
  • "unit": "string",
  • "quantity": 0,
  • "minStock": 0,
  • "isLowStock": true,
  • "avgDailyConsumption": 0,
  • "daysToDepletion": 0,
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

HR / Personnel

Кадровый учёт персонала

Список сотрудников с фильтрами

Курсорная пагинация. Фильтрация по objectId, status и positionId. Роли: CEO, Engineer, Foreman, Mechanic, OtibSpecialist, Admin.

Authorizations:
beareroauth2
query Parameters
objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по производственному объекту

status
string
Enum: "active" "onWatch" "onVacation" "terminated"
Example: status=active

Фильтр по статусу FSM

positionId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: positionId=11111111-1111-4111-8111-111111111111

Фильтр по должности

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: cursor=11111111-1111-4111-8111-111111111111

UUID последнего элемента предыдущей страницы

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": null
}

Создать (hire) нового сотрудника

Приём сотрудника на работу (HR 1.1). Idempotent. Роли: Admin.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
fullName
required
string [ 1 .. 200 ] characters

ФИО сотрудника

tabNumber
required
string [ 1 .. 50 ] characters

Табельный номер (уникальный бизнес-ключ)

birthDate
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Дата рождения (ISO 8601, YYYY-MM-DD; диапазон 1900-01-01 … today)

iin
string^\d{12}$

ИИН (12 цифр)

birthPlace
string <= 200 characters

Место рождения

positionId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID должности из справочника

objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID производственного объекта

phone
string <= 50 characters

Контактный телефон

email
string <email> ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z...

Рабочий email

hiredAt
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Дата приёма на работу (ISO 8601, YYYY-MM-DD; диапазон 1990-01-01 … today)

Responses

Request samples

Content type
application/json
{
  • "fullName": "Иванов Иван Иванович",
  • "tabNumber": "TAB-001",
  • "birthDate": "2026-05-18",
  • "iin": "900101300123",
  • "birthPlace": "г. Караганда",
  • "positionId": "22222222-2222-4222-8222-222222222222",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "phone": "+7-700-000-0001",
  • "email": "ivanov@example.com",
  • "hiredAt": "2026-05-18"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "fullName": "Иванов Иван Иванович",
  • "tabNumber": "TAB-001",
  • "birthDate": "2026-05-18",
  • "iin": "900101300123",
  • "birthPlace": "г. Караганда",
  • "positionId": "22222222-2222-4222-8222-222222222222",
  • "status": "active",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "orgNodeId": null,
  • "phone": "+7-700-000-0001",
  • "email": "ivanov@example.com",
  • "hiredAt": "2026-05-18",
  • "terminatedAt": null
}

Карточка сотрудника

Возвращает карточку сотрудника. Object scope по id.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID сотрудника

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "fullName": "Иванов Иван Иванович",
  • "tabNumber": "TAB-001",
  • "birthDate": "2026-05-18",
  • "iin": "900101300123",
  • "birthPlace": "г. Караганда",
  • "positionId": "22222222-2222-4222-8222-222222222222",
  • "status": "active",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "orgNodeId": null,
  • "phone": "+7-700-000-0001",
  • "email": "ivanov@example.com",
  • "hiredAt": "2026-05-18",
  • "terminatedAt": null
}

Редактировать карточку сотрудника

Частичное обновление: ФИО, телефон, email, должность (positionId). Не FSM-переход — статус/участок меняются отдельными роутами. Idempotent. Роли: Engineer, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID сотрудника

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
fullName
string [ 1 .. 200 ] characters

ФИО сотрудника

string or null

Контактный телефон или null для очистки

string or null

Рабочий email или null для очистки

positionId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID должности из справочника

string or null

ИИН (12 цифр) или null для очистки

string or null

Место рождения или null для очистки

string or null

Дата рождения (ISO 8601, YYYY-MM-DD; диапазон 1900-01-01 … today) или null для очистки

Responses

Request samples

Content type
application/json
{
  • "fullName": "Иванов Иван Петрович",
  • "phone": "+7-700-000-0002",
  • "email": "ivanov.petrovich@example.com",
  • "positionId": "22222222-2222-4222-8222-222222222222",
  • "iin": "900101300123",
  • "birthPlace": "г. Караганда"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "fullName": "Иванов Иван Иванович",
  • "tabNumber": "TAB-001",
  • "birthDate": "2026-05-18",
  • "iin": "900101300123",
  • "birthPlace": "г. Караганда",
  • "positionId": "22222222-2222-4222-8222-222222222222",
  • "status": "active",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "orgNodeId": null,
  • "phone": "+7-700-000-0001",
  • "email": "ivanov@example.com",
  • "hiredAt": "2026-05-18",
  • "terminatedAt": null
}

Аватар сотрудника (изображение)

Стримит текущий аватар (последний ready-документ hr.personnel.avatar) с ETag → браузер кэширует, 304 на условный запрос. 404 — аватара нет (фронт показывает инициалы). Read открыт любой аутентифицированной роли (ADR-0080, сознательное PII-решение).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID сотрудника

Responses

Инициировать загрузку аватара (presigned PUT URL)

Создаёт pending-документ аватара и возвращает presigned PUT URL. Дальше клиент PUT-ит файл в MinIO и зовёт POST :id/avatar/:documentId/confirm. Запись: свой аватар или роли Admin/Engineer. Idempotent (свежий ключ на вызов — иначе вернётся протухший URL).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID сотрудника

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
filename
required
string [ 1 .. 255 ] characters

Имя файла с расширением

mimeType
required
string
Enum: "image/jpeg" "image/png" "image/webp"

MIME-тип изображения (jpeg | png | webp)

Responses

Request samples

Content type
application/json
{
  • "filename": "avatar.jpg",
  • "mimeType": "image/jpeg"
}

Response samples

Content type
application/json
{}

Подтвердить загрузку аватара после PUT в MinIO

Переводит документ аватара в ready. Те же права записи, что и initiate. Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID сотрудника

documentId
required
string <uuid>

UUID документа из initiate

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
sha256
string = 64 characters

SHA-256 хеш загруженного файла (hex, 64 символа)

Responses

Request samples

Content type
application/json
{
  • "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "status": "ready",
  • "size": 1024
}

Перевести сотрудника на другой объект

Перевод между производственными объектами (HR 1.4). Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID сотрудника

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
toObjectId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID целевого производственного объекта

effectiveFrom
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Дата начала действия перевода (ISO 8601, YYYY-MM-DD); по умолчанию — сегодня

reason
required
string [ 1 .. 1000 ] characters

Обоснование перевода (1–1000 символов)

Responses

Request samples

Content type
application/json
{
  • "toObjectId": "33333333-3333-4333-8333-333333333333",
  • "effectiveFrom": "2026-05-18",
  • "reason": "Перевод на участок Борлы"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "fullName": "Иванов Иван Иванович",
  • "tabNumber": "TAB-001",
  • "birthDate": "2026-05-18",
  • "iin": "900101300123",
  • "birthPlace": "г. Караганда",
  • "positionId": "22222222-2222-4222-8222-222222222222",
  • "status": "active",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "orgNodeId": null,
  • "phone": "+7-700-000-0001",
  • "email": "ivanov@example.com",
  • "hiredAt": "2026-05-18",
  • "terminatedAt": null
}

Разместить сотрудника в узле оргструктуры (штатном расписании)

Назначение/снятие штатной позиции (ADR-0063). orgNodeId=null снимает с должности. Узел должен существовать, быть активным, узлом-позицией и совпадать по должности (HR-ORG-INV-04/08). Idempotent. Роли: Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID сотрудника

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
required
string or null
Any of
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID узла оргструктуры (штатная позиция); null = снять с должности

Responses

Request samples

Content type
application/json
{
  • "orgNodeId": "11111111-1111-4111-8111-111111111111"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "fullName": "Иванов Иван Иванович",
  • "tabNumber": "TAB-001",
  • "birthDate": "2026-05-18",
  • "iin": "900101300123",
  • "birthPlace": "г. Караганда",
  • "positionId": "22222222-2222-4222-8222-222222222222",
  • "status": "active",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "orgNodeId": null,
  • "phone": "+7-700-000-0001",
  • "email": "ivanov@example.com",
  • "hiredAt": "2026-05-18",
  • "terminatedAt": null
}

Заезд на вахту

FSM: active → onWatch. Idempotent. Роли: Engineer, Foreman, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID сотрудника

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
arrivalDate
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Дата заезда на вахту (ISO 8601, YYYY-MM-DD); по умолчанию — сегодня

Responses

Request samples

Content type
application/json
{
  • "arrivalDate": "2026-05-18"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "fullName": "Иванов Иван Иванович",
  • "tabNumber": "TAB-001",
  • "birthDate": "2026-05-18",
  • "iin": "900101300123",
  • "birthPlace": "г. Караганда",
  • "positionId": "22222222-2222-4222-8222-222222222222",
  • "status": "active",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "orgNodeId": null,
  • "phone": "+7-700-000-0001",
  • "email": "ivanov@example.com",
  • "hiredAt": "2026-05-18",
  • "terminatedAt": null
}

Отъезд с вахты

FSM: onWatch → active. Idempotent. Роли: Engineer, Foreman, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID сотрудника

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "fullName": "Иванов Иван Иванович",
  • "tabNumber": "TAB-001",
  • "birthDate": "2026-05-18",
  • "iin": "900101300123",
  • "birthPlace": "г. Караганда",
  • "positionId": "22222222-2222-4222-8222-222222222222",
  • "status": "active",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "orgNodeId": null,
  • "phone": "+7-700-000-0001",
  • "email": "ivanov@example.com",
  • "hiredAt": "2026-05-18",
  • "terminatedAt": null
}

Уход в отпуск

FSM: active → onVacation. Idempotent. Роли: Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID сотрудника

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
expectedReturnDate
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Ожидаемая дата возвращения с отпуска (ISO 8601, YYYY-MM-DD)

Responses

Request samples

Content type
application/json
{
  • "expectedReturnDate": "2026-06-15"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "fullName": "Иванов Иван Иванович",
  • "tabNumber": "TAB-001",
  • "birthDate": "2026-05-18",
  • "iin": "900101300123",
  • "birthPlace": "г. Караганда",
  • "positionId": "22222222-2222-4222-8222-222222222222",
  • "status": "active",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "orgNodeId": null,
  • "phone": "+7-700-000-0001",
  • "email": "ivanov@example.com",
  • "hiredAt": "2026-05-18",
  • "terminatedAt": null
}

Возврат из отпуска

FSM: onVacation → active. Idempotent. Роли: Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID сотрудника

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "fullName": "Иванов Иван Иванович",
  • "tabNumber": "TAB-001",
  • "birthDate": "2026-05-18",
  • "iin": "900101300123",
  • "birthPlace": "г. Караганда",
  • "positionId": "22222222-2222-4222-8222-222222222222",
  • "status": "active",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "orgNodeId": null,
  • "phone": "+7-700-000-0001",
  • "email": "ivanov@example.com",
  • "hiredAt": "2026-05-18",
  • "terminatedAt": null
}

Уволить сотрудника (HR 1.6)

FSM → terminated. Idempotent. Роли: Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID сотрудника

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
required
string [ 1 .. 500 ] characters

Причина увольнения

terminatedAt
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Дата увольнения (ISO 8601, YYYY-MM-DD); по умолчанию — сегодня

force
boolean

Пропустить проверку открытых assignments (HR-INV-05)

Responses

Request samples

Content type
application/json
{
  • "reason": "Увольнение по собственному желанию",
  • "terminatedAt": "2026-05-18",
  • "force": false
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "fullName": "Иванов Иван Иванович",
  • "tabNumber": "TAB-001",
  • "birthDate": "2026-05-18",
  • "iin": "900101300123",
  • "birthPlace": "г. Караганда",
  • "positionId": "22222222-2222-4222-8222-222222222222",
  • "status": "active",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "orgNodeId": null,
  • "phone": "+7-700-000-0001",
  • "email": "ivanov@example.com",
  • "hiredAt": "2026-05-18",
  • "terminatedAt": null
}

HR / Watches

Вахты и смены

Список вахт с фильтрами

Курсорная пагинация. Фильтрация по objectId, dateFrom, dateTo. Foreman/Mechanic — только свои объекты.

Authorizations:
beareroauth2
query Parameters
objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=33333333-3333-4333-8333-333333333333

Фильтр по производственному объекту

dateFrom
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: dateFrom=2026-06-01

Левая граница диапазона (по startDate), ISO 8601 YYYY-MM-DD

dateTo
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: dateTo=2026-06-30

Правая граница диапазона (по startDate), ISO 8601 YYYY-MM-DD

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: cursor=11111111-1111-4111-8111-111111111111

UUID последнего элемента предыдущей страницы

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": null
}

Создать вахту (HR 1.3, HR 6.1.1)

Создание 15-дневной вахты. HR-WCH-INV-02 (HR-INV-08): startDate ≥ now+3d, иначе 409.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
objectId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID производственного объекта

startDate
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Дата начала вахты (ISO 8601, YYYY-MM-DD)

endDate
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Дата окончания вахты (ISO 8601, YYYY-MM-DD)

force
boolean

admin override 3-дневного планирования (Q-WCH-1)

Responses

Request samples

Content type
application/json
{
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "startDate": "2026-06-01",
  • "endDate": "2026-06-15",
  • "force": false
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "startDate": "2026-05-18T08:00:00.000Z",
  • "endDate": "2026-05-18T08:00:00.000Z",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111"
}

Вахтовый ростер участка (bulk)

Плоский список не-отменённых вахтовых назначений всех вахт участка с привязкой к станку (EAM drill-rig) и ФИО — для группировки табель-сетки и блока «текущее назначение» карточки сотрудника без N+1. Object scope по objectId.

Authorizations:
beareroauth2
query Parameters
objectId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=33333333-3333-4333-8333-333333333333

Производственный объект (участок)

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Карточка вахты

Возвращает карточку вахтового цикла.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID вахты

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "startDate": "2026-05-18T08:00:00.000Z",
  • "endDate": "2026-05-18T08:00:00.000Z",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111"
}

Правка дат вахты до старта

Частичная правка startDate/endDate. HR-WCH-INV-03 (endDate ≥ startDate) → 422; правка после старта → 409 WATCH_ALREADY_STARTED. objectId неизменяем.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID вахты

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
startDate
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Новая дата начала вахты (ISO 8601, YYYY-MM-DD)

endDate
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Новая дата окончания вахты (ISO 8601, YYYY-MM-DD)

Responses

Request samples

Content type
application/json
{
  • "startDate": "2026-06-02",
  • "endDate": "2026-06-16"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "startDate": "2026-05-18T08:00:00.000Z",
  • "endDate": "2026-05-18T08:00:00.000Z",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111"
}

Заполнение вахты по должностям

План/факт/вакансия по должностям + общий процент заполнения (ADR-0082).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID вахты

Responses

Response samples

Content type
application/json
{
  • "watchId": "e536b5fe-5d1b-44d2-934d-1c4bf5c4f156",
  • "objectId": "e39ea5f2-2188-47f8-add0-f1976630af5e",
  • "positions": [
    ],
  • "unassigned": [
    ],
  • "totals": {
    }
}

Плановый состав вахты по должностям

Replace-семантика: заменяет весь план вахты. Возвращает пересчитанное заполнение (ADR-0082).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID вахты

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
required
Array of objects <= 200 items

Плановый состав вахты по должностям

Array (<= 200 items)
positionCode
required
string [ 1 .. 50 ] characters

Код должности (Position.code)

plannedCount
required
integer [ 0 .. 9007199254740991 ]

Плановая численность по должности на вахту

Responses

Request samples

Content type
application/json
{
  • "requirements": [
    ]
}

Response samples

Content type
application/json
{
  • "watchId": "e536b5fe-5d1b-44d2-934d-1c4bf5c4f156",
  • "objectId": "e39ea5f2-2188-47f8-add0-f1976630af5e",
  • "positions": [
    ],
  • "unassigned": [
    ],
  • "totals": {
    }
}

Сгенерировать смены day/night на дни вахты

Идемпотентно создаёт смены на каждый день вахты → драфты табеля (ADR-0082, B1). Существующие смены пропускаются.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID вахты

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "created": 28,
  • "skipped": 2
}

Список назначений (заездов) вахты

Read-model назначений одной вахты: строки, на которых FE строит FSM-переходы arrive/depart/cancel. Курсорная пагинация, фильтр по статусу. Object-scope — через вахту.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID вахты

query Parameters
status
string
Enum: "scheduled" "active" "completed" "cancelled"
Example: status=scheduled

Фильтр по статусу FSM назначения

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: cursor=11111111-1111-4111-8111-111111111111

UUID последнего элемента предыдущей страницы

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": null
}

Включить сотрудника в вахту (FSM → scheduled)

HR-WCH-INV-01: departureDate ≥ arrivalDate, иначе 422.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID вахты

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
personnelId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID сотрудника

arrivalDate
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Плановая дата заезда (ISO 8601, YYYY-MM-DD)

departureDate
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Плановая дата отъезда (ISO 8601, YYYY-MM-DD)

assetId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

UUID станка (EAM drill-rig), опционально — ADR-0082

shiftType
string
Enum: "day" "night"

Смена день/ночь, опционально — HR_dorabotka Задача 4

Responses

Request samples

Content type
application/json
{
  • "personnelId": "22222222-2222-4222-8222-222222222222",
  • "arrivalDate": "2026-06-01",
  • "departureDate": "2026-06-15"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "watchId": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "22222222-2222-4222-8222-222222222222",
  • "assetId": null,
  • "shiftType": null,
  • "arrivalDate": "2026-05-18T08:00:00.000Z",
  • "departureDate": "2026-05-18T08:00:00.000Z",
  • "status": "scheduled",
  • "cancelledAt": null,
  • "cancelReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111"
}

Заезд: FSM scheduled → active

Side-effect — Personnel → on_watch (через hr/personnel handler).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID назначения

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "watchId": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "22222222-2222-4222-8222-222222222222",
  • "assetId": null,
  • "shiftType": null,
  • "arrivalDate": "2026-05-18T08:00:00.000Z",
  • "departureDate": "2026-05-18T08:00:00.000Z",
  • "status": "scheduled",
  • "cancelledAt": null,
  • "cancelReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111"
}

Отъезд: FSM active → completed

Side-effect — Personnel → active (через hr/personnel handler).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID назначения

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
departureDate
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Фактическая дата отъезда (ISO 8601, YYYY-MM-DD); по умолчанию — плановая departureDate

Responses

Request samples

Content type
application/json
{
  • "departureDate": "2026-06-15"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "watchId": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "22222222-2222-4222-8222-222222222222",
  • "assetId": null,
  • "shiftType": null,
  • "arrivalDate": "2026-05-18T08:00:00.000Z",
  • "departureDate": "2026-05-18T08:00:00.000Z",
  • "status": "scheduled",
  • "cancelledAt": null,
  • "cancelReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111"
}

Отмена назначения: FSM scheduled → cancelled

HR-WCH-INV-07: после active отменить нельзя — использовать /depart.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID назначения

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
string <= 1000 characters

Комментарий к операции (до 1000 символов)

Responses

Request samples

Content type
application/json
{
  • "reason": "Сотрудник заболел до заезда"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "watchId": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "22222222-2222-4222-8222-222222222222",
  • "assetId": null,
  • "shiftType": null,
  • "arrivalDate": "2026-05-18T08:00:00.000Z",
  • "departureDate": "2026-05-18T08:00:00.000Z",
  • "status": "scheduled",
  • "cancelledAt": null,
  • "cancelReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111"
}

Список смен с фильтрами

Курсорная пагинация. Фильтрация по objectId, shiftDate, shiftType, watchId.

Authorizations:
beareroauth2
query Parameters
objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=33333333-3333-4333-8333-333333333333

Фильтр по производственному объекту

shiftDate
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: shiftDate=2026-06-01

Фильтр по дате смены (ISO 8601, YYYY-MM-DD)

shiftType
string
Enum: "day" "night"
Example: shiftType=day

Фильтр по типу смены

watchId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: watchId=11111111-1111-4111-8111-111111111111

Фильтр по родительской вахте

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: cursor=11111111-1111-4111-8111-111111111111

UUID последнего элемента предыдущей страницы

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": null
}

Создать 11-часовую смену

HR-WCH-INV-04: UNIQUE(objectId, shiftDate, shiftType). HR-WCH-INV-06: durationHours=11.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
watchId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID родительской вахты (опционально)

objectId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID производственного объекта

shiftDate
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Дата смены (ISO 8601, YYYY-MM-DD)

shiftType
required
string
Enum: "day" "night"

Тип смены (day / night)

foremanId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID мастера смены (опционально)

Responses

Request samples

Content type
application/json
{
  • "watchId": "11111111-1111-4111-8111-111111111111",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "shiftDate": "2026-06-01",
  • "shiftType": "day",
  • "foremanId": "22222222-2222-4222-8222-222222222222"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "watchId": "11111111-1111-4111-8111-111111111111",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "shiftDate": "2026-05-18T08:00:00.000Z",
  • "shiftType": "day",
  • "durationHours": 11,
  • "foremanId": "22222222-2222-4222-8222-222222222222",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111",
  • "substitutions": [ ]
}

Карточка смены

Возвращает карточку 11-часовой смены.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID смены

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "watchId": "11111111-1111-4111-8111-111111111111",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "shiftDate": "2026-05-18T08:00:00.000Z",
  • "shiftType": "day",
  • "durationHours": 11,
  • "foremanId": "22222222-2222-4222-8222-222222222222",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111",
  • "substitutions": [ ]
}

Правка даты/типа/привязки смены

Частичная правка shiftDate/shiftType/watchId. HR-WCH-INV-04: новый кортеж (objectId, shiftDate, shiftType) уникален, иначе 409. objectId/durationHours неизменяемы; мастер смены — через PUT /foreman.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID смены

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
shiftDate
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Новая дата смены (ISO 8601, YYYY-MM-DD)

shiftType
string
Enum: "day" "night"

Новый тип смены (day / night)

string or null

Responses

Request samples

Content type
application/json
{
  • "shiftDate": "2026-06-02",
  • "shiftType": "night",
  • "watchId": "11111111-1111-4111-8111-111111111111"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "watchId": "11111111-1111-4111-8111-111111111111",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "shiftDate": "2026-05-18T08:00:00.000Z",
  • "shiftType": "day",
  • "durationHours": 11,
  • "foremanId": "22222222-2222-4222-8222-222222222222",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111",
  • "substitutions": [ ]
}

Назначить мастера смены

HR-WCH-INV-05 (HR-INV-06): foreman должен быть active/onWatch. Событие hr.shift.foreman-assigned слушает PRD 1.0.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID смены

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
foremanId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID нового мастера смены

Responses

Request samples

Content type
application/json
{
  • "foremanId": "22222222-2222-4222-8222-222222222222"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "watchId": "11111111-1111-4111-8111-111111111111",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "shiftDate": "2026-05-18T08:00:00.000Z",
  • "shiftType": "day",
  • "durationHours": 11,
  • "foremanId": "22222222-2222-4222-8222-222222222222",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111",
  • "substitutions": [ ]
}

Регистрация замены/подмены в смене (HR 1.3)

Foreman регистрирует подмену; не меняет foremanId.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID смены

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
replacedPersonnelId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID заменяемого сотрудника

substitutePersonnelId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID подменяющего сотрудника

reason
string <= 1000 characters

Комментарий к операции (до 1000 символов)

Responses

Request samples

Content type
application/json
{
  • "replacedPersonnelId": "22222222-2222-4222-8222-222222222222",
  • "substitutePersonnelId": "22222222-2222-4222-8222-222222222222",
  • "reason": "Заболел в день смены"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "watchId": "11111111-1111-4111-8111-111111111111",
  • "objectId": "33333333-3333-4333-8333-333333333333",
  • "shiftDate": "2026-05-18T08:00:00.000Z",
  • "shiftType": "day",
  • "durationHours": 11,
  • "foremanId": "22222222-2222-4222-8222-222222222222",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111",
  • "substitutions": [ ]
}

HR / Timesheet

Табельный учёт рабочего времени

Табель за период

Курсорная пагинация. Foreman видит только свои objects (productionObjectIds). dateFrom/dateTo — inclusive.

Authorizations:
beareroauth2
query Parameters
objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=33333333-3333-4333-8333-333333333333

Фильтр по производственному объекту

personnelId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: personnelId=22222222-2222-4222-8222-222222222222

Фильтр по сотруднику

shiftId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: shiftId=11111111-1111-4111-8111-111111111111

Фильтр по смене

shiftReportId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: shiftReportId=11111111-1111-4111-8111-111111111111

Фильтр по сменному отчёту

status
string
Enum: "draft" "confirmed" "adjusted" "reverted"
Example: status=confirmed

Фильтр по статусу записи

dateFrom
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: dateFrom=2026-05-18

Нижняя граница периода (ISO 8601, YYYY-MM-DD) — включительно

dateTo
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: dateTo=2026-05-18

Верхняя граница периода (ISO 8601, YYYY-MM-DD) — включительно

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: cursor=11111111-1111-4111-8111-111111111111

UUID последнего элемента предыдущей страницы

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": null
}

Экспорт табеля за период (HR 5.1)

XLSX-выгрузка табеля. Foreman видит только свои objects. Пока возвращает JSON-массив; формат XLSX — TODO до prod (см. open Q-TS-1).

Authorizations:
beareroauth2
query Parameters
objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=33333333-3333-4333-8333-333333333333

Фильтр по производственному объекту

dateFrom
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: dateFrom=2026-05-18

Нижняя граница периода (ISO 8601, YYYY-MM-DD) — включительно

dateTo
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: dateTo=2026-05-18

Верхняя граница периода (ISO 8601, YYYY-MM-DD) — включительно

Responses

Response samples

Content type
application/json
{
  • "title": "Asset already decommissioned",
  • "status": 409,
  • "code": "ASSET_ALREADY_DECOMMISSIONED",
  • "instance": "/api/v1/eam/assets/11111111-1111-4111-8111-111111111111"
}

Карточка записи табеля

Возвращает одну запись табеля. Object scope по shift.objectId записи.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи табеля

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "shiftId": "22222222-2222-4222-8222-222222222222",
  • "personnelId": "33333333-3333-4333-8333-333333333333",
  • "hoursWorked": 10,
  • "downtimeHours": 1,
  • "status": "confirmed",
  • "confirmedFromShiftReport": true,
  • "shiftReportId": "11111111-1111-4111-8111-111111111111",
  • "adjustmentReason": null,
  • "adjustedBy": null,
  • "adjustedAt": null
}

Ручная корректировка часов записи табеля (HR 6.2.5)

Idempotent. Поле reason обязательно (HR-TS-INV-02). Сумма hoursWorked + downtimeHours ≤ 11 (HR-TS-INV-01) — иначе 422 hours_exceed_shift_duration. Роли: Engineer, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи табеля

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
hoursWorked
required
number [ 0 .. 11 ]

Отработанные часы после корректировки (0–11)

downtimeHours
required
number [ 0 .. 11 ]

Часы простоя после корректировки (0–11)

reason
required
string [ 1 .. 500 ] characters

Причина корректировки — обязательное поле (HR-TS-INV-02)

Responses

Request samples

Content type
application/json
{
  • "hoursWorked": 9,
  • "downtimeHours": 1,
  • "reason": "Сотрудник ушёл раньше по согласованию инженера"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "shiftId": "22222222-2222-4222-8222-222222222222",
  • "personnelId": "33333333-3333-4333-8333-333333333333",
  • "hoursWorked": 10,
  • "downtimeHours": 1,
  • "status": "confirmed",
  • "confirmedFromShiftReport": true,
  • "shiftReportId": "11111111-1111-4111-8111-111111111111",
  • "adjustmentReason": null,
  • "adjustedBy": null,
  • "adjustedAt": null
}

HR / Asset Assignments

Закрепление активов за персоналом

Текущие закрепления (по умолчанию active=true)

Курсорная пагинация. Фильтрация по objectId / assetId / personnelId / role / active. Роли: CEO, Engineer, Foreman, Mechanic, OtibSpecialist, Admin.

Authorizations:
beareroauth2
query Parameters
objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по производственному объекту

assetId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: assetId=11111111-1111-4111-8111-111111111111

Фильтр по UUID актива

personnelId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: personnelId=11111111-1111-4111-8111-111111111111

Фильтр по UUID сотрудника

role
string
Enum: "primary_operator" "shift_operator" "mechanic"
Example: role=primary_operator

Фильтр по роли закрепления

boolean or string
Example: active=true

true — только active (toDate IS NULL), false — все, включая закрытые

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: cursor=11111111-1111-4111-8111-111111111111

UUID последнего элемента предыдущей страницы

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": null
}

Закрепить сотрудника на технику (HR 1.4)

Для primary_operator/mechanic предыдущее активное закрепление на той же паре (asset, role) закрывается автоматически. Idempotent. Роли: Engineer, Foreman, Mechanic, Admin.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
assetId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID актива (техники)

personnelId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID сотрудника

role
required
string
Enum: "primary_operator" "shift_operator" "mechanic"

Роль закрепления

fromDate
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Дата начала закрепления (ISO 8601, YYYY-MM-DD)

reason
string [ 1 .. 500 ] characters

Основание закрепления (опционально)

Responses

Request samples

Content type
application/json
{
  • "assetId": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "22222222-2222-4222-8222-222222222222",
  • "role": "primary_operator",
  • "fromDate": "2026-05-18",
  • "reason": "Плановая ротация смены"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "assetId": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "role": "primary_operator",
  • "fromDate": "2026-05-18T08:00:00.000Z",
  • "toDate": "2026-05-18T08:00:00.000Z",
  • "assignedBy": "11111111-1111-4111-8111-111111111111",
  • "reason": "Плановая ротация смены",
  • "closedBy": "11111111-1111-4111-8111-111111111111",
  • "closeReason": null,
  • "closeCause": null,
  • "isActive": true
}

Карточка закрепления

Возвращает закрепление по id. Object scope по связанному активу.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID закрепления

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "assetId": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "role": "primary_operator",
  • "fromDate": "2026-05-18T08:00:00.000Z",
  • "toDate": "2026-05-18T08:00:00.000Z",
  • "assignedBy": "11111111-1111-4111-8111-111111111111",
  • "reason": "Плановая ротация смены",
  • "closedBy": "11111111-1111-4111-8111-111111111111",
  • "closeReason": null,
  • "closeCause": null,
  • "isActive": true
}

Закрыть закрепление (to_date=now, cause=manual)

Idempotent. Роли: Engineer, Foreman, Mechanic, Admin. Object scope по связанному активу.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID закрепления

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
toDate
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Дата закрытия закрепления (ISO 8601); по умолчанию — сегодня

reason
string [ 1 .. 500 ] characters

Основание закрытия (опционально)

Responses

Request samples

Content type
application/json
{
  • "toDate": "2026-05-18",
  • "reason": "Перевод на другой объект"
}

Response samples

Content type
application/json
{
  • "title": "Asset already decommissioned",
  • "status": 409,
  • "code": "ASSET_ALREADY_DECOMMISSIONED",
  • "instance": "/api/v1/eam/assets/11111111-1111-4111-8111-111111111111"
}

HR / User Accounts

Учётные записи (Keycloak ↔ Personnel)

Список учётных записей (admin only)

Курсорная пагинация. Фильтры status / systemRoleCode / search.

Authorizations:
beareroauth2
query Parameters
status
string
Enum: "active" "locked" "deactivated"
Example: status=active

Фильтр по статусу FSM

systemRoleCode
string
Example: systemRoleCode=foreman

Фильтр по коду роли (например, "foreman"). Возвращает учётки, чей systemRoleIds содержит роль с этим code.

objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по производственному объекту (через Personnel.object_id)

search
string <= 200 characters
Example: search=ivan

Поиск по login, ФИО, табельному номеру

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: cursor=11111111-1111-4111-8111-111111111111

UUID последнего элемента предыдущей страницы

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": null
}

Создать учётную запись (HR 1.6)

Создаёт UserAccount для существующего Personnel. Проверки: HR-UA-INV-01 (login unique), HR-UA-INV-03 (one active per personnel), HR-UA-INV-15 (валидная комбинация ролей). Возвращает iamProvisioningStatus=pending; local Keycloak-user создаётся асинхронно worker-ом. Публикует hr.user-account.created.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
personnelId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID Personnel из hr/personnel

login
required
string [ 3 .. 50 ] characters ^[a-z][a-z0-9._-]*$

Уникальный login (= keycloak username)

systemRoleIds
Array of strings <uuid> non-empty [ items <uuid >^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{... ]

Начальный набор ролей. Опционально (ADR-0072): если не передан — инициализируется дефолтной ролью должности (Position.systemRoleId). Передаётся явно для override / совмещения (HR 6.1.2; HR-UA-INV-15). Должность без дефолтной роли + пустой запрос → 422.

Responses

Request samples

Content type
application/json
{
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "login": "ivanov",
  • "systemRoleIds": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "systemRoleIds": [
    ],
  • "login": "ivanov",
  • "keycloakSubject": null,
  • "status": "active",
  • "iamProvisioningStatus": "pending",
  • "iamProvisioningError": null,
  • "iamProvisionedAt": "2026-05-18T08:00:00.000Z",
  • "lastLoginAt": "2026-05-18T08:00:00.000Z",
  • "failedLoginCount": 0,
  • "lockedUntil": "2026-05-18T08:00:00.000Z",
  • "deactivatedAt": "2026-05-18T08:00:00.000Z",
  • "deactivationReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111"
}

Моя учётка (self-service)

Возвращает UserAccount, связанный с keycloak_subject текущего JWT. Доступно любой аутентифицированной роли. Если Keycloak provision ещё не завершился, делает fallback по personnelId.

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "systemRoleIds": [
    ],
  • "login": "ivanov",
  • "keycloakSubject": null,
  • "status": "active",
  • "iamProvisioningStatus": "pending",
  • "iamProvisioningError": null,
  • "iamProvisionedAt": "2026-05-18T08:00:00.000Z",
  • "lastLoginAt": "2026-05-18T08:00:00.000Z",
  • "failedLoginCount": 0,
  • "lockedUntil": "2026-05-18T08:00:00.000Z",
  • "deactivatedAt": "2026-05-18T08:00:00.000Z",
  • "deactivationReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111"
}

Мой журнал безопасности (self-service, HR 1.6)

Курсорная страница собственного security_audit_log (новые сверху). Учётка резолвится по JWT так же, как в GET /me — видны ТОЛЬКО свои записи. Фильтры: action, occurredFrom/occurredTo.

Authorizations:
beareroauth2
query Parameters
action
string
Enum: "created" "deactivated" "roles-changed" "password-reset" "locked" "unlocked" "identity-linked" "iam-provisioning-requested" "iam-provisioned" "iam-provisioning-failed"
Example: action=roles-changed

Фильтр по типу операции

occurredFrom
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: occurredFrom=2026-05-18T08:00:00.000Z

Начало периода (inclusive, ISO 8601)

occurredTo
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: occurredTo=2026-05-18T08:00:00.000Z

Конец периода (inclusive, ISO 8601)

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: cursor=11111111-1111-4111-8111-111111111111

UUID последнего элемента предыдущей страницы

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": null
}

Карточка учётки (admin only; self-service через /me)

Возвращает полную карточку UserAccount по id. Доступно только Admin. Для self-service использовать GET /hr/user-accounts/me.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID учётки

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "systemRoleIds": [
    ],
  • "login": "ivanov",
  • "keycloakSubject": null,
  • "status": "active",
  • "iamProvisioningStatus": "pending",
  • "iamProvisioningError": null,
  • "iamProvisionedAt": "2026-05-18T08:00:00.000Z",
  • "lastLoginAt": "2026-05-18T08:00:00.000Z",
  • "failedLoginCount": 0,
  • "lockedUntil": "2026-05-18T08:00:00.000Z",
  • "deactivatedAt": "2026-05-18T08:00:00.000Z",
  • "deactivationReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111"
}

Журнал безопасности учётки (admin only, HR 1.6)

Курсорная страница security_audit_log по конкретной учётке (новые сверху). Только Admin. Для self-service — GET /hr/user-accounts/me/audit-log.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID учётки

query Parameters
action
string
Enum: "created" "deactivated" "roles-changed" "password-reset" "locked" "unlocked" "identity-linked" "iam-provisioning-requested" "iam-provisioned" "iam-provisioning-failed"
Example: action=roles-changed

Фильтр по типу операции

occurredFrom
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: occurredFrom=2026-05-18T08:00:00.000Z

Начало периода (inclusive, ISO 8601)

occurredTo
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: occurredTo=2026-05-18T08:00:00.000Z

Конец периода (inclusive, ISO 8601)

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: cursor=11111111-1111-4111-8111-111111111111

UUID последнего элемента предыдущей страницы

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": null
}

Изменить роли пользователя (атомарно, без двойного согласования; Q2 PO)

Полная замена массива systemRoleIds одним PATCH. Защита: HR-UA-INV-04 (нельзя убрать admin у последнего admin), HR-UA-INV-08 (admin не меняет свои роли), HR-UA-INV-15 (валидная комбинация). Публикует hr.user-account.roles-changed.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID учётки

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
systemRoleIds
required
Array of strings <uuid> non-empty [ items <uuid >^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{... ]

Новый полный набор ролей (replace, не patch). Должен быть валидной комбинацией (HR-UA-INV-15).

reason
required
string [ 1 .. 500 ] characters

Обязательная причина — попадает в security_audit_log (HR 1.6)

Responses

Request samples

Content type
application/json
{
  • "systemRoleIds": [
    ],
  • "reason": "Повышение после аттестации"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "systemRoleIds": [
    ],
  • "login": "ivanov",
  • "keycloakSubject": null,
  • "status": "active",
  • "iamProvisioningStatus": "pending",
  • "iamProvisioningError": null,
  • "iamProvisionedAt": "2026-05-18T08:00:00.000Z",
  • "lastLoginAt": "2026-05-18T08:00:00.000Z",
  • "failedLoginCount": 0,
  • "lockedUntil": "2026-05-18T08:00:00.000Z",
  • "deactivatedAt": "2026-05-18T08:00:00.000Z",
  • "deactivationReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111"
}

Деактивировать учётку (terminal)

active|locked → deactivated. Защита HR-UA-INV-04: нельзя деактивировать последнего активного admin в организации.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID учётки

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
required
string [ 1 .. 500 ] characters

Обязательно — попадает в security_audit_log (HR 1.6, HR-UA-INV-05)

Responses

Request samples

Content type
application/json
{
  • "reason": "Увольнение"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "systemRoleIds": [
    ],
  • "login": "ivanov",
  • "keycloakSubject": null,
  • "status": "active",
  • "iamProvisioningStatus": "pending",
  • "iamProvisioningError": null,
  • "iamProvisionedAt": "2026-05-18T08:00:00.000Z",
  • "lastLoginAt": "2026-05-18T08:00:00.000Z",
  • "failedLoginCount": 0,
  • "lockedUntil": "2026-05-18T08:00:00.000Z",
  • "deactivatedAt": "2026-05-18T08:00:00.000Z",
  • "deactivationReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111"
}

Принудительная блокировка (admin manual)

active → locked. Публикует hr.user-account.locked.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID учётки

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
required
string [ 1 .. 500 ] characters

Причина блокировки — попадает в security_audit_log

string or null

Responses

Request samples

Content type
application/json
{
  • "reason": "Расследование инцидента безопасности",
  • "lockedUntil": "2026-05-18T08:00:00.000Z"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "systemRoleIds": [
    ],
  • "login": "ivanov",
  • "keycloakSubject": null,
  • "status": "active",
  • "iamProvisioningStatus": "pending",
  • "iamProvisioningError": null,
  • "iamProvisionedAt": "2026-05-18T08:00:00.000Z",
  • "lastLoginAt": "2026-05-18T08:00:00.000Z",
  • "failedLoginCount": 0,
  • "lockedUntil": "2026-05-18T08:00:00.000Z",
  • "deactivatedAt": "2026-05-18T08:00:00.000Z",
  • "deactivationReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111"
}

Разблокировать учётку

locked → active, failed_login_count = 0.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID учётки

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "systemRoleIds": [
    ],
  • "login": "ivanov",
  • "keycloakSubject": null,
  • "status": "active",
  • "iamProvisioningStatus": "pending",
  • "iamProvisioningError": null,
  • "iamProvisionedAt": "2026-05-18T08:00:00.000Z",
  • "lastLoginAt": "2026-05-18T08:00:00.000Z",
  • "failedLoginCount": 0,
  • "lockedUntil": "2026-05-18T08:00:00.000Z",
  • "deactivatedAt": "2026-05-18T08:00:00.000Z",
  • "deactivationReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111"
}

Сбросить пароль (HR 1.6)

Выпускает one-time password через Keycloak Admin API. Публикует hr.user-account.password-reset-issued. Доступно после успешного IAM provisioning, когда у UserAccount есть keycloakSubject. Реальный Keycloak adapter подключается через KEYCLOAK_PASSWORD_RESET_ADAPTER provider override в apps/api/src/modules/iam — по умолчанию используется stub-адаптер.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID учётки

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "resetToken": "kc-reset-xyz",
  • "expiresAt": "2026-05-18T08:00:00.000Z",
  • "deliveryChannel": "admin_display"
}

Повторить IAM provisioning local Keycloak-user

Admin-only retry для HR-driven local onboarding. Для pending/failed очищает ошибку, ставит iamProvisioningStatus=pending и публикует hr.user-account.iam-provisioning-requested. Для provisioned — no-op.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID учётки

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "systemRoleIds": [
    ],
  • "login": "ivanov",
  • "keycloakSubject": null,
  • "status": "active",
  • "iamProvisioningStatus": "pending",
  • "iamProvisioningError": null,
  • "iamProvisionedAt": "2026-05-18T08:00:00.000Z",
  • "lastLoginAt": "2026-05-18T08:00:00.000Z",
  • "failedLoginCount": 0,
  • "lockedUntil": "2026-05-18T08:00:00.000Z",
  • "deactivatedAt": "2026-05-18T08:00:00.000Z",
  • "deactivationReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "createdBy": "11111111-1111-4111-8111-111111111111"
}

Auth

Серверный logout — отозвать текущую SSO-сессию (BL-17)

Заносит sid текущего токена в denylist на ≈SSO Session Max. Последующие запросы с этим токеном (и refresh-токены той же сессии) получают 401. Клиент дополнительно должен сбросить свои токены. Доступно любой аутентифицированной роли.

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
{
  • "status": "logged_out"
}

EAM / Maintenance plans

Список графиков ТО/ППР

Курсорная пагинация, фильтры year/month/status. Роли: Engineer, Mechanic, CEO.

Authorizations:
beareroauth2
query Parameters
year
integer [ 2000 .. 2100 ]
Example: year=2026

Фильтр по году периода

month
integer [ 1 .. 12 ]
Example: month=6

Фильтр по месяцу периода

status
string
Enum: "draft" "pending_agreement" "agreed" "approved" "superseded"
Example: status=approved

Фильтр по статусу FSM

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: cursor=11111111-1111-4111-8111-111111111111

UUID последнего элемента предыдущей страницы

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": null
}

Создать черновик графика

Создаёт draft на период. Роли: Engineer.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
year
required
integer [ 2000 .. 2100 ]

Год периода графика

month
required
integer [ 1 .. 12 ]

Месяц периода графика (1..12)

string or null
Default: null

Responses

Request samples

Content type
application/json
{
  • "year": 2026,
  • "month": 6,
  • "scopeObjectId": null
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "year": 2026,
  • "month": 6,
  • "scopeObjectId": null,
  • "status": "draft",
  • "currentVersionId": null,
  • "createdBy": "44444444-4444-4444-8444-444444444444",
  • "agreedBy": null,
  • "agreedAt": null,
  • "approvedBy": null,
  • "approvedAt": null,
  • "rejectedBy": null,
  • "rejectedAt": null,
  • "rejectionReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

График ТО/ППР по id (с разбивкой по активам)

Утверждённый график возвращает frozen-снимок версии; черновик — живой пересчёт проекции.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID графика

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "year": 2026,
  • "month": 6,
  • "scopeObjectId": null,
  • "status": "draft",
  • "currentVersionId": null,
  • "createdBy": "44444444-4444-4444-8444-444444444444",
  • "agreedBy": null,
  • "agreedAt": null,
  • "approvedBy": null,
  • "approvedAt": null,
  • "rejectedBy": null,
  • "rejectedAt": null,
  • "rejectionReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Отправить на согласование

FSM: draft → pending_agreement. Замораживает снимок проекции в версию. Роли: Engineer.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID графика

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "year": 2026,
  • "month": 6,
  • "scopeObjectId": null,
  • "status": "draft",
  • "currentVersionId": null,
  • "createdBy": "44444444-4444-4444-8444-444444444444",
  • "agreedBy": null,
  • "agreedAt": null,
  • "approvedBy": null,
  • "approvedAt": null,
  • "rejectedBy": null,
  • "rejectedAt": null,
  • "rejectionReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Согласовать (главный механик)

FSM: pending_agreement → agreed. Роли: Mechanic.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID графика

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "year": 2026,
  • "month": 6,
  • "scopeObjectId": null,
  • "status": "draft",
  • "currentVersionId": null,
  • "createdBy": "44444444-4444-4444-8444-444444444444",
  • "agreedBy": null,
  • "agreedAt": null,
  • "approvedBy": null,
  • "approvedAt": null,
  • "rejectedBy": null,
  • "rejectedAt": null,
  • "rejectionReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Утвердить (технический директор)

FSM: agreed → approved. Снимок зафиксирован. Роли: CEO.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID графика

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "year": 2026,
  • "month": 6,
  • "scopeObjectId": null,
  • "status": "draft",
  • "currentVersionId": null,
  • "createdBy": "44444444-4444-4444-8444-444444444444",
  • "agreedBy": null,
  • "agreedAt": null,
  • "approvedBy": null,
  • "approvedAt": null,
  • "rejectedBy": null,
  • "rejectedAt": null,
  • "rejectionReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Отклонить график

FSM: pending_agreement | agreed → draft (с причиной). Роли: Mechanic, CEO.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID графика

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
required
string [ 2 .. 500 ] characters

Причина отклонения графика

Responses

Request samples

Content type
application/json
{
  • "reason": "Нормы устарели, пересчитать темп"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "year": 2026,
  • "month": 6,
  • "scopeObjectId": null,
  • "status": "draft",
  • "currentVersionId": null,
  • "createdBy": "44444444-4444-4444-8444-444444444444",
  • "agreedBy": null,
  • "agreedAt": null,
  • "approvedBy": null,
  • "approvedAt": null,
  • "rejectedBy": null,
  • "rejectedAt": null,
  • "rejectionReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Пересмотреть утверждённый график

FSM: approved → draft (новая версия на следующем submit). Роли: Engineer.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID графика

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "year": 2026,
  • "month": 6,
  • "scopeObjectId": null,
  • "status": "draft",
  • "currentVersionId": null,
  • "createdBy": "44444444-4444-4444-8444-444444444444",
  • "agreedBy": null,
  • "agreedAt": null,
  • "approvedBy": null,
  • "approvedAt": null,
  • "rejectedBy": null,
  • "rejectedAt": null,
  • "rejectionReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Добавить плановый простой (ППР)

Добавляет ремонт/консервацию в строку графика. Только в статусе draft. Роли: Mechanic, Engineer.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID графика

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
assetId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID актива (в области плана)

date
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

День простоя (ISO YYYY-MM-DD, в месяце плана)

hours
required
number ( 0 .. 22 ]

Длительность простоя, ч (0 < ч ≤ 22)

kind
string
Default: "repair"
Enum: "repair" "conservation" "other"

Тип простоя: ремонт / консервация / прочее

description
required
string [ 1 .. 500 ] characters

Описание простоя

Responses

Request samples

Content type
application/json
{
  • "assetId": "11111111-1111-4111-8111-111111111111",
  • "date": "2026-06-09",
  • "hours": 11,
  • "kind": "repair",
  • "description": "Устранение утечки ДВС"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "year": 2026,
  • "month": 6,
  • "scopeObjectId": null,
  • "status": "draft",
  • "currentVersionId": null,
  • "createdBy": "44444444-4444-4444-8444-444444444444",
  • "agreedBy": null,
  • "agreedAt": null,
  • "approvedBy": null,
  • "approvedAt": null,
  • "rejectedBy": null,
  • "rejectedAt": null,
  • "rejectionReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Изменить плановый простой (ППР)

Правит часы/дату/описание. Только в статусе draft. Роли: Mechanic, Engineer.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID графика

repairId
required
string <uuid>

UUID планового простоя

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
date
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

День простоя (ISO YYYY-MM-DD, в месяце плана)

hours
number ( 0 .. 22 ]

Длительность простоя, ч (0 < ч ≤ 22)

kind
string
Enum: "repair" "conservation" "other"
description
string [ 1 .. 500 ] characters

Responses

Request samples

Content type
application/json
{
  • "hours": 6,
  • "description": "Замена РВД"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "year": 2026,
  • "month": 6,
  • "scopeObjectId": null,
  • "status": "draft",
  • "currentVersionId": null,
  • "createdBy": "44444444-4444-4444-8444-444444444444",
  • "agreedBy": null,
  • "agreedAt": null,
  • "approvedBy": null,
  • "approvedAt": null,
  • "rejectedBy": null,
  • "rejectedAt": null,
  • "rejectionReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

Удалить плановый простой (ППР)

Soft-delete простоя. Только в статусе draft. Роли: Mechanic, Engineer.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID графика

repairId
required
string <uuid>

UUID планового простоя

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "year": 2026,
  • "month": 6,
  • "scopeObjectId": null,
  • "status": "draft",
  • "currentVersionId": null,
  • "createdBy": "44444444-4444-4444-8444-444444444444",
  • "agreedBy": null,
  • "agreedAt": null,
  • "approvedBy": null,
  • "approvedAt": null,
  • "rejectedBy": null,
  • "rejectedAt": null,
  • "rejectionReason": null,
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z",
  • "lines": [
    ]
}

HR / Personnel Orders

Реестр операций КДП (метаданные форм — 19 типов)

Каталог OperationDef для рендеринга форм/валидации на FE (ADR-0042). Роли: CEO, Engineer, Foreman, Admin.

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Журнал кадровых документов с фильтрами

Курсорная пагинация. Фильтры personnelId/objectId/category/operationType/status. Foreman — только свой объект (object-scope). Роли: CEO, Engineer, Foreman, Admin.

Authorizations:
beareroauth2
query Parameters
personnelId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: personnelId=11111111-1111-4111-8111-111111111111

Фильтр по сотруднику

objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по производственному объекту

category
string
Enum: "contract" "discipline" "leave" "data"
Example: category=leave

Фильтр по категории операции

operationType
string
Enum: "conclude" "amend" "notice_emp_change" "notice_employer_change" "terminate" "notice_employer_term" "notice_to_employer_term" "suspend" "discipline" "discipline_remove" "leave_any" "leave_schedule" "leave_recall" "business_trip" "additional_work" "update_data" "military" "order_generic" "reports"
Example: operationType=leave_any

Фильтр по типу операции

status
string
Enum: "draft" "issued" "revoked" "superseded"
Example: status=issued

Фильтр по статусу FSM приказа

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: cursor=11111111-1111-4111-8111-111111111111

UUID последнего элемента предыдущей страницы

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": null
}

Создать черновик приказа

Создаёт draft (эффекта и номера нет). payload валидируется схемой operationType. Idempotent. Роли: Admin.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
personnelId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID сотрудника (cross-aggregate)

operationType
required
string
Enum: "conclude" "amend" "notice_emp_change" "notice_employer_change" "terminate" "notice_employer_term" "notice_to_employer_term" "suspend" "discipline" "discipline_remove" "leave_any" "leave_schedule" "leave_recall" "business_trip" "additional_work" "update_data" "military" "order_generic" "reports"

Тип кадровой операции (одна из 19 реестра, ADR-0067)

required
object

Поля документа по схеме operationType (валидируются реестром)

effectiveDate
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Дата вступления приказа в силу (ISO 8601, YYYY-MM-DD)

Responses

Request samples

Content type
application/json
{
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "operationType": "leave_any",
  • "payload": {
    },
  • "effectiveDate": "2026-05-28"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "operationType": "leave_any",
  • "category": "leave",
  • "effect": "leave",
  • "prefix": "ПР-",
  • "documentNumber": "ПР-2026-00042",
  • "status": "issued",
  • "payload": {
    },
  • "templateId": "11111111-1111-4111-8111-111111111111",
  • "templateVersion": 1,
  • "effectiveDate": "2026-05-28",
  • "issuedAt": "2026-05-18T08:00:00.000Z",
  • "issuedBy": "11111111-1111-4111-8111-111111111111",
  • "revokedAt": "2026-05-18T08:00:00.000Z",
  • "revokeReason": "Ошибочно оформлен",
  • "supersededByOrderId": "11111111-1111-4111-8111-111111111111",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Карточка приказа

Возвращает карточку приказа. Object-scope по сотруднику (id).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID приказа

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "operationType": "leave_any",
  • "category": "leave",
  • "effect": "leave",
  • "prefix": "ПР-",
  • "documentNumber": "ПР-2026-00042",
  • "status": "issued",
  • "payload": {
    },
  • "templateId": "11111111-1111-4111-8111-111111111111",
  • "templateVersion": 1,
  • "effectiveDate": "2026-05-28",
  • "issuedAt": "2026-05-18T08:00:00.000Z",
  • "issuedBy": "11111111-1111-4111-8111-111111111111",
  • "revokedAt": "2026-05-18T08:00:00.000Z",
  • "revokeReason": "Ошибочно оформлен",
  • "supersededByOrderId": "11111111-1111-4111-8111-111111111111",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Редактировать черновик (только status=draft)

Правка полей черновика. Выпущенный приказ иммутабелен (PO-INV-02 → 409). Idempotent. Роли: Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID приказа

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
required
object

Новые поля документа (валидируются схемой operationType)

effectiveDate
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Дата вступления в силу (ISO 8601, YYYY-MM-DD)

Responses

Request samples

Content type
application/json
{
  • "payload": {
    },
  • "effectiveDate": "2026-05-28"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "operationType": "leave_any",
  • "category": "leave",
  • "effect": "leave",
  • "prefix": "ПР-",
  • "documentNumber": "ПР-2026-00042",
  • "status": "issued",
  • "payload": {
    },
  • "templateId": "11111111-1111-4111-8111-111111111111",
  • "templateVersion": 1,
  • "effectiveDate": "2026-05-28",
  • "issuedAt": "2026-05-18T08:00:00.000Z",
  • "issuedBy": "11111111-1111-4111-8111-111111111111",
  • "revokedAt": "2026-05-18T08:00:00.000Z",
  • "revokeReason": "Ошибочно оформлен",
  • "supersededByOrderId": "11111111-1111-4111-8111-111111111111",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Удалить черновик (DISCARD)

Физическое удаление черновика. Не-draft удалить нельзя (409). Роли: Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID приказа

Responses

Response samples

Content type
application/json
{
  • "title": "Asset already decommissioned",
  • "status": 409,
  • "code": "ASSET_ALREADY_DECOMMISSIONED",
  • "instance": "/api/v1/eam/assets/11111111-1111-4111-8111-111111111111"
}

Выпустить приказ (draft → issued)

Выделяет номер, фиксирует payload, диспатчит эффект на сотрудника (если effect ≠ note/none). Idempotent по Idempotency-Key (PO-INV-04). Роли: Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID приказа

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
effectiveDate
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Дата вступления в силу (ISO 8601, YYYY-MM-DD); перекрывает значение черновика

Responses

Request samples

Content type
application/json
{
  • "effectiveDate": "2026-05-28"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "operationType": "leave_any",
  • "category": "leave",
  • "effect": "leave",
  • "prefix": "ПР-",
  • "documentNumber": "ПР-2026-00042",
  • "status": "issued",
  • "payload": {
    },
  • "templateId": "11111111-1111-4111-8111-111111111111",
  • "templateVersion": 1,
  • "effectiveDate": "2026-05-28",
  • "issuedAt": "2026-05-18T08:00:00.000Z",
  • "issuedBy": "11111111-1111-4111-8111-111111111111",
  • "revokedAt": "2026-05-18T08:00:00.000Z",
  • "revokeReason": "Ошибочно оформлен",
  • "supersededByOrderId": "11111111-1111-4111-8111-111111111111",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Сторнировать приказ (issued → revoked)

Сторно с причиной; компенсация эффекта в hr/personnel (async). Idempotent. Роли: Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID приказа

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
required
string [ 1 .. 1000 ] characters

Причина сторнирования

Responses

Request samples

Content type
application/json
{
  • "reason": "Ошибочно оформлен — неверная дата"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "operationType": "leave_any",
  • "category": "leave",
  • "effect": "leave",
  • "prefix": "ПР-",
  • "documentNumber": "ПР-2026-00042",
  • "status": "issued",
  • "payload": {
    },
  • "templateId": "11111111-1111-4111-8111-111111111111",
  • "templateVersion": 1,
  • "effectiveDate": "2026-05-28",
  • "issuedAt": "2026-05-18T08:00:00.000Z",
  • "issuedBy": "11111111-1111-4111-8111-111111111111",
  • "revokedAt": "2026-05-18T08:00:00.000Z",
  • "revokeReason": "Ошибочно оформлен",
  • "supersededByOrderId": "11111111-1111-4111-8111-111111111111",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Заменить приказ новым (issued → superseded)

Помечает приказ заменённым новым issued-приказом. Idempotent. Роли: Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID приказа

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
supersededByOrderId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID нового приказа-преемника (issued)

Responses

Request samples

Content type
application/json
{
  • "supersededByOrderId": "11111111-1111-4111-8111-111111111111"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "personnelId": "11111111-1111-4111-8111-111111111111",
  • "operationType": "leave_any",
  • "category": "leave",
  • "effect": "leave",
  • "prefix": "ПР-",
  • "documentNumber": "ПР-2026-00042",
  • "status": "issued",
  • "payload": {
    },
  • "templateId": "11111111-1111-4111-8111-111111111111",
  • "templateVersion": 1,
  • "effectiveDate": "2026-05-28",
  • "issuedAt": "2026-05-18T08:00:00.000Z",
  • "issuedBy": "11111111-1111-4111-8111-111111111111",
  • "revokedAt": "2026-05-18T08:00:00.000Z",
  • "revokeReason": "Ошибочно оформлен",
  • "supersededByOrderId": "11111111-1111-4111-8111-111111111111",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Документ выпущенного приказа (html | pdf | docx)

Рендер документа из реестра операций + payload в выбранном формате (?format=html|pdf|docx; html по умолчанию — inline-просмотр, pdf/docx — скачивание). Только status=issued (иначе 409). Object-scope по сотруднику. Роли: CEO, Engineer, Foreman, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID приказа

query Parameters
format
string
Default: "html"
Enum: "html" "pdf" "docx"
Example: format=pdf

Формат документа: html (просмотр), pdf или docx (скачивание)

Responses

HR / Org-structure

Дерево штатного расписания

Возвращает дерево узлов с посчитанными счётчиками (actual/vacancies/subtree). Фильтры: rootId, subdivision, includeArchived.

Authorizations:
beareroauth2
query Parameters
rootId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
Example: rootId=11111111-1111-4111-8111-111111111111

UUID узла-корня поддерева (без него — все корни)

subdivision
string
Example: subdivision=АУП

Фильтр по метке подразделения

includeArchived
boolean
Example: includeArchived=false

Включать архивные узлы (по умолчанию только активные)

Responses

Response samples

Content type
application/json
{
  • "roots": [
    ],
  • "totals": {
    }
}

Создать узел штатного расписания

Создание узла-позиции или узла-подразделения (ADR-0063). Idempotent. Роли: Admin, CEO.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
string or null

UUID родительского узла (null/отсутствует = корень)

string or null

UUID должности (Position); null для узла-подразделения

string or null

Имя узла-подразделения (для узла-позиции имя берётся из Position)

string or null

Метка блока (АУП/Бактай/Жолымбет/…)

plannedHeadcount
integer [ 0 .. 9007199254740991 ]
Default: 1

Плановая штатная численность узла (>= 0)

orderIndex
integer [ -9007199254740991 .. 9007199254740991 ]
Default: 0

Порядок отображения среди сиблингов

Responses

Request samples

Content type
application/json
{
  • "parentId": "33333333-3333-4333-8333-333333333333",
  • "positionId": "22222222-2222-4222-8222-222222222222",
  • "title": null,
  • "subdivision": "АУП",
  • "plannedHeadcount": 1,
  • "orderIndex": 0
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "parentId": "33333333-3333-4333-8333-333333333333",
  • "positionId": "22222222-2222-4222-8222-222222222222",
  • "title": null,
  • "subdivision": "АУП",
  • "plannedHeadcount": 1,
  • "orderIndex": 0,
  • "status": "active",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Карточка узла со списком занятых

Возвращает узел, его счётчики (actual/vacancies) и занятых сотрудников.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID узла

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "parentId": "11111111-1111-4111-8111-111111111111",
  • "positionId": "11111111-1111-4111-8111-111111111111",
  • "positionName": "Юрист",
  • "title": "АУП",
  • "subdivision": "АУП",
  • "plannedHeadcount": 1,
  • "orderIndex": 0,
  • "status": "active",
  • "actualHeadcount": 1,
  • "vacancies": 0,
  • "occupants": [
    ]
}

Обновить или переместить узел

Изменение атрибутов; если задан другой parentId — перемещение с проверкой цикла. Idempotent. Роли: Admin, CEO.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID узла

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
string or null

Новый родитель (null = в корень). Отличие от текущего → перемещение

string or null

Имя узла-подразделения

string or null

Метка блока (АУП/Бактай/…)

plannedHeadcount
integer [ 0 .. 9007199254740991 ]

Плановая штатная численность (>= 0)

orderIndex
integer [ -9007199254740991 .. 9007199254740991 ]

Порядок отображения среди сиблингов

Responses

Request samples

Content type
application/json
{
  • "plannedHeadcount": 2,
  • "orderIndex": 1
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "parentId": "33333333-3333-4333-8333-333333333333",
  • "positionId": "22222222-2222-4222-8222-222222222222",
  • "title": null,
  • "subdivision": "АУП",
  • "plannedHeadcount": 1,
  • "orderIndex": 0,
  • "status": "active",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Архивировать узел

Перевод узла в архив (HR-ORG-INV-05: только пустой — без занятых и активных детей). Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID узла

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "parentId": "33333333-3333-4333-8333-333333333333",
  • "positionId": "22222222-2222-4222-8222-222222222222",
  • "title": null,
  • "subdivision": "АУП",
  • "plannedHeadcount": 1,
  • "orderIndex": 0,
  • "status": "active",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Восстановить узел из архива

Возврат архивного узла в active (родитель должен быть активным). Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID узла

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "parentId": "33333333-3333-4333-8333-333333333333",
  • "positionId": "22222222-2222-4222-8222-222222222222",
  • "title": null,
  • "subdivision": "АУП",
  • "plannedHeadcount": 1,
  • "orderIndex": 0,
  • "status": "active",
  • "createdAt": "2026-05-18T08:00:00.000Z",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

Admin / Outbox

Список outbox-событий + сводная статистика

По умолчанию возвращает pending+dead (нездоровое состояние). Используйте status=published для аудита успешно отправленных.

Authorizations:
beareroauth2
query Parameters
status
string
Enum: "pending" "published" "dead" "skipped"
Example: status=pending

Фильтр по статусу. По умолчанию — pending+dead (нездоровое состояние).

olderThanSeconds
integer ( 0 .. 2592000 ]
Example: olderThanSeconds=300

Возвращает только события, у которых createdAt старше N секунд. Удобно для поиска stuck-events (типичные пороги: 300, 900, 3600).

limit
integer [ 1 .. 500 ]
Default: 50
Example: limit=50

Максимум записей (1..500, default 50).

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "hasMore": true,
  • "stats": {
    }
}

Сбросить событие на повторную публикацию

Статус → pending, attempts → 0, lastError → null, nextAttemptAt → now(). Используется когда downstream восстановлен и dead-event нужно "дотолкать".

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи event_outbox

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "status": "pending",
  • "attempts": 9007199254740991
}

Явно пометить событие как пропущенное

Статус → skipped. Используется когда оператор подтвердил, что событие неактуально (данные починены вручную, downstream уже консистентен). Событие НЕ будет опубликовано.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID записи event_outbox

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "status": "skipped"
}

Admin / Queues

Список всех очередей со счётчиками waiting/active/delayed/failed

Возвращает stats по mineflow-saga-steps, mineflow-saga-compensate, mineflow-audit-log. Поле backlogWarning=true означает waiting+delayed превысил порог (default 1000, override через env BULLMQ_BACKLOG_WARN_THRESHOLD).

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "backlogThreshold": 9007199254740991
}

Детальная статистика одной очереди + sample failed jobs

Возвращает stats + до 10 последних failed jobs (id, reason, attempts).

Authorizations:
beareroauth2
path Parameters
name
required
string
Enum: "mineflow-saga-steps" "mineflow-saga-compensate" "mineflow-audit-log"

Имя очереди

Responses

Response samples

Content type
application/json
{
  • "name": "mineflow-saga-steps",
  • "waiting": 9007199254740991,
  • "active": 9007199254740991,
  • "delayed": 9007199254740991,
  • "failed": 9007199254740991,
  • "completed": 9007199254740991,
  • "paused": 9007199254740991,
  • "backlogWarning": true,
  • "recentFailed": [
    ]
}

PRD / Production Plans

Список планов с фильтрами и пагинацией

Курсорная пагинация. Foreman/Mechanic — scoped по своим объектам. Engineer/CEO/Admin — all.

Authorizations:
beareroauth2
query Parameters
horizon
string
Enum: "year" "month"
year
integer [ 2020 .. 2100 ]
month
integer [ 1 .. 12 ]
status
string
Enum: "draft" "approved" "superseded"
cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
limit
integer [ 1 .. 200 ]
Default: 50

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "53a4a333-2825-45a4-80d2-5f430d088f36"
}

Создать draft план (на год или месяц)

PRD-PLAN-INV-01: один активный план на (org, horizon, year, month).

Authorizations:
beareroauth2
Request Body schema: application/json
required
horizon
required
string
Enum: "year" "month"
year
required
integer [ 2020 .. 2100 ]
integer or null
Default: null

Responses

Request samples

Content type
application/json
{
  • "horizon": "year",
  • "year": 2020,
  • "month": null
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "organizationId": "7bc05553-4b68-44e8-b7bc-37be63c6d9e9",
  • "horizon": "year",
  • "year": -9007199254740991,
  • "month": 1,
  • "status": "draft",
  • "currentVersionId": "7d3c5b66-ff6d-477a-9982-96f00519947f",
  • "createdBy": "25a02396-1048-48f9-bf93-102d2fb7895e",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "versions": [
    ]
}

Получить план по id (с историей версий)

Возвращает план производства по UUID вместе с историей версий (snapshot активной + предыдущие ревизии).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID плана

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "organizationId": "7bc05553-4b68-44e8-b7bc-37be63c6d9e9",
  • "horizon": "year",
  • "year": -9007199254740991,
  • "month": 1,
  • "status": "draft",
  • "currentVersionId": "7d3c5b66-ff6d-477a-9982-96f00519947f",
  • "createdBy": "25a02396-1048-48f9-bf93-102d2fb7895e",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "versions": [
    ]
}

Утвердить draft план (создаёт ProductionPlanVersion v1)

FSM: draft → approved. Активирует расчёт PlanEntry.factValue через подписку на prd.shift-report.approved.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID плана

Request Body schema: application/json
required
required
Array of objects non-empty
Array (non-empty)
objectId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
drillingTargetM
required
number >= 0
blastingTargetM3
required
number >= 0
required
object or null

Responses

Request samples

Content type
application/json
{
  • "objectPlans": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "organizationId": "7bc05553-4b68-44e8-b7bc-37be63c6d9e9",
  • "horizon": "year",
  • "year": -9007199254740991,
  • "month": 1,
  • "status": "draft",
  • "currentVersionId": "7d3c5b66-ff6d-477a-9982-96f00519947f",
  • "createdBy": "25a02396-1048-48f9-bf93-102d2fb7895e",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "versions": [
    ]
}

Корректировка утверждённого плана (создаёт v{n+1})

Если delta > 20% и инициатор — не CEO: версия в pending_ceo, требуется approveVersion от CEO. Reason обязателен (PRD-PLAN-INV-06).

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID плана

Request Body schema: application/json
required
reason
required
string [ 5 .. 1000 ] characters
required
Array of objects non-empty

Responses

Request samples

Content type
application/json
{
  • "reason": "string",
  • "objectPlans": [
    ]
}

Response samples

Content type
application/json
{
  • "significant": true,
  • "deltaPct": 0,
  • "version": {
    },
  • "plan": {
    }
}

CEO утверждает значительную (>20%) корректировку

pending_ceo → approved_version; current_version_id плана обновляется.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID плана

versionId
required
string <uuid>

UUID версии (pending_ceo)

Responses

CEO отклоняет значительную (>20%) корректировку

pending_ceo → rejected_version; current_version_id плана не меняется.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID плана

versionId
required
string <uuid>

UUID версии (pending_ceo)

Request Body schema: application/json
required
reason
required
string [ 5 .. 1000 ] characters

Responses

Request samples

Content type
application/json
{
  • "reason": "string"
}

Заместить план новым (старый → superseded)

FSM: approved → superseded. Новый план должен уже существовать.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID плана

Request Body schema: application/json
required
replacedByPlanId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

Responses

Request samples

Content type
application/json
{
  • "replacedByPlanId": "d46a27c3-b175-4b02-98de-0a698c9ce0e4"
}

Создать/скорректировать суточный норматив (DailyNorm)

Foreman ±15% — гард в use-case (PRD-PLAN-INV-13). Engineer/CEO/Admin — без ограничения; >15% за рамки лимита Foreman, требуется amend плана.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID плана

Request Body schema: application/json
required
objectPlanId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
string or null
Default: null
targetMPerShift
required
number > 0
baseTargetM
required
number > 0
effectiveFrom
required
string <date> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
string or null
Default: null

Responses

Request samples

Content type
application/json
{
  • "objectPlanId": "99943a2e-9d71-47a9-bea2-c7c58f207eee",
  • "assetId": null,
  • "targetMPerShift": 0,
  • "baseTargetM": 0,
  • "effectiveFrom": "2019-08-24",
  • "effectiveTo": null
}

ANA / Shift summary

Список сменных сводок за период (ANA 1.2)

Период (dateFrom/dateTo) обязателен. Foreman ограничен своими объектами.

Authorizations:
beareroauth2
query Parameters
objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по объекту

shiftType
string
Enum: "day" "night"
Example: shiftType=day

Фильтр по типу смены

dateFrom
required
string^\d{4}-\d{2}-\d{2}$
Example: dateFrom=2026-05-20

Начало периода (inclusive)

dateTo
required
string^\d{4}-\d{2}-\d{2}$
Example: dateTo=2026-05-20

Конец периода (inclusive)

cursor
string

Курсор пагинации

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "string"
}

Суточная сводка объекта за период (ANA 1.1)

Object-scope по objectId. Период обязателен.

Authorizations:
beareroauth2
path Parameters
objectId
required
string <uuid>

UUID производственного объекта

query Parameters
dateFrom
required
string^\d{4}-\d{2}-\d{2}$
Example: dateFrom=2026-05-20

Начало периода (inclusive)

dateTo
required
string^\d{4}-\d{2}-\d{2}$
Example: dateTo=2026-05-20

Конец периода (inclusive)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Блок «Производство сегодня» (ANA 1.1)

Производство по объектам за сутки. Блок «Последние отчёты» — TODO (данные отчётов вне проекции, см. open-questions).

Authorizations:
beareroauth2
query Parameters
date
string^\d{4}-\d{2}-\d{2}$
Example: date=2026-05-20

Дата сводки; по умолчанию — текущие сутки

Responses

Response samples

Content type
application/json
{
  • "date": "2026-05-20",
  • "producedTodayByObject": [
    ],
  • "latestReports": [
    ]
}

Экспорт производственной сводки XLSX (ANA 1.6)

Сменные сводки за период (dateFrom/dateTo обязательны) листом XLSX. Foreman — свои объекты. PDF-формат — через Reporting Service (отложено). Вынос данных пишется в audit_log.

Authorizations:
beareroauth2
query Parameters
objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по объекту

shiftType
string
Enum: "day" "night"
Example: shiftType=day

Фильтр по типу смены

dateFrom
required
string^\d{4}-\d{2}-\d{2}$
Example: dateFrom=2026-05-20

Начало периода (inclusive)

dateTo
required
string^\d{4}-\d{2}-\d{2}$
Example: dateTo=2026-05-20

Конец периода (inclusive)

cursor
string

Курсор пагинации

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Список сводок по утверждённым отчётам (ANA 1.0)

Per-report grain: агрегаты бурения/взрыва + накопленные простои. Foreman ограничен своими объектами.

Authorizations:
beareroauth2
query Parameters
objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по производственному объекту

status
string
Enum: "recorded" "reverted"
Example: status=recorded

Фильтр по статусу

from
string^\d{4}-\d{2}-\d{2}$
Example: from=2026-05-20

Нижняя граница shiftDate (inclusive)

to
string^\d{4}-\d{2}-\d{2}$
Example: to=2026-05-20

Верхняя граница shiftDate (inclusive)

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: cursor=11111111-1111-4111-8111-111111111111

UUID последнего элемента предыдущей страницы

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": null
}

Сводка по одному утверждённому отчёту (ANA 1.0)

Object-scope по объекту отчёта: 403 вне scope, 404 если проекции нет.

Authorizations:
beareroauth2
path Parameters
shiftReportId
required
string <uuid>

UUID утверждённого сменного отчёта

Responses

Response samples

Content type
application/json
{
  • "shiftReportId": "11111111-1111-4111-8111-111111111111",
  • "productionObjectId": "11111111-1111-4111-8111-111111111111",
  • "shiftDate": "2026-05-20",
  • "shiftType": "day",
  • "status": "recorded",
  • "totalHoles": 25,
  • "totalDepthMeters": 350,
  • "totalBlocks": 4,
  • "totalExplosiveKg": 1200,
  • "drillingEntryCount": 3,
  • "blastingEntryCount": 1,
  • "totalDowntimeMinutes": 90,
  • "downtimeEventCount": 2,
  • "recordedSagaId": "11111111-1111-4111-8111-111111111111",
  • "updatedAt": "2026-05-18T08:00:00.000Z"
}

ANA / Downtime

Простои по причинам/категориям за период (ANA 1.4)

Период (dateFrom/dateTo) обязателен. Foreman ограничен своими объектами.

Authorizations:
beareroauth2
query Parameters
dateFrom
required
string^\d{4}-\d{2}-\d{2}$
Example: dateFrom=2026-05-20

Начало периода (inclusive)

dateTo
required
string^\d{4}-\d{2}-\d{2}$
Example: dateTo=2026-05-20

Конец периода (inclusive)

objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по объекту

category
string
Enum: "technical" "organizational" "external"
Example: category=technical

Фильтр по категории (provisional-маппинг, Q2)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Топ-N причин простоев по суммарной длительности (ANA 1.4)

Период обязателен. Foreman ограничен своими объектами.

Authorizations:
beareroauth2
query Parameters
dateFrom
required
string^\d{4}-\d{2}-\d{2}$
Example: dateFrom=2026-05-20

Начало периода (inclusive)

dateTo
required
string^\d{4}-\d{2}-\d{2}$
Example: dateTo=2026-05-20

Конец периода (inclusive)

objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по объекту

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Блок «Простои сегодня» сводного дашборда (ANA 1.1)

Суммы простоя по объектам за сутки + топ-3 причины. Foreman — свои объекты.

Authorizations:
beareroauth2
query Parameters
date
string^\d{4}-\d{2}-\d{2}$
Example: date=2026-05-20

Дата сводки; по умолчанию — текущие сутки

Responses

Response samples

Content type
application/json
{
  • "date": "2026-05-20",
  • "totalDurationHoursByObject": [
    ],
  • "top3Reasons": [
    ]
}

Простои по единицам техники за период (ANA 1.4)

Период обязателен. Object-scope: Foreman ограничен своими объектами (проекция несёт production_object_id, fail-closed). ⚠ Mechanic пока вне роли — equipment-scope (asset→механик из hr/asset-assignments) не подключён (permissions.md Q4).

Authorizations:
beareroauth2
query Parameters
dateFrom
required
string^\d{4}-\d{2}-\d{2}$
Example: dateFrom=2026-05-20

Начало периода (inclusive)

dateTo
required
string^\d{4}-\d{2}-\d{2}$
Example: dateTo=2026-05-20

Конец периода (inclusive)

assetId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: assetId=11111111-1111-4111-8111-111111111111

Фильтр по единице техники

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Экспорт анализа простоев XLSX (ANA 1.4/1.6)

Простои по объектам/причинам за период (dateFrom/dateTo обязательны) листом XLSX. Foreman — свои объекты. Вынос данных пишется в audit_log.

Authorizations:
beareroauth2
query Parameters
dateFrom
required
string^\d{4}-\d{2}-\d{2}$
Example: dateFrom=2026-05-20

Начало периода (inclusive)

dateTo
required
string^\d{4}-\d{2}-\d{2}$
Example: dateTo=2026-05-20

Конец периода (inclusive)

objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по объекту

category
string
Enum: "technical" "organizational" "external"
Example: category=technical

Фильтр по категории (provisional-маппинг, Q2)

Responses

ANA / KPI

КТГ/КИО по парку техники — рейтинг за период (ANA 1.3)

Период обязателен. Foreman/Mechanic ограничены своими объектами (fail-closed).

Authorizations:
beareroauth2
query Parameters
dateFrom
required
string^\d{4}-\d{2}-\d{2}$
Example: dateFrom=2026-05-20

Начало периода (inclusive)

dateTo
required
string^\d{4}-\d{2}-\d{2}$
Example: dateTo=2026-05-20

Конец периода (inclusive)

objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по объекту

sortBy
string
Default: "ktg"
Enum: "ktg" "kio"
Example: sortBy=ktg

Сортировка рейтинга

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Карточка станка — КТГ/КИО, наработка, расход (ANA 1.3)

Период обязателен. 404 если по станку нет KPI за период.

Authorizations:
beareroauth2
path Parameters
assetId
required
string <uuid>
query Parameters
dateFrom
required
string^\d{4}-\d{2}-\d{2}$
Example: dateFrom=2026-05-20

Начало периода (inclusive)

dateTo
required
string^\d{4}-\d{2}-\d{2}$
Example: dateTo=2026-05-20

Конец периода (inclusive)

Responses

Response samples

Content type
application/json
{
  • "assetId": "11111111-1111-4111-8111-111111111111",
  • "assetName": "string",
  • "ktg": {
    },
  • "kio": {
    },
  • "avgDailyMeterHours": 9.4,
  • "fuelConsumedLitres": 1240,
  • "downtimeMinutes": 120
}

Фактический КТГ по декадам месяца (01–05/06–20/21–31) и за месяц (ANA 1.3)

КТГ периода = (Σ режимный фонд − Σ тех.простои) / Σ режимный фонд из явно хранимых входов готовности (НЕ среднее посуточных %). Питает столбец «факт КТГ» графика ТО/ППР. Foreman/Mechanic ограничены своими объектами (fail-closed).

Authorizations:
beareroauth2
query Parameters
yearMonth
required
string^\d{4}-\d{2}$
Example: yearMonth=2026-05

Месяц YYYY-MM

objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по объекту

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Удельный расход ДТ (л/п.м.) и отклонение от норматива (ANA 1.5)

Период обязателен. Foreman/Mechanic — свои объекты.

Authorizations:
beareroauth2
query Parameters
dateFrom
required
string^\d{4}-\d{2}-\d{2}$
Example: dateFrom=2026-05-20

Начало периода (inclusive)

dateTo
required
string^\d{4}-\d{2}-\d{2}$
Example: dateTo=2026-05-20

Конец периода (inclusive)

objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по объекту

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Выполнение плана бурения/взрывов и прогноз (ANA 1.2)

План/факт месяца. Прогноз — провизорный (refresh-evaluator, Q12).

Authorizations:
beareroauth2
query Parameters
yearMonth
required
string^\d{4}-\d{2}$
Example: yearMonth=2026-05

Месяц YYYY-MM

objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по объекту

Responses

Response samples

Content type
application/json
{
  • "yearMonth": "2026-05",
  • "items": [
    ]
}

Месячные KPI объекта — план/факт бурения и взрывов (ANA 1.6)

Месяц обязателен. Foreman — свои объекты.

Authorizations:
beareroauth2
query Parameters
yearMonth
required
string^\d{4}-\d{2}$
Example: yearMonth=2026-05

Месяц YYYY-MM

objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по объекту

Responses

Response samples

Content type
application/json
{
  • "yearMonth": "2026-05",
  • "items": [
    ]
}

Карточка KPI объекта XLSX (ANA 1.6)

План/факт бурения и взрывов объекта за месяц (yearMonth) листом XLSX.

Authorizations:
beareroauth2
path Parameters
objectId
required
string <uuid>
query Parameters
yearMonth
required
string^\d{4}-\d{2}$
Example: yearMonth=2026-05

Месяц YYYY-MM

Responses

Управленческий KPI-отчёт XLSX (ANA 1.6)

План/факт бурения и взрывов по объектам за месяц (yearMonth) листом XLSX. period — метка гранулярности (daily/weekly/monthly). Вынос данных пишется в audit_log.

Authorizations:
beareroauth2
path Parameters
period
required
string
Enum: "daily" "weekly" "monthly"
query Parameters
yearMonth
required
string^\d{4}-\d{2}$
Example: yearMonth=2026-05

Месяц YYYY-MM

objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по объекту

Responses

Tasks

Список задач с фильтрами и пагинацией

Курсорная пагинация. Фильтры: assigneeId, status, objectId. Object-scoped роли видят задачи своих объектов + org-wide.

Authorizations:
beareroauth2
query Parameters
assigneeId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: assigneeId=11111111-1111-4111-8111-111111111111

Фильтр по UUID исполнителя

status
string
Enum: "open" "inProgress" "blocked" "done" "cancelled"
Example: status=open

Фильтр по статусу FSM

objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: objectId=11111111-1111-4111-8111-111111111111

Фильтр по UUID производственного объекта

cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...
Example: cursor=11111111-1111-4111-8111-111111111111

UUID последнего элемента предыдущей страницы

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": null
}

Создать задачу

Статус open. Idempotent. Роли: CEO, Engineer, Foreman, Admin.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
title
required
string [ 2 .. 200 ] characters

Заголовок задачи

description
string <= 4000 characters

Подробное описание задачи

priority
string
Default: "normal"
Enum: "low" "normal" "high" "urgent"

Приоритет задачи

assigneeId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID исполнителя (Personnel); опустить — задача без исполнителя

dueDate
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...

Срок выполнения (ISO 8601)

objectId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID производственного объекта (object-scope); опустить — org-wide

relatedResourceType
string
Enum: "asset" "maintenance_record" "shift_report" "production_plan" "personnel"

Тип связанного ресурса (soft-ref, без FK)

relatedResourceId
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID связанного ресурса (soft-ref)

Responses

Request samples

Content type
application/json
{
  • "title": "Проверить узел гидравлики",
  • "description": "Осмотреть и при необходимости заменить шланг высокого давления",
  • "priority": "normal",
  • "assigneeId": "11111111-1111-4111-8111-111111111111",
  • "dueDate": "2026-05-18T08:00:00.000Z",
  • "objectId": "11111111-1111-4111-8111-111111111111",
  • "relatedResourceType": "asset",
  • "relatedResourceId": "11111111-1111-4111-8111-111111111111"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "title": "Проверить узел гидравлики",
  • "description": null,
  • "status": "open",
  • "priority": "normal",
  • "assigneeId": "11111111-1111-4111-8111-111111111111",
  • "createdBy": "11111111-1111-4111-8111-111111111111",
  • "assignedBy": "11111111-1111-4111-8111-111111111111",
  • "dueDate": "2026-05-18T08:00:00.000Z",
  • "objectId": "11111111-1111-4111-8111-111111111111",
  • "relatedResourceType": null,
  • "relatedResourceId": "11111111-1111-4111-8111-111111111111",
  • "startedAt": "2026-05-18T08:00:00.000Z",
  • "blockedReason": null,
  • "completedAt": "2026-05-18T08:00:00.000Z",
  • "completedBy": "11111111-1111-4111-8111-111111111111",
  • "cancelledAt": "2026-05-18T08:00:00.000Z",
  • "cancelledBy": "11111111-1111-4111-8111-111111111111",
  • "cancellationReason": null
}

Получить задачу по id

Object-scope по id.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID задачи

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "title": "Проверить узел гидравлики",
  • "description": null,
  • "status": "open",
  • "priority": "normal",
  • "assigneeId": "11111111-1111-4111-8111-111111111111",
  • "createdBy": "11111111-1111-4111-8111-111111111111",
  • "assignedBy": "11111111-1111-4111-8111-111111111111",
  • "dueDate": "2026-05-18T08:00:00.000Z",
  • "objectId": "11111111-1111-4111-8111-111111111111",
  • "relatedResourceType": null,
  • "relatedResourceId": "11111111-1111-4111-8111-111111111111",
  • "startedAt": "2026-05-18T08:00:00.000Z",
  • "blockedReason": null,
  • "completedAt": "2026-05-18T08:00:00.000Z",
  • "completedBy": "11111111-1111-4111-8111-111111111111",
  • "cancelledAt": "2026-05-18T08:00:00.000Z",
  • "cancelledBy": "11111111-1111-4111-8111-111111111111",
  • "cancellationReason": null
}

Редактировать задачу

Атрибуты title/description/priority/dueDate (не FSM-переход). Запрещено в терминальном статусе. Роли: CEO, Engineer, Foreman, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID задачи

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
title
string [ 2 .. 200 ] characters

Новый заголовок задачи

string or null

Описание (null — очистить)

priority
string
Enum: "low" "normal" "high" "urgent"

Приоритет

string or null

Срок выполнения (ISO 8601; null — очистить)

Responses

Request samples

Content type
application/json
{
  • "title": "Проверить узел гидравлики и РВД",
  • "description": "Осмотреть шланг высокого давления",
  • "priority": "high",
  • "dueDate": "2026-05-18T08:00:00.000Z"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "title": "Проверить узел гидравлики",
  • "description": null,
  • "status": "open",
  • "priority": "normal",
  • "assigneeId": "11111111-1111-4111-8111-111111111111",
  • "createdBy": "11111111-1111-4111-8111-111111111111",
  • "assignedBy": "11111111-1111-4111-8111-111111111111",
  • "dueDate": "2026-05-18T08:00:00.000Z",
  • "objectId": "11111111-1111-4111-8111-111111111111",
  • "relatedResourceType": null,
  • "relatedResourceId": "11111111-1111-4111-8111-111111111111",
  • "startedAt": "2026-05-18T08:00:00.000Z",
  • "blockedReason": null,
  • "completedAt": "2026-05-18T08:00:00.000Z",
  • "completedBy": "11111111-1111-4111-8111-111111111111",
  • "cancelledAt": "2026-05-18T08:00:00.000Z",
  • "cancelledBy": "11111111-1111-4111-8111-111111111111",
  • "cancellationReason": null
}

Назначить исполнителя

Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID задачи

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
assigneeId
required
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{...

UUID исполнителя (Personnel)

Responses

Request samples

Content type
application/json
{
  • "assigneeId": "11111111-1111-4111-8111-111111111111"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "title": "Проверить узел гидравлики",
  • "description": null,
  • "status": "open",
  • "priority": "normal",
  • "assigneeId": "11111111-1111-4111-8111-111111111111",
  • "createdBy": "11111111-1111-4111-8111-111111111111",
  • "assignedBy": "11111111-1111-4111-8111-111111111111",
  • "dueDate": "2026-05-18T08:00:00.000Z",
  • "objectId": "11111111-1111-4111-8111-111111111111",
  • "relatedResourceType": null,
  • "relatedResourceId": "11111111-1111-4111-8111-111111111111",
  • "startedAt": "2026-05-18T08:00:00.000Z",
  • "blockedReason": null,
  • "completedAt": "2026-05-18T08:00:00.000Z",
  • "completedBy": "11111111-1111-4111-8111-111111111111",
  • "cancelledAt": "2026-05-18T08:00:00.000Z",
  • "cancelledBy": "11111111-1111-4111-8111-111111111111",
  • "cancellationReason": null
}

Снять исполнителя

Idempotent.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID задачи

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "title": "Проверить узел гидравлики",
  • "description": null,
  • "status": "open",
  • "priority": "normal",
  • "assigneeId": "11111111-1111-4111-8111-111111111111",
  • "createdBy": "11111111-1111-4111-8111-111111111111",
  • "assignedBy": "11111111-1111-4111-8111-111111111111",
  • "dueDate": "2026-05-18T08:00:00.000Z",
  • "objectId": "11111111-1111-4111-8111-111111111111",
  • "relatedResourceType": null,
  • "relatedResourceId": "11111111-1111-4111-8111-111111111111",
  • "startedAt": "2026-05-18T08:00:00.000Z",
  • "blockedReason": null,
  • "completedAt": "2026-05-18T08:00:00.000Z",
  • "completedBy": "11111111-1111-4111-8111-111111111111",
  • "cancelledAt": "2026-05-18T08:00:00.000Z",
  • "cancelledBy": "11111111-1111-4111-8111-111111111111",
  • "cancellationReason": null
}

Взять задачу в работу

FSM: open → inProgress.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID задачи

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "title": "Проверить узел гидравлики",
  • "description": null,
  • "status": "open",
  • "priority": "normal",
  • "assigneeId": "11111111-1111-4111-8111-111111111111",
  • "createdBy": "11111111-1111-4111-8111-111111111111",
  • "assignedBy": "11111111-1111-4111-8111-111111111111",
  • "dueDate": "2026-05-18T08:00:00.000Z",
  • "objectId": "11111111-1111-4111-8111-111111111111",
  • "relatedResourceType": null,
  • "relatedResourceId": "11111111-1111-4111-8111-111111111111",
  • "startedAt": "2026-05-18T08:00:00.000Z",
  • "blockedReason": null,
  • "completedAt": "2026-05-18T08:00:00.000Z",
  • "completedBy": "11111111-1111-4111-8111-111111111111",
  • "cancelledAt": "2026-05-18T08:00:00.000Z",
  • "cancelledBy": "11111111-1111-4111-8111-111111111111",
  • "cancellationReason": null
}

Заблокировать задачу

FSM: inProgress → blocked.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID задачи

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
required
string [ 2 .. 500 ] characters

Причина блокировки задачи

Responses

Request samples

Content type
application/json
{
  • "reason": "Ожидание поставки запасной части"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "title": "Проверить узел гидравлики",
  • "description": null,
  • "status": "open",
  • "priority": "normal",
  • "assigneeId": "11111111-1111-4111-8111-111111111111",
  • "createdBy": "11111111-1111-4111-8111-111111111111",
  • "assignedBy": "11111111-1111-4111-8111-111111111111",
  • "dueDate": "2026-05-18T08:00:00.000Z",
  • "objectId": "11111111-1111-4111-8111-111111111111",
  • "relatedResourceType": null,
  • "relatedResourceId": "11111111-1111-4111-8111-111111111111",
  • "startedAt": "2026-05-18T08:00:00.000Z",
  • "blockedReason": null,
  • "completedAt": "2026-05-18T08:00:00.000Z",
  • "completedBy": "11111111-1111-4111-8111-111111111111",
  • "cancelledAt": "2026-05-18T08:00:00.000Z",
  • "cancelledBy": "11111111-1111-4111-8111-111111111111",
  • "cancellationReason": null
}

Снять блокировку

FSM: blocked → inProgress.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID задачи

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "title": "Проверить узел гидравлики",
  • "description": null,
  • "status": "open",
  • "priority": "normal",
  • "assigneeId": "11111111-1111-4111-8111-111111111111",
  • "createdBy": "11111111-1111-4111-8111-111111111111",
  • "assignedBy": "11111111-1111-4111-8111-111111111111",
  • "dueDate": "2026-05-18T08:00:00.000Z",
  • "objectId": "11111111-1111-4111-8111-111111111111",
  • "relatedResourceType": null,
  • "relatedResourceId": "11111111-1111-4111-8111-111111111111",
  • "startedAt": "2026-05-18T08:00:00.000Z",
  • "blockedReason": null,
  • "completedAt": "2026-05-18T08:00:00.000Z",
  • "completedBy": "11111111-1111-4111-8111-111111111111",
  • "cancelledAt": "2026-05-18T08:00:00.000Z",
  • "cancelledBy": "11111111-1111-4111-8111-111111111111",
  • "cancellationReason": null
}

Завершить задачу

FSM: inProgress → done.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID задачи

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "title": "Проверить узел гидравлики",
  • "description": null,
  • "status": "open",
  • "priority": "normal",
  • "assigneeId": "11111111-1111-4111-8111-111111111111",
  • "createdBy": "11111111-1111-4111-8111-111111111111",
  • "assignedBy": "11111111-1111-4111-8111-111111111111",
  • "dueDate": "2026-05-18T08:00:00.000Z",
  • "objectId": "11111111-1111-4111-8111-111111111111",
  • "relatedResourceType": null,
  • "relatedResourceId": "11111111-1111-4111-8111-111111111111",
  • "startedAt": "2026-05-18T08:00:00.000Z",
  • "blockedReason": null,
  • "completedAt": "2026-05-18T08:00:00.000Z",
  • "completedBy": "11111111-1111-4111-8111-111111111111",
  • "cancelledAt": "2026-05-18T08:00:00.000Z",
  • "cancelledBy": "11111111-1111-4111-8111-111111111111",
  • "cancellationReason": null
}

Отменить задачу

Из любого нетерминального статуса. Роли: CEO, Engineer, Admin.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID задачи

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
required
string [ 2 .. 500 ] characters

Причина отмены задачи

Responses

Request samples

Content type
application/json
{
  • "reason": "Задача неактуальна"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "title": "Проверить узел гидравлики",
  • "description": null,
  • "status": "open",
  • "priority": "normal",
  • "assigneeId": "11111111-1111-4111-8111-111111111111",
  • "createdBy": "11111111-1111-4111-8111-111111111111",
  • "assignedBy": "11111111-1111-4111-8111-111111111111",
  • "dueDate": "2026-05-18T08:00:00.000Z",
  • "objectId": "11111111-1111-4111-8111-111111111111",
  • "relatedResourceType": null,
  • "relatedResourceId": "11111111-1111-4111-8111-111111111111",
  • "startedAt": "2026-05-18T08:00:00.000Z",
  • "blockedReason": null,
  • "completedAt": "2026-05-18T08:00:00.000Z",
  • "completedBy": "11111111-1111-4111-8111-111111111111",
  • "cancelledAt": "2026-05-18T08:00:00.000Z",
  • "cancelledBy": "11111111-1111-4111-8111-111111111111",
  • "cancellationReason": null
}

Список комментариев задачи

Хронологический порядок (createdAt asc). Доступно всем ролям с доступом на чтение.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID задачи

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Добавить комментарий к задаче

Append-only. Idempotent. Доступно всем ролям с доступом на чтение задачи.

Authorizations:
beareroauth2
path Parameters
id
required
string <uuid>

UUID задачи

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
body
required
string [ 1 .. 4000 ] characters

Текст комментария

Responses

Request samples

Content type
application/json
{
  • "body": "Деталь заказана у поставщика, ожидаем поставку к пятнице"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "taskId": "11111111-1111-4111-8111-111111111111",
  • "authorId": "11111111-1111-4111-8111-111111111111",
  • "body": "Деталь заказана",
  • "createdAt": "2026-05-18T08:00:00.000Z"
}

Search

Кросс-доменный поиск по Tier-1 сущностям (ADR-0090)

Поиск по активам, сотрудникам, поставщикам, номенклатуре и производственным объектам. Результаты режутся org- и object-scope внутри запроса (fail-closed).

Authorizations:
beareroauth2
query Parameters
q
required
string [ 2 .. 128 ] characters
Example: q=ЭКГ

Поисковая строка (минимум 2 символа)

types
Array of strings
Items Enum: "asset" "personnel" "supplier" "tmc-item" "production-object"

Ограничить типы сущностей; по умолчанию — все Tier-1

limit
integer ( 0 .. 200 ]
Default: 50
Example: limit=50

Максимум элементов на странице (1–200)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Notifications

Лента уведомлений (backlog)

Cursor-пагинированный список уведомлений получателя (новые сверху). Источник истины для offline/unread — клиент догружает пропущенный live-поток отсюда. Каждый элемент несёт readAt текущего получателя (BL-08).

Authorizations:
beareroauth2
query Parameters
limit
number [ 1 .. 200 ]
Default: 50
Example: limit=50

1–200, default 50

cursor
string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[...
Example: cursor=2026-06-05T10:00:00.000Z

ISO createdAt предыдущей страницы

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "2026-06-05T10:00:00.000Z"
}

Число непрочитанных уведомлений (BL-08)

Счётчик непрочитанных уведомлений получателя (адресованные строки без receipt-записи). Для бейджа в UI — дёшево опрашивать рядом с live-потоком.

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
{
  • "count": 3
}

Отметить уведомления прочитанными (BL-08)

Идемпотентно помечает прочитанными переданные уведомления (только адресованные получателю — чужие id игнорируются). Возвращает число ново отмеченных.

Authorizations:
beareroauth2
Request Body schema: application/json
required
notificationIds
required
Array of strings <uuid> [ 1 .. 500 ] items [ items <uuid >^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{... ]

Список id уведомлений к отметке прочтения (1–500)

Responses

Request samples

Content type
application/json
{
  • "notificationIds": [
    ]
}

Response samples

Content type
application/json
{
  • "marked": 2
}

Отметить все уведомления прочитанными (BL-08)

Идемпотентно помечает прочитанными все непрочитанные уведомления получателя. Возвращает число ново отмеченных.

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
{
  • "marked": 2
}

Зарегистрировать push-токен устройства

Привязывает Expo push-токен к текущему пользователю (ADR-0069). Idempotent (повторная регистрация того же токена — upsert). Роли: любая из 7 системных.

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
expoPushToken
required
string [ 1 .. 512 ] characters

Expo push-токен устройства (ExponentPushToken[...])

platform
required
string
Enum: "ios" "android"

Платформа устройства

Responses

Request samples

Content type
application/json
{
  • "expoPushToken": "ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]",
  • "platform": "android"
}

Response samples

Content type
application/json
{
  • "id": "11111111-1111-4111-8111-111111111111",
  • "userId": "11111111-1111-4111-8111-111111111111",
  • "expoPushToken": "ExponentPushToken[...]",
  • "platform": "android"
}

Снять push-токен устройства (logout)

Soft-delete токена по значению (ADR-0069). Idempotent: чужой/несуществующий токен — no-op. Роли: любая из 7 системных.

Authorizations:
beareroauth2
path Parameters
token
required
string

Expo push-токен (не UUID)

header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Responses

Response samples

Content type
application/json
{
  • "title": "Asset already decommissioned",
  • "status": 409,
  • "code": "ASSET_ALREADY_DECOMMISSIONED",
  • "instance": "/api/v1/eam/assets/11111111-1111-4111-8111-111111111111"
}

Realtime

Параметры подключения к realtime (Centrifugo)

Возвращает ws-url, connection-токен и subscription-токены на разрешённые пользователю каналы (personal + role + presence). enabled=false → live недоступен, клиент на REST-backlog (ADR-0044).

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
{
  • "enabled": true,
  • "url": "ws://localhost:8000/connection/websocket",
  • "token": "string",
  • "subscriptions": [
    ]
}

sim

Список sim-прогонов

Возвращает доступные прогоны симулятора (read-only, читаются с диска var/sim).

Authorizations:
beareroauth2

Responses

Реплей событий прогона

Лента событий прогона с пагинацией по тику (afterTick, limit).

Authorizations:
beareroauth2
path Parameters
runId
required
string
query Parameters
afterTick
required
string
limit
required
string

Responses

Координационные сообщения прогона

Лента coordination-сообщений персон с пагинацией по seq (afterSeq, limit).

Authorizations:
beareroauth2
path Parameters
runId
required
string
query Parameters
afterSeq
required
string
limit
required
string

Responses

Снимок мира на тике

Состояние мира прогона на конкретном тике (query-параметр tick обязателен).

Authorizations:
beareroauth2
path Parameters
runId
required
string
query Parameters
tick
required
string

Responses

Тики со снимками мира

Список тиков прогона, для которых доступен снимок состояния мира.

Authorizations:
beareroauth2
path Parameters
runId
required
string

Responses

Сводка прогона

Итоговая сводка прогона симулятора (персоны, тики, нарушения инвариантов).

Authorizations:
beareroauth2
path Parameters
runId
required
string

Responses

Список связей телематики

Связи «юнит провайдера ↔ актив» с фильтром по статусу и cursor-пагинацией.

Authorizations:
beareroauth2
query Parameters
status
string
Enum: "unlinked" "linked" "suspended"
calibrationStatus
string
Enum: "pending" "calibrated"
cursor
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...
limit
integer ( 0 .. 200 ]
Default: 50

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "53a4a333-2825-45a4-80d2-5f430d088f36"
}

Зарегистрировать юнит провайдера

Создаёт связь в состоянии unlinked (привязка к активу — отдельным PATCH :id/link).

Authorizations:
beareroauth2
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
provider
string
Default: "wialon"
Value: "wialon"

Провайдер телематики

externalUnitId
required
string [ 1 .. 200 ] characters

Идентификатор юнита у провайдера (стабильный ключ)

externalUnitLabel
string [ 1 .. 200 ] characters

Человекочитаемая метка юнита

Responses

Request samples

Content type
application/json
{
  • "provider": "wialon",
  • "externalUnitId": "unit-2",
  • "externalUnitLabel": "Объект_2"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "provider": "wialon",
  • "externalUnitId": "string",
  • "externalUnitLabel": "string",
  • "assetId": "9179b887-04ef-4ce5-ab3a-b5bbd39ea3c8",
  • "objectId": "e39ea5f2-2188-47f8-add0-f1976630af5e",
  • "status": "unlinked",
  • "calibrationStatus": "pending",
  • "lastMessageAt": "string",
  • "isStale": true
}

Позиции парка телематики

Последняя позиция каждой активной (linked) связки для обзорной карты парка (#1). Object-scoped фильтром: Foreman/Mechanic видят только свои объекты.

Authorizations:
beareroauth2

Responses

Response samples

Content type
application/json
{
  • "positions": [
    ]
}

Связь телематики по id

Карточка одной связи «юнит ↔ актив» (object-scoped по id).

Authorizations:
beareroauth2
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "provider": "wialon",
  • "externalUnitId": "string",
  • "externalUnitLabel": "string",
  • "assetId": "9179b887-04ef-4ce5-ab3a-b5bbd39ea3c8",
  • "objectId": "e39ea5f2-2188-47f8-add0-f1976630af5e",
  • "status": "unlinked",
  • "calibrationStatus": "pending",
  • "lastMessageAt": "string",
  • "isStale": true
}

Телеметрия связи

Последний дистиллированный сэмпл + короткое окно последних сообщений из firehose (одометр/зажигание/питание, признак «обесточен»). Object-scoped по id (ADR-0089, BL-32).

Authorizations:
beareroauth2
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "linkId": "009f739c-6620-43b0-978e-b245e723c57a",
  • "latest": {
    },
  • "window": {
    },
  • "recent": [
    ]
}

Приостановить связь

Переход linked → suspended; ingest по юниту замолкает (TLM-INV-05).

Authorizations:
beareroauth2
path Parameters
id
required
string
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
string [ 2 .. 500 ] characters

Responses

Request samples

Content type
application/json
{
  • "reason": "string"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "provider": "wialon",
  • "externalUnitId": "string",
  • "externalUnitLabel": "string",
  • "assetId": "9179b887-04ef-4ce5-ab3a-b5bbd39ea3c8",
  • "objectId": "e39ea5f2-2188-47f8-add0-f1976630af5e",
  • "status": "unlinked",
  • "calibrationStatus": "pending",
  • "lastMessageAt": "string",
  • "isStale": true
}

Возобновить связь

Переход suspended → linked; ingest по юниту возобновляется.

Authorizations:
beareroauth2
path Parameters
id
required
string
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
string [ 2 .. 500 ] characters

Responses

Request samples

Content type
application/json
{
  • "reason": "string"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "provider": "wialon",
  • "externalUnitId": "string",
  • "externalUnitLabel": "string",
  • "assetId": "9179b887-04ef-4ce5-ab3a-b5bbd39ea3c8",
  • "objectId": "e39ea5f2-2188-47f8-add0-f1976630af5e",
  • "status": "unlinked",
  • "calibrationStatus": "pending",
  • "lastMessageAt": "string",
  • "isStale": true
}

Отметить калибровку io_239→моточасы

pending → calibrated; гейт source-authority (TLM-INV-08) для записи показаний в EAM.

Authorizations:
beareroauth2
path Parameters
id
required
string
header Parameters
Idempotency-Key
required
string <uuid>
Example: 55555555-5555-4555-8555-555555555555

UUID v4 — повтор с тем же ключом возвращает сохранённый ответ (TTL 24ч)

Request Body schema: application/json
required
reason
string [ 2 .. 500 ] characters

Responses

Request samples

Content type
application/json
{
  • "reason": "string"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "provider": "wialon",
  • "externalUnitId": "string",
  • "externalUnitLabel": "string",
  • "assetId": "9179b887-04ef-4ce5-ab3a-b5bbd39ea3c8",
  • "objectId": "e39ea5f2-2188-47f8-add0-f1976630af5e",
  • "status": "unlinked",
  • "calibrationStatus": "pending",
  • "lastMessageAt": "string",
  • "isStale": true
}