@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.
- package/.env.example +54 -0
- package/CONNECTING.md +260 -0
- package/README.md +266 -0
- package/dist/auth.js +226 -0
- package/dist/config.js +120 -0
- package/dist/generated/manifest.js +3643 -0
- package/dist/guides/field-notes.json +27 -0
- package/dist/guides/loader.js +32 -0
- package/dist/guides/service-map.js +6 -0
- package/dist/http.js +93 -0
- package/dist/index/store.js +134 -0
- package/dist/index/types.js +1 -0
- package/dist/index.js +20 -0
- package/dist/paths.js +20 -0
- package/dist/pii/fields.js +100 -0
- package/dist/pii/mask.js +50 -0
- package/dist/pii/strategies.js +88 -0
- package/dist/schema/build-index.js +67 -0
- package/dist/schema/deref.js +87 -0
- package/dist/schema/describe.js +65 -0
- package/dist/server.js +62 -0
- package/dist/token-prompt.js +41 -0
- package/dist/tools/curated.js +151 -0
- package/dist/tools/discovery.js +187 -0
- package/dist/tools/guides.js +126 -0
- package/dist/tools/registry.js +37 -0
- package/dist/tools/request.js +170 -0
- package/dist/tools/types.js +1 -0
- package/docs/guides/assets.md +334 -0
- package/docs/guides/attributes.md +125 -0
- package/docs/guides/checklisttemplates.md +154 -0
- package/docs/guides/companies.md +57 -0
- package/docs/guides/dictionaries.md +64 -0
- package/docs/guides/lifecycle.md +263 -0
- package/docs/guides/materials.md +135 -0
- package/docs/guides/notifications.md +184 -0
- package/docs/guides/roles.md +125 -0
- package/docs/guides/sla.md +130 -0
- package/docs/guides/start.md +67 -0
- package/docs/guides/taskchecklists.md +149 -0
- package/docs/guides/taskcreate.md +260 -0
- package/docs/guides/taskedit.md +277 -0
- package/docs/guides/tasktypes.md +156 -0
- package/docs/guides/users.md +71 -0
- package/generated/index.dev.json +18776 -0
- package/generated/index.prod.json +18858 -0
- package/package.json +48 -0
- package/swagger/dev/ADM.json +27777 -0
- package/swagger/dev/AUTH.json +1739 -0
- package/swagger/dev/AUTHN.json +1250 -0
- package/swagger/dev/AUTHZ.json +1404 -0
- package/swagger/dev/CM.json +309 -0
- package/swagger/dev/COMMON.json +6543 -0
- package/swagger/dev/ES.json +28029 -0
- package/swagger/dev/EXPORT.json +4575 -0
- package/swagger/dev/IMPORT.json +1479 -0
- package/swagger/dev/LIC.json +224 -0
- package/swagger/dev/MSG.json +7883 -0
- package/swagger/dev/NEWS.json +348 -0
- package/swagger/dev/PA.json +5981 -0
- package/swagger/dev/PMP.json +3196 -0
- package/swagger/dev/PROXY.json +416 -0
- package/swagger/dev/REPORT.json +3921 -0
- package/swagger/dev/SC.json +3771 -0
- package/swagger/dev/SLA.json +2837 -0
- package/swagger/dev/TSTG.json +4981 -0
- package/swagger/dev/UI.json +4720 -0
- package/swagger/dev/WH.json +16796 -0
- package/swagger/dev/WORK.json +36024 -0
- package/swagger/dev/WSP.json +1612 -0
- package/swagger/prod/ADM.json +27777 -0
- package/swagger/prod/AUTH.json +1308 -0
- package/swagger/prod/AUTHN.json +2710 -0
- package/swagger/prod/AUTHZ.json +896 -0
- package/swagger/prod/CM.json +162 -0
- package/swagger/prod/COMMON.json +4910 -0
- package/swagger/prod/ES.json +28029 -0
- package/swagger/prod/EXPORT.json +3091 -0
- package/swagger/prod/LIC.json +123 -0
- package/swagger/prod/MSG.json +6239 -0
- package/swagger/prod/NEWS.json +295 -0
- package/swagger/prod/PA.json +5123 -0
- package/swagger/prod/PMP.json +2978 -0
- package/swagger/prod/PROXY.json +250 -0
- package/swagger/prod/REPORT.json +3729 -0
- package/swagger/prod/SC.json +3771 -0
- package/swagger/prod/SLA.json +2201 -0
- package/swagger/prod/TSTG.json +4220 -0
- package/swagger/prod/UI.json +3879 -0
- package/swagger/prod/WH.json +16730 -0
- package/swagger/prod/WORK.json +35994 -0
- package/swagger/prod/WSP.json +1468 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
topic: tasktypes
|
|
3
|
+
sources:
|
|
4
|
+
- page: adminapp/src/modules/taskTypeRightSideBar/taskTypeCreateForms.js
|
|
5
|
+
content_hash: cd18cabc3f42cf97
|
|
6
|
+
- page: adminapp/src/services/requests.js
|
|
7
|
+
content_hash: 54c3d95d85bb0ce0
|
|
8
|
+
- page: adminapp/src/locales/ru/app.json
|
|
9
|
+
content_hash: 22b22046c9336c1a
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Типы заявок и связанные справочники
|
|
13
|
+
|
|
14
|
+
Тип заявки — классификация заявок, которая определяет жизненный цикл
|
|
15
|
+
(последовательность стадий), маску номера, крайний срок закрытия по умолчанию
|
|
16
|
+
и список допустимых видов работ. Настройка жизненного цикла делается **после**
|
|
17
|
+
создания типа заявки — `hubex_get_guide topic="lifecycle"`.
|
|
18
|
+
|
|
19
|
+
## 1. Создание типа заявки
|
|
20
|
+
|
|
21
|
+
Порядок вызовов веб-клиента:
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
POST WORK:POST:/TaskTypes query relatedToAnyWorkType=true → taskTypeID
|
|
25
|
+
POST WORK:POST:/TaskTypes/{id}/workTypes → если виды работ выбраны списком
|
|
26
|
+
POST TSTG:POST:/TaskStageLinks/copy → если тип создаётся по шаблону
|
|
27
|
+
PUT WORK:PUT:/TaskTypeDistrict → участки
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Тело создания — массив:
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
[
|
|
34
|
+
{
|
|
35
|
+
"name": "Ремонт электрооборудования",
|
|
36
|
+
"numberMask": "[{День ДД}][{Месяц ММ}][0-9][0-9][0-9]",
|
|
37
|
+
"closeMinutes": 1440,
|
|
38
|
+
"isDefault": false
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
- `numberMask` — формат номера заявки. Маска по умолчанию в AdminApp —
|
|
44
|
+
`[{День ДД}][{Месяц ММ}][0-9][0-9][0-9]`; каждый блок `[0-9]` — один разряд
|
|
45
|
+
сквозного счётчика, поэтому три блока дают номера до 999 в день.
|
|
46
|
+
- `closeMinutes` — крайний срок закрытия (дедлайн) в **минутах**; веб-клиент
|
|
47
|
+
собирает его из дней/часов/минут формы. `null` — срок не задан.
|
|
48
|
+
При создании заявки система берёт **наименьшее** значение из срока типа
|
|
49
|
+
заявки и срока вида работ; если оба пусты — считает дедлайн по правилам SLA
|
|
50
|
+
(`hubex_get_guide topic="sla"`).
|
|
51
|
+
- `isDefault` — тип по умолчанию для новых заявок.
|
|
52
|
+
- Query-параметр `relatedToAnyWorkType` (`true`/`false`) — «все виды работ» или
|
|
53
|
+
«по списку». При `false` сразу после создания привяжи виды работ.
|
|
54
|
+
|
|
55
|
+
Изменение — `WORK:PUT:/TaskTypes` (массив с `id`, полное тело), удаление —
|
|
56
|
+
`WORK:DELETE:/TaskTypes/{id}`.
|
|
57
|
+
|
|
58
|
+
## 2. Виды работ типа заявки
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
GET WORK:GET:/TaskTypes/{id}/workTypes что уже привязано
|
|
62
|
+
POST WORK:POST:/TaskTypes/{id}/workTypes тело — массив id видов работ: [12, 18]
|
|
63
|
+
DELETE WORK:DELETE:/TaskTypes/{id}/workTypes отвязать
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Зеркальные эндпоинты со стороны вида работ — `WORK:GET:/WorkTypes/{id}/taskTypes`,
|
|
67
|
+
`WORK:POST:/WorkTypes/{id}/taskTypes`, `WORK:DELETE:/WorkTypes/{id}/taskTypes`.
|
|
68
|
+
|
|
69
|
+
Сам справочник видов работ: `WORK:GET:/WorkTypes`, создание —
|
|
70
|
+
`WORK:POST:/WorkTypes`, изменение — `WORK:PUT:/WorkTypes`. Неопубликованный
|
|
71
|
+
вид работ недоступен пользователям: публикация — `WORK:PUT:/WorkTypes/publish`
|
|
72
|
+
(или `WORK:PUT:/WorkTypes/{id}/publish`), снятие —
|
|
73
|
+
`WORK:PUT:/WorkTypes/unpublish`. Шаблоны чек-листов вида работ —
|
|
74
|
+
`WORK:GET:/WorkTypes/{workTypeID}/checkLists` и
|
|
75
|
+
`WORK:POST:/WorkTypes/{workTypeID}/checkLists`.
|
|
76
|
+
|
|
77
|
+
## 3. Участки
|
|
78
|
+
|
|
79
|
+
Участок (`District`) — классификация объектов, типов заявок, сотрудников и
|
|
80
|
+
заказчиков по географическому или функциональному признаку; вместе с ролями
|
|
81
|
+
он разграничивает доступ.
|
|
82
|
+
|
|
83
|
+
- Справочник: `ES:GET:/Districts`, создание — `ES:POST:/Districts`,
|
|
84
|
+
изменение — `ES:PUT:/Districts`, иерархия и порядок —
|
|
85
|
+
`ES:PUT:/Districts/parentAndReorder`, удаление — `ES:DELETE:/Districts/{id}`.
|
|
86
|
+
- Участки типа заявки: чтение `WORK:GET:/TaskTypes/{id}/districts`,
|
|
87
|
+
запись `WORK:PUT:/TaskTypeDistrict` с телом
|
|
88
|
+
`[{ "taskTypeID": 5, "data": [1, 2, 3] }]`. Это **замена** списка целиком:
|
|
89
|
+
переданный `data` становится полным набором участков типа заявки.
|
|
90
|
+
- Участки пользователя — `ADM:POST:/UserDistricts` и `ADM:DELETE:/UserDistricts`.
|
|
91
|
+
|
|
92
|
+
## 4. Критичности
|
|
93
|
+
|
|
94
|
+
Критичность визуально разделяет заявки по важности и участвует в расчёте
|
|
95
|
+
дедлайна правилами SLA.
|
|
96
|
+
|
|
97
|
+
- `SLA:GET:/Criticalities`, `SLA:POST:/Criticalities`, `SLA:PUT:/Criticalities`,
|
|
98
|
+
`SLA:DELETE:/Criticalities/{id}`.
|
|
99
|
+
- Тело: `[{ "name": "Срочная", "color": "#E03131", "isDefault": false, "sortOrder": 1, "erpID": null }]`.
|
|
100
|
+
`color` — до 7 символов, `name` — до 128, `erpID` — до 64 символов, внешний
|
|
101
|
+
идентификатор для интеграций (1С, CRM).
|
|
102
|
+
|
|
103
|
+
## 5. Актуальности заявки
|
|
104
|
+
|
|
105
|
+
Актуальность (`TaskActuality`) помечает заявку как устаревающую по времени.
|
|
106
|
+
|
|
107
|
+
- `WORK:GET:/TaskActualities`, `WORK:POST:/TaskActualities`,
|
|
108
|
+
`WORK:PUT:/TaskActualities`, `WORK:DELETE:/TaskActualities/{id}`.
|
|
109
|
+
- Тело: `[{ "name": "Просрочена", "color": "#E03131", "toBeExpiredAfterMinutes": 60, "isTillNextDay": false, "sortOrder": 2 }]`.
|
|
110
|
+
|
|
111
|
+
## 6. Форма заявки для типа
|
|
112
|
+
|
|
113
|
+
Расположение полей и блоков на форме заявки задаётся шаблоном раскладки:
|
|
114
|
+
|
|
115
|
+
```text
|
|
116
|
+
GET UI:GET:/LayoutTemplates список шаблонов
|
|
117
|
+
GET UI:GET:/LayoutTemplates/default шаблон по умолчанию
|
|
118
|
+
GET UI:GET:/LayoutTemplates/bytype/{id} шаблон, применённый к типу заявки
|
|
119
|
+
POST UI:POST:/LayoutTemplates создать
|
|
120
|
+
PUT UI:PUT:/LayoutTemplates/{id}/taskTypes привязать шаблон к типам заявок
|
|
121
|
+
PUT UI:PUT:/LayoutTemplates/{id}/reset сбросить к исходному
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Состав шаблона: `UI:GET:/LayoutTemplates/{id}/Components` (системные блоки и
|
|
125
|
+
поля) и `UI:GET:/LayoutTemplates/{id}/Attributes` (дополнительные поля,
|
|
126
|
+
см. `hubex_get_guide topic="attributes"`).
|
|
127
|
+
|
|
128
|
+
Видимость полей по ролям и стадиям — это другая настройка, из жизненного
|
|
129
|
+
цикла: `TSTG:GET:/TaskStageComponents/availability` и
|
|
130
|
+
`TSTG:POST:/TaskStageComponents`.
|
|
131
|
+
|
|
132
|
+
## Последовательность MCP-вызовов
|
|
133
|
+
|
|
134
|
+
```text
|
|
135
|
+
hubex_request_write(endpointId: `WORK:POST:/TaskTypes`, query: { relatedToAnyWorkType: false }, body: [{ name, numberMask, closeMinutes }])
|
|
136
|
+
→ response[0] = taskTypeID
|
|
137
|
+
hubex_request_write(endpointId: `WORK:POST:/TaskTypes/{id}/workTypes`, pathParams: { id: taskTypeID }, body: [12, 18])
|
|
138
|
+
hubex_request_write(endpointId: `TSTG:POST:/TaskStageLinks/copy`, body: [{ sourceTaskTypeID, targetTaskTypeID: taskTypeID }])
|
|
139
|
+
hubex_request_write(endpointId: `WORK:PUT:/TaskTypeDistrict`, body: [{ taskTypeID, data: [1, 2] }])
|
|
140
|
+
hubex_request_read(endpointId: `WORK:GET:/TaskTypes/{id}`, pathParams: { id: taskTypeID })
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Подводные камни
|
|
144
|
+
|
|
145
|
+
- Новый тип заявки без жизненного цикла нерабочий: нужен как минимум маршрут
|
|
146
|
+
(`WORK:POST:/TaskTypeRoutes`) и переходы. Копирование переходов из типа
|
|
147
|
+
шаблона (`TSTG:POST:/TaskStageLinks/copy`) — самый короткий путь.
|
|
148
|
+
- `relatedToAnyWorkType` задаётся только query-параметром при создании; сам
|
|
149
|
+
список видов работ передаётся отдельным запросом.
|
|
150
|
+
- `WORK:PUT:/TaskTypeDistrict` заменяет список участков целиком — сначала
|
|
151
|
+
прочитай текущие через `WORK:GET:/TaskTypes/{id}/districts`.
|
|
152
|
+
- `closeMinutes` — минуты, таймауты переходов в жизненном цикле — секунды.
|
|
153
|
+
- Тип заявки (`WORK:GET:/TaskTypes`) и вид работ (`WORK:GET:/WorkTypes`) —
|
|
154
|
+
разные справочники: тип задаёт процесс, вид работ — что именно делается.
|
|
155
|
+
- Удаление типа заявки затрагивает все заявки этого типа; в тенанте с данными
|
|
156
|
+
делай это только по явному подтверждению пользователя.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
topic: users
|
|
3
|
+
sources:
|
|
4
|
+
- page: admin/ExampleRequestsAPI.md
|
|
5
|
+
content_hash: ad3e2bf92fe6a736
|
|
6
|
+
- page: admin/Roles.md
|
|
7
|
+
content_hash: 3e67808b47102a51
|
|
8
|
+
- page: admin/ServiceUsers.md
|
|
9
|
+
content_hash: 4fb065f9e9d6c93b
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Пользователи
|
|
13
|
+
|
|
14
|
+
Пользователь (User) — сотрудник (исполнитель, диспетчер, администратор) или
|
|
15
|
+
заказчик в HubEx. Живёт в сервисе ADM. Уровень доступа пользователя задаётся
|
|
16
|
+
ролью (`Role`), а не самим пользователем.
|
|
17
|
+
|
|
18
|
+
## Создание пользователя: порядок вызовов
|
|
19
|
+
|
|
20
|
+
1. `ADM:GET:/Roles` → `roleID` — какая роль будет назначена пользователю
|
|
21
|
+
(«Заказчик», «Сервисный специалист», «Диспетчер» и т.п. — конкретные роли
|
|
22
|
+
заданы в тенанте, справочник не фиксирован).
|
|
23
|
+
2. `ADM:POST:/Users` — создание пользователя. Тело — по схеме из
|
|
24
|
+
`hubex_describe_endpoint`.
|
|
25
|
+
3. `ADM:POST:/UserRoles` — назначение роли пользователю. Отдельный запрос,
|
|
26
|
+
без него роль из шага 1 не применится.
|
|
27
|
+
4. `ADM:POST:/UserDistricts` — назначение участков пользователю (какие
|
|
28
|
+
объекты/заявки будет видеть сотрудник).
|
|
29
|
+
|
|
30
|
+
## Обязательные и ключевые поля тела
|
|
31
|
+
|
|
32
|
+
Пример из вики для мобильного сотрудника-исполнителя:
|
|
33
|
+
|
|
34
|
+
- `firstName`, `lastName` — имя и фамилия.
|
|
35
|
+
- `sexID` — пол.
|
|
36
|
+
- `email` — почта, используется как логин.
|
|
37
|
+
- `isTechnician` — признак «сотрудник» (исполнитель), а не заказчик.
|
|
38
|
+
- `mobilityID` — признак мобильности (мобильный/немобильный сотрудник).
|
|
39
|
+
- `geotrackingModeID` — режим геотрекинга для мобильного приложения.
|
|
40
|
+
|
|
41
|
+
Точный список обязательных полей и их типы — в схеме `ADM:POST:/Users` через
|
|
42
|
+
`hubex_describe_endpoint`, поля выше — стабильно используемый набор из
|
|
43
|
+
примеров интеграции.
|
|
44
|
+
|
|
45
|
+
## Чтение, изменение, блокировка
|
|
46
|
+
|
|
47
|
+
- Список: `ADM:GET:/Users`; облегчённый список: `ADM:GET:/Users/short`.
|
|
48
|
+
- Роли пользователя: `ADM:GET:/Users/{userID}/skills` — навыки исполнителя
|
|
49
|
+
(используются правилами автоназначения по совпадению вида работ и навыка).
|
|
50
|
+
- Изменение: `ADM:PUT:/Users/{id}` обновляет пользователя **целиком** —
|
|
51
|
+
нужно передавать все текущие поля плюс изменяемые, включая `oldEmail`, если
|
|
52
|
+
меняется `email`.
|
|
53
|
+
- Блокировка — это тот же `PUT` с добавленными `banReasonID` и `banTill`
|
|
54
|
+
(датой, до которой пользователь заблокирован), отдельного endpoint для
|
|
55
|
+
блокировки нет.
|
|
56
|
+
- Удаление: `ADM:DELETE:/Users` — помечает удалённым, физически не стирает.
|
|
57
|
+
|
|
58
|
+
## Подводные камни
|
|
59
|
+
|
|
60
|
+
- Создание пользователя (`ADM:POST:/Users`) не назначает ему роль и участки —
|
|
61
|
+
это отдельные запросы к `UserRoles` и `UserDistricts`. Без роли пользователь
|
|
62
|
+
ничего не увидит и не сможет ничего сделать в системе.
|
|
63
|
+
- `isTechnician` отличает сотрудника-исполнителя от заказчика на уровне
|
|
64
|
+
профиля; тип доступа (что именно видно) при этом всё равно определяется
|
|
65
|
+
ролью, а не этим флагом.
|
|
66
|
+
- Изменение через `PUT` требует передавать **все** поля пользователя, включая
|
|
67
|
+
`oldEmail` при смене почты — частичное тело затрёт остальные значения.
|
|
68
|
+
- Служебные пользователи (API-интеграции, анонимный доступ по QR) настраиваются
|
|
69
|
+
отдельно от обычных сотрудников/заказчиков и имеют свою роль с максимальными
|
|
70
|
+
полномочиями — их не создают через `ADM:POST:/Users` в обычном порядке, а
|
|
71
|
+
подключают в консоли администратора.
|