Руководство пользователя HubEx

Краткие инcтрукции по работе, основные понятия и первые шаги по освоению платформы.

WH — примеры

Что здесь: блоки примеров запросов/ответов ручек сервиса WH, вынесенные из endpoints/WH.md. Сигнатуры и типы — там же и в schemas/WH.md.

Documents

GET /Documents

Пример запроса:

GET /Documents?fetch=100&offset=0&searchText=TR-000123

Диапазон можно задать заголовком Range или query-параметрами fetch и offset.

Пример успешного ответа (200):

[
  {
    "id": 101,
    "name": "TR-000123",
    "documentTypeID": 3,
    "documentType": {
      "id": 3,
      "name": "Перемещение"
    },
    "documentStatus": {
      "id": 2,
      "code": "Posted",
      "name": "Проведен"
    },
    "created": "2026-03-30T10:15:00Z",
    "modified": null,
    "documentDate": "2026-03-30T00:00:00Z",
    "posted": "2026-03-30T10:20:00Z",
    "deleted": "2026-03-30T11:00:00Z",
    "fromWarehouseID": 10,
    "fromWarehouse": {
      "id": 10,
      "name": "Склад-источник"
    },
    "toWarehouseID": 20,
    "toWarehouse": {
      "id": 20,
      "name": "Склад-приемник"
    },
    "operationType": {
      "id": 3,
      "name": "Перемещение"
    },
    "relatedTaskID": 4567,
    "taskNumber": "TASK-4567",
    "responsiblePerson": {
      "id": 123,
      "name": "Иванов Иван"
    },
    "description": "Комментарий по документу"
  }
]

Пример успешного ответа (206):

Тело ответа имеет тот же формат, что и для 200 (включая поле documentDate), но содержит частичный диапазон. Общее количество записей возвращается в заголовке Content-Range.

Негативные сценарии:

Issues

GET /Issues

Пример запроса:

GET /Issues?searchText=IS-000123

Пример успешного ответа (200):

{
  "101": {
    "warehouseID": 10,
    "warehouseName": "Основной склад",
    "documentStatus": null,
    "documentDate": "2026-03-30T00:00:00Z",
    "number": "IS-000123",
    "erpID": "ERP-IS-000123",
    "description": "Списание материалов",
    "deleted": null,
    "operationType": null,
    "created": "2026-03-30T10:15:00Z",
    "modified": null,
    "posted": null,
    "relatedTaskID": 4567,
    "taskNumber": "TASK-4567",
    "responsiblePerson": null
  }
}

Пример успешного ответа (206):

Тело ответа имеет тот же формат, что и для 200, но содержит частичный диапазон.

Негативные сценарии:

POST /Issues

Пример запроса:

[
  {
    "warehouseID": 10,
    "operationTypeID": 3,
    "documentDate": "2026-03-30T00:00:00Z",
    "number": "IS-000123",
    "description": "Списание материалов",
    "erpID": "ERP-IS-000123",
    "relatedTaskID": 4567,
    "responsiblePersonID": 123
  }
]

Пример успешного ответа (201):

[101, 102]

Пример ошибки (409):

[
  {
    "traceIdentifier": "00-abc123",
    "code": "ValidationError",
    "message": "Validation failed",
    "arguments": {
      "field": "data"
    }
  }
]

Негативные сценарии:

PUT /Issues

Пример запроса:

[
  {
    "id": 101,
    "warehouseID": 10,
    "operationTypeID": 3,
    "documentDate": "2026-03-30T00:00:00Z",
    "number": "IS-000123",
    "description": "Обновленное описание списания",
    "erpID": "ERP-IS-000123",
    "relatedTaskID": 4567,
    "responsiblePersonID": 123
  }
]

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

DELETE /Issues

Пример запроса:

[101, 102]

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

HEAD /Issues

Пример запроса:

HEAD /Issues?searchText=IS-000123

Пример успешного ответа (200):

Тело ответа отсутствует. Общее количество возвращается в заголовке Content-Range.

Негативные сценарии:

