Показания наработки
Все операции. Авторизация. Запросы и повторы.
Все пути в этом файле дополняют /api/v1 на домене организации.
Описание и ограничения
Назначение
Получение текущих показаний и регистрация новой наработки с проверкой единицы и генерацией обслуживания при достижении порога.
Поля и назначение
| Публичное поле | Формат и смысл | Доступ |
|---|---|---|
reading |
неотрицательное целое число | чтение и запись |
usage_unit_id |
id действующей единицы; при записи обязателен и должен совпасть; настройка через equipment |
входное поле / только чтение |
last_service_reading |
целое число | только чтение |
maintenance_interval |
целое число/null | только чтение |
remaining_until_maintenance |
целое число/null, без подмены отсутствующих данных нулём | только чтение |
plans |
массив id, next_due_usage и remaining; отдельные пороги планов |
только чтение |
changed |
логическое значение, только в ответе POST | только чтение |
Обязательность и null указаны в схемах каждой операции ниже.
Доступ и выборка
equipment_usage:read/write и «ТОиР — Оборудование → Просмотр, Изменение»; автоматическое создание ТО сохраняет тарифные ограничения.
Запрос и ответ
POST принимает ровно reading (целое число JSON >= 0) и usage_unit_id (целое число JSON > 0), оба обязательны. If-Resource-Version не требуется. Если единица не настроена — 409 USAGE_UNIT_NOT_CONFIGURED; несовпадение — 422 USAGE_UNIT_MISMATCH, без записи. Ответ 200 содержит текущее состояние usage, changed и meta.affected_resources с созданными заявками. Не превышающее максимум показание успешно возвращает changed=false.
maintenance_interval и верхнеуровневый remaining_until_maintenance описывают интервал по умолчанию карточки. При наличии активных usage/hybrid-планов верхнеуровневый remaining_until_maintenance=null, а фактические пороги передаются в plans: { "id": 3, "next_due_usage": 1500, "remaining": 120 }. Отрицательный remaining означает превышение; отсутствие настроенного порога — null. Справочник единиц сам по себе не назначает единицу оборудованию.
Правила и связи
- Показание
reading, которое не превышает текущее, не меняет наработку. Ответ содержитchanged=falseи действующее показание. - Единицы не конвертируются молча; замена/сброс счётчика не маскируется под обычное показание.
- Порог порождает заявку по действующим планам без дублей одного цикла.
- GET возвращает текущее состояние наработки. История всех показаний через этот ресурс недоступна.
Операции
| Метод | Путь | Назначение |
|---|---|---|
| GET | /equipment/{id}/usage |
Текущие показания, единица и порог обслуживания |
| POST | /equipment/{id}/usage |
Регистрация показания |
GET /equipment/{id}/usage
Текущие показания, единица и порог обслуживания.
Доступ. Разрешения подключения: equipment_usage:read. Права сотрудника: «ТОиР — Оборудование → Просмотр». Дополнительно действуют доступ к записям, мастерским, модулям и условия полей из описания ресурса выше.
Параметры
| Имя | Где | Тип | Обязательно | null | Ограничения |
|---|---|---|---|---|---|
Authorization |
заголовок | строка | да | нет | Bearer <SERVICEAPP_TOKEN> |
id |
путь | строка | да | нет | Шаблон: ^(?:[0-9]+)$ |
If-None-Match |
заголовок | строка | нет | нет | — |
Ответы
| HTTP | Назначение и схема |
|---|---|
| 200 | Успех. Полная схема и пример |
| 304 | Представление не изменилось, без тела. Условный GET |
| 400 | Некорректный запрос. Коды и формат ошибки |
| 401 | Требуется действующий Bearer. Коды и формат ошибки |
| 403 | Недостаточно допуска. Коды и формат ошибки |
| 404 | Не найдено или недоступно. Коды и формат ошибки |
| 406 | Недопустимое кодирование ответа. Коды и формат ошибки |
| 409 | Конфликт состояния или повтора. Коды и формат ошибки |
| 422 | Ошибка входных данных. Коды и формат ошибки |
| 429 | Лимит запросов, Retry-After. Коды и формат ошибки |
| 500 | Внутренняя ошибка, исход нужно уточнить. Коды и формат ошибки |
| 503 | Временно недоступно. Коды и формат ошибки |
| HTTP | Заголовок ответа | Тип | Описание |
|---|---|---|---|
| 200 | Cache-Control |
строка | |
| 200 | ETag |
строка | |
| 304 | Cache-Control |
строка | |
| 304 | ETag |
строка | |
| 400 | Cache-Control |
строка | |
| 401 | Cache-Control |
строка | |
| 403 | Cache-Control |
строка | |
| 404 | Cache-Control |
строка | |
| 406 | Cache-Control |
строка | |
| 409 | Cache-Control |
строка | |
| 422 | Cache-Control |
строка | |
| 429 | Cache-Control |
строка | |
| 429 | Retry-After |
строка | |
| 500 | Cache-Control |
строка | |
| 503 | Cache-Control |
строка |
Каждый ответ содержит новый X-Request-Id в заголовке. Общие транспортные отказы и правила повтора действуют также при отказе до контроллера; см. ошибки.
Пример запроса
Запускается из каталога комплекта после настройки переменных в быстром старте. Замените демонстрационные идентификаторы 101 и UUID идентификаторами доступных записей. $RESOURCE_VERSION берётся из GET владельца версии, описанного выше. Для нового действия сохраните новый ключ; для повтора используйте прежний.
curl --silent --show-error --globoff \
"$API/equipment/101/usage" \
--header "Authorization: Bearer $SERVICEAPP_TOKEN" \
--header "Accept: application/json"
POST /equipment/{id}/usage
Регистрация показания.
Доступ. Разрешения подключения: equipment_usage:write. Права сотрудника: «ТОиР — Оборудование → Изменение». Дополнительно действуют доступ к записям, мастерским, модулям и условия полей из описания ресурса выше.
Параметры
| Имя | Где | Тип | Обязательно | null | Ограничения |
|---|---|---|---|---|---|
Authorization |
заголовок | строка | да | нет | Bearer <SERVICEAPP_TOKEN> |
id |
путь | строка | да | нет | Шаблон: ^(?:[0-9]+)$ |
Idempotency-Key |
заголовок | строка | да | нет | не менее 1 символов; не более 128 символов; Шаблон: ^[A-Za-z0-9._:-]+$ |
Тело запроса
Content-Type: application/json. Тело обязательно.
| Поле | Тип | Обязательно | null | Ограничения и смысл |
|---|---|---|---|---|
reading |
целое число | да | нет | ≥ 0; ≤ 9223372036854775807 |
usage_unit_id |
целое число | да | нет | ≥ 1 |
Ответы
| HTTP | Назначение и схема |
|---|---|
| 200 | Успех. Полная схема и пример |
| 400 | Некорректный запрос. Коды и формат ошибки |
| 401 | Требуется действующий Bearer. Коды и формат ошибки |
| 403 | Недостаточно допуска. Коды и формат ошибки |
| 404 | Не найдено или недоступно. Коды и формат ошибки |
| 406 | Недопустимое кодирование ответа. Коды и формат ошибки |
| 409 | Конфликт состояния или повтора. Коды и формат ошибки |
| 413 | Превышен размер. Коды и формат ошибки |
| 415 | Неподдерживаемый Content-Type. Коды и формат ошибки |
| 422 | Ошибка входных данных. Коды и формат ошибки |
| 429 | Лимит запросов, Retry-After. Коды и формат ошибки |
| 500 | Внутренняя ошибка, исход нужно уточнить. Коды и формат ошибки |
| 503 | Временно недоступно. Коды и формат ошибки |
| HTTP | Заголовок ответа | Тип | Описание |
|---|---|---|---|
| 200 | Cache-Control |
строка | |
| 200 | Location |
строка | |
| 200 | Idempotency-Replayed |
строка | |
| 400 | Cache-Control |
строка | |
| 401 | Cache-Control |
строка | |
| 403 | Cache-Control |
строка | |
| 404 | Cache-Control |
строка | |
| 406 | Cache-Control |
строка | |
| 409 | Cache-Control |
строка | |
| 413 | Cache-Control |
строка | |
| 415 | Cache-Control |
строка | |
| 422 | Cache-Control |
строка | |
| 429 | Cache-Control |
строка | |
| 429 | Retry-After |
строка | |
| 500 | Cache-Control |
строка | |
| 503 | Cache-Control |
строка |
Каждый ответ содержит новый X-Request-Id в заголовке. Общие транспортные отказы и правила повтора действуют также при отказе до контроллера; см. ошибки.
У принятого POST Location и meta.operation_id указывают на журнал операции; ETag отсутствует. При повторе запроса сохраняются исходные data/meta, добавляется Idempotency-Replayed: true. Версии передавайте по назначению, указанному в описании ресурса.
Пример запроса
Запускается из каталога комплекта после настройки переменных в быстром старте. Замените демонстрационные идентификаторы 101 и UUID идентификаторами доступных записей. $RESOURCE_VERSION берётся из GET владельца версии, описанного выше. Для нового действия сохраните новый ключ; для повтора используйте прежний.
curl --silent --show-error --globoff --request POST \
"$API/equipment/101/usage" \
--header "Authorization: Bearer $SERVICEAPP_TOKEN" \
--header "Accept: application/json" \
--header "Idempotency-Key: example:v1-equipment-usage-store:001" \
--header "Content-Type: application/json" \
--data-binary '@examples/requests/v1.equipment.usage.store.json'