automapper-validation 0.1.55

AHB condition expression parsing, evaluation, and EDIFACT validation
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
{
  "generated_at": "2026-03-12T11:40:25Z",
  "ahb_file": "UTILMD_AHB_Gas_1_1_außerordentliche_20251211.xml",
  "format_version": "FV2604",
  "conditions": {
    "508": {
      "confidence": "high",
      "reasoning": "Pure Hinweis annotation describing the semantic meaning of a date field. No condition logic to evaluate.",
      "description_hash": "67845c9f",
      "is_external": false
    },
    "35": {
      "confidence": "high",
      "reasoning": "DTM C507 composite: elements[0][0]=qualifier (Z01), elements[0][1]=DE2380 (date value). Checks if 4th character (index 3) of DE2380 equals 'T' (Termin = fixed date). Matches Example 8 pattern.",
      "description_hash": "4f52c394",
      "is_external": false
    },
    "621": {
      "confidence": "high",
      "reasoning": "Informational note — always applies unconditionally.",
      "description_hash": "6169d177",
      "is_external": false
    },
    "212": {
      "confidence": "medium",
      "reasoning": "Checks if any NAD in SG12 has DE3124 (C058 first component, elements[2][0]) absent or empty. Without group-scoped navigation, falls back to message-wide NAD check.",
      "description_hash": "b5c09245",
      "is_external": false
    },
    "17": {
      "confidence": "high",
      "reasoning": "'Wenn bereits eine bestätigte Kündigung durch Kunde oder MP vorhanden' — whether a confirmed cancellation by the customer or market participant already exists requires access to external business state (prior transactions, contract history) not present in the current EDIFACT message.",
      "description_hash": "3ae99890",
      "is_external": true
    },
    "328": {
      "confidence": "high",
      "reasoning": "Checks for IMD segment where C272 DE7081 (elements[1][0]) = Z36 and C273 DE7009 (elements[2][0]) = Z12. The '++' notation means elements[0] (DE7077) is empty; Z36 lives in C272 at elements[1][0] and Z12 in C273 at elements[2][0] per the MIG schema annotations [Z36=] and [Z12=, Z13=].",
      "description_hash": "59daa1bc",
      "is_external": false
    },
    "130": {
      "confidence": "medium",
      "reasoning": "'Wenn an Messlokation vorhanden' is interpreted as: a Messlokation section exists in the message, indicated by SEQ+Z18 (Daten der Messlokation) in SG8. Returns True when such a section is present.",
      "description_hash": "e6eba96d",
      "is_external": false
    },
    "68": {
      "confidence": "high",
      "reasoning": "Count all CCI+Z19 (Bilanzkreis) segments across the message. True when more than two occurrences.",
      "description_hash": "432deca0",
      "is_external": false
    },
    "576": {
      "confidence": "high",
      "reasoning": "[SEEDED] From FV2504",
      "description_hash": "713e5866",
      "is_external": false
    },
    "216": {
      "confidence": "medium",
      "reasoning": "CCI+++Z88 means elements[2][0]=='Z88' (Netznutzung). CAV+Z74:::Z08 means elements[0][0]=='Z74' and elements[0][3]=='Z08' (Direkter Vertrag). Uses parent-child group navigation to check co-occurrence within the same SG10 instance.",
      "description_hash": "babbeb49",
      "is_external": false
    },
    "219": {
      "confidence": "medium",
      "reasoning": "'Wenn an Marktlokation vorhanden' — whether specific data exists at the market location is a registry/master-data lookup that cannot be derived from the EDIFACT message content. Marked external.",
      "description_hash": "7d998d8c",
      "is_external": true
    },
    "33": {
      "confidence": "medium",
      "reasoning": "Wenn in Abmeldung ein Bilanzierungsende vorhanden: BGM+E02 identifies the message as Abmeldung (de-registration), DTM+159 is Bilanzierungsende. Both must coexist.",
      "description_hash": "c2391377",
      "is_external": false
    },
    "268": {
      "confidence": "high",
      "reasoning": "External condition: whether the DE3207 country code is listed with 'X' in the PLZ column of the EDI@Energy European country code list requires an external code list lookup — cannot be evaluated from EDIFACT message content.",
      "description_hash": "532d2567",
      "is_external": true
    },
    "106": {
      "confidence": "high",
      "reasoning": "In SG8 instances where SEQ+Z01 (Daten der Marktlokation) is present, check if child SG10 contains CCI with DE7037=ZA6 (Prognosegrundlage: Prognose auf Basis von Profilen) at elements[2][0]. Uses parent-child navigation.",
      "description_hash": "919232fd",
      "is_external": false
    },
    "78": {
      "confidence": "high",
      "reasoning": "STS+7 with C556.DE9013=E02 (Transaktionsgrund: Einzug in Neuanlage) must NOT be present. elements[0][0]=7 is the category qualifier, elements[2][0]=DE9013 is the reason code. Negate the positive check.",
      "description_hash": "0cee2c1b",
      "is_external": false
    },
    "241": {
      "confidence": "high",
      "reasoning": "External condition: whether the NAD+MR recipient (Nachrichtenempfänger) acts in the role of MSB (Messstellenbetreiber) cannot be determined from EDIFACT content — requires external market role registry lookup.",
      "description_hash": "cf2a70c6",
      "is_external": true
    },
    "249": {
      "confidence": "medium",
      "reasoning": "Checks that all STS+E01 segments have identical DE1131 values (elements[2][1] — Codeliste, Code within C556). Returns True when all values match the first occurrence. Message-wide fallback without per-SG4 grouping.",
      "description_hash": "db65781e",
      "is_external": false
    },
    "274": {
      "confidence": "medium",
      "reasoning": "Checks co-occurrence of SEQ+Z20 and PIA+5 in same SG8, then verifies the OBIS code (elements[1][0]) matches pattern '7-b:X.X.X' where b is variable (any subgroup) and suffix is one of the 16 listed measurement quantities. EDIFACT ?. decoded as literal colon. OBIS suffix match is message-wide as a secondary filter.",
      "description_hash": "e644ccb3",
      "is_external": false
    },
    "490": {
      "confidence": "high",
      "reasoning": "References an external date range table from Kapitel 3.5 'Prozesszeitpunkt bei MESZ mit UTC' — the valid date ranges for MESZ (Central European Summer Time) periods cannot be determined from the EDIFACT message itself.",
      "description_hash": "d566ca5a",
      "is_external": true
    },
    "11": {
      "confidence": "high",
      "reasoning": "Negation of condition 7 (STS+7++ZG9/ZH1/ZH2). If none of those Transaktionsgrund codes are present, condition is True.",
      "description_hash": "321d0c62",
      "is_external": false
    },
    "147": {
      "confidence": "medium",
      "reasoning": "'Wenn in Anfrage vorhanden' — whether something is present in the original inquiry/request message is a cross-message business context that cannot be determined from the current EDIFACT message alone. Marked external.",
      "description_hash": "e4b87f85",
      "is_external": true
    },
    "200": {
      "confidence": "high",
      "reasoning": "BGM elements[0] is C002, elements[0][0] is DE1001 (Kategorie). BGM+Z26 means elements[0][0]=\"Z26\" (Vorläufige Meldung zur Marktraumumstellung). has_qualifier checks elements[elem][0] directly.",
      "description_hash": "04a6317b",
      "is_external": false
    },
    "601": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation describing which IDs to include, always applies unconditionally.",
      "description_hash": "55b3c5f4",
      "is_external": false
    },
    "643": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation, always applies unconditionally.",
      "description_hash": "d4a51acc",
      "is_external": false
    },
    "590": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation describing which IDs to include, always applies unconditionally.",
      "description_hash": "d190b4c7",
      "is_external": false
    },
    "907": {
      "confidence": "high",
      "reasoning": "Format condition: max 4 decimal places. Applies to QTY segment value at elements[0][1]. Direct use of validate_max_decimal_places helper.",
      "description_hash": "cb9ee7ba",
      "is_external": false
    },
    "2335": {
      "confidence": "medium",
      "reasoning": "Condition states: to be given exactly once for each SEQ+Z02 (OBIS-Daten der Marktlokation) where PIA+5 transmits OBIS code 7-20:99.33.17 or 7-0:33.86.0. Per segment structure reference, PIA elements[1][0] (DE7140) holds the OBIS code. Checks message-wide PIA+5 for the target OBIS values, then verifies SEQ+Z02 is present. Since PIA is always nested in the same SG8 as its SEQ, message-wide PIA check is a valid approximation when group navigator is unavailable.",
      "description_hash": "5cb76c47",
      "is_external": false
    },
    "571": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation describing which market partner triggers the process based on Transaktionsgrund codes (LFA for ZG9, LFN for ZH0, NB for ZH1). Always applies unconditionally.",
      "description_hash": "a62b6b47",
      "is_external": false
    },
    "230": {
      "confidence": "medium",
      "reasoning": "Compares the later of DTM+Z21 and DTM+Z09 (end of Turnuszeitraum) against DTM+92 (start date). Date formats differ across the three DTM qualifiers (Z21=CCYYMM/format 106, Z09=format 602, DTM+92=CCYYMMDDHHMM/format 303), so comparison is normalized to the CCYYMM prefix (first 6 chars). The exact definition of 'sich ergebendes Datum' from Z21+Z09 introduces some ambiguity — using max(Z21,Z09) as the best approximation.",
      "description_hash": "3d0160be",
      "is_external": false
    },
    "636": {
      "confidence": "high",
      "reasoning": "Informational note — always applies unconditionally.",
      "description_hash": "c639fa99",
      "is_external": false
    },
    "902": {
      "confidence": "high",
      "reasoning": "Format condition: value must be >= 0. Applies to QTY segment value at elements[0][1]. Direct use of validate_numeric helper.",
      "description_hash": "08daa39a",
      "is_external": false
    },
    "2286": {
      "confidence": "high",
      "reasoning": "Condition states: to be given at least once for each SEQ+Z18 (Daten der Messlokation). As a boolean applicability condition, True when any SG8 instance contains SEQ with qualifier Z18 at elements[0][0].",
      "description_hash": "54d011cf",
      "is_external": false
    },
    "333": {
      "confidence": "high",
      "reasoning": "Checks for IMD segment where C272 DE7081 (elements[1][0]) = Z36 and C273 DE7009 (elements[2][0]) = Z13. Structurally identical to condition 328 but selects the Z13 (Alle Identifikationsdaten) variant instead of Z12. MIG schema confirms Z13 is a valid value for DE7009 in C273 ([Z12=, Z13=]).",
      "description_hash": "6870aa3e",
      "is_external": false
    },
    "934": {
      "confidence": "high",
      "reasoning": "Format condition checking HHMM = 0400. Uses validate_hhmm_equals helper on the DTM value. Searches all DTM segments and validates the time component. High confidence as it directly maps to the validate_hhmm_equals helper.",
      "description_hash": "d06a46c8",
      "is_external": false
    },
    "362": {
      "confidence": "high",
      "reasoning": "True when no STS+E01 segment has Prüfschritt code A03 or A17 at elements[2][0]. Same pattern as condition 361 but checking A17 instead of A04.",
      "description_hash": "dfcdeefa",
      "is_external": false
    },
    "935": {
      "confidence": "high",
      "reasoning": "Format condition checking HHMM = 0500. Uses validate_hhmm_equals helper on the DTM value. Analogous to 934 but checking 0500 (summer time / UTC offset variant for gas supply times in the German energy market).",
      "description_hash": "192bd97e",
      "is_external": false
    },
    "4": {
      "confidence": "high",
      "reasoning": "'Wenn MP-ID in SG2 NAD+MR in der Rolle LF' — the NAD+MR segment contains the recipient's MP-ID, but whether that market participant holds the role of Lieferant (LF) is external business context not encoded in the EDIFACT message itself.",
      "description_hash": "55130474",
      "is_external": true
    },
    "36": {
      "confidence": "high",
      "reasoning": "STS: elements[0][0]='E01' (Status-Kategorie: Antwort), elements[2][0] is DE9013 (status reason code, C556 composite). ZC5 = Ablehnung andere Anmeldung in Bearbeitung. has_qualified_value finds STS where qualifier matches and then checks the target element.",
      "description_hash": "63e626a8",
      "is_external": false
    },
    "133": {
      "confidence": "medium",
      "reasoning": "'Wenn an der übermittelten Marktlokation / Messlokation vorhanden' — whether a specific data element exists at the transmitted market or metering location is a business/registry lookup that cannot be determined from the EDIFACT message content alone. Marked external.",
      "description_hash": "088f9d0d",
      "is_external": true
    },
    "951": {
      "confidence": "high",
      "reasoning": "Zählpunktbezeichnung is 33 alphanumeric characters — validate_zahlpunkt covers this exactly. In UTILMD Gas, the Zählpunkt is identified via LOC+Z19, element[1][0].",
      "description_hash": "f35fc481",
      "is_external": false
    },
    "13": {
      "confidence": "high",
      "reasoning": "Negation of STS+E01++Z01 (Status der Antwort: Zustimmung mit Terminänderung). elements[0][0]='E01', elements[2][0]='Z01'. Condition is True when this status is absent.",
      "description_hash": "95c62c31",
      "is_external": false
    },
    "165": {
      "confidence": "high",
      "reasoning": "'Wenn bekannt' — the classic 'if known' external condition. Whether a piece of information (e.g., a date or value) is known to the sender is runtime business context outside the message. Marked external.",
      "description_hash": "963140b3",
      "is_external": true
    },
    "7": {
      "confidence": "high",
      "reasoning": "STS Transaktionsgrund: elements[0][0]=Statuskategorie='7', elements[2][0]=Statusanlass code. Check for ZG9/ZH1/ZH2 using has_qualified_value.",
      "description_hash": "101bffb4",
      "is_external": false
    },
    "953": {
      "confidence": "high",
      "reasoning": "validate_malo_or_zahlpunkt covers both cases exactly: 11-digit MaLo-ID with Luhn check digit, or 33-character Zählpunktbezeichnung. The identifier is typically in a LOC segment's element[1][0]. High confidence because the helper is a direct match for the condition description.",
      "description_hash": "0e6a91c8",
      "is_external": false
    },
    "567": {
      "confidence": "high",
      "reasoning": "Pure Hinweis label identifying the 'Neulieferant' role. No condition logic to evaluate.",
      "description_hash": "e0f57266",
      "is_external": false
    },
    "202": {
      "confidence": "high",
      "reasoning": "STS 'Status der Antwort' has elements[0][0]=\"E01\" (qualifier) and elements[1][0]=DE4405 (Status, Code). Finds STS where qualifier is E01 and checks elements[1][0] for value ZG2 (Gültiges Ergebnis nach der Datenprüfung).",
      "description_hash": "6bc1f9f5",
      "is_external": false
    },
    "66": {
      "confidence": "high",
      "reasoning": "Count all CCI+Z19 (Bilanzkreis) segments across the message. True when more than one occurrence. Message-wide count is correct since 'im Vorgang' means across the whole transaction.",
      "description_hash": "c5b8359a",
      "is_external": false
    },
    "952": {
      "confidence": "medium",
      "reasoning": "DIN 43863-5 Gerätenummer is an alphanumeric device identifier with a max length of 20 characters. No dedicated validator exists, so validate_max_length(20) is used as the structural check. The exact segment/element depends on the AHB table position — IDE is the most common carrier for device IDs in UTILMD Gas, with PIA as a fallback. Medium confidence due to uncertainty about the exact segment without the full AHB table context.",
      "description_hash": "1871f37e",
      "is_external": false
    },
    "70": {
      "confidence": "high",
      "reasoning": "Count all CCI+Z19 (Bilanzkreis) segments across the message. True when exactly five occurrences.",
      "description_hash": "92ec7e79",
      "is_external": false
    },
    "644": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation describing how E01 is used when the corresponding Anmeldung contained E02. Always applies unconditionally.",
      "description_hash": "66c57193",
      "is_external": false
    },
    "213": {
      "confidence": "high",
      "reasoning": "Simple qualifier presence check: NAD+Z09 (Kunde des Lieferanten) exists when elements[0][0]=='Z09'.",
      "description_hash": "f6780d06",
      "is_external": false
    },
    "912": {
      "confidence": "high",
      "reasoning": "Format condition: max 6 decimal places. Applies to QTY segment value at elements[0][1]. Direct use of validate_max_decimal_places helper.",
      "description_hash": "8464aa40",
      "is_external": false
    },
    "2287": {
      "confidence": "high",
      "reasoning": "Condition states: to be given at least once for each SEQ+Z03 (Zähleinrichtungsdaten). As a boolean applicability condition, True when any SG8 instance contains SEQ with qualifier Z03 at elements[0][0].",
      "description_hash": "e8615b2d",
      "is_external": false
    },
    "48": {
      "confidence": "high",
      "reasoning": "Same structure as condition 36. STS: elements[0][0]='E01' (Antwort-Statuskategorie), elements[2][0]=DE9013 status reason code. E14 = Ablehnung Sonstiges. has_qualified_value handles the co-element check on the same segment.",
      "description_hash": "5fe27cd1",
      "is_external": false
    },
    "15": {
      "confidence": "high",
      "reasoning": "STS+E01++Z34 (Status der Antwort: Ablehnung Mehrfachkündigung): elements[0][0]='E01' (Statuskategorie), elements[2][0]='Z34' (Statusanlass). Direct has_qualified_value check.",
      "description_hash": "254c0e3d",
      "is_external": false
    },
    "527": {
      "confidence": "high",
      "reasoning": "Pure Hinweis annotation about which identifiers must be included. No condition logic to evaluate.",
      "description_hash": "b26a1121",
      "is_external": false
    },
    "938": {
      "confidence": "high",
      "reasoning": "Format condition 'Möglicher Wert: <= 10' checks that the numeric value is at most 10. Uses validate_numeric with '<=' operator on the QTY value element.",
      "description_hash": "6ca307d1",
      "is_external": false
    },
    "1": {
      "confidence": "high",
      "reasoning": "'Wenn Aufteilung vorhanden' — whether message splitting is active is a runtime business context decision that cannot be determined from the EDIFACT message content alone.",
      "description_hash": "4ebb4e5c",
      "is_external": true
    },
    "361": {
      "confidence": "high",
      "reasoning": "True when no STS+E01 segment has Prüfschritt code A03 or A04 at elements[2][0]. Notation resolved confirms elements[2] is C556 (Statusanlass/Prüfschritt) with A03/A04 values. Negation of existence check.",
      "description_hash": "833a0f5a",
      "is_external": false
    },
    "559": {
      "confidence": "high",
      "reasoning": "Pure Hinweis annotation clarifying that the correspondence address field is not an identification field. No condition logic to evaluate.",
      "description_hash": "4c48eb52",
      "is_external": false
    },
    "166": {
      "confidence": "medium",
      "reasoning": "'Wenn vorhanden' — generic 'if present/available' without a specific segment reference. When used as a standalone condition this refers to business data availability that cannot be determined from the EDIFACT message structure alone. Marked external.",
      "description_hash": "fae4710e",
      "is_external": true
    },
    "937": {
      "confidence": "high",
      "reasoning": "Format condition 'keine Nachkommastelle' means no decimal places allowed, i.e., max 0 decimal places. Uses validate_max_decimal_places(val, 0) on the QTY value, which is the most common numeric value segment in UTILMD.",
      "description_hash": "e3f49bb8",
      "is_external": false
    },
    "500": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation describing how to choose the code based on the category of the message being cancelled. Always applies unconditionally.",
      "description_hash": "90cddaf7",
      "is_external": false
    },
    "510": {
      "confidence": "high",
      "reasoning": "Pure Hinweis annotation describing usage context for ESV deregistration. No condition logic to evaluate.",
      "description_hash": "72d664cc",
      "is_external": false
    },
    "19": {
      "confidence": "high",
      "reasoning": "SG10 is a child group of SG8. Find SG8 instances where SEQ+Z01 (Daten der Marktlokation, elements[0][0]='Z01') is present, then check if their SG10 children contain CCI with elements[2][0]='ZC0' (Prognose auf Basis von Werten). The CCI+++ZC0 notation places the qualifier at elements[2][0] per segment structure.",
      "description_hash": "2ce7666f",
      "is_external": false
    },
    "252": {
      "confidence": "medium",
      "reasoning": "DE0068 is the Common Access Reference in UNH (elements[2][0]). Checks if it is present and non-empty in any UNH segment.",
      "description_hash": "87b3eb73",
      "is_external": false
    },
    "491": {
      "confidence": "high",
      "reasoning": "References an external date range table from Kapitel 3.6 'Prozesszeitpunkt bei MEZ mit UTC' — the valid date ranges for MEZ (Central European Time) periods cannot be determined from the EDIFACT message itself.",
      "description_hash": "798c2c48",
      "is_external": true
    },
    "583": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation describing field usage, always applies unconditionally.",
      "description_hash": "9727b89c",
      "is_external": false
    },
    "622": {
      "confidence": "high",
      "reasoning": "Informational note — always applies unconditionally.",
      "description_hash": "04b6eeeb",
      "is_external": false
    },
    "14": {
      "confidence": "high",
      "reasoning": "'Wenn Datum bekannt' — whether a specific date is known is a runtime business context condition that cannot be determined from the EDIFACT message content alone.",
      "description_hash": "d089cab4",
      "is_external": true
    },
    "64": {
      "confidence": "high",
      "reasoning": "Simple qualifier existence: DTM+158 (Bilanzierungsbeginn) at elements[0][0].",
      "description_hash": "a8edfdd7",
      "is_external": false
    },
    "2": {
      "confidence": "high",
      "reasoning": "UNH DE0070 (Übermittlungsfolgenummer) is at elements[3][0] per the segment structure reference. Check if it equals '1'.",
      "description_hash": "31d5d244",
      "is_external": false
    },
    "502": {
      "confidence": "high",
      "reasoning": "Hinweis condition — purely informational annotation about when Ersatzbelieferung applies. Contains no boolean predicate. Always returns True.",
      "description_hash": "43d66d01",
      "is_external": false
    },
    "28": {
      "confidence": "high",
      "reasoning": "Checks message-wide whether any DTM segment with elements[0][0]='93' (Ende zum) is present.",
      "description_hash": "379d10ac",
      "is_external": false
    },
    "51": {
      "confidence": "high",
      "reasoning": "Whether the delivery end/start is retroactive (rückwirkend) requires comparing the delivery date against a system reference date or business process clock — this is a business context determination that cannot be made from the EDIFACT message content alone.",
      "description_hash": "f2ebdab8",
      "is_external": true
    },
    "283": {
      "confidence": "high",
      "reasoning": "External condition: whether the message recipient is the currently assigned Lieferant (supplier) at the Nachrichtendatum requires external business context from the market registry — not derivable from EDIFACT message content.",
      "description_hash": "13f0997a",
      "is_external": true
    },
    "336": {
      "confidence": "medium",
      "reasoning": "\"Wenn in Änderungsmeldung gefüllt\" means the condition applies when this field is populated in the context of an amendment message (Änderungsmeldung). Whether a given transmission constitutes an amendment depends on business context (the PID / Vorgang type) that cannot be reliably determined from the raw EDIFACT segments alone. Delegated to external provider.",
      "description_hash": "eaa7fa09",
      "is_external": true
    },
    "2119": {
      "confidence": "high",
      "reasoning": "Condition states the segment group is to be given exactly once per SG8 SEQ+Z13 (Smartmeter-Gateway). As a boolean applicability condition, True when any SG8 instance contains SEQ with qualifier Z13 at elements[0][0].",
      "description_hash": "8e48029e",
      "is_external": false
    },
    "209": {
      "confidence": "medium",
      "reasoning": "Checks if any DTM segment has DE2379 (elements[0][2]) equal to '303'. 'Im selben Segment' implies checking the format code component within the same DTM segment context; falls back to message-wide check without segment-level navigation.",
      "description_hash": "0e2d44dd",
      "is_external": false
    },
    "574": {
      "confidence": "high",
      "reasoning": "[SEEDED] From FV2504",
      "description_hash": "a1e18cd6",
      "is_external": false
    },
    "2284": {
      "confidence": "high",
      "reasoning": "Condition states: to be given exactly once for each Messlokations-ID in SG5 LOC+172 (Meldepunkt) DE3225. As a boolean applicability condition, True when any SG5 instance contains LOC with qualifier 172 at elements[0][0].",
      "description_hash": "b0478343",
      "is_external": false
    },
    "39": {
      "confidence": "high",
      "reasoning": "Whether the LF (Lieferant) intends to transmit a meter reading (Zählerstand) is an intent/agreement outside the current EDIFACT message — it reflects a bilateral agreement or process state that cannot be derived from message segments alone.",
      "description_hash": "7c58b9f1",
      "is_external": true
    },
    "566": {
      "confidence": "high",
      "reasoning": "Pure Hinweis label identifying the 'Altlieferant' role. No condition logic to evaluate.",
      "description_hash": "6182ad8a",
      "is_external": false
    },
    "108": {
      "confidence": "medium",
      "reasoning": "Kundenwertverfahren (e.g., TU München) is a specific billing methodology determined by contract terms, not derivable from the EDIFACT message content itself.",
      "description_hash": "a793b602",
      "is_external": true
    },
    "81": {
      "confidence": "high",
      "reasoning": "FTX+ABO where C107.DE4441 (elements[2][0]) = Z05. Per MIG schema, the code Z05 (Änderung vorhanden) is at elements[2][0] in the C107 composite, not elements[1]. AHB shorthand notation is overridden by the authoritative segment structure reference.",
      "description_hash": "b6eafc83",
      "is_external": false
    },
    "427": {
      "confidence": "high",
      "reasoning": "References external codelist 'Codeliste der Standard-Messprodukte Gas' from Kapitel 3 — cannot be evaluated from EDIFACT message segments alone; requires access to the external codelist.",
      "description_hash": "e562240b",
      "is_external": true
    },
    "138": {
      "confidence": "high",
      "reasoning": "Directly checks absence of LOC segment with qualifier 172 (Meldepunkt) at elements[0]. Returns True when no such LOC segment exists in the message.",
      "description_hash": "66e06dca",
      "is_external": false
    },
    "345": {
      "confidence": "high",
      "reasoning": "Check if LOC+172 (Meldepunkt) in SG5 has a 33-character identifier at elements[1][0] (DE3225). 33-character IDs are German MALO-IDs. Direct string length check.",
      "description_hash": "f55b927f",
      "is_external": false
    },
    "572": {
      "confidence": "high",
      "reasoning": "Hinweis informational annotation — always applies unconditionally.",
      "description_hash": "58a57b5c",
      "is_external": false
    },
    "58": {
      "confidence": "medium",
      "reasoning": "DE3055 (Verantwortliche Stelle für die Codepflege) appears at CCI elements[2][2] in CCI — Klimazone/Temperaturmessstelle. Checks any CCI in the message has that code. 'In diesem CCI' implies context-local check; falls back to message-wide.",
      "description_hash": "081389d4",
      "is_external": false
    },
    "277": {
      "confidence": "medium",
      "reasoning": "'Wenn Zuordnung vorhanden' most likely refers to Bilanzkreiszuordnung zur Marktlokation, indicated by STS+Z18 per the MIG segment reference. Medium confidence as 'Zuordnung' could refer to other assignments in different PID contexts.",
      "description_hash": "e2f1e3f9",
      "is_external": false
    },
    "203": {
      "confidence": "high",
      "reasoning": "Check STS segment where elements[0][0]==\"7\" (Statuskategorie=7) and elements[2][0] (Statusanlass) is one of E06, Z39, ZC6, ZC7, ZT6, ZT7. The has_qualified_value helper covers this pattern exactly.",
      "description_hash": "ac674e3a",
      "is_external": false
    },
    "77": {
      "confidence": "high",
      "reasoning": "In any SG8 instance where SEQ+Z03 (Zähleinrichtungsdaten) is present, CAV+Z30 (Identifikation/Nummer des Gerätes) is absent. Uses same-group absence helper.",
      "description_hash": "2e4bb8df",
      "is_external": false
    },
    "442": {
      "confidence": "medium",
      "reasoning": "Condition is True when NO SG8 with SEQ+Z09 (Mengenumwerterdaten) has a co-occurring RFF+MG. Implemented by negating any_group_has_co_occurrence. Medium confidence because the 'same device number as meter' cross-reference aspect cannot be fully validated without knowing which meter device number to compare against.",
      "description_hash": "3ff742e0",
      "is_external": false
    },
    "930": {
      "confidence": "high",
      "reasoning": "Format condition: max 2 decimal places. Applies to QTY segment value at elements[0][1]. Direct use of validate_max_decimal_places helper.",
      "description_hash": "30e8c861",
      "is_external": false
    },
    "655": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation about OBIS code assignment when Zähler is connected to Mengenumwerter. Always applies unconditionally.",
      "description_hash": "3db6ca4a",
      "is_external": false
    },
    "69": {
      "confidence": "high",
      "reasoning": "Count all CCI+Z19 (Bilanzkreis) segments across the message. True when more than three occurrences.",
      "description_hash": "7ec31f5d",
      "is_external": false
    },
    "560": {
      "confidence": "high",
      "reasoning": "Pure Hinweis annotation clarifying the non-identification use of meter reading card address data. No condition logic to evaluate.",
      "description_hash": "58cc7c2e",
      "is_external": false
    },
    "324": {
      "confidence": "low",
      "reasoning": "Similar to condition 315: requires validating completeness of OBIS codes at the Zähleinrichtung level against the EDI@Energy OBIS code list (Kap. 4) and Messprodukt-Codes from 'Codeliste der Konfigurationen' Kap. 5.2. Cannot be determined from EDIFACT message content alone without external reference data.",
      "description_hash": "d156d789",
      "is_external": true
    },
    "501": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation describing where the value originates (from DTM+157 of the assignment list). Always applies unconditionally.",
      "description_hash": "454cdf46",
      "is_external": false
    },
    "511": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation describing usage context, not a boolean predicate. Always returns True.",
      "description_hash": "cc90bcbd",
      "is_external": false
    },
    "129": {
      "confidence": "medium",
      "reasoning": "Whether the supplier has contract knowledge about the amount of a special KA (Sonder-Kapazitätsanteil) is contract-based knowledge. Cannot be derived from the EDIFACT message.",
      "description_hash": "7004cb99",
      "is_external": true
    },
    "46": {
      "confidence": "medium",
      "reasoning": "In SG8 with SEQ+Z35 (Lastprofildaten), check SG10 children for CCI+Z12 (Lastprofil, elements[0][0]='Z12') AND a Klimazone CCI with DE3055=293 at elements[2][2] (responsible agency code = BDEW/GS1-DE). Uses collect_group_values to find Z35 SG8 instances by index, then navigator for SG10 child traversal.",
      "description_hash": "332ba921",
      "is_external": false
    },
    "84": {
      "confidence": "high",
      "reasoning": "STS with C601.DE9015=E01 (Status der Antwort) and C556.DE9013=Z35 (Ablehnung der Abmeldeanfrage). elements[0][0]=E01 is category, elements[2][0]=Z35 is the Prüfschritt code.",
      "description_hash": "c678bc5e",
      "is_external": false
    },
    "98": {
      "confidence": "medium",
      "reasoning": "'Wenn MP-ID in SG2 NAD+MS in der Rolle NB' — while we can confirm NAD+MS exists in the message, determining whether that market participant ID is registered in the role of Netzbetreiber (NB) requires an external role/master-data lookup. Cannot be derived from the EDIFACT message content alone.",
      "description_hash": "b51d892c",
      "is_external": true
    },
    "3": {
      "confidence": "low",
      "reasoning": "This condition requires comparing across multiple split messages to determine which has the highest Übermittlungsfolgenummer. This is an external condition — the validator would need to know about all messages in the split set and their sequence numbers, which is not available from a single EDIFACT message.",
      "description_hash": "3502aab6",
      "is_external": true
    },
    "92": {
      "confidence": "medium",
      "reasoning": "'Wenn Wert innerhalb SG bzw. Segment geändert wird' — whether a value was changed compared to a prior state cannot be determined from the EDIFACT message alone; requires external business context comparing current vs previous transmission.",
      "description_hash": "91b75fa8",
      "is_external": true
    },
    "37": {
      "confidence": "high",
      "reasoning": "Whether a registration/change is time-limited (befristet) is a business property of the registration itself. Matches the known external condition pattern 'Wenn befristet' → registration_is_time_limited documented in CLAUDE.md.",
      "description_hash": "8ae2fa4a",
      "is_external": true
    },
    "26": {
      "confidence": "medium",
      "reasoning": "Zählpunktbezeichnung format contains non-digit characters (typically alphanumeric string). Negates condition 25's all-digit check. Returns True if DE3225 of LOC+172 is non-empty and contains at least one non-digit character.",
      "description_hash": "0585333d",
      "is_external": false
    },
    "577": {
      "confidence": "high",
      "reasoning": "[SEEDED] From FV2504",
      "description_hash": "38a15778",
      "is_external": false
    },
    "581": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation describing field usage, always applies unconditionally.",
      "description_hash": "c0a5d56f",
      "is_external": false
    },
    "5": {
      "confidence": "high",
      "reasoning": "'Wenn MP-ID in SG2 NAD+MS in der Rolle LF' — the NAD+MS segment contains the sender's MP-ID, but whether that market participant holds the role of Lieferant (LF) is external business context not encoded in the EDIFACT message itself.",
      "description_hash": "a1466d0d",
      "is_external": true
    },
    "24": {
      "confidence": "high",
      "reasoning": "Checks message-wide whether any DTM segment with elements[0][0]='Z21' (Termin der Netznutzungsabrechnung) is present.",
      "description_hash": "83eea6a7",
      "is_external": false
    },
    "637": {
      "confidence": "high",
      "reasoning": "Informational note — always applies unconditionally.",
      "description_hash": "849c0f3f",
      "is_external": false
    },
    "638": {
      "confidence": "high",
      "reasoning": "Informational note — always applies unconditionally.",
      "description_hash": "92f36b7c",
      "is_external": false
    },
    "654": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation about data relevance to the addressed market partner. Always applies unconditionally.",
      "description_hash": "8e1d3102",
      "is_external": false
    },
    "513": {
      "confidence": "medium",
      "reasoning": "Hinweis describing precedence rule between QTY+Y02 and QTY+31. Partial implementation checks whether QTY+Y02 is present (i.e. the rule is active). Full semantic enforcement (exclusive use) cannot be expressed as a simple ConditionResult.",
      "description_hash": "8e54734d",
      "is_external": false
    },
    "47": {
      "confidence": "medium",
      "reasoning": "Logical negation of condition 46: CCI+Z12 Klimazone DE3055=293 NOT present in SG10 under SG8+Z35. Propagates Unknown to maintain three-valued semantics.",
      "description_hash": "da6a7cc7",
      "is_external": false
    },
    "65": {
      "confidence": "high",
      "reasoning": "Whether a market area overlap (Marktgebietsüberlappung) exists and which balance groups (Bilanzkreise) of the LF have free capacity at the NB is entirely a market topology and capacity question — it depends on external registry/capacity data that is not encoded in the EDIFACT message itself.",
      "description_hash": "ef0b34cd",
      "is_external": true
    },
    "494": {
      "confidence": "high",
      "reasoning": "This is a Hinweis — an informational annotation describing the semantic meaning of the date field (must be the document creation time or earlier). It does not encode a boolean predicate derivable from other segments; it is a constraint description that always applies unconditionally.",
      "description_hash": "e0eddcc9",
      "is_external": false
    },
    "556": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation describing fallback address logic (use Marktlokation address if no correspondence address available). Always applies unconditionally.",
      "description_hash": "757114fc",
      "is_external": false
    },
    "257": {
      "confidence": "high",
      "reasoning": "Checks that SEQ+Z02 (OBIS-Daten der Marktlokation) and PIA with OBIS code '7-0:33.86.0' (EDIFACT escape ?. decoded as literal colon) co-occur in the same SG8 instance.",
      "description_hash": "634cbfce",
      "is_external": false
    },
    "507": {
      "confidence": "high",
      "reasoning": "Pure Hinweis annotation describing the semantic meaning of a date field. No condition logic to evaluate.",
      "description_hash": "f261bf57",
      "is_external": false
    },
    "16": {
      "confidence": "high",
      "reasoning": "STS+E01++Z12 (Status der Antwort: Ablehnung Vertragsbindung): elements[0][0]='E01', elements[2][0]='Z12'. Direct has_qualified_value check.",
      "description_hash": "01e37a5a",
      "is_external": false
    },
    "2061": {
      "confidence": "medium",
      "reasoning": "Condition states the segment/group is to be given exactly once per SG4 IDE (Vorgang). As a boolean applicability condition, this is True when the IDE segment (Vorgangsidentifikator) is present, indicating the SG4 context exists. Cardinality enforcement (exactly once) is a structural rule beyond a simple boolean evaluator.",
      "description_hash": "6282c707",
      "is_external": false
    },
    "9": {
      "confidence": "high",
      "reasoning": "Negation of STS+7++ZE4 presence. If no STS+7 exists or ZE4 is not the value, condition 'nicht vorhanden' is True. Only False when ZE4 is explicitly found.",
      "description_hash": "1f2a0b03",
      "is_external": false
    },
    "25": {
      "confidence": "medium",
      "reasoning": "Marktlokations-ID in German gas market is a numeric (all-digit) identifier. LOC+172 has elements[0][0]='172', elements[1][0]=DE3225. Checks if value consists entirely of ASCII digits. Returns Unknown if no LOC+172 exists.",
      "description_hash": "ebb975a2",
      "is_external": false
    },
    "368": {
      "confidence": "high",
      "reasoning": "\"Es sind alle Codes aus der Codeliste G_0009 erlaubt\" is an informational note stating that all codes from code list G_0009 are permitted for this field. It is a permissive annotation about valid values, not a boolean predicate — equivalent to a Hinweis. Always returns True.",
      "description_hash": "6c1d28dd",
      "is_external": false
    },
    "137": {
      "confidence": "medium",
      "reasoning": "'Nicht bei Neuanlage' — the condition is True when the transaction reason is NOT E02 (Neubau / new installation). Finds STS with elements[0][0]=\"7\" (Transaktionsgrund), checks elements[2][0] for E02, and negates the result.",
      "description_hash": "11a2de30",
      "is_external": false
    },
    "504": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation noting Z22 is shared with Strom but the Einspeisevergütungsintervall reference is irrelevant for Gas. Contains no boolean predicate. Always returns True.",
      "description_hash": "c2e1f14d",
      "is_external": false
    },
    "651": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation about Marktraumumstellung Gas process. Always applies unconditionally.",
      "description_hash": "98ebc4e0",
      "is_external": false
    },
    "18": {
      "confidence": "high",
      "reasoning": "DTM+93 (Ende zum): elements[0][0]=qualifier='93'. lacks_qualifier returns True when no DTM with qualifier 93 exists in the message.",
      "description_hash": "b2b52d1a",
      "is_external": false
    },
    "127": {
      "confidence": "medium",
      "reasoning": "Whether the supplier knows from their contract that the customer has no high KA (Kapazitätsanteil) is contract-based knowledge external to the EDIFACT message. Cannot be determined from segment data alone.",
      "description_hash": "c59beaeb",
      "is_external": true
    },
    "931": {
      "confidence": "high",
      "reasoning": "Format condition: ZZZ = +00 means UTC timezone. Applies to DTM segment value at elements[0][1] (the datetime string which embeds timezone, e.g. '202505312200+00'). Uses validate_timezone_utc helper which checks the timezone portion of the value.",
      "description_hash": "825c510c",
      "is_external": false
    },
    "123": {
      "confidence": "medium",
      "reasoning": "Collects device IDs (via RFF+MG or RFF+Z11) from all SG8 instances that have SEQ+Z20. Returns True if any device ID appears in at least two such instances, indicating at least one further SG8 references the same device. Requires navigator for proper group-scoped traversal.",
      "description_hash": "c65110f0",
      "is_external": false
    },
    "29": {
      "confidence": "high",
      "reasoning": "Whether balancing (Bilanzierung) takes place is a business context fact about market participant configuration — it cannot be determined from the EDIFACT message content alone.",
      "description_hash": "2ee6d67e",
      "is_external": true
    },
    "128": {
      "confidence": "high",
      "reasoning": "Checks if any SG10 instance (child of SG8) contains a CAV segment with code TAS, TKS, SAS, or KAS at elements[0][0]. These are Konzessionsabgabe sub-types. The group path SG4→SG8→SG10 correctly targets CAV segments in child groups.",
      "description_hash": "405942ea",
      "is_external": false
    },
    "950": {
      "confidence": "high",
      "reasoning": "Format condition for Marktlokations-ID. Uses validate_malo_id which checks 11-digit Luhn check digit format. Extracts from LOC+Z16 segment (Z16 is the EDIFACT qualifier for Marktlokation in UTILMD Gas), elements[1][0] holds the ID value.",
      "description_hash": "a9ddfaec",
      "is_external": false
    },
    "10": {
      "confidence": "high",
      "reasoning": "STS+Z17 means Statuskategorie (elements[0][0]) == 'Z17', which is the Transaktionsgrundergänzung für befristete Anmeldung segment. Simple qualifier check.",
      "description_hash": "532a5167",
      "is_external": false
    },
    "505": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation about when Übergangsversorgung applies (§ 38a EnWG, bilateral agreement). Contains no boolean predicate. Always returns True.",
      "description_hash": "c32f41b8",
      "is_external": false
    },
    "367": {
      "confidence": "high",
      "reasoning": "True when a STS+E01 segment exists with Prüfschritt code A04 at elements[2][0] (C556 DE9013). Notation resolved confirms elements[2] holds A04. Direct use of has_qualified_value helper.",
      "description_hash": "4914eff7",
      "is_external": false
    },
    "2353": {
      "confidence": "high",
      "reasoning": "Condition states: to be given at least once for each SEQ+Z09 (Mengenumwerter-Daten). As a boolean applicability condition, True when any SG8 instance contains SEQ with qualifier Z09 at elements[0][0].",
      "description_hash": "e2d813e2",
      "is_external": false
    },
    "573": {
      "confidence": "high",
      "reasoning": "[SEEDED] From FV2504",
      "description_hash": "03badedc",
      "is_external": false
    },
    "276": {
      "confidence": "high",
      "reasoning": "Simple qualifier check for DTM+92 (Beginn zum) in SG4 via elements[0][0]=='92'.",
      "description_hash": "1f38de55",
      "is_external": false
    },
    "558": {
      "confidence": "high",
      "reasoning": "Pure Hinweis annotation indicating voluntary data exchange. No condition logic to evaluate.",
      "description_hash": "dea71226",
      "is_external": false
    },
    "32": {
      "confidence": "high",
      "reasoning": "BGM elements[0][0] is DE1001 (document name code). E03 = Änderungsmeldungen. Direct qualifier check.",
      "description_hash": "f0bcae17",
      "is_external": false
    },
    "570": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation labeling this as the previous network operator (Netzbetreiber Alt). Always applies unconditionally.",
      "description_hash": "3cae0941",
      "is_external": false
    },
    "584": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation describing field usage, always applies unconditionally.",
      "description_hash": "d7954b75",
      "is_external": false
    },
    "205": {
      "confidence": "high",
      "reasoning": "Checks absence of QTY segment with qualifier Y02 (TUM Kundenwert) at elements[0][0]. Returns True when no QTY+Y02 exists anywhere in the message.",
      "description_hash": "7f34a39b",
      "is_external": false
    },
    "528": {
      "confidence": "high",
      "reasoning": "Pure Hinweis annotation about date carryover from request. No condition logic to evaluate.",
      "description_hash": "eea84db1",
      "is_external": false
    },
    "315": {
      "confidence": "low",
      "reasoning": "This condition requires validating completeness of OBIS codes against an external code list (EDI@Energy Codeliste der OBIS-Kennzahlen, Kap. 4 and 4.6) and cross-referencing Messprodukt-Codes from 'Codeliste der Konfigurationen' Kap. 5.2. This cannot be determined from the EDIFACT message content alone — it requires external reference data about required OBIS codes per configuration.",
      "description_hash": "1d08e79a",
      "is_external": true
    },
    "12": {
      "confidence": "high",
      "reasoning": "DTM+471 (Ende zum nächstmöglichem Termin): elements[0][0]=qualifier='471'. lacks_qualifier returns True when no such DTM exists.",
      "description_hash": "c8244b0e",
      "is_external": false
    },
    "530": {
      "confidence": "high",
      "reasoning": "Pure Hinweis annotation about data completeness requirements at a given date. No condition logic to evaluate.",
      "description_hash": "76504406",
      "is_external": false
    }
  }
}