POST /Issues/items

Пример запроса:

[
  {
    "issueID": 101,
    "items": [
      {
        "materialID": 5001,
        "measurementUnitID": 1,
        "quantity": 10.5,
        "sortOrder": 1
      }
    ]
  }
]

Пример успешного ответа (202):

Тело ответа отсутствует.

Пример ошибки (409):

[
  {
    "traceIdentifier": "00-abc123",
    "code": "ValidationError",
    "message": "Validation failed",
    "arguments": {
      "field": "data"
    }
  }
]

Негативные сценарии:

DELETE /Issues/items

Пример запроса:

[
  {
    "issueID": 101,
    "items": [5001, 5002]
  }
]

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Issues/post

Пример запроса:

[101, 102]

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Issues/restore

Пример запроса:

[101, 102]

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Issues/unpost

Пример запроса:

[101, 102]

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

GET /Issues/{id}

Пример запроса:

GET /Issues/101

Пример успешного ответа (200):

{
  "warehouseID": 10,
  "warehouseName": "Основной склад",
  "documentStatus": null,
  "documentDate": "2026-03-30T00:00:00Z",
  "number": "IS-000123",
  "erpID": "ERP-IS-000123",
  "description": "Списание материалов",
  "deleted": null,
  "operationType": null,
  "created": "2026-03-30T10:15:00Z",
  "modified": null,
  "posted": null,
  "relatedTaskID": 4567,
  "taskNumber": "TASK-4567",
  "responsiblePerson": null
}

Негативные сценарии:

DELETE /Issues/{id}

Пример запроса:

DELETE /Issues/101

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Issues/{id}/post

Пример запроса:

PUT /Issues/101/post

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Issues/{id}/restore

Пример запроса:

PUT /Issues/101/restore

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Issues/{id}/unpost

Пример запроса:

PUT /Issues/101/unpost

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

GET /Issues/{issueID}/items

Пример запроса:

GET /Issues/101/items

Пример успешного ответа (200):

[
  {
    "issueID": 101,
    "material": {
      "id": 5001,
      "name": "Материал 1",
      "vendorCode": "MAT-5001"
    },
    "measurementUnit": {
      "id": 1,
      "name": "шт"
    },
    "quantity": 10.5,
    "sortOrder": 1
  }
]

Негативные сценарии:

DELETE /Issues/{issueID}/items/{materialID}

Пример запроса:

DELETE /Issues/101/items/5001

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

Receipts

GET /Receipts

Пример запроса:

GET /Receipts?searchText=RC-000123

Пример успешного ответа (200):

{
  "101": {
    "warehouseID": 10,
    "warehouseName": "Основной склад",
    "documentStatus": null,
    "documentDate": "2026-03-30T00:00:00Z",
    "number": "RC-000123",
    "erpID": "ERP-RC-000123",
    "description": "Оприходывание материалов",
    "deleted": null,
    "operationType": null,
    "created": "2026-03-30T10:15:00Z",
    "modified": null,
    "posted": null,
    "relatedTaskID": 4567,
    "taskNumber": "TASK-4567",
    "responsiblePerson": null
  }
}

Пример успешного ответа (206):

Тело ответа имеет тот же формат, что и для 200, но содержит частичный диапазон.

Негативные сценарии:

POST /Receipts

Пример запроса:

[
  {
    "warehouseID": 10,
    "operationTypeID": 3,
    "documentDate": "2026-03-30T00:00:00Z",
    "number": "RC-000123",
    "description": "Оприходывание материалов",
    "erpID": "ERP-RC-000123",
    "relatedTaskID": 4567,
    "responsiblePersonID": 123
  }
]

Пример успешного ответа (201):

[101, 102]

Негативные сценарии:

PUT /Receipts

Пример запроса:

[
  {
    "id": 101,
    "warehouseID": 10,
    "operationTypeID": 3,
    "documentDate": "2026-03-30T00:00:00Z",
    "number": "RC-000123",
    "description": "Обновленное описание оприходывания",
    "erpID": "ERP-RC-000123",
    "relatedTaskID": 4567,
    "responsiblePersonID": 123
  }
]

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

