rsmp_schema 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/lib/rsmp_schema/version.rb +1 -1
  4. data/schemas/tlc/1.0.10/sxl.yaml +0 -25
  5. data/schemas/tlc/1.0.13/sxl.yaml +0 -40
  6. data/schemas/tlc/1.0.14/sxl.yaml +0 -40
  7. data/schemas/tlc/1.0.15/sxl.yaml +0 -47
  8. data/schemas/tlc/1.0.7/sxl.yaml +0 -21
  9. data/schemas/tlc/1.0.8/sxl.yaml +0 -25
  10. data/schemas/tlc/1.0.9/sxl.yaml +0 -25
  11. data/schemas/tlc/1.1/alarms/A0303.json +111 -0
  12. data/schemas/tlc/1.1/alarms/A0304.json +137 -0
  13. data/schemas/tlc/1.1/alarms/alarms.json +33 -1
  14. data/schemas/tlc/1.1/commands/M0001.json +1 -1
  15. data/schemas/tlc/1.1/commands/M0005.json +1 -1
  16. data/schemas/tlc/1.1/commands/M0013.json +1 -1
  17. data/schemas/tlc/1.1/commands/M0019.json +1 -1
  18. data/schemas/tlc/1.1/commands/M0022.json +335 -0
  19. data/schemas/tlc/1.1/commands/M0023.json +64 -0
  20. data/schemas/tlc/1.1/commands/commands.json +32 -0
  21. data/schemas/tlc/1.1/statuses/S0001.json +3 -3
  22. data/schemas/tlc/1.1/statuses/S0002.json +1 -1
  23. data/schemas/tlc/1.1/statuses/S0003.json +1 -1
  24. data/schemas/tlc/1.1/statuses/S0004.json +1 -1
  25. data/schemas/tlc/1.1/statuses/S0007.json +1 -1
  26. data/schemas/tlc/1.1/statuses/S0008.json +1 -1
  27. data/schemas/tlc/1.1/statuses/S0009.json +1 -1
  28. data/schemas/tlc/1.1/statuses/S0010.json +1 -1
  29. data/schemas/tlc/1.1/statuses/S0011.json +1 -1
  30. data/schemas/tlc/1.1/statuses/S0012.json +1 -1
  31. data/schemas/tlc/1.1/statuses/S0013.json +2 -2
  32. data/schemas/tlc/1.1/statuses/S0020.json +1 -1
  33. data/schemas/tlc/1.1/statuses/S0032.json +96 -0
  34. data/schemas/tlc/1.1/statuses/S0034.json +40 -0
  35. data/schemas/tlc/1.1/statuses/statuses.json +32 -0
  36. data/schemas/tlc/1.1/sxl.yaml +417 -127
  37. metadata +8 -2
