Акты ремонта, монтажа и ТО
Все операции. Авторизация. Запросы и повторы.
Все пути в этом файле дополняют /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'