DELETE /Receipts

Пример запроса:

[101, 102]

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

HEAD /Receipts

Пример запроса:

HEAD /Receipts?searchText=RC-000123

Пример успешного ответа (200):

Тело ответа отсутствует. Общее количество возвращается в заголовке Content-Range.

Негативные сценарии:

POST /Receipts/items

Пример запроса:

[
  {
    "receiptID": 101,
    "items": [
      {
        "materialID": 5001,
        "measurementUnitID": 1,
        "quantity": 10.5,
        "sortOrder": 1
      }
    ]
  }
]

Пример успешного ответа (202):

Тело ответа отсутствует.

Пример ошибки (409):

[
  {
    "traceIdentifier": "00-abc123",
    "code": "InvalidData",
    "message": "Неверные данные",
    "arguments": {
      "field": "Quantity"
    }
  }
]

Негативные сценарии:

DELETE /Receipts/items

Пример запроса:

[
  {
    "receiptID": 101,
    "items": [5001, 5002]
  }
]

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Receipts/post

Пример запроса:

[101, 102]

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Receipts/restore

Пример запроса:

[101, 102]

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Receipts/unpost

Пример запроса:

[101, 102]

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

GET /Receipts/{id}

Пример запроса:

GET /Receipts/101

Пример успешного ответа (200):

{
  "warehouseID": 10,
  "warehouseName": "Основной склад",
  "documentStatus": null,
  "documentDate": "2026-03-30T00:00:00Z",
  "number": "RC-000123",
  "erpID": "ERP-RC-000123",
  "description": "Оприходывание материалов",
  "deleted": null,
  "operationType": null,
  "created": "2026-03-30T10:15:00Z",
  "modified": null,
  "posted": null,
  "relatedTaskID": 4567,
  "taskNumber": "TASK-4567",
  "responsiblePerson": null
}

Негативные сценарии:

DELETE /Receipts/{id}

Пример запроса:

DELETE /Receipts/101

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Receipts/{id}/post

Пример запроса:

PUT /Receipts/101/post

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Receipts/{id}/restore

Пример запроса:

PUT /Receipts/101/restore

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Receipts/{id}/unpost

Пример запроса:

PUT /Receipts/101/unpost

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

GET /Receipts/{receiptID}/items

Пример запроса:

GET /Receipts/101/items

Пример успешного ответа (200):

[
  {
    "receiptID": 101,
    "material": {
      "id": 5001,
      "name": "Материал 1",
      "vendorCode": "MAT-5001"
    },
    "measurementUnit": {
      "id": 1,
      "name": "шт"
    },
    "quantity": 10.5,
    "sortOrder": 1
  }
]

Негативные сценарии:

DELETE /Receipts/{receiptID}/items/{materialID}

Пример запроса:

DELETE /Receipts/101/items/5001

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

Transfers

GET /Transfers

Пример запроса:

GET /Transfers?searchText=TR-000123

Пример успешного ответа (200):

{
  "101": {
    "fromWarehouseID": 10,
    "fromWarehouseName": "Склад-источник",
    "toWarehouseID": 20,
    "toWarehouseName": "Склад-приемник",
    "documentStatus": null,
    "documentDate": "2026-03-30T00:00:00Z",
    "number": "TR-000123",
    "erpID": "ERP-TR-000123",
    "description": "Перемещение материалов между складами",
    "deleted": null,
    "operationType": null,
    "created": "2026-03-30T10:15:00Z",
    "modified": null,
    "posted": null,
    "relatedTaskID": 4567,
    "taskNumber": "TASK-4567",
    "responsiblePerson": null
  }
}

Пример успешного ответа (206):

Тело ответа имеет тот же формат, что и для 200, но содержит частичный диапазон.

Негативные сценарии:

POST /Transfers

Пример запроса:

