@hubex/mcp 0.9.20260922 → 0.9.20260925

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.
@@ -0,0 +1,1479 @@
1
+ {
2
+ "openapi": "3.0.1",
3
+ "info": {
4
+ "title": "API for IMPORT in HubEx",
5
+ "description": "Service offers application programming interface for import data",
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": "/IMPORT"
15
+ }
16
+ ],
17
+ "paths": {
18
+ "/Assets": {
19
+ "post": {
20
+ "tags": [
21
+ "Assets"
22
+ ],
23
+ "summary": "Импорт объектов и оборудования из Excel-файла",
24
+ "description": "## Пример запроса:\r\n`POST /Assets`\r\n \r\nContent-Type: `multipart/form-data`\r\n \r\nПоле формы: `File` — Excel-файл (.xlsx) с листом, имя которого зависит от `Accept-Language`\r\n(ru: `Объекты и оборудование`, en: `Assets`).\r\n \r\n## Пример успешного ответа (202):\r\nТело ответа отсутствует. Импорт объектов принят в обработку.\r\n \r\n## Пример ошибки валидации файла (409):\r\nВозвращается Excel-файл с теми же данными и комментариями в ячейках с ошибками.\r\nВ заголовке ответа присутствует `X-Application-Errors: InvalidData`.\r\n \r\n## Пример ошибки (409):\r\n```json\r\n[\r\n {\r\n \"traceIdentifier\": \"00-abc123\",\r\n \"code\": \"InvalidData\",\r\n \"message\": \"Загружен неверный файл\"\r\n }\r\n]\r\n```\r\n## Негативные сценарии:\r\n- 409 Conflict: в файле есть ошибки валидации строк/ячеек — возвращается Excel с комментариями\r\n (`Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`,\r\n заголовок `X-Application-Errors: InvalidData`).\r\n- 409 Conflict: отсутствует лист с ожидаемым именем (`WrongFile`) или лист пустой (`EmptyFile`).\r\n Имя листа зависит от `Accept-Language` (ru: `Объекты и оборудование`, en: `Assets`).\r\n- 409 Conflict: файл создан в неподдерживаемом приложении (например, MyOffice) — `UnsupportedFileFormat`.\r\n- Отсутствует обязательное поле формы `File` или тело запроса некорректно —\r\n обрабатывается model binding / global exception handling (не 409 Conflict).\r\n- 401 Unauthorized: отсутствует или некорректен Bearer-токен.\r\n- 403 Forbidden: недостаточно прав `AssetsImport`.",
25
+ "parameters": [
26
+ {
27
+ "name": "X-Application-ID",
28
+ "in": "header",
29
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
30
+ "schema": {
31
+ "enum": [
32
+ 1,
33
+ 2,
34
+ 3,
35
+ 4,
36
+ 5,
37
+ 6
38
+ ],
39
+ "type": "integer",
40
+ "format": "int32",
41
+ "default": 3,
42
+ "x-enumNames": [
43
+ "EngineerMobile",
44
+ "CustomerMobile",
45
+ "MainWeb",
46
+ "AdminWeb",
47
+ "Api",
48
+ "PlateWeb"
49
+ ]
50
+ }
51
+ }
52
+ ],
53
+ "requestBody": {
54
+ "content": {
55
+ "multipart/form-data": {
56
+ "schema": {
57
+ "required": [
58
+ "File"
59
+ ],
60
+ "type": "object",
61
+ "properties": {
62
+ "Description": {
63
+ "type": "string"
64
+ },
65
+ "IsPublic": {
66
+ "type": "boolean"
67
+ },
68
+ "IsIgnorePossibleDuplication": {
69
+ "type": "boolean"
70
+ },
71
+ "Roles": {
72
+ "type": "array",
73
+ "items": {
74
+ "type": "integer",
75
+ "format": "int32"
76
+ }
77
+ },
78
+ "Coordinate": {
79
+ "type": "string"
80
+ },
81
+ "File": {
82
+ "type": "string",
83
+ "format": "binary"
84
+ },
85
+ "FileName": {
86
+ "type": "string"
87
+ },
88
+ "ContentType": {
89
+ "type": "string"
90
+ },
91
+ "Uid": {
92
+ "type": "string",
93
+ "format": "uuid"
94
+ },
95
+ "ContentStream.CanRead": {
96
+ "type": "boolean"
97
+ },
98
+ "ContentStream.CanSeek": {
99
+ "type": "boolean"
100
+ },
101
+ "ContentStream.CanWrite": {
102
+ "type": "boolean"
103
+ },
104
+ "ContentStream.Capacity": {
105
+ "type": "integer",
106
+ "format": "int32"
107
+ },
108
+ "ContentStream.Length": {
109
+ "type": "integer",
110
+ "format": "int64"
111
+ },
112
+ "ContentStream.Position": {
113
+ "type": "integer",
114
+ "format": "int64"
115
+ },
116
+ "ContentStream.CanTimeout": {
117
+ "type": "boolean"
118
+ },
119
+ "ContentStream.ReadTimeout": {
120
+ "type": "integer",
121
+ "format": "int32"
122
+ },
123
+ "ContentStream.WriteTimeout": {
124
+ "type": "integer",
125
+ "format": "int32"
126
+ },
127
+ "Md5Hash": {
128
+ "type": "string"
129
+ },
130
+ "ContentLength": {
131
+ "type": "integer",
132
+ "format": "int32"
133
+ }
134
+ }
135
+ },
136
+ "encoding": {
137
+ "Description": {
138
+ "style": "form"
139
+ },
140
+ "IsPublic": {
141
+ "style": "form"
142
+ },
143
+ "IsIgnorePossibleDuplication": {
144
+ "style": "form"
145
+ },
146
+ "Roles": {
147
+ "style": "form"
148
+ },
149
+ "Coordinate": {
150
+ "style": "form"
151
+ },
152
+ "File": {
153
+ "style": "form"
154
+ },
155
+ "FileName": {
156
+ "style": "form"
157
+ },
158
+ "ContentType": {
159
+ "style": "form"
160
+ },
161
+ "Uid": {
162
+ "style": "form"
163
+ },
164
+ "ContentStream.CanRead": {
165
+ "style": "form"
166
+ },
167
+ "ContentStream.CanSeek": {
168
+ "style": "form"
169
+ },
170
+ "ContentStream.CanWrite": {
171
+ "style": "form"
172
+ },
173
+ "ContentStream.Capacity": {
174
+ "style": "form"
175
+ },
176
+ "ContentStream.Length": {
177
+ "style": "form"
178
+ },
179
+ "ContentStream.Position": {
180
+ "style": "form"
181
+ },
182
+ "ContentStream.CanTimeout": {
183
+ "style": "form"
184
+ },
185
+ "ContentStream.ReadTimeout": {
186
+ "style": "form"
187
+ },
188
+ "ContentStream.WriteTimeout": {
189
+ "style": "form"
190
+ },
191
+ "Md5Hash": {
192
+ "style": "form"
193
+ },
194
+ "ContentLength": {
195
+ "style": "form"
196
+ }
197
+ }
198
+ }
199
+ }
200
+ },
201
+ "responses": {
202
+ "202": {
203
+ "description": "Импорт объектов успешно принят в обработку."
204
+ },
205
+ "401": {
206
+ "description": "Отсутствует или некорректен Bearer-токен."
207
+ },
208
+ "403": {
209
+ "description": "Недостаточно прав для импорта объектов."
210
+ },
211
+ "409": {
212
+ "description": "Ошибка валидации файла или бизнес-конфликт.\r\nПри ошибках строк — Excel-файл с комментариями и заголовком `X-Application-Errors: InvalidData`;\r\nпри прочих конфликтах — JSON System.Collections.Generic.List`1.",
213
+ "content": {
214
+ "text/plain": {
215
+ "schema": {
216
+ "type": "array",
217
+ "items": {
218
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
219
+ }
220
+ }
221
+ },
222
+ "application/json": {
223
+ "schema": {
224
+ "type": "array",
225
+ "items": {
226
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
227
+ }
228
+ }
229
+ },
230
+ "text/json": {
231
+ "schema": {
232
+ "type": "array",
233
+ "items": {
234
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
235
+ }
236
+ }
237
+ }
238
+ }
239
+ }
240
+ },
241
+ "security": [
242
+ {
243
+ "Bearer": [ ]
244
+ }
245
+ ]
246
+ }
247
+ },
248
+ "/Companies": {
249
+ "post": {
250
+ "tags": [
251
+ "Companies"
252
+ ],
253
+ "summary": "Импорт компаний из Excel-файла",
254
+ "description": "## Пример запроса:\r\n`POST /Companies`\r\n \r\nContent-Type: `multipart/form-data`\r\n \r\nПоле формы: `File` — Excel-файл (.xlsx) с листом, имя которого зависит от `Accept-Language`\r\n(ru: `Компании`, en: `Companies`).\r\n \r\n## Пример успешного ответа (202):\r\nТело ответа отсутствует. Импорт компаний принят в обработку.\r\n \r\n## Пример ошибки валидации файла (409):\r\nВозвращается Excel-файл с теми же данными и комментариями в ячейках с ошибками.\r\nВ заголовке ответа присутствует `X-Application-Errors: InvalidData`.\r\n \r\n## Пример ошибки (409):\r\n```json\r\n[\r\n {\r\n \"traceIdentifier\": \"00-abc123\",\r\n \"code\": \"InvalidData\",\r\n \"message\": \"Загружен неверный файл\"\r\n }\r\n]\r\n```\r\n## Негативные сценарии:\r\n- 409 Conflict: в файле есть ошибки валидации строк/ячеек — возвращается Excel с комментариями\r\n (`Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`,\r\n заголовок `X-Application-Errors: InvalidData`).\r\n- 409 Conflict: отсутствует лист с ожидаемым именем (`WrongFile`) или лист пустой (`EmptyFile`).\r\n Имя листа зависит от `Accept-Language` (ru: `Компании`, en: `Companies`).\r\n- 409 Conflict: файл создан в неподдерживаемом приложении (например, MyOffice) — `UnsupportedFileFormat`.\r\n- Отсутствует обязательное поле формы `File` или тело запроса некорректно —\r\n обрабатывается model binding / global exception handling (не 409 Conflict).\r\n- 401 Unauthorized: отсутствует или некорректен Bearer-токен.\r\n- 403 Forbidden: недостаточно прав `CompaniesImport`.",
255
+ "parameters": [
256
+ {
257
+ "name": "X-Application-ID",
258
+ "in": "header",
259
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
260
+ "schema": {
261
+ "enum": [
262
+ 1,
263
+ 2,
264
+ 3,
265
+ 4,
266
+ 5,
267
+ 6
268
+ ],
269
+ "type": "integer",
270
+ "format": "int32",
271
+ "default": 3,
272
+ "x-enumNames": [
273
+ "EngineerMobile",
274
+ "CustomerMobile",
275
+ "MainWeb",
276
+ "AdminWeb",
277
+ "Api",
278
+ "PlateWeb"
279
+ ]
280
+ }
281
+ }
282
+ ],
283
+ "requestBody": {
284
+ "content": {
285
+ "multipart/form-data": {
286
+ "schema": {
287
+ "required": [
288
+ "File"
289
+ ],
290
+ "type": "object",
291
+ "properties": {
292
+ "Description": {
293
+ "type": "string"
294
+ },
295
+ "IsPublic": {
296
+ "type": "boolean"
297
+ },
298
+ "IsIgnorePossibleDuplication": {
299
+ "type": "boolean"
300
+ },
301
+ "Roles": {
302
+ "type": "array",
303
+ "items": {
304
+ "type": "integer",
305
+ "format": "int32"
306
+ }
307
+ },
308
+ "Coordinate": {
309
+ "type": "string"
310
+ },
311
+ "File": {
312
+ "type": "string",
313
+ "format": "binary"
314
+ },
315
+ "FileName": {
316
+ "type": "string"
317
+ },
318
+ "ContentType": {
319
+ "type": "string"
320
+ },
321
+ "Uid": {
322
+ "type": "string",
323
+ "format": "uuid"
324
+ },
325
+ "ContentStream.CanRead": {
326
+ "type": "boolean"
327
+ },
328
+ "ContentStream.CanSeek": {
329
+ "type": "boolean"
330
+ },
331
+ "ContentStream.CanWrite": {
332
+ "type": "boolean"
333
+ },
334
+ "ContentStream.Capacity": {
335
+ "type": "integer",
336
+ "format": "int32"
337
+ },
338
+ "ContentStream.Length": {
339
+ "type": "integer",
340
+ "format": "int64"
341
+ },
342
+ "ContentStream.Position": {
343
+ "type": "integer",
344
+ "format": "int64"
345
+ },
346
+ "ContentStream.CanTimeout": {
347
+ "type": "boolean"
348
+ },
349
+ "ContentStream.ReadTimeout": {
350
+ "type": "integer",
351
+ "format": "int32"
352
+ },
353
+ "ContentStream.WriteTimeout": {
354
+ "type": "integer",
355
+ "format": "int32"
356
+ },
357
+ "Md5Hash": {
358
+ "type": "string"
359
+ },
360
+ "ContentLength": {
361
+ "type": "integer",
362
+ "format": "int32"
363
+ }
364
+ }
365
+ },
366
+ "encoding": {
367
+ "Description": {
368
+ "style": "form"
369
+ },
370
+ "IsPublic": {
371
+ "style": "form"
372
+ },
373
+ "IsIgnorePossibleDuplication": {
374
+ "style": "form"
375
+ },
376
+ "Roles": {
377
+ "style": "form"
378
+ },
379
+ "Coordinate": {
380
+ "style": "form"
381
+ },
382
+ "File": {
383
+ "style": "form"
384
+ },
385
+ "FileName": {
386
+ "style": "form"
387
+ },
388
+ "ContentType": {
389
+ "style": "form"
390
+ },
391
+ "Uid": {
392
+ "style": "form"
393
+ },
394
+ "ContentStream.CanRead": {
395
+ "style": "form"
396
+ },
397
+ "ContentStream.CanSeek": {
398
+ "style": "form"
399
+ },
400
+ "ContentStream.CanWrite": {
401
+ "style": "form"
402
+ },
403
+ "ContentStream.Capacity": {
404
+ "style": "form"
405
+ },
406
+ "ContentStream.Length": {
407
+ "style": "form"
408
+ },
409
+ "ContentStream.Position": {
410
+ "style": "form"
411
+ },
412
+ "ContentStream.CanTimeout": {
413
+ "style": "form"
414
+ },
415
+ "ContentStream.ReadTimeout": {
416
+ "style": "form"
417
+ },
418
+ "ContentStream.WriteTimeout": {
419
+ "style": "form"
420
+ },
421
+ "Md5Hash": {
422
+ "style": "form"
423
+ },
424
+ "ContentLength": {
425
+ "style": "form"
426
+ }
427
+ }
428
+ }
429
+ }
430
+ },
431
+ "responses": {
432
+ "202": {
433
+ "description": "Импорт компаний успешно принят в обработку."
434
+ },
435
+ "401": {
436
+ "description": "Отсутствует или некорректен Bearer-токен."
437
+ },
438
+ "403": {
439
+ "description": "Недостаточно прав для импорта компаний."
440
+ },
441
+ "409": {
442
+ "description": "Ошибка валидации файла или бизнес-конфликт.\r\nПри ошибках строк — Excel-файл с комментариями и заголовком `X-Application-Errors: InvalidData`;\r\nпри прочих конфликтах — JSON System.Collections.Generic.List`1.",
443
+ "content": {
444
+ "text/plain": {
445
+ "schema": {
446
+ "type": "array",
447
+ "items": {
448
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
449
+ }
450
+ }
451
+ },
452
+ "application/json": {
453
+ "schema": {
454
+ "type": "array",
455
+ "items": {
456
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
457
+ }
458
+ }
459
+ },
460
+ "text/json": {
461
+ "schema": {
462
+ "type": "array",
463
+ "items": {
464
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
465
+ }
466
+ }
467
+ }
468
+ }
469
+ }
470
+ },
471
+ "security": [
472
+ {
473
+ "Bearer": [ ]
474
+ }
475
+ ]
476
+ }
477
+ },
478
+ "/Materials": {
479
+ "post": {
480
+ "tags": [
481
+ "Materials"
482
+ ],
483
+ "summary": "Импорт материалов из Excel-файла (v1)",
484
+ "description": "## Пример запроса:\r\n`POST /Materials`\r\n \r\nContent-Type: `multipart/form-data`\r\n \r\nПоле формы: `File` — Excel-файл (.xlsx) с листом, имя которого зависит от `Accept-Language`\r\n(ru: `Материалы`, en: `Materials`).\r\n \r\n## Пример успешного ответа (202):\r\nТело ответа отсутствует. Импорт материалов принят в обработку.\r\n \r\n## Пример ошибки валидации файла (409):\r\nВозвращается Excel-файл с теми же данными и комментариями в ячейках с ошибками.\r\nВ заголовке ответа присутствует `X-Application-Errors: InvalidData`.\r\n \r\n## Пример ошибки (409):\r\n```json\r\n[\r\n {\r\n \"traceIdentifier\": \"00-abc123\",\r\n \"code\": \"InvalidData\",\r\n \"message\": \"Загружен неверный файл\"\r\n }\r\n]\r\n```\r\n## Негативные сценарии:\r\n- 409 Conflict: в файле есть ошибки валидации строк/ячеек — возвращается Excel с комментариями\r\n (`Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`,\r\n заголовок `X-Application-Errors: InvalidData`).\r\n- 409 Conflict: отсутствует лист с ожидаемым именем (`WrongFile`) или лист пустой (`EmptyFile`).\r\n Имя листа зависит от `Accept-Language` (ru: `Материалы`, en: `Materials`).\r\n- 409 Conflict: файл создан в неподдерживаемом приложении (например, MyOffice) — `UnsupportedFileFormat`.\r\n- Отсутствует обязательное поле формы `File` или тело запроса некорректно —\r\n обрабатывается model binding / global exception handling (не 409 Conflict).\r\n- 401 Unauthorized: отсутствует или некорректен Bearer-токен.\r\n- 403 Forbidden: недостаточно прав `MaterialImport`.",
485
+ "parameters": [
486
+ {
487
+ "name": "X-Application-ID",
488
+ "in": "header",
489
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
490
+ "schema": {
491
+ "enum": [
492
+ 1,
493
+ 2,
494
+ 3,
495
+ 4,
496
+ 5,
497
+ 6
498
+ ],
499
+ "type": "integer",
500
+ "format": "int32",
501
+ "default": 3,
502
+ "x-enumNames": [
503
+ "EngineerMobile",
504
+ "CustomerMobile",
505
+ "MainWeb",
506
+ "AdminWeb",
507
+ "Api",
508
+ "PlateWeb"
509
+ ]
510
+ }
511
+ }
512
+ ],
513
+ "requestBody": {
514
+ "content": {
515
+ "multipart/form-data": {
516
+ "schema": {
517
+ "required": [
518
+ "File"
519
+ ],
520
+ "type": "object",
521
+ "properties": {
522
+ "Description": {
523
+ "type": "string"
524
+ },
525
+ "IsPublic": {
526
+ "type": "boolean"
527
+ },
528
+ "IsIgnorePossibleDuplication": {
529
+ "type": "boolean"
530
+ },
531
+ "Roles": {
532
+ "type": "array",
533
+ "items": {
534
+ "type": "integer",
535
+ "format": "int32"
536
+ }
537
+ },
538
+ "Coordinate": {
539
+ "type": "string"
540
+ },
541
+ "File": {
542
+ "type": "string",
543
+ "format": "binary"
544
+ },
545
+ "FileName": {
546
+ "type": "string"
547
+ },
548
+ "ContentType": {
549
+ "type": "string"
550
+ },
551
+ "Uid": {
552
+ "type": "string",
553
+ "format": "uuid"
554
+ },
555
+ "ContentStream.CanRead": {
556
+ "type": "boolean"
557
+ },
558
+ "ContentStream.CanSeek": {
559
+ "type": "boolean"
560
+ },
561
+ "ContentStream.CanWrite": {
562
+ "type": "boolean"
563
+ },
564
+ "ContentStream.Capacity": {
565
+ "type": "integer",
566
+ "format": "int32"
567
+ },
568
+ "ContentStream.Length": {
569
+ "type": "integer",
570
+ "format": "int64"
571
+ },
572
+ "ContentStream.Position": {
573
+ "type": "integer",
574
+ "format": "int64"
575
+ },
576
+ "ContentStream.CanTimeout": {
577
+ "type": "boolean"
578
+ },
579
+ "ContentStream.ReadTimeout": {
580
+ "type": "integer",
581
+ "format": "int32"
582
+ },
583
+ "ContentStream.WriteTimeout": {
584
+ "type": "integer",
585
+ "format": "int32"
586
+ },
587
+ "Md5Hash": {
588
+ "type": "string"
589
+ },
590
+ "ContentLength": {
591
+ "type": "integer",
592
+ "format": "int32"
593
+ }
594
+ }
595
+ },
596
+ "encoding": {
597
+ "Description": {
598
+ "style": "form"
599
+ },
600
+ "IsPublic": {
601
+ "style": "form"
602
+ },
603
+ "IsIgnorePossibleDuplication": {
604
+ "style": "form"
605
+ },
606
+ "Roles": {
607
+ "style": "form"
608
+ },
609
+ "Coordinate": {
610
+ "style": "form"
611
+ },
612
+ "File": {
613
+ "style": "form"
614
+ },
615
+ "FileName": {
616
+ "style": "form"
617
+ },
618
+ "ContentType": {
619
+ "style": "form"
620
+ },
621
+ "Uid": {
622
+ "style": "form"
623
+ },
624
+ "ContentStream.CanRead": {
625
+ "style": "form"
626
+ },
627
+ "ContentStream.CanSeek": {
628
+ "style": "form"
629
+ },
630
+ "ContentStream.CanWrite": {
631
+ "style": "form"
632
+ },
633
+ "ContentStream.Capacity": {
634
+ "style": "form"
635
+ },
636
+ "ContentStream.Length": {
637
+ "style": "form"
638
+ },
639
+ "ContentStream.Position": {
640
+ "style": "form"
641
+ },
642
+ "ContentStream.CanTimeout": {
643
+ "style": "form"
644
+ },
645
+ "ContentStream.ReadTimeout": {
646
+ "style": "form"
647
+ },
648
+ "ContentStream.WriteTimeout": {
649
+ "style": "form"
650
+ },
651
+ "Md5Hash": {
652
+ "style": "form"
653
+ },
654
+ "ContentLength": {
655
+ "style": "form"
656
+ }
657
+ }
658
+ }
659
+ }
660
+ },
661
+ "responses": {
662
+ "202": {
663
+ "description": "Импорт материалов успешно принят в обработку."
664
+ },
665
+ "401": {
666
+ "description": "Отсутствует или некорректен Bearer-токен."
667
+ },
668
+ "403": {
669
+ "description": "Недостаточно прав для импорта материалов."
670
+ },
671
+ "409": {
672
+ "description": "Ошибка валидации файла или бизнес-конфликт.\r\nПри ошибках строк — Excel-файл с комментариями и заголовком `X-Application-Errors: InvalidData`;\r\nпри прочих конфликтах — JSON System.Collections.Generic.List`1.",
673
+ "content": {
674
+ "text/plain": {
675
+ "schema": {
676
+ "type": "array",
677
+ "items": {
678
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
679
+ }
680
+ }
681
+ },
682
+ "application/json": {
683
+ "schema": {
684
+ "type": "array",
685
+ "items": {
686
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
687
+ }
688
+ }
689
+ },
690
+ "text/json": {
691
+ "schema": {
692
+ "type": "array",
693
+ "items": {
694
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
695
+ }
696
+ }
697
+ }
698
+ }
699
+ }
700
+ },
701
+ "security": [
702
+ {
703
+ "Bearer": [ ]
704
+ }
705
+ ]
706
+ }
707
+ },
708
+ "/Materials/v2.0": {
709
+ "post": {
710
+ "tags": [
711
+ "Materials"
712
+ ],
713
+ "summary": "Импорт материалов из Excel-файла (v2)",
714
+ "description": "## Пример запроса:\r\n`POST /Materials/v2.0`\r\n \r\nContent-Type: `multipart/form-data`\r\n \r\nПоле формы: `File` — Excel-файл (.xlsx) с листом, имя которого зависит от `Accept-Language`\r\n(ru: `Материалы`, en: `Materials`).\r\n \r\nПеред записью строки группируются по `MaterialErpID` (для каждого ERP ID сохраняется последняя запись).\r\n \r\n## Пример успешного ответа (202):\r\nТело ответа отсутствует. Импорт материалов принят в обработку.\r\n \r\n## Пример ошибки валидации файла (409):\r\nВозвращается Excel-файл с теми же данными и комментариями в ячейках с ошибками.\r\nВ заголовке ответа присутствует `X-Application-Errors: InvalidData`.\r\n \r\n## Пример ошибки (409):\r\n```json\r\n[\r\n {\r\n \"traceIdentifier\": \"00-abc123\",\r\n \"code\": \"InvalidData\",\r\n \"message\": \"Загружен неверный файл\"\r\n }\r\n]\r\n```\r\n## Негативные сценарии:\r\n- 409 Conflict: в файле есть ошибки валидации строк/ячеек — возвращается Excel с комментариями\r\n (`Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`,\r\n заголовок `X-Application-Errors: InvalidData`).\r\n- 409 Conflict: отсутствует лист с ожидаемым именем (`WrongFile`) или лист пустой (`EmptyFile`).\r\n Имя листа зависит от `Accept-Language` (ru: `Материалы`, en: `Materials`).\r\n- 409 Conflict: файл создан в неподдерживаемом приложении (например, MyOffice) — `UnsupportedFileFormat`.\r\n- Отсутствует обязательное поле формы `File` или тело запроса некорректно —\r\n обрабатывается model binding / global exception handling (не 409 Conflict).\r\n- 401 Unauthorized: отсутствует или некорректен Bearer-токен.\r\n- 403 Forbidden: недостаточно прав `MaterialImport`.",
715
+ "parameters": [
716
+ {
717
+ "name": "X-Application-ID",
718
+ "in": "header",
719
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
720
+ "schema": {
721
+ "enum": [
722
+ 1,
723
+ 2,
724
+ 3,
725
+ 4,
726
+ 5,
727
+ 6
728
+ ],
729
+ "type": "integer",
730
+ "format": "int32",
731
+ "default": 3,
732
+ "x-enumNames": [
733
+ "EngineerMobile",
734
+ "CustomerMobile",
735
+ "MainWeb",
736
+ "AdminWeb",
737
+ "Api",
738
+ "PlateWeb"
739
+ ]
740
+ }
741
+ }
742
+ ],
743
+ "requestBody": {
744
+ "content": {
745
+ "multipart/form-data": {
746
+ "schema": {
747
+ "required": [
748
+ "File"
749
+ ],
750
+ "type": "object",
751
+ "properties": {
752
+ "Description": {
753
+ "type": "string"
754
+ },
755
+ "IsPublic": {
756
+ "type": "boolean"
757
+ },
758
+ "IsIgnorePossibleDuplication": {
759
+ "type": "boolean"
760
+ },
761
+ "Roles": {
762
+ "type": "array",
763
+ "items": {
764
+ "type": "integer",
765
+ "format": "int32"
766
+ }
767
+ },
768
+ "Coordinate": {
769
+ "type": "string"
770
+ },
771
+ "File": {
772
+ "type": "string",
773
+ "format": "binary"
774
+ },
775
+ "FileName": {
776
+ "type": "string"
777
+ },
778
+ "ContentType": {
779
+ "type": "string"
780
+ },
781
+ "Uid": {
782
+ "type": "string",
783
+ "format": "uuid"
784
+ },
785
+ "ContentStream.CanRead": {
786
+ "type": "boolean"
787
+ },
788
+ "ContentStream.CanSeek": {
789
+ "type": "boolean"
790
+ },
791
+ "ContentStream.CanWrite": {
792
+ "type": "boolean"
793
+ },
794
+ "ContentStream.Capacity": {
795
+ "type": "integer",
796
+ "format": "int32"
797
+ },
798
+ "ContentStream.Length": {
799
+ "type": "integer",
800
+ "format": "int64"
801
+ },
802
+ "ContentStream.Position": {
803
+ "type": "integer",
804
+ "format": "int64"
805
+ },
806
+ "ContentStream.CanTimeout": {
807
+ "type": "boolean"
808
+ },
809
+ "ContentStream.ReadTimeout": {
810
+ "type": "integer",
811
+ "format": "int32"
812
+ },
813
+ "ContentStream.WriteTimeout": {
814
+ "type": "integer",
815
+ "format": "int32"
816
+ },
817
+ "Md5Hash": {
818
+ "type": "string"
819
+ },
820
+ "ContentLength": {
821
+ "type": "integer",
822
+ "format": "int32"
823
+ }
824
+ }
825
+ },
826
+ "encoding": {
827
+ "Description": {
828
+ "style": "form"
829
+ },
830
+ "IsPublic": {
831
+ "style": "form"
832
+ },
833
+ "IsIgnorePossibleDuplication": {
834
+ "style": "form"
835
+ },
836
+ "Roles": {
837
+ "style": "form"
838
+ },
839
+ "Coordinate": {
840
+ "style": "form"
841
+ },
842
+ "File": {
843
+ "style": "form"
844
+ },
845
+ "FileName": {
846
+ "style": "form"
847
+ },
848
+ "ContentType": {
849
+ "style": "form"
850
+ },
851
+ "Uid": {
852
+ "style": "form"
853
+ },
854
+ "ContentStream.CanRead": {
855
+ "style": "form"
856
+ },
857
+ "ContentStream.CanSeek": {
858
+ "style": "form"
859
+ },
860
+ "ContentStream.CanWrite": {
861
+ "style": "form"
862
+ },
863
+ "ContentStream.Capacity": {
864
+ "style": "form"
865
+ },
866
+ "ContentStream.Length": {
867
+ "style": "form"
868
+ },
869
+ "ContentStream.Position": {
870
+ "style": "form"
871
+ },
872
+ "ContentStream.CanTimeout": {
873
+ "style": "form"
874
+ },
875
+ "ContentStream.ReadTimeout": {
876
+ "style": "form"
877
+ },
878
+ "ContentStream.WriteTimeout": {
879
+ "style": "form"
880
+ },
881
+ "Md5Hash": {
882
+ "style": "form"
883
+ },
884
+ "ContentLength": {
885
+ "style": "form"
886
+ }
887
+ }
888
+ }
889
+ }
890
+ },
891
+ "responses": {
892
+ "202": {
893
+ "description": "Импорт материалов успешно принят в обработку."
894
+ },
895
+ "401": {
896
+ "description": "Отсутствует или некорректен Bearer-токен."
897
+ },
898
+ "403": {
899
+ "description": "Недостаточно прав для импорта материалов."
900
+ },
901
+ "409": {
902
+ "description": "Ошибка валидации файла или бизнес-конфликт.\r\nПри ошибках строк — Excel-файл с комментариями и заголовком `X-Application-Errors: InvalidData`;\r\nпри прочих конфликтах — JSON System.Collections.Generic.List`1.",
903
+ "content": {
904
+ "text/plain": {
905
+ "schema": {
906
+ "type": "array",
907
+ "items": {
908
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
909
+ }
910
+ }
911
+ },
912
+ "application/json": {
913
+ "schema": {
914
+ "type": "array",
915
+ "items": {
916
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
917
+ }
918
+ }
919
+ },
920
+ "text/json": {
921
+ "schema": {
922
+ "type": "array",
923
+ "items": {
924
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
925
+ }
926
+ }
927
+ }
928
+ }
929
+ }
930
+ },
931
+ "security": [
932
+ {
933
+ "Bearer": [ ]
934
+ }
935
+ ]
936
+ }
937
+ },
938
+ "/Tasks": {
939
+ "post": {
940
+ "tags": [
941
+ "Tasks"
942
+ ],
943
+ "summary": "Импорт заявок из Excel-файла",
944
+ "description": "## Пример запроса:\r\n`POST /Tasks`\r\n \r\nContent-Type: `multipart/form-data`\r\n \r\nПоле формы: `File` — Excel-файл (.xlsx) с листом, имя которого зависит от `Accept-Language`\r\n(ru: `Заявки`, en: `Tasks`).\r\n \r\n## Пример успешного ответа (202):\r\nТело ответа отсутствует. Импорт заявок принят в обработку.\r\nПосле импорта асинхронно отправляются уведомления и запросы на перевод по стадиям.\r\n \r\n## Пример ошибки валидации файла (409):\r\nВозвращается Excel-файл с теми же данными и комментариями в ячейках с ошибками.\r\nВ заголовке ответа присутствует `X-Application-Errors: InvalidData`.\r\n \r\n## Пример ошибки (409):\r\n```json\r\n[\r\n {\r\n \"traceIdentifier\": \"00-abc123\",\r\n \"code\": \"InvalidData\",\r\n \"message\": \"Загружен неверный файл\"\r\n }\r\n]\r\n```\r\n## Негативные сценарии:\r\n- 409 Conflict: в файле есть ошибки валидации строк/ячеек — возвращается Excel с комментариями\r\n (`Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`,\r\n заголовок `X-Application-Errors: InvalidData`).\r\n- 409 Conflict: отсутствует лист с ожидаемым именем (`WrongFile`) или лист пустой (`EmptyFile`).\r\n Имя листа зависит от `Accept-Language` (ru: `Заявки`, en: `Tasks`).\r\n- 409 Conflict: файл создан в неподдерживаемом приложении (например, MyOffice) — `UnsupportedFileFormat`.\r\n- Отсутствует обязательное поле формы `File` или тело запроса некорректно —\r\n обрабатывается model binding / global exception handling (не 409 Conflict).\r\n- 401 Unauthorized: отсутствует или некорректен Bearer-токен.\r\n- 403 Forbidden: недостаточно прав `TaskImport`.",
945
+ "parameters": [
946
+ {
947
+ "name": "X-Application-ID",
948
+ "in": "header",
949
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
950
+ "schema": {
951
+ "enum": [
952
+ 1,
953
+ 2,
954
+ 3,
955
+ 4,
956
+ 5,
957
+ 6
958
+ ],
959
+ "type": "integer",
960
+ "format": "int32",
961
+ "default": 3,
962
+ "x-enumNames": [
963
+ "EngineerMobile",
964
+ "CustomerMobile",
965
+ "MainWeb",
966
+ "AdminWeb",
967
+ "Api",
968
+ "PlateWeb"
969
+ ]
970
+ }
971
+ }
972
+ ],
973
+ "requestBody": {
974
+ "content": {
975
+ "multipart/form-data": {
976
+ "schema": {
977
+ "required": [
978
+ "File"
979
+ ],
980
+ "type": "object",
981
+ "properties": {
982
+ "Description": {
983
+ "type": "string"
984
+ },
985
+ "IsPublic": {
986
+ "type": "boolean"
987
+ },
988
+ "IsIgnorePossibleDuplication": {
989
+ "type": "boolean"
990
+ },
991
+ "Roles": {
992
+ "type": "array",
993
+ "items": {
994
+ "type": "integer",
995
+ "format": "int32"
996
+ }
997
+ },
998
+ "Coordinate": {
999
+ "type": "string"
1000
+ },
1001
+ "File": {
1002
+ "type": "string",
1003
+ "format": "binary"
1004
+ },
1005
+ "FileName": {
1006
+ "type": "string"
1007
+ },
1008
+ "ContentType": {
1009
+ "type": "string"
1010
+ },
1011
+ "Uid": {
1012
+ "type": "string",
1013
+ "format": "uuid"
1014
+ },
1015
+ "ContentStream.CanRead": {
1016
+ "type": "boolean"
1017
+ },
1018
+ "ContentStream.CanSeek": {
1019
+ "type": "boolean"
1020
+ },
1021
+ "ContentStream.CanWrite": {
1022
+ "type": "boolean"
1023
+ },
1024
+ "ContentStream.Capacity": {
1025
+ "type": "integer",
1026
+ "format": "int32"
1027
+ },
1028
+ "ContentStream.Length": {
1029
+ "type": "integer",
1030
+ "format": "int64"
1031
+ },
1032
+ "ContentStream.Position": {
1033
+ "type": "integer",
1034
+ "format": "int64"
1035
+ },
1036
+ "ContentStream.CanTimeout": {
1037
+ "type": "boolean"
1038
+ },
1039
+ "ContentStream.ReadTimeout": {
1040
+ "type": "integer",
1041
+ "format": "int32"
1042
+ },
1043
+ "ContentStream.WriteTimeout": {
1044
+ "type": "integer",
1045
+ "format": "int32"
1046
+ },
1047
+ "Md5Hash": {
1048
+ "type": "string"
1049
+ },
1050
+ "ContentLength": {
1051
+ "type": "integer",
1052
+ "format": "int32"
1053
+ }
1054
+ }
1055
+ },
1056
+ "encoding": {
1057
+ "Description": {
1058
+ "style": "form"
1059
+ },
1060
+ "IsPublic": {
1061
+ "style": "form"
1062
+ },
1063
+ "IsIgnorePossibleDuplication": {
1064
+ "style": "form"
1065
+ },
1066
+ "Roles": {
1067
+ "style": "form"
1068
+ },
1069
+ "Coordinate": {
1070
+ "style": "form"
1071
+ },
1072
+ "File": {
1073
+ "style": "form"
1074
+ },
1075
+ "FileName": {
1076
+ "style": "form"
1077
+ },
1078
+ "ContentType": {
1079
+ "style": "form"
1080
+ },
1081
+ "Uid": {
1082
+ "style": "form"
1083
+ },
1084
+ "ContentStream.CanRead": {
1085
+ "style": "form"
1086
+ },
1087
+ "ContentStream.CanSeek": {
1088
+ "style": "form"
1089
+ },
1090
+ "ContentStream.CanWrite": {
1091
+ "style": "form"
1092
+ },
1093
+ "ContentStream.Capacity": {
1094
+ "style": "form"
1095
+ },
1096
+ "ContentStream.Length": {
1097
+ "style": "form"
1098
+ },
1099
+ "ContentStream.Position": {
1100
+ "style": "form"
1101
+ },
1102
+ "ContentStream.CanTimeout": {
1103
+ "style": "form"
1104
+ },
1105
+ "ContentStream.ReadTimeout": {
1106
+ "style": "form"
1107
+ },
1108
+ "ContentStream.WriteTimeout": {
1109
+ "style": "form"
1110
+ },
1111
+ "Md5Hash": {
1112
+ "style": "form"
1113
+ },
1114
+ "ContentLength": {
1115
+ "style": "form"
1116
+ }
1117
+ }
1118
+ }
1119
+ }
1120
+ },
1121
+ "responses": {
1122
+ "202": {
1123
+ "description": "Импорт заявок успешно принят в обработку."
1124
+ },
1125
+ "401": {
1126
+ "description": "Отсутствует или некорректен Bearer-токен."
1127
+ },
1128
+ "403": {
1129
+ "description": "Недостаточно прав для импорта заявок."
1130
+ },
1131
+ "409": {
1132
+ "description": "Ошибка валидации файла или бизнес-конфликт.\r\nПри ошибках строк — Excel-файл с комментариями и заголовком `X-Application-Errors: InvalidData`;\r\nпри прочих конфликтах — JSON System.Collections.Generic.List`1.",
1133
+ "content": {
1134
+ "text/plain": {
1135
+ "schema": {
1136
+ "type": "array",
1137
+ "items": {
1138
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
1139
+ }
1140
+ }
1141
+ },
1142
+ "application/json": {
1143
+ "schema": {
1144
+ "type": "array",
1145
+ "items": {
1146
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
1147
+ }
1148
+ }
1149
+ },
1150
+ "text/json": {
1151
+ "schema": {
1152
+ "type": "array",
1153
+ "items": {
1154
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
1155
+ }
1156
+ }
1157
+ }
1158
+ }
1159
+ }
1160
+ },
1161
+ "security": [
1162
+ {
1163
+ "Bearer": [ ]
1164
+ }
1165
+ ]
1166
+ }
1167
+ },
1168
+ "/Users": {
1169
+ "post": {
1170
+ "tags": [
1171
+ "Users"
1172
+ ],
1173
+ "summary": "Импорт пользователей из Excel-файла",
1174
+ "description": "## Пример запроса:\r\n`POST /Users`\r\n \r\nContent-Type: `multipart/form-data`\r\n \r\nПоле формы: `File` — Excel-файл (.xlsx) с листом, имя которого зависит от `Accept-Language`\r\n(ru: `Пользователи`, en: `Users`).\r\n \r\n## Пример успешного ответа (202):\r\nТело ответа отсутствует. Импорт пользователей принят в обработку.\r\nПосле импорта отправляются приглашения на верификацию аккаунта.\r\n \r\n## Пример ошибки валидации файла (409):\r\nВозвращается Excel-файл с теми же данными и комментариями в ячейках с ошибками.\r\nВ заголовке ответа присутствует `X-Application-Errors: InvalidData`.\r\n \r\n## Пример ошибки (409):\r\n```json\r\n[\r\n {\r\n \"traceIdentifier\": \"00-abc123\",\r\n \"code\": \"InvalidData\",\r\n \"message\": \"Загружен неверный файл\"\r\n }\r\n]\r\n```\r\n## Негативные сценарии:\r\n- 409 Conflict: в файле есть ошибки валидации строк/ячеек — возвращается Excel с комментариями\r\n (`Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`,\r\n заголовок `X-Application-Errors: InvalidData`).\r\n- 409 Conflict: отсутствует лист с ожидаемым именем (`WrongFile`) или лист пустой (`EmptyFile`).\r\n Имя листа зависит от `Accept-Language` (ru: `Пользователи`, en: `Users`).\r\n- 409 Conflict: файл создан в неподдерживаемом приложении (например, MyOffice) — `UnsupportedFileFormat`.\r\n- Отсутствует обязательное поле формы `File` или тело запроса некорректно —\r\n обрабатывается model binding / global exception handling (не 409 Conflict).\r\n- 401 Unauthorized: отсутствует или некорректен Bearer-токен.\r\n- 403 Forbidden: недостаточно прав `UserImport`.",
1175
+ "parameters": [
1176
+ {
1177
+ "name": "X-Application-ID",
1178
+ "in": "header",
1179
+ "description": "Идентификатор приложения. EngineerMobile - 1, CustomerMobile - 2, MainWeb - 3, AdminWeb - 4, Api - 5, PlateWeb - 6",
1180
+ "schema": {
1181
+ "enum": [
1182
+ 1,
1183
+ 2,
1184
+ 3,
1185
+ 4,
1186
+ 5,
1187
+ 6
1188
+ ],
1189
+ "type": "integer",
1190
+ "format": "int32",
1191
+ "default": 3,
1192
+ "x-enumNames": [
1193
+ "EngineerMobile",
1194
+ "CustomerMobile",
1195
+ "MainWeb",
1196
+ "AdminWeb",
1197
+ "Api",
1198
+ "PlateWeb"
1199
+ ]
1200
+ }
1201
+ }
1202
+ ],
1203
+ "requestBody": {
1204
+ "content": {
1205
+ "multipart/form-data": {
1206
+ "schema": {
1207
+ "required": [
1208
+ "File"
1209
+ ],
1210
+ "type": "object",
1211
+ "properties": {
1212
+ "Description": {
1213
+ "type": "string"
1214
+ },
1215
+ "IsPublic": {
1216
+ "type": "boolean"
1217
+ },
1218
+ "IsIgnorePossibleDuplication": {
1219
+ "type": "boolean"
1220
+ },
1221
+ "Roles": {
1222
+ "type": "array",
1223
+ "items": {
1224
+ "type": "integer",
1225
+ "format": "int32"
1226
+ }
1227
+ },
1228
+ "Coordinate": {
1229
+ "type": "string"
1230
+ },
1231
+ "File": {
1232
+ "type": "string",
1233
+ "format": "binary"
1234
+ },
1235
+ "FileName": {
1236
+ "type": "string"
1237
+ },
1238
+ "ContentType": {
1239
+ "type": "string"
1240
+ },
1241
+ "Uid": {
1242
+ "type": "string",
1243
+ "format": "uuid"
1244
+ },
1245
+ "ContentStream.CanRead": {
1246
+ "type": "boolean"
1247
+ },
1248
+ "ContentStream.CanSeek": {
1249
+ "type": "boolean"
1250
+ },
1251
+ "ContentStream.CanWrite": {
1252
+ "type": "boolean"
1253
+ },
1254
+ "ContentStream.Capacity": {
1255
+ "type": "integer",
1256
+ "format": "int32"
1257
+ },
1258
+ "ContentStream.Length": {
1259
+ "type": "integer",
1260
+ "format": "int64"
1261
+ },
1262
+ "ContentStream.Position": {
1263
+ "type": "integer",
1264
+ "format": "int64"
1265
+ },
1266
+ "ContentStream.CanTimeout": {
1267
+ "type": "boolean"
1268
+ },
1269
+ "ContentStream.ReadTimeout": {
1270
+ "type": "integer",
1271
+ "format": "int32"
1272
+ },
1273
+ "ContentStream.WriteTimeout": {
1274
+ "type": "integer",
1275
+ "format": "int32"
1276
+ },
1277
+ "Md5Hash": {
1278
+ "type": "string"
1279
+ },
1280
+ "ContentLength": {
1281
+ "type": "integer",
1282
+ "format": "int32"
1283
+ }
1284
+ }
1285
+ },
1286
+ "encoding": {
1287
+ "Description": {
1288
+ "style": "form"
1289
+ },
1290
+ "IsPublic": {
1291
+ "style": "form"
1292
+ },
1293
+ "IsIgnorePossibleDuplication": {
1294
+ "style": "form"
1295
+ },
1296
+ "Roles": {
1297
+ "style": "form"
1298
+ },
1299
+ "Coordinate": {
1300
+ "style": "form"
1301
+ },
1302
+ "File": {
1303
+ "style": "form"
1304
+ },
1305
+ "FileName": {
1306
+ "style": "form"
1307
+ },
1308
+ "ContentType": {
1309
+ "style": "form"
1310
+ },
1311
+ "Uid": {
1312
+ "style": "form"
1313
+ },
1314
+ "ContentStream.CanRead": {
1315
+ "style": "form"
1316
+ },
1317
+ "ContentStream.CanSeek": {
1318
+ "style": "form"
1319
+ },
1320
+ "ContentStream.CanWrite": {
1321
+ "style": "form"
1322
+ },
1323
+ "ContentStream.Capacity": {
1324
+ "style": "form"
1325
+ },
1326
+ "ContentStream.Length": {
1327
+ "style": "form"
1328
+ },
1329
+ "ContentStream.Position": {
1330
+ "style": "form"
1331
+ },
1332
+ "ContentStream.CanTimeout": {
1333
+ "style": "form"
1334
+ },
1335
+ "ContentStream.ReadTimeout": {
1336
+ "style": "form"
1337
+ },
1338
+ "ContentStream.WriteTimeout": {
1339
+ "style": "form"
1340
+ },
1341
+ "Md5Hash": {
1342
+ "style": "form"
1343
+ },
1344
+ "ContentLength": {
1345
+ "style": "form"
1346
+ }
1347
+ }
1348
+ }
1349
+ }
1350
+ },
1351
+ "responses": {
1352
+ "202": {
1353
+ "description": "Импорт пользователей успешно принят в обработку."
1354
+ },
1355
+ "401": {
1356
+ "description": "Отсутствует или некорректен Bearer-токен."
1357
+ },
1358
+ "403": {
1359
+ "description": "Недостаточно прав для импорта пользователей."
1360
+ },
1361
+ "409": {
1362
+ "description": "Ошибка валидации файла или бизнес-конфликт.\r\nПри ошибках строк — Excel-файл с комментариями и заголовком `X-Application-Errors: InvalidData`;\r\nпри прочих конфликтах — JSON System.Collections.Generic.List`1.",
1363
+ "content": {
1364
+ "text/plain": {
1365
+ "schema": {
1366
+ "type": "array",
1367
+ "items": {
1368
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
1369
+ }
1370
+ }
1371
+ },
1372
+ "application/json": {
1373
+ "schema": {
1374
+ "type": "array",
1375
+ "items": {
1376
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
1377
+ }
1378
+ }
1379
+ },
1380
+ "text/json": {
1381
+ "schema": {
1382
+ "type": "array",
1383
+ "items": {
1384
+ "$ref": "#/components/schemas/ExceptionHandlingModelsErrorModel"
1385
+ }
1386
+ }
1387
+ }
1388
+ }
1389
+ }
1390
+ },
1391
+ "security": [
1392
+ {
1393
+ "Bearer": [ ]
1394
+ }
1395
+ ]
1396
+ }
1397
+ }
1398
+ },
1399
+ "components": {
1400
+ "schemas": {
1401
+ "ExceptionHandlingModelsErrorModel": {
1402
+ "type": "object",
1403
+ "properties": {
1404
+ "traceIdentifier": {
1405
+ "type": "string",
1406
+ "nullable": true
1407
+ },
1408
+ "code": {
1409
+ "type": "string",
1410
+ "nullable": true
1411
+ },
1412
+ "message": {
1413
+ "type": "string",
1414
+ "nullable": true
1415
+ },
1416
+ "arguments": {
1417
+ "type": "object",
1418
+ "additionalProperties": {
1419
+ "type": "string",
1420
+ "nullable": true
1421
+ },
1422
+ "nullable": true
1423
+ }
1424
+ },
1425
+ "additionalProperties": false
1426
+ }
1427
+ },
1428
+ "securitySchemes": {
1429
+ "Bearer": {
1430
+ "type": "http",
1431
+ "description": "Введите токен для авторизации",
1432
+ "scheme": "Bearer",
1433
+ "bearerFormat": "JWT"
1434
+ }
1435
+ }
1436
+ },
1437
+ "tags": [
1438
+ {
1439
+ "name": "Assets",
1440
+ "description": "Контроллер импорта объектов и оборудования из Excel-файла"
1441
+ },
1442
+ {
1443
+ "name": "Companies",
1444
+ "description": "Контроллер импорта компаний из Excel-файла"
1445
+ },
1446
+ {
1447
+ "name": "Materials",
1448
+ "description": "Контроллер импорта материалов из Excel-файла"
1449
+ },
1450
+ {
1451
+ "name": "Tasks",
1452
+ "description": "Контроллер импорта заявок из Excel-файла"
1453
+ },
1454
+ {
1455
+ "name": "Users",
1456
+ "description": "Контроллер импорта пользователей из Excel-файла"
1457
+ },
1458
+ {
1459
+ "name": "Assets",
1460
+ "description": "Контроллер импорта объектов и оборудования из Excel-файла"
1461
+ },
1462
+ {
1463
+ "name": "Companies",
1464
+ "description": "Контроллер импорта компаний из Excel-файла"
1465
+ },
1466
+ {
1467
+ "name": "Materials",
1468
+ "description": "Контроллер импорта материалов из Excel-файла"
1469
+ },
1470
+ {
1471
+ "name": "Tasks",
1472
+ "description": "Контроллер импорта заявок из Excel-файла"
1473
+ },
1474
+ {
1475
+ "name": "Users",
1476
+ "description": "Контроллер импорта пользователей из Excel-файла"
1477
+ }
1478
+ ]
1479
+ }