Перейти к содержимому
СервисАпп API
На этой странице

Акты ремонта, монтажа и ТО

Все операции. Авторизация. Запросы и повторы.

Все пути в этом файле дополняют /api/v1 на домене организации.

Описание и ограничения

Назначение

Акт — основной рабочий документ СервисАпп. API позволяет создавать и изменять акты ремонта, монтажа и ТО, добавлять работы, товары и оборудование, а также выполнять допустимые переходы статуса.

Поля и назначение

Публичное поле Формат и смысл Доступ
id, number id и отображаемый номер только чтение
type repair / installation / maintenance при создании
customer_id, workshop_id, stock_id доступные связи чтение и запись
manager_id, technician_id id/null чтение и запись
status_id доступный общий или типовой статус; create только незакрывающий при создании / отдельная команда
device_type_id, manufacturer_id id/null чтение и запись
model_name, serial_number, appearance строки/null, описание принятого устройства чтение и запись
customer_note, internal_note, result строки/null с обычными правами акта чтение и запись
is_warranty_case логическое значение, через гарантийную операцию только чтение
previous_act_id, project_id, service_contract_id связи с проверкой согласованности чтение и запись
custom_fields, external_id типизированные значения и внешний ID чтение и запись
defect_ids, device_part_ids наборы ID справочников неисправностей и комплектации чтение и запись
version, updated_at строка Unix-секунд для version, дата и время UTC без дробной части для updated_at; при null — "0" и null только чтение

Обязательность и null указаны в схемах каждой операции ниже.

Доступ и выборка

Карточка содержит ссылки только для чтения: links.edit, links.portal, links.public: страницу редактирования с учётом типа акта, карточку в клиентском кабинете и короткую клиентскую ссылку. Правила доступа и null описаны в общих правилах.

acts:read/write/delete; «Акты приёма оборудования → Просмотр, Изменение, Удаление»; тариф и направление мастерской; права смены статуса и клиента.

customer_note, internal_note и result читаются с обычным правом «Акты приёма оборудования → Просмотр» и изменяются с «Акты приёма оборудования → Изменение», включая очистку значением null. Для смены customer_id у существующего акта дополнительно нужно «Акты приёма оборудования → Смена клиента у документа».

Фильтры: type, number, customer_id, workshop_id, status_id, manager_id, technician_id, external_id, created_from/to, updated_since.

Схемы команд

Для создания обязательны type, customer_id и workshop_id. Если status_id не передан, выбирается первый доступный незавершающий статус подходящего типа по настроенному порядку. Если такого статуса нет, возвращается 409 INITIAL_STATUS_UNAVAILABLE. Создать завершённый акт нельзя. По умолчанию manager_id указывает на владельца токена, если назначение допустимо, technician_id=null, а defect_ids, device_part_ids и custom_fields — пустые массивы. Склад выбирается из доступных складов мастерской. Если склад по умолчанию недоступен, передайте stock_id явно.

Defect_ids/device_part_ids — множества максимум из 100 ID; переданный массив заменяет связь целиком, [] очищает, отсутствие при изменении сохраняет. customer_note/internal_note/result — до 10000 символов/null. Для создания и изменения остальные связи, типы и права проверяются до записи; изменение клиента/мастерской/склада с несовместимым существующим составом даёт 409 ACT_RELATIONS_CONFLICT, а не переносит историю молча.

Команда JSON и предусловия Ответ
status обязательный status_id; If-Resource-Version акта 200 карточка и полный набор affected_resources; недопустимый переход — 409 STATUS_TRANSITION_NOT_ALLOWED
duplicate {}; If-Resource-Version исходного акта 201 карточка нового открытого акта; предупреждения о складском переносе сохранены
apply-kit обязательные kit_id и kit_version; If-Resource-Version акта 200 карточка акта с ссылки на ресурсы добавленных строк
delete {}; If-Resource-Version акта 200 запись с признаком удаления либо 409 RESOURCE_IN_USE

