@hubex/mcp 0.9.20260925 → 0.9.20260929

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7769,6 +7769,22 @@
7769
7769
  "hasBody": true,
7770
7770
  "bodyRequired": false
7771
7771
  },
7772
+ {
7773
+ "id": "EXPORT:DELETE:/Export/requests/{requestId}",
7774
+ "service": "EXPORT",
7775
+ "method": "DELETE",
7776
+ "path": "/Export/requests/{requestId}",
7777
+ "summary": "Отменяет асинхронный запрос экспорта, если он ещё не начал выполняться.",
7778
+ "tags": [
7779
+ "Export"
7780
+ ],
7781
+ "pathParams": [
7782
+ "requestId"
7783
+ ],
7784
+ "queryParams": [],
7785
+ "hasBody": false,
7786
+ "bodyRequired": false
7787
+ },
7772
7788
  {
7773
7789
  "id": "EXPORT:GET:/Assets",
7774
7790
  "service": "EXPORT",
@@ -7878,6 +7894,56 @@
7878
7894
  "hasBody": false,
7879
7895
  "bodyRequired": false
7880
7896
  },
7897
+ {
7898
+ "id": "EXPORT:GET:/Export/archives/{downloadToken}",
7899
+ "service": "EXPORT",
7900
+ "method": "GET",
7901
+ "path": "/Export/archives/{downloadToken}",
7902
+ "summary": "Скачивает готовый архив экспорта по подписанному токену из `publicUrl`.",
7903
+ "tags": [
7904
+ "Export"
7905
+ ],
7906
+ "pathParams": [
7907
+ "downloadToken"
7908
+ ],
7909
+ "queryParams": [],
7910
+ "hasBody": false,
7911
+ "bodyRequired": false
7912
+ },
7913
+ {
7914
+ "id": "EXPORT:GET:/Export/requests",
7915
+ "service": "EXPORT",
7916
+ "method": "GET",
7917
+ "path": "/Export/requests",
7918
+ "summary": "Возвращает список асинхронных запросов экспорта текущего пользователя.",
7919
+ "tags": [
7920
+ "Export"
7921
+ ],
7922
+ "pathParams": [],
7923
+ "queryParams": [
7924
+ "offset",
7925
+ "fetch",
7926
+ "status"
7927
+ ],
7928
+ "hasBody": false,
7929
+ "bodyRequired": false
7930
+ },
7931
+ {
7932
+ "id": "EXPORT:GET:/Export/requests/{requestId}",
7933
+ "service": "EXPORT",
7934
+ "method": "GET",
7935
+ "path": "/Export/requests/{requestId}",
7936
+ "summary": "Возвращает статус асинхронного запроса экспорта.",
7937
+ "tags": [
7938
+ "Export"
7939
+ ],
7940
+ "pathParams": [
7941
+ "requestId"
7942
+ ],
7943
+ "queryParams": [],
7944
+ "hasBody": false,
7945
+ "bodyRequired": false
7946
+ },
7881
7947
  {
7882
7948
  "id": "EXPORT:GET:/MaterialConsumption",
7883
7949
  "service": "EXPORT",
@@ -8235,6 +8301,20 @@
8235
8301
  "hasBody": false,
8236
8302
  "bodyRequired": false
8237
8303
  },
8304
+ {
8305
+ "id": "EXPORT:POST:/Tasks/attachments/v3.0",
8306
+ "service": "EXPORT",
8307
+ "method": "POST",
8308
+ "path": "/Tasks/attachments/v3.0",
8309
+ "summary": "Создаёт batch-запрос на асинхронный экспорт вложений заявок.",
8310
+ "tags": [
8311
+ "Tasks"
8312
+ ],
8313
+ "pathParams": [],
8314
+ "queryParams": [],
8315
+ "hasBody": true,
8316
+ "bodyRequired": false
8317
+ },
8238
8318
  {
8239
8319
  "id": "IMPORT:POST:/Assets",
8240
8320
  "service": "IMPORT",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hubex/mcp",
3
- "version": "0.9.20260925",
3
+ "version": "0.9.20260929",
4
4
  "type": "module",
5
5
  "description": "MCP server for managing HubEx test data (tasks, assets, companies, users) via the HubEx REST API",
6
6
  "author": "HubEx Team",
@@ -4,14 +4,14 @@
4
4
  "title": "API for data exporting in HubEx",
5
5
  "description": "hods over main system's enitities: tasks, users and assets",
6
6
  "contact": {
7
- "name": "SmartService Backend Team",
7
+ "name": "SmartService Development Team",
8
8
  "email": "fmbackend@melston.ru"
9
9
  },
10
10
  "version": "v1.0.0.0"
11
11
  },
12
12
  "servers": [
13
13
  {
14
- "url": "/EXPORT"
14
+ "url": "https://dev-api.hubex.ru/fsm/EXPORT"
15
15
  }
16
16
  ],
17
17
  "paths": {
@@ -717,6 +717,374 @@
717
717
  ]
718
718
  }
719
719
  },
