@hubex/mcp 0.2.0

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.
Files changed (92) hide show
  1. package/.env.example +54 -0
  2. package/CONNECTING.md +260 -0
  3. package/README.md +266 -0
  4. package/dist/auth.js +226 -0
  5. package/dist/config.js +120 -0
  6. package/dist/generated/manifest.js +3643 -0
  7. package/dist/guides/field-notes.json +27 -0
  8. package/dist/guides/loader.js +32 -0
  9. package/dist/guides/service-map.js +6 -0
  10. package/dist/http.js +93 -0
  11. package/dist/index/store.js +134 -0
  12. package/dist/index/types.js +1 -0
  13. package/dist/index.js +20 -0
  14. package/dist/paths.js +20 -0
  15. package/dist/pii/fields.js +100 -0
  16. package/dist/pii/mask.js +50 -0
  17. package/dist/pii/strategies.js +88 -0
  18. package/dist/schema/build-index.js +67 -0
  19. package/dist/schema/deref.js +87 -0
  20. package/dist/schema/describe.js +65 -0
  21. package/dist/server.js +62 -0
  22. package/dist/token-prompt.js +41 -0
  23. package/dist/tools/curated.js +151 -0
  24. package/dist/tools/discovery.js +187 -0
  25. package/dist/tools/guides.js +126 -0
  26. package/dist/tools/registry.js +37 -0
  27. package/dist/tools/request.js +170 -0
  28. package/dist/tools/types.js +1 -0
  29. package/docs/guides/assets.md +334 -0
  30. package/docs/guides/attributes.md +125 -0
  31. package/docs/guides/checklisttemplates.md +154 -0
  32. package/docs/guides/companies.md +57 -0
  33. package/docs/guides/dictionaries.md +64 -0
  34. package/docs/guides/lifecycle.md +263 -0
  35. package/docs/guides/materials.md +135 -0
  36. package/docs/guides/notifications.md +184 -0
  37. package/docs/guides/roles.md +125 -0
  38. package/docs/guides/sla.md +130 -0
  39. package/docs/guides/start.md +67 -0
  40. package/docs/guides/taskchecklists.md +149 -0
  41. package/docs/guides/taskcreate.md +260 -0
  42. package/docs/guides/taskedit.md +277 -0
  43. package/docs/guides/tasktypes.md +156 -0
  44. package/docs/guides/users.md +71 -0
  45. package/generated/index.dev.json +18776 -0
  46. package/generated/index.prod.json +18858 -0
  47. package/package.json +48 -0
  48. package/swagger/dev/ADM.json +27777 -0
  49. package/swagger/dev/AUTH.json +1739 -0
  50. package/swagger/dev/AUTHN.json +1250 -0
  51. package/swagger/dev/AUTHZ.json +1404 -0
  52. package/swagger/dev/CM.json +309 -0
  53. package/swagger/dev/COMMON.json +6543 -0
  54. package/swagger/dev/ES.json +28029 -0
  55. package/swagger/dev/EXPORT.json +4575 -0
  56. package/swagger/dev/IMPORT.json +1479 -0
  57. package/swagger/dev/LIC.json +224 -0
  58. package/swagger/dev/MSG.json +7883 -0
  59. package/swagger/dev/NEWS.json +348 -0
  60. package/swagger/dev/PA.json +5981 -0
  61. package/swagger/dev/PMP.json +3196 -0
  62. package/swagger/dev/PROXY.json +416 -0
  63. package/swagger/dev/REPORT.json +3921 -0
  64. package/swagger/dev/SC.json +3771 -0
  65. package/swagger/dev/SLA.json +2837 -0
  66. package/swagger/dev/TSTG.json +4981 -0
  67. package/swagger/dev/UI.json +4720 -0
  68. package/swagger/dev/WH.json +16796 -0
  69. package/swagger/dev/WORK.json +36024 -0
  70. package/swagger/dev/WSP.json +1612 -0
  71. package/swagger/prod/ADM.json +27777 -0
  72. package/swagger/prod/AUTH.json +1308 -0
  73. package/swagger/prod/AUTHN.json +2710 -0
  74. package/swagger/prod/AUTHZ.json +896 -0
  75. package/swagger/prod/CM.json +162 -0
  76. package/swagger/prod/COMMON.json +4910 -0
  77. package/swagger/prod/ES.json +28029 -0
  78. package/swagger/prod/EXPORT.json +3091 -0
  79. package/swagger/prod/LIC.json +123 -0
  80. package/swagger/prod/MSG.json +6239 -0
  81. package/swagger/prod/NEWS.json +295 -0
  82. package/swagger/prod/PA.json +5123 -0
  83. package/swagger/prod/PMP.json +2978 -0
  84. package/swagger/prod/PROXY.json +250 -0
  85. package/swagger/prod/REPORT.json +3729 -0
  86. package/swagger/prod/SC.json +3771 -0
  87. package/swagger/prod/SLA.json +2201 -0
  88. package/swagger/prod/TSTG.json +4220 -0
  89. package/swagger/prod/UI.json +3879 -0
  90. package/swagger/prod/WH.json +16730 -0
  91. package/swagger/prod/WORK.json +35994 -0
  92. package/swagger/prod/WSP.json +1468 -0
