@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.
- package/README.md +7 -7
- package/dist/index.js +1 -1
- package/dist/mappers/model-adapter.d.ts +6 -2
- package/dist/mappers/model-adapter.js +28 -3
- package/dist/mappers/model-adapter.js.map +1 -1
- package/dist/mappers/schema-adapter.d.ts +1 -2
- package/dist/mappers/schema-adapter.js +1 -1
- package/dist/mappers/types.d.ts +4 -5
- package/dist/models/index.js +1 -1
- package/dist/models/rstool-agent.js +1 -2
- package/dist/{models-DG2uTaV_.js → models-D06g8LId.js} +6 -5
- package/dist/{models-DG2uTaV_.js.map → models-D06g8LId.js.map} +1 -1
- package/dist/{rsform-builder-DKwZfJvN.js → rsform-builder-BlXEe5Ow.js} +2 -2
- package/dist/{rsform-builder-DKwZfJvN.js.map → rsform-builder-BlXEe5Ow.js.map} +1 -1
- package/dist/session/session-store.d.ts +3 -3
- package/dist/session/session-store.js +1 -2
- package/dist/wrapper/client.d.ts +15 -9
- package/dist/wrapper/client.js +79 -12
- package/dist/wrapper/client.js.map +1 -1
- package/dist/wrapper/stdio-wrapper.d.ts +1 -1
- package/dist/wrapper/stdio-wrapper.js +18 -10
- package/dist/wrapper/stdio-wrapper.js.map +1 -1
- package/docs/BRIEF.md +93 -0
- package/docs/CONCEPTUAL-SCHEMA.md +17 -2
- package/docs/CONSTRUCTIONS.md +384 -0
- package/docs/DIAGNOSTICS.md +9 -8
- package/docs/DOMAIN.md +12 -0
- package/docs/METHOD.md +208 -0
- package/docs/MODEL-TESTING.md +48 -0
- package/docs/PORTAL-API.md +38 -285
- package/docs/PORTAL-MODELS.md +24 -0
- package/docs/PORTAL-OSS.md +56 -0
- package/docs/PORTAL-PUBLISH.md +39 -0
- package/docs/PORTAL-READ.md +301 -0
- package/docs/README.md +8 -4
- package/docs/REQUIREMENTS.md +61 -0
- package/docs/SYNTAX.md +5 -4
- package/docs/TYPIFICATION.md +12 -3
- package/docs/brief.schema.json +173 -0
- package/examples/README.md +16 -2
- package/examples/access-control/NOTES.md +23 -0
- package/examples/access-control/anti/collapsed.json +439 -0
- package/examples/access-control/anti/weakened.json +439 -0
- package/examples/access-control/brief-v1.json +231 -0
- package/examples/access-control/brief.json +310 -0
- package/examples/access-control/build-rsform.ts +151 -0
- package/examples/access-control/requirements-v1.md +9 -0
- package/examples/access-control/requirements-v2.md +4 -0
- package/examples/access-control/rsform-session-v1.json +439 -0
- package/examples/access-control/rsform-session.json +523 -0
- package/examples/audit-diagnostics.ts +9 -1
- package/examples/briefs.test.ts +126 -0
- package/examples/clinic-booking/NOTES.md +24 -0
- package/examples/clinic-booking/anti/collapsed.json +615 -0
- package/examples/clinic-booking/anti/species-as-genus.json +568 -0
- package/examples/clinic-booking/brief-v1.json +332 -0
- package/examples/clinic-booking/brief.json +405 -0
- package/examples/clinic-booking/build-rsform.ts +174 -0
- package/examples/clinic-booking/requirements-v1.md +9 -0
- package/examples/clinic-booking/requirements-v2.md +4 -0
- package/examples/clinic-booking/rsform-session-v1.json +615 -0
- package/examples/clinic-booking/rsform-session.json +700 -0
- package/examples/diagnostics-utils.ts +26 -0
- package/examples/kinship/brief.json +337 -0
- package/examples/kinship/build-rsform.ts +7 -4
- package/examples/kinship/rsform-session.json +20 -63
- package/examples/kinship/rsmodel-session.json +14 -14
- package/examples/kinship-subordination/NOTES.md +49 -0
- package/examples/kinship-subordination/brief.json +161 -0
- package/examples/kinship-subordination/build-rsform.ts +100 -0
- package/examples/kinship-subordination/rsform-session.json +795 -0
- package/examples/library-loans/NOTES.md +46 -0
- package/examples/library-loans/anti/collapsed.json +481 -0
- package/examples/library-loans/anti/species-as-genus.json +334 -0
- package/examples/library-loans/anti/uncovered.json +406 -0
- package/examples/library-loans/anti/weakened.json +464 -0
- package/examples/library-loans/brief-v1.json +340 -0
- package/examples/library-loans/brief.json +502 -0
- package/examples/library-loans/build-rsform.ts +239 -0
- package/examples/library-loans/requirements-v1.md +11 -0
- package/examples/library-loans/requirements-v2.md +5 -0
- package/examples/library-loans/rsform-session-v1.json +481 -0
- package/examples/library-loans/rsform-session.json +652 -0
- package/examples/library-loans/source-markup.md +18 -0
- package/examples/movd/brief.json +220 -0
- package/examples/movd/build-rsform.ts +5 -2
- package/examples/movd/rsform-session.json +14 -46
- package/examples/subordination/NOTES.md +59 -0
- package/examples/subordination/anti/collapsed.json +556 -0
- package/examples/subordination/anti/single-relation.json +125 -0
- package/examples/subordination/anti/transitive.json +573 -0
- package/examples/subordination/anti/weakened.json +539 -0
- package/examples/subordination/brief.json +386 -0
- package/examples/subordination/build-rsform.ts +63 -0
- package/examples/subordination/constants.ts +115 -0
- package/examples/subordination/rsform-session.json +556 -0
- package/examples/subordination/source-markup.md +19 -0
- package/examples/subordination/source.md +40 -0
- package/package.json +29 -20
- package/skills/INSTALL.md +28 -29
- package/skills/README.md +25 -10
- package/skills/rs-core/SKILL.md +56 -0
- package/skills/rs-explain/SKILL.md +28 -0
- package/skills/rs-explicate/SKILL.md +71 -0
- package/skills/rs-interpret/SKILL.md +67 -0
- package/skills/rs-portal/SKILL.md +51 -0
- package/skills/rs-review/SKILL.md +79 -0
- package/skills/rs-scope/SKILL.md +67 -0
- package/skills/rs-synthesis/SKILL.md +52 -0
- package/skills/rstool/SKILL.md +70 -0
- package/skills/rstool-helper/GUIDE.md +18 -272
- package/skills/rstool-helper/SKILL.md +8 -55
- package/skills/{rstool-helper → rstool-runtime}/EXAMPLES.md +40 -12
- package/skills/{rstool-helper → rstool-runtime}/REFERENCE.md +28 -7
- package/skills/rstool-runtime/SKILL.md +96 -0
- package/skills/scripts/brief-check.test.ts +165 -0
- package/skills/scripts/brief-check.ts +826 -0
- package/skills/scripts/check-brief.ts +94 -0
- package/skills/scripts/rstool-skills.mjs +119 -0
- package/skills/scripts/skill-stubs.test.ts +48 -0
- package/src/mappers/model-adapter.ts +34 -1
- package/src/models/rstool-agent.test.ts +95 -0
- package/src/wrapper/client.test.ts +43 -4
- package/src/wrapper/client.ts +95 -16
- package/src/wrapper/stdio-handler.test.ts +43 -0
- package/src/wrapper/stdio-handler.ts +19 -5
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"status": "confirmed",
|
|
4
|
+
"approach": "project",
|
|
5
|
+
"object": "Выдача книг в библиотеке",
|
|
6
|
+
"task": "Эксплицировать понятия выдачи и доступности для проектирования ИС: модель данных и проверки при сохранении; v2 — продления и брони",
|
|
7
|
+
"source": "requirements-v1.md, requirements-v2.md",
|
|
8
|
+
"restrictions": [
|
|
9
|
+
{
|
|
10
|
+
"id": "L1",
|
|
11
|
+
"excludes": "штрафы и оплата (п. 8)",
|
|
12
|
+
"inexpressible": ["сумма штрафа", "долг читателя в рублях"]
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "L2",
|
|
16
|
+
"excludes": "история выдач — только текущее состояние (п. 7)",
|
|
17
|
+
"inexpressible": ["бывшие выдачи", "сколько раз читатель брал издание", "дата возврата"]
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "L3",
|
|
21
|
+
"excludes": "каталог и поиск (п. 9) — интерфейс, не предметная область",
|
|
22
|
+
"inexpressible": ["автор издания", "название"]
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"expressiveness": [
|
|
26
|
+
{
|
|
27
|
+
"id": "E1",
|
|
28
|
+
"concept": "выдача: кто, что и когда взял",
|
|
29
|
+
"ref": "п. 2",
|
|
30
|
+
"via": "родовая структура читатель × экземпляр × день",
|
|
31
|
+
"constituent": "S2"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "E2",
|
|
35
|
+
"concept": "просроченные выдачи",
|
|
36
|
+
"ref": "п. 5",
|
|
37
|
+
"via": "день выдачи + 14 × (1 + число продлений) < текущий день",
|
|
38
|
+
"constituent": "D4"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "E3",
|
|
42
|
+
"concept": "доступные экземпляры",
|
|
43
|
+
"ref": "п. 6",
|
|
44
|
+
"via": "экземпляры вне Pr2 выдач",
|
|
45
|
+
"constituent": "D2"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"id": "E4",
|
|
49
|
+
"concept": "доступные издания",
|
|
50
|
+
"ref": "п. 6",
|
|
51
|
+
"via": "у издания есть доступный экземпляр",
|
|
52
|
+
"constituent": "D3"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id": "E5",
|
|
56
|
+
"concept": "должники",
|
|
57
|
+
"ref": "п. 5",
|
|
58
|
+
"via": "Pr1 просроченных выдач",
|
|
59
|
+
"constituent": "D6"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "E6",
|
|
63
|
+
"concept": "число продлений выдачи",
|
|
64
|
+
"ref": "v2 п. 1",
|
|
65
|
+
"via": "число пар продлений экземпляра",
|
|
66
|
+
"constituent": "F4"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"id": "E7",
|
|
70
|
+
"concept": "забронированные издания",
|
|
71
|
+
"ref": "v2 п. 2",
|
|
72
|
+
"via": "Pr2 броней",
|
|
73
|
+
"constituent": "D7"
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
"distinctions": [
|
|
77
|
+
{
|
|
78
|
+
"id": "V1",
|
|
79
|
+
"between": ["X2", "X3"],
|
|
80
|
+
"text": "экземпляр ≠ издание: выдают экземпляр, доступность спрашивают про издание"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"id": "V2",
|
|
84
|
+
"between": ["E5", "D5"],
|
|
85
|
+
"text": "должник ≠ читатель с выдачами",
|
|
86
|
+
"witness": "SC1"
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
"invariants": [
|
|
90
|
+
{
|
|
91
|
+
"id": "I1",
|
|
92
|
+
"text": "Экземпляр не выдан двум читателям одновременно",
|
|
93
|
+
"ref": "п. 3",
|
|
94
|
+
"constituent": "A1",
|
|
95
|
+
"positive": "SC1",
|
|
96
|
+
"negative": "SC2"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"id": "I2",
|
|
100
|
+
"text": "На руках у читателя не больше 5 экземпляров",
|
|
101
|
+
"ref": "п. 4",
|
|
102
|
+
"constituent": "A2",
|
|
103
|
+
"positive": "SC1",
|
|
104
|
+
"negative": "SC3"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"id": "I3",
|
|
108
|
+
"text": "Каждый экземпляр — копия ровно одного издания",
|
|
109
|
+
"ref": "п. 1",
|
|
110
|
+
"constituent": "A3",
|
|
111
|
+
"positive": "SC1",
|
|
112
|
+
"negative": "SC4"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"id": "I4",
|
|
116
|
+
"text": "День выдачи не позже текущего",
|
|
117
|
+
"constituent": "A4",
|
|
118
|
+
"positive": "SC1",
|
|
119
|
+
"negative": "SC5"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"id": "I5",
|
|
123
|
+
"text": "Не больше двух продлений",
|
|
124
|
+
"ref": "v2 п. 1",
|
|
125
|
+
"constituent": "A5",
|
|
126
|
+
"positive": "SC7",
|
|
127
|
+
"negative": "SC8"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"id": "I6",
|
|
131
|
+
"text": "Бронируют только издание без доступных экземпляров",
|
|
132
|
+
"ref": "v2 п. 2",
|
|
133
|
+
"constituent": "A7",
|
|
134
|
+
"positive": "SC9",
|
|
135
|
+
"negative": "SC10"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"id": "I7",
|
|
139
|
+
"text": "Продлевается только выданный экземпляр",
|
|
140
|
+
"constituent": "A6",
|
|
141
|
+
"positive": "SC7",
|
|
142
|
+
"negative": "SC11"
|
|
143
|
+
}
|
|
144
|
+
],
|
|
145
|
+
"decisions": [
|
|
146
|
+
{
|
|
147
|
+
"id": "DC1",
|
|
148
|
+
"topic": "основное отношение «выдача» S2",
|
|
149
|
+
"alternatives": ["читатель × издание", "экземпляр → читатель (функция)", "читатель × экземпляр × день"],
|
|
150
|
+
"choice": "S2: читатель × экземпляр × день выдачи",
|
|
151
|
+
"rationale": "просрочка требует дня, доступность — экземпляра; «один читатель у экземпляра» — аксиома A1, а не тип"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"id": "DC2",
|
|
155
|
+
"topic": "срок выдачи",
|
|
156
|
+
"alternatives": ["срок как компонента выдачи", "константа 14 в формуле"],
|
|
157
|
+
"choice": "константа 14 в формуле D4",
|
|
158
|
+
"rationale": "п. 2: срок одинаков для всех"
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"id": "DC3",
|
|
162
|
+
"topic": "текущий день",
|
|
163
|
+
"alternatives": ["просроченные как S# (отмечает библиотекарь)", "S3: Z — номер текущего дня"],
|
|
164
|
+
"choice": "S3: Z",
|
|
165
|
+
"rationale": "просрочка — производное понятие, не неопределяемое"
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"id": "DC4",
|
|
169
|
+
"topic": "однозначность выдачи по экземпляру",
|
|
170
|
+
"choice": "аксиома A1",
|
|
171
|
+
"rationale": "п. 3"
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"id": "DC5",
|
|
175
|
+
"topic": "издание экземпляра",
|
|
176
|
+
"choice": "отношение S1 и аксиома A3 (однозначность и всюду определённость)",
|
|
177
|
+
"rationale": "п. 1"
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"id": "DC6",
|
|
181
|
+
"topic": "запрет новой выдачи должнику",
|
|
182
|
+
"choice": "без аксиомы",
|
|
183
|
+
"rationale": "это правило процедуры выдачи, а схема описывает состояние (L2)"
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"id": "DC7",
|
|
187
|
+
"topic": "продления",
|
|
188
|
+
"alternatives": [
|
|
189
|
+
"число продлений как четвёртая компонента выдачи",
|
|
190
|
+
"пара (экземпляр, число продлений)",
|
|
191
|
+
"пара (экземпляр, номер продления) на каждое продление"
|
|
192
|
+
],
|
|
193
|
+
"choice": "S4: пара (экземпляр, номер продления)",
|
|
194
|
+
"rationale": "S2 и сценарии v1 не меняются; число продлений — card, аксиома A5 простая"
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"id": "DC8",
|
|
198
|
+
"topic": "срок выдачи с продлениями",
|
|
199
|
+
"supersedes": "DC2",
|
|
200
|
+
"choice": "D4: 14 × (1 + число продлений)",
|
|
201
|
+
"rationale": "v2 п. 1; без продлений совпадает с v1 — сценарии v1 проходят"
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"id": "DC9",
|
|
205
|
+
"topic": "бронь",
|
|
206
|
+
"alternatives": ["читатель × экземпляр", "читатель × издание"],
|
|
207
|
+
"choice": "S5: читатель × издание",
|
|
208
|
+
"rationale": "бронируют издание, конкретный экземпляр неизвестен"
|
|
209
|
+
}
|
|
210
|
+
],
|
|
211
|
+
"scenarios": [
|
|
212
|
+
{
|
|
213
|
+
"id": "SC1",
|
|
214
|
+
"title": "Две выдачи, одна просрочена",
|
|
215
|
+
"values": {
|
|
216
|
+
"X1": ["ann", "bob", "cat"],
|
|
217
|
+
"X2": ["e1", "e2", "e3", "e4"],
|
|
218
|
+
"X3": ["war", "peace"],
|
|
219
|
+
"S1": [
|
|
220
|
+
["e1", "war"],
|
|
221
|
+
["e2", "war"],
|
|
222
|
+
["e3", "peace"],
|
|
223
|
+
["e4", "peace"]
|
|
224
|
+
],
|
|
225
|
+
"S2": [
|
|
226
|
+
["ann", "e1", 1],
|
|
227
|
+
["bob", "e3", 10]
|
|
228
|
+
],
|
|
229
|
+
"S3": 20
|
|
230
|
+
},
|
|
231
|
+
"expect": [
|
|
232
|
+
{
|
|
233
|
+
"of": "D1",
|
|
234
|
+
"value": ["e1", "e3"]
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"of": "D2",
|
|
238
|
+
"value": ["e2", "e4"]
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"of": "D3",
|
|
242
|
+
"value": ["war", "peace"]
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"of": "F2",
|
|
246
|
+
"args": ["war"],
|
|
247
|
+
"value": ["e2"]
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"of": "D4",
|
|
251
|
+
"value": [["ann", "e1", 1]]
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"of": "D6",
|
|
255
|
+
"value": ["ann"]
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
"of": "D5",
|
|
259
|
+
"value": ["ann", "bob"]
|
|
260
|
+
}
|
|
261
|
+
]
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"id": "SC2",
|
|
265
|
+
"title": "Экземпляр e1 выдан двоим",
|
|
266
|
+
"base": "SC1",
|
|
267
|
+
"values": {
|
|
268
|
+
"S2": [
|
|
269
|
+
["ann", "e1", 1],
|
|
270
|
+
["bob", "e1", 2]
|
|
271
|
+
]
|
|
272
|
+
},
|
|
273
|
+
"expect": [
|
|
274
|
+
{
|
|
275
|
+
"of": "A1",
|
|
276
|
+
"holds": false
|
|
277
|
+
}
|
|
278
|
+
]
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
"id": "SC3",
|
|
282
|
+
"title": "Шесть экземпляров у одного читателя",
|
|
283
|
+
"base": "SC1",
|
|
284
|
+
"values": {
|
|
285
|
+
"X2": ["e1", "e2", "e3", "e4", "e5", "e6"],
|
|
286
|
+
"S1": [
|
|
287
|
+
["e1", "war"],
|
|
288
|
+
["e2", "war"],
|
|
289
|
+
["e3", "war"],
|
|
290
|
+
["e4", "war"],
|
|
291
|
+
["e5", "war"],
|
|
292
|
+
["e6", "war"]
|
|
293
|
+
],
|
|
294
|
+
"S2": [
|
|
295
|
+
["ann", "e1", 1],
|
|
296
|
+
["ann", "e2", 1],
|
|
297
|
+
["ann", "e3", 1],
|
|
298
|
+
["ann", "e4", 1],
|
|
299
|
+
["ann", "e5", 1],
|
|
300
|
+
["ann", "e6", 1]
|
|
301
|
+
]
|
|
302
|
+
},
|
|
303
|
+
"expect": [
|
|
304
|
+
{
|
|
305
|
+
"of": "A2",
|
|
306
|
+
"holds": false
|
|
307
|
+
}
|
|
308
|
+
]
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
"id": "SC4",
|
|
312
|
+
"title": "Экземпляр без издания",
|
|
313
|
+
"base": "SC1",
|
|
314
|
+
"values": {
|
|
315
|
+
"S1": [
|
|
316
|
+
["e1", "war"],
|
|
317
|
+
["e2", "war"],
|
|
318
|
+
["e3", "peace"]
|
|
319
|
+
]
|
|
320
|
+
},
|
|
321
|
+
"expect": [
|
|
322
|
+
{
|
|
323
|
+
"of": "A3",
|
|
324
|
+
"holds": false
|
|
325
|
+
}
|
|
326
|
+
]
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"id": "SC5",
|
|
330
|
+
"title": "Выдача из будущего",
|
|
331
|
+
"base": "SC1",
|
|
332
|
+
"values": {
|
|
333
|
+
"S2": [["ann", "e1", 25]]
|
|
334
|
+
},
|
|
335
|
+
"expect": [
|
|
336
|
+
{
|
|
337
|
+
"of": "A4",
|
|
338
|
+
"holds": false
|
|
339
|
+
}
|
|
340
|
+
]
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"id": "SC6",
|
|
344
|
+
"title": "Все экземпляры «war» на руках",
|
|
345
|
+
"base": "SC1",
|
|
346
|
+
"values": {
|
|
347
|
+
"S2": [
|
|
348
|
+
["ann", "e1", 1],
|
|
349
|
+
["bob", "e2", 10]
|
|
350
|
+
]
|
|
351
|
+
},
|
|
352
|
+
"expect": [
|
|
353
|
+
{
|
|
354
|
+
"of": "D3",
|
|
355
|
+
"value": ["peace"]
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
"of": "F2",
|
|
359
|
+
"args": ["war"],
|
|
360
|
+
"value": []
|
|
361
|
+
}
|
|
362
|
+
]
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
"id": "SC7",
|
|
366
|
+
"title": "Продление снимает просрочку",
|
|
367
|
+
"base": "SC1",
|
|
368
|
+
"values": {
|
|
369
|
+
"S4": [["e1", 1]]
|
|
370
|
+
},
|
|
371
|
+
"expect": [
|
|
372
|
+
{
|
|
373
|
+
"of": "F4",
|
|
374
|
+
"args": ["e1"],
|
|
375
|
+
"value": 1
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"of": "D4",
|
|
379
|
+
"value": []
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
"of": "D6",
|
|
383
|
+
"value": []
|
|
384
|
+
}
|
|
385
|
+
]
|
|
386
|
+
},
|
|
387
|
+
{
|
|
388
|
+
"id": "SC8",
|
|
389
|
+
"title": "Три продления",
|
|
390
|
+
"base": "SC1",
|
|
391
|
+
"values": {
|
|
392
|
+
"S4": [
|
|
393
|
+
["e1", 1],
|
|
394
|
+
["e1", 2],
|
|
395
|
+
["e1", 3]
|
|
396
|
+
]
|
|
397
|
+
},
|
|
398
|
+
"expect": [
|
|
399
|
+
{
|
|
400
|
+
"of": "A5",
|
|
401
|
+
"holds": false
|
|
402
|
+
}
|
|
403
|
+
]
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
"id": "SC9",
|
|
407
|
+
"title": "Бронь издания без доступных экземпляров",
|
|
408
|
+
"base": "SC6",
|
|
409
|
+
"values": {
|
|
410
|
+
"S5": [["cat", "war"]]
|
|
411
|
+
},
|
|
412
|
+
"expect": [
|
|
413
|
+
{
|
|
414
|
+
"of": "D7",
|
|
415
|
+
"value": ["war"]
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
"of": "A7",
|
|
419
|
+
"holds": true
|
|
420
|
+
}
|
|
421
|
+
]
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"id": "SC10",
|
|
425
|
+
"title": "Бронь издания с доступным экземпляром",
|
|
426
|
+
"base": "SC1",
|
|
427
|
+
"values": {
|
|
428
|
+
"S5": [["cat", "war"]]
|
|
429
|
+
},
|
|
430
|
+
"expect": [
|
|
431
|
+
{
|
|
432
|
+
"of": "A7",
|
|
433
|
+
"holds": false
|
|
434
|
+
}
|
|
435
|
+
]
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
"id": "SC11",
|
|
439
|
+
"title": "Продление невыданного экземпляра",
|
|
440
|
+
"base": "SC1",
|
|
441
|
+
"values": {
|
|
442
|
+
"S4": [["e2", 1]]
|
|
443
|
+
},
|
|
444
|
+
"expect": [
|
|
445
|
+
{
|
|
446
|
+
"of": "A6",
|
|
447
|
+
"holds": false
|
|
448
|
+
}
|
|
449
|
+
]
|
|
450
|
+
}
|
|
451
|
+
],
|
|
452
|
+
"questions": [
|
|
453
|
+
{
|
|
454
|
+
"round": 1,
|
|
455
|
+
"text": "Для чего схема?",
|
|
456
|
+
"proposed": "основа для ИС: модель данных и проверки",
|
|
457
|
+
"answer": "да"
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
"round": 1,
|
|
461
|
+
"text": "Что исключаем?",
|
|
462
|
+
"proposed": "штрафы, историю выдач, каталог и поиск",
|
|
463
|
+
"consequence": "невыразимы «сумма штрафа», «бывшие выдачи», «автор издания»",
|
|
464
|
+
"answer": "да"
|
|
465
|
+
},
|
|
466
|
+
{
|
|
467
|
+
"round": 1,
|
|
468
|
+
"text": "Что различать?",
|
|
469
|
+
"proposed": "экземпляр и издание; должника и читателя с выдачами",
|
|
470
|
+
"answer": "да"
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
"round": 2,
|
|
474
|
+
"text": "Срок выдачи одинаков для всех?",
|
|
475
|
+
"proposed": "да, 14 дней",
|
|
476
|
+
"consequence": "срок — константа в формуле, а не данные выдачи",
|
|
477
|
+
"answer": "да"
|
|
478
|
+
},
|
|
479
|
+
{
|
|
480
|
+
"round": 2,
|
|
481
|
+
"text": "Запрещать ли выдачу должнику?",
|
|
482
|
+
"proposed": "нет, это правило процедуры",
|
|
483
|
+
"consequence": "без аксиомы; схема описывает состояние",
|
|
484
|
+
"answer": "да"
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
"round": 1,
|
|
488
|
+
"text": "v2: что должно остаться неизменным?",
|
|
489
|
+
"proposed": "все понятия и правила v1",
|
|
490
|
+
"answer": "да"
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
"round": 2,
|
|
494
|
+
"text": "Продление считается от исходного дня выдачи?",
|
|
495
|
+
"proposed": "да, +14 дней за каждое",
|
|
496
|
+
"consequence": "день выдачи не меняется; S2 остаётся как в v1",
|
|
497
|
+
"answer": "да"
|
|
498
|
+
}
|
|
499
|
+
],
|
|
500
|
+
"assumptions": ["дни нумеруются целыми числами в одной шкале"],
|
|
501
|
+
"openQuestions": []
|
|
502
|
+
}
|