@rsconcept/rstool 1.7.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/README.md +7 -7
  2. package/dist/index.js +1 -1
  3. package/dist/mappers/model-adapter.d.ts +6 -2
  4. package/dist/mappers/model-adapter.js +28 -3
  5. package/dist/mappers/model-adapter.js.map +1 -1
  6. package/dist/mappers/schema-adapter.d.ts +1 -2
  7. package/dist/mappers/schema-adapter.js +1 -1
  8. package/dist/mappers/types.d.ts +4 -5
  9. package/dist/models/index.js +1 -1
  10. package/dist/models/rstool-agent.js +1 -2
  11. package/dist/{models-DG2uTaV_.js → models-D06g8LId.js} +6 -5
  12. package/dist/{models-DG2uTaV_.js.map → models-D06g8LId.js.map} +1 -1
  13. package/dist/{rsform-builder-DKwZfJvN.js → rsform-builder-BlXEe5Ow.js} +2 -2
  14. package/dist/{rsform-builder-DKwZfJvN.js.map → rsform-builder-BlXEe5Ow.js.map} +1 -1
  15. package/dist/session/session-store.d.ts +3 -3
  16. package/dist/session/session-store.js +1 -2
  17. package/dist/wrapper/client.d.ts +15 -9
  18. package/dist/wrapper/client.js +79 -12
  19. package/dist/wrapper/client.js.map +1 -1
  20. package/dist/wrapper/stdio-wrapper.d.ts +1 -1
  21. package/dist/wrapper/stdio-wrapper.js +18 -10
  22. package/dist/wrapper/stdio-wrapper.js.map +1 -1
  23. package/docs/BRIEF.md +93 -0
  24. package/docs/CONCEPTUAL-SCHEMA.md +17 -2
  25. package/docs/CONSTRUCTIONS.md +384 -0
  26. package/docs/DIAGNOSTICS.md +9 -8
  27. package/docs/DOMAIN.md +12 -0
  28. package/docs/METHOD.md +208 -0
  29. package/docs/MODEL-TESTING.md +48 -0
  30. package/docs/PORTAL-API.md +38 -285
  31. package/docs/PORTAL-MODELS.md +24 -0
  32. package/docs/PORTAL-OSS.md +56 -0
  33. package/docs/PORTAL-PUBLISH.md +39 -0
  34. package/docs/PORTAL-READ.md +301 -0
  35. package/docs/README.md +8 -4
  36. package/docs/REQUIREMENTS.md +61 -0
  37. package/docs/SYNTAX.md +5 -4
  38. package/docs/TYPIFICATION.md +12 -3
  39. package/docs/brief.schema.json +173 -0
  40. package/examples/README.md +16 -2
  41. package/examples/access-control/NOTES.md +23 -0
  42. package/examples/access-control/anti/collapsed.json +439 -0
  43. package/examples/access-control/anti/weakened.json +439 -0
  44. package/examples/access-control/brief-v1.json +231 -0
  45. package/examples/access-control/brief.json +310 -0
  46. package/examples/access-control/build-rsform.ts +151 -0
  47. package/examples/access-control/requirements-v1.md +9 -0
  48. package/examples/access-control/requirements-v2.md +4 -0
  49. package/examples/access-control/rsform-session-v1.json +439 -0
  50. package/examples/access-control/rsform-session.json +523 -0
  51. package/examples/audit-diagnostics.ts +9 -1
  52. package/examples/briefs.test.ts +126 -0
  53. package/examples/clinic-booking/NOTES.md +24 -0
  54. package/examples/clinic-booking/anti/collapsed.json +615 -0
  55. package/examples/clinic-booking/anti/species-as-genus.json +568 -0
  56. package/examples/clinic-booking/brief-v1.json +332 -0
  57. package/examples/clinic-booking/brief.json +405 -0
  58. package/examples/clinic-booking/build-rsform.ts +174 -0
  59. package/examples/clinic-booking/requirements-v1.md +9 -0
  60. package/examples/clinic-booking/requirements-v2.md +4 -0
  61. package/examples/clinic-booking/rsform-session-v1.json +615 -0
  62. package/examples/clinic-booking/rsform-session.json +700 -0
  63. package/examples/diagnostics-utils.ts +26 -0
  64. package/examples/kinship/brief.json +337 -0
  65. package/examples/kinship/build-rsform.ts +7 -4
  66. package/examples/kinship/rsform-session.json +20 -63
  67. package/examples/kinship/rsmodel-session.json +14 -14
  68. package/examples/kinship-subordination/NOTES.md +49 -0
  69. package/examples/kinship-subordination/brief.json +161 -0
  70. package/examples/kinship-subordination/build-rsform.ts +100 -0
  71. package/examples/kinship-subordination/rsform-session.json +795 -0
  72. package/examples/library-loans/NOTES.md +46 -0
  73. package/examples/library-loans/anti/collapsed.json +481 -0
  74. package/examples/library-loans/anti/species-as-genus.json +334 -0
  75. package/examples/library-loans/anti/uncovered.json +406 -0
  76. package/examples/library-loans/anti/weakened.json +464 -0
  77. package/examples/library-loans/brief-v1.json +340 -0
  78. package/examples/library-loans/brief.json +502 -0
  79. package/examples/library-loans/build-rsform.ts +239 -0
  80. package/examples/library-loans/requirements-v1.md +11 -0
  81. package/examples/library-loans/requirements-v2.md +5 -0
  82. package/examples/library-loans/rsform-session-v1.json +481 -0
  83. package/examples/library-loans/rsform-session.json +652 -0
  84. package/examples/library-loans/source-markup.md +18 -0
  85. package/examples/movd/brief.json +220 -0
  86. package/examples/movd/build-rsform.ts +5 -2
  87. package/examples/movd/rsform-session.json +14 -46
  88. package/examples/subordination/NOTES.md +59 -0
  89. package/examples/subordination/anti/collapsed.json +556 -0
  90. package/examples/subordination/anti/single-relation.json +125 -0
  91. package/examples/subordination/anti/transitive.json +573 -0
  92. package/examples/subordination/anti/weakened.json +539 -0
  93. package/examples/subordination/brief.json +386 -0
  94. package/examples/subordination/build-rsform.ts +63 -0
  95. package/examples/subordination/constants.ts +115 -0
  96. package/examples/subordination/rsform-session.json +556 -0
  97. package/examples/subordination/source-markup.md +19 -0
  98. package/examples/subordination/source.md +40 -0
  99. package/package.json +29 -20
  100. package/skills/INSTALL.md +28 -29
  101. package/skills/README.md +25 -10
  102. package/skills/rs-core/SKILL.md +56 -0
  103. package/skills/rs-explain/SKILL.md +28 -0
  104. package/skills/rs-explicate/SKILL.md +71 -0
  105. package/skills/rs-interpret/SKILL.md +67 -0
  106. package/skills/rs-portal/SKILL.md +51 -0
  107. package/skills/rs-review/SKILL.md +79 -0
  108. package/skills/rs-scope/SKILL.md +67 -0
  109. package/skills/rs-synthesis/SKILL.md +52 -0
  110. package/skills/rstool/SKILL.md +70 -0
  111. package/skills/rstool-helper/GUIDE.md +18 -272
  112. package/skills/rstool-helper/SKILL.md +8 -55
  113. package/skills/{rstool-helper → rstool-runtime}/EXAMPLES.md +40 -12
  114. package/skills/{rstool-helper → rstool-runtime}/REFERENCE.md +28 -7
  115. package/skills/rstool-runtime/SKILL.md +96 -0
  116. package/skills/scripts/brief-check.test.ts +165 -0
  117. package/skills/scripts/brief-check.ts +826 -0
  118. package/skills/scripts/check-brief.ts +94 -0
  119. package/skills/scripts/rstool-skills.mjs +119 -0
  120. package/skills/scripts/skill-stubs.test.ts +48 -0
  121. package/src/mappers/model-adapter.ts +34 -1
  122. package/src/models/rstool-agent.test.ts +95 -0
  123. package/src/wrapper/client.test.ts +43 -4
  124. package/src/wrapper/client.ts +95 -16
  125. package/src/wrapper/stdio-handler.test.ts +43 -0
  126. package/src/wrapper/stdio-handler.ts +19 -5