720
+ "/Export/requests": {
721
+ "get": {
722
+ "tags": [
723
+ "Export"
724
+ ],
725
+ "summary": "Возвращает список асинхронных запросов экспорта текущего пользователя.",
726
+ "description": "## Пример запроса:\r\n`GET /Export/requests?status=0&status=1&offset=0&fetch=20`\r\n \r\nПагинация поддерживается через `[AllowRangeQuery]` (query `offset`/`fetch` или заголовок `Range`).\r\nБез диапазона возвращаются все запросы текущего tenant member.\r\nФормат элементов списка — см. HubEx.Service.EXPORT.Api.Results.ExportRequestStatusResult.\r\n \r\nПри диапазонном запросе возвращается `206 Partial Content`, общее количество — в заголовке `Content-Range`.\r\n \r\n## Негативные сценарии:\r\n- 401 Unauthorized: отсутствует или некорректен Bearer-токен.\r\n- 403 Forbidden: недостаточно прав `TasksExport`.",
727
+ "parameters": [
728
+ {
729
+ "name": "Range",
730
+ "in": "header",
731
+ "description": "Формат: items=FROM-TILL , где FROM - начальный элемент (включая), TILL - конечный элемент (включая)",
732
+ "schema": {
733
+ "type": "string"
734
+ }
735
+ },
736
+ {
737
+ "name": "offset",
738
+ "in": "query",
739
+ "description": "количество элементов, которое нобходимо пропустить",
740
+ "schema": {
741
+ "type": "string"
742
+ }
743
+ },
744
+ {
745
+ "name": "fetch",
746
+ "in": "query",
747
+ "description": "количество элементов, которое необходимо вернуть",
748
+ "schema": {
749
+ "type": "string"
750
+ }
751
+ },
752
+ {
753
+ "name": "status",
754
+ "in": "query",
755
+ "description": "Фильтр по статусу (см. описание контроллера). Можно передать несколько значений",
756
+ "schema": {
757
+ "type": "integer",
758
+ "format": "int32"
759
+ }
760
+ },
761
+ {
762
+ "name": "X-Application-ID",
763
+ "in": "header",
764
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
765
+ "schema": {
766
+ "enum": [
767
+ 1,
768
+ 2,
769
+ 3,
770
+ 4,
771
+ 5,
772
+ 6
773
+ ],
774
+ "type": "integer",
775
+ "format": "int32",
776
+ "default": 3,
777
+ "x-enumNames": [
778
+ "EngineerMobile",
779
+ "CustomerMobile",
780
+ "MainWeb",
781
+ "AdminWeb",
782
+ "Api",
783
+ "PlateWeb"
784
+ ]
785
+ }
786
+ }
787
+ ],
788
+ "responses": {
789
+ "200": {
790
+ "description": "Список найден.",
791
+ "content": {
792
+ "text/plain": {
793
+ "schema": {
794
+ "type": "array",
795
+ "items": {
796
+ "$ref": "#/components/schemas/ExportRequestStatusResult"
797
+ }
798
+ }
799
+ },
800
+ "application/json": {
801
+ "schema": {
802
+ "type": "array",
803
+ "items": {
804
+ "$ref": "#/components/schemas/ExportRequestStatusResult"
805
+ }
806
+ }
807
+ },
808
+ "text/json": {
809
+ "schema": {
810
+ "type": "array",
811
+ "items": {
812
+ "$ref": "#/components/schemas/ExportRequestStatusResult"
813
+ }
814
+ }
815
+ }
816
+ }
817
+ },
818
+ "204": {
819
+ "description": "Список пуст."
820
+ },
821
+ "206": {
822
+ "description": "Возвращена страница диапазонного запроса.",
823
+ "content": {
824
+ "text/plain": {
825
+ "schema": {
826
+ "type": "array",
827
+ "items": {
828
+ "$ref": "#/components/schemas/ExportRequestStatusResult"
829
+ }
830
+ }
831
+ },
832
+ "application/json": {
833
+ "schema": {
834
+ "type": "array",
835
+ "items": {
836
+ "$ref": "#/components/schemas/ExportRequestStatusResult"
837
+ }
838
+ }
839
+ },
840
+ "text/json": {
841
+ "schema": {
842
+ "type": "array",
843
+ "items": {
844
+ "$ref": "#/components/schemas/ExportRequestStatusResult"
845
+ }
846
+ }
847
+ }
848
+ }
849
+ },
850
+ "401": {
851
+ "description": "Отсутствует или некорректен Bearer-токен."
852
+ },
853
+ "403": {
854
+ "description": "Недостаточно прав для просмотра статусов экспорта."
855
+ }
856
+ },
857
+ "security": [
858
+ {
859
+ "Bearer": [ ]
860
+ }
861
+ ]
862
+ }
863
+ },
864
+ "/Export/requests/{requestId}": {
865
+ "get": {
866
+ "tags": [
867
+ "Export"
868
+ ],
869
+ "summary": "Возвращает статус асинхронного запроса экспорта.",
870
+ "description": "## Пример запроса:\r\n`GET /Export/requests/305`\r\n \r\nФормат ответа — см. HubEx.Service.EXPORT.Api.Results.ExportRequestStatusResult.\r\n \r\n## Негативные сценарии:\r\n- 204 No Content: запрос не найден или создан другим пользователем.\r\n- 401 Unauthorized: отсутствует или некорректен Bearer-токен.\r\n- 403 Forbidden: недостаточно прав `TasksExport`.",
871
+ "parameters": [
872
+ {
873
+ "name": "requestId",
874
+ "in": "path",
875
+ "description": "Идентификатор запроса экспорта (requestID из ответа 202).",
876
+ "required": true,
877
+ "schema": {
878
+ "type": "integer",
879
+ "format": "int64"
880
+ }
881
+ },
882
+ {
883
+ "name": "X-Application-ID",
884
+ "in": "header",
885
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
886
+ "schema": {
887
+ "enum": [
888
+ 1,
889
+ 2,
890
+ 3,
891
+ 4,
892
+ 5,
893
+ 6
894
+ ],
895
+ "type": "integer",
896
+ "format": "int32",
897
+ "default": 3,
898
+ "x-enumNames": [
899
+ "EngineerMobile",
900
+ "CustomerMobile",
901
+ "MainWeb",
902
+ "AdminWeb",
903
+ "Api",
904
+ "PlateWeb"
905
+ ]
906
+ }
907
+ }
908
+ ],
909
+ "responses": {
910
+ "200": {
911
+ "description": "Статус найден.",
912
+ "content": {
913
+ "text/plain": {
914
+ "schema": {
915
+ "$ref": "#/components/schemas/ExportRequestStatusResult"
916
+ }
917
+ },
918
+ "application/json": {
919
+ "schema": {
920
+ "$ref": "#/components/schemas/ExportRequestStatusResult"
921
+ }
922
+ },
923
+ "text/json": {
924
+ "schema": {
925
+ "$ref": "#/components/schemas/ExportRequestStatusResult"
926
+ }
927
+ }
928
+ }
929
+ },
930
+ "204": {
931
+ "description": "Запрос не найден или создан другим пользователем."
932
+ },
933
+ "401": {
934
+ "description": "Отсутствует или некорректен Bearer-токен."
935
+ },
936
+ "403": {
937
+ "description": "Недостаточно прав для просмотра статуса экспорта."
938
+ }
939
+ },
940
+ "security": [
941
+ {
942
+ "Bearer": [ ]
943
+ }
944
+ ]
945
+ },
946
+ "delete": {
947
+ "tags": [
948
+ "Export"
949
+ ],
950
+ "summary": "Отменяет асинхронный запрос экспорта, если он ещё не начал выполняться.",
951
+ "description": "## Пример запроса:\r\n`DELETE /Export/requests/305`\r\n \r\nТело запроса не требуется.\r\n \r\nОтмена доступна только для статусов `0` (Pending) и `4` (Retry).\r\nЗапрос в статусе `1` (Started) отменить нельзя — вернётся `409 Conflict`.\r\nФормат ответа — см. HubEx.Service.EXPORT.Api.Results.ExportRequestStatusResult (пример отменённого запроса).\r\n \r\n## Негативные сценарии:\r\n- 204 No Content: запрос не найден или создан другим пользователем.\r\n- 409 Conflict: запрос уже выполняется (`Started`) или завершён (`Finished`, `Error`, `Cancelled`).\r\n- 401 Unauthorized: отсутствует или некорректен Bearer-токен.\r\n- 403 Forbidden: недостаточно прав `TasksExport`.",
952
+ "parameters": [
953
+ {
954
+ "name": "requestId",
955
+ "in": "path",
956
+ "description": "Идентификатор запроса экспорта.",
957
+ "required": true,
958
+ "schema": {
959
+ "type": "integer",
960
+ "format": "int64"
961
+ }
962
+ },
963
+ {
964
+ "name": "X-Application-ID",
965
+ "in": "header",
966
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
967
+ "schema": {
968
+ "enum": [
969
+ 1,
970
+ 2,
971
+ 3,
972
+ 4,
973
+ 5,
974
+ 6
975
+ ],
976
+ "type": "integer",
977
+ "format": "int32",
978
+ "default": 3,
979
+ "x-enumNames": [
980
+ "EngineerMobile",
981
+ "CustomerMobile",
982
+ "MainWeb",
983
+ "AdminWeb",
984
+ "Api",
985
+ "PlateWeb"
986
+ ]
987
+ }
988
+ }
989
+ ],
990
+ "responses": {
991
+ "200": {
992
+ "description": "Запрос успешно отменён.",
993
+ "content": {
994
+ "text/plain": {
995
+ "schema": {
996
+ "$ref": "#/components/schemas/ExportRequestStatusResult"
997
+ }
998
+ },
999
+ "application/json": {
1000
+ "schema": {
1001
+ "$ref": "#/components/schemas/ExportRequestStatusResult"
1002
+ }
1003
+ },
1004
+ "text/json": {
1005
+ "schema": {
1006
+ "$ref": "#/components/schemas/ExportRequestStatusResult"
1007
+ }
1008
+ }
1009
+ }
1010
+ },
1011
+ "204": {
1012
+ "description": "Запрос не найден для текущего пользователя."
1013
+ },
1014
+ "409": {
1015
+ "description": "Запрос уже выполняется или завершён и не может быть отменён."
1016
+ },
1017
+ "401": {
1018
+ "description": "Отсутствует или некорректен Bearer-токен."
1019
+ },
1020
+ "403": {
1021
+ "description": "Недостаточно прав для отмены экспорта."
1022
+ }
1023
+ },
1024
+ "security": [
1025
+ {
1026
+ "Bearer": [ ]
1027
+ }
1028
+ ]
1029
+ }
1030
+ },
1031
+ "/Export/archives/{downloadToken}": {
1032
+ "get": {
1033
+ "tags": [
1034
+ "Export"
1035
+ ],
1036
+ "summary": "Скачивает готовый архив экспорта по подписанному токену из `publicUrl`.",
1037
+ "description": "## Пример запроса:\r\n`GET /Export/archives/{downloadToken}`\r\n \r\nТокен выдаётся в `publicUrl` (например в email-уведомлении). Эндпоинт доступен без авторизации.\r\n \r\n## Негативные сценарии:\r\n- 404 Not Found: токен недействителен, запрос не найден, не завершён или срок хранения архива истёк.\r\n- 502 Bad Gateway: storage недоступен при проксировании загрузки.",
1038
+ "parameters": [
1039
+ {
1040
+ "name": "downloadToken",
1041
+ "in": "path",
1042
+ "description": "Подписанный токен скачивания архива.",
1043
+ "required": true,
1044
+ "schema": {
1045
+ "type": "string"
1046
+ }
1047
+ },
1048
+ {
1049
+ "name": "X-Application-ID",
1050
+ "in": "header",
1051
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
1052
+ "schema": {
1053
+ "enum": [
1054
+ 1,
1055
+ 2,
1056
+ 3,
1057
+ 4,
1058
+ 5,
1059
+ 6
1060
+ ],
1061
+ "type": "integer",
1062
+ "format": "int32",
1063
+ "default": 3,
1064
+ "x-enumNames": [
1065
+ "EngineerMobile",
1066
+ "CustomerMobile",
1067
+ "MainWeb",
1068
+ "AdminWeb",
1069
+ "Api",
1070
+ "PlateWeb"
1071
+ ]
1072
+ }
1073
+ }
1074
+ ],
1075
+ "responses": {
1076
+ "200": {
1077
+ "description": "Архив найден и возвращается потоком."
1078
+ },
1079
+ "404": {
1080
+ "description": "Токен, запрос или архив не найдены."
1081
+ },
1082
+ "502": {
1083
+ "description": "Storage недоступен при проксировании загрузки."
1084
+ }
1085
+ }
1086
+ }
1087
+ },
720
1088
  "/MaterialConsumption": {
721
1089
  "get": {
722
1090
  "tags": [
@@ -1429,17 +1797,121 @@
1429
1797
  "PlateWeb"
1430
1798
  ]
1431
1799
  }
1432
- }
1433
- ],
1434
- "responses": {
1435
- "200": {
1436
- "description": "Excel-файл с экспортированными данными заявок."
1800
+ }
1801
+ ],
1802
+ "responses": {
1803
+ "200": {
1804
+ "description": "Excel-файл с экспортированными данными заявок."
1805
+ },
1806
+ "401": {
1807
+ "description": "Отсутствует или некорректен Bearer-токен."
1808
+ },
1809
+ "403": {
1810
+ "description": "Недостаточно прав для экспорта заявок."
1811
+ }
1812
+ },
1813
+ "security": [
1814
+ {
1815
+ "Bearer": [ ]
1816
+ }
1817
+ ]
1818
+ }
1819
+ },
1820
+ "/Tasks/attachments/v3.0": {
1821
+ "post": {
1822
+ "tags": [
1823
+ "Tasks"
1824
+ ],
1825
+ "summary": "Создаёт batch-запрос на асинхронный экспорт вложений заявок.",
1826
+ "description": "## Пример запроса (конкретные заявки):\r\n`POST /Tasks/attachments/v3.0`\r\n```json\r\n{\r\n \"filter\": {\r\n \"tasks\": [12345, 12346, 12347]\r\n },\r\n \"flags\": {\r\n \"isPublished\": true\r\n },\r\n \"range\": {\r\n \"offset\": 0,\r\n \"fetch\": 100\r\n }\r\n}\r\n```\r\n \r\n## Пример запроса (фильтры списка заявок):\r\n```json\r\n{\r\n \"filter\": {\r\n \"taskStatuses\": [1, 2]\r\n },\r\n \"searchText\": \"насос\",\r\n \"sort\": {\r\n \"orderBy\": 1\r\n }\r\n}\r\n```\r\n \r\nПоле `filter` обязательно. Фильтры заявок совместимы с `GET /Tasks` и `GET /Tasks/short`\r\n(`TaskFilterData`): конкретные ID передаются через `filter.tasks`.\r\nСписок заявок для архива вычисляется фоновым worker через DataProvider `ListShortAsync`,\r\nа не на этапе постановки batch-запроса.\r\nПоле `range` ограничивает выборку вложений, а не список заявок.\r\n \r\nЗаголовок `X-Concurrency-Stamp` (опциональный Guid) — идемпотентность постановки, как при создании заявки.\r\n \r\n## Пример успешного ответа (202):\r\n```json\r\n{\r\n \"isSuccessed\": true,\r\n \"requestID\": \"305\"\r\n}\r\n```\r\n \r\nПоле `error` при успешном `202` не возвращается.\r\nОшибки выполнения экспорта (после постановки в очередь) — только через status API.\r\n \r\nРучка только ставит экспорт вложений в очередь и возвращает идентификатор batch-запроса.\r\nФормирование архива выполняется фоновым механизмом.\r\n \r\n## Негативные сценарии:\r\n- 400 BadRequest: не передан `filter`, либо заголовок `X-Concurrency-Stamp` передан и не является Guid. Отсутствующий или пустой заголовок идемпотентность не включает.\r\n- 401 Unauthorized: отсутствует или некорректен Bearer-токен.\r\n- 403 Forbidden: недостаточно прав `TasksExport`.\r\n- 409 Conflict: запрос с тем же `X-Concurrency-Stamp` уже был принят.\r\n- 500 Internal Server Error: ошибка при постановке batch-запроса.",
1827
+ "parameters": [
1828
+ {
1829
+ "name": "X-Application-ID",
1830
+ "in": "header",
1831
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
1832
+ "schema": {
1833
+ "enum": [
1834
+ 1,
1835
+ 2,
1836
+ 3,
1837
+ 4,
1838
+ 5,
1839
+ 6
1840
+ ],
1841
+ "type": "integer",
1842
+ "format": "int32",
1843
+ "default": 3,
1844
+ "x-enumNames": [
1845
+ "EngineerMobile",
1846
+ "CustomerMobile",
1847
+ "MainWeb",
1848
+ "AdminWeb",
1849
+ "Api",
1850
+ "PlateWeb"
1851
+ ]
1852
+ }
1853
+ }
1854
+ ],
1855
+ "requestBody": {
1856
+ "description": "Параметры экспорта вложений.",
1857
+ "content": {
1858
+ "application/json-patch+json": {
1859
+ "schema": {
1860
+ "$ref": "#/components/schemas/TaskAttachmentsExportJobPayload"
1861
+ }
1862
+ },
1863
+ "application/json": {
1864
+ "schema": {
1865
+ "$ref": "#/components/schemas/TaskAttachmentsExportJobPayload"
1866
+ }
1867
+ },
1868
+ "text/json": {
1869
+ "schema": {
1870
+ "$ref": "#/components/schemas/TaskAttachmentsExportJobPayload"
1871
+ }
1872
+ },
1873
+ "application/*+json": {
1874
+ "schema": {
1875
+ "$ref": "#/components/schemas/TaskAttachmentsExportJobPayload"
1876
+ }
1877
+ }
1878
+ }
1879
+ },
1880
+ "responses": {
1881
+ "202": {
1882
+ "description": "Batch-запрос на экспорт вложений успешно создан.",
1883
+ "content": {
1884
+ "text/plain": {
1885
+ "schema": {
1886
+ "$ref": "#/components/schemas/BatchRequestResult"
1887
+ }
1888
+ },
1889
+ "application/json": {
1890
+ "schema": {
1891
+ "$ref": "#/components/schemas/BatchRequestResult"
1892
+ }
1893
+ },
1894
+ "text/json": {
1895
+ "schema": {
1896
+ "$ref": "#/components/schemas/BatchRequestResult"
1897
+ }
1898
+ }
1899
+ }
1900
+ },
1901
+ "409": {
1902
+ "description": "Запрос с тем же `X-Concurrency-Stamp` уже был принят."
1903
+ },
1904
+ "400": {
1905
+ "description": "Не переданы фильтры заявок или `X-Concurrency-Stamp` не является Guid."
1437
1906
  },
1438
1907
  "401": {
1439
1908
  "description": "Отсутствует или некорректен Bearer-токен."
1440
1909
  },
1441
1910
  "403": {
1442
- "description": "Недостаточно прав для экспорта заявок."
1911
+ "description": "Недостаточно прав для экспорта вложений заявок."
1912
+ },
1913
+ "500": {
1914
+ "description": "Внутренняя ошибка при создании batch-запроса."
1443
1915
  }
1444
1916
  },
1445
1917
  "security": [
@@ -3112,6 +3584,143 @@
3112
3584
  },
3113
3585
  "components": {
3114
3586
  "schemas": {
3587
+ "ANCDRangeData": {
3588
+ "type": "object",
3589
+ "properties": {
3590
+ "unit": {
3591
+ "type": "string",
3592
+ "nullable": true
3593
+ },
3594
+ "startWith": {
3595
+ "type": "integer",
3596
+ "format": "int32"
3597
+ },
3598
+ "finishWith": {
3599
+ "type": "integer",
3600
+ "format": "int32"
3601
+ },
3602
+ "offset": {
3603
+ "type": "integer",
3604
+ "format": "int32"
3605
+ },
3606
+ "fetch": {
3607
+ "type": "integer",
3608
+ "format": "int32"
3609
+ }
3610
+ },
3611
+ "additionalProperties": false
3612
+ },
3613
+ "BatchRequestResult": {
3614
+ "type": "object",
3615
+ "properties": {
3616
+ "isSuccessed": {
3617
+ "type": "boolean",
3618
+ "description": "Признак успешной постановки запроса в очередь."
3619
+ },
3620
+ "requestID": {
3621
+ "type": "string",
3622
+ "description": "Идентификатор запроса (ExportRequest.ID).",
3623
+ "nullable": true
3624
+ },
3625
+ "error": {
3626
+ "type": "string",
3627
+ "description": "Текст ошибки постановки в очередь при IsSuccessed = false. При успешном 202 не заполняется.",
3628
+ "nullable": true
3629
+ }
3630
+ },
3631
+ "additionalProperties": false,
3632
+ "description": "Результат постановки асинхронного экспорта в очередь (ответ v3)."
3633
+ },
3634
+ "Coordinate": {
3635
+ "type": "object",
3636
+ "properties": {
3637
+ "latitude": {
3638
+ "type": "number",
3639
+ "format": "double"
3640
+ },
3641
+ "longitude": {
3642
+ "type": "number",
3643
+ "format": "double"
3644
+ }
3645
+ },
3646
+ "additionalProperties": false
3647
+ },
3648
+ "DASortData": {
3649
+ "type": "object",
3650
+ "properties": {
3651
+ "orderBy": {
3652
+ "type": "integer",
3653
+ "format": "int32",
3654
+ "nullable": true
3655
+ },
3656
+ "direction": {
3657
+ "$ref": "#/components/schemas/SortDirection"
3658
+ }
3659
+ },
3660
+ "additionalProperties": false
3661
+ },
3662
+ "ExportFlagFilter": {
3663
+ "type": "object",
3664
+ "properties": {
3665
+ "noData": {
3666
+ "type": "boolean",
3667
+ "nullable": true
3668
+ }
3669
+ },
3670
+ "additionalProperties": false
3671
+ },
3672
+ "ExportRequestStatus": {
3673
+ "enum": [
3674
+ "Pending",
3675
+ "Started",
3676
+ "Finished",
3677
+ "Error",
3678
+ "Retry",
3679
+ "Cancelled"
3680
+ ],
3681
+ "type": "string"
3682
+ },
3683
+ "ExportRequestStatusResult": {
3684
+ "type": "object",
3685
+ "properties": {
3686
+ "requestID": {
3687
+ "type": "integer",
3688
+ "description": "Внешний идентификатор запроса.",
3689
+ "format": "int64"
3690
+ },
3691
+ "exportTypeCode": {
3692
+ "type": "string",
3693
+ "description": "Тип экспорта.",
3694
+ "nullable": true
3695
+ },
3696
+ "status": {
3697
+ "$ref": "#/components/schemas/ExportRequestStatus"
3698
+ },
3699
+ "createdUtc": {
3700
+ "type": "string",
3701
+ "description": "UTC-время создания запроса.",
3702
+ "format": "date-time"
3703
+ },
3704
+ "publicUrl": {
3705
+ "type": "string",
3706
+ "description": "Публичная ссылка на скачивание через API (`GET .../Export/archives/{token}`).",
3707
+ "nullable": true
3708
+ },
3709
+ "fileExpiresUtc": {
3710
+ "type": "string",
3711
+ "description": "UTC-время истечения срока жизни файла.",
3712
+ "format": "date-time",
3713
+ "nullable": true
3714
+ },
3715
+ "errorMessage": {
3716
+ "type": "string",
3717
+ "description": "Текст ошибки, если экспорт завершился ошибкой или был отменён.",
3718
+ "nullable": true
3719
+ }
3720
+ },
3721
+ "additionalProperties": false,
3722
+ "description": "Статус асинхронного запроса экспорта."
3723
+ },
3115
3724
  "FieldResult": {
3116
3725
  "type": "object",
3117
3726
  "properties": {
@@ -3130,6 +3739,549 @@
3130
3739
  },
3131
3740
  "additionalProperties": false,
3132
3741
  "description": "Экспортируемое поле"
3742
+ },
3743
+ "FlagFilter": {
3744
+ "type": "object",
3745
+ "properties": {
3746
+ "isPublished": {
3747
+ "type": "boolean",
3748
+ "nullable": true
3749
+ },
3750
+ "isDeleted": {
3751
+ "type": "boolean",
3752
+ "nullable": true
3753
+ },
3754
+ "isPublic": {
3755
+ "type": "boolean",
3756
+ "nullable": true
3757
+ },
3758
+ "isRead": {
3759
+ "type": "boolean",
3760
+ "nullable": true
3761
+ },
3762
+ "isExternal": {
3763
+ "type": "boolean",
3764
+ "nullable": true
3765
+ },
3766
+ "isHidden": {
3767
+ "type": "boolean",
3768
+ "nullable": true
3769
+ },
3770
+ "isSystem": {
3771
+ "type": "boolean",
3772
+ "nullable": true
3773
+ }
3774
+ },
3775
+ "additionalProperties": false
3776
+ },
3777
+ "JToken": {
3778
+ "type": "array",
3779
+ "items": {
3780
+ "$ref": "#/components/schemas/JToken"
3781
+ }
3782
+ },
3783
+ "LocationFilter": {
3784
+ "type": "object",
3785
+ "properties": {
3786
+ "radius": {
3787
+ "type": "number",
3788
+ "format": "float",
3789
+ "nullable": true
3790
+ },
3791
+ "pointCenter": {
3792
+ "$ref": "#/components/schemas/Coordinate"
3793
+ },
3794
+ "pointNorthEast": {
3795
+ "$ref": "#/components/schemas/Coordinate"
3796
+ },
3797
+ "pointSouthWest": {
3798
+ "$ref": "#/components/schemas/Coordinate"
3799
+ }
3800
+ },
3801
+ "additionalProperties": false
3802
+ },
3803
+ "PeriodResult": {
3804
+ "type": "object",
3805
+ "properties": {
3806
+ "from": {
3807
+ "type": "string",
3808
+ "format": "date-time",
3809
+ "nullable": true
3810
+ },
3811
+ "till": {
3812
+ "type": "string",
3813
+ "format": "date-time",
3814
+ "nullable": true
3815
+ }
3816
+ },
3817
+ "additionalProperties": false
3818
+ },
3819
+ "SortDirection": {
3820
+ "enum": [
3821
+ "Ascending",
3822
+ "Descending"
3823
+ ],
3824
+ "type": "string"
3825
+ },
3826
+ "TaskAttachmentsExportJobPayload": {
3827
+ "type": "object",
3828
+ "properties": {
3829
+ "filter": {
3830
+ "$ref": "#/components/schemas/TaskFilterData"
3831
+ },
3832
+ "sort": {
3833
+ "$ref": "#/components/schemas/DASortData"
3834
+ },
3835
+ "searchText": {
3836
+ "type": "string",
3837
+ "description": "Текст поиска заявок.",
3838
+ "nullable": true
3839
+ },
3840
+ "flags": {
3841
+ "$ref": "#/components/schemas/FlagFilter"
3842
+ },
3843
+ "range": {
3844
+ "$ref": "#/components/schemas/ANCDRangeData"
3845
+ }
3846
+ },
3847
+ "additionalProperties": false,
3848
+ "description": "Payload асинхронного экспорта вложений заявок."
3849
+ },
3850
+ "TaskFilterData": {
3851
+ "type": "object",
3852
+ "properties": {
3853
+ "attributes": {
3854
+ "type": "array",
3855
+ "items": {
3856
+ "type": "integer",
3857
+ "format": "int32"
3858
+ },
3859
+ "nullable": true
3860
+ },
3861
+ "orgUnits": {
3862
+ "type": "array",
3863
+ "items": {
3864
+ "type": "integer",
3865
+ "format": "int32"
3866
+ },
3867
+ "nullable": true
3868
+ },
3869
+ "districts": {
3870
+ "type": "array",
3871
+ "items": {
3872
+ "type": "integer",
3873
+ "format": "int32"
3874
+ },
3875
+ "nullable": true
3876
+ },
3877
+ "companies": {
3878
+ "type": "array",
3879
+ "items": {
3880
+ "type": "integer",
3881
+ "format": "int32"
3882
+ },
3883
+ "nullable": true
3884
+ },
3885
+ "criticalities": {
3886
+ "type": "array",
3887
+ "items": {
3888
+ "type": "integer",
3889
+ "format": "int32"
3890
+ },
3891
+ "nullable": true
3892
+ },
3893
+ "contracts": {
3894
+ "type": "array",
3895
+ "items": {
3896
+ "type": "integer",
3897
+ "format": "int32"
3898
+ },
3899
+ "nullable": true
3900
+ },
3901
+ "workTypes": {
3902
+ "type": "array",
3903
+ "items": {
3904
+ "type": "integer",
3905
+ "format": "int32"
3906
+ },
3907
+ "nullable": true
3908
+ },
3909
+ "skills": {
3910
+ "type": "array",
3911
+ "items": {
3912
+ "type": "integer",
3913
+ "format": "int32"
3914
+ },
3915
+ "nullable": true
3916
+ },
3917
+ "assets": {
3918
+ "type": "array",
3919
+ "items": {
3920
+ "type": "integer",
3921
+ "format": "int32"
3922
+ },
3923
+ "nullable": true
3924
+ },
3925
+ "startWithAssets": {
3926
+ "type": "array",
3927
+ "items": {
3928
+ "type": "integer",
3929
+ "format": "int32"
3930
+ },
3931
+ "nullable": true
3932
+ },
3933
+ "tasks": {
3934
+ "type": "array",
3935
+ "items": {
3936
+ "type": "integer",
3937
+ "format": "int32"
3938
+ },
3939
+ "nullable": true
3940
+ },
3941
+ "tags": {
3942
+ "type": "array",
3943
+ "items": {
3944
+ "type": "string"
3945
+ },
3946
+ "nullable": true
3947
+ },
3948
+ "taskTypes": {
3949
+ "type": "array",
3950
+ "items": {
3951
+ "type": "integer",
3952
+ "format": "int32"
3953
+ },
3954
+ "nullable": true
3955
+ },
3956
+ "flags": {
3957
+ "$ref": "#/components/schemas/FlagFilter"
3958
+ },
3959
+ "validityPeriod": {
3960
+ "$ref": "#/components/schemas/PeriodResult"
3961
+ },
3962
+ "creationPeriod": {
3963
+ "$ref": "#/components/schemas/PeriodResult"
3964
+ },
3965
+ "modifiedPeriod": {
3966
+ "$ref": "#/components/schemas/PeriodResult"
3967
+ },
3968
+ "parents": {
3969
+ "type": "array",
3970
+ "items": {
3971
+ "type": "integer",
3972
+ "format": "int32"
3973
+ },
3974
+ "nullable": true
3975
+ },
3976
+ "users": {
3977
+ "type": "array",
3978
+ "items": {
3979
+ "type": "integer",
3980
+ "format": "int32"
3981
+ },
3982
+ "nullable": true
3983
+ },
3984
+ "validityOnDates": {
3985
+ "type": "array",
3986
+ "items": {
3987
+ "type": "string",
3988
+ "format": "date-time"
3989
+ },
3990
+ "nullable": true
3991
+ },
3992
+ "checkLists": {
3993
+ "type": "array",
3994
+ "items": {
3995
+ "type": "integer",
3996
+ "format": "int32"
3997
+ },
3998
+ "nullable": true
3999
+ },
4000
+ "geoViewPort": {
4001
+ "$ref": "#/components/schemas/LocationFilter"
4002
+ },
4003
+ "exportFlags": {
4004
+ "$ref": "#/components/schemas/ExportFlagFilter"
4005
+ },
4006
+ "assetTypes": {
4007
+ "type": "array",
4008
+ "items": {
4009
+ "type": "integer",
4010
+ "format": "int32"
4011
+ },
4012
+ "nullable": true
4013
+ },
4014
+ "assetClasses": {
4015
+ "type": "array",
4016
+ "items": {
4017
+ "type": "integer",
4018
+ "format": "int32"
4019
+ },
4020
+ "nullable": true
4021
+ },
4022
+ "companyRegistrationTypes": {
4023
+ "type": "array",
4024
+ "items": {
4025
+ "type": "integer",
4026
+ "format": "int32"
4027
+ },
4028
+ "nullable": true
4029
+ },
4030
+ "erpIDs": {
4031
+ "type": "array",
4032
+ "items": {
4033
+ "type": "string"
4034
+ },
4035
+ "nullable": true
4036
+ },
4037
+ "contacts": {
4038
+ "type": "array",
4039
+ "items": {
4040
+ "type": "integer",
4041
+ "format": "int32"
4042
+ },
4043
+ "nullable": true
4044
+ },
4045
+ "systemTags": {
4046
+ "type": "array",
4047
+ "items": {
4048
+ "type": "integer",
4049
+ "format": "int32"
4050
+ },
4051
+ "nullable": true
4052
+ },
4053
+ "scheduleRules": {
4054
+ "type": "array",
4055
+ "items": {
4056
+ "type": "integer",
4057
+ "format": "int32"
4058
+ },
4059
+ "nullable": true
4060
+ },
4061
+ "dateRangePeriod": {
4062
+ "$ref": "#/components/schemas/PeriodResult"
4063
+ },
4064
+ "attributeValues": {
4065
+ "$ref": "#/components/schemas/JToken"
4066
+ },
4067
+ "eventTransportTypes": {
4068
+ "type": "array",
4069
+ "items": {
4070
+ "type": "integer",
4071
+ "format": "int32"
4072
+ },
4073
+ "nullable": true
4074
+ },
4075
+ "materials": {
4076
+ "type": "array",
4077
+ "items": {
4078
+ "type": "integer",
4079
+ "format": "int32"
4080
+ },
4081
+ "nullable": true
4082
+ },
4083
+ "warehouses": {
4084
+ "type": "array",
4085
+ "items": {
4086
+ "type": "integer",
4087
+ "format": "int32"
4088
+ },
4089
+ "nullable": true
4090
+ },
4091
+ "requestedBy": {
4092
+ "type": "array",
4093
+ "items": {
4094
+ "type": "integer",
4095
+ "format": "int32"
4096
+ },
4097
+ "nullable": true
4098
+ },
4099
+ "assignedTo": {
4100
+ "type": "array",
4101
+ "items": {
4102
+ "type": "integer",
4103
+ "format": "int32"
4104
+ },
4105
+ "nullable": true
4106
+ },
4107
+ "approvalWith": {
4108
+ "type": "array",
4109
+ "items": {
4110
+ "type": "integer",
4111
+ "format": "int32"
4112
+ },
4113
+ "nullable": true
4114
+ },
4115
+ "escalatedTo": {
4116
+ "type": "array",
4117
+ "items": {
4118
+ "type": "integer",
4119
+ "format": "int32"
4120
+ },
4121
+ "nullable": true
4122
+ },
4123
+ "assetResponsiblePersons": {
4124
+ "type": "array",
4125
+ "items": {
4126
+ "type": "integer",
4127
+ "format": "int32"
4128
+ },
4129
+ "nullable": true
4130
+ },
4131
+ "taskStatuses": {
4132
+ "type": "array",
4133
+ "items": {
4134
+ "type": "integer",
4135
+ "format": "int32"
4136
+ },
4137
+ "nullable": true
4138
+ },
4139
+ "taskStages": {
4140
+ "type": "array",
4141
+ "items": {
4142
+ "type": "integer",
4143
+ "format": "int32"
4144
+ },
4145
+ "nullable": true
4146
+ },
4147
+ "taskFlags": {
4148
+ "$ref": "#/components/schemas/TaskFlagFilter"
4149
+ },
4150
+ "assignationPeriod": {
4151
+ "$ref": "#/components/schemas/PeriodResult"
4152
+ },
4153
+ "completionPeriod": {
4154
+ "$ref": "#/components/schemas/PeriodResult"
4155
+ },
4156
+ "closingPeriod": {
4157
+ "$ref": "#/components/schemas/PeriodResult"
4158
+ },
4159
+ "deadlinePeriod": {
4160
+ "$ref": "#/components/schemas/PeriodResult"
4161
+ },
4162
+ "taskNumbers": {
4163
+ "type": "array",
4164
+ "items": {
4165
+ "type": "string"
4166
+ },
4167
+ "nullable": true
4168
+ },
4169
+ "ratingCriterias": {
4170
+ "type": "array",
4171
+ "items": {
4172
+ "type": "integer",
4173
+ "format": "int32"
4174
+ },
4175
+ "nullable": true
4176
+ },
4177
+ "taskTemplates": {
4178
+ "type": "array",
4179
+ "items": {
4180
+ "type": "string"
4181
+ },
4182
+ "nullable": true
4183
+ },
4184
+ "requestMethods": {
4185
+ "type": "array",
4186
+ "items": {
4187
+ "type": "integer",
4188
+ "format": "int32"
4189
+ },
4190
+ "nullable": true
4191
+ },
4192
+ "branches": {
4193
+ "type": "array",
4194
+ "items": {
4195
+ "type": "integer",
4196
+ "format": "int32"
4197
+ },
4198
+ "nullable": true
4199
+ },
4200
+ "assetSchemas": {
4201
+ "type": "array",
4202
+ "items": {
4203
+ "type": "integer",
4204
+ "format": "int32"
4205
+ },
4206
+ "nullable": true
4207
+ },
4208
+ "lastModifiedPeriod": {
4209
+ "$ref": "#/components/schemas/PeriodResult"
4210
+ },
4211
+ "completedWorks": {
4212
+ "type": "array",
4213
+ "items": {
4214
+ "type": "integer",
4215
+ "format": "int32"
4216
+ },
4217
+ "nullable": true
4218
+ },
4219
+ "payeeCompanies": {
4220
+ "type": "array",
4221
+ "items": {
4222
+ "type": "integer",
4223
+ "format": "int32"
4224
+ },
4225
+ "nullable": true
4226
+ },
4227
+ "tabs": {
4228
+ "type": "array",
4229
+ "items": {
4230
+ "type": "string"
4231
+ },
4232
+ "nullable": true
4233
+ },
4234
+ "sections": {
4235
+ "type": "array",
4236
+ "items": {
4237
+ "type": "string"
4238
+ },
4239
+ "nullable": true
4240
+ }
4241
+ },
4242
+ "additionalProperties": false
4243
+ },
4244
+ "TaskFlagFilter": {
4245
+ "type": "object",
4246
+ "properties": {
4247
+ "hasAssigneeCheckedIn": {
4248
+ "type": "boolean",
4249
+ "nullable": true
4250
+ },
4251
+ "isClosed": {
4252
+ "type": "boolean",
4253
+ "nullable": true
4254
+ },
4255
+ "isFavourite": {
4256
+ "type": "boolean",
4257
+ "nullable": true
4258
+ },
4259
+ "isCompleted": {
4260
+ "type": "boolean",
4261
+ "nullable": true
4262
+ },
4263
+ "isAssigned": {
4264
+ "type": "boolean",
4265
+ "nullable": true
4266
+ },
4267
+ "isOutdated": {
4268
+ "type": "boolean",
4269
+ "nullable": true
4270
+ },
4271
+ "isRated": {
4272
+ "type": "boolean",
4273
+ "nullable": true
4274
+ },
4275
+ "isScheduled": {
4276
+ "type": "boolean",
4277
+ "nullable": true
4278
+ },
4279
+ "topLevelTasksForHierarchy": {
4280
+ "type": "boolean",
4281
+ "nullable": true
4282
+ }
4283
+ },
4284
+ "additionalProperties": false
3133
4285
  }
3134
4286
  },
3135
4287
  "securitySchemes": {
@@ -3150,6 +4302,10 @@
3150
4302
  "name": "Companies",
3151
4303
  "description": "Контроллер экспорта данных по компаниям"
3152
4304
  },
4305
+ {
4306
+ "name": "Export",
4307
+ "description": "Контроллер статусов асинхронных запросов экспорта."
4308
+ },
3153
4309
  {
3154
4310
  "name": "MaterialConsumption",
3155
4311
  "description": "Контроллер экспорта расхода по материалам"
@@ -3174,6 +4330,10 @@
3174
4330
  "name": "Companies",
3175
4331
  "description": "Контроллер экспорта данных по компаниям"
3176
4332
  },
4333
+ {
4334
+ "name": "Export",
4335
+ "description": "Контроллер статусов асинхронных запросов экспорта."
4336
+ },
3177
4337
  {
3178
4338
  "name": "MaterialConsumption",
3179
4339
  "description": "Контроллер экспорта расхода по материалам"