При duplicate обычные публичные поля и разрешённые дополнительные поля копируются; internal_note/result копируются по обычным правам акта. Ремонт сохраняет доступные связи оборудования; монтаж создаёт новые pending_install без физических серийных/инвентарных номеров и дат эксплуатации, связывая их с новыми товарными строками. ТО создаёт новые planned-заявки и свежие чек-листы без отметок выполнения. Суммы строк сохраняются, а недопустимые стандартные quantity/unit/money отклоняют команду целиком с ACT_COMPOSITION_CONFLICT до создания копии. Склад применяется один раз по текущему режиму; допустимые штатные предупреждения сохраняются, недопустимая нехватка в режиме учёта без партий откатывает операцию. Разные ключи могут создать разные копии неизменённого источника.

Правила и связи

  • Тип документа и основное направление мастерской — разные настройки. Обычная команда изменения не меняет тип акта.
  • Завершение монтажа вводит подготовленное оборудование в эксплуатацию; завершение ТО согласует заявки, результаты проверок и договор обслуживания.
  • Смена статуса вызывает единый доменный путь: разрешённый переход, согласование сметы, склад, гарантии и уведомления.
  • Если для акта подготовлено или подтверждено списание бонусов внешней программы, новые команды смены статуса, удаления, копирования, применения комплекта и изменения состава возвращают 409 EXTERNAL_EFFECT_RECONCILIATION_REQUIRED. Встроенная бонусная программа и акты без внешнего списания обрабатываются по обычным правилам.
  • status поддерживает ремонтные акты с выездами, работами и обычными товарами: штатный переход фиксирует гарантии работ и зарплатные начисления, завершает отложенное списание либо сохраняет немедленное, а при возврате в работу восстанавливает резерв. В affected_resources входят акт, все связанные выезды и товары, а также впервые завершённые работы. Штатные складские предупреждения сохраняются в записи об операции; недоступный явно выбранный серийный номер отклоняет весь переход. Повтор не создаёт второе списание, начисление или SMS-задачу.
  • Завершение монтажа вводит оборудование со статусом pending_install в эксплуатацию. Сохраняется ручная гарантия или срок из товара связанной строки продажи. Оборудование добавляется в единственный подходящий договор; если открытой заявки ещё нет, создаётся первое ТО с чек-листом. День ввода определяется по последнему фактическому выезду в часовом поясе организации; end_date остаётся календарной датой. Все изменения оборудования, договоров, заявок и чек-листов перечислены в meta.affected_resources. Нужны equipment:read/write, для товара — products:read, для изменения состава договора — service_contracts:read/write, для создания ТО — maintenance_schedules:read/write, для чек-листа — maintenance_checklists:read/write и соответствующие права сотрудника. Автоматически выбранный договор и существующая заявка также должны быть доступны. Ошибка любой единицы отменяет весь переход. Повтор запроса не выполняет ввод, ТО или списание заново. Возврат акта в работу сохраняет ввод и гарантию. При утрате прав или смене принадлежности оборудования и договора сохранённый ответ становится недоступен.
  • Смена статуса акта ТО учитывает связанные заявки, сценарии, индивидуальные и автоматические планы, договоры и результаты проверок. При завершении проверяются обязательные поля и чек-лист, применяются сохранённые правила, обновляются сроки и наработка оборудования, изменяется или создаётся план сценария. Фактически изменённые заявки, результаты и планы входят в meta.affected_resources. Нужны maintenance_schedules:read/write и equipment:read/write; для сценария — maintenance_scenarios:read, для плана — maintenance_plans:read/write, для договора — service_contracts:read и права просмотра клиента и договора. Изменение результатов требует maintenance_checklists:read/write. Проверяются мастерская, клиент, связи и состав оборудования договора. Завершение не начисляет абонентскую плату и не выполняет оплату. Любая ошибка отменяет весь переход. При повторе запроса доступ к исходным и текущим записям проверяется заново. Возврат старого ТО в работу не отменяет более позднее завершение оборудования или цикла плана. Версии сохраняют секундную точность.
  • Товарные строки, связанные с оборудованием или заявкой ТО, создают или снимают оснащение: компоненты, лицензии и сертификаты с общим или серийным учётом. Проверяются текущие товар, оборудование, заявка и существующее оснащение. Нужны products:read, equipment:read/write, equipment_assignments:read/write, а для связи с заявкой — maintenance_schedules:read. Если история продления защищена, возвращается 409 ASSIGNMENT_HISTORY_LOCKED. Повтор запроса не создаёт вторую запись оснащения.
  • Гарантийная цепочка проверяется как источник чтения: предыдущий документ и прямые гарантийные дочерние акты могут иметь любой допустимый тип. Нужны acts:read, право просмотра и доступ к их мастерским; право записи источника не требуется. Оборудование ремонта дополнительно требует equipment:read. Исходная и текущая цепочки входят в закрытый контекст записи об операции; изменение клиентской принадлежности, связей или видимости запрещает replay. Связанные документы не изменяются самим переходом.
  • Существующие оплаты, счета, онлайн-счета, складские документы, УПД и заказы сохраняются при смене статуса и переоткрытии: эта команда не меняет их и не раскрывает финансовые карточки. Проект монтажа требует acts:read и текущего доступа к направлению/мастерской; явный договор — service_contracts:read и право просмотра. Их клиент и мастерская должны соответствовать акту. Исходные ссылки и контекст сохраняются для проверки повторные запросы, в том числе при наличии бот-уведомления. Некорректные связи дают 409 ACT_RELATIONS_CONFLICT; смена контекста после принятия запрещает запись об операции.
  • При смене статуса задания на уведомление через подключённые Telegram и MAX сохраняются вместе с результатом команды. Ответ 200 подтверждает сохранение изменений и заданий, но не доставку сообщений. Повтор запроса не создаёт второе уведомление. Перед отправкой проверяются текущие права, клиент, получатель и актуальность перехода. При неизвестном результате отправки автоматический повтор прекращается.
  • Клиент не задаёт признаки согласования, время завершения, расчётные показатели и токены клиентских ссылок.
  • Работы и товары изменяются через вложенные ресурсы; итоги и ЗП вычисляет сервер.
  • Изменение строк, связей, дополнительных полей и вложений обновляет updated_at акта в той же транзакции.
  • GET не создаёт клиентскую ссылку, просмотр клиента, оборудование или чек-лист.

Пример входных данных

{
  "external_id": "crm-act-301",
  "type": "repair",
  "customer_id": 12,
  "workshop_id": 2,
  "manager_id": 5,
  "manufacturer_id": 3,
  "model_name": "Модель А",
  "serial_number": "SN-001",
  "customer_note": "Не включается"
}

Операции

Метод Путь Назначение
POST /acts/{id}/apply-kit Применение комплекта работ и товаров
POST /acts/{id}/duplicate Копирование по обычным правилам
GET /acts Список с фильтрами и пагинацией
POST /acts Создание
GET /acts/{id} Карточка
POST /acts/{id}/update Изменение разрешённых полей
POST /acts/{id}/status Переход статуса, включая завершение и повторное открытие
POST /acts/{id}/delete Удаление с проверкой зависимостей

POST /acts/{id}/apply-kit

Применение комплекта работ и товаров.

Доступ. Разрешения подключения: acts:write. Права сотрудника: «Акты приёма оборудования → Изменение», «Акты приёма оборудования → Просмотр», «Справочники → Просмотр». Дополнительно действуют доступ к записям, мастерским, модулям и условия полей из описания ресурса выше.

Параметры

Имя Где Тип Обязательно null Ограничения
Authorization заголовок строка да нет Bearer <SERVICEAPP_TOKEN>
id путь строка да нет Шаблон: ^(?:[0-9]+)$
Idempotency-Key заголовок строка да нет не менее 1 символов; не более 128 символов; Шаблон: ^[A-Za-z0-9._:-]+$
If-Resource-Version заголовок строка да нет не менее 1 символов; не более 128 символов; Шаблон: ^[A-Za-z0-9._~-]+$

Тело запроса

Content-Type: application/json. Тело обязательно.