@@ -0,0 +1,137 @@
1
+ {
2
+ "allOf" : [
3
+ {
4
+ "description" : "Serious detector error (logic error).\nFor instance; detector continuously on or off during an extended time.\nIs a “major fault” defined according to 3.8 i EN12675 which causes the controller to switch to a “failure mode” according to 3.6 in EN12675",
5
+ "properties" : {
6
+ "n" : {
7
+ "enum" : [
8
+ "detector",
9
+ "errormode",
10
+ "logicerror",
11
+ "manual",
12
+ "type"
13
+ ]
14
+ }
15
+ }
16
+ },
17
+ {
18
+ "if" : {
19
+ "required" : [
20
+ "n"
21
+ ],
22
+ "properties" : {
23
+ "n" : {
24
+ "const" : "detector"
25
+ }
26
+ }
27
+ },
28
+ "then" : {
29
+ "properties" : {
30
+ "v" : {
31
+ "description" : "Designation of the detector (hardware)",
32
+ "type" : "string"
33
+ }
34
+ }
35
+ }
36
+ },
37
+ {
38
+ "if" : {
39
+ "required" : [
40
+ "n"
41
+ ],
42
+ "properties" : {
43
+ "n" : {
44
+ "const" : "type"
45
+ }
46
+ }
47
+ },
48
+ "then" : {
49
+ "properties" : {
50
+ "v" : {
51
+ "description" : "Type of detector.",
52
+ "type" : "string",
53
+ "enum" : [
54
+ "input",
55
+ "loop"
56
+ ]
57
+ }
58
+ }
59
+ }
60
+ },
61
+ {
62
+ "if" : {
63
+ "required" : [
64
+ "n"
65
+ ],
66
+ "properties" : {
67
+ "n" : {
68
+ "const" : "errormode"
69
+ }
70
+ }
71
+ },
72
+ "then" : {
73
+ "properties" : {
74
+ "v" : {
75
+ "description" : "Detector forced on/off while detector error",
76
+ "type" : "string",
77
+ "enum" : [
78
+ "off",
79
+ "on"
80
+ ]
81
+ }
82
+ }
83
+ }
84
+ },
85
+ {
86
+ "if" : {
87
+ "required" : [
88
+ "n"
89
+ ],
90
+ "properties" : {
91
+ "n" : {
92
+ "const" : "manual"
93
+ }
94
+ }
95
+ },
96
+ "then" : {
97
+ "properties" : {
98
+ "v" : {
99
+ "allOf" : [
100
+ {
101
+ "description" : "Manually controlled detector logic (True/False)"
102
+ },
103
+ {
104
+ "$ref" : "../../../core/3.1.1/definitions.json#/boolean"
105
+ }
106
+ ]
107
+ }
108
+ }
109
+ }
110
+ },
111
+ {
112
+ "if" : {
113
+ "required" : [
114
+ "n"
115
+ ],
116
+ "properties" : {
117
+ "n" : {
118
+ "const" : "logicerror"
119
+ }
120
+ }
121
+ },
122
+ "then" : {
123
+ "properties" : {
124
+ "v" : {
125
+ "description" : "Type of logic error",
126
+ "type" : "string",
127
+ "enum" : [
128
+ "always_off",
129
+ "always_on",
130
+ "intermittent"
131
+ ]
132
+ }
133
+ }
134
+ }
135
+ }
136
+ ]
137
+ }
@@ -16,7 +16,9 @@
16
16
  "A0201",
17
17
  "A0202",
18
18
  "A0301",
19
- "A0302"
19
+ "A0302",
20
+ "A0303",
21
+ "A0304"
20
22
  ]
21
23
  },
22
24
  "rvs" : {
@@ -246,6 +248,36 @@
246
248
  "then" : {
247
249
  "$ref" : "A0302.json"
248
250
  }
251
+ },
252
+ {
253
+ "if" : {
254
+ "required" : [
255
+ "aCId"
256
+ ],
257
+ "properties" : {
258
+ "aCId" : {
259
+ "const" : "A0303"
260
+ }
261
+ }
262
+ },
263
+ "then" : {
264
+ "$ref" : "A0303.json"
265
+ }
266
+ },
267
+ {
268
+ "if" : {
269
+ "required" : [
270
+ "aCId"
271
+ ],
272
+ "properties" : {
273
+ "aCId" : {
274
+ "const" : "A0304"
275
+ }
276
+ }
277
+ },
278
+ "then" : {
279
+ "$ref" : "A0304.json"
280
+ }
249
281
  }
250
282
  ]
251
283
  }
