@boxa-devops/depo-shared 1.0.1 → 1.0.3
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/README.md +13 -7
- package/package.json +3 -1
- package/rules_fixtures.json +776 -0
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
сгенерированные типы API, design-токены, общие guard-функции и документация,
|
|
5
5
|
которую читают все репозитории.
|
|
6
6
|
|
|
7
|
-
Публикует npm-пакет **`@boxa-devops/depo-shared`** в
|
|
7
|
+
Публикует npm-пакет **`@boxa-devops/depo-shared`** в **npmjs** (публичный).
|
|
8
8
|
|
|
9
9
|
## Репозитории
|
|
10
10
|
|
|
@@ -53,17 +53,23 @@ pnpm build # dist/: ESM + .d.ts + sourcemaps
|
|
|
53
53
|
|
|
54
54
|
Правила версионирования и остальные детали — `CLAUDE.md`.
|
|
55
55
|
|
|
56
|
-
##
|
|
56
|
+
## Установка у потребителей
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
Пакет публичный на npmjs — ставится анонимно, никаких токенов ни локально,
|
|
59
|
+
ни в Dockerfile, ни на Railway:
|
|
59
60
|
|
|
60
61
|
```sh
|
|
61
|
-
|
|
62
|
+
pnpm install
|
|
62
63
|
```
|
|
63
64
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
Почему не GitHub Packages: их npm-реестр требует токен даже для публичного
|
|
66
|
+
пакета — анонимный запрос отбивается `401 authentication token not provided`
|
|
67
|
+
ещё до проверки видимости.
|
|
68
|
+
|
|
69
|
+
Единственный секрет схемы — `NPM_TOKEN` в Actions-секретах этого
|
|
70
|
+
репозитория, только для публикации по тегу. Он должен быть **Classic
|
|
71
|
+
Automation** (или granular с bypass-2FA): обычный Publish-токен отбивается
|
|
72
|
+
`403 ... two-factor authentication ... required to publish`.
|
|
67
73
|
|
|
68
74
|
## Происхождение
|
|
69
75
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@boxa-devops/depo-shared",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Wire contract between depo-api, depo-terminal and depo-admin: generated API types, design tokens, shared guards.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"tokens.css",
|
|
17
17
|
"permissions.json",
|
|
18
18
|
"error_codes.json",
|
|
19
|
+
"rules_fixtures.json",
|
|
19
20
|
"openapi.json"
|
|
20
21
|
],
|
|
21
22
|
"types": "./dist/index.d.ts",
|
|
@@ -27,6 +28,7 @@
|
|
|
27
28
|
"./tokens.css": "./tokens.css",
|
|
28
29
|
"./permissions.json": "./permissions.json",
|
|
29
30
|
"./error_codes.json": "./error_codes.json",
|
|
31
|
+
"./rules_fixtures.json": "./rules_fixtures.json",
|
|
30
32
|
"./openapi.json": "./openapi.json"
|
|
31
33
|
},
|
|
32
34
|
"peerDependencies": {
|
|
@@ -0,0 +1,776 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Golden cases for the B20 measurement-recommendation engine, shared by the two implementations that must agree: app/services/rules.py (the record) and depo-terminal/src/refs/rules.ts (the offline copy). Authored HERE, because the server owns the engine; scripts/dump_openapi.py copies this file into the depo-contract repo, from where it is published in @boxa-devops/depo-shared and read by the terminal's rules.test.ts. Before the split the two engines were kept in step only by gate G9 and two independently written test suites — nothing made them exercise the same cases. Add a case whenever you touch either engine.",
|
|
3
|
+
"_expect": "Each case: evaluate(rules, values) must return exactly `expect`, in order. Fields compared: code, kind, ref, priority, matched, and the rendered message in both languages. `matched` echoes the value as STORED (a string), not as parsed.",
|
|
4
|
+
"cases": [
|
|
5
|
+
{
|
|
6
|
+
"name": "empty condition list never fires — a rule that applies to everything is half-built",
|
|
7
|
+
"rules": [
|
|
8
|
+
{
|
|
9
|
+
"id": "00000000-0000-4000-8000-000000000001",
|
|
10
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
11
|
+
"code": "empty",
|
|
12
|
+
"name_uz": "Bo'sh",
|
|
13
|
+
"name_ru": "Пустое",
|
|
14
|
+
"priority": 10,
|
|
15
|
+
"conditions": [],
|
|
16
|
+
"recommendation_kind": "ATTENTION",
|
|
17
|
+
"recommendation_ref": null,
|
|
18
|
+
"message_uz": "uz",
|
|
19
|
+
"message_ru": "ru"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"values": {
|
|
23
|
+
"prokat": "80"
|
|
24
|
+
},
|
|
25
|
+
"expect": []
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "a parameter nobody measured is not a zero",
|
|
29
|
+
"rules": [
|
|
30
|
+
{
|
|
31
|
+
"id": "00000000-0000-4000-8000-000000000002",
|
|
32
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
33
|
+
"code": "unmeasured",
|
|
34
|
+
"name_uz": "Qoida",
|
|
35
|
+
"name_ru": "Правило",
|
|
36
|
+
"priority": 10,
|
|
37
|
+
"conditions": [
|
|
38
|
+
{
|
|
39
|
+
"param": "prokat",
|
|
40
|
+
"op": "<",
|
|
41
|
+
"value": 100
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"recommendation_kind": "ATTENTION",
|
|
45
|
+
"recommendation_ref": null,
|
|
46
|
+
"message_uz": "uz",
|
|
47
|
+
"message_ru": "ru"
|
|
48
|
+
}
|
|
49
|
+
],
|
|
50
|
+
"values": {
|
|
51
|
+
"greben": "25"
|
|
52
|
+
},
|
|
53
|
+
"expect": []
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "plain field, every comparison operator",
|
|
57
|
+
"rules": [
|
|
58
|
+
{
|
|
59
|
+
"id": "00000000-0000-4000-8000-000000000010",
|
|
60
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
61
|
+
"code": "lt",
|
|
62
|
+
"name_uz": "Kichik",
|
|
63
|
+
"name_ru": "Меньше",
|
|
64
|
+
"priority": 10,
|
|
65
|
+
"conditions": [
|
|
66
|
+
{
|
|
67
|
+
"param": "prokat",
|
|
68
|
+
"op": "<",
|
|
69
|
+
"value": 80
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
"recommendation_kind": "ATTENTION",
|
|
73
|
+
"recommendation_ref": null,
|
|
74
|
+
"message_uz": "Prokat {value}",
|
|
75
|
+
"message_ru": "Прокат {value}"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "00000000-0000-4000-8000-000000000011",
|
|
79
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
80
|
+
"code": "lte",
|
|
81
|
+
"name_uz": "Kichik yoki teng",
|
|
82
|
+
"name_ru": "Меньше или равно",
|
|
83
|
+
"priority": 20,
|
|
84
|
+
"conditions": [
|
|
85
|
+
{
|
|
86
|
+
"param": "prokat",
|
|
87
|
+
"op": "<=",
|
|
88
|
+
"value": 78.5
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
"recommendation_kind": "ATTENTION",
|
|
92
|
+
"recommendation_ref": null,
|
|
93
|
+
"message_uz": "uz {value}",
|
|
94
|
+
"message_ru": "ru {value}"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "00000000-0000-4000-8000-000000000012",
|
|
98
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
99
|
+
"code": "eq",
|
|
100
|
+
"name_uz": "Teng",
|
|
101
|
+
"name_ru": "Равно",
|
|
102
|
+
"priority": 30,
|
|
103
|
+
"conditions": [
|
|
104
|
+
{
|
|
105
|
+
"param": "prokat",
|
|
106
|
+
"op": "=",
|
|
107
|
+
"value": 78.5
|
|
108
|
+
}
|
|
109
|
+
],
|
|
110
|
+
"recommendation_kind": "ATTENTION",
|
|
111
|
+
"recommendation_ref": null,
|
|
112
|
+
"message_uz": "uz",
|
|
113
|
+
"message_ru": "ru"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"id": "00000000-0000-4000-8000-000000000013",
|
|
117
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
118
|
+
"code": "gt",
|
|
119
|
+
"name_uz": "Katta",
|
|
120
|
+
"name_ru": "Больше",
|
|
121
|
+
"priority": 40,
|
|
122
|
+
"conditions": [
|
|
123
|
+
{
|
|
124
|
+
"param": "prokat",
|
|
125
|
+
"op": ">",
|
|
126
|
+
"value": 78.5
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
"recommendation_kind": "ATTENTION",
|
|
130
|
+
"recommendation_ref": null,
|
|
131
|
+
"message_uz": "uz",
|
|
132
|
+
"message_ru": "ru"
|
|
133
|
+
}
|
|
134
|
+
],
|
|
135
|
+
"values": {
|
|
136
|
+
"prokat": "78.5"
|
|
137
|
+
},
|
|
138
|
+
"expect": [
|
|
139
|
+
{
|
|
140
|
+
"code": "lt",
|
|
141
|
+
"kind": "ATTENTION",
|
|
142
|
+
"ref": null,
|
|
143
|
+
"priority": 10,
|
|
144
|
+
"matched": {
|
|
145
|
+
"prokat": "78.5"
|
|
146
|
+
},
|
|
147
|
+
"message_uz": "Prokat 78.5",
|
|
148
|
+
"message_ru": "Прокат 78.5"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"code": "lte",
|
|
152
|
+
"kind": "ATTENTION",
|
|
153
|
+
"ref": null,
|
|
154
|
+
"priority": 20,
|
|
155
|
+
"matched": {
|
|
156
|
+
"prokat": "78.5"
|
|
157
|
+
},
|
|
158
|
+
"message_uz": "uz 78.5",
|
|
159
|
+
"message_ru": "ru 78.5"
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"code": "eq",
|
|
163
|
+
"kind": "ATTENTION",
|
|
164
|
+
"ref": null,
|
|
165
|
+
"priority": 30,
|
|
166
|
+
"matched": {
|
|
167
|
+
"prokat": "78.5"
|
|
168
|
+
},
|
|
169
|
+
"message_uz": "uz",
|
|
170
|
+
"message_ru": "ru"
|
|
171
|
+
}
|
|
172
|
+
]
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"name": "between is inclusive, and the depot may type the bounds the wrong way round",
|
|
176
|
+
"rules": [
|
|
177
|
+
{
|
|
178
|
+
"id": "00000000-0000-4000-8000-000000000020",
|
|
179
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
180
|
+
"code": "range",
|
|
181
|
+
"name_uz": "Oraliq",
|
|
182
|
+
"name_ru": "Диапазон",
|
|
183
|
+
"priority": 10,
|
|
184
|
+
"conditions": [
|
|
185
|
+
{
|
|
186
|
+
"param": "bandaj",
|
|
187
|
+
"op": "between",
|
|
188
|
+
"value": 40,
|
|
189
|
+
"value2": 36
|
|
190
|
+
}
|
|
191
|
+
],
|
|
192
|
+
"recommendation_kind": "OPERATION",
|
|
193
|
+
"recommendation_ref": "TURN",
|
|
194
|
+
"message_uz": "uz {value}",
|
|
195
|
+
"message_ru": "ru {value}"
|
|
196
|
+
}
|
|
197
|
+
],
|
|
198
|
+
"values": {
|
|
199
|
+
"bandaj": "36"
|
|
200
|
+
},
|
|
201
|
+
"expect": [
|
|
202
|
+
{
|
|
203
|
+
"code": "range",
|
|
204
|
+
"kind": "OPERATION",
|
|
205
|
+
"ref": "TURN",
|
|
206
|
+
"priority": 10,
|
|
207
|
+
"matched": {
|
|
208
|
+
"bandaj": "36"
|
|
209
|
+
},
|
|
210
|
+
"message_uz": "uz 36",
|
|
211
|
+
"message_ru": "ru 36"
|
|
212
|
+
}
|
|
213
|
+
]
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"name": "between with no upper bound never fires",
|
|
217
|
+
"rules": [
|
|
218
|
+
{
|
|
219
|
+
"id": "00000000-0000-4000-8000-000000000021",
|
|
220
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
221
|
+
"code": "halfrange",
|
|
222
|
+
"name_uz": "Oraliq",
|
|
223
|
+
"name_ru": "Диапазон",
|
|
224
|
+
"priority": 10,
|
|
225
|
+
"conditions": [
|
|
226
|
+
{
|
|
227
|
+
"param": "bandaj",
|
|
228
|
+
"op": "between",
|
|
229
|
+
"value": 36
|
|
230
|
+
}
|
|
231
|
+
],
|
|
232
|
+
"recommendation_kind": "ATTENTION",
|
|
233
|
+
"recommendation_ref": null,
|
|
234
|
+
"message_uz": "uz",
|
|
235
|
+
"message_ru": "ru"
|
|
236
|
+
}
|
|
237
|
+
],
|
|
238
|
+
"values": {
|
|
239
|
+
"bandaj": "38"
|
|
240
|
+
},
|
|
241
|
+
"expect": []
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"name": "an operator we do not know is not an operator",
|
|
245
|
+
"rules": [
|
|
246
|
+
{
|
|
247
|
+
"id": "00000000-0000-4000-8000-000000000022",
|
|
248
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
249
|
+
"code": "bogus",
|
|
250
|
+
"name_uz": "Qoida",
|
|
251
|
+
"name_ru": "Правило",
|
|
252
|
+
"priority": 10,
|
|
253
|
+
"conditions": [
|
|
254
|
+
{
|
|
255
|
+
"param": "prokat",
|
|
256
|
+
"op": "≈",
|
|
257
|
+
"value": 80
|
|
258
|
+
}
|
|
259
|
+
],
|
|
260
|
+
"recommendation_kind": "ATTENTION",
|
|
261
|
+
"recommendation_ref": null,
|
|
262
|
+
"message_uz": "uz",
|
|
263
|
+
"message_ru": "ru"
|
|
264
|
+
}
|
|
265
|
+
],
|
|
266
|
+
"values": {
|
|
267
|
+
"prokat": "80"
|
|
268
|
+
},
|
|
269
|
+
"expect": []
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"name": "pair field, side any: one wheel is enough and only that wheel is matched",
|
|
273
|
+
"rules": [
|
|
274
|
+
{
|
|
275
|
+
"id": "00000000-0000-4000-8000-000000000030",
|
|
276
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
277
|
+
"code": "any",
|
|
278
|
+
"name_uz": "Bittasi",
|
|
279
|
+
"name_ru": "Любая",
|
|
280
|
+
"priority": 10,
|
|
281
|
+
"conditions": [
|
|
282
|
+
{
|
|
283
|
+
"param": "bandaj",
|
|
284
|
+
"op": "<",
|
|
285
|
+
"value": 38,
|
|
286
|
+
"side": "any"
|
|
287
|
+
}
|
|
288
|
+
],
|
|
289
|
+
"recommendation_kind": "DISPOSITION",
|
|
290
|
+
"recommendation_ref": "SCRAP",
|
|
291
|
+
"message_uz": "uz {value}",
|
|
292
|
+
"message_ru": "ru {value}"
|
|
293
|
+
}
|
|
294
|
+
],
|
|
295
|
+
"values": {
|
|
296
|
+
"bandaj_chap": "36",
|
|
297
|
+
"bandaj_ong": "41"
|
|
298
|
+
},
|
|
299
|
+
"expect": [
|
|
300
|
+
{
|
|
301
|
+
"code": "any",
|
|
302
|
+
"kind": "DISPOSITION",
|
|
303
|
+
"ref": "SCRAP",
|
|
304
|
+
"priority": 10,
|
|
305
|
+
"matched": {
|
|
306
|
+
"bandaj_chap": "36"
|
|
307
|
+
},
|
|
308
|
+
"message_uz": "uz 36",
|
|
309
|
+
"message_ru": "ru 36"
|
|
310
|
+
}
|
|
311
|
+
]
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
"name": "side both: one bad wheel is not both",
|
|
315
|
+
"rules": [
|
|
316
|
+
{
|
|
317
|
+
"id": "00000000-0000-4000-8000-000000000031",
|
|
318
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
319
|
+
"code": "both",
|
|
320
|
+
"name_uz": "Ikkisi",
|
|
321
|
+
"name_ru": "Обе",
|
|
322
|
+
"priority": 10,
|
|
323
|
+
"conditions": [
|
|
324
|
+
{
|
|
325
|
+
"param": "bandaj",
|
|
326
|
+
"op": "<",
|
|
327
|
+
"value": 38,
|
|
328
|
+
"side": "both"
|
|
329
|
+
}
|
|
330
|
+
],
|
|
331
|
+
"recommendation_kind": "ATTENTION",
|
|
332
|
+
"recommendation_ref": null,
|
|
333
|
+
"message_uz": "uz",
|
|
334
|
+
"message_ru": "ru"
|
|
335
|
+
}
|
|
336
|
+
],
|
|
337
|
+
"values": {
|
|
338
|
+
"bandaj_chap": "36",
|
|
339
|
+
"bandaj_ong": "41"
|
|
340
|
+
},
|
|
341
|
+
"expect": []
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
"name": "side both: a wheel that was never measured is not a passing wheel",
|
|
345
|
+
"rules": [
|
|
346
|
+
{
|
|
347
|
+
"id": "00000000-0000-4000-8000-000000000032",
|
|
348
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
349
|
+
"code": "both",
|
|
350
|
+
"name_uz": "Ikkisi",
|
|
351
|
+
"name_ru": "Обе",
|
|
352
|
+
"priority": 10,
|
|
353
|
+
"conditions": [
|
|
354
|
+
{
|
|
355
|
+
"param": "bandaj",
|
|
356
|
+
"op": "<",
|
|
357
|
+
"value": 38,
|
|
358
|
+
"side": "both"
|
|
359
|
+
}
|
|
360
|
+
],
|
|
361
|
+
"recommendation_kind": "ATTENTION",
|
|
362
|
+
"recommendation_ref": null,
|
|
363
|
+
"message_uz": "uz",
|
|
364
|
+
"message_ru": "ru"
|
|
365
|
+
}
|
|
366
|
+
],
|
|
367
|
+
"values": {
|
|
368
|
+
"bandaj_chap": "36"
|
|
369
|
+
},
|
|
370
|
+
"expect": []
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
"name": "side both: both wheels bad, both echoed in matched",
|
|
374
|
+
"rules": [
|
|
375
|
+
{
|
|
376
|
+
"id": "00000000-0000-4000-8000-000000000033",
|
|
377
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
378
|
+
"code": "both",
|
|
379
|
+
"name_uz": "Ikkisi",
|
|
380
|
+
"name_ru": "Обе",
|
|
381
|
+
"priority": 10,
|
|
382
|
+
"conditions": [
|
|
383
|
+
{
|
|
384
|
+
"param": "bandaj",
|
|
385
|
+
"op": "<",
|
|
386
|
+
"value": 38,
|
|
387
|
+
"side": "both"
|
|
388
|
+
}
|
|
389
|
+
],
|
|
390
|
+
"recommendation_kind": "ATTENTION",
|
|
391
|
+
"recommendation_ref": null,
|
|
392
|
+
"message_uz": "uz",
|
|
393
|
+
"message_ru": "ru"
|
|
394
|
+
}
|
|
395
|
+
],
|
|
396
|
+
"values": {
|
|
397
|
+
"bandaj_chap": "36",
|
|
398
|
+
"bandaj_ong": "37"
|
|
399
|
+
},
|
|
400
|
+
"expect": [
|
|
401
|
+
{
|
|
402
|
+
"code": "both",
|
|
403
|
+
"kind": "ATTENTION",
|
|
404
|
+
"ref": null,
|
|
405
|
+
"priority": 10,
|
|
406
|
+
"matched": {
|
|
407
|
+
"bandaj_chap": "36",
|
|
408
|
+
"bandaj_ong": "37"
|
|
409
|
+
},
|
|
410
|
+
"message_uz": "uz",
|
|
411
|
+
"message_ru": "ru"
|
|
412
|
+
}
|
|
413
|
+
]
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
"name": "side chap looks at the left wheel only",
|
|
417
|
+
"rules": [
|
|
418
|
+
{
|
|
419
|
+
"id": "00000000-0000-4000-8000-000000000034",
|
|
420
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
421
|
+
"code": "left",
|
|
422
|
+
"name_uz": "Chap",
|
|
423
|
+
"name_ru": "Левое",
|
|
424
|
+
"priority": 10,
|
|
425
|
+
"conditions": [
|
|
426
|
+
{
|
|
427
|
+
"param": "bandaj",
|
|
428
|
+
"op": "<",
|
|
429
|
+
"value": 38,
|
|
430
|
+
"side": "chap"
|
|
431
|
+
}
|
|
432
|
+
],
|
|
433
|
+
"recommendation_kind": "ATTENTION",
|
|
434
|
+
"recommendation_ref": null,
|
|
435
|
+
"message_uz": "uz",
|
|
436
|
+
"message_ru": "ru"
|
|
437
|
+
}
|
|
438
|
+
],
|
|
439
|
+
"values": {
|
|
440
|
+
"bandaj_chap": "41",
|
|
441
|
+
"bandaj_ong": "36"
|
|
442
|
+
},
|
|
443
|
+
"expect": []
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
"name": "a condition written against a plain field ignores side",
|
|
447
|
+
"rules": [
|
|
448
|
+
{
|
|
449
|
+
"id": "00000000-0000-4000-8000-000000000035",
|
|
450
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
451
|
+
"code": "plain",
|
|
452
|
+
"name_uz": "Oddiy",
|
|
453
|
+
"name_ru": "Простое",
|
|
454
|
+
"priority": 10,
|
|
455
|
+
"conditions": [
|
|
456
|
+
{
|
|
457
|
+
"param": "prokat",
|
|
458
|
+
"op": "<",
|
|
459
|
+
"value": 80,
|
|
460
|
+
"side": "both"
|
|
461
|
+
}
|
|
462
|
+
],
|
|
463
|
+
"recommendation_kind": "ATTENTION",
|
|
464
|
+
"recommendation_ref": null,
|
|
465
|
+
"message_uz": "uz",
|
|
466
|
+
"message_ru": "ru"
|
|
467
|
+
}
|
|
468
|
+
],
|
|
469
|
+
"values": {
|
|
470
|
+
"prokat": "78"
|
|
471
|
+
},
|
|
472
|
+
"expect": [
|
|
473
|
+
{
|
|
474
|
+
"code": "plain",
|
|
475
|
+
"kind": "ATTENTION",
|
|
476
|
+
"ref": null,
|
|
477
|
+
"priority": 10,
|
|
478
|
+
"matched": {
|
|
479
|
+
"prokat": "78"
|
|
480
|
+
},
|
|
481
|
+
"message_uz": "uz",
|
|
482
|
+
"message_ru": "ru"
|
|
483
|
+
}
|
|
484
|
+
]
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
"name": "several conditions are AND, and every match is collected",
|
|
488
|
+
"rules": [
|
|
489
|
+
{
|
|
490
|
+
"id": "00000000-0000-4000-8000-000000000040",
|
|
491
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
492
|
+
"code": "and",
|
|
493
|
+
"name_uz": "Va",
|
|
494
|
+
"name_ru": "И",
|
|
495
|
+
"priority": 10,
|
|
496
|
+
"conditions": [
|
|
497
|
+
{
|
|
498
|
+
"param": "prokat",
|
|
499
|
+
"op": "<",
|
|
500
|
+
"value": 80
|
|
501
|
+
},
|
|
502
|
+
{
|
|
503
|
+
"param": "greben",
|
|
504
|
+
"op": ">",
|
|
505
|
+
"value": 24
|
|
506
|
+
}
|
|
507
|
+
],
|
|
508
|
+
"recommendation_kind": "ATTENTION",
|
|
509
|
+
"recommendation_ref": null,
|
|
510
|
+
"message_uz": "uz {value}",
|
|
511
|
+
"message_ru": "ru {value}"
|
|
512
|
+
}
|
|
513
|
+
],
|
|
514
|
+
"values": {
|
|
515
|
+
"prokat": "78",
|
|
516
|
+
"greben": "25"
|
|
517
|
+
},
|
|
518
|
+
"expect": [
|
|
519
|
+
{
|
|
520
|
+
"code": "and",
|
|
521
|
+
"kind": "ATTENTION",
|
|
522
|
+
"ref": null,
|
|
523
|
+
"priority": 10,
|
|
524
|
+
"matched": {
|
|
525
|
+
"prokat": "78",
|
|
526
|
+
"greben": "25"
|
|
527
|
+
},
|
|
528
|
+
"message_uz": "uz 78",
|
|
529
|
+
"message_ru": "ru 78"
|
|
530
|
+
}
|
|
531
|
+
]
|
|
532
|
+
},
|
|
533
|
+
{
|
|
534
|
+
"name": "one failing condition sinks the rule",
|
|
535
|
+
"rules": [
|
|
536
|
+
{
|
|
537
|
+
"id": "00000000-0000-4000-8000-000000000041",
|
|
538
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
539
|
+
"code": "and",
|
|
540
|
+
"name_uz": "Va",
|
|
541
|
+
"name_ru": "И",
|
|
542
|
+
"priority": 10,
|
|
543
|
+
"conditions": [
|
|
544
|
+
{
|
|
545
|
+
"param": "prokat",
|
|
546
|
+
"op": "<",
|
|
547
|
+
"value": 80
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
"param": "greben",
|
|
551
|
+
"op": ">",
|
|
552
|
+
"value": 24
|
|
553
|
+
}
|
|
554
|
+
],
|
|
555
|
+
"recommendation_kind": "ATTENTION",
|
|
556
|
+
"recommendation_ref": null,
|
|
557
|
+
"message_uz": "uz",
|
|
558
|
+
"message_ru": "ru"
|
|
559
|
+
}
|
|
560
|
+
],
|
|
561
|
+
"values": {
|
|
562
|
+
"prokat": "78",
|
|
563
|
+
"greben": "23"
|
|
564
|
+
},
|
|
565
|
+
"expect": []
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
"name": "order is priority first, then code — not the order rules were given",
|
|
569
|
+
"rules": [
|
|
570
|
+
{
|
|
571
|
+
"id": "00000000-0000-4000-8000-000000000050",
|
|
572
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
573
|
+
"code": "zebra",
|
|
574
|
+
"name_uz": "Z",
|
|
575
|
+
"name_ru": "Z",
|
|
576
|
+
"priority": 5,
|
|
577
|
+
"conditions": [
|
|
578
|
+
{
|
|
579
|
+
"param": "prokat",
|
|
580
|
+
"op": "<",
|
|
581
|
+
"value": 100
|
|
582
|
+
}
|
|
583
|
+
],
|
|
584
|
+
"recommendation_kind": "ATTENTION",
|
|
585
|
+
"recommendation_ref": null,
|
|
586
|
+
"message_uz": "uz",
|
|
587
|
+
"message_ru": "ru"
|
|
588
|
+
},
|
|
589
|
+
{
|
|
590
|
+
"id": "00000000-0000-4000-8000-000000000051",
|
|
591
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
592
|
+
"code": "beta",
|
|
593
|
+
"name_uz": "B",
|
|
594
|
+
"name_ru": "B",
|
|
595
|
+
"priority": 90,
|
|
596
|
+
"conditions": [
|
|
597
|
+
{
|
|
598
|
+
"param": "prokat",
|
|
599
|
+
"op": "<",
|
|
600
|
+
"value": 100
|
|
601
|
+
}
|
|
602
|
+
],
|
|
603
|
+
"recommendation_kind": "ATTENTION",
|
|
604
|
+
"recommendation_ref": null,
|
|
605
|
+
"message_uz": "uz",
|
|
606
|
+
"message_ru": "ru"
|
|
607
|
+
},
|
|
608
|
+
{
|
|
609
|
+
"id": "00000000-0000-4000-8000-000000000052",
|
|
610
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
611
|
+
"code": "alpha",
|
|
612
|
+
"name_uz": "A",
|
|
613
|
+
"name_ru": "A",
|
|
614
|
+
"priority": 5,
|
|
615
|
+
"conditions": [
|
|
616
|
+
{
|
|
617
|
+
"param": "prokat",
|
|
618
|
+
"op": "<",
|
|
619
|
+
"value": 100
|
|
620
|
+
}
|
|
621
|
+
],
|
|
622
|
+
"recommendation_kind": "ATTENTION",
|
|
623
|
+
"recommendation_ref": null,
|
|
624
|
+
"message_uz": "uz",
|
|
625
|
+
"message_ru": "ru"
|
|
626
|
+
}
|
|
627
|
+
],
|
|
628
|
+
"values": {
|
|
629
|
+
"prokat": "78"
|
|
630
|
+
},
|
|
631
|
+
"expect": [
|
|
632
|
+
{
|
|
633
|
+
"code": "alpha",
|
|
634
|
+
"kind": "ATTENTION",
|
|
635
|
+
"ref": null,
|
|
636
|
+
"priority": 5,
|
|
637
|
+
"matched": {
|
|
638
|
+
"prokat": "78"
|
|
639
|
+
},
|
|
640
|
+
"message_uz": "uz",
|
|
641
|
+
"message_ru": "ru"
|
|
642
|
+
},
|
|
643
|
+
{
|
|
644
|
+
"code": "zebra",
|
|
645
|
+
"kind": "ATTENTION",
|
|
646
|
+
"ref": null,
|
|
647
|
+
"priority": 5,
|
|
648
|
+
"matched": {
|
|
649
|
+
"prokat": "78"
|
|
650
|
+
},
|
|
651
|
+
"message_uz": "uz",
|
|
652
|
+
"message_ru": "ru"
|
|
653
|
+
},
|
|
654
|
+
{
|
|
655
|
+
"code": "beta",
|
|
656
|
+
"kind": "ATTENTION",
|
|
657
|
+
"ref": null,
|
|
658
|
+
"priority": 90,
|
|
659
|
+
"matched": {
|
|
660
|
+
"prokat": "78"
|
|
661
|
+
},
|
|
662
|
+
"message_uz": "uz",
|
|
663
|
+
"message_ru": "ru"
|
|
664
|
+
}
|
|
665
|
+
]
|
|
666
|
+
},
|
|
667
|
+
{
|
|
668
|
+
"name": "the depot types a comma; the reading is still a number, and matched keeps what was stored",
|
|
669
|
+
"rules": [
|
|
670
|
+
{
|
|
671
|
+
"id": "00000000-0000-4000-8000-000000000060",
|
|
672
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
673
|
+
"code": "comma",
|
|
674
|
+
"name_uz": "Vergul",
|
|
675
|
+
"name_ru": "Запятая",
|
|
676
|
+
"priority": 10,
|
|
677
|
+
"conditions": [
|
|
678
|
+
{
|
|
679
|
+
"param": "prokat",
|
|
680
|
+
"op": "<",
|
|
681
|
+
"value": 80
|
|
682
|
+
}
|
|
683
|
+
],
|
|
684
|
+
"recommendation_kind": "ATTENTION",
|
|
685
|
+
"recommendation_ref": null,
|
|
686
|
+
"message_uz": "uz {value}",
|
|
687
|
+
"message_ru": "ru {value}"
|
|
688
|
+
}
|
|
689
|
+
],
|
|
690
|
+
"values": {
|
|
691
|
+
"prokat": "78,5"
|
|
692
|
+
},
|
|
693
|
+
"expect": [
|
|
694
|
+
{
|
|
695
|
+
"code": "comma",
|
|
696
|
+
"kind": "ATTENTION",
|
|
697
|
+
"ref": null,
|
|
698
|
+
"priority": 10,
|
|
699
|
+
"matched": {
|
|
700
|
+
"prokat": "78,5"
|
|
701
|
+
},
|
|
702
|
+
"message_uz": "uz 78,5",
|
|
703
|
+
"message_ru": "ru 78,5"
|
|
704
|
+
}
|
|
705
|
+
]
|
|
706
|
+
},
|
|
707
|
+
{
|
|
708
|
+
"name": "a stray brace in the depot's own wording must not raise",
|
|
709
|
+
"rules": [
|
|
710
|
+
{
|
|
711
|
+
"id": "00000000-0000-4000-8000-000000000061",
|
|
712
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
713
|
+
"code": "brace",
|
|
714
|
+
"name_uz": "Qavs",
|
|
715
|
+
"name_ru": "Скобка",
|
|
716
|
+
"priority": 10,
|
|
717
|
+
"conditions": [
|
|
718
|
+
{
|
|
719
|
+
"param": "prokat",
|
|
720
|
+
"op": "<",
|
|
721
|
+
"value": 80
|
|
722
|
+
}
|
|
723
|
+
],
|
|
724
|
+
"recommendation_kind": "ATTENTION",
|
|
725
|
+
"recommendation_ref": null,
|
|
726
|
+
"message_uz": "{ {value} } {oops}",
|
|
727
|
+
"message_ru": "{ {value} } {oops}"
|
|
728
|
+
}
|
|
729
|
+
],
|
|
730
|
+
"values": {
|
|
731
|
+
"prokat": "78"
|
|
732
|
+
},
|
|
733
|
+
"expect": [
|
|
734
|
+
{
|
|
735
|
+
"code": "brace",
|
|
736
|
+
"kind": "ATTENTION",
|
|
737
|
+
"ref": null,
|
|
738
|
+
"priority": 10,
|
|
739
|
+
"matched": {
|
|
740
|
+
"prokat": "78"
|
|
741
|
+
},
|
|
742
|
+
"message_uz": "{ 78 } {oops}",
|
|
743
|
+
"message_ru": "{ 78 } {oops}"
|
|
744
|
+
}
|
|
745
|
+
]
|
|
746
|
+
},
|
|
747
|
+
{
|
|
748
|
+
"name": "a blank reading is not a reading",
|
|
749
|
+
"rules": [
|
|
750
|
+
{
|
|
751
|
+
"id": "00000000-0000-4000-8000-000000000062",
|
|
752
|
+
"nomenclature_id": "00000000-0000-4000-8000-0000000000a1",
|
|
753
|
+
"code": "blank",
|
|
754
|
+
"name_uz": "Qoida",
|
|
755
|
+
"name_ru": "Правило",
|
|
756
|
+
"priority": 10,
|
|
757
|
+
"conditions": [
|
|
758
|
+
{
|
|
759
|
+
"param": "prokat",
|
|
760
|
+
"op": "<",
|
|
761
|
+
"value": 80
|
|
762
|
+
}
|
|
763
|
+
],
|
|
764
|
+
"recommendation_kind": "ATTENTION",
|
|
765
|
+
"recommendation_ref": null,
|
|
766
|
+
"message_uz": "uz",
|
|
767
|
+
"message_ru": "ru"
|
|
768
|
+
}
|
|
769
|
+
],
|
|
770
|
+
"values": {
|
|
771
|
+
"prokat": " "
|
|
772
|
+
},
|
|
773
|
+
"expect": []
|
|
774
|
+
}
|
|
775
|
+
]
|
|
776
|
+
}
|