Поле Тип Обязательно null Ограничения и смысл
kit_id целое число да нет ≥ 1
kit_version строка да нет Шаблон: ^(?:0|[1-9][0-9]{0,19})$

Ответы

HTTP Назначение и схема
200 Успех. Полная схема и пример
400 Некорректный запрос. Коды и формат ошибки
401 Требуется действующий Bearer. Коды и формат ошибки
403 Недостаточно допуска. Коды и формат ошибки
404 Не найдено или недоступно. Коды и формат ошибки
409 Конфликт состояния или повтора. Коды и формат ошибки
412 Версия устарела. Коды и формат ошибки
413 Превышен размер. Коды и формат ошибки
415 Неподдерживаемый Content-Type. Коды и формат ошибки
422 Ошибка входных данных. Коды и формат ошибки
428 Нужно предусловие версии. Коды и формат ошибки
429 Лимит запросов, Retry-After. Коды и формат ошибки
500 Внутренняя ошибка, исход нужно уточнить. Коды и формат ошибки
503 Временно недоступно. Коды и формат ошибки
HTTP Заголовок ответа Тип Описание
200 Location строка

Каждый ответ содержит новый 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/acts/101/apply-kit" \
  --header "Authorization: Bearer $SERVICEAPP_TOKEN" \
  --header "Accept: application/json" \
  --header "Idempotency-Key: example:v1-acts-apply-kit:001" \
  --header "If-Resource-Version: $RESOURCE_VERSION" \
  --header "Content-Type: application/json" \
  --data-binary '@examples/requests/v1.acts.apply-kit.json'

POST /acts/{id}/duplicate

Копирование по обычным правилам.

Доступ. Разрешения подключения: acts:write. Права сотрудника: «Акты приёма оборудования → Изменение». Дополнительно действуют доступ к записям, мастерским, модулям и условия полей из описания ресурса выше.

Параметры

Имя Где Тип Обязательно null Ограничения
Authorization заголовок строка да нет Bearer <SERVICEAPP_TOKEN>
id путь строка да нет Шаблон: ^(?:[0-9]+)$
Idempotency-Key заголовок строка да нет не менее 1 символов; не более 128 символов; Шаблон: ^[A-Za-z0-9._:-]+$
If-Resource-Version заголовок строка да нет не менее 1 символов; не более 128 символов; Шаблон: ^[A-Za-z0-9._~-]+$

Тело запроса

Content-Type: application/json. Тело обязательно.

Тело — пустой JSON-объект {}. Другие ключи не принимаются.

Ответы

HTTP Назначение и схема
201 Создано. Полная схема и пример
400 Некорректный запрос. Коды и формат ошибки
401 Требуется действующий Bearer. Коды и формат ошибки
403 Недостаточно допуска. Коды и формат ошибки
404 Не найдено или недоступно. Коды и формат ошибки
409 Конфликт состояния или повтора. Коды и формат ошибки
412 Версия устарела. Коды и формат ошибки
413 Превышен размер. Коды и формат ошибки
415 Неподдерживаемый Content-Type. Коды и формат ошибки
422 Ошибка входных данных. Коды и формат ошибки
428 Нужно предусловие версии. Коды и формат ошибки
429 Лимит запросов, Retry-After. Коды и формат ошибки
500 Внутренняя ошибка, исход нужно уточнить. Коды и формат ошибки
503 Временно недоступно. Коды и формат ошибки
HTTP Заголовок ответа Тип Описание
201 Location строка

Каждый ответ содержит новый 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/acts/101/duplicate" \
  --header "Authorization: Bearer $SERVICEAPP_TOKEN" \
  --header "Accept: application/json" \
  --header "Idempotency-Key: example:v1-acts-duplicate:001" \
  --header "If-Resource-Version: $RESOURCE_VERSION" \
  --header "Content-Type: application/json" \
  --data-binary '@examples/requests/v1.acts.duplicate.json'

GET /acts

Акты доступных мастерских с фильтрами и пагинацией по курсору.

Доступ. Разрешения подключения: acts:read. Права сотрудника: «Акты приёма оборудования → Просмотр». Дополнительно действуют доступ к записям, мастерским, модулям и условия полей из описания ресурса выше.