@@ -0,0 +1,652 @@
1
+ {
2
+ "contractVersion": "3.3.0",
3
+ "state": {
4
+ "sessionId": "e9db794d-3acb-4e53-a7bb-4d83c1f3b1d1",
5
+ "alias": "LIB",
6
+ "title": "Выдача книг",
7
+ "comment": "Выдача книг в библиотеке. Эксплицировать понятия выдачи и доступности для проектирования ИС: модель данных и проверки при сохранении; v2 — продления и брони.\nL1. Исключено: штрафы и оплата (п. 8); невыразимо: сумма штрафа, долг читателя в рублях.\nL2. Исключено: история выдач — только текущее состояние (п. 7); невыразимо: бывшие выдачи, сколько раз читатель брал издание, дата возврата.\nL3. Исключено: каталог и поиск (п. 9) — интерфейс, не предметная область; невыразимо: автор издания, название.\nDC1. основное отношение «выдача» S2: S2: читатель × экземпляр × день выдачи — просрочка требует дня, доступность — экземпляра; «один читатель у экземпляра» — аксиома A1, а не тип.\nDC2. срок выдачи: константа 14 в формуле D4 — п. 2: срок одинаков для всех.\nDC3. текущий день: S3: Z — просрочка — производное понятие, не неопределяемое.\nDC4. однозначность выдачи по экземпляру: аксиома A1 — п. 3.\nDC5. издание экземпляра: отношение S1 и аксиома A3 (однозначность и всюду определённость) — п. 1.\nDC6. запрет новой выдачи должнику: без аксиомы — это правило процедуры выдачи, а схема описывает состояние (L2).\nDC7. продления: S4: пара (экземпляр, номер продления) — S2 и сценарии v1 не меняются; число продлений — card, аксиома A5 простая.\nDC8. срок выдачи с продлениями: D4: 14 × (1 + число продлений) — v2 п. 1; без продлений совпадает с v1 — сценарии v1 проходят.\nDC9. бронь: S5: читатель × издание — бронируют издание, конкретный экземпляр неизвестен.",
8
+ "createdAt": "2026-10-25T18:34:34.407Z",
9
+ "updatedAt": "2026-10-25T18:34:34.417Z",
10
+ "revisions": [
11
+ {
12
+ "revisionId": "27a7f3cb-7852-4d49-8881-2cdbe4984589",
13
+ "at": "2026-10-25T18:34:34.411Z",
14
+ "message": "v1"
15
+ },
16
+ {
17
+ "revisionId": "4e76b044-2c2a-479d-94a0-404dd64f87a5",
18
+ "at": "2026-10-25T18:34:34.417Z",
19
+ "message": "v2: продления и брони"
20
+ }
21
+ ],
22
+ "items": [
23
+ {
24
+ "id": 1,
25
+ "alias": "X1",
26
+ "cstType": "basic",
27
+ "definitionFormal": "",
28
+ "term": "читатели",
29
+ "definitionText": "",
30
+ "convention": "Записанные читатели библиотеки.",
31
+ "analysis": {
32
+ "success": true,
33
+ "type": {
34
+ "typeID": 5,
35
+ "base": {
36
+ "typeID": 3,
37
+ "baseID": "X1"
38
+ }
39
+ },
40
+ "valueClass": "value",
41
+ "diagnostics": []
42
+ }
43
+ },
44
+ {
45
+ "id": 2,
46
+ "alias": "X2",
47
+ "cstType": "basic",
48
+ "definitionFormal": "",
49
+ "term": "экземпляры",
50
+ "definitionText": "",
51
+ "convention": "Физические экземпляры книг фонда (ТЗ 1).",
52
+ "analysis": {
53
+ "success": true,
54
+ "type": {
55
+ "typeID": 5,
56
+ "base": {
57
+ "typeID": 3,
58
+ "baseID": "X2"
59
+ }
60
+ },
61
+ "valueClass": "value",
62
+ "diagnostics": []
63
+ }
64
+ },
65
+ {
66
+ "id": 3,
67
+ "alias": "X3",
68
+ "cstType": "basic",
69
+ "definitionFormal": "",
70
+ "term": "издания",
71
+ "definitionText": "",
72
+ "convention": "Издания: книга в конкретном издании; у издания может быть много экземпляров.",
73
+ "analysis": {
74
+ "success": true,
75
+ "type": {
76
+ "typeID": 5,
77
+ "base": {
78
+ "typeID": 3,
79
+ "baseID": "X3"
80
+ }
81
+ },
82
+ "valueClass": "value",
83
+ "diagnostics": []
84
+ }
85
+ },
86
+ {
87
+ "id": 4,
88
+ "alias": "S1",
89
+ "cstType": "structure",
90
+ "definitionFormal": "ℬ(X2×X3)",
91
+ "term": "издание экземпляра",
92
+ "definitionText": "",
93
+ "convention": "Пара (экземпляр, издание): экземпляр — копия издания (ТЗ 1).",
94
+ "analysis": {
95
+ "success": true,
96
+ "type": {
97
+ "typeID": 5,
98
+ "base": {
99
+ "typeID": 4,
100
+ "factors": [
101
+ {
102
+ "typeID": 3,
103
+ "baseID": "X2"
104
+ },
105
+ {
106
+ "typeID": 3,
107
+ "baseID": "X3"
108
+ }
109
+ ]
110
+ }
111
+ },
112
+ "valueClass": "value",
113
+ "diagnostics": []
114
+ }
115
+ },
116
+ {
117
+ "id": 5,
118
+ "alias": "S2",
119
+ "cstType": "structure",
120
+ "definitionFormal": "ℬ(X1×X2×Z)",
121
+ "term": "выдачи",
122
+ "definitionText": "",
123
+ "convention": "Тройка (читатель, экземпляр, день выдачи) для экземпляров, которые сейчас на руках (ТЗ 2). Дни — номера дней.",
124
+ "analysis": {
125
+ "success": true,
126
+ "type": {
127
+ "typeID": 5,
128
+ "base": {
129
+ "typeID": 4,
130
+ "factors": [
131
+ {
132
+ "typeID": 3,
133
+ "baseID": "X1"
134
+ },
135
+ {
136
+ "typeID": 3,
137
+ "baseID": "X2"
138
+ },
139
+ {
140
+ "typeID": 2,
141
+ "isOrdered": true,
142
+ "isArithmetic": true,
143
+ "isIntegerCompatible": true
144
+ }
145
+ ]
146
+ }
147
+ },
148
+ "valueClass": "value",
149
+ "diagnostics": []
150
+ }
151
+ },
152
+ {
153
+ "id": 6,
154
+ "alias": "S3",
155
+ "cstType": "structure",
156
+ "definitionFormal": "Z",
157
+ "term": "текущий день",
158
+ "definitionText": "",
159
+ "convention": "Номер текущего дня в той же нумерации, что и дни выдачи.",
160
+ "analysis": {
161
+ "success": true,
162
+ "type": {
163
+ "typeID": 2,
164
+ "isOrdered": true,
165
+ "isArithmetic": true,
166
+ "isIntegerCompatible": true
167
+ },
168
+ "valueClass": "value",
169
+ "diagnostics": []
170
+ }
171
+ },
172
+ {
173
+ "id": 7,
174
+ "alias": "D1",
175
+ "cstType": "term",
176
+ "definitionFormal": "Pr2(S2)",
177
+ "term": "выданные экземпляры",
178
+ "definitionText": "Экземпляры, которые сейчас на руках у читателей.",
179
+ "convention": "",
180
+ "analysis": {
181
+ "success": true,
182
+ "type": {
183
+ "typeID": 5,
184
+ "base": {
185
+ "typeID": 3,
186
+ "baseID": "X2"
187
+ }
188
+ },
189
+ "valueClass": "value",
190
+ "diagnostics": []
191
+ }
192
+ },
193
+ {
194
+ "id": 8,
195
+ "alias": "D2",
196
+ "cstType": "term",
197
+ "definitionFormal": "X2\\D1",
198
+ "term": "доступные экземпляры",
199
+ "definitionText": "Экземпляры, которые сейчас не выданы.",
200
+ "convention": "",
201
+ "analysis": {
202
+ "success": true,
203
+ "type": {
204
+ "typeID": 5,
205
+ "base": {
206
+ "typeID": 3,
207
+ "baseID": "X2"
208
+ }
209
+ },
210
+ "valueClass": "value",
211
+ "diagnostics": []
212
+ }
213
+ },
214
+ {
215
+ "id": 9,
216
+ "alias": "F1",
217
+ "cstType": "function",
218
+ "definitionFormal": "[ε∈X3] Pr1(Fi2[{ε}](S1))",
219
+ "term": "экземпляры издания",
220
+ "definitionText": "Все экземпляры данного издания.",
221
+ "convention": "",
222
+ "analysis": {
223
+ "success": true,
224
+ "type": {
225
+ "typeID": 7,
226
+ "result": {
227
+ "typeID": 5,
228
+ "base": {
229
+ "typeID": 3,
230
+ "baseID": "X2"
231
+ }
232
+ },
233
+ "args": [
234
+ {
235
+ "alias": "ε",
236
+ "type": {
237
+ "typeID": 3,
238
+ "baseID": "X3"
239
+ }
240
+ }
241
+ ]
242
+ },
243
+ "valueClass": "value",
244
+ "diagnostics": []
245
+ }
246
+ },
247
+ {
248
+ "id": 10,
249
+ "alias": "F2",
250
+ "cstType": "function",
251
+ "definitionFormal": "[ε∈X3] F1[ε]\\D1",
252
+ "term": "доступные экземпляры издания",
253
+ "definitionText": "Невыданные экземпляры данного издания.",
254
+ "convention": "",
255
+ "analysis": {
256
+ "success": true,
257
+ "type": {
258
+ "typeID": 7,
259
+ "result": {
260
+ "typeID": 5,
261
+ "base": {
262
+ "typeID": 3,
263
+ "baseID": "X2"
264
+ }
265
+ },
266
+ "args": [
267
+ {
268
+ "alias": "ε",
269
+ "type": {
270
+ "typeID": 3,
271
+ "baseID": "X3"
272
+ }
273
+ }
274
+ ]
275
+ },
276
+ "valueClass": "value",
277
+ "diagnostics": []
278
+ }
279
+ },
280
+ {
281
+ "id": 11,
282
+ "alias": "D3",
283
+ "cstType": "term",
284
+ "definitionFormal": "D{ε∈X3 | F2[ε]≠∅}",
285
+ "term": "доступные издания",
286
+ "definitionText": "Издания, у которых есть хотя бы один доступный экземпляр.",
287
+ "convention": "",
288
+ "analysis": {
289
+ "success": true,
290
+ "type": {
291
+ "typeID": 5,
292
+ "base": {
293
+ "typeID": 3,
294
+ "baseID": "X3"
295
+ }
296
+ },
297
+ "valueClass": "value",
298
+ "diagnostics": []
299
+ }
300
+ },
301
+ {
302
+ "id": 12,
303
+ "alias": "F3",
304
+ "cstType": "function",
305
+ "definitionFormal": "[ξ∈X1] Pr2(Fi1[{ξ}](S2))",
306
+ "term": "экземпляры читателя",
307
+ "definitionText": "Экземпляры на руках у данного читателя.",
308
+ "convention": "",
309
+ "analysis": {
310
+ "success": true,
311
+ "type": {
312
+ "typeID": 7,
313
+ "result": {
314
+ "typeID": 5,
315
+ "base": {
316
+ "typeID": 3,
317
+ "baseID": "X2"
318
+ }
319
+ },
320
+ "args": [
321
+ {
322
+ "alias": "ξ",
323
+ "type": {
324
+ "typeID": 3,
325
+ "baseID": "X1"
326
+ }
327
+ }
328
+ ]
329
+ },
330
+ "valueClass": "value",
331
+ "diagnostics": []
332
+ }
333
+ },
334
+ {
335
+ "id": 13,
336
+ "alias": "D4",
337
+ "cstType": "term",
338
+ "definitionFormal": "D{σ∈S2 | pr3(σ) + 14 * (1 + F4[pr2(σ)]) < S3}",
339
+ "term": "просроченные выдачи",
340
+ "definitionText": "Выдачи, у которых истёк срок: 14 дней плюс по 14 дней за каждое продление.",
341
+ "convention": "",
342
+ "analysis": {
343
+ "success": true,
344
+ "type": {
345
+ "typeID": 5,
346
+ "base": {
347
+ "typeID": 4,
348
+ "factors": [
349
+ {
350
+ "typeID": 3,
351
+ "baseID": "X1"
352
+ },
353
+ {
354
+ "typeID": 3,
355
+ "baseID": "X2"
356
+ },
357
+ {
358
+ "typeID": 2,
359
+ "isOrdered": true,
360
+ "isArithmetic": true,
361
+ "isIntegerCompatible": true
362
+ }
363
+ ]
364
+ }
365
+ },
366
+ "valueClass": "value",
367
+ "diagnostics": []
368
+ }
369
+ },
370
+ {
371
+ "id": 14,
372
+ "alias": "D5",
373
+ "cstType": "term",
374
+ "definitionFormal": "Pr1(S2)",
375
+ "term": "читатели с выдачами",
376
+ "definitionText": "Читатели, у которых есть экземпляр на руках.",
377
+ "convention": "",
378
+ "analysis": {
379
+ "success": true,
380
+ "type": {
381
+ "typeID": 5,
382
+ "base": {
383
+ "typeID": 3,
384
+ "baseID": "X1"
385
+ }
386
+ },
387
+ "valueClass": "value",
388
+ "diagnostics": []
389
+ }
390
+ },
391
+ {
392
+ "id": 15,
393
+ "alias": "D6",
394
+ "cstType": "term",
395
+ "definitionFormal": "Pr1(D4)",
396
+ "term": "должники",
397
+ "definitionText": "Читатели с хотя бы одной просроченной выдачей.",
398
+ "convention": "",
399
+ "analysis": {
400
+ "success": true,
401
+ "type": {
402
+ "typeID": 5,
403
+ "base": {
404
+ "typeID": 3,
405
+ "baseID": "X1"
406
+ }
407
+ },
408
+ "valueClass": "value",
409
+ "diagnostics": []
410
+ }
411
+ },
412
+ {
413
+ "id": 16,
414
+ "alias": "A1",
415
+ "cstType": "axiom",
416
+ "definitionFormal": "card(Pr2(S2))=card(S2)",
417
+ "term": "экземпляр выдан одному читателю",
418
+ "definitionText": "Один экземпляр не выдан двум читателям и не записан дважды (ТЗ 3).",
419
+ "convention": "",
420
+ "analysis": {
421
+ "success": true,
422
+ "type": {
423
+ "typeID": 6
424
+ },
425
+ "valueClass": "value",
426
+ "diagnostics": []
427
+ }
428
+ },
429
+ {
430
+ "id": 17,
431
+ "alias": "A2",
432
+ "cstType": "axiom",
433
+ "definitionFormal": "∀ξ∈X1 card(F3[ξ])≤5",
434
+ "term": "не больше 5 экземпляров на руках",
435
+ "definitionText": "ТЗ 4.",
436
+ "convention": "",
437
+ "analysis": {
438
+ "success": true,
439
+ "type": {
440
+ "typeID": 6
441
+ },
442
+ "valueClass": "value",
443
+ "diagnostics": []
444
+ }
445
+ },
446
+ {
447
+ "id": 18,
448
+ "alias": "A3",
449
+ "cstType": "axiom",
450
+ "definitionFormal": "card(S1)=card(Pr1(S1)) & Pr1(S1)=X2",
451
+ "term": "у экземпляра одно издание",
452
+ "definitionText": "Каждый экземпляр — копия ровно одного издания (ТЗ 1).",
453
+ "convention": "",
454
+ "analysis": {
455
+ "success": true,
456
+ "type": {
457
+ "typeID": 6
458
+ },
459
+ "valueClass": "value",
460
+ "diagnostics": []
461
+ }
462
+ },
463
+ {
464
+ "id": 19,
465
+ "alias": "A4",
466
+ "cstType": "axiom",
467
+ "definitionFormal": "∀σ∈S2 pr3(σ)≤S3",
468
+ "term": "выдача не из будущего",
469
+ "definitionText": "День выдачи не позже текущего дня.",
470
+ "convention": "",
471
+ "analysis": {
472
+ "success": true,
473
+ "type": {
474
+ "typeID": 6
475
+ },
476
+ "valueClass": "value",
477
+ "diagnostics": []
478
+ }
479
+ },
480
+ {
481
+ "id": 20,
482
+ "alias": "S4",
483
+ "cstType": "structure",
484
+ "definitionFormal": "ℬ(X2×Z)",
485
+ "term": "продления",
486
+ "definitionText": "",
487
+ "convention": "Пара (экземпляр, номер продления 1, 2, …) для каждого сделанного продления текущей выдачи.",
488
+ "analysis": {
489
+ "success": true,
490
+ "type": {
491
+ "typeID": 5,
492
+ "base": {
493
+ "typeID": 4,
494
+ "factors": [
495
+ {
496
+ "typeID": 3,
497
+ "baseID": "X2"
498
+ },
499
+ {
500
+ "typeID": 2,
501
+ "isOrdered": true,
502
+ "isArithmetic": true,
503
+ "isIntegerCompatible": true
504
+ }
505
+ ]
506
+ }
507
+ },
508
+ "valueClass": "value",
509
+ "diagnostics": []
510
+ }
511
+ },
512
+ {
513
+ "id": 21,
514
+ "alias": "F4",
515
+ "cstType": "function",
516
+ "definitionFormal": "[ε∈X2] card(Fi1[{ε}](S4))",
517
+ "term": "число продлений",
518
+ "definitionText": "Сколько раз продлена выдача данного экземпляра.",
519
+ "convention": "",
520
+ "analysis": {
521
+ "success": true,
522
+ "type": {
523
+ "typeID": 7,
524
+ "result": {
525
+ "typeID": 2,
526
+ "isOrdered": true,
527
+ "isArithmetic": true,
528
+ "isIntegerCompatible": true
529
+ },
530
+ "args": [
531
+ {
532
+ "alias": "ε",
533
+ "type": {
534
+ "typeID": 3,
535
+ "baseID": "X2"
536
+ }
537
+ }
538
+ ]
539
+ },
540
+ "valueClass": "value",
541
+ "diagnostics": []
542
+ }
543
+ },
544
+ {
545
+ "id": 22,
546
+ "alias": "S5",
547
+ "cstType": "structure",
548
+ "definitionFormal": "ℬ(X1×X3)",
549
+ "term": "брони",
550
+ "definitionText": "",
551
+ "convention": "Пара (читатель, издание): читатель забронировал издание (v2 п. 2).",
552
+ "analysis": {
553
+ "success": true,
554
+ "type": {
555
+ "typeID": 5,
556
+ "base": {
557
+ "typeID": 4,
558
+ "factors": [
559
+ {
560
+ "typeID": 3,
561
+ "baseID": "X1"
562
+ },
563
+ {
564
+ "typeID": 3,
565
+ "baseID": "X3"
566
+ }
567
+ ]
568
+ }
569
+ },
570
+ "valueClass": "value",
571
+ "diagnostics": []
572
+ }
573
+ },
574
+ {
575
+ "id": 23,
576
+ "alias": "D7",
577
+ "cstType": "term",
578
+ "definitionFormal": "Pr2(S5)",
579
+ "term": "забронированные издания",
580
+ "definitionText": "Издания, на которые есть бронь.",
581
+ "convention": "",
582
+ "analysis": {
583
+ "success": true,
584
+ "type": {
585
+ "typeID": 5,
586
+ "base": {
587
+ "typeID": 3,
588
+ "baseID": "X3"
589
+ }
590
+ },
591
+ "valueClass": "value",
592
+ "diagnostics": []
593
+ }
594
+ },
595
+ {
596
+ "id": 24,
597
+ "alias": "A5",
598
+ "cstType": "axiom",
599
+ "definitionFormal": "∀ε∈X2 F4[ε]≤2",
600
+ "term": "не больше двух продлений",
601
+ "definitionText": "v2 п. 1.",
602
+ "convention": "",
603
+ "analysis": {
604
+ "success": true,
605
+ "type": {
606
+ "typeID": 6
607
+ },
608
+ "valueClass": "value",
609
+ "diagnostics": []
610
+ }
611
+ },
612
+ {
613
+ "id": 25,
614
+ "alias": "A6",
615
+ "cstType": "axiom",
616
+ "definitionFormal": "Pr1(S4)⊆D1",
617
+ "term": "продлевается только выданное",
618
+ "definitionText": "Продления есть только у экземпляров на руках.",
619
+ "convention": "",
620
+ "analysis": {
621
+ "success": true,
622
+ "type": {
623
+ "typeID": 6
624
+ },
625
+ "valueClass": "value",
626
+ "diagnostics": []
627
+ }
628
+ },
629
+ {
630
+ "id": 26,
631
+ "alias": "A7",
632
+ "cstType": "axiom",
633
+ "definitionFormal": "∀ρ∈S5 F2[pr2(ρ)]=∅",
634
+ "term": "бронь только недоступного издания",
635
+ "definitionText": "Бронируют издание, у которого нет доступных экземпляров (v2 п. 2).",
636
+ "convention": "",
637
+ "analysis": {
638
+ "success": true,
639
+ "type": {
640
+ "typeID": 6
641
+ },
642
+ "valueClass": "value",
643
+ "diagnostics": []
644
+ }
645
+ }
646
+ ],
647
+ "model": {
648
+ "items": []
649
+ }
650
+ },
651
+ "diagnostics": []
652
+ }
@@ -0,0 +1,18 @@
1
+ # Расчистка требований: «Выдача книг»
2
+
3
+ Этап 1, `rs-scope` шаг 2.
4
+
5
+ | Пункт | Статус | Блок | Куда в брифе |
6
+ | :---- | :-------------------- | :----------------- | :------------------------------------- |
7
+ | v1 1 | определение | сущности | ядро: `X2`, `X3`, `S1`; инвариант `I3` |
8
+ | v1 2 | определение + правило | основное отношение | ядро: `S2`; решение `DC1` |
9
+ | v1 3 | правило | основное отношение | инвариант `I1` |
10
+ | v1 4 | правило | основное отношение | инвариант `I2` |
11
+ | v1 5 | определение | состояния | `E2`, `E5`; различение `V2` |
12
+ | v1 6 | определение | состояния | `E3`, `E4`; различение `V1` |
13
+ | v1 7 | правило (динамика) | время, история | `L2` — исключено |
14
+ | v1 8 | правило | оплата | `L1` — исключено |
15
+ | v1 9 | нерелевантное | интерфейс | не входит в схему |
16
+ | v2 1 | правило | основное отношение | `E6`, инвариант `I5`, решение `DC5` |
17
+ | v2 2 | правило | бронь | `E7`, инвариант `I6` |
18
+ | v2 3 | правило | регрессия | сценарии v1 остаются |