@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,700 @@
1
+ {
2
+ "contractVersion": "3.3.0",
3
+ "state": {
4
+ "sessionId": "c25dcc9d-43bf-4aef-bdac-47686e417a71",
5
+ "alias": "CLINIC",
6
+ "title": "Запись к врачу",
7
+ "comment": "Запись пациентов на приём к врачу. Эксплицировать слоты, записи и приёмы для проектирования модуля записи и его проверок.\nL1. Исключено: уведомления (п. 6); невыразимо: отправленное напоминание.\nL2. Исключено: оплата (п. 7); невыразимо: оплаченный приём, стоимость.\nL3. Исключено: отмены и история записей; невыразимо: отменённая запись, неявка в прошлом месяце.\nDC1. слот: X4 и структуры S2, S3 — на слот ссылаются записи и приёмы; кортеж-слот пришлось бы повторять в каждой паре.\nDC2. время: день и минуты как Z — пересечение требует порядка и сравнения; календарные даты исключены (L3).\nDC3. приём: S5 и аксиома A5 — запись ≠ приём (п. 5): пациент может не прийти.\nDC4. специальность записи: без аксиомы — в требованиях нет правила о специальности при записи.\nDC5. первичная и повторная запись: S6 повторные записи; первичные — остальные записи — разбиение полное по построению; аксиома нужна только «S6 ⊆ записей».",
8
+ "createdAt": "2026-10-25T18:34:36.421Z",
9
+ "updatedAt": "2026-10-25T18:34:36.434Z",
10
+ "revisions": [
11
+ {
12
+ "revisionId": "43685dc4-d1b7-414f-9105-4b205d75fd10",
13
+ "at": "2026-10-25T18:34:36.430Z",
14
+ "message": "Запись к врачу: шаг 1"
15
+ },
16
+ {
17
+ "revisionId": "45b510ca-1378-4312-b004-6d9154bc1030",
18
+ "at": "2026-10-25T18:34:36.434Z",
19
+ "message": "Запись к врачу: шаг 2"
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": "Врачебные специальности (терапевт, хирург, …).",
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": "X4",
89
+ "cstType": "basic",
90
+ "definitionFormal": "",
91
+ "term": "слоты",
92
+ "definitionText": "",
93
+ "convention": "Слоты приёма: отрезок времени конкретного врача в конкретный день.",
94
+ "analysis": {
95
+ "success": true,
96
+ "type": {
97
+ "typeID": 5,
98
+ "base": {
99
+ "typeID": 3,
100
+ "baseID": "X4"
101
+ }
102
+ },
103
+ "valueClass": "value",
104
+ "diagnostics": []
105
+ }
106
+ },
107
+ {
108
+ "id": 5,
109
+ "alias": "S1",
110
+ "cstType": "structure",
111
+ "definitionFormal": "ℬ(X1×X2)",
112
+ "term": "специальности врача",
113
+ "definitionText": "",
114
+ "convention": "Пара (врач, специальность).",
115
+ "analysis": {
116
+ "success": true,
117
+ "type": {
118
+ "typeID": 5,
119
+ "base": {
120
+ "typeID": 4,
121
+ "factors": [
122
+ {
123
+ "typeID": 3,
124
+ "baseID": "X1"
125
+ },
126
+ {
127
+ "typeID": 3,
128
+ "baseID": "X2"
129
+ }
130
+ ]
131
+ }
132
+ },
133
+ "valueClass": "value",
134
+ "diagnostics": []
135
+ }
136
+ },
137
+ {
138
+ "id": 6,
139
+ "alias": "S2",
140
+ "cstType": "structure",
141
+ "definitionFormal": "ℬ(X4×X1)",
142
+ "term": "врач слота",
143
+ "definitionText": "",
144
+ "convention": "Пара (слот, врач): врач ведёт приём в слоте.",
145
+ "analysis": {
146
+ "success": true,
147
+ "type": {
148
+ "typeID": 5,
149
+ "base": {
150
+ "typeID": 4,
151
+ "factors": [
152
+ {
153
+ "typeID": 3,
154
+ "baseID": "X4"
155
+ },
156
+ {
157
+ "typeID": 3,
158
+ "baseID": "X1"
159
+ }
160
+ ]
161
+ }
162
+ },
163
+ "valueClass": "value",
164
+ "diagnostics": []
165
+ }
166
+ },
167
+ {
168
+ "id": 7,
169
+ "alias": "S3",
170
+ "cstType": "structure",
171
+ "definitionFormal": "ℬ(X4×Z×Z×Z)",
172
+ "term": "время слота",
173
+ "definitionText": "",
174
+ "convention": "Четвёрка (слот, день, начало, конец); начало и конец — минуты от начала дня.",
175
+ "analysis": {
176
+ "success": true,
177
+ "type": {
178
+ "typeID": 5,
179
+ "base": {
180
+ "typeID": 4,
181
+ "factors": [
182
+ {
183
+ "typeID": 3,
184
+ "baseID": "X4"
185
+ },
186
+ {
187
+ "typeID": 2,
188
+ "isOrdered": true,
189
+ "isArithmetic": true,
190
+ "isIntegerCompatible": true
191
+ },
192
+ {
193
+ "typeID": 2,
194
+ "isOrdered": true,
195
+ "isArithmetic": true,
196
+ "isIntegerCompatible": true
197
+ },
198
+ {
199
+ "typeID": 2,
200
+ "isOrdered": true,
201
+ "isArithmetic": true,
202
+ "isIntegerCompatible": true
203
+ }
204
+ ]
205
+ }
206
+ },
207
+ "valueClass": "value",
208
+ "diagnostics": []
209
+ }
210
+ },
211
+ {
212
+ "id": 8,
213
+ "alias": "S4",
214
+ "cstType": "structure",
215
+ "definitionFormal": "ℬ(X3×X4)",
216
+ "term": "записи",
217
+ "definitionText": "",
218
+ "convention": "Пара (пациент, слот): пациент записан на слот.",
219
+ "analysis": {
220
+ "success": true,
221
+ "type": {
222
+ "typeID": 5,
223
+ "base": {
224
+ "typeID": 4,
225
+ "factors": [
226
+ {
227
+ "typeID": 3,
228
+ "baseID": "X3"
229
+ },
230
+ {
231
+ "typeID": 3,
232
+ "baseID": "X4"
233
+ }
234
+ ]
235
+ }
236
+ },
237
+ "valueClass": "value",
238
+ "diagnostics": []
239
+ }
240
+ },
241
+ {
242
+ "id": 9,
243
+ "alias": "S5",
244
+ "cstType": "structure",
245
+ "definitionFormal": "ℬ(X3×X4)",
246
+ "term": "состоявшиеся приёмы",
247
+ "definitionText": "",
248
+ "convention": "Пара (пациент, слот): пациент пришёл на приём по записи.",
249
+ "analysis": {
250
+ "success": true,
251
+ "type": {
252
+ "typeID": 5,
253
+ "base": {
254
+ "typeID": 4,
255
+ "factors": [
256
+ {
257
+ "typeID": 3,
258
+ "baseID": "X3"
259
+ },
260
+ {
261
+ "typeID": 3,
262
+ "baseID": "X4"
263
+ }
264
+ ]
265
+ }
266
+ },
267
+ "valueClass": "value",
268
+ "diagnostics": []
269
+ }
270
+ },
271
+ {
272
+ "id": 10,
273
+ "alias": "F1",
274
+ "cstType": "function",
275
+ "definitionFormal": "[σ∈X4] Pr2,3,4(Fi1[{σ}](S3))",
276
+ "term": "время",
277
+ "definitionText": "День, начало и конец данного слота.",
278
+ "convention": "",
279
+ "analysis": {
280
+ "success": true,
281
+ "type": {
282
+ "typeID": 7,
283
+ "result": {
284
+ "typeID": 5,
285
+ "base": {
286
+ "typeID": 4,
287
+ "factors": [
288
+ {
289
+ "typeID": 2,
290
+ "isOrdered": true,
291
+ "isArithmetic": true,
292
+ "isIntegerCompatible": true
293
+ },
294
+ {
295
+ "typeID": 2,
296
+ "isOrdered": true,
297
+ "isArithmetic": true,
298
+ "isIntegerCompatible": true
299
+ },
300
+ {
301
+ "typeID": 2,
302
+ "isOrdered": true,
303
+ "isArithmetic": true,
304
+ "isIntegerCompatible": true
305
+ }
306
+ ]
307
+ }
308
+ },
309
+ "args": [
310
+ {
311
+ "alias": "σ",
312
+ "type": {
313
+ "typeID": 3,
314
+ "baseID": "X4"
315
+ }
316
+ }
317
+ ]
318
+ },
319
+ "valueClass": "value",
320
+ "diagnostics": []
321
+ }
322
+ },
323
+ {
324
+ "id": 11,
325
+ "alias": "P1",
326
+ "cstType": "predicate",
327
+ "definitionFormal": "[σ∈X4, τ∈X4] σ≠τ & ∃(d1,b1,e1)∈F1[σ] ∃(d2,b2,e2)∈F1[τ] (d1=d2 & b1<e2 & b2<e1)",
328
+ "term": "слоты пересекаются",
329
+ "definitionText": "Два разных слота в один день перекрываются по времени.",
330
+ "convention": "",
331
+ "analysis": {
332
+ "success": true,
333
+ "type": {
334
+ "typeID": 8,
335
+ "result": {
336
+ "typeID": 6
337
+ },
338
+ "args": [
339
+ {
340
+ "alias": "σ",
341
+ "type": {
342
+ "typeID": 3,
343
+ "baseID": "X4"
344
+ }
345
+ },
346
+ {
347
+ "alias": "τ",
348
+ "type": {
349
+ "typeID": 3,
350
+ "baseID": "X4"
351
+ }
352
+ }
353
+ ]
354
+ },
355
+ "valueClass": "value",
356
+ "diagnostics": []
357
+ }
358
+ },
359
+ {
360
+ "id": 12,
361
+ "alias": "F2",
362
+ "cstType": "function",
363
+ "definitionFormal": "[δ∈X1] Pr1(Fi2[{δ}](S2))",
364
+ "term": "слоты врача",
365
+ "definitionText": "Слоты, в которых ведёт приём данный врач.",
366
+ "convention": "",
367
+ "analysis": {
368
+ "success": true,
369
+ "type": {
370
+ "typeID": 7,
371
+ "result": {
372
+ "typeID": 5,
373
+ "base": {
374
+ "typeID": 3,
375
+ "baseID": "X4"
376
+ }
377
+ },
378
+ "args": [
379
+ {
380
+ "alias": "δ",
381
+ "type": {
382
+ "typeID": 3,
383
+ "baseID": "X1"
384
+ }
385
+ }
386
+ ]
387
+ },
388
+ "valueClass": "value",
389
+ "diagnostics": []
390
+ }
391
+ },
392
+ {
393
+ "id": 13,
394
+ "alias": "D1",
395
+ "cstType": "term",
396
+ "definitionFormal": "X4\\Pr2(S4)",
397
+ "term": "свободные слоты",
398
+ "definitionText": "Слоты без записи.",
399
+ "convention": "",
400
+ "analysis": {
401
+ "success": true,
402
+ "type": {
403
+ "typeID": 5,
404
+ "base": {
405
+ "typeID": 3,
406
+ "baseID": "X4"
407
+ }
408
+ },
409
+ "valueClass": "value",
410
+ "diagnostics": []
411
+ }
412
+ },
413
+ {
414
+ "id": 14,
415
+ "alias": "F3",
416
+ "cstType": "function",
417
+ "definitionFormal": "[π∈X3] Pr2(Fi1[{π}](S4))",
418
+ "term": "слоты записей пациента",
419
+ "definitionText": "Слоты, на которые записан данный пациент.",
420
+ "convention": "",
421
+ "analysis": {
422
+ "success": true,
423
+ "type": {
424
+ "typeID": 7,
425
+ "result": {
426
+ "typeID": 5,
427
+ "base": {
428
+ "typeID": 3,
429
+ "baseID": "X4"
430
+ }
431
+ },
432
+ "args": [
433
+ {
434
+ "alias": "π",
435
+ "type": {
436
+ "typeID": 3,
437
+ "baseID": "X3"
438
+ }
439
+ }
440
+ ]
441
+ },
442
+ "valueClass": "value",
443
+ "diagnostics": []
444
+ }
445
+ },
446
+ {
447
+ "id": 15,
448
+ "alias": "F4",
449
+ "cstType": "function",
450
+ "definitionFormal": "[π∈X3] D{σ∈D1 | ∀τ∈F3[π] ¬P1[σ,τ]}",
451
+ "term": "слоты, доступные пациенту",
452
+ "definitionText": "Свободные слоты, которые не пересекаются с другими записями пациента.",
453
+ "convention": "",
454
+ "analysis": {
455
+ "success": true,
456
+ "type": {
457
+ "typeID": 7,
458
+ "result": {
459
+ "typeID": 5,
460
+ "base": {
461
+ "typeID": 3,
462
+ "baseID": "X4"
463
+ }
464
+ },
465
+ "args": [
466
+ {
467
+ "alias": "π",
468
+ "type": {
469
+ "typeID": 3,
470
+ "baseID": "X3"
471
+ }
472
+ }
473
+ ]
474
+ },
475
+ "valueClass": "value",
476
+ "diagnostics": []
477
+ }
478
+ },
479
+ {
480
+ "id": 16,
481
+ "alias": "A1",
482
+ "cstType": "axiom",
483
+ "definitionFormal": "card(Pr2(S4))=card(S4)",
484
+ "term": "одна запись на слот",
485
+ "definitionText": "п. 3.",
486
+ "convention": "",
487
+ "analysis": {
488
+ "success": true,
489
+ "type": {
490
+ "typeID": 6
491
+ },
492
+ "valueClass": "value",
493
+ "diagnostics": []
494
+ }
495
+ },
496
+ {
497
+ "id": 17,
498
+ "alias": "A2",
499
+ "cstType": "axiom",
500
+ "definitionFormal": "∀δ∈X1 ∀σ,τ∈F2[δ] ¬P1[σ,τ]",
501
+ "term": "слоты врача не пересекаются",
502
+ "definitionText": "п. 2.",
503
+ "convention": "",
504
+ "analysis": {
505
+ "success": true,
506
+ "type": {
507
+ "typeID": 6
508
+ },
509
+ "valueClass": "value",
510
+ "diagnostics": []
511
+ }
512
+ },
513
+ {
514
+ "id": 18,
515
+ "alias": "A3",
516
+ "cstType": "axiom",
517
+ "definitionFormal": "card(S2)=card(Pr1(S2)) & Pr1(S2)=X4 & card(S3)=card(Pr1(S3)) & Pr1(S3)=X4",
518
+ "term": "у слота один врач и одно время",
519
+ "definitionText": "Каждый слот принадлежит ровно одному врачу и имеет ровно одно время.",
520
+ "convention": "",
521
+ "analysis": {
522
+ "success": true,
523
+ "type": {
524
+ "typeID": 6
525
+ },
526
+ "valueClass": "value",
527
+ "diagnostics": []
528
+ }
529
+ },
530
+ {
531
+ "id": 19,
532
+ "alias": "A4",
533
+ "cstType": "axiom",
534
+ "definitionFormal": "∀σ∈S3 pr3(σ)<pr4(σ)",
535
+ "term": "начало раньше конца",
536
+ "definitionText": "У слота положительная длительность.",
537
+ "convention": "",
538
+ "analysis": {
539
+ "success": true,
540
+ "type": {
541
+ "typeID": 6
542
+ },
543
+ "valueClass": "value",
544
+ "diagnostics": []
545
+ }
546
+ },
547
+ {
548
+ "id": 20,
549
+ "alias": "A5",
550
+ "cstType": "axiom",
551
+ "definitionFormal": "S5⊆S4",
552
+ "term": "приём только по записи",
553
+ "definitionText": "п. 5.",
554
+ "convention": "",
555
+ "analysis": {
556
+ "success": true,
557
+ "type": {
558
+ "typeID": 6
559
+ },
560
+ "valueClass": "value",
561
+ "diagnostics": []
562
+ }
563
+ },
564
+ {
565
+ "id": 21,
566
+ "alias": "F6",
567
+ "cstType": "function",
568
+ "definitionFormal": "[δ∈X1] Pr2(Fi1[{δ}](S1))",
569
+ "term": "специальности данного врача",
570
+ "definitionText": "Специальности, по которым ведёт приём данный врач.",
571
+ "convention": "",
572
+ "analysis": {
573
+ "success": true,
574
+ "type": {
575
+ "typeID": 7,
576
+ "result": {
577
+ "typeID": 5,
578
+ "base": {
579
+ "typeID": 3,
580
+ "baseID": "X2"
581
+ }
582
+ },
583
+ "args": [
584
+ {
585
+ "alias": "δ",
586
+ "type": {
587
+ "typeID": 3,
588
+ "baseID": "X1"
589
+ }
590
+ }
591
+ ]
592
+ },
593
+ "valueClass": "value",
594
+ "diagnostics": []
595
+ }
596
+ },
597
+ {
598
+ "id": 22,
599
+ "alias": "A7",
600
+ "cstType": "axiom",
601
+ "definitionFormal": "∀δ∈X1 F6[δ]≠∅",
602
+ "term": "у врача есть специальность",
603
+ "definitionText": "п. 1: у врача одна или несколько специальностей.",
604
+ "convention": "",
605
+ "analysis": {
606
+ "success": true,
607
+ "type": {
608
+ "typeID": 6
609
+ },
610
+ "valueClass": "value",
611
+ "diagnostics": []
612
+ }
613
+ },
614
+ {
615
+ "id": 23,
616
+ "alias": "S6",
617
+ "cstType": "structure",
618
+ "definitionFormal": "ℬ(X3×X4)",
619
+ "term": "повторные записи",
620
+ "definitionText": "",
621
+ "convention": "Пара (пациент, слот): запись отмечена как повторная. Остальные записи — первичные.",
622
+ "analysis": {
623
+ "success": true,
624
+ "type": {
625
+ "typeID": 5,
626
+ "base": {
627
+ "typeID": 4,
628
+ "factors": [
629
+ {
630
+ "typeID": 3,
631
+ "baseID": "X3"
632
+ },
633
+ {
634
+ "typeID": 3,
635
+ "baseID": "X4"
636
+ }
637
+ ]
638
+ }
639
+ },
640
+ "valueClass": "value",
641
+ "diagnostics": []
642
+ }
643
+ },
644
+ {
645
+ "id": 24,
646
+ "alias": "F5",
647
+ "cstType": "function",
648
+ "definitionFormal": "[π∈X3] Pr2(Fi1[Pr2(Fi1[{π}](S5))](S2))",
649
+ "term": "врачи, у которых пациент был",
650
+ "definitionText": "Врачи слотов состоявшихся приёмов данного пациента.",
651
+ "convention": "",
652
+ "analysis": {
653
+ "success": true,
654
+ "type": {
655
+ "typeID": 7,
656
+ "result": {
657
+ "typeID": 5,
658
+ "base": {
659
+ "typeID": 3,
660
+ "baseID": "X1"
661
+ }
662
+ },
663
+ "args": [
664
+ {
665
+ "alias": "π",
666
+ "type": {
667
+ "typeID": 3,
668
+ "baseID": "X3"
669
+ }
670
+ }
671
+ ]
672
+ },
673
+ "valueClass": "value",
674
+ "diagnostics": []
675
+ }
676
+ },
677
+ {
678
+ "id": 25,
679
+ "alias": "A6",
680
+ "cstType": "axiom",
681
+ "definitionFormal": "S6⊆S4 & ∀(π,σ)∈S6 Pr2(Fi1[{σ}](S2))⊆F5[π]",
682
+ "term": "повторная запись — к знакомому врачу",
683
+ "definitionText": "Повторная запись — это запись, и её врач уже принимал пациента (v2 п. 1).",
684
+ "convention": "",
685
+ "analysis": {
686
+ "success": true,
687
+ "type": {
688
+ "typeID": 6
689
+ },
690
+ "valueClass": "value",
691
+ "diagnostics": []
692
+ }
693
+ }
694
+ ],
695
+ "model": {
696
+ "items": []
697
+ }
698
+ },
699
+ "diagnostics": []
700
+ }