Параметры

Имя Где Тип Обязательно null Ограничения
Authorization заголовок строка да нет Bearer <SERVICEAPP_TOKEN>
filter[type] параметр запроса строка нет нет Допустимо: "repair", "installation", "maintenance"; Тип акта: ремонт (по умолчанию) / выездной монтаж / плановое ТО. На уровне БД хранится строковой колонкой acts.type, здесь — типизированный фасад.
filter[number] параметр запроса строка нет нет не более 64 символов
filter[customer_id] параметр запроса целое число нет нет ≥ 1
filter[workshop_id] параметр запроса целое число нет нет ≥ 1
filter[status_id] параметр запроса целое число нет нет ≥ 1
filter[manager_id] параметр запроса целое число нет нет ≥ 1
filter[technician_id] параметр запроса целое число нет нет ≥ 1
filter[external_id] параметр запроса строка нет нет не менее 1 символов; не более 255 символов
filter[created_from] параметр запроса строка (дата и время) нет нет не более 64 символов; Шаблон: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,6})?(?:Z|[+-]\d{2}:\d{2})$
filter[created_to] параметр запроса строка (дата и время) нет нет не более 64 символов; Шаблон: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,6})?(?:Z|[+-]\d{2}:\d{2})$
filter[updated_since] параметр запроса строка (дата и время) нет нет не более 64 символов; Шаблон: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,6})?(?:Z|[+-]\d{2}:\d{2})$
filter[updated_before] параметр запроса строка (дата и время) нет нет не более 64 символов; Шаблон: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,6})?(?:Z|[+-]\d{2}:\d{2})$
sort параметр запроса строка нет нет Допустимо: "id", "-id", "updated_at,id", "-updated_at,-id"
page[size] параметр запроса целое число нет нет ≥ 1; ≤ 100
page[cursor] параметр запроса строка нет нет не более 8192 символов

Ответы

HTTP Назначение и схема
200 Успех. Полная схема и пример
400 Некорректный запрос. Коды и формат ошибки
401 Требуется действующий Bearer. Коды и формат ошибки
403 Недостаточно допуска. Коды и формат ошибки
406 Недопустимое кодирование ответа. Коды и формат ошибки
409 Конфликт состояния или повтора. Коды и формат ошибки
422 Ошибка входных данных. Коды и формат ошибки
429 Лимит запросов, Retry-After. Коды и формат ошибки
500 Внутренняя ошибка, исход нужно уточнить. Коды и формат ошибки
503 Временно недоступно. Коды и формат ошибки
HTTP Заголовок ответа Тип Описание
200 Cache-Control строка
400 Cache-Control строка
401 Cache-Control строка
403 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/acts" \
  --header "Authorization: Bearer $SERVICEAPP_TOKEN" \
  --header "Accept: application/json"

POST /acts

Создание открытого акта ремонта, монтажа или ТО.

Доступ. Разрешения подключения: acts:write. Права сотрудника: «Акты приёма оборудования → Изменение». Дополнительно действуют доступ к записям, мастерским, модулям и условия полей из описания ресурса выше.

Параметры

Имя Где Тип Обязательно null Ограничения
Authorization заголовок строка да нет Bearer <SERVICEAPP_TOKEN>
Idempotency-Key заголовок строка да нет Ключ команды подключения, 1–128 символов A–Z/a–z/0–9/._:-.; не менее 1 символов; не более 128 символов; Шаблон: ^[A-Za-z0-9._:-]+$

Тело запроса

Content-Type: application/json. Тело обязательно.