[
  {
    "fromWarehouseID": 10,
    "toWarehouseID": 20,
    "operationTypeID": 3,
    "documentDate": "2026-03-30T00:00:00Z",
    "number": "TR-000123",
    "description": "Перемещение материалов между складами",
    "erpID": "ERP-TR-000123",
    "relatedTaskID": 4567,
    "responsiblePersonID": 123
  }
]

Пример успешного ответа (201):

[101, 102]

Негативные сценарии:

PUT /Transfers

Пример запроса:

[
  {
    "id": 101,
    "fromWarehouseID": 10,
    "toWarehouseID": 20,
    "operationTypeID": 3,
    "documentDate": "2026-03-30T00:00:00Z",
    "number": "TR-000123",
    "description": "Обновленное описание перемещения",
    "erpID": "ERP-TR-000123",
    "relatedTaskID": 4567,
    "responsiblePersonID": 123
  }
]

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

DELETE /Transfers

Пример запроса:

[101, 102]

Пример успешного ответа (202):

Тело ответа отсутствует.

Пример ошибки (409):

[
  {
    "traceIdentifier": "00-abc123",
    "code": "ValidationError",
    "message": "Validation failed",
    "arguments": {
      "field": "data"
    }
  }
]

Негативные сценарии:

HEAD /Transfers

Пример запроса:

HEAD /Transfers?searchText=TR-000123

Пример успешного ответа (200):

Тело ответа отсутствует. Общее количество возвращается в заголовке Content-Range.

Негативные сценарии:

POST /Transfers/items

Пример запроса:

[
  {
    "transferID": 101,
    "items": [
      {
        "materialID": 5001,
        "measurementUnitID": 166,
        "quantity": 10.5,
        "sortOrder": 1
      }
    ]
  }
]

Пример успешного ответа (202):

Тело ответа отсутствует.

Пример ошибки (409):

[
  {
    "traceIdentifier": "00-abc123",
    "code": "InvalidData",
    "message": "Количество материала должно быть больше нуля."
  }
]

Негативные сценарии:

DELETE /Transfers/items

Пример запроса:

[
  {
    "transferID": 101,
    "items": [5001, 5002]
  }
]

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Transfers/post

Пример запроса:

[101, 102]

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Transfers/restore

Пример запроса:

[101, 102]

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Transfers/unpost

Пример запроса:

[101, 102]

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

GET /Transfers/{id}

Пример запроса:

GET /Transfers/101

Пример успешного ответа (200):

{
  "fromWarehouseID": 10,
  "fromWarehouseName": "Склад-источник",
  "toWarehouseID": 20,
  "toWarehouseName": "Склад-приемник",
  "documentStatus": null,
  "documentDate": "2026-03-30T00:00:00Z",
  "number": "TR-000123",
  "erpID": "ERP-TR-000123",
  "description": "Перемещение материалов между складами",
  "deleted": null,
  "operationType": null,
  "created": "2026-03-30T10:15:00Z",
  "modified": null,
  "posted": null,
  "relatedTaskID": 4567,
  "taskNumber": "TASK-4567",
  "responsiblePerson": null
}

Негативные сценарии:

DELETE /Transfers/{id}

Пример запроса:

DELETE /Transfers/101

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Transfers/{id}/post

Пример запроса:

PUT /Transfers/101/post

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Transfers/{id}/restore

Пример запроса:

PUT /Transfers/101/restore

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

PUT /Transfers/{id}/unpost

Пример запроса:

PUT /Transfers/101/unpost

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии:

GET /Transfers/{transferID}/items

Пример запроса:

GET /Transfers/101/items

Пример успешного ответа (200):

[
  {
    "transferID": 101,
    "material": {
      "id": 5001,
      "name": "Материал 1",
      "vendorCode": "MAT-5001"
    },
    "measurementUnit": {
      "id": 1,
      "name": "шт"
    },
    "quantity": 10.5,
    "sortOrder": 1
  }
]

Негативные сценарии:

DELETE /Transfers/{transferID}/items/{materialID}

Пример запроса:

DELETE /Transfers/101/items/5001

Пример успешного ответа (202):

Тело ответа отсутствует.

Негативные сценарии: