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 RemadvConditionEvaluatorFV2604 {
21 external_conditions: std::collections::HashSet<u32>,
23}
24
25impl Default for RemadvConditionEvaluatorFV2604 {
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 RemadvConditionEvaluatorFV2604 {
38 fn message_type(&self) -> &str {
39 "REMADV"
40 }
41
42 fn format_version(&self) -> &str {
43 "FV2604"
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 121 => self.evaluate_121(ctx),
147 492 => self.evaluate_492(ctx),
148 493 => self.evaluate_493(ctx),
149 501 => self.evaluate_501(ctx),
150 502 => self.evaluate_502(ctx),
151 503 => self.evaluate_503(ctx),
152 510 => self.evaluate_510(ctx),
153 511 => self.evaluate_511(ctx),
154 512 => self.evaluate_512(ctx),
155 515 => self.evaluate_515(ctx),
156 517 => self.evaluate_517(ctx),
157 518 => self.evaluate_518(ctx),
158 519 => self.evaluate_519(ctx),
159 520 => self.evaluate_520(ctx),
160 521 => self.evaluate_521(ctx),
161 523 => self.evaluate_523(ctx),
162 525 => self.evaluate_525(ctx),
163 526 => self.evaluate_526(ctx),
164 529 => self.evaluate_529(ctx),
165 533 => self.evaluate_533(ctx),
166 534 => self.evaluate_534(ctx),
167 535 => self.evaluate_535(ctx),
168 536 => self.evaluate_536(ctx),
169 537 => self.evaluate_537(ctx),
170 538 => self.evaluate_538(ctx),
171 544 => self.evaluate_544(ctx),
172 548 => self.evaluate_548(ctx),
173 549 => self.evaluate_549(ctx),
174 926 => self.evaluate_926(ctx),
175 930 => self.evaluate_930(ctx),
176 931 => self.evaluate_931(ctx),
177 939 => self.evaluate_939(ctx),
178 940 => self.evaluate_940(ctx),
179 _ => ConditionResult::Unknown,
180 }
181 }
182
183 fn is_external(&self, condition: u32) -> bool {
184 self.external_conditions.contains(&condition)
185 }
186 fn is_known(&self, condition: u32) -> bool {
187 matches!(
188 condition,
189 2 | 3
190 | 4
191 | 8
192 | 9
193 | 11
194 | 12
195 | 14
196 | 15
197 | 16
198 | 18
199 | 22
200 | 26
201 | 28
202 | 33
203 | 34
204 | 35
205 | 36
206 | 39
207 | 40
208 | 41
209 | 42
210 | 43
211 | 45
212 | 47
213 | 48
214 | 49
215 | 50
216 | 51
217 | 52
218 | 53
219 | 54
220 | 55
221 | 56
222 | 57
223 | 58
224 | 59
225 | 60
226 | 61
227 | 62
228 | 63
229 | 64
230 | 65
231 | 66
232 | 67
233 | 68
234 | 69
235 | 70
236 | 71
237 | 72
238 | 73
239 | 74
240 | 75
241 | 76
242 | 77
243 | 78
244 | 79
245 | 80
246 | 81
247 | 82
248 | 83
249 | 84
250 | 85
251 | 86
252 | 87
253 | 88
254 | 89
255 | 90
256 | 91
257 | 92
258 | 93
259 | 94
260 | 95
261 | 96
262 | 97
263 | 98
264 | 99
265 | 100
266 | 101
267 | 102
268 | 103
269 | 104
270 | 105
271 | 106
272 | 107
273 | 108
274 | 109
275 | 110
276 | 111
277 | 112
278 | 113
279 | 114
280 | 115
281 | 116
282 | 117
283 | 118
284 | 119
285 | 120
286 | 121
287 | 492
288 | 493
289 | 501
290 | 502
291 | 503
292 | 510
293 | 511
294 | 512
295 | 515
296 | 517
297 | 518
298 | 519
299 | 520
300 | 521
301 | 523
302 | 525
303 | 526
304 | 529
305 | 533
306 | 534
307 | 535
308 | 536
309 | 537
310 | 538
311 | 544
312 | 548
313 | 549
314 | 926
315 | 930
316 | 931
317 | 939
318 | 940
319 )
320 }
321}
322
323impl RemadvConditionEvaluatorFV2604 {
324 fn evaluate_45(&self, ctx: &EvaluationContext) -> ConditionResult {
327 ctx.external.evaluate("mp_id_is_strom_sector")
328 }
329
330 fn evaluate_121(&self, ctx: &EvaluationContext) -> ConditionResult {
333 let ajts = ctx.find_segments("AJT");
336 if ajts.is_empty() {
337 return ConditionResult::False;
338 }
339 ConditionResult::from(ajts.iter().any(|s| {
340 let code = s
341 .elements
342 .first()
343 .and_then(|e| e.first())
344 .map(|v| v.as_str());
345 let pos = s
346 .elements
347 .get(1)
348 .and_then(|e| e.first())
349 .map(|v| v.as_str());
350 matches!(code, Some("A08") | Some("A99")) && pos == Some("E_3038")
351 }))
352 }
353
354 fn evaluate_2(&self, ctx: &EvaluationContext) -> ConditionResult {
356 ctx.any_group_has_qualifier("AJT", 0, "28", &["SG7"])
357 }
358
359 fn evaluate_3(&self, _ctx: &EvaluationContext) -> ConditionResult {
361 ConditionResult::True
364 }
365
366 fn evaluate_4(&self, _ctx: &EvaluationContext) -> ConditionResult {
368 ConditionResult::True
371 }
372
373 fn evaluate_8(&self, ctx: &EvaluationContext) -> ConditionResult {
375 let ajts = ctx.find_segments("AJT");
376 let found = ajts.iter().any(|s| {
377 let elem0 = s
378 .elements
379 .first()
380 .and_then(|e| e.first())
381 .map(|s| s.as_str())
382 .unwrap_or("");
383 let elem1 = s
384 .elements
385 .get(1)
386 .and_then(|e| e.first())
387 .map(|s| s.as_str())
388 .unwrap_or("");
389 (elem0 == "A01" || elem0 == "A02") && elem1 == "E_0505"
390 });
391 ConditionResult::from(found)
392 }
393
394 fn evaluate_9(&self, ctx: &EvaluationContext) -> ConditionResult {
396 let ajts = ctx.find_segments("AJT");
397 let found = ajts.iter().any(|s| {
398 let elem0 = s
399 .elements
400 .first()
401 .and_then(|e| e.first())
402 .map(|s| s.as_str())
403 .unwrap_or("");
404 let elem1 = s
405 .elements
406 .get(1)
407 .and_then(|e| e.first())
408 .map(|s| s.as_str())
409 .unwrap_or("");
410 (elem0 == "A32" || elem0 == "A99") && elem1 == "E_0503"
411 });
412 ConditionResult::from(found)
413 }
414
415 fn evaluate_11(&self, ctx: &EvaluationContext) -> ConditionResult {
418 ctx.has_qualifier("AJT", 1, "E_0406")
419 }
420
421 fn evaluate_12(&self, ctx: &EvaluationContext) -> ConditionResult {
424 ctx.has_qualifier("AJT", 1, "E_0407")
425 }
426
427 fn evaluate_14(&self, ctx: &EvaluationContext) -> ConditionResult {
430 resolved_ajt_code_in_cluster(ctx, Cluster::is_ablehnung_kopfebene)
431 }
432
433 fn evaluate_15(&self, ctx: &EvaluationContext) -> ConditionResult {
436 resolved_ajt_code_in_cluster(ctx, Cluster::is_ablehnung_positionsebene)
437 }
438
439 fn evaluate_16(&self, ctx: &EvaluationContext) -> ConditionResult {
442 resolved_ajt_code_in_cluster(ctx, Cluster::is_ablehnung_summenebene)
443 }
444
445 fn evaluate_18(&self, ctx: &EvaluationContext) -> ConditionResult {
447 ctx.any_group_has_any_qualifier("AJT", 0, &["A74", "A75", "A76", "AC5"], &["SG7"])
448 }
449
450 fn evaluate_22(&self, ctx: &EvaluationContext) -> ConditionResult {
452 ctx.any_group_has_any_qualifier(
453 "AJT",
454 0,
455 &[
456 "A02", "A06", "A16", "A66", "A67", "A68", "A69", "A78", "A90", "A95", "A96", "AC3",
457 "AC4",
458 ],
459 &["SG7"],
460 )
461 }
462
463 fn evaluate_26(&self, ctx: &EvaluationContext) -> ConditionResult {
465 ctx.any_group_has_any_qualifier(
466 "AJT",
467 0,
468 &["A51", "A62", "A82", "AA1", "AA6", "AA7", "AB8", "AD6"],
469 &["SG12"],
470 )
471 }
472
473 fn evaluate_28(&self, ctx: &EvaluationContext) -> ConditionResult {
475 ctx.any_group_has_any_qualifier(
476 "AJT",
477 0,
478 &[
479 "A23", "A26", "A35", "A36", "A38", "A46", "A47", "A48", "A50", "A58", "A59", "A61",
480 "A77", "A84", "A99",
481 ],
482 &["SG12"],
483 )
484 }
485
486 fn evaluate_33(&self, ctx: &EvaluationContext) -> ConditionResult {
489 ctx.has_qualifier("AJT", 1, "S_0103")
490 }
491
492 fn evaluate_34(&self, ctx: &EvaluationContext) -> ConditionResult {
494 ctx.has_qualifier("AJT", 1, "S_0104")
495 }
496
497 fn evaluate_35(&self, ctx: &EvaluationContext) -> ConditionResult {
499 ctx.any_group_has_any_qualifier("AJT", 0, &["A34", "A39", "AA2", "AB2"], &["SG12"])
500 }
501
502 fn evaluate_36(&self, ctx: &EvaluationContext) -> ConditionResult {
504 ctx.any_group_has_any_qualifier("AJT", 0, &["A12", "A75", "A80", "AE1"], &["SG7"])
505 }
506
507 fn evaluate_39(&self, ctx: &EvaluationContext) -> ConditionResult {
509 ctx.any_group_has_qualifier("AJT", 0, "AC1", &["SG7"])
510 }
511
512 fn evaluate_40(&self, ctx: &EvaluationContext) -> ConditionResult {
514 ctx.any_group_has_qualifier("AJT", 1, "E_0406", &["SG7"])
515 }
516
517 fn evaluate_41(&self, ctx: &EvaluationContext) -> ConditionResult {
519 ctx.any_group_has_qualifier("AJT", 1, "E_0407", &["SG7"])
520 }
521
522 fn evaluate_42(&self, ctx: &EvaluationContext) -> ConditionResult {
524 ctx.any_group_has_any_qualifier(
525 "AJT",
526 1,
527 &["E_0407", "E_0568", "E_0521", "E_0517", "E_0266"],
528 &["SG7"],
529 )
530 }
531
532 fn evaluate_43(&self, ctx: &EvaluationContext) -> ConditionResult {
534 ctx.any_group_has_qualifier("AJT", 0, "28", &["SG12"])
535 }
536
537 fn evaluate_47(&self, ctx: &EvaluationContext) -> ConditionResult {
539 ctx.has_qualifier("AJT", 1, "E_0210")
540 }
541
542 fn evaluate_48(&self, ctx: &EvaluationContext) -> ConditionResult {
544 ctx.has_qualifier("AJT", 1, "E_0259")
545 }
546
547 fn evaluate_49(&self, ctx: &EvaluationContext) -> ConditionResult {
549 ctx.any_group_has_any_qualifier(
550 "AJT",
551 0,
552 &["A01", "A05", "A22", "A23", "A90", "A96"],
553 &["SG7"],
554 )
555 }
556
557 fn evaluate_50(&self, ctx: &EvaluationContext) -> ConditionResult {
559 ctx.any_group_has_any_qualifier(
560 "AJT",
561 0,
562 &["A01", "A05", "A18", "A19", "A20", "A90", "A96"],
563 &["SG7"],
564 )
565 }
566
567 fn evaluate_51(&self, ctx: &EvaluationContext) -> ConditionResult {
569 ctx.any_group_has_qualifier("AJT", 1, "E_0406", &["SG12"])
570 }
571
572 fn evaluate_52(&self, ctx: &EvaluationContext) -> ConditionResult {
574 ctx.any_group_has_qualifier("AJT", 1, "E_0407", &["SG12"])
575 }
576
577 fn evaluate_53(&self, ctx: &EvaluationContext) -> ConditionResult {
579 ctx.any_group_has_any_qualifier("AJT", 0, &["A25", "A31", "A99", "AF1"], &["SG5", "SG12"])
580 }
581
582 fn evaluate_54(&self, ctx: &EvaluationContext) -> ConditionResult {
584 ctx.any_group_has_qualifier("AJT", 1, "E_0210", &["SG5", "SG12"])
585 }
586
587 fn evaluate_55(&self, ctx: &EvaluationContext) -> ConditionResult {
589 ctx.any_group_has_qualifier("AJT", 1, "E_0259", &["SG5", "SG12"])
590 }
591
592 fn evaluate_56(&self, ctx: &EvaluationContext) -> ConditionResult {
594 ctx.any_group_has_qualifier("AJT", 0, "A21", &["SG5", "SG7"])
595 }
596
597 fn evaluate_57(&self, ctx: &EvaluationContext) -> ConditionResult {
599 ctx.any_group_has_qualifier("AJT", 1, "E_0210", &["SG5", "SG7"])
600 }
601
602 fn evaluate_58(&self, ctx: &EvaluationContext) -> ConditionResult {
604 ctx.any_group_has_qualifier("AJT", 1, "E_0259", &["SG5", "SG7"])
605 }
606
607 fn evaluate_59(&self, ctx: &EvaluationContext) -> ConditionResult {
609 {
610 let ajt_segs = ctx.find_segments("AJT");
611 let found = ajt_segs.iter().any(|s| {
612 let qual = s
613 .elements
614 .first()
615 .and_then(|e| e.first())
616 .map(|v| v.as_str());
617 let pos = s
618 .elements
619 .get(1)
620 .and_then(|e| e.first())
621 .map(|v| v.as_str());
622 matches!(qual, Some("A08") | Some("A99")) && pos == Some("E_0459")
623 });
624 ConditionResult::from(found)
625 }
626 }
627
628 fn evaluate_60(&self, ctx: &EvaluationContext) -> ConditionResult {
630 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_0243"], &["SG5", "SG7"])
631 }
632
633 fn evaluate_61(&self, ctx: &EvaluationContext) -> ConditionResult {
635 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_0261"], &["SG5", "SG7"])
636 }
637
638 fn evaluate_62(&self, ctx: &EvaluationContext) -> ConditionResult {
640 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_1007"], &["SG5", "SG7"])
641 }
642
643 fn evaluate_63(&self, ctx: &EvaluationContext) -> ConditionResult {
645 let a01 =
646 ctx.any_group_has_qualified_value("AJT", 0, "A01", 1, 0, &["E_1009"], &["SG5", "SG7"]);
647 let a02 =
648 ctx.any_group_has_qualified_value("AJT", 0, "A02", 1, 0, &["E_1009"], &["SG5", "SG7"]);
649 match (a01, a02) {
650 (ConditionResult::True, _) | (_, ConditionResult::True) => ConditionResult::True,
651 (ConditionResult::False, ConditionResult::False) => ConditionResult::False,
652 _ => ConditionResult::Unknown,
653 }
654 }
655
656 fn evaluate_64(&self, ctx: &EvaluationContext) -> ConditionResult {
658 ctx.any_group_has_qualifier("AJT", 1, "E_0264", &["SG5", "SG12"])
659 }
660
661 fn evaluate_65(&self, ctx: &EvaluationContext) -> ConditionResult {
663 ctx.any_group_has_qualifier("AJT", 1, "E_0515", &["SG5", "SG12"])
664 }
665
666 fn evaluate_66(&self, ctx: &EvaluationContext) -> ConditionResult {
668 ctx.any_group_has_qualifier("AJT", 1, "E_0519", &["SG5", "SG12"])
669 }
670
671 fn evaluate_67(&self, ctx: &EvaluationContext) -> ConditionResult {
673 ctx.any_group_has_qualifier("AJT", 1, "E_0266", &["SG5", "SG12"])
674 }
675
676 fn evaluate_68(&self, ctx: &EvaluationContext) -> ConditionResult {
678 ctx.any_group_has_qualified_value("AJT", 1, "E_0517", 1, 0, &["E_0517"], &["SG12"])
679 }
680
681 fn evaluate_69(&self, ctx: &EvaluationContext) -> ConditionResult {
683 ctx.any_group_has_qualified_value("AJT", 1, "E_0521", 1, 0, &["E_0521"], &["SG12"])
684 }
685
686 fn evaluate_70(&self, ctx: &EvaluationContext) -> ConditionResult {
688 ctx.any_group_has_qualifier("AJT", 0, "A15", &["SG12"])
689 }
690
691 fn evaluate_71(&self, ctx: &EvaluationContext) -> ConditionResult {
693 ctx.any_group_has_qualifier("AJT", 0, "A99", &["SG12"])
694 }
695
696 fn evaluate_72(&self, ctx: &EvaluationContext) -> ConditionResult {
698 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_0518"], &["SG7"])
699 }
700
701 fn evaluate_73(&self, ctx: &EvaluationContext) -> ConditionResult {
703 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_0522"], &["SG7"])
704 }
705
706 fn evaluate_74(&self, ctx: &EvaluationContext) -> ConditionResult {
708 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_0267"], &["SG7"])
709 }
710
711 fn evaluate_75(&self, ctx: &EvaluationContext) -> ConditionResult {
714 ctx.has_qualified_value("AJT", 1, "E_0264", 1, 0, &["E_0264"])
715 }
716
717 fn evaluate_76(&self, ctx: &EvaluationContext) -> ConditionResult {
720 ctx.has_qualified_value("AJT", 1, "E_0266", 1, 0, &["E_0266"])
721 }
722
723 fn evaluate_77(&self, ctx: &EvaluationContext) -> ConditionResult {
726 ctx.has_qualified_value("AJT", 1, "E_0515", 1, 0, &["E_0515"])
727 }
728
729 fn evaluate_78(&self, ctx: &EvaluationContext) -> ConditionResult {
732 ctx.has_qualified_value("AJT", 1, "E_0517", 1, 0, &["E_0517"])
733 }
734
735 fn evaluate_79(&self, ctx: &EvaluationContext) -> ConditionResult {
738 ctx.has_qualified_value("AJT", 1, "E_0519", 1, 0, &["E_0519"])
739 }
740
741 fn evaluate_80(&self, ctx: &EvaluationContext) -> ConditionResult {
744 ctx.has_qualified_value("AJT", 1, "E_0521", 1, 0, &["E_0521"])
745 }
746
747 fn evaluate_81(&self, ctx: &EvaluationContext) -> ConditionResult {
749 ctx.any_group_has_qualified_value("AJT", 1, "E_0264", 1, 0, &["E_0264"], &["SG7"])
750 }
751
752 fn evaluate_82(&self, ctx: &EvaluationContext) -> ConditionResult {
754 ctx.any_group_has_qualified_value("AJT", 1, "E_0515", 1, 0, &["E_0515"], &["SG7"])
755 }
756
757 fn evaluate_83(&self, ctx: &EvaluationContext) -> ConditionResult {
759 let values = ctx.collect_group_values("AJT", 1, 0, &["SG7"]);
760 ConditionResult::from(values.iter().any(|(_, v)| v == "E_0519"))
761 }
762
763 fn evaluate_84(&self, ctx: &EvaluationContext) -> ConditionResult {
765 let values = ctx.collect_group_values("AJT", 1, 0, &["SG7"]);
766 ConditionResult::from(values.iter().any(|(_, v)| v == "E_0266"))
767 }
768
769 fn evaluate_85(&self, ctx: &EvaluationContext) -> ConditionResult {
771 let values = ctx.collect_group_values("AJT", 1, 0, &["SG7"]);
772 ConditionResult::from(values.iter().any(|(_, v)| v == "E_0517"))
773 }
774
775 fn evaluate_86(&self, ctx: &EvaluationContext) -> ConditionResult {
777 let values = ctx.collect_group_values("AJT", 1, 0, &["SG7"]);
778 ConditionResult::from(values.iter().any(|(_, v)| v == "E_0521"))
779 }
780
781 fn evaluate_87(&self, ctx: &EvaluationContext) -> ConditionResult {
783 ctx.any_group_has_any_qualifier(
784 "AJT",
785 0,
786 &["A05", "A21", "A22", "A23", "A90", "A96", "AE7"],
787 &["SG7"],
788 )
789 }
790
791 fn evaluate_88(&self, ctx: &EvaluationContext) -> ConditionResult {
793 ctx.any_group_has_qualifier("AJT", 0, "A25", &["SG7"])
794 }
795
796 fn evaluate_89(&self, ctx: &EvaluationContext) -> ConditionResult {
798 let segs = ctx.find_segments("COM");
799 ConditionResult::from(segs.iter().any(|s| {
800 s.elements
801 .first()
802 .and_then(|e| e.get(1))
803 .is_some_and(|v| v == "EM")
804 }))
805 }
806
807 fn evaluate_90(&self, ctx: &EvaluationContext) -> ConditionResult {
809 let segs = ctx.find_segments("COM");
810 ConditionResult::from(segs.iter().any(|s| {
811 s.elements
812 .first()
813 .and_then(|e| e.get(1))
814 .is_some_and(|v| matches!(v.as_str(), "TE" | "FX" | "AJ" | "AL"))
815 }))
816 }
817
818 fn evaluate_91(&self, ctx: &EvaluationContext) -> ConditionResult {
820 let segs = ctx.find_segments("AJT");
821 ConditionResult::from(segs.iter().any(|s| {
822 s.elements
823 .get(1)
824 .and_then(|e| e.first())
825 .is_some_and(|v| v == "E_0566")
826 }))
827 }
828
829 fn evaluate_92(&self, ctx: &EvaluationContext) -> ConditionResult {
831 let segs = ctx.find_segments("AJT");
832 ConditionResult::from(segs.iter().any(|s| {
833 s.elements
834 .get(1)
835 .and_then(|e| e.first())
836 .is_some_and(|v| v == "E_0568")
837 }))
838 }
839
840 fn evaluate_93(&self, ctx: &EvaluationContext) -> ConditionResult {
842 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_0804"], &["SG7"])
843 }
844
845 fn evaluate_94(&self, ctx: &EvaluationContext) -> ConditionResult {
847 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_0806"], &["SG7"])
848 }
849
850 fn evaluate_95(&self, ctx: &EvaluationContext) -> ConditionResult {
852 ctx.any_group_has_qualified_value("AJT", 0, "A99", 1, 0, &["E_0569"], &["SG7"])
853 }
854
855 fn evaluate_96(&self, ctx: &EvaluationContext) -> ConditionResult {
857 ctx.any_group_has_any_qualifier("AJT", 0, &["E_0503", "E_1007"], &["SG7"])
858 }
859
860 fn evaluate_97(&self, ctx: &EvaluationContext) -> ConditionResult {
862 ctx.any_group_has_qualifier("AJT", 0, "A27", &["SG12"])
863 }
864
865 fn evaluate_98(&self, ctx: &EvaluationContext) -> ConditionResult {
867 let values = ctx.collect_group_values("AJT", 1, 0, &["SG12"]);
868 ConditionResult::from(values.iter().any(|(_, v)| v == "E_0407"))
869 }
870
871 fn evaluate_99(&self, ctx: &EvaluationContext) -> ConditionResult {
874 ConditionResult::from(ctx.find_segments("AJT").iter().any(|s| {
875 s.elements
876 .get(1)
877 .and_then(|e| e.first())
878 .is_some_and(|v| v == "E_0568")
879 }))
880 }
881
882 fn evaluate_100(&self, ctx: &EvaluationContext) -> ConditionResult {
884 ctx.any_group_has_qualifier("AJT", 0, "A01", &["SG5", "SG7"])
885 }
886
887 fn evaluate_101(&self, ctx: &EvaluationContext) -> ConditionResult {
890 if let Some(nav) = ctx.navigator() {
891 let count = nav.group_instance_count(&["SG5", "SG7"]);
892 for i in 0..count {
893 let ajts = nav.find_segments_in_group("AJT", &["SG5", "SG7"], i);
894 if ajts.iter().any(|s| {
895 s.elements
896 .get(1)
897 .and_then(|e| e.first())
898 .is_some_and(|v| v == "E_0566")
899 }) {
900 return ConditionResult::True;
901 }
902 }
903 ConditionResult::False
904 } else {
905 ConditionResult::from(ctx.find_segments("AJT").iter().any(|s| {
906 s.elements
907 .get(1)
908 .and_then(|e| e.first())
909 .is_some_and(|v| v == "E_0566")
910 }))
911 }
912 }
913
914 fn evaluate_102(&self, ctx: &EvaluationContext) -> ConditionResult {
917 if let Some(nav) = ctx.navigator() {
918 let count = nav.group_instance_count(&["SG5", "SG7"]);
919 for i in 0..count {
920 let ajts = nav.find_segments_in_group("AJT", &["SG5", "SG7"], i);
921 if ajts.iter().any(|s| {
922 s.elements
923 .get(1)
924 .and_then(|e| e.first())
925 .is_some_and(|v| v == "E_0568")
926 }) {
927 return ConditionResult::True;
928 }
929 }
930 ConditionResult::False
931 } else {
932 ConditionResult::from(ctx.find_segments("AJT").iter().any(|s| {
933 s.elements
934 .get(1)
935 .and_then(|e| e.first())
936 .is_some_and(|v| v == "E_0568")
937 }))
938 }
939 }
940
941 fn evaluate_103(&self, ctx: &EvaluationContext) -> ConditionResult {
944 if let Some(nav) = ctx.navigator() {
945 let count = nav.group_instance_count(&["SG10", "SG12"]);
946 for i in 0..count {
947 let ajts = nav.find_segments_in_group("AJT", &["SG10", "SG12"], i);
948 if ajts.iter().any(|s| {
949 s.elements
950 .get(1)
951 .and_then(|e| e.first())
952 .is_some_and(|v| v == "E_0566")
953 }) {
954 return ConditionResult::True;
955 }
956 }
957 ConditionResult::False
958 } else {
959 ConditionResult::from(ctx.find_segments("AJT").iter().any(|s| {
960 s.elements
961 .get(1)
962 .and_then(|e| e.first())
963 .is_some_and(|v| v == "E_0566")
964 }))
965 }
966 }
967
968 fn evaluate_104(&self, ctx: &EvaluationContext) -> ConditionResult {
971 if let Some(nav) = ctx.navigator() {
972 let count = nav.group_instance_count(&["SG10", "SG12"]);
973 for i in 0..count {
974 let ajts = nav.find_segments_in_group("AJT", &["SG10", "SG12"], i);
975 if ajts.iter().any(|s| {
976 s.elements
977 .get(1)
978 .and_then(|e| e.first())
979 .is_some_and(|v| v == "E_0568")
980 }) {
981 return ConditionResult::True;
982 }
983 }
984 ConditionResult::False
985 } else {
986 ConditionResult::from(ctx.find_segments("AJT").iter().any(|s| {
987 s.elements
988 .get(1)
989 .and_then(|e| e.first())
990 .is_some_and(|v| v == "E_0568")
991 }))
992 }
993 }
994
995 fn evaluate_105(&self, ctx: &EvaluationContext) -> ConditionResult {
998 let segs = ctx.find_segments("AJT");
999 if segs.is_empty() {
1000 return ConditionResult::Unknown;
1001 }
1002 ConditionResult::from(segs.iter().any(|s| {
1003 s.elements
1004 .get(1)
1005 .and_then(|e| e.first())
1006 .is_some_and(|v| v == "E_0270")
1007 }))
1008 }
1009
1010 fn evaluate_106(&self, ctx: &EvaluationContext) -> ConditionResult {
1013 let segs = ctx.find_segments("AJT");
1014 if segs.is_empty() {
1015 return ConditionResult::Unknown;
1016 }
1017 ConditionResult::from(segs.iter().any(|s| {
1018 s.elements
1019 .get(1)
1020 .and_then(|e| e.first())
1021 .is_some_and(|v| v == "E_0273")
1022 }))
1023 }
1024
1025 fn evaluate_107(&self, ctx: &EvaluationContext) -> ConditionResult {
1028 let segs = ctx.find_segments("AJT");
1029 if segs.is_empty() {
1030 return ConditionResult::Unknown;
1031 }
1032 ConditionResult::from(segs.iter().any(|s| {
1033 s.elements
1034 .get(1)
1035 .and_then(|e| e.first())
1036 .is_some_and(|v| v == "E_0276")
1037 }))
1038 }
1039
1040 fn evaluate_108(&self, ctx: &EvaluationContext) -> ConditionResult {
1043 let segs = ctx.find_segments("AJT");
1044 if segs.is_empty() {
1045 return ConditionResult::Unknown;
1046 }
1047 ConditionResult::from(segs.iter().any(|s| {
1048 s.elements
1049 .get(1)
1050 .and_then(|e| e.first())
1051 .is_some_and(|v| v == "E_0277")
1052 }))
1053 }
1054
1055 fn evaluate_109(&self, ctx: &EvaluationContext) -> ConditionResult {
1057 ctx.any_group_has_any_qualifier(
1058 "AJT",
1059 0,
1060 &["A01", "A21", "A22", "A23", "A90", "A96"],
1061 &["SG7"],
1062 )
1063 }
1064
1065 fn evaluate_110(&self, ctx: &EvaluationContext) -> ConditionResult {
1067 ctx.any_group_has_qualifier("AJT", 1, "E_0270", &["SG7"])
1068 }
1069
1070 fn evaluate_111(&self, ctx: &EvaluationContext) -> ConditionResult {
1072 ctx.any_group_has_qualifier("AJT", 1, "E_0273", &["SG7"])
1073 }
1074
1075 fn evaluate_112(&self, ctx: &EvaluationContext) -> ConditionResult {
1077 ctx.any_group_has_qualifier("AJT", 1, "E_0276", &["SG7"])
1078 }
1079
1080 fn evaluate_113(&self, ctx: &EvaluationContext) -> ConditionResult {
1082 ctx.any_group_has_qualifier("AJT", 1, "E_0277", &["SG7"])
1083 }
1084
1085 fn evaluate_114(&self, ctx: &EvaluationContext) -> ConditionResult {
1087 ctx.any_group_has_qualified_value("AJT", 1, "E_0270", 1, 0, &["E_0270"], &["SG5", "SG12"])
1088 }
1089
1090 fn evaluate_115(&self, ctx: &EvaluationContext) -> ConditionResult {
1092 ctx.any_group_has_qualified_value("AJT", 1, "E_0273", 1, 0, &["E_0273"], &["SG5", "SG12"])
1093 }
1094
1095 fn evaluate_116(&self, ctx: &EvaluationContext) -> ConditionResult {
1097 ctx.any_group_has_qualified_value("AJT", 1, "E_0276", 1, 0, &["E_0276"], &["SG5", "SG12"])
1098 }
1099
1100 fn evaluate_117(&self, ctx: &EvaluationContext) -> ConditionResult {
1102 ctx.any_group_has_qualified_value("AJT", 1, "E_0277", 1, 0, &["E_0277"], &["SG5", "SG12"])
1103 }
1104
1105 fn evaluate_118(&self, ctx: &EvaluationContext) -> ConditionResult {
1107 ctx.has_segment_matching_in_group("AJT", &[(0, 0, "A99"), (1, 0, "E_0272")], &["SG7"])
1108 }
1109
1110 fn evaluate_119(&self, ctx: &EvaluationContext) -> ConditionResult {
1112 ctx.has_segment_matching_in_group("AJT", &[(0, 0, "A99"), (1, 0, "E_0275")], &["SG7"])
1113 }
1114
1115 fn evaluate_120(&self, ctx: &EvaluationContext) -> ConditionResult {
1117 ctx.any_group_has_qualifier("AJT", 0, "A01", &["SG7"])
1118 }
1119
1120 fn evaluate_492(&self, ctx: &EvaluationContext) -> ConditionResult {
1123 ctx.external.evaluate("recipient_is_strom")
1124 }
1125
1126 fn evaluate_493(&self, ctx: &EvaluationContext) -> ConditionResult {
1129 ctx.external.evaluate("recipient_is_gas")
1130 }
1131
1132 fn evaluate_501(&self, _ctx: &EvaluationContext) -> ConditionResult {
1134 ConditionResult::True
1137 }
1138
1139 fn evaluate_502(&self, _ctx: &EvaluationContext) -> ConditionResult {
1141 ConditionResult::True
1145 }
1146
1147 fn evaluate_503(&self, _ctx: &EvaluationContext) -> ConditionResult {
1149 ConditionResult::True
1152 }
1153
1154 fn evaluate_510(&self, _ctx: &EvaluationContext) -> ConditionResult {
1156 ConditionResult::True
1159 }
1160
1161 fn evaluate_511(&self, _ctx: &EvaluationContext) -> ConditionResult {
1163 ConditionResult::True
1165 }
1166
1167 fn evaluate_512(&self, _ctx: &EvaluationContext) -> ConditionResult {
1169 ConditionResult::True
1171 }
1172
1173 fn evaluate_515(&self, _ctx: &EvaluationContext) -> ConditionResult {
1175 ConditionResult::True
1177 }
1178
1179 fn evaluate_517(&self, ctx: &EvaluationContext) -> ConditionResult {
1182 any_scoped_ajt_in_cluster(ctx, &[], Cluster::is_ablehnung_summenebene)
1183 }
1184
1185 fn evaluate_518(&self, ctx: &EvaluationContext) -> ConditionResult {
1188 any_scoped_ajt_in_cluster(ctx, &["A80"], Cluster::is_ablehnung_kopfebene)
1189 }
1190
1191 fn evaluate_519(&self, _ctx: &EvaluationContext) -> ConditionResult {
1193 ConditionResult::True
1196 }
1197
1198 fn evaluate_520(&self, _ctx: &EvaluationContext) -> ConditionResult {
1200 ConditionResult::True
1203 }
1204
1205 fn evaluate_521(&self, _ctx: &EvaluationContext) -> ConditionResult {
1207 ConditionResult::True
1210 }
1211
1212 fn evaluate_523(&self, _ctx: &EvaluationContext) -> ConditionResult {
1214 ConditionResult::True
1217 }
1218
1219 fn evaluate_525(&self, _ctx: &EvaluationContext) -> ConditionResult {
1221 ConditionResult::True
1224 }
1225
1226 fn evaluate_526(&self, _ctx: &EvaluationContext) -> ConditionResult {
1228 ConditionResult::True
1230 }
1231
1232 fn evaluate_529(&self, ctx: &EvaluationContext) -> ConditionResult {
1235 ctx.any_group_has_qualifier("AJT", 0, "A75", &["SG5", "SG7"])
1240 }
1241
1242 fn evaluate_533(&self, ctx: &EvaluationContext) -> ConditionResult {
1245 ctx.any_group_has_any_qualifier("AJT", 0, &["AA1", "AA6", "AA7", "AB8", "AD6"], &["SG12"])
1249 }
1250
1251 fn evaluate_534(&self, ctx: &EvaluationContext) -> ConditionResult {
1254 ctx.any_group_has_any_qualifier("AJT", 0, &["A34", "A39", "AA2", "AB2"], &["SG12"])
1258 }
1259
1260 fn evaluate_535(&self, _ctx: &EvaluationContext) -> ConditionResult {
1262 ConditionResult::True
1264 }
1265
1266 fn evaluate_536(&self, _ctx: &EvaluationContext) -> ConditionResult {
1268 ConditionResult::True
1270 }
1271
1272 fn evaluate_537(&self, _ctx: &EvaluationContext) -> ConditionResult {
1274 ConditionResult::True
1276 }
1277
1278 fn evaluate_538(&self, _ctx: &EvaluationContext) -> ConditionResult {
1280 ConditionResult::True
1282 }
1283
1284 fn evaluate_544(&self, _ctx: &EvaluationContext) -> ConditionResult {
1286 ConditionResult::True
1288 }
1289
1290 fn evaluate_548(&self, _ctx: &EvaluationContext) -> ConditionResult {
1292 ConditionResult::True
1294 }
1295
1296 fn evaluate_549(&self, _ctx: &EvaluationContext) -> ConditionResult {
1298 ConditionResult::True
1300 }
1301
1302 fn evaluate_926(&self, ctx: &EvaluationContext) -> ConditionResult {
1305 ctx.format_check("MOA", 0, 1, |val| validate_numeric(val, "==", 0.0))
1306 }
1307
1308 fn evaluate_930(&self, ctx: &EvaluationContext) -> ConditionResult {
1311 ctx.format_check("MOA", 0, 1, |val| validate_max_decimal_places(val, 2))
1312 }
1313
1314 fn evaluate_931(&self, ctx: &EvaluationContext) -> ConditionResult {
1316 ctx.format_check("DTM", 0, 1, validate_timezone_utc)
1317 }
1318
1319 fn evaluate_939(&self, ctx: &EvaluationContext) -> ConditionResult {
1321 ctx.format_check("COM", 0, 0, validate_email)
1322 }
1323
1324 fn evaluate_940(&self, ctx: &EvaluationContext) -> ConditionResult {
1326 ctx.format_check("COM", 0, 0, validate_phone)
1327 }
1328}