Поле Тип Обязательно null Ограничения и смысл
type строка да нет Допустимо: "repair", "installation", "maintenance"; Тип акта: ремонт (по умолчанию) / выездной монтаж / плановое ТО. На уровне БД хранится строковой колонкой acts.type, здесь — типизированный фасад.
customer_id целое число да нет ≥ 1
workshop_id целое число да нет ≥ 1
stock_id целое число нет нет ≥ 1
manager_id целое число / null нет да ≥ 1
technician_id целое число / null нет да ≥ 1
status_id целое число нет нет ≥ 1
device_type_id целое число / null нет да ≥ 1
manufacturer_id целое число / null нет да ≥ 1
model_name строка / null нет да не более 255 символов
serial_number строка / null нет да не более 255 символов
appearance строка / null нет да не более 255 символов
customer_note строка / null нет да не более 10000 символов
internal_note строка / null нет да не более 10000 символов
result строка / null нет да не более 10000 символов
previous_act_id целое число / null нет да ≥ 1
project_id целое число / null нет да ≥ 1
service_contract_id целое число / null нет да ≥ 1
external_id строка / null нет да не менее 1 символов; не более 255 символов
defect_ids массив нет нет не более 100 элементов; Без повторов
defect_ids[] целое число да нет ≥ 1
device_part_ids массив нет нет не более 100 элементов; Без повторов
device_part_ids[] целое число да нет ≥ 1
custom_fields массив нет нет не более 100 элементов; Без повторов
custom_fields[] объект да нет Только перечисленные ключи
custom_fields[].field_id целое число да нет ≥ 1
custom_fields[].value строка / логическое значение / массив / объект / null да да —
custom_fields[].value (вариант 3) массив нет нет —
custom_fields[].value (вариант 3)[] строка да нет —
custom_fields[].value (вариант 4) объект нет нет —
custom_fields[].value (вариант 4).amount строка да нет —
custom_fields[].value (вариант 4).currency строка да нет —

Ответы

HTTP Назначение и схема
201 Создано. Полная схема и пример
400 Некорректный запрос. Коды и формат ошибки
401 Требуется действующий Bearer. Коды и формат ошибки
403 Недостаточно допуска. Коды и формат ошибки
404 Не найдено или недоступно. Коды и формат ошибки
409 Конфликт состояния или повтора. Коды и формат ошибки
413 Превышен размер. Коды и формат ошибки
415 Неподдерживаемый Content-Type. Коды и формат ошибки
422 Ошибка входных данных. Коды и формат ошибки
429 Лимит запросов, Retry-After. Коды и формат ошибки
500 Внутренняя ошибка, исход нужно уточнить. Коды и формат ошибки
503 Временно недоступно. Коды и формат ошибки
HTTP Заголовок ответа Тип Описание
201 Cache-Control строка
201 Location строка
201 Idempotency-Replayed строка
400 Cache-Control строка
401 Cache-Control строка
403 Cache-Control строка
404 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/acts" \
  --header "Authorization: Bearer $SERVICEAPP_TOKEN" \
  --header "Accept: application/json" \
  --header "Idempotency-Key: example:v1-acts-store:001" \
  --header "Content-Type: application/json" \
  --data-binary '@examples/requests/v1.acts.store.json'

GET /acts/{id}

Карточка акта, включая служебную заметку и результат работ.

Доступ. Разрешения подключения: acts:read. Права сотрудника: «Акты приёма оборудования → Просмотр». Дополнительно действуют доступ к записям, мастерским, модулям и условия полей из описания ресурса выше.

Параметры

Имя Где Тип Обязательно null Ограничения
Authorization заголовок строка да нет Bearer <SERVICEAPP_TOKEN>
id путь строка да нет Шаблон: ^(?:[0-9]+)$
If-None-Match заголовок строка нет нет ETag представления из предыдущего GET.; —

Ответы

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/acts/101" \
  --header "Authorization: Bearer $SERVICEAPP_TOKEN" \
  --header "Accept: application/json"

POST /acts/{id}/update

Изменить разрешённые поля акта, сохраняя отсутствующие значения.

Доступ. Разрешения подключения: acts:write. Права сотрудника: «Акты приёма оборудования → Изменение». Дополнительно действуют доступ к записям, мастерским, модулям и условия полей из описания ресурса выше.

Параметры

