odant-work 1.0.0 → 1.0.1
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/$server/$folder/$class/$structure/$server/handlers/pages/form/license/$handler/class.js +1 -1
- package/$server/$folder/$class/$structure/$server/handlers/pages/form/license/$handler/license.js +3 -3
- package/data/authority-key.json +5 -0
- package/data/store.json +182 -0
- package/package.json +2 -2
- package/sources/modules/license/index.js +21 -20
package/$server/$folder/$class/$structure/$server/handlers/pages/form/license/$handler/license.js
CHANGED
|
@@ -181,7 +181,7 @@ export default {
|
|
|
181
181
|
<div class="kv-list">
|
|
182
182
|
<div class="kv-row">
|
|
183
183
|
<span class="kv-label">Платформа ПАК</span>
|
|
184
|
-
<span class="kv-val">{{status?.pakSpec?.cpu || 'AMD Ryzen 495
|
|
184
|
+
<span class="kv-val">{{status?.pakSpec?.cpu || 'AMD Ryzen™ AI Max+ PRO 495'}} · {{status?.pakSpec?.ramGb || 192}} ГБ RAM · SSD {{status?.pakSpec?.ssdTb || 4}} ТБ</span>
|
|
185
185
|
</div>
|
|
186
186
|
<div class="kv-row">
|
|
187
187
|
<span class="kv-label">Hardware ID (HWID)</span>
|
|
@@ -238,9 +238,9 @@ export default {
|
|
|
238
238
|
<div class="card-head">
|
|
239
239
|
<div class="card-title">
|
|
240
240
|
<oda-icon icon="carbon:machine-learning-model" :icon-size="20"></oda-icon>
|
|
241
|
-
<span>Предустановленный локальный стек ИИ
|
|
241
|
+
<span>Предустановленный локальный стек ИИ ODANT-WORK</span>
|
|
242
242
|
</div>
|
|
243
|
-
<span class="badge"
|
|
243
|
+
<span class="badge">Встроенная система учёта, документооборота, процессов и приватный ИИ</span>
|
|
244
244
|
</div>
|
|
245
245
|
<div class="models-grid">
|
|
246
246
|
<div class="model-box" ~for="status?.preinstalledModels || []">
|
package/data/store.json
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
{
|
|
2
|
+
"licenses": {
|
|
3
|
+
"WORK-PAK-300A0DD0": {
|
|
4
|
+
"licenseId": "WORK-PAK-300A0DD0",
|
|
5
|
+
"issuedAt": 1793262666169,
|
|
6
|
+
"updatedAt": 1793262666169,
|
|
7
|
+
"issuer": "work.odant.org",
|
|
8
|
+
"customer": {
|
|
9
|
+
"name": "ООО «Маслоторг»",
|
|
10
|
+
"inn": "",
|
|
11
|
+
"email": "admin@maslotorg.ru",
|
|
12
|
+
"phone": ""
|
|
13
|
+
},
|
|
14
|
+
"hardware": {
|
|
15
|
+
"hwid": "PAK-3C564FAE8C0E",
|
|
16
|
+
"nodeFingerprint": "",
|
|
17
|
+
"sku": "WORK-PAK-495-192-4T",
|
|
18
|
+
"cpu": "AMD Ryzen™ AI Max+ PRO 495 (Zen 5, 16 ядер / 32 потока, до 5.2 ГГц, кэш 80 МБ)",
|
|
19
|
+
"ramGb": 192,
|
|
20
|
+
"ssdTb": 4,
|
|
21
|
+
"warrantyYears": 1,
|
|
22
|
+
"warrantyUntil": 1824798666169,
|
|
23
|
+
"warrantyProvider": "Партнёр-интегратор WORK"
|
|
24
|
+
},
|
|
25
|
+
"partner": null,
|
|
26
|
+
"baseSeats": 5,
|
|
27
|
+
"perpetualBase": true,
|
|
28
|
+
"addonSubscriptions": [],
|
|
29
|
+
"support": {
|
|
30
|
+
"tier": "business",
|
|
31
|
+
"includedUntil": 1824798666169,
|
|
32
|
+
"ticketsUsed": 1,
|
|
33
|
+
"bindCode": "BIND-4D86AF"
|
|
34
|
+
},
|
|
35
|
+
"protocol": "WORK-LIC-v1",
|
|
36
|
+
"issuerPublicKey": "MCowBQYDK2VwAyEAWUaWWCwtQMu6P1vyw67NV4k1n+u2rWlKsYzqwMZWLBs=",
|
|
37
|
+
"signature": "MrJ6/gykvxB9dP3nCqqhScggoWXb1k8xnHBEgCEbLP37htvCVij3epU6atmhp9UBx8Ua59OvcKGCKaPgNPQxCA=="
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"orders": {
|
|
41
|
+
"ORD-MVTAMUDM-0F96": {
|
|
42
|
+
"orderId": "ORD-MVTAMUDM-0F96",
|
|
43
|
+
"licenseId": "WORK-PAK-300A0DD0",
|
|
44
|
+
"partnerId": "",
|
|
45
|
+
"partnerDiscountPercent": 0,
|
|
46
|
+
"partnerMarginRub": 0,
|
|
47
|
+
"includeBasePak": false,
|
|
48
|
+
"tier": "business",
|
|
49
|
+
"tierName": "Business",
|
|
50
|
+
"addonSeats": 10,
|
|
51
|
+
"years": 1,
|
|
52
|
+
"amountRub": 135000,
|
|
53
|
+
"items": [
|
|
54
|
+
{
|
|
55
|
+
"title": "Годовая лицензия ODANT-WORK на доп. рабочее место (уровень Business, 1 г., скидка −10% за объём)",
|
|
56
|
+
"quantity": 10,
|
|
57
|
+
"unitPriceRub": 13500,
|
|
58
|
+
"totalRub": 135000
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
"customer": {
|
|
62
|
+
"name": "ООО «Маслоторг»",
|
|
63
|
+
"inn": "7701234567",
|
|
64
|
+
"email": "admin@maslotorg.ru",
|
|
65
|
+
"phone": ""
|
|
66
|
+
},
|
|
67
|
+
"status": "pending",
|
|
68
|
+
"paymentId": "yk_sandbox_2874a3734d40ab1b",
|
|
69
|
+
"confirmationUrl": "http://localhost:8020/pay/sandbox/ORD-MVTAMUDM-0F96",
|
|
70
|
+
"returnUrl": "https://work.odant.org",
|
|
71
|
+
"createdAt": 1793263243594,
|
|
72
|
+
"paidAt": null,
|
|
73
|
+
"yookassaMode": "sandbox"
|
|
74
|
+
},
|
|
75
|
+
"ORD-FR-MVTAMUET-FFAD": {
|
|
76
|
+
"orderId": "ORD-FR-MVTAMUET-FFAD",
|
|
77
|
+
"kind": "franchise_reservation",
|
|
78
|
+
"reservationId": "RES-TA-8EFAA5",
|
|
79
|
+
"licenseId": "RES-TA-8EFAA5",
|
|
80
|
+
"regionCode": "RU-TA",
|
|
81
|
+
"regionName": "Республика Татарстан",
|
|
82
|
+
"tierName": "Резерв франшизы (Республика Татарстан)",
|
|
83
|
+
"addonSeats": 1,
|
|
84
|
+
"years": 1,
|
|
85
|
+
"amountRub": 100000,
|
|
86
|
+
"franchiseFeeRub": 6500000,
|
|
87
|
+
"items": [
|
|
88
|
+
{
|
|
89
|
+
"title": "Невозвратный залог за резервирование региональной франшизы ODANT-WORK (Республика Татарстан, стоимость франшизы 6 500 000 ₽)",
|
|
90
|
+
"quantity": 1,
|
|
91
|
+
"unitPriceRub": 100000,
|
|
92
|
+
"totalRub": 100000
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
"customer": {
|
|
96
|
+
"name": "ООО «Волга-Интеграция»",
|
|
97
|
+
"inn": "1655123456",
|
|
98
|
+
"email": "partner@volga-it.ru",
|
|
99
|
+
"phone": ""
|
|
100
|
+
},
|
|
101
|
+
"status": "pending",
|
|
102
|
+
"paymentId": "yk_sandbox_fae9588353cc1267",
|
|
103
|
+
"confirmationUrl": "http://localhost:8020/pay/sandbox/ORD-FR-MVTAMUET-FFAD",
|
|
104
|
+
"returnUrl": "https://work.odant.org",
|
|
105
|
+
"createdAt": 1793263243636,
|
|
106
|
+
"paidAt": null,
|
|
107
|
+
"yookassaMode": "sandbox"
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"tickets": {
|
|
111
|
+
"TCK-0000-28BE": {
|
|
112
|
+
"ticketId": "TCK-0000-28BE",
|
|
113
|
+
"licenseId": "WORK-PAK-300A0DD0",
|
|
114
|
+
"customerName": "ООО «Маслоторг»",
|
|
115
|
+
"channel": "max",
|
|
116
|
+
"chatId": "client-101",
|
|
117
|
+
"userName": "Пользователь MAX",
|
|
118
|
+
"tier": "business",
|
|
119
|
+
"tierName": "Business",
|
|
120
|
+
"reactionMinutes": 120,
|
|
121
|
+
"reactionLabel": "до 2 часов",
|
|
122
|
+
"slaDeadlineAt": 1793270443784,
|
|
123
|
+
"status": "open",
|
|
124
|
+
"createdAt": 1793263243784,
|
|
125
|
+
"firstReplyAt": null,
|
|
126
|
+
"slaMet": null,
|
|
127
|
+
"messages": [
|
|
128
|
+
{
|
|
129
|
+
"from": "client",
|
|
130
|
+
"author": "Пользователь MAX",
|
|
131
|
+
"text": "Подскажите, как синхронизировать сертификат после докупки 10 мест?",
|
|
132
|
+
"time": 1793263243784
|
|
133
|
+
}
|
|
134
|
+
]
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"botBindings": {
|
|
138
|
+
"max:client-101": {
|
|
139
|
+
"channel": "max",
|
|
140
|
+
"chatId": "client-101",
|
|
141
|
+
"userName": "Пользователь MAX",
|
|
142
|
+
"licenseId": "WORK-PAK-300A0DD0",
|
|
143
|
+
"boundAt": 1793263243683
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
"partners": {},
|
|
147
|
+
"reservations": {
|
|
148
|
+
"RES-TA-8EFAA5": {
|
|
149
|
+
"reservationId": "RES-TA-8EFAA5",
|
|
150
|
+
"orderId": "ORD-FR-MVTAMUET-FFAD",
|
|
151
|
+
"regionCode": "RU-TA",
|
|
152
|
+
"regionName": "Республика Татарстан",
|
|
153
|
+
"district": "ПФО",
|
|
154
|
+
"companyName": "ООО «Волга-Интеграция»",
|
|
155
|
+
"inn": "1655123456",
|
|
156
|
+
"email": "partner@volga-it.ru",
|
|
157
|
+
"phone": "",
|
|
158
|
+
"contactPerson": "",
|
|
159
|
+
"franchiseFeeRub": 6500000,
|
|
160
|
+
"nonRefundableDepositRub": 100000,
|
|
161
|
+
"remainingFranchiseFeeRub": 6400000,
|
|
162
|
+
"status": "reserved_pending_deposit",
|
|
163
|
+
"depositPaid": false,
|
|
164
|
+
"createdAt": 1793263243636,
|
|
165
|
+
"expiresAt": 1794472843636
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
"certificates": {},
|
|
169
|
+
"users": {
|
|
170
|
+
"admin@maslotorg.ru": {
|
|
171
|
+
"userId": "USR-4DB3960551",
|
|
172
|
+
"email": "admin@maslotorg.ru",
|
|
173
|
+
"name": "ООО «Маслоторг»",
|
|
174
|
+
"companyName": "ООО «Маслоторг»",
|
|
175
|
+
"inn": "",
|
|
176
|
+
"licenseId": "WORK-PAK-300A0DD0",
|
|
177
|
+
"sessionKey": "wks_d0839169d8c9db42e8815c031140eb7c",
|
|
178
|
+
"createdAt": 1793262666168,
|
|
179
|
+
"lastLoginAt": 1793262666168
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "odant-work",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "WORK — платформа цифровой организации (учётная система уровня 1С, документооборот, чаты и локальный мультимодальный ИИ)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "sources/work.js",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"test": "node --test \"tests/**/*.test.js\"",
|
|
15
15
|
"test:ci": "npm test",
|
|
16
16
|
"setup-mirror": "powershell -NoProfile -ExecutionPolicy Bypass -File scripts/setup-svn-mirror.ps1",
|
|
17
|
-
"publish": "powershell -NoProfile -ExecutionPolicy Bypass -File scripts/svn-publish.ps1",
|
|
17
|
+
"svn:publish": "powershell -NoProfile -ExecutionPolicy Bypass -File scripts/svn-publish.ps1",
|
|
18
18
|
"sync": "powershell -NoProfile -ExecutionPolicy Bypass -File scripts/svn-sync.ps1",
|
|
19
19
|
"mirror": "powershell -NoProfile -ExecutionPolicy Bypass -File scripts/mirror-to-git.ps1",
|
|
20
20
|
"test:ui": "node tests/ui/run.mjs",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Клиентский модуль лицензирования ПАК WORK (sources/modules/license/index.js).
|
|
3
3
|
*
|
|
4
4
|
* Отвечает за:
|
|
5
|
-
* - паспорт программно-аппаратного комплекса (AMD Ryzen 495
|
|
5
|
+
* - паспорт программно-аппаратного комплекса (AMD Ryzen™ AI Max+ PRO 495, 192 ГБ RAM, SSD 4 ТБ)
|
|
6
6
|
* и реестр предустановленных моделей ИИ (Qwen 3 30B + Голосовая + Генерация изображений + Embedding);
|
|
7
7
|
* - хранение и криптографическую проверку сертификата лицензии Ed25519 (#system/license.json);
|
|
8
8
|
* - учёт рабочих мест: 5 вечных (базовый комплект ПАК) + срочные годовые лицензии (Start / Business / Enterprise);
|
|
@@ -21,54 +21,55 @@ export const LICENSE_PROTOCOL = 'WORK-LIC-v1';
|
|
|
21
21
|
export const DEFAULT_LICENSE_HUB_URL = process.env.WORK_LICENSE_HUB_URL || 'https://work.odant.org';
|
|
22
22
|
const LICENSE_FILE = './#system/license.json';
|
|
23
23
|
|
|
24
|
-
/** Эталонная спецификация базового
|
|
24
|
+
/** Эталонная спецификация базового комплекса ODANT-WORK. */
|
|
25
25
|
export const PAK_HARDWARE_SPEC = Object.freeze({
|
|
26
26
|
sku: 'WORK-PAK-495-192-4T',
|
|
27
|
-
title: '
|
|
28
|
-
cpu: 'AMD Ryzen 495
|
|
27
|
+
title: 'ODANT-WORK (Программно-аппаратный комплекс)',
|
|
28
|
+
cpu: 'AMD Ryzen™ AI Max+ PRO 495 (16 ядер / 32 потока Zen 5, до 5.2 ГГц)',
|
|
29
|
+
gpu: 'AMD Radeon™ 8065S Graphics (40 ядер, 3000 МГц, до 61 TFLOPS FP16)',
|
|
30
|
+
npu: 'AMD Ryzen™ AI (до 132 TOPS общий ИИ / 55 TOPS NPU)',
|
|
31
|
+
ram: '192 ГБ 256-bit LPDDR5x-8533 Unified Memory',
|
|
29
32
|
ramGb: 192,
|
|
33
|
+
ssd: 'SSD 4 ТБ NVMe PCIe 4.0 (RAID0/RAID1)',
|
|
30
34
|
ssdTb: 4,
|
|
35
|
+
security: 'AMD PRO Technologies, AMD Memory Guard, AMD Secure Processor',
|
|
31
36
|
basePriceRub: 5_000_000,
|
|
32
37
|
baseSeats: 5,
|
|
33
38
|
perpetualBase: true,
|
|
34
39
|
includedSupportYears: 1,
|
|
35
40
|
includedSupportTier: 'business',
|
|
36
|
-
configuration: '
|
|
41
|
+
configuration: 'Встроенная система учёта, документооборота, управления процессами и приватный мультимодальный ИИ (справочники, план счетов, двойная запись, ведомости, первичные документы, сквозные процессы и корпоративные коммуникации)',
|
|
37
42
|
preinstalledModels: Object.freeze([
|
|
38
43
|
{
|
|
39
44
|
id: 'Qwen3-30B-A3B',
|
|
40
45
|
category: 'llm',
|
|
41
|
-
title: '
|
|
42
|
-
role: '
|
|
46
|
+
title: 'Большая языковая модель (LLM)',
|
|
47
|
+
role: 'Диалог, ведение учёта, документооборот, управление процессами, аналитика и генерация кода',
|
|
43
48
|
path: '/MODELS/Local/Qwen3-30B-A3B',
|
|
44
|
-
hfRepo: 'Qwen/Qwen3-30B-A3B',
|
|
45
49
|
ramEstimateGb: 18.5,
|
|
46
50
|
},
|
|
47
51
|
{
|
|
48
52
|
id: 'Qwen3-Voice',
|
|
49
53
|
category: 'voice',
|
|
50
54
|
title: 'Голосовая модель (ASR + TTS)',
|
|
51
|
-
role: 'Полнодуплексный голосовой диалог с перебиванием, распознавание и синтез речи
|
|
55
|
+
role: 'Полнодуплексный голосовой диалог с перебиванием, распознавание и синтез естественной речи',
|
|
52
56
|
path: '/MODELS/Local/Qwen3-Voice',
|
|
53
|
-
hfRepo: 'Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign',
|
|
54
57
|
ramEstimateGb: 4.2,
|
|
55
58
|
},
|
|
56
59
|
{
|
|
57
60
|
id: 'Flux-Image',
|
|
58
61
|
category: 'image',
|
|
59
|
-
title: '
|
|
62
|
+
title: 'Модель генерации изображений',
|
|
60
63
|
role: 'Локальный синтез иллюстраций, карточек товаров, схем и визуальных материалов',
|
|
61
64
|
path: '/MODELS/Local/Flux-Image',
|
|
62
|
-
hfRepo: 'black-forest-labs/FLUX.1-schnell',
|
|
63
65
|
ramEstimateGb: 12.0,
|
|
64
66
|
},
|
|
65
67
|
{
|
|
66
68
|
id: 'Qwen3-Embedding',
|
|
67
69
|
category: 'embedding',
|
|
68
|
-
title: 'Embedding
|
|
69
|
-
role: 'Семантический
|
|
70
|
+
title: 'Модель векторного поиска (Embedding / RAG)',
|
|
71
|
+
role: 'Семантический поиск и индексация договоров, первичных документов, проводок и базы знаний',
|
|
70
72
|
path: '/MODELS/Local/Qwen3-Embedding',
|
|
71
|
-
hfRepo: 'Qwen/Qwen3-Embedding-4B',
|
|
72
73
|
ramEstimateGb: 2.5,
|
|
73
74
|
},
|
|
74
75
|
]),
|
|
@@ -79,7 +80,7 @@ export const SUPPORT_TIERS = Object.freeze({
|
|
|
79
80
|
start: Object.freeze({
|
|
80
81
|
id: 'start',
|
|
81
82
|
name: 'Start',
|
|
82
|
-
pricePerUserYearRub:
|
|
83
|
+
pricePerUserYearRub: 10_000,
|
|
83
84
|
ticketsPerSeatYear: 12,
|
|
84
85
|
reactionMinutes: 480,
|
|
85
86
|
reactionText: 'до 8 рабочих часов',
|
|
@@ -90,24 +91,24 @@ export const SUPPORT_TIERS = Object.freeze({
|
|
|
90
91
|
business: Object.freeze({
|
|
91
92
|
id: 'business',
|
|
92
93
|
name: 'Business',
|
|
93
|
-
pricePerUserYearRub:
|
|
94
|
+
pricePerUserYearRub: 15_000,
|
|
94
95
|
ticketsPerSeatYear: 48,
|
|
95
96
|
reactionMinutes: 120,
|
|
96
97
|
reactionText: 'до 2 часов',
|
|
97
98
|
scheduleText: '7 дней в неделю (08:00–22:00 МСК)',
|
|
98
99
|
channels: ['MAX', 'Telegram', 'VK'],
|
|
99
|
-
description: 'Бизнес-поддержка: до 48 обращений в год на место, время реакции до 2 часов, помощь по настройке
|
|
100
|
+
description: 'Бизнес-поддержка: до 48 обращений в год на место, время реакции до 2 часов, помощь по настройке учёта, процессов и моделей ИИ.',
|
|
100
101
|
}),
|
|
101
102
|
enterprise: Object.freeze({
|
|
102
103
|
id: 'enterprise',
|
|
103
104
|
name: 'Enterprise',
|
|
104
|
-
pricePerUserYearRub:
|
|
105
|
+
pricePerUserYearRub: 20_000,
|
|
105
106
|
ticketsPerSeatYear: 9999,
|
|
106
107
|
reactionMinutes: 15,
|
|
107
108
|
reactionText: 'до 15 минут (24/7)',
|
|
108
109
|
scheduleText: '24/7/365 (круглосуточно)',
|
|
109
110
|
channels: ['MAX', 'Telegram', 'VK', 'Выделенный инженер'],
|
|
110
|
-
description: 'Приоритетная поддержка 24/7: безлимитные обращения, реакция до 15 минут, персональный инженер и помощь в дообучении
|
|
111
|
+
description: 'Приоритетная поддержка 24/7: безлимитные обращения, реакция до 15 минут, персональный инженер и помощь в дообучении моделей.',
|
|
111
112
|
}),
|
|
112
113
|
});
|
|
113
114
|
|