@@ -0,0 +1,3196 @@
1
+ {
2
+ "openapi": "3.0.1",
3
+ "info": {
4
+ "title": "API for PMP in HubEx",
5
+ "description": "Service offers application programming interface for ....",
6
+ "contact": {
7
+ "name": "SmartService Backend Team",
8
+ "email": "fmbackend@melston.ru"
9
+ },
10
+ "version": "v1.0.0.0"
11
+ },
12
+ "servers": [
13
+ {
14
+ "url": "/PMP"
15
+ }
16
+ ],
17
+ "paths": {
18
+ "/FrequencyTypes": {
19
+ "get": {
20
+ "tags": [
21
+ "FrequencyTypes"
22
+ ],
23
+ "summary": "Возвращает список типов повторений расписаний.",
24
+ "description": "## Пример запроса:\r\n```text\r\nGET /FrequencyTypes\r\nAuthorization: Bearer <token>\r\n```\r\n \r\n## Пример успешного ответа (200):\r\n```json\r\n{\r\n \"1\": {\r\n \"id\": 1,\r\n \"code\": \"DAILY\",\r\n \"name\": \"Ежедневно\"\r\n },\r\n \"2\": {\r\n \"id\": 2,\r\n \"code\": \"WEEKLY\",\r\n \"name\": \"Еженедельно\"\r\n }\r\n}\r\n```\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 204 — типы повторений не найдены.",
25
+ "parameters": [
26
+ {
27
+ "name": "scheduleID",
28
+ "in": "path",
29
+ "required": true,
30
+ "schema": {
31
+ "type": "integer",
32
+ "format": "int32"
33
+ }
34
+ },
35
+ {
36
+ "name": "dateFrom",
37
+ "in": "query",
38
+ "schema": {
39
+ "type": "string",
40
+ "format": "date-time"
41
+ }
42
+ },
43
+ {
44
+ "name": "dateTill",
45
+ "in": "query",
46
+ "schema": {
47
+ "type": "string",
48
+ "format": "date-time"
49
+ }
50
+ },
51
+ {
52
+ "name": "X-Application-ID",
53
+ "in": "header",
54
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
55
+ "schema": {
56
+ "enum": [
57
+ 1,
58
+ 2,
59
+ 3,
60
+ 4,
61
+ 5,
62
+ 6
63
+ ],
64
+ "type": "integer",
65
+ "format": "int32",
66
+ "default": 3,
67
+ "x-enumNames": [
68
+ "EngineerMobile",
69
+ "CustomerMobile",
70
+ "MainWeb",
71
+ "AdminWeb",
72
+ "Api",
73
+ "PlateWeb"
74
+ ]
75
+ }
76
+ }
77
+ ],
78
+ "responses": {
79
+ "401": {
80
+ "description": "Пользователь не авторизован."
81
+ },
82
+ "403": {
83
+ "description": "Недостаточно прав для выполнения операции."
84
+ },
85
+ "200": {
86
+ "description": "Список типов повторений успешно получен.",
87
+ "content": {
88
+ "text/plain": {
89
+ "schema": {
90
+ "type": "object",
91
+ "additionalProperties": {
92
+ "$ref": "#/components/schemas/IdCodeNameResultOfByte"
93
+ }
94
+ }
95
+ },
96
+ "application/json": {
97
+ "schema": {
98
+ "type": "object",
99
+ "additionalProperties": {
100
+ "$ref": "#/components/schemas/IdCodeNameResultOfByte"
101
+ }
102
+ }
103
+ },
104
+ "text/json": {
105
+ "schema": {
106
+ "type": "object",
107
+ "additionalProperties": {
108
+ "$ref": "#/components/schemas/IdCodeNameResultOfByte"
109
+ }
110
+ }
111
+ }
112
+ }
113
+ },
114
+ "204": {
115
+ "description": "Типы повторений не найдены."
116
+ }
117
+ },
118
+ "security": [
119
+ {
120
+ "Bearer": [ ]
121
+ }
122
+ ]
123
+ }
124
+ },
125
+ "/ScheduledTasks": {
126
+ "get": {
127
+ "tags": [
128
+ "ScheduledTasks"
129
+ ],
130
+ "summary": "Возвращает список шаблонов плановых заявок.",
131
+ "description": "Поддерживает фильтрацию по query-параметрам и постраничную выборку через заголовок `Range`.\r\n \r\n## Пример запроса:\r\n```text\r\nGET /ScheduledTasks?assetID=501&scheduleID=1&dateRangeFrom=2026-08-01T00:00:00Z&dateRangeTill=2026-08-31T23:59:59Z&isAssigned=false\r\nAuthorization: Bearer <token>\r\nRange: Offset=0; Fetch=50\r\n```\r\n \r\n## Пример успешного ответа (200):\r\n```json\r\n{\r\n \"1\": {\r\n \"taskTemplateID\": \"550e8400-e29b-41d4-a716-446655440000\",\r\n \"name\": \"Плановое ТО насоса\",\r\n \"description\": \"Ежемесячное техническое обслуживание\",\r\n \"notes\": \"Проверить давление\",\r\n \"sortOrder\": 0\r\n }\r\n}\r\n```\r\n \r\n## Пример успешного ответа (206):\r\nТело ответа имеет тот же формат, что и для `200`, но содержит только часть диапазона.\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 204 — плановые заявки по указанным фильтрам не найдены.\r\n- 400 — некорректные параметры фильтрации.",
132
+ "parameters": [
133
+ {
134
+ "name": "X-Application-ID",
135
+ "in": "header",
136
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
137
+ "schema": {
138
+ "enum": [
139
+ 1,
140
+ 2,
141
+ 3,
142
+ 4,
143
+ 5,
144
+ 6
145
+ ],
146
+ "type": "integer",
147
+ "format": "int32",
148
+ "default": 3,
149
+ "x-enumNames": [
150
+ "EngineerMobile",
151
+ "CustomerMobile",
152
+ "MainWeb",
153
+ "AdminWeb",
154
+ "Api",
155
+ "PlateWeb"
156
+ ]
157
+ }
158
+ }
159
+ ],
160
+ "responses": {
161
+ "401": {
162
+ "description": "Пользователь не авторизован.",
163
+ "content": {
164
+ "text/plain": {
165
+ "schema": {
166
+ "$ref": "#/components/schemas/ProblemDetails"
167
+ }
168
+ },
169
+ "application/json": {
170
+ "schema": {
171
+ "$ref": "#/components/schemas/ProblemDetails"
172
+ }
173
+ },
174
+ "text/json": {
175
+ "schema": {
176
+ "$ref": "#/components/schemas/ProblemDetails"
177
+ }
178
+ }
179
+ }
180
+ },
181
+ "403": {
182
+ "description": "Недостаточно прав для выполнения операции.",
183
+ "content": {
184
+ "text/plain": {
185
+ "schema": {
186
+ "$ref": "#/components/schemas/ProblemDetails"
187
+ }
188
+ },
189
+ "application/json": {
190
+ "schema": {
191
+ "$ref": "#/components/schemas/ProblemDetails"
192
+ }
193
+ },
194
+ "text/json": {
195
+ "schema": {
196
+ "$ref": "#/components/schemas/ProblemDetails"
197
+ }
198
+ }
199
+ }
200
+ },
201
+ "400": {
202
+ "description": "Некорректные параметры запроса.",
203
+ "content": {
204
+ "text/plain": {
205
+ "schema": {
206
+ "$ref": "#/components/schemas/ProblemDetails"
207
+ }
208
+ },
209
+ "application/json": {
210
+ "schema": {
211
+ "$ref": "#/components/schemas/ProblemDetails"
212
+ }
213
+ },
214
+ "text/json": {
215
+ "schema": {
216
+ "$ref": "#/components/schemas/ProblemDetails"
217
+ }
218
+ }
219
+ }
220
+ },
221
+ "200": {
222
+ "description": "Список шаблонов заявок успешно получен.",
223
+ "content": {
224
+ "text/plain": {
225
+ "schema": {
226
+ "type": "object",
227
+ "additionalProperties": {
228
+ "$ref": "#/components/schemas/RSTListResult"
229
+ }
230
+ }
231
+ },
232
+ "application/json": {
233
+ "schema": {
234
+ "type": "object",
235
+ "additionalProperties": {
236
+ "$ref": "#/components/schemas/RSTListResult"
237
+ }
238
+ }
239
+ },
240
+ "text/json": {
241
+ "schema": {
242
+ "type": "object",
243
+ "additionalProperties": {
244
+ "$ref": "#/components/schemas/RSTListResult"
245
+ }
246
+ }
247
+ }
248
+ }
249
+ },
250
+ "206": {
251
+ "description": "Возвращена часть списка в пределах запрошенного диапазона.",
252
+ "content": {
253
+ "text/plain": {
254
+ "schema": {
255
+ "type": "object",
256
+ "additionalProperties": {
257
+ "$ref": "#/components/schemas/RSTListResult"
258
+ }
259
+ }
260
+ },
261
+ "application/json": {
262
+ "schema": {
263
+ "type": "object",
264
+ "additionalProperties": {
265
+ "$ref": "#/components/schemas/RSTListResult"
266
+ }
267
+ }
268
+ },
269
+ "text/json": {
270
+ "schema": {
271
+ "type": "object",
272
+ "additionalProperties": {
273
+ "$ref": "#/components/schemas/RSTListResult"
274
+ }
275
+ }
276
+ }
277
+ }
278
+ },
279
+ "204": {
280
+ "description": "Плановые заявки не найдены."
281
+ }
282
+ },
283
+ "security": [
284
+ {
285
+ "Bearer": [ ]
286
+ }
287
+ ]
288
+ },
289
+ "head": {
290
+ "tags": [
291
+ "ScheduledTasks"
292
+ ],
293
+ "summary": "Возвращает заголовок с количеством шаблонов плановых заявок.",
294
+ "description": "## Пример запроса:\r\n```text\r\nHEAD /ScheduledTasks?assetID=501&dateRangeFrom=2026-08-01T00:00:00Z&dateRangeTill=2026-08-31T23:59:59Z\r\nAuthorization: Bearer <token>\r\n```\r\n \r\n## Пример успешного ответа (200):\r\nТело ответа отсутствует. В заголовке `Content-Range` возвращается общее количество записей в формате `items 0-0/{totalRowsCount}`.\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 400 — некорректные параметры фильтрации.",
295
+ "parameters": [
296
+ {
297
+ "name": "X-Application-ID",
298
+ "in": "header",
299
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
300
+ "schema": {
301
+ "enum": [
302
+ 1,
303
+ 2,
304
+ 3,
305
+ 4,
306
+ 5,
307
+ 6
308
+ ],
309
+ "type": "integer",
310
+ "format": "int32",
311
+ "default": 3,
312
+ "x-enumNames": [
313
+ "EngineerMobile",
314
+ "CustomerMobile",
315
+ "MainWeb",
316
+ "AdminWeb",
317
+ "Api",
318
+ "PlateWeb"
319
+ ]
320
+ }
321
+ }
322
+ ],
323
+ "responses": {
324
+ "401": {
325
+ "description": "Пользователь не авторизован.",
326
+ "content": {
327
+ "text/plain": {
328
+ "schema": {
329
+ "$ref": "#/components/schemas/ProblemDetails"
330
+ }
331
+ },
332
+ "application/json": {
333
+ "schema": {
334
+ "$ref": "#/components/schemas/ProblemDetails"
335
+ }
336
+ },
337
+ "text/json": {
338
+ "schema": {
339
+ "$ref": "#/components/schemas/ProblemDetails"
340
+ }
341
+ }
342
+ }
343
+ },
344
+ "403": {
345
+ "description": "Недостаточно прав для выполнения операции.",
346
+ "content": {
347
+ "text/plain": {
348
+ "schema": {
349
+ "$ref": "#/components/schemas/ProblemDetails"
350
+ }
351
+ },
352
+ "application/json": {
353
+ "schema": {
354
+ "$ref": "#/components/schemas/ProblemDetails"
355
+ }
356
+ },
357
+ "text/json": {
358
+ "schema": {
359
+ "$ref": "#/components/schemas/ProblemDetails"
360
+ }
361
+ }
362
+ }
363
+ },
364
+ "400": {
365
+ "description": "Некорректные параметры запроса.",
366
+ "content": {
367
+ "text/plain": {
368
+ "schema": {
369
+ "$ref": "#/components/schemas/ProblemDetails"
370
+ }
371
+ },
372
+ "application/json": {
373
+ "schema": {
374
+ "$ref": "#/components/schemas/ProblemDetails"
375
+ }
376
+ },
377
+ "text/json": {
378
+ "schema": {
379
+ "$ref": "#/components/schemas/ProblemDetails"
380
+ }
381
+ }
382
+ }
383
+ },
384
+ "200": {
385
+ "description": "Количество записей успешно получено."
386
+ }
387
+ },
388
+ "security": [
389
+ {
390
+ "Bearer": [ ]
391
+ }
392
+ ]
393
+ }
394
+ },
395
+ "/ScheduledTasks/count": {
396
+ "get": {
397
+ "tags": [
398
+ "ScheduledTasks"
399
+ ],
400
+ "summary": "Возвращает количество плановых заявок по дням с разбивкой по исполнителям.",
401
+ "description": "## Пример запроса:\r\n```text\r\nGET /ScheduledTasks/count?assetID=501&dateRangeFrom=2026-08-01T00:00:00Z&dateRangeTill=2026-08-31T23:59:59Z\r\nAuthorization: Bearer <token>\r\n```\r\n \r\n## Пример успешного ответа (200):\r\n```json\r\n{\r\n \"2026-08-20T00:00:00Z\": [\r\n {\r\n \"userID\": 42,\r\n \"countWithAssign\": 3,\r\n \"countWithoutAssign\": 1\r\n },\r\n {\r\n \"userID\": 0,\r\n \"countWithAssign\": 0,\r\n \"countWithoutAssign\": 2\r\n }\r\n ]\r\n}\r\n```\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 204 — данные по указанным фильтрам не найдены.\r\n- 400 — некорректные параметры фильтрации.",
402
+ "parameters": [
403
+ {
404
+ "name": "X-Application-ID",
405
+ "in": "header",
406
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
407
+ "schema": {
408
+ "enum": [
409
+ 1,
410
+ 2,
411
+ 3,
412
+ 4,
413
+ 5,
414
+ 6
415
+ ],
416
+ "type": "integer",
417
+ "format": "int32",
418
+ "default": 3,
419
+ "x-enumNames": [
420
+ "EngineerMobile",
421
+ "CustomerMobile",
422
+ "MainWeb",
423
+ "AdminWeb",
424
+ "Api",
425
+ "PlateWeb"
426
+ ]
427
+ }
428
+ }
429
+ ],
430
+ "responses": {
431
+ "401": {
432
+ "description": "Пользователь не авторизован.",
433
+ "content": {
434
+ "text/plain": {
435
+ "schema": {
436
+ "$ref": "#/components/schemas/ProblemDetails"
437
+ }
438
+ },
439
+ "application/json": {
440
+ "schema": {
441
+ "$ref": "#/components/schemas/ProblemDetails"
442
+ }
443
+ },
444
+ "text/json": {
445
+ "schema": {
446
+ "$ref": "#/components/schemas/ProblemDetails"
447
+ }
448
+ }
449
+ }
450
+ },
451
+ "403": {
452
+ "description": "Недостаточно прав для выполнения операции.",
453
+ "content": {
454
+ "text/plain": {
455
+ "schema": {
456
+ "$ref": "#/components/schemas/ProblemDetails"
457
+ }
458
+ },
459
+ "application/json": {
460
+ "schema": {
461
+ "$ref": "#/components/schemas/ProblemDetails"
462
+ }
463
+ },
464
+ "text/json": {
465
+ "schema": {
466
+ "$ref": "#/components/schemas/ProblemDetails"
467
+ }
468
+ }
469
+ }
470
+ },
471
+ "400": {
472
+ "description": "Некорректные параметры запроса.",
473
+ "content": {
474
+ "text/plain": {
475
+ "schema": {
476
+ "$ref": "#/components/schemas/ProblemDetails"
477
+ }
478
+ },
479
+ "application/json": {
480
+ "schema": {
481
+ "$ref": "#/components/schemas/ProblemDetails"
482
+ }
483
+ },
484
+ "text/json": {
485
+ "schema": {
486
+ "$ref": "#/components/schemas/ProblemDetails"
487
+ }
488
+ }
489
+ }
490
+ },
491
+ "200": {
492
+ "description": "Количество заявок по дням успешно получено.",
493
+ "content": {
494
+ "text/plain": {
495
+ "schema": {
496
+ "type": "object",
497
+ "additionalProperties": {
498
+ "type": "array",
499
+ "items": {
500
+ "$ref": "#/components/schemas/ListCountResult"
501
+ }
502
+ }
503
+ }
504
+ },
505
+ "application/json": {
506
+ "schema": {
507
+ "type": "object",
508
+ "additionalProperties": {
509
+ "type": "array",
510
+ "items": {
511
+ "$ref": "#/components/schemas/ListCountResult"
512
+ }
513
+ }
514
+ }
515
+ },
516
+ "text/json": {
517
+ "schema": {
518
+ "type": "object",
519
+ "additionalProperties": {
520
+ "type": "array",
521
+ "items": {
522
+ "$ref": "#/components/schemas/ListCountResult"
523
+ }
524
+ }
525
+ }
526
+ }
527
+ }
528
+ },
529
+ "204": {
530
+ "description": "Данные не найдены."
531
+ }
532
+ },
533
+ "security": [
534
+ {
535
+ "Bearer": [ ]
536
+ }
537
+ ]
538
+ }
539
+ },
540
+ "/ScheduledTasks/v2/count": {
541
+ "get": {
542
+ "tags": [
543
+ "ScheduledTasks"
544
+ ],
545
+ "summary": "Возвращает агрегированное количество плановых заявок по дням (версия 2).",
546
+ "description": "## Пример запроса:\r\n```text\r\nGET /ScheduledTasks/v2/count?assetID=501&dateRangeFrom=2026-08-01T00:00:00Z&dateRangeTill=2026-08-31T23:59:59Z\r\nAuthorization: Bearer <token>\r\n```\r\n \r\n## Пример успешного ответа (200):\r\n```json\r\n{\r\n \"2026-08-20T00:00:00Z\": [\r\n {\r\n \"countTasksForDay\": 5,\r\n \"countTasksForUsers\": [\r\n {\r\n \"userID\": 42,\r\n \"countWithAssign\": 3,\r\n \"countWithoutAssign\": 0\r\n },\r\n {\r\n \"userID\": 0,\r\n \"countWithAssign\": 0,\r\n \"countWithoutAssign\": 2\r\n }\r\n ]\r\n }\r\n ]\r\n}\r\n```\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 204 — данные по указанным фильтрам не найдены.\r\n- 400 — некорректные параметры фильтрации.",
547
+ "parameters": [
548
+ {
549
+ "name": "X-Application-ID",
550
+ "in": "header",
551
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
552
+ "schema": {
553
+ "enum": [
554
+ 1,
555
+ 2,
556
+ 3,
557
+ 4,
558
+ 5,
559
+ 6
560
+ ],
561
+ "type": "integer",
562
+ "format": "int32",
563
+ "default": 3,
564
+ "x-enumNames": [
565
+ "EngineerMobile",
566
+ "CustomerMobile",
567
+ "MainWeb",
568
+ "AdminWeb",
569
+ "Api",
570
+ "PlateWeb"
571
+ ]
572
+ }
573
+ }
574
+ ],
575
+ "responses": {
576
+ "401": {
577
+ "description": "Пользователь не авторизован.",
578
+ "content": {
579
+ "text/plain": {
580
+ "schema": {
581
+ "$ref": "#/components/schemas/ProblemDetails"
582
+ }
583
+ },
584
+ "application/json": {
585
+ "schema": {
586
+ "$ref": "#/components/schemas/ProblemDetails"
587
+ }
588
+ },
589
+ "text/json": {
590
+ "schema": {
591
+ "$ref": "#/components/schemas/ProblemDetails"
592
+ }
593
+ }
594
+ }
595
+ },
596
+ "403": {
597
+ "description": "Недостаточно прав для выполнения операции.",
598
+ "content": {
599
+ "text/plain": {
600
+ "schema": {
601
+ "$ref": "#/components/schemas/ProblemDetails"
602
+ }
603
+ },
604
+ "application/json": {
605
+ "schema": {
606
+ "$ref": "#/components/schemas/ProblemDetails"
607
+ }
608
+ },
609
+ "text/json": {
610
+ "schema": {
611
+ "$ref": "#/components/schemas/ProblemDetails"
612
+ }
613
+ }
614
+ }
615
+ },
616
+ "400": {
617
+ "description": "Некорректные параметры запроса.",
618
+ "content": {
619
+ "text/plain": {
620
+ "schema": {
621
+ "$ref": "#/components/schemas/ProblemDetails"
622
+ }
623
+ },
624
+ "application/json": {
625
+ "schema": {
626
+ "$ref": "#/components/schemas/ProblemDetails"
627
+ }
628
+ },
629
+ "text/json": {
630
+ "schema": {
631
+ "$ref": "#/components/schemas/ProblemDetails"
632
+ }
633
+ }
634
+ }
635
+ },
636
+ "200": {
637
+ "description": "Количество заявок по дням успешно получено.",
638
+ "content": {
639
+ "text/plain": {
640
+ "schema": {
641
+ "type": "object",
642
+ "additionalProperties": {
643
+ "type": "array",
644
+ "items": {
645
+ "$ref": "#/components/schemas/CountResult"
646
+ }
647
+ }
648
+ }
649
+ },
650
+ "application/json": {
651
+ "schema": {
652
+ "type": "object",
653
+ "additionalProperties": {
654
+ "type": "array",
655
+ "items": {
656
+ "$ref": "#/components/schemas/CountResult"
657
+ }
658
+ }
659
+ }
660
+ },
661
+ "text/json": {
662
+ "schema": {
663
+ "type": "object",
664
+ "additionalProperties": {
665
+ "type": "array",
666
+ "items": {
667
+ "$ref": "#/components/schemas/CountResult"
668
+ }
669
+ }
670
+ }
671
+ }
672
+ }
673
+ },
674
+ "204": {
675
+ "description": "Данные не найдены."
676
+ }
677
+ },
678
+ "security": [
679
+ {
680
+ "Bearer": [ ]
681
+ }
682
+ ]
683
+ }
684
+ },
685
+ "/ScheduledTasks/appointments": {
686
+ "head": {
687
+ "tags": [
688
+ "ScheduledTasks"
689
+ ],
690
+ "summary": "Возвращает заголовок с количеством срабатываний шаблонов заявок.",
691
+ "description": "## Пример запроса:\r\n```text\r\nHEAD /ScheduledTasks/appointments?assetID=501&dateRangeFrom=2026-08-01T00:00:00Z&dateRangeTill=2026-08-31T23:59:59Z\r\nAuthorization: Bearer <token>\r\n```\r\n \r\n## Пример успешного ответа (200):\r\nТело ответа отсутствует. В заголовке `Content-Range` возвращается общее количество записей в формате `items 0-0/{totalRowsCount}`.\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 204 — срабатывания по указанным фильтрам не найдены.\r\n- 400 — некорректные параметры фильтрации.",
692
+ "parameters": [
693
+ {
694
+ "name": "X-Application-ID",
695
+ "in": "header",
696
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
697
+ "schema": {
698
+ "enum": [
699
+ 1,
700
+ 2,
701
+ 3,
702
+ 4,
703
+ 5,
704
+ 6
705
+ ],
706
+ "type": "integer",
707
+ "format": "int32",
708
+ "default": 3,
709
+ "x-enumNames": [
710
+ "EngineerMobile",
711
+ "CustomerMobile",
712
+ "MainWeb",
713
+ "AdminWeb",
714
+ "Api",
715
+ "PlateWeb"
716
+ ]
717
+ }
718
+ }
719
+ ],
720
+ "responses": {
721
+ "401": {
722
+ "description": "Пользователь не авторизован.",
723
+ "content": {
724
+ "text/plain": {
725
+ "schema": {
726
+ "$ref": "#/components/schemas/ProblemDetails"
727
+ }
728
+ },
729
+ "application/json": {
730
+ "schema": {
731
+ "$ref": "#/components/schemas/ProblemDetails"
732
+ }
733
+ },
734
+ "text/json": {
735
+ "schema": {
736
+ "$ref": "#/components/schemas/ProblemDetails"
737
+ }
738
+ }
739
+ }
740
+ },
741
+ "403": {
742
+ "description": "Недостаточно прав для выполнения операции.",
743
+ "content": {
744
+ "text/plain": {
745
+ "schema": {
746
+ "$ref": "#/components/schemas/ProblemDetails"
747
+ }
748
+ },
749
+ "application/json": {
750
+ "schema": {
751
+ "$ref": "#/components/schemas/ProblemDetails"
752
+ }
753
+ },
754
+ "text/json": {
755
+ "schema": {
756
+ "$ref": "#/components/schemas/ProblemDetails"
757
+ }
758
+ }
759
+ }
760
+ },
761
+ "400": {
762
+ "description": "Некорректные параметры запроса.",
763
+ "content": {
764
+ "text/plain": {
765
+ "schema": {
766
+ "$ref": "#/components/schemas/ProblemDetails"
767
+ }
768
+ },
769
+ "application/json": {
770
+ "schema": {
771
+ "$ref": "#/components/schemas/ProblemDetails"
772
+ }
773
+ },
774
+ "text/json": {
775
+ "schema": {
776
+ "$ref": "#/components/schemas/ProblemDetails"
777
+ }
778
+ }
779
+ }
780
+ },
781
+ "200": {
782
+ "description": "Количество срабатываний успешно получено."
783
+ },
784
+ "204": {
785
+ "description": "Срабатывания не найдены."
786
+ }
787
+ },
788
+ "security": [
789
+ {
790
+ "Bearer": [ ]
791
+ }
792
+ ]
793
+ },
794
+ "get": {
795
+ "tags": [
796
+ "ScheduledTasks"
797
+ ],
798
+ "summary": "Возвращает список срабатываний шаблонов плановых заявок.",
799
+ "description": "Поддерживает фильтрацию по query-параметрам и постраничную выборку через заголовок `Range`.\r\n \r\n## Пример запроса:\r\n```text\r\nGET /ScheduledTasks/appointments?assetID=501&scheduleID=1&dateRangeFrom=2026-08-01T00:00:00Z&dateRangeTill=2026-08-31T23:59:59Z\r\nAuthorization: Bearer <token>\r\nRange: Offset=0; Fetch=50\r\n```\r\n \r\n## Пример успешного ответа (200):\r\n```json\r\n[\r\n {\r\n \"scheduleID\": 1,\r\n \"appointmentID\": 100,\r\n \"appointment\": \"2026-08-20T10:00:00Z\",\r\n \"appointmentWith\": \"2026-08-20T08:00:00Z\",\r\n \"appointmentBy\": \"2026-08-20T18:00:00Z\",\r\n \"assetAssigns\": [\r\n {\r\n \"assetID\": 501,\r\n \"assetName\": \"Насос №1\",\r\n \"sortOrder\": 0,\r\n \"userID\": 42\r\n }\r\n ]\r\n }\r\n]\r\n```\r\n \r\n## Пример успешного ответа (206):\r\nТело ответа имеет тот же формат, что и для `200`, но содержит только часть диапазона.\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 204 — срабатывания по указанным фильтрам не найдены.\r\n- 400 — некорректные параметры фильтрации.",
800
+ "parameters": [
801
+ {
802
+ "name": "X-Application-ID",
803
+ "in": "header",
804
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
805
+ "schema": {
806
+ "enum": [
807
+ 1,
808
+ 2,
809
+ 3,
810
+ 4,
811
+ 5,
812
+ 6
813
+ ],
814
+ "type": "integer",
815
+ "format": "int32",
816
+ "default": 3,
817
+ "x-enumNames": [
818
+ "EngineerMobile",
819
+ "CustomerMobile",
820
+ "MainWeb",
821
+ "AdminWeb",
822
+ "Api",
823
+ "PlateWeb"
824
+ ]
825
+ }
826
+ }
827
+ ],
828
+ "responses": {
829
+ "401": {
830
+ "description": "Пользователь не авторизован.",
831
+ "content": {
832
+ "text/plain": {
833
+ "schema": {
834
+ "$ref": "#/components/schemas/ProblemDetails"
835
+ }
836
+ },
837
+ "application/json": {
838
+ "schema": {
839
+ "$ref": "#/components/schemas/ProblemDetails"
840
+ }
841
+ },
842
+ "text/json": {
843
+ "schema": {
844
+ "$ref": "#/components/schemas/ProblemDetails"
845
+ }
846
+ }
847
+ }
848
+ },
849
+ "403": {
850
+ "description": "Недостаточно прав для выполнения операции.",
851
+ "content": {
852
+ "text/plain": {
853
+ "schema": {
854
+ "$ref": "#/components/schemas/ProblemDetails"
855
+ }
856
+ },
857
+ "application/json": {
858
+ "schema": {
859
+ "$ref": "#/components/schemas/ProblemDetails"
860
+ }
861
+ },
862
+ "text/json": {
863
+ "schema": {
864
+ "$ref": "#/components/schemas/ProblemDetails"
865
+ }
866
+ }
867
+ }
868
+ },
869
+ "400": {
870
+ "description": "Некорректные параметры запроса.",
871
+ "content": {
872
+ "text/plain": {
873
+ "schema": {
874
+ "$ref": "#/components/schemas/ProblemDetails"
875
+ }
876
+ },
877
+ "application/json": {
878
+ "schema": {
879
+ "$ref": "#/components/schemas/ProblemDetails"
880
+ }
881
+ },
882
+ "text/json": {
883
+ "schema": {
884
+ "$ref": "#/components/schemas/ProblemDetails"
885
+ }
886
+ }
887
+ }
888
+ },
889
+ "200": {
890
+ "description": "Список срабатываний успешно получен.",
891
+ "content": {
892
+ "text/plain": {
893
+ "schema": {
894
+ "type": "array",
895
+ "items": {
896
+ "$ref": "#/components/schemas/AppointmentResultOfRSTAssetAssignResult"
897
+ }
898
+ }
899
+ },
900
+ "application/json": {
901
+ "schema": {
902
+ "type": "array",
903
+ "items": {
904
+ "$ref": "#/components/schemas/AppointmentResultOfRSTAssetAssignResult"
905
+ }
906
+ }
907
+ },
908
+ "text/json": {
909
+ "schema": {
910
+ "type": "array",
911
+ "items": {
912
+ "$ref": "#/components/schemas/AppointmentResultOfRSTAssetAssignResult"
913
+ }
914
+ }
915
+ }
916
+ }
917
+ },
918
+ "206": {
919
+ "description": "Возвращена часть списка в пределах запрошенного диапазона.",
920
+ "content": {
921
+ "text/plain": {
922
+ "schema": {
923
+ "type": "array",
924
+ "items": {
925
+ "$ref": "#/components/schemas/AppointmentResultOfRSTAssetAssignResult"
926
+ }
927
+ }
928
+ },
929
+ "application/json": {
930
+ "schema": {
931
+ "type": "array",
932
+ "items": {
933
+ "$ref": "#/components/schemas/AppointmentResultOfRSTAssetAssignResult"
934
+ }
935
+ }
936
+ },
937
+ "text/json": {
938
+ "schema": {
939
+ "type": "array",
940
+ "items": {
941
+ "$ref": "#/components/schemas/AppointmentResultOfRSTAssetAssignResult"
942
+ }
943
+ }
944
+ }
945
+ }
946
+ },
947
+ "204": {
948
+ "description": "Срабатывания не найдены."
949
+ }
950
+ },
951
+ "security": [
952
+ {
953
+ "Bearer": [ ]
954
+ }
955
+ ]
956
+ }
957
+ },
958
+ "/ScheduledTasks/v2/appointments": {
959
+ "get": {
960
+ "tags": [
961
+ "ScheduledTasks"
962
+ ],
963
+ "summary": "Возвращает список срабатываний шаблонов плановых заявок (версия 2).",
964
+ "description": "Поддерживает фильтрацию по query-параметрам и постраничную выборку через заголовок `Range`.\r\nВ отличие от v1, возвращает несколько исполнителей на объект, а также данные о компании и локации.\r\n \r\n## Пример запроса:\r\n```text\r\nGET /ScheduledTasks/v2/appointments?assetID=501&scheduleID=1&dateRangeFrom=2026-08-01T00:00:00Z&dateRangeTill=2026-08-31T23:59:59Z\r\nAuthorization: Bearer <token>\r\nRange: Offset=0; Fetch=50\r\n```\r\n \r\n## Пример успешного ответа (200):\r\n```json\r\n[\r\n {\r\n \"scheduleID\": 1,\r\n \"appointmentID\": 100,\r\n \"appointment\": \"2026-08-20T10:00:00Z\",\r\n \"appointmentWith\": \"2026-08-20T08:00:00Z\",\r\n \"appointmentBy\": \"2026-08-20T18:00:00Z\",\r\n \"assetAssigns\": [\r\n {\r\n \"assetID\": 501,\r\n \"assetName\": \"Насос №1\",\r\n \"sortOrder\": 0,\r\n \"users\": [42, 43],\r\n \"company\": {\r\n \"id\": 5,\r\n \"name\": \"ООО Ремонт\",\r\n \"deleted\": null\r\n },\r\n \"location\": {\r\n \"id\": 10,\r\n \"address\": \"ул. Примерная, 1\",\r\n \"coordinate\": \"55.7558:37.6173\",\r\n \"description\": \"Цех №1\",\r\n \"deleted\": null\r\n }\r\n }\r\n ]\r\n }\r\n]\r\n```\r\n \r\n## Пример успешного ответа (206):\r\nТело ответа имеет тот же формат, что и для `200`, но содержит только часть диапазона.\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 204 — срабатывания по указанным фильтрам не найдены.\r\n- 400 — некорректные параметры фильтрации.",
965
+ "parameters": [
966
+ {
967
+ "name": "X-Application-ID",
968
+ "in": "header",
969
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
970
+ "schema": {
971
+ "enum": [
972
+ 1,
973
+ 2,
974
+ 3,
975
+ 4,
976
+ 5,
977
+ 6
978
+ ],
979
+ "type": "integer",
980
+ "format": "int32",
981
+ "default": 3,
982
+ "x-enumNames": [
983
+ "EngineerMobile",
984
+ "CustomerMobile",
985
+ "MainWeb",
986
+ "AdminWeb",
987
+ "Api",
988
+ "PlateWeb"
989
+ ]
990
+ }
991
+ }
992
+ ],
993
+ "responses": {
994
+ "401": {
995
+ "description": "Пользователь не авторизован.",
996
+ "content": {
997
+ "text/plain": {
998
+ "schema": {
999
+ "$ref": "#/components/schemas/ProblemDetails"
1000
+ }
1001
+ },
1002
+ "application/json": {
1003
+ "schema": {
1004
+ "$ref": "#/components/schemas/ProblemDetails"
1005
+ }
1006
+ },
1007
+ "text/json": {
1008
+ "schema": {
1009
+ "$ref": "#/components/schemas/ProblemDetails"
1010
+ }
1011
+ }
1012
+ }
1013
+ },
1014
+ "403": {
1015
+ "description": "Недостаточно прав для выполнения операции.",
1016
+ "content": {
1017
+ "text/plain": {
1018
+ "schema": {
1019
+ "$ref": "#/components/schemas/ProblemDetails"
1020
+ }
1021
+ },
1022
+ "application/json": {
1023
+ "schema": {
1024
+ "$ref": "#/components/schemas/ProblemDetails"
1025
+ }
1026
+ },
1027
+ "text/json": {
1028
+ "schema": {
1029
+ "$ref": "#/components/schemas/ProblemDetails"
1030
+ }
1031
+ }
1032
+ }
1033
+ },
1034
+ "400": {
1035
+ "description": "Некорректные параметры запроса.",
1036
+ "content": {
1037
+ "text/plain": {
1038
+ "schema": {
1039
+ "$ref": "#/components/schemas/ProblemDetails"
1040
+ }
1041
+ },
1042
+ "application/json": {
1043
+ "schema": {
1044
+ "$ref": "#/components/schemas/ProblemDetails"
1045
+ }
1046
+ },
1047
+ "text/json": {
1048
+ "schema": {
1049
+ "$ref": "#/components/schemas/ProblemDetails"
1050
+ }
1051
+ }
1052
+ }
1053
+ },
1054
+ "200": {
1055
+ "description": "Список срабатываний успешно получен.",
1056
+ "content": {
1057
+ "text/plain": {
1058
+ "schema": {
1059
+ "type": "array",
1060
+ "items": {
1061
+ "$ref": "#/components/schemas/AppointmentResultOfAssetAssignResultV2"
1062
+ }
1063
+ }
1064
+ },
1065
+ "application/json": {
1066
+ "schema": {
1067
+ "type": "array",
1068
+ "items": {
1069
+ "$ref": "#/components/schemas/AppointmentResultOfAssetAssignResultV2"
1070
+ }
1071
+ }
1072
+ },
1073
+ "text/json": {
1074
+ "schema": {
1075
+ "type": "array",
1076
+ "items": {
1077
+ "$ref": "#/components/schemas/AppointmentResultOfAssetAssignResultV2"
1078
+ }
1079
+ }
1080
+ }
1081
+ }
1082
+ },
1083
+ "206": {
1084
+ "description": "Возвращена часть списка в пределах запрошенного диапазона.",
1085
+ "content": {
1086
+ "text/plain": {
1087
+ "schema": {
1088
+ "type": "array",
1089
+ "items": {
1090
+ "$ref": "#/components/schemas/AppointmentResultOfAssetAssignResultV2"
1091
+ }
1092
+ }
1093
+ },
1094
+ "application/json": {
1095
+ "schema": {
1096
+ "type": "array",
1097
+ "items": {
1098
+ "$ref": "#/components/schemas/AppointmentResultOfAssetAssignResultV2"
1099
+ }
1100
+ }
1101
+ },
1102
+ "text/json": {
1103
+ "schema": {
1104
+ "type": "array",
1105
+ "items": {
1106
+ "$ref": "#/components/schemas/AppointmentResultOfAssetAssignResultV2"
1107
+ }
1108
+ }
1109
+ }
1110
+ }
1111
+ },
1112
+ "204": {
1113
+ "description": "Срабатывания не найдены."
1114
+ }
1115
+ },
1116
+ "security": [
1117
+ {
1118
+ "Bearer": [ ]
1119
+ }
1120
+ ]
1121
+ }
1122
+ },
1123
+ "/Schedules/appointments/assign": {
1124
+ "get": {
1125
+ "tags": [
1126
+ "Schedules"
1127
+ ],
1128
+ "summary": "Возвращает список назначенных исполнителей для событий расписаний.",
1129
+ "description": "Поддерживает фильтрацию по query-параметрам и постраничную выборку через заголовок `Range`.\r\n \r\n## Пример запроса:\r\n```text\r\nGET /Schedules/appointments/assign?assetID=501&userID=42&validFrom=2026-08-01T00:00:00Z&validTill=2026-08-31T23:59:59Z\r\nAuthorization: Bearer <token>\r\nRange: Offset=0; Fetch=50\r\n```\r\n \r\n## Пример успешного ответа (200):\r\n```json\r\n{\r\n \"1\": {\r\n \"appointments\": [\r\n {\r\n \"appointmentID\": 100,\r\n \"appointment\": \"2026-08-20T10:00:00Z\",\r\n \"assetAssigns\": [\r\n {\r\n \"assetID\": 501,\r\n \"userID\": 42\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n}\r\n```\r\n \r\n## Пример успешного ответа (206):\r\nТело ответа имеет тот же формат, что и для `200`, но содержит только часть диапазона.\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 204 — назначения по указанным фильтрам не найдены.\r\n- 400 — некорректные параметры фильтрации.",
1130
+ "parameters": [
1131
+ {
1132
+ "name": "X-Application-ID",
1133
+ "in": "header",
1134
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
1135
+ "schema": {
1136
+ "enum": [
1137
+ 1,
1138
+ 2,
1139
+ 3,
1140
+ 4,
1141
+ 5,
1142
+ 6
1143
+ ],
1144
+ "type": "integer",
1145
+ "format": "int32",
1146
+ "default": 3,
1147
+ "x-enumNames": [
1148
+ "EngineerMobile",
1149
+ "CustomerMobile",
1150
+ "MainWeb",
1151
+ "AdminWeb",
1152
+ "Api",
1153
+ "PlateWeb"
1154
+ ]
1155
+ }
1156
+ }
1157
+ ],
1158
+ "responses": {
1159
+ "401": {
1160
+ "description": "Пользователь не авторизован."
1161
+ },
1162
+ "403": {
1163
+ "description": "Недостаточно прав для выполнения операции."
1164
+ },
1165
+ "200": {
1166
+ "description": "Список назначений успешно получен.",
1167
+ "content": {
1168
+ "text/plain": {
1169
+ "schema": {
1170
+ "type": "object",
1171
+ "additionalProperties": {
1172
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignListResult"
1173
+ }
1174
+ }
1175
+ },
1176
+ "application/json": {
1177
+ "schema": {
1178
+ "type": "object",
1179
+ "additionalProperties": {
1180
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignListResult"
1181
+ }
1182
+ }
1183
+ },
1184
+ "text/json": {
1185
+ "schema": {
1186
+ "type": "object",
1187
+ "additionalProperties": {
1188
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignListResult"
1189
+ }
1190
+ }
1191
+ }
1192
+ }
1193
+ },
1194
+ "206": {
1195
+ "description": "Возвращена часть списка в пределах запрошенного диапазона.",
1196
+ "content": {
1197
+ "text/plain": {
1198
+ "schema": {
1199
+ "type": "object",
1200
+ "additionalProperties": {
1201
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignListResult"
1202
+ }
1203
+ }
1204
+ },
1205
+ "application/json": {
1206
+ "schema": {
1207
+ "type": "object",
1208
+ "additionalProperties": {
1209
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignListResult"
1210
+ }
1211
+ }
1212
+ },
1213
+ "text/json": {
1214
+ "schema": {
1215
+ "type": "object",
1216
+ "additionalProperties": {
1217
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignListResult"
1218
+ }
1219
+ }
1220
+ }
1221
+ }
1222
+ },
1223
+ "204": {
1224
+ "description": "Назначения не найдены."
1225
+ },
1226
+ "400": {
1227
+ "description": "Некорректные параметры запроса.",
1228
+ "content": {
1229
+ "text/plain": {
1230
+ "schema": {
1231
+ "type": "array",
1232
+ "items": {
1233
+ "$ref": "#/components/schemas/ErrorModel"
1234
+ }
1235
+ }
1236
+ },
1237
+ "application/json": {
1238
+ "schema": {
1239
+ "type": "array",
1240
+ "items": {
1241
+ "$ref": "#/components/schemas/ErrorModel"
1242
+ }
1243
+ }
1244
+ },
1245
+ "text/json": {
1246
+ "schema": {
1247
+ "type": "array",
1248
+ "items": {
1249
+ "$ref": "#/components/schemas/ErrorModel"
1250
+ }
1251
+ }
1252
+ }
1253
+ }
1254
+ }
1255
+ },
1256
+ "security": [
1257
+ {
1258
+ "Bearer": [ ]
1259
+ }
1260
+ ]
1261
+ },
1262
+ "post": {
1263
+ "tags": [
1264
+ "Schedules"
1265
+ ],
1266
+ "summary": "Назначает исполнителей на заявки событий расписаний.",
1267
+ "description": "## Пример запроса:\r\n```text\r\nPOST /Schedules/appointments/assign\r\nAuthorization: Bearer <token>\r\nContent-Type: application/json\r\n \r\n[\r\n {\r\n \"scheduleID\": 1,\r\n \"appointmentID\": 100,\r\n \"assetID\": 501,\r\n \"userID\": 42\r\n }\r\n]\r\n```\r\n \r\n## Пример успешного ответа (201):\r\n```json\r\n[\r\n {\r\n \"scheduleID\": 1,\r\n \"appointmentID\": 100,\r\n \"assetID\": 501,\r\n \"userID\": 42\r\n }\r\n]\r\n```\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 204 — назначения не были созданы.\r\n- 409 — конфликт при назначении исполнителей.",
1268
+ "parameters": [
1269
+ {
1270
+ "name": "X-Application-ID",
1271
+ "in": "header",
1272
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
1273
+ "schema": {
1274
+ "enum": [
1275
+ 1,
1276
+ 2,
1277
+ 3,
1278
+ 4,
1279
+ 5,
1280
+ 6
1281
+ ],
1282
+ "type": "integer",
1283
+ "format": "int32",
1284
+ "default": 3,
1285
+ "x-enumNames": [
1286
+ "EngineerMobile",
1287
+ "CustomerMobile",
1288
+ "MainWeb",
1289
+ "AdminWeb",
1290
+ "Api",
1291
+ "PlateWeb"
1292
+ ]
1293
+ }
1294
+ }
1295
+ ],
1296
+ "requestBody": {
1297
+ "description": "Данные для назначения исполнителей.",
1298
+ "content": {
1299
+ "application/json-patch+json": {
1300
+ "schema": {
1301
+ "type": "array",
1302
+ "items": {
1303
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignMergeData"
1304
+ }
1305
+ }
1306
+ },
1307
+ "application/json": {
1308
+ "schema": {
1309
+ "type": "array",
1310
+ "items": {
1311
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignMergeData"
1312
+ }
1313
+ }
1314
+ },
1315
+ "text/json": {
1316
+ "schema": {
1317
+ "type": "array",
1318
+ "items": {
1319
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignMergeData"
1320
+ }
1321
+ }
1322
+ },
1323
+ "application/*+json": {
1324
+ "schema": {
1325
+ "type": "array",
1326
+ "items": {
1327
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignMergeData"
1328
+ }
1329
+ }
1330
+ }
1331
+ }
1332
+ },
1333
+ "responses": {
1334
+ "401": {
1335
+ "description": "Пользователь не авторизован."
1336
+ },
1337
+ "403": {
1338
+ "description": "Недостаточно прав для выполнения операции."
1339
+ },
1340
+ "201": {
1341
+ "description": "Исполнители успешно назначены.",
1342
+ "content": {
1343
+ "text/plain": {
1344
+ "schema": {
1345
+ "type": "array",
1346
+ "items": {
1347
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignResult"
1348
+ }
1349
+ }
1350
+ },
1351
+ "application/json": {
1352
+ "schema": {
1353
+ "type": "array",
1354
+ "items": {
1355
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignResult"
1356
+ }
1357
+ }
1358
+ },
1359
+ "text/json": {
1360
+ "schema": {
1361
+ "type": "array",
1362
+ "items": {
1363
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignResult"
1364
+ }
1365
+ }
1366
+ }
1367
+ }
1368
+ },
1369
+ "204": {
1370
+ "description": "Назначения не были созданы."
1371
+ },
1372
+ "409": {
1373
+ "description": "Конфликт при назначении исполнителей.",
1374
+ "content": {
1375
+ "text/plain": {
1376
+ "schema": {
1377
+ "type": "array",
1378
+ "items": {
1379
+ "$ref": "#/components/schemas/ErrorModel"
1380
+ }
1381
+ }
1382
+ },
1383
+ "application/json": {
1384
+ "schema": {
1385
+ "type": "array",
1386
+ "items": {
1387
+ "$ref": "#/components/schemas/ErrorModel"
1388
+ }
1389
+ }
1390
+ },
1391
+ "text/json": {
1392
+ "schema": {
1393
+ "type": "array",
1394
+ "items": {
1395
+ "$ref": "#/components/schemas/ErrorModel"
1396
+ }
1397
+ }
1398
+ }
1399
+ }
1400
+ }
1401
+ },
1402
+ "security": [
1403
+ {
1404
+ "Bearer": [ ]
1405
+ }
1406
+ ]
1407
+ },
1408
+ "delete": {
1409
+ "tags": [
1410
+ "Schedules"
1411
+ ],
1412
+ "summary": "Удаляет назначения исполнителей с заявок событий расписаний.",
1413
+ "description": "## Пример запроса:\r\n```text\r\nDELETE /Schedules/appointments/assign\r\nAuthorization: Bearer <token>\r\nContent-Type: application/json\r\n \r\n[\r\n {\r\n \"scheduleID\": 1,\r\n \"appointmentID\": 100,\r\n \"assetID\": 501\r\n }\r\n]\r\n```\r\n \r\n## Пример успешного ответа (202):\r\nТело ответа отсутствует.\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 409 — конфликт при удалении назначений.",
1414
+ "parameters": [
1415
+ {
1416
+ "name": "X-Application-ID",
1417
+ "in": "header",
1418
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
1419
+ "schema": {
1420
+ "enum": [
1421
+ 1,
1422
+ 2,
1423
+ 3,
1424
+ 4,
1425
+ 5,
1426
+ 6
1427
+ ],
1428
+ "type": "integer",
1429
+ "format": "int32",
1430
+ "default": 3,
1431
+ "x-enumNames": [
1432
+ "EngineerMobile",
1433
+ "CustomerMobile",
1434
+ "MainWeb",
1435
+ "AdminWeb",
1436
+ "Api",
1437
+ "PlateWeb"
1438
+ ]
1439
+ }
1440
+ }
1441
+ ],
1442
+ "requestBody": {
1443
+ "description": "Данные для удаления назначений.",
1444
+ "content": {
1445
+ "application/json-patch+json": {
1446
+ "schema": {
1447
+ "type": "array",
1448
+ "items": {
1449
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignDeleteData"
1450
+ }
1451
+ }
1452
+ },
1453
+ "application/json": {
1454
+ "schema": {
1455
+ "type": "array",
1456
+ "items": {
1457
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignDeleteData"
1458
+ }
1459
+ }
1460
+ },
1461
+ "text/json": {
1462
+ "schema": {
1463
+ "type": "array",
1464
+ "items": {
1465
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignDeleteData"
1466
+ }
1467
+ }
1468
+ },
1469
+ "application/*+json": {
1470
+ "schema": {
1471
+ "type": "array",
1472
+ "items": {
1473
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignDeleteData"
1474
+ }
1475
+ }
1476
+ }
1477
+ }
1478
+ },
1479
+ "responses": {
1480
+ "401": {
1481
+ "description": "Пользователь не авторизован."
1482
+ },
1483
+ "403": {
1484
+ "description": "Недостаточно прав для выполнения операции."
1485
+ },
1486
+ "202": {
1487
+ "description": "Назначения успешно удалены."
1488
+ },
1489
+ "409": {
1490
+ "description": "Конфликт при удалении назначений.",
1491
+ "content": {
1492
+ "text/plain": {
1493
+ "schema": {
1494
+ "type": "array",
1495
+ "items": {
1496
+ "$ref": "#/components/schemas/ErrorModel"
1497
+ }
1498
+ }
1499
+ },
1500
+ "application/json": {
1501
+ "schema": {
1502
+ "type": "array",
1503
+ "items": {
1504
+ "$ref": "#/components/schemas/ErrorModel"
1505
+ }
1506
+ }
1507
+ },
1508
+ "text/json": {
1509
+ "schema": {
1510
+ "type": "array",
1511
+ "items": {
1512
+ "$ref": "#/components/schemas/ErrorModel"
1513
+ }
1514
+ }
1515
+ }
1516
+ }
1517
+ }
1518
+ },
1519
+ "security": [
1520
+ {
1521
+ "Bearer": [ ]
1522
+ }
1523
+ ]
1524
+ }
1525
+ },
1526
+ "/Schedules/{scheduleID}/appointments/assign": {
1527
+ "get": {
1528
+ "tags": [
1529
+ "Schedules"
1530
+ ],
1531
+ "summary": "Возвращает список назначенных исполнителей для событий конкретного расписания.",
1532
+ "description": "Поддерживает фильтрацию по query-параметрам и постраничную выборку через заголовок `Range`.\r\n \r\n## Пример запроса:\r\n```text\r\nGET /Schedules/1/appointments/assign?assetID=501&userID=42&validFrom=2026-08-01T00:00:00Z&validTill=2026-08-31T23:59:59Z\r\nAuthorization: Bearer <token>\r\nRange: Offset=0; Fetch=50\r\n```\r\n \r\n## Пример успешного ответа (200):\r\n```json\r\n{\r\n \"1\": {\r\n \"appointments\": [\r\n {\r\n \"appointmentID\": 100,\r\n \"appointment\": \"2026-08-20T10:00:00Z\",\r\n \"assetAssigns\": [\r\n {\r\n \"assetID\": 501,\r\n \"userID\": 42\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n}\r\n```\r\n \r\n## Пример успешного ответа (206):\r\nТело ответа имеет тот же формат, что и для `200`, но содержит только часть диапазона.\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 204 — назначения по указанным фильтрам не найдены.\r\n- 400 — некорректные параметры фильтрации.",
1533
+ "parameters": [
1534
+ {
1535
+ "name": "scheduleID",
1536
+ "in": "path",
1537
+ "description": "Идентификатор расписания.",
1538
+ "required": true,
1539
+ "schema": {
1540
+ "type": "integer",
1541
+ "format": "int32"
1542
+ }
1543
+ },
1544
+ {
1545
+ "name": "X-Application-ID",
1546
+ "in": "header",
1547
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
1548
+ "schema": {
1549
+ "enum": [
1550
+ 1,
1551
+ 2,
1552
+ 3,
1553
+ 4,
1554
+ 5,
1555
+ 6
1556
+ ],
1557
+ "type": "integer",
1558
+ "format": "int32",
1559
+ "default": 3,
1560
+ "x-enumNames": [
1561
+ "EngineerMobile",
1562
+ "CustomerMobile",
1563
+ "MainWeb",
1564
+ "AdminWeb",
1565
+ "Api",
1566
+ "PlateWeb"
1567
+ ]
1568
+ }
1569
+ }
1570
+ ],
1571
+ "responses": {
1572
+ "401": {
1573
+ "description": "Пользователь не авторизован."
1574
+ },
1575
+ "403": {
1576
+ "description": "Недостаточно прав для выполнения операции."
1577
+ },
1578
+ "200": {
1579
+ "description": "Список назначений успешно получен.",
1580
+ "content": {
1581
+ "text/plain": {
1582
+ "schema": {
1583
+ "type": "object",
1584
+ "additionalProperties": {
1585
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignListResult"
1586
+ }
1587
+ }
1588
+ },
1589
+ "application/json": {
1590
+ "schema": {
1591
+ "type": "object",
1592
+ "additionalProperties": {
1593
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignListResult"
1594
+ }
1595
+ }
1596
+ },
1597
+ "text/json": {
1598
+ "schema": {
1599
+ "type": "object",
1600
+ "additionalProperties": {
1601
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignListResult"
1602
+ }
1603
+ }
1604
+ }
1605
+ }
1606
+ },
1607
+ "206": {
1608
+ "description": "Возвращена часть списка в пределах запрошенного диапазона.",
1609
+ "content": {
1610
+ "text/plain": {
1611
+ "schema": {
1612
+ "type": "object",
1613
+ "additionalProperties": {
1614
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignListResult"
1615
+ }
1616
+ }
1617
+ },
1618
+ "application/json": {
1619
+ "schema": {
1620
+ "type": "object",
1621
+ "additionalProperties": {
1622
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignListResult"
1623
+ }
1624
+ }
1625
+ },
1626
+ "text/json": {
1627
+ "schema": {
1628
+ "type": "object",
1629
+ "additionalProperties": {
1630
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignListResult"
1631
+ }
1632
+ }
1633
+ }
1634
+ }
1635
+ },
1636
+ "204": {
1637
+ "description": "Назначения не найдены."
1638
+ },
1639
+ "400": {
1640
+ "description": "Некорректные параметры запроса.",
1641
+ "content": {
1642
+ "text/plain": {
1643
+ "schema": {
1644
+ "type": "array",
1645
+ "items": {
1646
+ "$ref": "#/components/schemas/ErrorModel"
1647
+ }
1648
+ }
1649
+ },
1650
+ "application/json": {
1651
+ "schema": {
1652
+ "type": "array",
1653
+ "items": {
1654
+ "$ref": "#/components/schemas/ErrorModel"
1655
+ }
1656
+ }
1657
+ },
1658
+ "text/json": {
1659
+ "schema": {
1660
+ "type": "array",
1661
+ "items": {
1662
+ "$ref": "#/components/schemas/ErrorModel"
1663
+ }
1664
+ }
1665
+ }
1666
+ }
1667
+ }
1668
+ },
1669
+ "security": [
1670
+ {
1671
+ "Bearer": [ ]
1672
+ }
1673
+ ]
1674
+ }
1675
+ },
1676
+ "/Schedules/{scheduleID}/appointments/{appointmentID}/asset/{assetID}/assign/{userID}": {
1677
+ "post": {
1678
+ "tags": [
1679
+ "Schedules"
1680
+ ],
1681
+ "summary": "Назначает исполнителя на заявку события расписания.",
1682
+ "description": "## Пример запроса:\r\n```text\r\nPOST /Schedules/1/appointments/100/asset/501/assign/42\r\nAuthorization: Bearer <token>\r\n```\r\n \r\n## Пример успешного ответа (201):\r\n```json\r\n[\r\n {\r\n \"scheduleID\": 1,\r\n \"appointmentID\": 100,\r\n \"assetID\": 501,\r\n \"userID\": 42\r\n }\r\n]\r\n```\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 204 — назначение не было создано.\r\n- 409 — конфликт при назначении исполнителя.",
1683
+ "parameters": [
1684
+ {
1685
+ "name": "scheduleID",
1686
+ "in": "path",
1687
+ "description": "Идентификатор расписания.",
1688
+ "required": true,
1689
+ "schema": {
1690
+ "type": "integer",
1691
+ "format": "int32"
1692
+ }
1693
+ },
1694
+ {
1695
+ "name": "appointmentID",
1696
+ "in": "path",
1697
+ "description": "Идентификатор события расписания.",
1698
+ "required": true,
1699
+ "schema": {
1700
+ "type": "integer",
1701
+ "format": "int32"
1702
+ }
1703
+ },
1704
+ {
1705
+ "name": "assetID",
1706
+ "in": "path",
1707
+ "description": "Идентификатор объекта.",
1708
+ "required": true,
1709
+ "schema": {
1710
+ "type": "integer",
1711
+ "format": "int32"
1712
+ }
1713
+ },
1714
+ {
1715
+ "name": "userID",
1716
+ "in": "path",
1717
+ "description": "Идентификатор исполнителя.",
1718
+ "required": true,
1719
+ "schema": {
1720
+ "type": "integer",
1721
+ "format": "int32"
1722
+ }
1723
+ },
1724
+ {
1725
+ "name": "X-Application-ID",
1726
+ "in": "header",
1727
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
1728
+ "schema": {
1729
+ "enum": [
1730
+ 1,
1731
+ 2,
1732
+ 3,
1733
+ 4,
1734
+ 5,
1735
+ 6
1736
+ ],
1737
+ "type": "integer",
1738
+ "format": "int32",
1739
+ "default": 3,
1740
+ "x-enumNames": [
1741
+ "EngineerMobile",
1742
+ "CustomerMobile",
1743
+ "MainWeb",
1744
+ "AdminWeb",
1745
+ "Api",
1746
+ "PlateWeb"
1747
+ ]
1748
+ }
1749
+ }
1750
+ ],
1751
+ "responses": {
1752
+ "401": {
1753
+ "description": "Пользователь не авторизован."
1754
+ },
1755
+ "403": {
1756
+ "description": "Недостаточно прав для выполнения операции."
1757
+ },
1758
+ "201": {
1759
+ "description": "Исполнитель успешно назначен.",
1760
+ "content": {
1761
+ "text/plain": {
1762
+ "schema": {
1763
+ "type": "array",
1764
+ "items": {
1765
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignResult"
1766
+ }
1767
+ }
1768
+ },
1769
+ "application/json": {
1770
+ "schema": {
1771
+ "type": "array",
1772
+ "items": {
1773
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignResult"
1774
+ }
1775
+ }
1776
+ },
1777
+ "text/json": {
1778
+ "schema": {
1779
+ "type": "array",
1780
+ "items": {
1781
+ "$ref": "#/components/schemas/ScheduleAppointmentAssignResult"
1782
+ }
1783
+ }
1784
+ }
1785
+ }
1786
+ },
1787
+ "204": {
1788
+ "description": "Назначение не было создано."
1789
+ },
1790
+ "409": {
1791
+ "description": "Конфликт при назначении исполнителя.",
1792
+ "content": {
1793
+ "text/plain": {
1794
+ "schema": {
1795
+ "type": "array",
1796
+ "items": {
1797
+ "$ref": "#/components/schemas/ErrorModel"
1798
+ }
1799
+ }
1800
+ },
1801
+ "application/json": {
1802
+ "schema": {
1803
+ "type": "array",
1804
+ "items": {
1805
+ "$ref": "#/components/schemas/ErrorModel"
1806
+ }
1807
+ }
1808
+ },
1809
+ "text/json": {
1810
+ "schema": {
1811
+ "type": "array",
1812
+ "items": {
1813
+ "$ref": "#/components/schemas/ErrorModel"
1814
+ }
1815
+ }
1816
+ }
1817
+ }
1818
+ }
1819
+ },
1820
+ "security": [
1821
+ {
1822
+ "Bearer": [ ]
1823
+ }
1824
+ ]
1825
+ }
1826
+ },
1827
+ "/Schedules/{scheduleID}/appointments/{appointmentID}/asset/{assetID}": {
1828
+ "delete": {
1829
+ "tags": [
1830
+ "Schedules"
1831
+ ],
1832
+ "summary": "Удаляет все назначения исполнителей с заявки события расписания по объекту.",
1833
+ "description": "## Пример запроса:\r\n```text\r\nDELETE /Schedules/1/appointments/100/asset/501\r\nAuthorization: Bearer <token>\r\n```\r\n \r\n## Пример успешного ответа (202):\r\nТело ответа отсутствует.\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 409 — конфликт при удалении назначений.",
1834
+ "parameters": [
1835
+ {
1836
+ "name": "scheduleID",
1837
+ "in": "path",
1838
+ "description": "Идентификатор расписания.",
1839
+ "required": true,
1840
+ "schema": {
1841
+ "type": "integer",
1842
+ "format": "int32"
1843
+ }
1844
+ },
1845
+ {
1846
+ "name": "appointmentID",
1847
+ "in": "path",
1848
+ "description": "Идентификатор события расписания.",
1849
+ "required": true,
1850
+ "schema": {
1851
+ "type": "integer",
1852
+ "format": "int32"
1853
+ }
1854
+ },
1855
+ {
1856
+ "name": "assetID",
1857
+ "in": "path",
1858
+ "description": "Идентификатор объекта.",
1859
+ "required": true,
1860
+ "schema": {
1861
+ "type": "integer",
1862
+ "format": "int32"
1863
+ }
1864
+ },
1865
+ {
1866
+ "name": "X-Application-ID",
1867
+ "in": "header",
1868
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
1869
+ "schema": {
1870
+ "enum": [
1871
+ 1,
1872
+ 2,
1873
+ 3,
1874
+ 4,
1875
+ 5,
1876
+ 6
1877
+ ],
1878
+ "type": "integer",
1879
+ "format": "int32",
1880
+ "default": 3,
1881
+ "x-enumNames": [
1882
+ "EngineerMobile",
1883
+ "CustomerMobile",
1884
+ "MainWeb",
1885
+ "AdminWeb",
1886
+ "Api",
1887
+ "PlateWeb"
1888
+ ]
1889
+ }
1890
+ }
1891
+ ],
1892
+ "responses": {
1893
+ "401": {
1894
+ "description": "Пользователь не авторизован."
1895
+ },
1896
+ "403": {
1897
+ "description": "Недостаточно прав для выполнения операции."
1898
+ },
1899
+ "202": {
1900
+ "description": "Назначения успешно удалены."
1901
+ },
1902
+ "409": {
1903
+ "description": "Конфликт при удалении назначений.",
1904
+ "content": {
1905
+ "text/plain": {
1906
+ "schema": {
1907
+ "type": "array",
1908
+ "items": {
1909
+ "$ref": "#/components/schemas/ErrorModel"
1910
+ }
1911
+ }
1912
+ },
1913
+ "application/json": {
1914
+ "schema": {
1915
+ "type": "array",
1916
+ "items": {
1917
+ "$ref": "#/components/schemas/ErrorModel"
1918
+ }
1919
+ }
1920
+ },
1921
+ "text/json": {
1922
+ "schema": {
1923
+ "type": "array",
1924
+ "items": {
1925
+ "$ref": "#/components/schemas/ErrorModel"
1926
+ }
1927
+ }
1928
+ }
1929
+ }
1930
+ }
1931
+ },
1932
+ "security": [
1933
+ {
1934
+ "Bearer": [ ]
1935
+ }
1936
+ ]
1937
+ }
1938
+ },
1939
+ "/Schedules/{scheduleID}/appointments": {
1940
+ "get": {
1941
+ "tags": [
1942
+ "Schedules"
1943
+ ],
1944
+ "summary": "Возвращает список событий (точек срабатывания) для расписания.",
1945
+ "description": "Поддерживает постраничную выборку через заголовок `Range`.\r\n \r\n## Пример запроса:\r\n```text\r\nGET /Schedules/1/appointments?dateFrom=2026-08-01T00:00:00Z&dateTill=2026-08-31T23:59:59Z\r\nAuthorization: Bearer <token>\r\nRange: Offset=0; Fetch=50\r\n```\r\n \r\n## Пример успешного ответа (200):\r\n```json\r\n[\r\n {\r\n \"id\": 100,\r\n \"appointment\": \"2026-08-20T10:00:00Z\"\r\n },\r\n {\r\n \"id\": 101,\r\n \"appointment\": \"2026-08-21T10:00:00Z\"\r\n }\r\n]\r\n```\r\n \r\n## Пример успешного ответа (206):\r\nТело ответа имеет тот же формат, что и для `200`, но содержит только часть диапазона.\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 204 — события расписания по указанным параметрам не найдены.",
1946
+ "parameters": [
1947
+ {
1948
+ "name": "scheduleID",
1949
+ "in": "path",
1950
+ "description": "Идентификатор расписания.",
1951
+ "required": true,
1952
+ "schema": {
1953
+ "type": "integer",
1954
+ "format": "int32"
1955
+ }
1956
+ },
1957
+ {
1958
+ "name": "dateFrom",
1959
+ "in": "query",
1960
+ "description": "Начало периода фильтрации по дате события.",
1961
+ "schema": {
1962
+ "type": "string",
1963
+ "format": "date-time"
1964
+ }
1965
+ },
1966
+ {
1967
+ "name": "dateTill",
1968
+ "in": "query",
1969
+ "description": "Конец периода фильтрации по дате события.",
1970
+ "schema": {
1971
+ "type": "string",
1972
+ "format": "date-time"
1973
+ }
1974
+ },
1975
+ {
1976
+ "name": "X-Application-ID",
1977
+ "in": "header",
1978
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
1979
+ "schema": {
1980
+ "enum": [
1981
+ 1,
1982
+ 2,
1983
+ 3,
1984
+ 4,
1985
+ 5,
1986
+ 6
1987
+ ],
1988
+ "type": "integer",
1989
+ "format": "int32",
1990
+ "default": 3,
1991
+ "x-enumNames": [
1992
+ "EngineerMobile",
1993
+ "CustomerMobile",
1994
+ "MainWeb",
1995
+ "AdminWeb",
1996
+ "Api",
1997
+ "PlateWeb"
1998
+ ]
1999
+ }
2000
+ }
2001
+ ],
2002
+ "responses": {
2003
+ "401": {
2004
+ "description": "Пользователь не авторизован."
2005
+ },
2006
+ "403": {
2007
+ "description": "Недостаточно прав для выполнения операции."
2008
+ },
2009
+ "200": {
2010
+ "description": "Список событий расписания успешно получен.",
2011
+ "content": {
2012
+ "text/plain": {
2013
+ "schema": {
2014
+ "type": "array",
2015
+ "items": {
2016
+ "$ref": "#/components/schemas/RSAListResult"
2017
+ }
2018
+ }
2019
+ },
2020
+ "application/json": {
2021
+ "schema": {
2022
+ "type": "array",
2023
+ "items": {
2024
+ "$ref": "#/components/schemas/RSAListResult"
2025
+ }
2026
+ }
2027
+ },
2028
+ "text/json": {
2029
+ "schema": {
2030
+ "type": "array",
2031
+ "items": {
2032
+ "$ref": "#/components/schemas/RSAListResult"
2033
+ }
2034
+ }
2035
+ }
2036
+ }
2037
+ },
2038
+ "206": {
2039
+ "description": "Возвращена часть списка в пределах запрошенного диапазона.",
2040
+ "content": {
2041
+ "text/plain": {
2042
+ "schema": {
2043
+ "type": "array",
2044
+ "items": {
2045
+ "$ref": "#/components/schemas/RSAListResult"
2046
+ }
2047
+ }
2048
+ },
2049
+ "application/json": {
2050
+ "schema": {
2051
+ "type": "array",
2052
+ "items": {
2053
+ "$ref": "#/components/schemas/RSAListResult"
2054
+ }
2055
+ }
2056
+ },
2057
+ "text/json": {
2058
+ "schema": {
2059
+ "type": "array",
2060
+ "items": {
2061
+ "$ref": "#/components/schemas/RSAListResult"
2062
+ }
2063
+ }
2064
+ }
2065
+ }
2066
+ },
2067
+ "204": {
2068
+ "description": "События расписания не найдены."
2069
+ }
2070
+ },
2071
+ "security": [
2072
+ {
2073
+ "Bearer": [ ]
2074
+ }
2075
+ ]
2076
+ }
2077
+ },
2078
+ "/Schedules": {
2079
+ "post": {
2080
+ "tags": [
2081
+ "Schedules"
2082
+ ],
2083
+ "summary": "Создаёт или обновляет расписания для текущего тенанта.",
2084
+ "description": "## Пример запроса:\r\n```text\r\nPOST /Schedules\r\nAuthorization: Bearer <token>\r\nContent-Type: application/json\r\n \r\n[\r\n {\r\n \"frequencyTypeID\": 1,\r\n \"id\": null,\r\n \"options\": { \"interval\": 1, \"timeOfDay\": \"10:00:00\" }\r\n },\r\n {\r\n \"frequencyTypeID\": 2,\r\n \"id\": 5,\r\n \"options\": { \"interval\": 2, \"daysOfWeek\": [1, 3, 5] }\r\n }\r\n]\r\n```\r\n \r\n## Пример успешного ответа (200):\r\n```json\r\n[1, 5]\r\n```\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 400 — некорректные данные запроса.",
2085
+ "parameters": [
2086
+ {
2087
+ "name": "X-Application-ID",
2088
+ "in": "header",
2089
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
2090
+ "schema": {
2091
+ "enum": [
2092
+ 1,
2093
+ 2,
2094
+ 3,
2095
+ 4,
2096
+ 5,
2097
+ 6
2098
+ ],
2099
+ "type": "integer",
2100
+ "format": "int32",
2101
+ "default": 3,
2102
+ "x-enumNames": [
2103
+ "EngineerMobile",
2104
+ "CustomerMobile",
2105
+ "MainWeb",
2106
+ "AdminWeb",
2107
+ "Api",
2108
+ "PlateWeb"
2109
+ ]
2110
+ }
2111
+ }
2112
+ ],
2113
+ "requestBody": {
2114
+ "description": "Список данных для слияния расписаний.",
2115
+ "content": {
2116
+ "application/json-patch+json": {
2117
+ "schema": {
2118
+ "type": "array",
2119
+ "items": {
2120
+ "$ref": "#/components/schemas/ScheduleMergeData"
2121
+ }
2122
+ }
2123
+ },
2124
+ "application/json": {
2125
+ "schema": {
2126
+ "type": "array",
2127
+ "items": {
2128
+ "$ref": "#/components/schemas/ScheduleMergeData"
2129
+ }
2130
+ }
2131
+ },
2132
+ "text/json": {
2133
+ "schema": {
2134
+ "type": "array",
2135
+ "items": {
2136
+ "$ref": "#/components/schemas/ScheduleMergeData"
2137
+ }
2138
+ }
2139
+ },
2140
+ "application/*+json": {
2141
+ "schema": {
2142
+ "type": "array",
2143
+ "items": {
2144
+ "$ref": "#/components/schemas/ScheduleMergeData"
2145
+ }
2146
+ }
2147
+ }
2148
+ }
2149
+ },
2150
+ "responses": {
2151
+ "401": {
2152
+ "description": "Пользователь не авторизован."
2153
+ },
2154
+ "403": {
2155
+ "description": "Недостаточно прав для выполнения операции."
2156
+ },
2157
+ "400": {
2158
+ "description": "Некорректные данные запроса."
2159
+ },
2160
+ "200": {
2161
+ "description": "Расписания успешно созданы или обновлены.",
2162
+ "content": {
2163
+ "text/plain": {
2164
+ "schema": {
2165
+ "type": "array",
2166
+ "items": {
2167
+ "type": "integer",
2168
+ "format": "int32"
2169
+ }
2170
+ }
2171
+ },
2172
+ "application/json": {
2173
+ "schema": {
2174
+ "type": "array",
2175
+ "items": {
2176
+ "type": "integer",
2177
+ "format": "int32"
2178
+ }
2179
+ }
2180
+ },
2181
+ "text/json": {
2182
+ "schema": {
2183
+ "type": "array",
2184
+ "items": {
2185
+ "type": "integer",
2186
+ "format": "int32"
2187
+ }
2188
+ }
2189
+ }
2190
+ }
2191
+ }
2192
+ },
2193
+ "security": [
2194
+ {
2195
+ "Bearer": [ ]
2196
+ }
2197
+ ]
2198
+ },
2199
+ "get": {
2200
+ "tags": [
2201
+ "Schedules"
2202
+ ],
2203
+ "summary": "Возвращает список расписаний текущего тенанта.",
2204
+ "description": "Поддерживает постраничную выборку через заголовок `Range`.\r\n \r\n## Пример запроса:\r\n```text\r\nGET /Schedules\r\nAuthorization: Bearer <token>\r\nRange: Offset=0; Fetch=50\r\n```\r\n \r\n## Пример успешного ответа (200):\r\n```json\r\n{\r\n \"1\": {\r\n \"frequencyType\": {\r\n \"id\": 1,\r\n \"name\": \"Ежедневно\"\r\n }\r\n },\r\n \"2\": {\r\n \"frequencyType\": {\r\n \"id\": 2,\r\n \"name\": \"Еженедельно\"\r\n }\r\n }\r\n}\r\n```\r\n \r\n## Пример успешного ответа (206):\r\nТело ответа имеет тот же формат, что и для `200`, но содержит только часть диапазона.\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 204 — расписания не найдены.",
2205
+ "parameters": [
2206
+ {
2207
+ "name": "X-Application-ID",
2208
+ "in": "header",
2209
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
2210
+ "schema": {
2211
+ "enum": [
2212
+ 1,
2213
+ 2,
2214
+ 3,
2215
+ 4,
2216
+ 5,
2217
+ 6
2218
+ ],
2219
+ "type": "integer",
2220
+ "format": "int32",
2221
+ "default": 3,
2222
+ "x-enumNames": [
2223
+ "EngineerMobile",
2224
+ "CustomerMobile",
2225
+ "MainWeb",
2226
+ "AdminWeb",
2227
+ "Api",
2228
+ "PlateWeb"
2229
+ ]
2230
+ }
2231
+ }
2232
+ ],
2233
+ "responses": {
2234
+ "401": {
2235
+ "description": "Пользователь не авторизован."
2236
+ },
2237
+ "403": {
2238
+ "description": "Недостаточно прав для выполнения операции."
2239
+ },
2240
+ "200": {
2241
+ "description": "Список расписаний успешно получен.",
2242
+ "content": {
2243
+ "text/plain": {
2244
+ "schema": {
2245
+ "type": "object",
2246
+ "additionalProperties": {
2247
+ "$ref": "#/components/schemas/RSRListResult"
2248
+ }
2249
+ }
2250
+ },
2251
+ "application/json": {
2252
+ "schema": {
2253
+ "type": "object",
2254
+ "additionalProperties": {
2255
+ "$ref": "#/components/schemas/RSRListResult"
2256
+ }
2257
+ }
2258
+ },
2259
+ "text/json": {
2260
+ "schema": {
2261
+ "type": "object",
2262
+ "additionalProperties": {
2263
+ "$ref": "#/components/schemas/RSRListResult"
2264
+ }
2265
+ }
2266
+ }
2267
+ }
2268
+ },
2269
+ "206": {
2270
+ "description": "Возвращена часть списка в пределах запрошенного диапазона.",
2271
+ "content": {
2272
+ "text/plain": {
2273
+ "schema": {
2274
+ "type": "object",
2275
+ "additionalProperties": {
2276
+ "$ref": "#/components/schemas/RSRListResult"
2277
+ }
2278
+ }
2279
+ },
2280
+ "application/json": {
2281
+ "schema": {
2282
+ "type": "object",
2283
+ "additionalProperties": {
2284
+ "$ref": "#/components/schemas/RSRListResult"
2285
+ }
2286
+ }
2287
+ },
2288
+ "text/json": {
2289
+ "schema": {
2290
+ "type": "object",
2291
+ "additionalProperties": {
2292
+ "$ref": "#/components/schemas/RSRListResult"
2293
+ }
2294
+ }
2295
+ }
2296
+ }
2297
+ },
2298
+ "204": {
2299
+ "description": "Расписания не найдены."
2300
+ }
2301
+ },
2302
+ "security": [
2303
+ {
2304
+ "Bearer": [ ]
2305
+ }
2306
+ ]
2307
+ },
2308
+ "delete": {
2309
+ "tags": [
2310
+ "Schedules"
2311
+ ],
2312
+ "summary": "Удаляет расписания по списку идентификаторов.",
2313
+ "description": "## Пример запроса:\r\n```text\r\nDELETE /Schedules\r\nAuthorization: Bearer <token>\r\nContent-Type: application/json\r\n \r\n[1, 2, 3]\r\n```\r\n \r\n## Пример успешного ответа (202):\r\nТело ответа отсутствует.\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 400 — некорректные данные запроса.",
2314
+ "parameters": [
2315
+ {
2316
+ "name": "X-Application-ID",
2317
+ "in": "header",
2318
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
2319
+ "schema": {
2320
+ "enum": [
2321
+ 1,
2322
+ 2,
2323
+ 3,
2324
+ 4,
2325
+ 5,
2326
+ 6
2327
+ ],
2328
+ "type": "integer",
2329
+ "format": "int32",
2330
+ "default": 3,
2331
+ "x-enumNames": [
2332
+ "EngineerMobile",
2333
+ "CustomerMobile",
2334
+ "MainWeb",
2335
+ "AdminWeb",
2336
+ "Api",
2337
+ "PlateWeb"
2338
+ ]
2339
+ }
2340
+ }
2341
+ ],
2342
+ "requestBody": {
2343
+ "description": "Список идентификаторов расписаний.",
2344
+ "content": {
2345
+ "application/json-patch+json": {
2346
+ "schema": {
2347
+ "type": "array",
2348
+ "items": {
2349
+ "type": "integer",
2350
+ "format": "int32"
2351
+ }
2352
+ }
2353
+ },
2354
+ "application/json": {
2355
+ "schema": {
2356
+ "type": "array",
2357
+ "items": {
2358
+ "type": "integer",
2359
+ "format": "int32"
2360
+ }
2361
+ }
2362
+ },
2363
+ "text/json": {
2364
+ "schema": {
2365
+ "type": "array",
2366
+ "items": {
2367
+ "type": "integer",
2368
+ "format": "int32"
2369
+ }
2370
+ }
2371
+ },
2372
+ "application/*+json": {
2373
+ "schema": {
2374
+ "type": "array",
2375
+ "items": {
2376
+ "type": "integer",
2377
+ "format": "int32"
2378
+ }
2379
+ }
2380
+ }
2381
+ }
2382
+ },
2383
+ "responses": {
2384
+ "401": {
2385
+ "description": "Пользователь не авторизован."
2386
+ },
2387
+ "403": {
2388
+ "description": "Недостаточно прав для выполнения операции."
2389
+ },
2390
+ "400": {
2391
+ "description": "Некорректные данные запроса."
2392
+ },
2393
+ "202": {
2394
+ "description": "Расписания успешно удалены."
2395
+ }
2396
+ },
2397
+ "security": [
2398
+ {
2399
+ "Bearer": [ ]
2400
+ }
2401
+ ]
2402
+ }
2403
+ },
2404
+ "/Schedules/{id}": {
2405
+ "get": {
2406
+ "tags": [
2407
+ "Schedules"
2408
+ ],
2409
+ "summary": "Возвращает информацию о расписании по идентификатору.",
2410
+ "description": "## Пример запроса:\r\n```text\r\nGET /Schedules/1\r\nAuthorization: Bearer <token>\r\n```\r\n \r\n## Пример успешного ответа (200):\r\n```json\r\n{\r\n \"id\": 1,\r\n \"frequencyType\": {\r\n \"id\": 1,\r\n \"name\": \"Ежедневно\"\r\n },\r\n \"options\": {\r\n \"interval\": 1,\r\n \"timeOfDay\": \"10:00:00\"\r\n }\r\n}\r\n```\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 204 — расписание с указанным идентификатором не найдено.",
2411
+ "parameters": [
2412
+ {
2413
+ "name": "ID",
2414
+ "in": "path",
2415
+ "description": "Идентификатор расписания.",
2416
+ "required": true,
2417
+ "schema": {
2418
+ "type": "integer",
2419
+ "format": "int32"
2420
+ }
2421
+ },
2422
+ {
2423
+ "name": "X-Application-ID",
2424
+ "in": "header",
2425
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
2426
+ "schema": {
2427
+ "enum": [
2428
+ 1,
2429
+ 2,
2430
+ 3,
2431
+ 4,
2432
+ 5,
2433
+ 6
2434
+ ],
2435
+ "type": "integer",
2436
+ "format": "int32",
2437
+ "default": 3,
2438
+ "x-enumNames": [
2439
+ "EngineerMobile",
2440
+ "CustomerMobile",
2441
+ "MainWeb",
2442
+ "AdminWeb",
2443
+ "Api",
2444
+ "PlateWeb"
2445
+ ]
2446
+ }
2447
+ }
2448
+ ],
2449
+ "responses": {
2450
+ "401": {
2451
+ "description": "Пользователь не авторизован."
2452
+ },
2453
+ "403": {
2454
+ "description": "Недостаточно прав для выполнения операции."
2455
+ },
2456
+ "200": {
2457
+ "description": "Расписание успешно получено.",
2458
+ "content": {
2459
+ "text/plain": {
2460
+ "schema": {
2461
+ "$ref": "#/components/schemas/GetResult"
2462
+ }
2463
+ },
2464
+ "application/json": {
2465
+ "schema": {
2466
+ "$ref": "#/components/schemas/GetResult"
2467
+ }
2468
+ },
2469
+ "text/json": {
2470
+ "schema": {
2471
+ "$ref": "#/components/schemas/GetResult"
2472
+ }
2473
+ }
2474
+ }
2475
+ },
2476
+ "204": {
2477
+ "description": "Расписание не найдено."
2478
+ }
2479
+ },
2480
+ "security": [
2481
+ {
2482
+ "Bearer": [ ]
2483
+ }
2484
+ ]
2485
+ },
2486
+ "delete": {
2487
+ "tags": [
2488
+ "Schedules"
2489
+ ],
2490
+ "summary": "Удаляет расписание по идентификатору.",
2491
+ "description": "## Пример запроса:\r\n```text\r\nDELETE /Schedules/1\r\nAuthorization: Bearer <token>\r\n```\r\n \r\n## Пример успешного ответа (202):\r\nТело ответа отсутствует.\r\n \r\n## Негативные сценарии:\r\n- 401/403 — отсутствие или недостаточность прав доступа.\r\n- 400 — некорректные данные запроса.",
2492
+ "parameters": [
2493
+ {
2494
+ "name": "ID",
2495
+ "in": "path",
2496
+ "description": "Идентификатор расписания.",
2497
+ "required": true,
2498
+ "schema": {
2499
+ "type": "integer",
2500
+ "format": "int32"
2501
+ }
2502
+ },
2503
+ {
2504
+ "name": "X-Application-ID",
2505
+ "in": "header",
2506
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
2507
+ "schema": {
2508
+ "enum": [
2509
+ 1,
2510
+ 2,
2511
+ 3,
2512
+ 4,
2513
+ 5,
2514
+ 6
2515
+ ],
2516
+ "type": "integer",
2517
+ "format": "int32",
2518
+ "default": 3,
2519
+ "x-enumNames": [
2520
+ "EngineerMobile",
2521
+ "CustomerMobile",
2522
+ "MainWeb",
2523
+ "AdminWeb",
2524
+ "Api",
2525
+ "PlateWeb"
2526
+ ]
2527
+ }
2528
+ }
2529
+ ],
2530
+ "responses": {
2531
+ "401": {
2532
+ "description": "Пользователь не авторизован."
2533
+ },
2534
+ "403": {
2535
+ "description": "Недостаточно прав для выполнения операции."
2536
+ },
2537
+ "400": {
2538
+ "description": "Некорректные данные запроса."
2539
+ },
2540
+ "202": {
2541
+ "description": "Расписание успешно удалено."
2542
+ }
2543
+ },
2544
+ "security": [
2545
+ {
2546
+ "Bearer": [ ]
2547
+ }
2548
+ ]
2549
+ }
2550
+ }
2551
+ },
2552
+ "components": {
2553
+ "schemas": {
2554
+ "AppointmentResult": {
2555
+ "type": "object",
2556
+ "properties": {
2557
+ "appointmentID": {
2558
+ "type": "integer",
2559
+ "description": "Идентификатор точки срабатывания",
2560
+ "format": "int32",
2561
+ "example": 1001
2562
+ },
2563
+ "appointment": {
2564
+ "type": "string",
2565
+ "description": "Дата и время создания плановой заявки",
2566
+ "format": "date-time",
2567
+ "example": "2024-06-15T09:00:00"
2568
+ },
2569
+ "assetAssigns": {
2570
+ "type": "array",
2571
+ "items": {
2572
+ "$ref": "#/components/schemas/RSAAAssetAssignResult"
2573
+ },
2574
+ "description": "Список оборудования для точки расписание с исполнителями",
2575
+ "nullable": true
2576
+ }
2577
+ },
2578
+ "additionalProperties": false,
2579
+ "description": "Точки срабатывания с исполнителями"
2580
+ },
2581
+ "AppointmentResultOfAssetAssignResultV2": {
2582
+ "type": "object",
2583
+ "properties": {
2584
+ "scheduleID": {
2585
+ "type": "integer",
2586
+ "description": "Идентификатор расписания",
2587
+ "format": "int32",
2588
+ "example": 1
2589
+ },
2590
+ "appointmentID": {
2591
+ "type": "integer",
2592
+ "description": "Идентификатор точки срабатывания",
2593
+ "format": "int32",
2594
+ "example": 1001
2595
+ },
2596
+ "appointment": {
2597
+ "type": "string",
2598
+ "description": "Дата и время создания плановой заявки",
2599
+ "format": "date-time",
2600
+ "example": "2024-06-15T09:00:00"
2601
+ },
2602
+ "appointmentWith": {
2603
+ "type": "string",
2604
+ "description": "Дата С",
2605
+ "format": "date-time",
2606
+ "example": "2024-06-15T08:00:00"
2607
+ },
2608
+ "appointmentBy": {
2609
+ "type": "string",
2610
+ "description": "Дата По",
2611
+ "format": "date-time",
2612
+ "example": "2024-06-15T18:00:00"
2613
+ },
2614
+ "assetAssigns": {
2615
+ "type": "array",
2616
+ "items": {
2617
+ "$ref": "#/components/schemas/AssetAssignResultV2"
2618
+ },
2619
+ "description": "Список оборудования для точки расписание с исполнителями",
2620
+ "nullable": true
2621
+ }
2622
+ },
2623
+ "additionalProperties": false,
2624
+ "description": "Точки срабатывания с исполнителями"
2625
+ },
2626
+ "AppointmentResultOfRSTAssetAssignResult": {
2627
+ "type": "object",
2628
+ "properties": {
2629
+ "scheduleID": {
2630
+ "type": "integer",
2631
+ "description": "Идентификатор расписания",
2632
+ "format": "int32",
2633
+ "example": 1
2634
+ },
2635
+ "appointmentID": {
2636
+ "type": "integer",
2637
+ "description": "Идентификатор точки срабатывания",
2638
+ "format": "int32",
2639
+ "example": 1001
2640
+ },
2641
+ "appointment": {
2642
+ "type": "string",
2643
+ "description": "Дата и время создания плановой заявки",
2644
+ "format": "date-time",
2645
+ "example": "2024-06-15T09:00:00"
2646
+ },
2647
+ "appointmentWith": {
2648
+ "type": "string",
2649
+ "description": "Дата С",
2650
+ "format": "date-time",
2651
+ "example": "2024-06-15T08:00:00"
2652
+ },
2653
+ "appointmentBy": {
2654
+ "type": "string",
2655
+ "description": "Дата По",
2656
+ "format": "date-time",
2657
+ "example": "2024-06-15T18:00:00"
2658
+ },
2659
+ "assetAssigns": {
2660
+ "type": "array",
2661
+ "items": {
2662
+ "$ref": "#/components/schemas/RSTAssetAssignResult"
2663
+ },
2664
+ "description": "Список оборудования для точки расписание с исполнителями",
2665
+ "nullable": true
2666
+ }
2667
+ },
2668
+ "additionalProperties": false,
2669
+ "description": "Точки срабатывания с исполнителями"
2670
+ },
2671
+ "AssetAssignResultV2": {
2672
+ "type": "object",
2673
+ "properties": {
2674
+ "assetID": {
2675
+ "type": "integer",
2676
+ "description": "Идентификатор оборудования, по которому будет создана заявка",
2677
+ "format": "int32",
2678
+ "example": 501
2679
+ },
2680
+ "assetName": {
2681
+ "type": "string",
2682
+ "description": "Наименование оборудования, по которому будет создана заявка",
2683
+ "nullable": true,
2684
+ "example": "Насосная станция №1"
2685
+ },
2686
+ "sortOrder": {
2687
+ "type": "integer",
2688
+ "description": "Индекс сортировки",
2689
+ "format": "int32",
2690
+ "example": 1
2691
+ },
2692
+ "users": {
2693
+ "type": "array",
2694
+ "items": {
2695
+ "type": "integer",
2696
+ "format": "int32"
2697
+ },
2698
+ "description": "Список идентификаторов исполнителей по заявке в конкретной точке по этому оборудованию",
2699
+ "nullable": true
2700
+ },
2701
+ "company": {
2702
+ "$ref": "#/components/schemas/IdNameDeletedResultOfShort"
2703
+ },
2704
+ "location": {
2705
+ "$ref": "#/components/schemas/LocationResult"
2706
+ }
2707
+ },
2708
+ "additionalProperties": false,
2709
+ "description": "Оборудование, по которому будет создана заявка"
2710
+ },
2711
+ "CountResult": {
2712
+ "type": "object",
2713
+ "properties": {
2714
+ "countTasksForDay": {
2715
+ "type": "integer",
2716
+ "description": "Общее количество заявок на дату",
2717
+ "format": "int32",
2718
+ "example": 12
2719
+ },
2720
+ "countTasksForUsers": {
2721
+ "type": "array",
2722
+ "items": {
2723
+ "$ref": "#/components/schemas/ListCountResult"
2724
+ },
2725
+ "description": "Количество заявок на дату по исполнителям",
2726
+ "nullable": true
2727
+ }
2728
+ },
2729
+ "additionalProperties": false,
2730
+ "description": "Плановые заявки"
2731
+ },
2732
+ "ErrorModel": {
2733
+ "type": "object",
2734
+ "properties": {
2735
+ "traceIdentifier": {
2736
+ "type": "string",
2737
+ "nullable": true
2738
+ },
2739
+ "code": {
2740
+ "type": "string",
2741
+ "nullable": true
2742
+ },
2743
+ "message": {
2744
+ "type": "string",
2745
+ "nullable": true
2746
+ },
2747
+ "arguments": {
2748
+ "type": "object",
2749
+ "additionalProperties": {
2750
+ "type": "string",
2751
+ "nullable": true
2752
+ },
2753
+ "nullable": true
2754
+ }
2755
+ },
2756
+ "additionalProperties": false
2757
+ },
2758
+ "GetResult": {
2759
+ "type": "object",
2760
+ "properties": {
2761
+ "frequencyType": {
2762
+ "$ref": "#/components/schemas/IdNameResultOfByte"
2763
+ },
2764
+ "id": {
2765
+ "type": "integer",
2766
+ "description": "Идентификатор расписания",
2767
+ "format": "int32",
2768
+ "example": 1
2769
+ },
2770
+ "options": {
2771
+ "type": "string",
2772
+ "description": "Настройки срабатывания расписания в формате JSON",
2773
+ "nullable": true,
2774
+ "example": "{\"interval\":1,\"daysOfWeek\":[1,3,5]}"
2775
+ }
2776
+ },
2777
+ "additionalProperties": false,
2778
+ "description": "Schedule"
2779
+ },
2780
+ "IdCodeNameResultOfByte": {
2781
+ "type": "object",
2782
+ "properties": {
2783
+ "id": {
2784
+ "type": "integer",
2785
+ "format": "int32"
2786
+ },
2787
+ "code": {
2788
+ "type": "string",
2789
+ "nullable": true
2790
+ },
2791
+ "name": {
2792
+ "type": "string",
2793
+ "nullable": true
2794
+ }
2795
+ },
2796
+ "additionalProperties": false
2797
+ },
2798
+ "IdNameDeletedResultOfShort": {
2799
+ "type": "object",
2800
+ "properties": {
2801
+ "id": {
2802
+ "type": "integer",
2803
+ "format": "int32"
2804
+ },
2805
+ "name": {
2806
+ "type": "string",
2807
+ "nullable": true
2808
+ },
2809
+ "deleted": {
2810
+ "type": "string",
2811
+ "format": "date-time",
2812
+ "nullable": true
2813
+ }
2814
+ },
2815
+ "additionalProperties": false
2816
+ },
2817
+ "IdNameResultOfByte": {
2818
+ "type": "object",
2819
+ "properties": {
2820
+ "id": {
2821
+ "type": "integer",
2822
+ "format": "int32"
2823
+ },
2824
+ "name": {
2825
+ "type": "string",
2826
+ "nullable": true
2827
+ }
2828
+ },
2829
+ "additionalProperties": false
2830
+ },
2831
+ "ListCountResult": {
2832
+ "type": "object",
2833
+ "properties": {
2834
+ "userID": {
2835
+ "type": "integer",
2836
+ "description": "Идентификатор исполнителя назначенной заявки (0 — для неназначенных)",
2837
+ "format": "int32",
2838
+ "example": 42
2839
+ },
2840
+ "countWithAssign": {
2841
+ "type": "integer",
2842
+ "description": "Количество назначенных заявок на дату",
2843
+ "format": "int32",
2844
+ "example": 5
2845
+ },
2846
+ "countWithoutAssign": {
2847
+ "type": "integer",
2848
+ "description": "Количество неназначенных заявок на дату",
2849
+ "format": "int32",
2850
+ "example": 3
2851
+ }
2852
+ },
2853
+ "additionalProperties": false,
2854
+ "description": "Плановые заявки"
2855
+ },
2856
+ "LocationResult": {
2857
+ "type": "object",
2858
+ "properties": {
2859
+ "id": {
2860
+ "type": "integer",
2861
+ "format": "int32"
2862
+ },
2863
+ "address": {
2864
+ "type": "string",
2865
+ "description": "Адрес объекта",
2866
+ "nullable": true,
2867
+ "example": "г. Москва, ул. Примерная, д. 1"
2868
+ },
2869
+ "coordinate": {
2870
+ "type": "string",
2871
+ "description": "Координаты объекта в формате LAT:LNG",
2872
+ "nullable": true,
2873
+ "example": "55.755826:37.617300"
2874
+ },
2875
+ "description": {
2876
+ "type": "string",
2877
+ "description": "Описание локации",
2878
+ "nullable": true,
2879
+ "example": "Производственный цех"
2880
+ },
2881
+ "deleted": {
2882
+ "type": "string",
2883
+ "description": "Метка времени (UTC), когда локация была удалена",
2884
+ "format": "date-time",
2885
+ "nullable": true,
2886
+ "example": "2024-01-15T12:00:00"
2887
+ }
2888
+ },
2889
+ "additionalProperties": false,
2890
+ "description": "Данные локации"
2891
+ },
2892
+ "ProblemDetails": {
2893
+ "type": "object",
2894
+ "properties": {
2895
+ "type": {
2896
+ "type": "string",
2897
+ "nullable": true
2898
+ },
2899
+ "title": {
2900
+ "type": "string",
2901
+ "nullable": true
2902
+ },
2903
+ "status": {
2904
+ "type": "integer",
2905
+ "format": "int32",
2906
+ "nullable": true
2907
+ },
2908
+ "detail": {
2909
+ "type": "string",
2910
+ "nullable": true
2911
+ },
2912
+ "instance": {
2913
+ "type": "string",
2914
+ "nullable": true
2915
+ }
2916
+ },
2917
+ "additionalProperties": { }
2918
+ },
2919
+ "RSAAAssetAssignResult": {
2920
+ "type": "object",
2921
+ "properties": {
2922
+ "assetID": {
2923
+ "type": "integer",
2924
+ "description": "Идентификатор оборудования, по которому будет создана заявка",
2925
+ "format": "int32",
2926
+ "example": 501
2927
+ },
2928
+ "userID": {
2929
+ "type": "integer",
2930
+ "description": "Идентификатор исполнителя по заявке в конкретной точке по этому оборудованию",
2931
+ "format": "int32",
2932
+ "example": 42
2933
+ }
2934
+ },
2935
+ "additionalProperties": false,
2936
+ "description": "Оборудование, по которому будет создана заявка"
2937
+ },
2938
+ "RSAListResult": {
2939
+ "type": "object",
2940
+ "properties": {
2941
+ "id": {
2942
+ "type": "integer",
2943
+ "format": "int32"
2944
+ },
2945
+ "appointment": {
2946
+ "type": "string",
2947
+ "description": "Дата и время точки расписания",
2948
+ "format": "date-time",
2949
+ "example": "2024-06-15T09:00:00"
2950
+ }
2951
+ },
2952
+ "additionalProperties": false,
2953
+ "description": "Точки расписания"
2954
+ },
2955
+ "RSRListResult": {
2956
+ "type": "object",
2957
+ "properties": {
2958
+ "frequencyType": {
2959
+ "$ref": "#/components/schemas/IdNameResultOfByte"
2960
+ }
2961
+ },
2962
+ "additionalProperties": false,
2963
+ "description": "Schedule"
2964
+ },
2965
+ "RSTAssetAssignResult": {
2966
+ "type": "object",
2967
+ "properties": {
2968
+ "assetID": {
2969
+ "type": "integer",
2970
+ "description": "Идентификатор оборудования, по которому будет создана заявка",
2971
+ "format": "int32",
2972
+ "example": 501
2973
+ },
2974
+ "assetName": {
2975
+ "type": "string",
2976
+ "description": "Наименование оборудования, по которому будет создана заявка",
2977
+ "nullable": true,
2978
+ "example": "Насосная станция №1"
2979
+ },
2980
+ "sortOrder": {
2981
+ "type": "integer",
2982
+ "description": "Индекс сортировки",
2983
+ "format": "int32",
2984
+ "example": 1
2985
+ },
2986
+ "userID": {
2987
+ "type": "integer",
2988
+ "description": "Идентификатор исполнителя по заявке в конкретной точке по этому оборудованию",
2989
+ "format": "int32",
2990
+ "nullable": true,
2991
+ "example": 42
2992
+ }
2993
+ },
2994
+ "additionalProperties": false,
2995
+ "description": "Оборудование, по которому будет создана заявка"
2996
+ },
2997
+ "RSTListResult": {
2998
+ "type": "object",
2999
+ "properties": {
3000
+ "taskTemplateID": {
3001
+ "type": "string",
3002
+ "description": "Идентификатор плановой заявки",
3003
+ "nullable": true,
3004
+ "example": "12345"
3005
+ },
3006
+ "name": {
3007
+ "type": "string",
3008
+ "description": "Наименование плановой заявки",
3009
+ "nullable": true,
3010
+ "example": "Ежемесячное ТО оборудования"
3011
+ },
3012
+ "description": {
3013
+ "type": "string",
3014
+ "description": "Описание плановой заявки",
3015
+ "nullable": true,
3016
+ "example": "Плановое техническое обслуживание насосного оборудования"
3017
+ },
3018
+ "notes": {
3019
+ "type": "string",
3020
+ "description": "Замечания к плановой заявки",
3021
+ "nullable": true,
3022
+ "example": "Проверить состояние фильтров и уплотнений"
3023
+ },
3024
+ "sortOrder": {
3025
+ "type": "integer",
3026
+ "description": "Индекс сортировки",
3027
+ "format": "int32",
3028
+ "example": 1
3029
+ }
3030
+ },
3031
+ "additionalProperties": false,
3032
+ "description": "Плановые заявки"
3033
+ },
3034
+ "ScheduleAppointmentAssignDeleteData": {
3035
+ "type": "object",
3036
+ "properties": {
3037
+ "scheduleID": {
3038
+ "maximum": 32767,
3039
+ "minimum": 1,
3040
+ "type": "integer",
3041
+ "format": "int32"
3042
+ },
3043
+ "appointmentID": {
3044
+ "maximum": 2147483647,
3045
+ "minimum": 1,
3046
+ "type": "integer",
3047
+ "format": "int32"
3048
+ },
3049
+ "assetID": {
3050
+ "maximum": 2147483647,
3051
+ "minimum": 1,
3052
+ "type": "integer",
3053
+ "format": "int32"
3054
+ }
3055
+ },
3056
+ "additionalProperties": false
3057
+ },
3058
+ "ScheduleAppointmentAssignListResult": {
3059
+ "type": "object",
3060
+ "properties": {
3061
+ "appointments": {
3062
+ "type": "array",
3063
+ "items": {
3064
+ "$ref": "#/components/schemas/AppointmentResult"
3065
+ },
3066
+ "description": "Список точек срабатывания с исполнителями",
3067
+ "nullable": true
3068
+ }
3069
+ },
3070
+ "additionalProperties": false,
3071
+ "description": "Результат получения списка назначенных исполнителей"
3072
+ },
3073
+ "ScheduleAppointmentAssignMergeData": {
3074
+ "type": "object",
3075
+ "properties": {
3076
+ "scheduleID": {
3077
+ "maximum": 32767,
3078
+ "minimum": 1,
3079
+ "type": "integer",
3080
+ "format": "int32"
3081
+ },
3082
+ "appointmentID": {
3083
+ "maximum": 2147483647,
3084
+ "minimum": 1,
3085
+ "type": "integer",
3086
+ "format": "int32"
3087
+ },
3088
+ "assetID": {
3089
+ "maximum": 2147483647,
3090
+ "minimum": 1,
3091
+ "type": "integer",
3092
+ "format": "int32"
3093
+ },
3094
+ "userID": {
3095
+ "maximum": 2147483647,
3096
+ "minimum": 1,
3097
+ "type": "integer",
3098
+ "format": "int32"
3099
+ }
3100
+ },
3101
+ "additionalProperties": false
3102
+ },
3103
+ "ScheduleAppointmentAssignResult": {
3104
+ "type": "object",
3105
+ "properties": {
3106
+ "scheduleID": {
3107
+ "type": "integer",
3108
+ "description": "Идентификатор расписания",
3109
+ "format": "int32",
3110
+ "example": 1
3111
+ },
3112
+ "appointmentID": {
3113
+ "type": "integer",
3114
+ "description": "Идентификатор точки срабатывания",
3115
+ "format": "int32",
3116
+ "example": 1001
3117
+ },
3118
+ "assetID": {
3119
+ "type": "integer",
3120
+ "description": "Идентификатор объекта точки срабатывания",
3121
+ "format": "int32",
3122
+ "example": 501
3123
+ },
3124
+ "userID": {
3125
+ "type": "integer",
3126
+ "description": "Идентификатор назначенного исполнителя",
3127
+ "format": "int32",
3128
+ "example": 42
3129
+ }
3130
+ },
3131
+ "additionalProperties": false,
3132
+ "description": "Результат получения списка назначенных исполнителей"
3133
+ },
3134
+ "ScheduleMergeData": {
3135
+ "type": "object",
3136
+ "properties": {
3137
+ "frequencyTypeID": {
3138
+ "type": "integer",
3139
+ "description": "Идентификатор частоты повторения",
3140
+ "format": "int32",
3141
+ "example": 1
3142
+ },
3143
+ "id": {
3144
+ "type": "integer",
3145
+ "description": "Идентификатор расписания",
3146
+ "format": "int32",
3147
+ "nullable": true,
3148
+ "example": 1
3149
+ },
3150
+ "options": {
3151
+ "type": "string",
3152
+ "description": "Информация о расписании в формате JSON",
3153
+ "nullable": true,
3154
+ "example": "{\"interval\":1,\"daysOfWeek\":[1,3,5]}"
3155
+ }
3156
+ },
3157
+ "additionalProperties": false,
3158
+ "description": "Данные для слияния расписаний тенанта"
3159
+ }
3160
+ },
3161
+ "securitySchemes": {
3162
+ "Bearer": {
3163
+ "type": "http",
3164
+ "description": "Введите токен для авторизации",
3165
+ "scheme": "Bearer",
3166
+ "bearerFormat": "JWT"
3167
+ }
3168
+ }
3169
+ },
3170
+ "tags": [
3171
+ {
3172
+ "name": "FrequencyTypes",
3173
+ "description": "Контроллер по управлению типами повторений расписаний"
3174
+ },
3175
+ {
3176
+ "name": "ScheduledTasks",
3177
+ "description": "Контроллер по работе с плановыми заявками, которые будут созданы в будущем"
3178
+ },
3179
+ {
3180
+ "name": "Schedules",
3181
+ "description": "Контроллер по управлению исполнителями для событий расписаний"
3182
+ },
3183
+ {
3184
+ "name": "FrequencyTypes",
3185
+ "description": "Контроллер по управлению типами повторений расписаний"
3186
+ },
3187
+ {
3188
+ "name": "ScheduledTasks",
3189
+ "description": "Контроллер по работе с плановыми заявками, которые будут созданы в будущем"
3190
+ },
3191
+ {
3192
+ "name": "Schedules",
3193
+ "description": "Контроллер по управлению исполнителями для событий расписаний"
3194
+ }
3195
+ ]
3196
+ }