@@ -111,7 +111,7 @@
111
111
  "v" : {
112
112
  "allOf" : [
113
113
  {
114
- "description" : "Intersection number"
114
+ "description" : "Comma separated list of intersections which the status relates to, e.g. “1,2”.\nUse “0” for all intersections of the TLC."
115
115
  },
116
116
  {
117
117
  "$ref" : "../../../core/3.1.1/definitions.json#/integer_list"
@@ -31,7 +31,7 @@
31
31
  "v" : {
32
32
  "allOf" : [
33
33
  {
34
- "description" : "False: Activate emergency route\nTrue: Deactivate emergency route"
34
+ "description" : "False: Deactivate emergency route\nTrue: Activate emergency route"
35
35
  },
36
36
  {
37
37
  "$ref" : "../../../core/3.1.1/definitions.json#/boolean"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "allOf" : [
3
3
  {
4
- "description" : "Activate a series of inputs.\nSet given inputs (1-255) of the controllers general purpose I/O to either true or false.\nThis command was introduced due to coordination requirements needing to set many inputs to true/false at the same time and M0006 being to slow to send a message for each input individually. With this command many inputs can be set to true/false at the same time using a single RSMP message.\nCan be used for all types of input where the traffic light controller must react to external control. Typical usages are bus priority, coordination between traffic controllers, external control systems, and much more.\nRequires security code 2",
4
+ "description" : "Activate a series of inputs\n\nSet given inputs (1-255) of the controllers general purpose I/O to either true or false. This command was introduced due to coordination requirements needing to set many inputs to true/false at the same time and M0006 being to slow to send a message for each input individually. With this command many inputs can be set to true/false at the same time using a single command message. It can be used for all types of input where the traffic light controller must react to external control. Typical usages are bus priority, coordination between traffic controllers, external control systems, and much more.\n\nRequires security code 2.\n\nThe parameter ‘status’ sets/unsets a block of 16 inputs at a time. It can be repeated to set several blocks of 16 inputs. Values are separated with comma. Blocks are separated with semicolon. Format: [Offset];[Bits to set];[Bits to unset];…\n\n- ‘Offset’ defines where the 16 inputs starts from\n- ‘Bits to set’ defines which bit(s) to set. ‘0’ if unsed\n- ‘Bits to unset’ defines which bit(s) to unset. ‘0’ if unused\n\nExample 1: “3,4134,65” sets input 4,5,8,15 and unsets 3,9 - Input starts from no. 5 - “4134” is 1 0000 0010 0110 in binary, but since input starts from 3, it is shifted 3 bits, e.g. 1000 0001 0011 0000 which are bits 4,5,8,15 - “65” is 100 0001 in binary, but since input starts from 3, it is shifted 3 bits, e.g. 10 0000 1000 which are bits 3,9\n\nExample 2: “12,1,4” sets input 12 and unsets 14 - Input starts from no. 12 - “1” is 1 in binary, but since input starts at 12 it is shifted 12 bits, e.g. 1 0000 0000 0000, which is bit 12 - “4” is 100 in binary, but since input starts at 12 it is shifted 12 bits, e.g. 100 0000 0000 0000, which is bit 14\n\nAnd both these examples could be sent in the same message as: “3,4143,65;12,1,4”\n\nSuch a message would set input 4,5,8,12,15 and unset input 3,9,14\n\nExample 3: “0,1,2” sets input 0 and unsets 1 - Input starts from 0 - “1” is 1 in binary, which is bit 0 - “2” is 10 in binary, which is bit 1",
5
5
  "properties" : {
6
6
  "n" : {
7
7
  "enum" : [
@@ -32,7 +32,7 @@
32
32
  "v" : {
33
33
  "allOf" : [
34
34
  {
35
- "description" : "False: Force input\nTrue: Release input"
35
+ "description" : "False: Release input\nTrue: Force input"
36
36
  },
37
37
  {
38
38
  "$ref" : "../../../core/3.1.1/definitions.json#/boolean"
@@ -0,0 +1,335 @@
1
+ {
2
+ "allOf" : [
3
+ {
4
+ "description" : "Request Signal Priority\n\nUseful for bus priority or other type of priorities like emergency vehicles or groups of cyclists.\n\nThe benefit of using this message over activating inputs or detector logics is that you can specify a priority level, vehicle type and estimated time of arrival. You can also update or cancel the request, and use the corresponding status message to track the status of the request, including how much priority was actually given.\n\nTo understand how this command relates to ETSI/J2735, please see the wiki.\n\nActivating signal priority is expected to provide more green time for a particular movement through the intersection, but the exact mechanism must typically be configured in the controller.\n\nThe movement to prioritize can be referenced in a number of ways, depending on what is configured in the controller, and in the system that sends priority requests. Either:\n\n- Reference a signal group by setting ‘signalGroupId’. This method is simple, but will not allow you to have different priority mechanism for the same signal group, unless they can be distinguished by the vehicle type. For example, if you need to trigger different priorities depending on whether a bus goes straight or makes a turn for the same signal group, you need to use of the other referencing methods.\n- Reference an input by setting ‘inputId’. This can be useful if you previously used inputs to activate priority. The input will not be activated, only the priority.\n- Reference a connection by setting ‘connectionId’. A connection is a movement from a specific ingoing lane to a specific outgoing lane.\n- Reference an intersection approach by setting ‘approachId’.\n- Reference an ingoing lane by setting ‘laneInId’, and optionally also reference an outgoing lane by setting ‘laneOutId’.\n\nReferencing attributes that are not used must be left out, rather than set to null or empty strings. This includes:\n\n- signalGroupId\n- inputId\n- connectionId\n- approachId\n- laneInId\n- laneOutId\n\nReferencing attributes are only used when initiating a request. When updating or cancelling the request, the request is identified by its requestId, and no referencing attributes are allowed.\n\nYou initiate a priority request with type set to ‘new’. You must provide a request id that uniquely identifies the request on the controller. It can be a randomly generated UUID (universally unique identifier), or it can be constructed by combining e.g. a vehicle id and some other identifier. When updating or cancelling a request, you must pass the same request id again.\n\nProviding ETA (estimated time of arrival) when initiating a request is optional, but can help the controller plan ahead in cases where you’re able to send the request before the vehicle arrives at the intersection. You’re allowed to initiate the request without an ETA and provide it in a later request update. But providing the ETA when initiating the request is recommended, since it will give the controller more time to plan ahead.\n\nLike ETA, providing a vehicle type is optional, but can help the controller decide how to best handle the request.\n\nThe priority level provides a way to indicate the relative importance of the request compared to other requests. For example, emergency vehicles or delayed buses could be given a higher priority level.\n\nIf the ETA changes before the priority is cancelled, or you want to change the priority level, you can send another request message with type set to ‘update’. The vehicle type cannot be changed.\n\nWhen you send a priority request, it will be processed to decide if it’s possible to activate the requested priority.\n\nIf the request is accepted, the priority can either be activated immediately, or if another priority is currently active, it can be queued for later activation.\n\nIf the priority cannot be accepted the request is rejected. Cooldown is a specific type of rejection, which means that s similar request has just completed, and some time needs to pass before a similar request can be activated.\n\nWhen a request is queued, it is expected to become activated later, but in case too long passes without activation, the controller is expected to time out the request.\n\nOnce a priority is activated, you’re excepted to cancel it as soon as there’s no need for it anymore, typically when the vehicle has passed the intersection. You cancel a request by sending a request passing the existing request id setting the type to ‘cancel’.\n\nIf a request is never cancelled, the controller is expected to remove the priority at some point, but until then the priority might block requests in other direction which is why you should always cancel a priority when it’s not needed anymore.",
5
+ "properties" : {
6
+ "n" : {
7
+ "enum" : [
8
+ "approachId",
9
+ "connectionId",
10
+ "eta",
11
+ "inputId",
12
+ "laneInId",
13
+ "laneOutId",
14
+ "level",
15
+ "priorityId",
16
+ "requestId",
17
+ "signalGroupId",
18
+ "type",
19
+ "vehicleType"
20
+ ]
21
+ },
22
+ "cO" : {
23
+ "const" : "requestPriority"
24
+ }
25
+ }
26
+ },
27
+ {
28
+ "if" : {
29
+ "required" : [
30
+ "n"
31
+ ],
32
+ "properties" : {
33
+ "n" : {
34
+ "const" : "requestId"
35
+ }
36
+ }
37
+ },
38
+ "then" : {
39
+ "properties" : {
40
+ "v" : {
41
+ "description" : "A string that uniquely identifies the request on the controller",
42
+ "type" : "string"
43
+ }
44
+ }
45
+ }
46
+ },
47
+ {
48
+ "if" : {
49
+ "required" : [
50
+ "n"
51
+ ],
52
+ "properties" : {
53
+ "n" : {
54
+ "const" : "signalGroupId"
55
+ }
56
+ }
57
+ },
58
+ "then" : {
59
+ "properties" : {
60
+ "v" : {
61
+ "description" : "(Optional) ID of a signal group component.",
62
+ "type" : "string"
63
+ }
64
+ }
65
+ }
66
+ },
67
+ {
68
+ "if" : {
69
+ "required" : [
70
+ "n"
71
+ ],
72
+ "properties" : {
73
+ "n" : {
74
+ "const" : "inputId"
75
+ }
76
+ }
77
+ },
78
+ "then" : {
79
+ "properties" : {
80
+ "v" : {
81
+ "allOf" : [
82
+ {
83
+ "description" : "(Optional) ID of an input, using the same numbering scheme as M0006"
84
+ },
85
+ {
86
+ "$ref" : "../../../core/3.1.1/definitions.json#/integer"
87
+ }
88
+ ]
89
+ }
90
+ }
91
+ }
92
+ },
93
+ {
94
+ "if" : {
95
+ "required" : [
96
+ "n"
97
+ ],
98
+ "properties" : {
99
+ "n" : {
100
+ "const" : "connectionId"
101
+ }
102
+ }
103
+ },
104
+ "then" : {
105
+ "properties" : {
106
+ "v" : {
107
+ "allOf" : [
108
+ {
109
+ "description" : "(Optional) ID of a connection, connecting an ingoing and an outgoing lane"
110
+ },
111
+ {
112
+ "$ref" : "../../../core/3.1.1/definitions.json#/integer"
113
+ }
114
+ ]
115
+ }
116
+ }
117
+ }
118
+ },
119
+ {
120
+ "if" : {
121
+ "required" : [
122
+ "n"
123
+ ],
124
+ "properties" : {
125
+ "n" : {
126
+ "const" : "approachId"
127
+ }
128
+ }
129
+ },
130
+ "then" : {
131
+ "properties" : {
132
+ "v" : {
133
+ "allOf" : [
134
+ {
135
+ "description" : "(Optional) ID of an intersection approach"
136
+ },
137
+ {
138
+ "$ref" : "../../../core/3.1.1/definitions.json#/integer"
139
+ }
140
+ ]
141
+ }
142
+ }
143
+ }
144
+ },
145
+ {
146
+ "if" : {
147
+ "required" : [
148
+ "n"
149
+ ],
150
+ "properties" : {
151
+ "n" : {
152
+ "const" : "laneInId"
153
+ }
154
+ }
155
+ },
156
+ "then" : {
157
+ "properties" : {
158
+ "v" : {
159
+ "allOf" : [
160
+ {
161
+ "description" : "(Optional) ID of an ingoing lane"
162
+ },
163
+ {
164
+ "$ref" : "../../../core/3.1.1/definitions.json#/integer"
165
+ }
166
+ ]
167
+ }
168
+ }
169
+ }
170
+ },
171
+ {
172
+ "if" : {
173
+ "required" : [
174
+ "n"
175
+ ],
176
+ "properties" : {
177
+ "n" : {
178
+ "const" : "laneOutId"
179
+ }
180
+ }
181
+ },
182
+ "then" : {
183
+ "properties" : {
184
+ "v" : {
185
+ "allOf" : [
186
+ {
187
+ "description" : "(Optional) ID of an outgoing lane"
188
+ },
189
+ {
190
+ "$ref" : "../../../core/3.1.1/definitions.json#/integer"
191
+ }
192
+ ]
193
+ }
194
+ }
195
+ }
196
+ },
197
+ {
198
+ "if" : {
199
+ "required" : [
200
+ "n"
201
+ ],
202
+ "properties" : {
203
+ "n" : {
204
+ "const" : "priorityId"
205
+ }
206
+ }
207
+ },
208
+ "then" : {
209
+ "properties" : {
210
+ "v" : {
211
+ "allOf" : [
212
+ {
213
+ "description" : "(Optional) ID of a priority"
214
+ },
215
+ {
216
+ "$ref" : "../../../core/3.1.1/definitions.json#/integer"
217
+ }
218
+ ]
219
+ }
220
+ }
221
+ }
222
+ },
223
+ {
224
+ "if" : {
225
+ "required" : [
226
+ "n"
227
+ ],
228
+ "properties" : {
229
+ "n" : {
230
+ "const" : "type"
231
+ }
232
+ }
233
+ },
234
+ "then" : {
235
+ "properties" : {
236
+ "v" : {
237
+ "description" : "new: New priority request\nupdate: Update to existing priority request\ncancel: Cancel an existing priority",
238
+ "type" : "string",
239
+ "enum" : [
240
+ "cancel",
241
+ "new",
242
+ "update"
243
+ ]
244
+ }
245
+ }
246
+ }
247
+ },
248
+ {
249
+ "if" : {
250
+ "required" : [
251
+ "n"
252
+ ],
253
+ "properties" : {
254
+ "n" : {
255
+ "const" : "level"
256
+ }
257
+ }
258
+ },
259
+ "then" : {
260
+ "properties" : {
261
+ "v" : {
262
+ "allOf" : [
263
+ {
264
+ "description" : "0: Lowest, 14: Highest"
265
+ },
266
+ {
267
+ "$ref" : "../../../core/3.1.1/definitions.json#/integer"
268
+ }
269
+ ]
270
+ }
271
+ }
272
+ }
273
+ },
274
+ {
275
+ "if" : {
276
+ "required" : [
277
+ "n"
278
+ ],
279
+ "properties" : {
280
+ "n" : {
281
+ "const" : "eta"
282
+ }
283
+ }
284
+ },
285
+ "then" : {
286
+ "properties" : {
287
+ "v" : {
288
+ "allOf" : [
289
+ {
290
+ "description" : "(Optional) Estimated time of arrival to the intersection, in seconds"
291
+ },
292
+ {
293
+ "$ref" : "../../../core/3.1.1/definitions.json#/integer"
294
+ }
295
+ ]
296
+ }
297
+ }
298
+ }
299
+ },
300
+ {
301
+ "if" : {
302
+ "required" : [
303
+ "n"
304
+ ],
305
+ "properties" : {
306
+ "n" : {
307
+ "const" : "vehicleType"
308
+ }
309
+ }
310
+ },
311
+ "then" : {
312
+ "properties" : {
313
+ "v" : {
314
+ "description" : "(Optional) Vehicle type\n\npedestrian: Pedestrians\nbicycle: Bicycles\nmotorcycle: Motorcycles\ncar: Passenger vehicle\nbus: Bus used for public transport\nlightTruck: Light truck\nheavyTruck: Heavy truck\ntram: Trams used for Public transport\nemergency: Police, fire or ambulance\nsafetyCar: For e.g. escort vehicles\nspecialTransport: For e.g. heavy load\nother: Other type of vehicle",
315
+ "type" : "string",
316
+ "enum" : [
317
+ "bicycle",
318
+ "bus",
319
+ "car",
320
+ "emergency",
321
+ "heavyTruck",
322
+ "lightTruck",
323
+ "motorcycle",
324
+ "other",
325
+ "pedestrian",
326
+ "safetyCar",
327
+ "specialTransport",
328
+ "tram"
329
+ ]
330
+ }
331
+ }
332
+ }
333
+ }
334
+ ]
335
+ }
@@ -0,0 +1,64 @@
1
+ {
2
+ "allOf" : [
3
+ {
4
+ "description" : "Set timeout for dynamic bands\nSwitch to a designated time plan if this timeout is reached due to lost connection with the supervisor.\nDisable by setting timeout to '0'.\nUsed in conjunction with dynamic bands, M0014",
5
+ "properties" : {
6
+ "n" : {
7
+ "enum" : [
8
+ "securityCode",
9
+ "status"
10
+ ]
11
+ },
12
+ "cO" : {
13
+ "const" : "setTimeout"
14
+ }
15
+ }
16
+ },
17
+ {
18
+ "if" : {
19
+ "required" : [
20
+ "n"
21
+ ],
22
+ "properties" : {
23
+ "n" : {
24
+ "const" : "status"
25
+ }
26
+ }
27
+ },
28
+ "then" : {
29
+ "properties" : {
30
+ "v" : {
31
+ "allOf" : [
32
+ {
33
+ "description" : "Timeout, in minutes"
34
+ },
35
+ {
36
+ "$ref" : "../../../core/3.1.1/definitions.json#/integer"
37
+ }
38
+ ]
39
+ }
40
+ }
41
+ }
42
+ },
43
+ {
44
+ "if" : {
45
+ "required" : [
46
+ "n"
47
+ ],
48
+ "properties" : {
49
+ "n" : {
50
+ "const" : "securityCode"
51
+ }
52
+ }
53
+ },
54
+ "then" : {
55
+ "properties" : {
56
+ "v" : {
57
+ "description" : "Security code 2",
58
+ "type" : "string"
59
+ }
60
+ }
61
+ }
62
+ }
63
+ ]
64
+ }
@@ -25,6 +25,8 @@
25
25
  "M0019",
26
26
  "M0020",
27
27
  "M0021",
28
+ "M0022",
29
+ "M0023",
28
30
  "M0103",
29
31
  "M0104"
30
32
  ]
@@ -331,6 +333,36 @@
331
333
  "$ref" : "M0021.json"
332
334
  }
333
335
  },
336
+ {
337
+ "if" : {
338
+ "required" : [
339
+ "cCI"
340
+ ],
341
+ "properties" : {
342
+ "cCI" : {
343
+ "const" : "M0022"
344
+ }
345
+ }
346
+ },
347
+ "then" : {
348
+ "$ref" : "M0022.json"
349
+ }
350
+ },
351
+ {
352
+ "if" : {
353
+ "required" : [
354
+ "cCI"
355
+ ],
356
+ "properties" : {
357
+ "cCI" : {
358
+ "const" : "M0023"
359
+ }
360
+ }
361
+ },
362
+ "then" : {
363
+ "$ref" : "M0023.json"
364
+ }
365
+ },
334
366
  {
335
367
  "if" : {
336
368
  "required" : [