Имя Где Тип Обязательно null Ограничения
Authorization заголовок строка да нет Bearer <SERVICEAPP_TOKEN>
id путь строка да нет Шаблон: ^(?:[0-9]+)$
Idempotency-Key заголовок строка да нет Ключ команды подключения, 1–128 символов A–Z/a–z/0–9/._:-.; не менее 1 символов; не более 128 символов; Шаблон: ^[A-Za-z0-9._:-]+$
If-Resource-Version заголовок строка да нет data.version акта: Unix-секунды updated_at; для null — "0".; не менее 1 символов; не более 128 символов; Шаблон: ^[A-Za-z0-9._~-]+$

Тело запроса

Content-Type: application/json. Тело обязательно.

Поле Тип Обязательно null Ограничения и смысл
customer_id целое число нет нет ≥ 1
workshop_id целое число нет нет ≥ 1
stock_id целое число нет нет ≥ 1
manager_id целое число / null нет да ≥ 1
technician_id целое число / null нет да ≥ 1
device_type_id целое число / null нет да ≥ 1
manufacturer_id целое число / null нет да ≥ 1
model_name строка / null нет да не более 255 символов
serial_number строка / null нет да не более 255 символов
appearance строка / null нет да не более 255 символов
customer_note строка / null нет да не более 10000 символов
internal_note строка / null нет да не более 10000 символов
result строка / null нет да не более 10000 символов
previous_act_id целое число / null нет да ≥ 1
project_id целое число / null нет да ≥ 1
service_contract_id целое число / null нет да ≥ 1
external_id строка / null нет да не менее 1 символов; не более 255 символов
defect_ids массив нет нет не более 100 элементов; Без повторов
defect_ids[] целое число да нет ≥ 1
device_part_ids массив нет нет не более 100 элементов; Без повторов
device_part_ids[] целое число да нет ≥ 1
custom_fields массив нет нет не более 100 элементов; Без повторов
custom_fields[] объект да нет Только перечисленные ключи
custom_fields[].field_id целое число да нет ≥ 1
custom_fields[].value строка / логическое значение / массив / объект / null да да —
custom_fields[].value (вариант 3) массив нет нет —
custom_fields[].value (вариант 3)[] строка да нет —
custom_fields[].value (вариант 4) объект нет нет —
custom_fields[].value (вариант 4).amount строка да нет —
custom_fields[].value (вариант 4).currency строка да нет —

Ответы

HTTP Назначение и схема
200 Успех. Полная схема и пример
400 Некорректный запрос. Коды и формат ошибки
401 Требуется действующий Bearer. Коды и формат ошибки
403 Недостаточно допуска. Коды и формат ошибки
404 Не найдено или недоступно. Коды и формат ошибки
409 Конфликт состояния или повтора. Коды и формат ошибки
412 Версия устарела. Коды и формат ошибки
413 Превышен размер. Коды и формат ошибки
415 Неподдерживаемый Content-Type. Коды и формат ошибки
422 Ошибка входных данных. Коды и формат ошибки
428 Нужно предусловие версии. Коды и формат ошибки
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 строка
409 Cache-Control строка
412 Cache-Control строка
413 Cache-Control строка
415 Cache-Control строка
422 Cache-Control строка
428 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/acts/101/update" \
  --header "Authorization: Bearer $SERVICEAPP_TOKEN" \
  --header "Accept: application/json" \
  --header "Idempotency-Key: example:v1-acts-update:001" \
  --header "If-Resource-Version: $RESOURCE_VERSION" \
  --header "Content-Type: application/json" \
  --data-binary '@examples/requests/v1.acts.update.json'

POST /acts/{id}/status

Смена статуса акта с согласованным обновлением склада, гарантий и обслуживания.

Доступ. Разрешения подключения: acts:write. Права сотрудника: «Акты приёма оборудования → Изменение». Дополнительно действуют доступ к записям, мастерским, модулям и условия полей из описания ресурса выше.

Параметры

Имя Где Тип Обязательно null Ограничения
Authorization заголовок строка да нет Bearer <SERVICEAPP_TOKEN>
id путь строка да нет Шаблон: ^(?:[0-9]+)$
Idempotency-Key заголовок строка да нет Ключ команды подключения, 1–128 символов A–Z/a–z/0–9/._:-.; не менее 1 символов; не более 128 символов; Шаблон: ^[A-Za-z0-9._:-]+$
If-Resource-Version заголовок строка да нет data.version акта: Unix-секунды updated_at; для null — "0".; не менее 1 символов; не более 128 символов; Шаблон: ^[A-Za-z0-9._~-]+$

Тело запроса

Content-Type: application/json. Тело обязательно.

Поле Тип Обязательно null Ограничения и смысл
status_id целое число да нет ≥ 1

Ответы

HTTP Назначение и схема
200 Успех. Полная схема и пример
400 Некорректный запрос. Коды и формат ошибки
401 Требуется действующий Bearer. Коды и формат ошибки
403 Недостаточно допуска. Коды и формат ошибки
404 Не найдено или недоступно. Коды и формат ошибки
409 Конфликт состояния или повтора. Коды и формат ошибки
412 Версия устарела. Коды и формат ошибки
413 Превышен размер. Коды и формат ошибки
415 Неподдерживаемый Content-Type. Коды и формат ошибки
422 Ошибка входных данных. Коды и формат ошибки
428 Нужно предусловие версии. Коды и формат ошибки
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 строка
409 Cache-Control строка
412 Cache-Control строка
413 Cache-Control строка
415 Cache-Control строка
422 Cache-Control строка
428 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/acts/101/status" \
  --header "Authorization: Bearer $SERVICEAPP_TOKEN" \
  --header "Accept: application/json" \
  --header "Idempotency-Key: example:v1-acts-status:001" \
  --header "If-Resource-Version: $RESOURCE_VERSION" \
  --header "Content-Type: application/json" \
  --data-binary '@examples/requests/v1.acts.status.json'

POST /acts/{id}/delete

Удалить акт без зависимостей; повтор возвращает сохранённый tombstone.

Доступ. Разрешения подключения: acts:delete. Права сотрудника: «Акты приёма оборудования → Удаление». Дополнительно действуют доступ к записям, мастерским, модулям и условия полей из описания ресурса выше.

Параметры

Имя Где Тип Обязательно null Ограничения
Authorization заголовок строка да нет Bearer <SERVICEAPP_TOKEN>
id путь строка да нет Шаблон: ^(?:[0-9]+)$
Idempotency-Key заголовок строка да нет Ключ команды подключения, 1–128 символов A–Z/a–z/0–9/._:-.; не менее 1 символов; не более 128 символов; Шаблон: ^[A-Za-z0-9._:-]+$
If-Resource-Version заголовок строка да нет data.version акта: Unix-секунды updated_at; для null — "0".; не менее 1 символов; не более 128 символов; Шаблон: ^[A-Za-z0-9._~-]+$

Тело запроса

Content-Type: application/json. Тело обязательно.

Тело — пустой JSON-объект {}. Другие ключи не принимаются.

Ответы

HTTP Назначение и схема
200 Успех. Полная схема и пример
400 Некорректный запрос. Коды и формат ошибки
401 Требуется действующий Bearer. Коды и формат ошибки
403 Недостаточно допуска. Коды и формат ошибки
404 Не найдено или недоступно. Коды и формат ошибки
409 Конфликт состояния или повтора. Коды и формат ошибки
412 Версия устарела. Коды и формат ошибки
413 Превышен размер. Коды и формат ошибки
415 Неподдерживаемый Content-Type. Коды и формат ошибки
422 Ошибка входных данных. Коды и формат ошибки
428 Нужно предусловие версии. Коды и формат ошибки
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 строка
409 Cache-Control строка
412 Cache-Control строка
413 Cache-Control строка
415 Cache-Control строка
422 Cache-Control строка
428 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/acts/101/delete" \
  --header "Authorization: Bearer $SERVICEAPP_TOKEN" \
  --header "Accept: application/json" \
  --header "Idempotency-Key: example:v1-acts-destroy:001" \
  --header "If-Resource-Version: $RESOURCE_VERSION" \
  --header "Content-Type: application/json" \
  --data-binary '@examples/requests/v1.acts.destroy.json'