1#![allow(clippy::style, clippy::complexity)]
11
12#[allow(unused_imports)]
13use crate::eval::format_validators::*;
14use crate::eval::{Cluster, ConditionEvaluator, ConditionResult, EvaluationContext};
15use crate::eval::ebd_cluster::{any_scoped_ajt_in_cluster, resolved_ajt_code_in_cluster};
18
19pub struct RemadvConditionEvaluatorFV2510 {
21 external_conditions: std::collections::HashSet<u32>,
23}
24
25impl Default for RemadvConditionEvaluatorFV2510 {
26 fn default() -> Self {
27 let mut external_conditions = std::collections::HashSet::new();
28 external_conditions.insert(45);
29 external_conditions.insert(492);
30 external_conditions.insert(493);
31 Self {
32 external_conditions,
33 }
34 }
35}
36
37impl ConditionEvaluator for RemadvConditionEvaluatorFV2510 {
38 fn message_type(&self) -> &str {
39 "REMADV"
40 }
41
42 fn format_version(&self) -> &str {
43 "FV2510"
44 }
45
46 fn evaluate(&self, condition: u32, ctx: &EvaluationContext) -> ConditionResult {
47 match condition {
48 2 => self.evaluate_2(ctx),
49 3 => self.evaluate_3(ctx),
50 4 => self.evaluate_4(ctx),
51 8 => self.evaluate_8(ctx),
52 9 => self.evaluate_9(ctx),
53 11 => self.evaluate_11(ctx),
54 12 => self.evaluate_12(ctx),
55 14 => self.evaluate_14(ctx),
56 15 => self.evaluate_15(ctx),
57 16 => self.evaluate_16(ctx),
58 18 => self.evaluate_18(ctx),
59 22 => self.evaluate_22(ctx),
60 26 => self.evaluate_26(ctx),
61 28 => self.evaluate_28(ctx),
62 33 => self.evaluate_33(ctx),
63 34 => self.evaluate_34(ctx),
64 35 => self.evaluate_35(ctx),
65 36 => self.evaluate_36(ctx),
66 39 => self.evaluate_39(ctx),
67 40 => self.evaluate_40(ctx),
68 41 => self.evaluate_41(ctx),
69 42 => self.evaluate_42(ctx),
70 43 => self.evaluate_43(ctx),
71 45 => self.evaluate_45(ctx),
72 47 => self.evaluate_47(ctx),
73 48 => self.evaluate_48(ctx),
74 49 => self.evaluate_49(ctx),
75 50 => self.evaluate_50(ctx),
76 51 => self.evaluate_51(ctx),
77 52 => self.evaluate_52(ctx),
78 53 => self.evaluate_53(ctx),
79 54 => self.evaluate_54(ctx),
80 55 => self.evaluate_55(ctx),
81 56 => self.evaluate_56(ctx),
82 57 => self.evaluate_57(ctx),
83 58 => self.evaluate_58(ctx),
84 59 => self.evaluate_59(ctx),
85 60 => self.evaluate_60(ctx),
86 61 => self.evaluate_61(ctx),
87 62 => self.evaluate_62(ctx),
88 63 => self.evaluate_63(ctx),
89 64 => self.evaluate_64(ctx),
90 65 => self.evaluate_65(ctx),
91 66 => self.evaluate_66(ctx),
92 67 => self.evaluate_67(ctx),
93 68 => self.evaluate_68(ctx),
94 69 => self.evaluate_69(ctx),
95 70 => self.evaluate_70(ctx),
96 71 => self.evaluate_71(ctx),
97 72 => self.evaluate_72(ctx),
98 73 => self.evaluate_73(ctx),
99 74 => self.evaluate_74(ctx),
100 75 => self.evaluate_75(ctx),
101 76 => self.evaluate_76(ctx),
102 77 => self.evaluate_77(ctx),
103 78 => self.evaluate_78(ctx),
104 79 => self.evaluate_79(ctx),
105 80 => self.evaluate_80(ctx),
106 81 => self.evaluate_81(ctx),
107 82 => self.evaluate_82(ctx),
108 83 => self.evaluate_83(ctx),
109 84 => self.evaluate_84(ctx),
110 85 => self.evaluate_85(ctx),
111 86 => self.evaluate_86(ctx),
112 87 => self.evaluate_87(ctx),
113 88 => self.evaluate_88(ctx),
114 89 => self.evaluate_89(ctx),
115 90 => self.evaluate_90(ctx),
116 91 => self.evaluate_91(ctx),
117 92 => self.evaluate_92(ctx),
118 93 => self.evaluate_93(ctx),
119 94 => self.evaluate_94(ctx),
120 95 => self.evaluate_95(ctx),
121 96 => self.evaluate_96(ctx),
122 97 => self.evaluate_97(ctx),
123 98 => self.evaluate_98(ctx),
124 99 => self.evaluate_99(ctx),
125 100 => self.evaluate_100(ctx),
126 101 => self.evaluate_101(ctx),
127 102 => self.evaluate_102(ctx),
128 103 => self.evaluate_103(ctx),
129 104 => self.evaluate_104(ctx),
130 105 => self.evaluate_105(ctx),
131 106 => self.evaluate_106(ctx),
132 107 => self.evaluate_107(ctx),
133 108 => self.evaluate_108(ctx),
134 109 => self.evaluate_109(ctx),
135 110 => self.evaluate_110(ctx),
136 111 => self.evaluate_111(ctx),
137 112 => self.evaluate_112(ctx),
138 113 => self.evaluate_113(ctx),
139 114 => self.evaluate_114(ctx),
140 115 => self.evaluate_115(ctx),
141 116 => self.evaluate_116(ctx),
142 117 => self.evaluate_117(ctx),
143 118 => self.evaluate_118(ctx),
144 119 => self.evaluate_119(ctx),
145 120 => self.evaluate_120(ctx),
146 492 => self.evaluate_492(ctx),
147 493 => self.evaluate_493(ctx),
148 501 => self.evaluate_501(ctx),
149 502 => self.evaluate_502(ctx),
150 503 => self.evaluate_503(ctx),
151 510 => self.evaluate_510(ctx),
152 511 => self.evaluate_511(ctx),
153 512 => self.evaluate_512(ctx),
154 515 => self.evaluate_515(ctx),
155 517 => self.evaluate_517(ctx),
156 518 => self.evaluate_518(ctx),
157 519 => self.evaluate_519(ctx),
158 520 => self.evaluate_520(ctx),
159 521 => self.evaluate_521(ctx),
160 523 => self.evaluate_523(ctx),
161 525 => self.evaluate_525(ctx),
162 526 => self.evaluate_526(ctx),
163 529 => self.evaluate_529(ctx),
164 533 => self.evaluate_533(ctx),
165 534 => self.evaluate_534(ctx),
166 535 => self.evaluate_535(ctx),
167 536 => self.evaluate_536(ctx),
168 537 => self.evaluate_537(ctx),
169 538 => self.evaluate_538(ctx),
170 544 => self.evaluate_544(ctx),
171 548 => self.evaluate_548(ctx),
172 549 => self.evaluate_549(ctx),
173 926 => self.evaluate_926(ctx),
174 930 => self.evaluate_930(ctx),
175 931 => self.evaluate_931(ctx),
176 939 => self.evaluate_939(ctx),
177 940 => self.evaluate_940(ctx),
178 _ => ConditionResult::Unknown,
179 }
180 }
181
182 fn is_external(&self, condition: u32) -> bool {
183 self.external_conditions.contains(&condition)
184 }
185 fn is_known(&self, condition: u32) -> bool {
186 matches!(
187 condition,
188 2 | 3
189 | 4
190 | 8
191 | 9
192 | 11
193 | 12
194 | 14
195 | 15
196 | 16
197 | 18
198 | 22
199 | 26
200 | 28
201 | 33
202 | 34
203 | 35
204 | 36
205 | 39
206 | 40
207 | 41
208 | 42
209 | 43
210 | 45
211 | 47
212 | 48
213 | 49
214 | 50
215 | 51
216 | 52
217 | 53
218 | 54
219 | 55
220 | 56
221 | 57
222 | 58
223 | 59
224 | 60
225 | 61
226 | 62
227 | 63
228 | 64
229 | 65
230 | 66
231 | 67
232 | 68
233 | 69
234 | 70
235 | 71
236 | 72
237 | 73
238 | 74
239 | 75
240 | 76
241 | 77
242 | 78
243 | 79
244 | 80
245 | 81
246 | 82
247 | 83
248 | 84
249 | 85
250 | 86
251 | 87
252 | 88
253 | 89
254 | 90
255 | 91
256 | 92
257 | 93
258 | 94
259 | 95
260 | 96
261 | 97
262 | 98
263 | 99
264 | 100
265 | 101
266 | 102
267 | 103
268 | 104
269 | 105
270 | 106
271 | 107
272 | 108
273 | 109
274 | 110
275 | 111
276 | 112
277 | 113
278 | 114
279 | 115
280 | 116
281 | 117
282 | 118
283 | 119
284 | 120
285 | 492
286 | 493
287 | 501
288 | 502
289 | 503
290 | 510
291 | 511
292 | 512
293 | 515
294 | 517
295 | 518
296 | 519
297 | 520
298 | 521
299 | 523
300 | 525
301 | 526
302 | 529
303 | 533
304 | 534
305 | 535
306 | 536
307 | 537
308 | 538
309 | 544
310 | 548
311 | 549
312 | 926
313 | 930
314 | 931
315 | 939
316 | 940
317 )
318 }
319}
320
321impl RemadvConditionEvaluatorFV2510 {
322 fn evaluate_45(&self, ctx: &EvaluationContext) -> ConditionResult {
325 ctx.external.evaluate("mp_id_is_strom")
326 }
327
328 fn evaluate_49(&self, ctx: &EvaluationContext) -> ConditionResult {
330 ctx.any_group_has_any_qualifier(
331 "AJT",
332 0,
333 &["A01", "A05", "A22", "A23", "A90", "A96"],
334 &["SG7"],
335 )
336 }
337
338 fn evaluate_50(&self, ctx: &EvaluationContext) -> ConditionResult {
340 ctx.any_group_has_any_qualifier(
341 "AJT",
342 0,
343 &["A01", "A05", "A18", "A19", "A20", "A90", "A96"],
344 &["SG7"],
345 )
346 }
347
348 fn evaluate_59(&self, ctx: &EvaluationContext) -> ConditionResult {
350 {
351 let ajt_segs = ctx.find_segments("AJT");
352 let found = ajt_segs.iter().any(|s| {
353 let qual = s
354 .elements
355 .first()
356 .and_then(|e| e.first())
357 .map(|v| v.as_str());
358 let pos = s
359 .elements
360 .get(1)
361 .and_then(|e| e.first())
362 .map(|v| v.as_str());
363 matches!(qual, Some("A08") | Some("A99")) && pos == Some("E_0459")
364 });
365 ConditionResult::from(found)
366 }
367 }
368
369 fn evaluate_96(&self, ctx: &EvaluationContext) -> ConditionResult {
371 ctx.any_group_has_any_qualifier("AJT", 0, &["E_0503", "E_1007"], &["SG7"])
372 }
373
374 fn evaluate_100(&self, ctx: &EvaluationContext) -> ConditionResult {
376 ctx.any_group_has_qualifier("AJT", 0, "A01", &["SG5", "SG7"])
377 }
378
379 fn evaluate_105(&self, ctx: &EvaluationContext) -> ConditionResult {
382 let segs = ctx.find_segments("AJT");
383 if segs.is_empty() {
384 return ConditionResult::Unknown;
385 }
386 ConditionResult::from(segs.iter().any(|s| {
387 s.elements
388 .get(1)
389 .and_then(|e| e.first())
390 .is_some_and(|v| v == "E_0270")
391 }))
392 }
393
394 fn evaluate_106(&self, ctx: &EvaluationContext) -> ConditionResult {
397 let segs = ctx.find_segments("AJT");
398 if segs.is_empty() {
399 return ConditionResult::Unknown;
400 }
401 ConditionResult::from(segs.iter().any(|s| {
402 s.elements
403 .get(1)
404 .and_then(|e| e.first())
405 .is_some_and(|v| v == "E_0273")
406 }))
407 }
408
409 fn evaluate_107(&self, ctx: &EvaluationContext) -> ConditionResult {
412 let segs = ctx.find_segments("AJT");
413 if segs.is_empty() {
414 return ConditionResult::Unknown;
415 }
416 ConditionResult::from(segs.iter().any(|s| {
417 s.elements
418 .get(1)
419 .and_then(|e| e.first())
420 .is_some_and(|v| v == "E_0276")
421 }))
422 }
423
424 fn evaluate_108(&self, ctx: &EvaluationContext) -> ConditionResult {
427 let segs = ctx.find_segments("AJT");
428 if segs.is_empty() {
429 return ConditionResult::Unknown;
430 }
431 ConditionResult::from(segs.iter().any(|s| {
432 s.elements
433 .get(1)
434 .and_then(|e| e.first())
435 .is_some_and(|v| v == "E_0277")
436 }))
437 }
438
439 fn evaluate_109(&self, ctx: &EvaluationContext) -> ConditionResult {
441 ctx.any_group_has_any_qualifier(
442 "AJT",
443 0,
444 &["A01", "A21", "A22", "A23", "A90", "A96"],
445 &["SG7"],
446 )
447 }
448
449 fn evaluate_110(&self, ctx: &EvaluationContext) -> ConditionResult {
451 ctx.any_group_has_qualifier("AJT", 1, "E_0270", &["SG7"])
452 }
453
454 fn evaluate_111(&self, ctx: &EvaluationContext) -> ConditionResult {
456 ctx.any_group_has_qualifier("AJT", 1, "E_0273", &["SG7"])
457 }
458
459 fn evaluate_112(&self, ctx: &EvaluationContext) -> ConditionResult {
461 ctx.any_group_has_qualifier("AJT", 1, "E_0276", &["SG7"])
462 }
463
464 fn evaluate_113(&self, ctx: &EvaluationContext) -> ConditionResult {
466 ctx.any_group_has_qualifier("AJT", 1, "E_0277", &["SG7"])
467 }
468
469 fn evaluate_114(&self, ctx: &EvaluationContext) -> ConditionResult {
471 ctx.any_group_has_qualified_value("AJT", 1, "E_0270", 1, 0, &["E_0270"], &["SG5", "SG12"])
472 }
473
474 fn evaluate_115(&self, ctx: &EvaluationContext) -> ConditionResult {
476 ctx.any_group_has_qualified_value("AJT", 1, "E_0273", 1, 0, &["E_0273"], &["SG5", "SG12"])
477 }
478
479 fn evaluate_116(&self, ctx: &EvaluationContext) -> ConditionResult {
481 ctx.any_group_has_qualified_value("AJT", 1, "E_0276", 1, 0, &["E_0276"], &["SG5", "SG12"])
482 }
483
484 fn evaluate_117(&self, ctx: &EvaluationContext) -> ConditionResult {
486 ctx.any_group_has_qualified_value("AJT", 1, "E_0277", 1, 0, &["E_0277"], &["SG5", "SG12"])
487 }
488
489 fn evaluate_118(&self, ctx: &EvaluationContext) -> ConditionResult {
491 ctx.has_segment_matching_in_group("AJT", &[(0, 0, "A99"), (1, 0, "E_0272")], &["SG7"])
492 }
493
494 fn evaluate_119(&self, ctx: &EvaluationContext) -> ConditionResult {
496 ctx.has_segment_matching_in_group("AJT", &[(0, 0, "A99"), (1, 0, "E_0275")], &["SG7"])
497 }
498
499 fn evaluate_120(&self, ctx: &EvaluationContext) -> ConditionResult {
501 ctx.any_group_has_qualifier("AJT", 0, "A01", &["SG7"])
502 }
503
504 fn evaluate_544(&self, _ctx: &EvaluationContext) -> ConditionResult {
506 ConditionResult::True
508 }
509
510 fn evaluate_2(&self, ctx: &EvaluationContext) -> ConditionResult {
512 ctx.any_group_has_qualifier("AJT", 0, "28", &["SG7"])
513 }
514
515 fn evaluate_3(&self, _ctx: &EvaluationContext) -> ConditionResult {
517 ConditionResult::True
520 }
521
522 fn evaluate_4(&self, _ctx: &EvaluationContext) -> ConditionResult {
524 ConditionResult::True
527 }
528
529 fn evaluate_8(&self, ctx: &EvaluationContext) -> ConditionResult {
531 let ajts = ctx.find_segments("AJT");
532 let found = ajts.iter().any(|s| {
533 let elem0 = s
534 .elements
535 .first()
536 .and_then(|e| e.first())
537 .map(|s| s.as_str())
538 .unwrap_or("");
539 let elem1 = s
540 .elements
541 .get(1)
542 .and_then(|e| e.first())
543 .map(|s| s.as_str())
544 .unwrap_or("");
545 (elem0 == "A01" || elem0 == "A02") && elem1 == "E_0505"
546 });
547 ConditionResult::from(found)
548 }
549
550 fn evaluate_9(&self, ctx: &EvaluationContext) -> ConditionResult {
552 let ajts = ctx.find_segments("AJT");
553 let found = ajts.iter().any(|s| {
554 let elem0 = s
555 .elements
556 .first()
557 .and_then(|e| e.first())
558 .map(|s| s.as_str())
559 .unwrap_or("");
560 let elem1 = s
561 .elements
562 .get(1)
563 .and_then(|e| e.first())
564 .map(|s| s.as_str())
565 .unwrap_or("");
566 (elem0 == "A32" || elem0 == "A99") && elem1 == "E_0503"
567 });
568 ConditionResult::from(found)
569 }
570
571 fn evaluate_11(&self, ctx: &EvaluationContext) -> ConditionResult {
574 ctx.has_qualifier("AJT", 1, "E_0406")
575 }
576
577 fn evaluate_12(&self, ctx: &EvaluationContext) -> ConditionResult {
580 ctx.has_qualifier("AJT", 1, "E_0407")
581 }
582
583 fn evaluate_14(&self, ctx: &EvaluationContext) -> ConditionResult {
586 resolved_ajt_code_in_cluster(ctx, Cluster::is_ablehnung_kopfebene)
587 }
588
589 fn evaluate_15(&self, ctx: &EvaluationContext) -> ConditionResult {
592 resolved_ajt_code_in_cluster(ctx, Cluster::is_ablehnung_positionsebene)
593 }
594
595 fn evaluate_16(&self, ctx: &EvaluationContext) -> ConditionResult {
598 resolved_ajt_code_in_cluster(ctx, Cluster::is_ablehnung_summenebene)
599 }
600
601 fn evaluate_18(&self, ctx: &EvaluationContext) -> ConditionResult {
603 ctx.any_group_has_any_qualifier("AJT", 0, &["A74", "A75", "A76", "AC5"], &["SG7"])
604 }
605
606 fn evaluate_22(&self, ctx: &EvaluationContext) -> ConditionResult {
608 ctx.any_group_has_any_qualifier(
609 "AJT",
610 0,
611 &[
612 "A02", "A06", "A16", "A66", "A67", "A68", "A69", "A78", "A90", "A95", "A96", "AC3",
613 "AC4",
614 ],
615 &["SG7"],
616 )
617 }
618
619 fn evaluate_26(&self, ctx: &EvaluationContext) -> ConditionResult {
621 ctx.any_group_has_any_qualifier(
622 "AJT",
623 0,
624 &["A51", "A62", "A82", "AA1", "AA6", "AA7", "AB8", "AD6"],
625 &["SG12"],
626 )
627 }
628
629 fn evaluate_28(&self, ctx: &EvaluationContext) -> ConditionResult {
631 ctx.any_group_has_any_qualifier(
632 "AJT",
633 0,
634 &[
635 "A23", "A26", "A35", "A36", "A38", "A46", "A47", "A48", "A50", "A58", "A59", "A61",
636 "A77", "A84", "A99",
637 ],
638 &["SG12"],
639 )
640 }
641
642 fn evaluate_33(&self, ctx: &EvaluationContext) -> ConditionResult {
645 ctx.has_qualifier("AJT", 1, "S_0103")
646 }
647
648 fn evaluate_34(&self, ctx: &EvaluationContext) -> ConditionResult {
650 ctx.has_qualifier("AJT", 1, "S_0104")
651 }
652
653 fn evaluate_35(&self, ctx: &EvaluationContext) -> ConditionResult {
655 ctx.any_group_has_any_qualifier("AJT", 0, &["A34", "A39", "AA2", "AB2"], &["SG12"])
656 }
657
658 fn evaluate_36(&self, ctx: &EvaluationContext) -> ConditionResult {
660 ctx.any_group_has_any_qualifier("AJT", 0, &["A12", "A75", "A80", "AE1"], &["SG7"])
661 }
662
663 fn evaluate_39(&self, ctx: &EvaluationContext) -> ConditionResult {
665 ctx.any_group_has_qualifier("AJT", 0, "AC1", &["SG7"])
666 }
667
668 fn evaluate_40(&self, ctx: &EvaluationContext) -> ConditionResult {
670 ctx.any_group_has_qualifier("AJT", 1, "E_0406", &["SG7"])
671 }
672
673 fn evaluate_41(&self, ctx: &EvaluationContext) -> ConditionResult {
675 ctx.any_group_has_qualifier("AJT", 1, "E_0407", &["SG7"])
676 }
677
678 fn evaluate_42(&self, ctx: &EvaluationContext) -> ConditionResult {
680 ctx.any_group_has_any_qualifier(
681 "AJT",
682 1,
683 &["E_0407", "E_0568", "E_0521", "E_0517", "E_0266"],
684 &["SG7"],
685 )
686 }
687
688 fn evaluate_43(&self, ctx: &EvaluationContext) -> ConditionResult {
690 ctx.any_group_has_qualifier("AJT", 0, "28", &["SG12"])
691 }
692
693 fn evaluate_47(&self, ctx: &EvaluationContext) -> ConditionResult {
695 ctx.has_qualifier("AJT", 1, "E_0210")
696 }
697
698 fn evaluate_48(&self, ctx: &EvaluationContext) -> ConditionResult {
700 ctx.has_qualifier("AJT", 1, "E_0259")
701 }
702
703 fn evaluate_51(&self, ctx: &EvaluationContext) -> ConditionResult {
705 ctx.any_group_has_qualifier("AJT", 1, "E_0406", &["SG12"])
706 }
707
708 fn evaluate_52(&self, ctx: &EvaluationContext) -> ConditionResult {
710 ctx.any_group_has_qualifier("AJT", 1, "E_0407", &["SG12"])
711 }
712
713 fn evaluate_53(&self, ctx: &EvaluationContext) -> ConditionResult {
715 ctx.any_group_has_any_qualifier("AJT", 0, &["A25", "A31", "A99", "AF1"], &["SG5", "SG12"])
716 }
717
718 fn evaluate_54(&self, ctx: &EvaluationContext) -> ConditionResult {
720 ctx.any_group_has_qualifier("AJT", 1, "E_0210", &["SG5", "SG12"])
721 }
722
723 fn evaluate_55(&self, ctx: &EvaluationContext) -> ConditionResult {
725 ctx.any_group_has_qualifier("AJT", 1, "E_0259", &["SG5", "SG12"])
726 }
727
728 fn evaluate_56(&self, ctx: &EvaluationContext) -> ConditionResult {
730 ctx.any_group_has_qualifier("AJT", 0, "A21", &["SG5", "SG7"])
731 }
732
733 fn evaluate_57(&self, ctx: &EvaluationContext) -> ConditionResult {
735 ctx.any_group_has_qualifier("AJT", 1, "E_0210", &["SG5", "SG7"])
736 }
737
738 fn evaluate_58(&self, ctx: &EvaluationContext) -> ConditionResult {
740 ctx.any_group_has_qualifier("AJT", 1, "E_0259", &["SG5", "SG7"])
741 }
742
743 fn evaluate_60(&self, ctx: &EvaluationContext) -> ConditionResult {
745 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_0243"], &["SG5", "SG7"])
746 }
747
748 fn evaluate_61(&self, ctx: &EvaluationContext) -> ConditionResult {
750 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_0261"], &["SG5", "SG7"])
751 }
752
753 fn evaluate_62(&self, ctx: &EvaluationContext) -> ConditionResult {
755 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_1007"], &["SG5", "SG7"])
756 }
757
758 fn evaluate_63(&self, ctx: &EvaluationContext) -> ConditionResult {
760 let a01 =
761 ctx.any_group_has_qualified_value("AJT", 0, "A01", 1, 0, &["E_1009"], &["SG5", "SG7"]);
762 let a02 =
763 ctx.any_group_has_qualified_value("AJT", 0, "A02", 1, 0, &["E_1009"], &["SG5", "SG7"]);
764 match (a01, a02) {
765 (ConditionResult::True, _) | (_, ConditionResult::True) => ConditionResult::True,
766 (ConditionResult::False, ConditionResult::False) => ConditionResult::False,
767 _ => ConditionResult::Unknown,
768 }
769 }
770
771 fn evaluate_64(&self, ctx: &EvaluationContext) -> ConditionResult {
773 ctx.any_group_has_qualifier("AJT", 1, "E_0264", &["SG5", "SG12"])
774 }
775
776 fn evaluate_65(&self, ctx: &EvaluationContext) -> ConditionResult {
778 ctx.any_group_has_qualifier("AJT", 1, "E_0515", &["SG5", "SG12"])
779 }
780
781 fn evaluate_66(&self, ctx: &EvaluationContext) -> ConditionResult {
783 ctx.any_group_has_qualifier("AJT", 1, "E_0519", &["SG5", "SG12"])
784 }
785
786 fn evaluate_67(&self, ctx: &EvaluationContext) -> ConditionResult {
788 ctx.any_group_has_qualifier("AJT", 1, "E_0266", &["SG5", "SG12"])
789 }
790
791 fn evaluate_68(&self, ctx: &EvaluationContext) -> ConditionResult {
793 ctx.any_group_has_qualified_value("AJT", 1, "E_0517", 1, 0, &["E_0517"], &["SG12"])
794 }
795
796 fn evaluate_69(&self, ctx: &EvaluationContext) -> ConditionResult {
798 ctx.any_group_has_qualified_value("AJT", 1, "E_0521", 1, 0, &["E_0521"], &["SG12"])
799 }
800
801 fn evaluate_70(&self, ctx: &EvaluationContext) -> ConditionResult {
803 ctx.any_group_has_qualifier("AJT", 0, "A15", &["SG12"])
804 }
805
806 fn evaluate_71(&self, ctx: &EvaluationContext) -> ConditionResult {
808 ctx.any_group_has_qualifier("AJT", 0, "A99", &["SG12"])
809 }
810
811 fn evaluate_72(&self, ctx: &EvaluationContext) -> ConditionResult {
813 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_0518"], &["SG7"])
814 }
815
816 fn evaluate_73(&self, ctx: &EvaluationContext) -> ConditionResult {
818 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_0522"], &["SG7"])
819 }
820
821 fn evaluate_74(&self, ctx: &EvaluationContext) -> ConditionResult {
823 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_0267"], &["SG7"])
824 }
825
826 fn evaluate_75(&self, ctx: &EvaluationContext) -> ConditionResult {
829 ctx.has_qualified_value("AJT", 1, "E_0264", 1, 0, &["E_0264"])
830 }
831
832 fn evaluate_76(&self, ctx: &EvaluationContext) -> ConditionResult {
835 ctx.has_qualified_value("AJT", 1, "E_0266", 1, 0, &["E_0266"])
836 }
837
838 fn evaluate_77(&self, ctx: &EvaluationContext) -> ConditionResult {
841 ctx.has_qualified_value("AJT", 1, "E_0515", 1, 0, &["E_0515"])
842 }
843
844 fn evaluate_78(&self, ctx: &EvaluationContext) -> ConditionResult {
847 ctx.has_qualified_value("AJT", 1, "E_0517", 1, 0, &["E_0517"])
848 }
849
850 fn evaluate_79(&self, ctx: &EvaluationContext) -> ConditionResult {
853 ctx.has_qualified_value("AJT", 1, "E_0519", 1, 0, &["E_0519"])
854 }
855
856 fn evaluate_80(&self, ctx: &EvaluationContext) -> ConditionResult {
859 ctx.has_qualified_value("AJT", 1, "E_0521", 1, 0, &["E_0521"])
860 }
861
862 fn evaluate_81(&self, ctx: &EvaluationContext) -> ConditionResult {
864 ctx.any_group_has_qualified_value("AJT", 1, "E_0264", 1, 0, &["E_0264"], &["SG7"])
865 }
866
867 fn evaluate_82(&self, ctx: &EvaluationContext) -> ConditionResult {
869 ctx.any_group_has_qualified_value("AJT", 1, "E_0515", 1, 0, &["E_0515"], &["SG7"])
870 }
871
872 fn evaluate_83(&self, ctx: &EvaluationContext) -> ConditionResult {
874 let values = ctx.collect_group_values("AJT", 1, 0, &["SG7"]);
875 ConditionResult::from(values.iter().any(|(_, v)| v == "E_0519"))
876 }
877
878 fn evaluate_84(&self, ctx: &EvaluationContext) -> ConditionResult {
880 let values = ctx.collect_group_values("AJT", 1, 0, &["SG7"]);
881 ConditionResult::from(values.iter().any(|(_, v)| v == "E_0266"))
882 }
883
884 fn evaluate_85(&self, ctx: &EvaluationContext) -> ConditionResult {
886 let values = ctx.collect_group_values("AJT", 1, 0, &["SG7"]);
887 ConditionResult::from(values.iter().any(|(_, v)| v == "E_0517"))
888 }
889
890 fn evaluate_86(&self, ctx: &EvaluationContext) -> ConditionResult {
892 let values = ctx.collect_group_values("AJT", 1, 0, &["SG7"]);
893 ConditionResult::from(values.iter().any(|(_, v)| v == "E_0521"))
894 }
895
896 fn evaluate_87(&self, ctx: &EvaluationContext) -> ConditionResult {
898 ctx.any_group_has_any_qualifier(
899 "AJT",
900 0,
901 &["A05", "A21", "A22", "A23", "A90", "A96", "AE7"],
902 &["SG7"],
903 )
904 }
905
906 fn evaluate_88(&self, ctx: &EvaluationContext) -> ConditionResult {
908 ctx.any_group_has_qualifier("AJT", 0, "A25", &["SG7"])
909 }
910
911 fn evaluate_89(&self, ctx: &EvaluationContext) -> ConditionResult {
913 let segs = ctx.find_segments("COM");
914 ConditionResult::from(segs.iter().any(|s| {
915 s.elements
916 .first()
917 .and_then(|e| e.get(1))
918 .is_some_and(|v| v == "EM")
919 }))
920 }
921
922 fn evaluate_90(&self, ctx: &EvaluationContext) -> ConditionResult {
924 let segs = ctx.find_segments("COM");
925 ConditionResult::from(segs.iter().any(|s| {
926 s.elements
927 .first()
928 .and_then(|e| e.get(1))
929 .is_some_and(|v| matches!(v.as_str(), "TE" | "FX" | "AJ" | "AL"))
930 }))
931 }
932
933 fn evaluate_91(&self, ctx: &EvaluationContext) -> ConditionResult {
935 let segs = ctx.find_segments("AJT");
936 ConditionResult::from(segs.iter().any(|s| {
937 s.elements
938 .get(1)
939 .and_then(|e| e.first())
940 .is_some_and(|v| v == "E_0566")
941 }))
942 }
943
944 fn evaluate_92(&self, ctx: &EvaluationContext) -> ConditionResult {
946 let segs = ctx.find_segments("AJT");
947 ConditionResult::from(segs.iter().any(|s| {
948 s.elements
949 .get(1)
950 .and_then(|e| e.first())
951 .is_some_and(|v| v == "E_0568")
952 }))
953 }
954
955 fn evaluate_93(&self, ctx: &EvaluationContext) -> ConditionResult {
957 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_0804"], &["SG7"])
958 }
959
960 fn evaluate_94(&self, ctx: &EvaluationContext) -> ConditionResult {
962 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_0806"], &["SG7"])
963 }
964
965 fn evaluate_95(&self, ctx: &EvaluationContext) -> ConditionResult {
967 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_0569"], &["SG7"])
968 }
969
970 fn evaluate_97(&self, ctx: &EvaluationContext) -> ConditionResult {
972 ctx.any_group_has_qualifier("AJT", 0, "A27", &["SG12"])
973 }
974
975 fn evaluate_98(&self, ctx: &EvaluationContext) -> ConditionResult {
977 let values = ctx.collect_group_values("AJT", 1, 0, &["SG12"]);
978 ConditionResult::from(values.iter().any(|(_, v)| v == "E_0407"))
979 }
980
981 fn evaluate_99(&self, ctx: &EvaluationContext) -> ConditionResult {
984 ConditionResult::from(ctx.find_segments("AJT").iter().any(|s| {
985 s.elements
986 .get(1)
987 .and_then(|e| e.first())
988 .is_some_and(|v| v == "E_0568")
989 }))
990 }
991
992 fn evaluate_101(&self, ctx: &EvaluationContext) -> ConditionResult {
995 if let Some(nav) = ctx.navigator() {
996 let count = nav.group_instance_count(&["SG5", "SG7"]);
997 for i in 0..count {
998 let ajts = nav.find_segments_in_group("AJT", &["SG5", "SG7"], i);
999 if ajts.iter().any(|s| {
1000 s.elements
1001 .get(1)
1002 .and_then(|e| e.first())
1003 .is_some_and(|v| v == "E_0566")
1004 }) {
1005 return ConditionResult::True;
1006 }
1007 }
1008 ConditionResult::False
1009 } else {
1010 ConditionResult::from(ctx.find_segments("AJT").iter().any(|s| {
1011 s.elements
1012 .get(1)
1013 .and_then(|e| e.first())
1014 .is_some_and(|v| v == "E_0566")
1015 }))
1016 }
1017 }
1018
1019 fn evaluate_102(&self, ctx: &EvaluationContext) -> ConditionResult {
1022 if let Some(nav) = ctx.navigator() {
1023 let count = nav.group_instance_count(&["SG5", "SG7"]);
1024 for i in 0..count {
1025 let ajts = nav.find_segments_in_group("AJT", &["SG5", "SG7"], i);
1026 if ajts.iter().any(|s| {
1027 s.elements
1028 .get(1)
1029 .and_then(|e| e.first())
1030 .is_some_and(|v| v == "E_0568")
1031 }) {
1032 return ConditionResult::True;
1033 }
1034 }
1035 ConditionResult::False
1036 } else {
1037 ConditionResult::from(ctx.find_segments("AJT").iter().any(|s| {
1038 s.elements
1039 .get(1)
1040 .and_then(|e| e.first())
1041 .is_some_and(|v| v == "E_0568")
1042 }))
1043 }
1044 }
1045
1046 fn evaluate_103(&self, ctx: &EvaluationContext) -> ConditionResult {
1049 if let Some(nav) = ctx.navigator() {
1050 let count = nav.group_instance_count(&["SG10", "SG12"]);
1051 for i in 0..count {
1052 let ajts = nav.find_segments_in_group("AJT", &["SG10", "SG12"], i);
1053 if ajts.iter().any(|s| {
1054 s.elements
1055 .get(1)
1056 .and_then(|e| e.first())
1057 .is_some_and(|v| v == "E_0566")
1058 }) {
1059 return ConditionResult::True;
1060 }
1061 }
1062 ConditionResult::False
1063 } else {
1064 ConditionResult::from(ctx.find_segments("AJT").iter().any(|s| {
1065 s.elements
1066 .get(1)
1067 .and_then(|e| e.first())
1068 .is_some_and(|v| v == "E_0566")
1069 }))
1070 }
1071 }
1072
1073 fn evaluate_104(&self, ctx: &EvaluationContext) -> ConditionResult {
1076 if let Some(nav) = ctx.navigator() {
1077 let count = nav.group_instance_count(&["SG10", "SG12"]);
1078 for i in 0..count {
1079 let ajts = nav.find_segments_in_group("AJT", &["SG10", "SG12"], i);
1080 if ajts.iter().any(|s| {
1081 s.elements
1082 .get(1)
1083 .and_then(|e| e.first())
1084 .is_some_and(|v| v == "E_0568")
1085 }) {
1086 return ConditionResult::True;
1087 }
1088 }
1089 ConditionResult::False
1090 } else {
1091 ConditionResult::from(ctx.find_segments("AJT").iter().any(|s| {
1092 s.elements
1093 .get(1)
1094 .and_then(|e| e.first())
1095 .is_some_and(|v| v == "E_0568")
1096 }))
1097 }
1098 }
1099
1100 fn evaluate_492(&self, ctx: &EvaluationContext) -> ConditionResult {
1103 ctx.external.evaluate("recipient_is_strom")
1104 }
1105
1106 fn evaluate_493(&self, ctx: &EvaluationContext) -> ConditionResult {
1109 ctx.external.evaluate("recipient_is_gas")
1110 }
1111
1112 fn evaluate_501(&self, _ctx: &EvaluationContext) -> ConditionResult {
1114 ConditionResult::True
1117 }
1118
1119 fn evaluate_502(&self, _ctx: &EvaluationContext) -> ConditionResult {
1121 ConditionResult::True
1125 }
1126
1127 fn evaluate_503(&self, _ctx: &EvaluationContext) -> ConditionResult {
1129 ConditionResult::True
1132 }
1133
1134 fn evaluate_510(&self, _ctx: &EvaluationContext) -> ConditionResult {
1136 ConditionResult::True
1139 }
1140
1141 fn evaluate_511(&self, _ctx: &EvaluationContext) -> ConditionResult {
1143 ConditionResult::True
1145 }
1146
1147 fn evaluate_512(&self, _ctx: &EvaluationContext) -> ConditionResult {
1149 ConditionResult::True
1151 }
1152
1153 fn evaluate_515(&self, _ctx: &EvaluationContext) -> ConditionResult {
1155 ConditionResult::True
1157 }
1158
1159 fn evaluate_517(&self, ctx: &EvaluationContext) -> ConditionResult {
1162 any_scoped_ajt_in_cluster(ctx, &[], Cluster::is_ablehnung_summenebene)
1163 }
1164
1165 fn evaluate_518(&self, ctx: &EvaluationContext) -> ConditionResult {
1168 any_scoped_ajt_in_cluster(ctx, &["A80"], Cluster::is_ablehnung_kopfebene)
1169 }
1170
1171 fn evaluate_519(&self, _ctx: &EvaluationContext) -> ConditionResult {
1173 ConditionResult::True
1176 }
1177
1178 fn evaluate_520(&self, _ctx: &EvaluationContext) -> ConditionResult {
1180 ConditionResult::True
1183 }
1184
1185 fn evaluate_521(&self, _ctx: &EvaluationContext) -> ConditionResult {
1187 ConditionResult::True
1190 }
1191
1192 fn evaluate_523(&self, _ctx: &EvaluationContext) -> ConditionResult {
1194 ConditionResult::True
1197 }
1198
1199 fn evaluate_525(&self, _ctx: &EvaluationContext) -> ConditionResult {
1201 ConditionResult::True
1204 }
1205
1206 fn evaluate_526(&self, _ctx: &EvaluationContext) -> ConditionResult {
1208 ConditionResult::True
1210 }
1211
1212 fn evaluate_529(&self, ctx: &EvaluationContext) -> ConditionResult {
1215 ctx.any_group_has_qualifier("AJT", 0, "A75", &["SG5", "SG7"])
1220 }
1221
1222 fn evaluate_533(&self, ctx: &EvaluationContext) -> ConditionResult {
1225 ctx.any_group_has_any_qualifier("AJT", 0, &["AA1", "AA6", "AA7", "AB8", "AD6"], &["SG12"])
1229 }
1230
1231 fn evaluate_534(&self, ctx: &EvaluationContext) -> ConditionResult {
1234 ctx.any_group_has_any_qualifier("AJT", 0, &["A34", "A39", "AA2", "AB2"], &["SG12"])
1238 }
1239
1240 fn evaluate_535(&self, _ctx: &EvaluationContext) -> ConditionResult {
1242 ConditionResult::True
1244 }
1245
1246 fn evaluate_536(&self, _ctx: &EvaluationContext) -> ConditionResult {
1248 ConditionResult::True
1250 }
1251
1252 fn evaluate_537(&self, _ctx: &EvaluationContext) -> ConditionResult {
1254 ConditionResult::True
1256 }
1257
1258 fn evaluate_538(&self, _ctx: &EvaluationContext) -> ConditionResult {
1260 ConditionResult::True
1262 }
1263
1264 fn evaluate_548(&self, _ctx: &EvaluationContext) -> ConditionResult {
1266 ConditionResult::True
1268 }
1269
1270 fn evaluate_549(&self, _ctx: &EvaluationContext) -> ConditionResult {
1272 ConditionResult::True
1274 }
1275
1276 fn evaluate_926(&self, ctx: &EvaluationContext) -> ConditionResult {
1279 ctx.format_check("MOA", 0, 1, |val| validate_numeric(val, "==", 0.0))
1280 }
1281
1282 fn evaluate_930(&self, ctx: &EvaluationContext) -> ConditionResult {
1285 ctx.format_check("MOA", 0, 1, |val| validate_max_decimal_places(val, 2))
1286 }
1287
1288 fn evaluate_931(&self, ctx: &EvaluationContext) -> ConditionResult {
1290 ctx.format_check("DTM", 0, 1, validate_timezone_utc)
1291 }
1292
1293 fn evaluate_939(&self, ctx: &EvaluationContext) -> ConditionResult {
1295 ctx.format_check("COM", 0, 0, validate_email)
1296 }
1297
1298 fn evaluate_940(&self, ctx: &EvaluationContext) -> ConditionResult {
1300 ctx.format_check("COM", 0, 0, validate_phone)
1301 }
1302}