automapper-validation 0.1.65

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
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
{
  "generated_at": "2026-03-12T10:12:37Z",
  "ahb_file": "MSCONS_AHB_3_1f_Fehlerkorrektur_20250623.xml",
  "format_version": "FV2504",
  "conditions": {
    "97": {
      "confidence": "medium",
      "reasoning": "Whether this transmission is caused by a gas quality changeover (H-Gas/L-Gas conversion) cannot be determined from EDIFACT message content alone — it is a business context condition.",
      "description_hash": "a2653008",
      "is_external": true
    },
    "546": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation about when a reference to Stammdatenänderung must be provided. Always applies unconditionally.",
      "description_hash": "78388ebe",
      "is_external": false
    },
    "556": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation, always returns True.",
      "description_hash": "eb0a6c9d",
      "is_external": false
    },
    "81": {
      "confidence": "low",
      "reasoning": "Whether the sender (NAD+MS) is acting in the role of ÜNB (Übertragungsnetzbetreiber) cannot be determined from the EDIFACT message content alone — it requires external market participant role registry context.",
      "description_hash": "0a4f0609",
      "is_external": true
    },
    "932": {
      "confidence": "high",
      "reasoning": "Format condition: HHMM = 2200 means the time portion of the DTM value must be 22:00. Uses validate_hhmm_equals helper.",
      "description_hash": "943b98c4",
      "is_external": false
    },
    "2003": {
      "confidence": "high",
      "reasoning": "Cardinality annotation stating the segment group appears exactly two times per SG9 LIN instance. This is an informational structural constraint describing required multiplicity, not a boolean predicate evaluated against a single field's presence. Treated as Hinweis — always True.",
      "description_hash": "0d195b57",
      "is_external": false
    },
    "83": {
      "confidence": "medium",
      "reasoning": "STS 'Grundlage der Energiemenge' has elements[0][0]='10' (Statuskategorie) and elements[1][0]=status code. STS lives in SG10 (child of SG9). Condition is True when NO STS with category 10 and status Z38 exists within SG9/SG10 scope. Using any_group_has_qualified_value on SG9->SG10 path then negating. Group scope is approximate — a precise check would traverse SG9 instances and their SG10 children.",
      "description_hash": "6b75d048",
      "is_external": false
    },
    "71": {
      "confidence": "high",
      "reasoning": "BGM document name code (DE1001) is at elements[0][0]. Check equals 'Z39'.",
      "description_hash": "0929af95",
      "is_external": false
    },
    "85": {
      "confidence": "medium",
      "reasoning": "Same pattern as condition 83 but for status code Z36. True when no STS+10+Z36 is present in any SG10 within the SG9 scope.",
      "description_hash": "cee5148d",
      "is_external": false
    },
    "933": {
      "confidence": "high",
      "reasoning": "Format condition: HHMM = 2300 means the time portion of the DTM value must be 23:00. Uses validate_hhmm_equals helper.",
      "description_hash": "b5e9c81e",
      "is_external": false
    },
    "91": {
      "confidence": "high",
      "reasoning": "BGM elements[0][0] = DE1001 (Dokumentenname, Code). Checks if BGM segment has code Z42 at elements[0][0]. Z42 is a valid DE1001 code. Simple qualifier existence check.",
      "description_hash": "6d7d3887",
      "is_external": false
    },
    "42": {
      "confidence": "high",
      "reasoning": "Checks if the message recipient (NAD+MR) holds the market role MSB (Messstellenbetreiber). Like all role checks, this requires an external registry lookup — the EDIFACT message only carries the MP-ID, not the associated role.",
      "description_hash": "e0fcdd50",
      "is_external": true
    },
    "526": {
      "confidence": "high",
      "reasoning": "Informational note — always applies unconditionally.",
      "description_hash": "8b2596fc",
      "is_external": false
    },
    "531": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation documenting the origin of a value from a referenced MSCONS message. Always returns True.",
      "description_hash": "531eaeab",
      "is_external": false
    },
    "35": {
      "confidence": "high",
      "reasoning": "The NAD+MS contains the MP-ID of the sender, but the market participant role (MSB = Messstellenbetreiber) is maintained in an external role registry. The EDIFACT message only carries the ID, not the role assignment.",
      "description_hash": "8774bc22",
      "is_external": true
    },
    "558": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation, always returns True.",
      "description_hash": "e39113dd",
      "is_external": false
    },
    "543": {
      "confidence": "high",
      "reasoning": "Hinweis — informational annotation about the origin of the value (BGM+Z23 DE1004 from the corresponding ORDERS). Always applies unconditionally.",
      "description_hash": "07a3451d",
      "is_external": false
    },
    "494": {
      "confidence": "medium",
      "reasoning": "'Das hier genannte Datum muss der Zeitpunkt sein, zu dem das Dokument erstellt wurde, oder ein Zeitpunkt, der davor liegt' — the date in this DE must be the document creation time or earlier. Implemented by comparing the target DTM value to DTM+137 (Nachrichtendatum / document creation date). Medium confidence because 'this DE' is context-dependent without the full AHB table cross-reference. String comparison on CCYYMMDDHHMM format is lexicographically valid for datetime ordering.",
      "description_hash": "785470ce",
      "is_external": false
    },
    "73": {
      "confidence": "high",
      "reasoning": "1-b:1.9.e has both channel b and tariff e variable, so use contains(':1.9.'). The :3.9.0 and :4.9.0 codes have fixed tariff so use ends_with. Fixed-channel codes 1-66:13.9.0/14.9.0 are checked as exact strings.",
      "description_hash": "6d1f469a",
      "is_external": false
    },
    "574": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation describing the origin of a field value, always applies unconditionally.",
      "description_hash": "6830acc6",
      "is_external": false
    },
    "577": {
      "confidence": "high",
      "reasoning": "Hinweis condition — detailed informational note about energy quantity reporting when Messlokation ends before Marktlokation. Always returns True unconditionally.",
      "description_hash": "b3a412d3",
      "is_external": false
    },
    "917": {
      "confidence": "high",
      "reasoning": "Format 'max. 4 Vorkommastellen' — at most 4 integer digits before the decimal point. Uses validate_max_integer_digits(val, 4) on QTY elements[0][1] (DE6060). Leading minus sign is stripped by the helper.",
      "description_hash": "208e519e",
      "is_external": false
    },
    "934": {
      "confidence": "high",
      "reasoning": "Format condition: HHMM = 0400 means the time portion of the DTM value must be 04:00. Uses validate_hhmm_equals helper.",
      "description_hash": "d06a46c8",
      "is_external": false
    },
    "572": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation, always applies unconditionally.",
      "description_hash": "3de4e710",
      "is_external": false
    },
    "128": {
      "confidence": "medium",
      "reasoning": "A regular reading (e.g. Kundenablesung) is distinguished from a meter-change reading by the absence of DTM+60 (Ausführungs-/Änderungszeitpunkt) in the same SG10. DTM+9 presence confirms it is a reading at all; DTM+60 absence confirms it is not due to a meter/config change. Group path SG9→SG10 matches MSCONS LIN-group context; fallback to message-wide if no navigator.",
      "description_hash": "0f6b1b4e",
      "is_external": false
    },
    "138": {
      "confidence": "high",
      "reasoning": "Whether the energy amount is a correction for a value originating from an iMS (intelligentes Messsystem / smart meter) cannot be determined from the EDIFACT message content alone — it requires business context about the type of metering system and the nature of the correction. Marked as external.",
      "description_hash": "80cce785",
      "is_external": true
    },
    "126": {
      "confidence": "low",
      "reasoning": "'Wenn Plausibilisierungshinweise vorliegen' — whether plausibility notes (Plausibilisierungshinweise) exist is a business processing outcome that cannot be determined from the EDIFACT message content alone. It depends on prior validation or processing steps in the market communication workflow.",
      "description_hash": "173ffade",
      "is_external": true
    },
    "149": {
      "confidence": "medium",
      "reasoning": "Checks presence of DTM+163 (Beginn Messperiode) — the direct inverse of condition 145. Message-wide approximation of the SG10-scoped intent within the enclosing LIN group.",
      "description_hash": "e46169f8",
      "is_external": false
    },
    "131": {
      "confidence": "high",
      "reasoning": "Simple absence check: condition is True when no RFF segment with qualifier AGK (elements[0][0]) exists in the message.",
      "description_hash": "6f8ea95f",
      "is_external": false
    },
    "70": {
      "confidence": "high",
      "reasoning": "BGM document name code (DE1001) is at elements[0][0]. Check equals 'BK'.",
      "description_hash": "5b82c5b2",
      "is_external": false
    },
    "513": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation describing usage of Bilanzierungsgebiet designation. Always applies unconditionally.",
      "description_hash": "701e36c8",
      "is_external": false
    },
    "119": {
      "confidence": "high",
      "reasoning": "LOC+172 in SG6 where DE3225 (elements[1][0] per segment reference) is present and non-empty indicates the Marktlokations-ID is specified. If no LOC+172 exists, condition is False.",
      "description_hash": "9fd5a5ca",
      "is_external": false
    },
    "960": {
      "confidence": "medium",
      "reasoning": "Netzlokations-ID uses the same 11-digit Luhn-check format as Marktlokations-ID (validate_malo_id). In MSCONS, Netzlokation is typically referenced via LOC+Z17. Segment structure reference does not include LOC for MSCONS, so Z17 qualifier is assumed from German energy market convention.",
      "description_hash": "0ce0bd80",
      "is_external": false
    },
    "491": {
      "confidence": "medium",
      "reasoning": "Checks whether the datetime value falls within German winter time (MEZ, UTC+1) using the is_mez_utc helper. Medium confidence because 'diesem DE' is context-dependent — without knowing the exact field the condition is applied to in the AHB table, we check the first DTM value available. The is_mez_utc helper applies the EU DST rule to determine MEZ vs MESZ.",
      "description_hash": "5e5e4325",
      "is_external": false
    },
    "545": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation describing a business rule about meter readings during quantity splits. Always applies unconditionally.",
      "description_hash": "a2ae3953",
      "is_external": false
    },
    "84": {
      "confidence": "medium",
      "reasoning": "Same pattern as condition 83 but for status code Z39. True when no STS+10+Z39 is present in any SG10 within the SG9 scope.",
      "description_hash": "e604e544",
      "is_external": false
    },
    "554": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation, always returns True.",
      "description_hash": "135f179c",
      "is_external": false
    },
    "27": {
      "confidence": "high",
      "reasoning": "Checks for PIA segment with qualifier 5 (elements[0]) and exact OBIS code '1-1:1.9.0' at elements[1][0] (DE7140). The EDIFACT escape '1-1?:1.9.0' resolves to literal '1-1:1.9.0'.",
      "description_hash": "1ceed6e5",
      "is_external": false
    },
    "143": {
      "confidence": "high",
      "reasoning": "Checks whether any COM segment has DE3155 (elements[0][1]) equal to TE (telephone), FX (fax), AJ (email address), or AL (first telephone alternate). Uses low-level access for the same reason as condition 142.",
      "description_hash": "d9351e4d",
      "is_external": false
    },
    "12": {
      "confidence": "high",
      "reasoning": "Negation of condition 11. True when no PIA+5 segment has one of the listed reactive-power OBIS codes at elements[1][0].",
      "description_hash": "54845daf",
      "is_external": false
    },
    "108": {
      "confidence": "medium",
      "reasoning": "Checks PIA+5 for OBIS codes matching pattern '7-{channel}:99.41.16' or '7-{channel}:99.42.16' (Wirkenergie-Kennzahlen). The '?' in AHB notation is the EDIFACT release character escaping the colon; parsed segments will contain literal colon. Channel variable 'b' matched via starts_with(\"7-\").",
      "description_hash": "4f910978",
      "is_external": false
    },
    "1": {
      "confidence": "high",
      "reasoning": "Whether this was requested via ORDERS is business context outside the EDIFACT message. Cannot be determined from segments alone.",
      "description_hash": "b16ca843",
      "is_external": true
    },
    "935": {
      "confidence": "high",
      "reasoning": "Format condition: HHMM = 0500 means the time portion of the DTM value must be 05:00. Uses validate_hhmm_equals helper.",
      "description_hash": "192bd97e",
      "is_external": false
    },
    "523": {
      "confidence": "high",
      "reasoning": "Informational note — always applies unconditionally.",
      "description_hash": "8b288973",
      "is_external": false
    },
    "129": {
      "confidence": "medium",
      "reasoning": "A meter-change reading is identified by the co-occurrence of DTM+9 (Ablesedatum) and DTM+60 (Ausführungs-/Änderungszeitpunkt) within the same SG10 instance. Uses direct navigator iteration to check co-occurrence within a single group instance (any_group_has_co_occurrence would have ambiguity for same-tag different qualifiers). Falls back to message-wide check without navigator.",
      "description_hash": "bde47945",
      "is_external": false
    },
    "99": {
      "confidence": "high",
      "reasoning": "PIA in SG9 where elements[0][0]='5', elements[1][0]='WID' (wind energy OBIS code), elements[1][1]='Z08'. Message-wide check.",
      "description_hash": "8a7f356c",
      "is_external": false
    },
    "132": {
      "confidence": "medium",
      "reasoning": "Checks if LOC+172 is absent entirely, or if DE3225 (elements[1][0], the Bezeichnung) is empty/missing within the LOC+172 segment. Returns True in either case as the condition is 'DE3225 nicht vorhanden'.",
      "description_hash": "468209a2",
      "is_external": false
    },
    "134": {
      "confidence": "high",
      "reasoning": "Checks for a DTM segment where DE2005 (elements[0][0]) == \"9\" (Ablesedatum) and DE2379 (elements[0][2]) == \"102\" (CCYYMMDD format code). has_qualified_value finds segments with qualifier 9 and then checks the format code component.",
      "description_hash": "6f856dd9",
      "is_external": false
    },
    "125": {
      "confidence": "medium",
      "reasoning": "Checks PIA+5 for specific OBIS code patterns: '7-0:52.0.22' (fixed channel 0), '7-{b}:53.0.16', '7-{b}:55.0.16', '7-{b}:55.0.20', '7-{b}:55.0.22' (variable channel). These are Blindenergie/Leistungsmessungs-Kennzahlen. Uses contains() to match the OBIS suffix after the channel variable.",
      "description_hash": "6a7bc2c9",
      "is_external": false
    },
    "22": {
      "confidence": "high",
      "reasoning": "Whether Aufteilung (message splitting) is present is business context that cannot be determined from the EDIFACT message alone.",
      "description_hash": "4ebb4e5c",
      "is_external": true
    },
    "529": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation documenting the origin of a value. Always returns True.",
      "description_hash": "c4771722",
      "is_external": false
    },
    "77": {
      "confidence": "high",
      "reasoning": "Checks if the message recipient (NAD+MR) is the Registrierungsbehörde (RB) for HKN-R (Herkunftsnachweise). This is a specialised market role that must be looked up in an external registry — not derivable from the MP-ID alone in the EDIFACT message.",
      "description_hash": "882af98a",
      "is_external": true
    },
    "144": {
      "confidence": "high",
      "reasoning": "Checks whether RFF+AGK (elements[0][0] == \"AGK\") is present in SG7 and has a non-empty DE1154 value (elements[0][1]). Returns False if no such RFF segment exists, True if it exists with a non-empty configuration ID.",
      "description_hash": "54161910",
      "is_external": false
    },
    "904": {
      "confidence": "medium",
      "reasoning": "Format condition requiring exactly 16 characters. Applied to QTY value (most common numeric format condition target in MSCONS). Confidence is medium because the exact target segment/element is not specified in the condition text — QTY is the most likely candidate in MSCONS context.",
      "description_hash": "3e7ca914",
      "is_external": false
    },
    "86": {
      "confidence": "medium",
      "reasoning": "Same pattern as condition 83 but for status code Z37. True when no STS+10+Z37 is present in any SG10 within the SG9 scope.",
      "description_hash": "571367d3",
      "is_external": false
    },
    "87": {
      "confidence": "medium",
      "reasoning": "Checks that DTM+163 in SG6 (with LOC+172) equals the minimum DTM+163 across all SG10 instances beneath that SG6's SG9 children. Medium confidence because the SG9→SG10 child navigation uses a local child instance index (si) passed to the grandchild API, which may behave differently depending on navigator implementation details for two-level child traversal.",
      "description_hash": "6781c96a",
      "is_external": false
    },
    "92": {
      "confidence": "high",
      "reasoning": "QTY elements[0][0] = DE6063 (Menge, Qualifier). Value 67 is a valid DE6063 code per the segment reference. Checks any SG10 instance (within SG9) for a QTY segment with quantity qualifier 67.",
      "description_hash": "f425028c",
      "is_external": false
    },
    "142": {
      "confidence": "high",
      "reasoning": "Checks whether any COM segment has DE3155 (elements[0][1], communication channel qualifier) equal to 'EM' (email). Uses low-level segment access since has_qualified_value's qualifier matching operates on elements[N][0] but here we need to check elements[0][1].",
      "description_hash": "eaf06e02",
      "is_external": false
    },
    "937": {
      "confidence": "high",
      "reasoning": "Format: keine Nachkommastelle means the value must have 0 decimal places. Uses validate_max_decimal_places with 0.",
      "description_hash": "e3f49bb8",
      "is_external": false
    },
    "18": {
      "confidence": "medium",
      "reasoning": "Affirmative version of condition 17. True when any PIA+5 has OBIS code matching the '1-{channel}:9.99.0' pattern (combined heat/power or special metering). Medium confidence due to pattern matching.",
      "description_hash": "d23e50cf",
      "is_external": false
    },
    "512": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation describing usage of Bilanzkreisbezeichnung. Always applies unconditionally.",
      "description_hash": "b84f32fc",
      "is_external": false
    },
    "90": {
      "confidence": "high",
      "reasoning": "BGM elements[0][0] = DE1001 (Dokumentenname, Code). Checks if BGM segment has code Z41 at elements[0][0]. Z41 is a valid DE1001 code. Simple qualifier existence check.",
      "description_hash": "1b9152be",
      "is_external": false
    },
    "528": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation documenting the origin of a value. Always returns True.",
      "description_hash": "f1e27795",
      "is_external": false
    },
    "490": {
      "confidence": "high",
      "reasoning": "Standard MESZ check: verifies that the CCYYMMDDHHMM datetime value at this data element falls within German summer time (MESZ / UTC+2) as defined in AHB chapter 3.5. Uses the is_mesz_utc() format validation helper which implements the EU DST rule (last Sunday of March 01:00 UTC through last Sunday of October 01:00 UTC). Matches Example 25 pattern exactly.",
      "description_hash": "cb594882",
      "is_external": false
    },
    "46": {
      "confidence": "high",
      "reasoning": "LOC+172 qualifier at elements[0][0], DE3225 at elements[1][0]. Check character length == 11. Returns Unknown if no LOC+172 is present.",
      "description_hash": "e5f564c8",
      "is_external": false
    },
    "525": {
      "confidence": "high",
      "reasoning": "Informational note — always applies unconditionally.",
      "description_hash": "fccafa3d",
      "is_external": false
    },
    "520": {
      "confidence": "high",
      "reasoning": "Hinweis informational note — always returns True unconditionally.",
      "description_hash": "0db225b9",
      "is_external": false
    },
    "32": {
      "confidence": "high",
      "reasoning": "The NAD+MS contains the MP-ID of the sender, but the market participant role (NB = Netzbetreiber) is maintained in an external role registry. The EDIFACT message only carries the ID, not the role assignment.",
      "description_hash": "71b05dd3",
      "is_external": true
    },
    "117": {
      "confidence": "high",
      "reasoning": "Whether the market participant ID belongs to the electricity sector (Sparte Strom) cannot be determined from EDIFACT message content — requires external market participant registry lookup.",
      "description_hash": "f3221dba",
      "is_external": true
    },
    "524": {
      "confidence": "high",
      "reasoning": "Informational note — always applies unconditionally.",
      "description_hash": "8474b9a6",
      "is_external": false
    },
    "568": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation about usage restrictions for 1:n market/measurement location relationships. Always returns True.",
      "description_hash": "fb05b32d",
      "is_external": false
    },
    "2": {
      "confidence": "medium",
      "reasoning": "Parses year+month from DTM+163 (first) and DTM+164 (last) in format 303 (YYYYMMDDHHmm). Computes calendar-month difference. 'Mindestens einen Monat' interpreted as end month > start month (calendar boundary). Medium confidence due to ambiguity between calendar-month vs. 30-day interpretation.",
      "description_hash": "24224d64",
      "is_external": false
    },
    "575": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation about using the Netzlokation ID. Always returns True unconditionally.",
      "description_hash": "9592f83e",
      "is_external": false
    },
    "502": {
      "confidence": "high",
      "reasoning": "Starts with 'Hinweis:' — informational annotation describing cardinality and usage context for energy amounts (Energiemenge) from start of calendar year to Lieferbeginn. Not a boolean predicate. Always returns True.",
      "description_hash": "f452cf6e",
      "is_external": false
    },
    "72": {
      "confidence": "high",
      "reasoning": "PIA+5 OBIS codes: three patterns with variable channel b use starts_with('1-') plus suffix check; the 13.6.0 and 14.6.0 variants have fixed channel 66 so they are checked as exact strings.",
      "description_hash": "702e2059",
      "is_external": false
    },
    "576": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation about cardinality of DE3148. Always returns True unconditionally.",
      "description_hash": "b7cc061b",
      "is_external": false
    },
    "532": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation documenting the origin of a value from the cancelled MSCONS message. Always returns True.",
      "description_hash": "08b29aa5",
      "is_external": false
    },
    "559": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation describing when a correction reason must be provided. Always returns True.",
      "description_hash": "8938ce21",
      "is_external": false
    },
    "925": {
      "confidence": "high",
      "reasoning": "Format 'max. 5 Nachkommastellen' — at most 5 decimal places. Uses validate_max_decimal_places(val, 5) on QTY elements[0][1] (DE6060). Returns True if no decimal point or <= 5 decimal places; False if more; Unknown if no QTY segment.",
      "description_hash": "b05855b2",
      "is_external": false
    },
    "910": {
      "confidence": "high",
      "reasoning": "Format '< 0 oder ≥ 0' means the value may be any real number (negative or non-negative — this covers all real numbers). The only format constraint is that it parses as a valid floating-point number. Applies to QTY elements[0][1] (DE6060).",
      "description_hash": "063d57bb",
      "is_external": false
    },
    "506": {
      "confidence": "high",
      "reasoning": "Starts with 'Hinweis:' — informational annotation describing the usage context (Einspeisemengen and Gas hourly transmission). Not a boolean predicate. Always returns True.",
      "description_hash": "c69e750b",
      "is_external": false
    },
    "68": {
      "confidence": "high",
      "reasoning": "BGM document name code (DE1001) is at elements[0][0]. has_qualifier checks elements[0][0] == '7'.",
      "description_hash": "3b330761",
      "is_external": false
    },
    "145": {
      "confidence": "medium",
      "reasoning": "Checks absence of DTM+163 (Beginn Messperiode) in the message. The condition references the same SG10 context within the enclosing LIN group; without the exact MSCONS group path this is a message-wide approximation. Note: DTM+163 also appears in SG6 (Übertragungszeitraum), so this may yield false-negatives for the SG10-scoped intent.",
      "description_hash": "600f49bb",
      "is_external": false
    },
    "553": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation describing the origin of a reference value from a prior ORDERS message. Always applies unconditionally.",
      "description_hash": "0fc91f50",
      "is_external": false
    },
    "80": {
      "confidence": "high",
      "reasoning": "Checks if the message recipient (NAD+MR) holds the market role ÜNB (Übertragungsnetzbetreiber). Role membership cannot be determined from the EDIFACT message alone and requires an external market participant registry lookup.",
      "description_hash": "c6f25d4d",
      "is_external": true
    },
    "148": {
      "confidence": "medium",
      "reasoning": "An interval value (Wert in einem Zeitintervall) is signalled by the presence of DTM+163 (Beginn Messperiode) in SG10. If Beginn Messperiode is present, the value spans a time interval rather than being a single point.",
      "description_hash": "e7bda451",
      "is_external": false
    },
    "902": {
      "confidence": "high",
      "reasoning": "Format condition checking that QTY value is >= 0. Uses validate_numeric helper on QTY element[0][1] (the quantity value after the qualifier).",
      "description_hash": "08daa39a",
      "is_external": false
    },
    "2001": {
      "confidence": "high",
      "reasoning": "Cardinality annotation stating the segment group appears exactly once per UNH (message). This is a structural constraint / informational note describing allowed multiplicity, not a boolean predicate evaluated against message content. Treated as Hinweis — always True.",
      "description_hash": "aaf62e79",
      "is_external": false
    },
    "127": {
      "confidence": "low",
      "reasoning": "'Wenn ein Korrekturgrund anzugeben ist' — whether a correction reason must be specified is a business context condition (e.g., this is a corrected/amended message) that cannot be derived from the EDIFACT message structure alone. It depends on the transaction history and correction workflow context.",
      "description_hash": "96c97668",
      "is_external": true
    },
    "133": {
      "confidence": "medium",
      "reasoning": "Checks that when DTM+7 (Nutzungszeitpunkt, format 303 CCYYMMDDHHMM) and DTM+9 (Ablesedatum, format 102 CCYYMMDD) co-exist in the same SG10 instance, the CCYYMMDD date part of DTM+7 must equal or be at most 1 calendar day different from DTM+9. Uses a Julian Day Number formula for correct cross-month/year date arithmetic. MSCONS SG10 path assumed as SG5.SG6.SG10 based on the tx_group=SG5 and SG6 being the measurement period container; medium confidence due to path uncertainty.",
      "description_hash": "021a6403",
      "is_external": false
    },
    "51": {
      "confidence": "medium",
      "reasoning": "Mutual-exclusion constraint: if 7-0:33.86.0 is present, none of the listed 52/54.x codes may appear. Returns True when constraint is satisfied (i.e. 33.86.0 absent, or 33.86.0 present but excluded codes absent). Returns True when 33.86.0 is not present because the constraint simply does not apply.",
      "description_hash": "e5be8c56",
      "is_external": false
    },
    "93": {
      "confidence": "high",
      "reasoning": "QTY elements[0][0] = DE6063 (Menge, Qualifier). Value 220 is a valid DE6063 code per the segment reference. Checks any SG10 instance (within SG9) for a QTY segment with quantity qualifier 220.",
      "description_hash": "ee2291f6",
      "is_external": false
    },
    "17": {
      "confidence": "medium",
      "reasoning": "Checks absence of PIA+5 with OBIS matching pattern '1-{channel}:9.99.0'. The 'b' is a variable channel, so pattern-matching on prefix '1-' and suffix ':9.99.0' is used. Negated because condition is 'Wenn NICHT'. Medium confidence due to pattern-based matching of OBIS code.",
      "description_hash": "3f38229f",
      "is_external": false
    },
    "518": {
      "confidence": "high",
      "reasoning": "Hinweis informational note — always returns True unconditionally.",
      "description_hash": "066912df",
      "is_external": false
    },
    "78": {
      "confidence": "medium",
      "reasoning": "PIA+5 means elements[0][0]='5'. DE7140 (OBIS code) is elements[1][0]. EDIFACT '?:' escape sequences are resolved by the parser to literal ':', so '1-66?:13.6.0' becomes '1-66:13.6.0'. Checks any SG9 group instance for PIA+5 with one of the four OBIS codes. Group path SG6->SG9 is approximate based on MSCONS structure.",
      "description_hash": "523c39c1",
      "is_external": false
    },
    "62": {
      "confidence": "high",
      "reasoning": "Same structure as condition 46 but length check is 33 instead of 11. DE3225 at elements[1][0].",
      "description_hash": "ff9d24ca",
      "is_external": false
    },
    "922": {
      "confidence": "medium",
      "reasoning": "Format: TR-ID — validates that the value is a valid Transaktionsreferenz-ID (1–35 alphanumeric characters) using validate_tr_id. In MSCONS, the document/transaction ID is typically found in BGM elements[1][0] (the document number composite). Medium confidence because the exact DE this format condition is applied to depends on the AHB field context, which could alternatively be RFF or another reference segment.",
      "description_hash": "589886f8",
      "is_external": false
    },
    "95": {
      "confidence": "high",
      "reasoning": "QTY in SG10 where DE6063 (elements[0][0]) has value '20'. Group-scoped check within SG10 under SG5.",
      "description_hash": "3d081a29",
      "is_external": false
    },
    "100": {
      "confidence": "high",
      "reasoning": "Group-scoped: within the same SG9 (LIN-initiated) instance, check if PIA+5 has elements[1][0]='AUA'. Uses any_group_has_qualified_value for scoped check. Z08 code list qualifier is implicit for OBIS-keyed PIA segments.",
      "description_hash": "7634dcdf",
      "is_external": false
    },
    "522": {
      "confidence": "high",
      "reasoning": "Informational note — always applies unconditionally.",
      "description_hash": "bbf732e5",
      "is_external": false
    },
    "538": {
      "confidence": "high",
      "reasoning": "Hinweis — informational annotation about when ORDERS reference should be provided. Always applies unconditionally.",
      "description_hash": "6d9f3523",
      "is_external": false
    },
    "118": {
      "confidence": "high",
      "reasoning": "Whether the market participant ID belongs to the gas sector (Sparte Gas) cannot be determined from EDIFACT message content — requires external market participant registry lookup.",
      "description_hash": "8cea5aed",
      "is_external": true
    },
    "541": {
      "confidence": "high",
      "reasoning": "Hinweis — informational annotation describing when a correction reason must be provided (4 scenarios involving provisional/replacement/true values after cancellation). Always applies unconditionally.",
      "description_hash": "8938ce21",
      "is_external": false
    },
    "557": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation, always returns True.",
      "description_hash": "76877702",
      "is_external": false
    },
    "569": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation about using time specification and repeating SG9 LIN for multiple meter readings. Always returns True.",
      "description_hash": "a309e008",
      "is_external": false
    },
    "45": {
      "confidence": "high",
      "reasoning": "PIA+5 qualifier at elements[0][0], OBIS code at elements[1][0]. Channel 'b' is variable so check starts_with('7-') and ends_with(':99.41.16'). The '?:' in AHB notation is the EDIFACT escape for a literal colon, parsed to plain ':' in the segment value.",
      "description_hash": "b1d2c349",
      "is_external": false
    },
    "33": {
      "confidence": "high",
      "reasoning": "The NAD+MR contains the MP-ID of the recipient, but the market participant role (LF = Lieferant) is maintained in an external role registry. The EDIFACT message only carries the ID, not the role assignment.",
      "description_hash": "788d0ae2",
      "is_external": true
    },
    "50": {
      "confidence": "high",
      "reasoning": "Same pattern as condition 49 but for the 70.18.x family of OBIS codes.",
      "description_hash": "691ff2a8",
      "is_external": false
    },
    "547": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation restricting use of code 270 to pre-2021 delivery note cancellations. Always applies unconditionally.",
      "description_hash": "8f5bac1a",
      "is_external": false
    },
    "906": {
      "confidence": "high",
      "reasoning": "Format: max. 3 Nachkommastellen means at most 3 decimal places. Uses validate_max_decimal_places(val, 3) on the QTY quantity value.",
      "description_hash": "97bdb0c7",
      "is_external": false
    },
    "130": {
      "confidence": "low",
      "reasoning": "Requires DST-aware datetime arithmetic: compute the minute difference between DTM+7 (Nutzungszeitpunkt, CCYYMMDDHHMM) and DTM+60 or DTM+9 in the same SG10 group instance, then apply different upper limits depending on whether a summer→winter (≤1500 min) or winter→summer (≤1380 min) or no-transition (≤1439 min) boundary is crossed. This requires parsing UTC timestamps, converting to epoch-minutes, and detecting whether a CET/CEST DST transition falls between the two points — none of which is supported by the available helper API. Exceeds current implementation capacity.",
      "description_hash": "3d1a59bf",
      "is_external": false
    },
    "49": {
      "confidence": "high",
      "reasoning": "PIA+5 OBIS codes with variable channel b: check starts_with('7-') plus ends with one of ':70.16.16', ':70.16.20', ':70.16.22'.",
      "description_hash": "04885506",
      "is_external": false
    },
    "492": {
      "confidence": "high",
      "reasoning": "The 'Sparte' (sector: Strom/electricity) of the market participant identified in NAD+MR is not encoded in the EDIFACT message itself. It requires a lookup in an external market participant registry. Marked external.",
      "description_hash": "bd78e2d8",
      "is_external": true
    },
    "150": {
      "confidence": "high",
      "reasoning": "BGM elements[0][0] = DE1001 (Dokumentenname, Code). Checking elements[0][0]==\"Z69\" via has_qualifier covers the Redispatch tägliche Ausfallarbeitsüberführungszeitreihe document type directly.",
      "description_hash": "4e5ec8b8",
      "is_external": false
    },
    "67": {
      "confidence": "medium",
      "reasoning": "Checks whether the current MSCONS transaction references an ORDERS message. While RFF segments can carry cross-message references, the specific qualifier that marks an ORDERS reference is not provided in the segment structure reference, and determining whether a reference points to an ORDERS vs. another message type typically requires external business context about the originating transaction.",
      "description_hash": "cc15c10b",
      "is_external": true
    },
    "135": {
      "confidence": "medium",
      "reasoning": "Condition 135 compares the CCYYMMDD portion of a reading-date DTM against DTM+137 (Nachrichtendatum at message level). The most natural target is DTM+9 (Ablesedatum) in SG10. Both format 303 (CCYYMMDDhhmm+ZZ) and format 102 (CCYYMMDD) start with CCYYMMDD, so taking the first 8 characters works for both. DTM+137 uses format 303 so likewise the first 8 chars give the date. Lexicographic comparison of zero-padded CCYYMMDD strings is equivalent to numeric date comparison. Medium confidence because the condition description does not explicitly state which DTM qualifier it applies to; DTM+9 is the strongest candidate in the MSCONS SG10 context.",
      "description_hash": "38c14908",
      "is_external": false
    },
    "121": {
      "confidence": "high",
      "reasoning": "BGM with DE1001 (elements[0][0]) = 'Z43' (Redispatch Ausfallarbeitüberführungszeitreihe). Simple presence check.",
      "description_hash": "78a9d047",
      "is_external": false
    },
    "530": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation documenting the origin of a value from a referenced UTILMD message. Always returns True.",
      "description_hash": "9a5af08c",
      "is_external": false
    },
    "94": {
      "confidence": "high",
      "reasoning": "QTY elements[0][0] = DE6063 (Menge, Qualifier). Value 201 is a valid DE6063 code per the segment reference. Checks any SG10 instance (within SG9) for a QTY segment with quantity qualifier 201.",
      "description_hash": "1822aaa1",
      "is_external": false
    },
    "493": {
      "confidence": "high",
      "reasoning": "The 'Sparte' (sector: Gas) of the market participant identified in NAD+MR is not encoded in the EDIFACT message itself. It requires a lookup in an external market participant registry. Marked external.",
      "description_hash": "75612dee",
      "is_external": true
    },
    "509": {
      "confidence": "high",
      "reasoning": "Starts with 'Hinweis:' — informational annotation explaining that for correction energy quantities (Korrekturenergiemenge), the RFF should reference the prior MSCONS. Not a boolean predicate. Always returns True.",
      "description_hash": "54ab1790",
      "is_external": false
    },
    "908": {
      "confidence": "high",
      "reasoning": "Format: Mögliche Werte: 1 bis n means value must be >= 1 (positive integer starting from 1). Uses validate_numeric(val, \">=\", 1.0) on the QTY quantity value.",
      "description_hash": "f0e2a917",
      "is_external": false
    },
    "69": {
      "confidence": "high",
      "reasoning": "BGM document name code (DE1001) is at elements[0][0]. Check equals 'Z28'.",
      "description_hash": "33002768",
      "is_external": false
    },
    "96": {
      "confidence": "high",
      "reasoning": "QTY in SG10 where DE6063 (elements[0][0]) has value 'Z18'. Group-scoped check within SG10 under SG5.",
      "description_hash": "f779e1f8",
      "is_external": false
    },
    "113": {
      "confidence": "high",
      "reasoning": "RFF in SG7 with qualifier 'AGK' (Konfigurations-ID). Simple presence check using has_qualifier.",
      "description_hash": "c2cbe5b6",
      "is_external": false
    },
    "567": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation about providing the configuration ID from the previous master data exchange. Always returns True.",
      "description_hash": "ed34da0d",
      "is_external": false
    },
    "28": {
      "confidence": "high",
      "reasoning": "Negation of condition 27. True when no PIA+5 segment has OBIS code '1-1:1.9.0' (Wirkenergie Bezug Tarif 1).",
      "description_hash": "9853588f",
      "is_external": false
    },
    "514": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation describing usage of Marktlokation ID. Always applies unconditionally.",
      "description_hash": "9727b89c",
      "is_external": false
    },
    "551": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation listing the four scenarios requiring a correction reason. Always applies unconditionally.",
      "description_hash": "6bc8854b",
      "is_external": false
    },
    "905": {
      "confidence": "high",
      "reasoning": "Format: max. 3 Stellen means at most 3 integer digits. Uses validate_max_integer_digits(val, 3) on the QTY value (elements[0][1] is the quantity value in QTY+qualifier:value:unit).",
      "description_hash": "09d7c5d2",
      "is_external": false
    },
    "918": {
      "confidence": "medium",
      "reasoning": "UNOC charset requires uppercase-only alphabetics. Checks all alphabetic characters in FTX text fields (C108, elements[3], components 0..4) are uppercase. Non-alphabetic characters (digits, punctuation) are permitted. Medium confidence — UNOC validation approximated as uppercase-only alphabetic check without full ISO 8859-1 codepoint enumeration.",
      "description_hash": "96bd031d",
      "is_external": false
    },
    "146": {
      "confidence": "medium",
      "reasoning": "A point-in-time value (Wert zu einem Zeitpunkt) is signalled by the presence of DTM+7 (Nutzungszeitpunkt) in SG10. If this DTM qualifier is present, the transmitted value represents a single point in time rather than an interval.",
      "description_hash": "7dbaa429",
      "is_external": false
    },
    "940": {
      "confidence": "high",
      "reasoning": "Format: string must start with + followed only by digits — this is a phone number format check on COM segment.",
      "description_hash": "de8363bc",
      "is_external": false
    },
    "88": {
      "confidence": "medium",
      "reasoning": "Mirror of condition 87 but for DTM+164 (Ende Messperiode) — checks that the SG6 transmission period end equals the maximum DTM+164 across all SG10 measurement instances under that SG6. Same navigation caveat applies for two-level SG9→SG10 child traversal.",
      "description_hash": "875ca9dd",
      "is_external": false
    },
    "101": {
      "confidence": "high",
      "reasoning": "Group-scoped: within the same SG9 (LIN-initiated) instance, check if PIA+5 has elements[1][0]='FPA'. Uses any_group_has_qualified_value for scoped check.",
      "description_hash": "d3cce64a",
      "is_external": false
    },
    "11": {
      "confidence": "high",
      "reasoning": "Checks PIA segments with qualifier 5 (elements[0]='5') for OBIS codes at elements[1][0] (DE7140). The EDIFACT '?' is an escape character, so '7-0?:52.0.22' means literal '7-0:52.0.22'. Checks all four listed OBIS codes.",
      "description_hash": "bf62cd47",
      "is_external": false
    },
    "147": {
      "confidence": "medium",
      "reasoning": "Checks absence of DTM+7 (Nutzungszeitpunkt) in the message, approximating the SG10-scoped check within the enclosing LIN group. Absence means the value is not a point-in-time value.",
      "description_hash": "46b19683",
      "is_external": false
    },
    "950": {
      "confidence": "high",
      "reasoning": "Format: Marktlokations-ID — 11-digit ID with Luhn check digit, extracted from LOC+Z16 element 1.",
      "description_hash": "a9ddfaec",
      "is_external": false
    },
    "111": {
      "confidence": "high",
      "reasoning": "DTM+9 (Ablesedatum) in SG10 where DE2379 (elements[0][2]) equals '303' (format code CCYYMMDDHHMM). The same-segment check verifies both qualifier and format code are present together.",
      "description_hash": "b788e592",
      "is_external": false
    },
    "79": {
      "confidence": "medium",
      "reasoning": "Logical negation of condition 78. True when none of the specified OBIS codes appears in any SG9 PIA+5 segment.",
      "description_hash": "21cb9460",
      "is_external": false
    },
    "909": {
      "confidence": "high",
      "reasoning": "Format: Mögliche Werte: 0 bis n means value must be >= 0 (non-negative). Uses validate_numeric(val, \">=\", 0.0) on the QTY quantity value.",
      "description_hash": "263e3a0f",
      "is_external": false
    },
    "98": {
      "confidence": "high",
      "reasoning": "PIA in SG9 where elements[0][0]='5' (qualifier), elements[1][0]='SOL' (OBIS code for solar), elements[1][1]='Z08' (code list). Checked message-wide as condition is not group-scoped.",
      "description_hash": "dab9df94",
      "is_external": false
    },
    "36": {
      "confidence": "high",
      "reasoning": "Checks if the message recipient (NAD+MR) holds the market role NB (Netzbetreiber). This cannot be determined from the EDIFACT message itself — the MP-ID in NAD+MR must be looked up in an external market participant registry to determine their role.",
      "description_hash": "5a6a3c9f",
      "is_external": true
    },
    "570": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation, always applies unconditionally.",
      "description_hash": "2ecc91e0",
      "is_external": false
    },
    "48": {
      "confidence": "high",
      "reasoning": "PIA+5 with exact OBIS code 7-0:52.0.22 (channel fixed at 0). '?:' in AHB is EDIFACT escape for ':', yielding plain '7-0:52.0.22' in the parsed value.",
      "description_hash": "5b4b89b6",
      "is_external": false
    },
    "510": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation describing usage of Messlokation ID. Always applies unconditionally.",
      "description_hash": "d7954b75",
      "is_external": false
    },
    "516": {
      "confidence": "high",
      "reasoning": "Hinweis informational note — always returns True unconditionally.",
      "description_hash": "47a49865",
      "is_external": false
    },
    "515": {
      "confidence": "high",
      "reasoning": "Hinweis informational note — always returns True unconditionally.",
      "description_hash": "c5f0ea1e",
      "is_external": false
    },
    "511": {
      "confidence": "high",
      "reasoning": "Hinweis: informational annotation describing usage of MaBiS-ZP ID. Always applies unconditionally.",
      "description_hash": "249fdf5f",
      "is_external": false
    },
    "501": {
      "confidence": "high",
      "reasoning": "Starts with 'Hinweis:' — informational annotation about valid OBIS code values per EDI@Energy code list. Not a boolean predicate. Always returns True.",
      "description_hash": "d08e8bcd",
      "is_external": false
    },
    "38": {
      "confidence": "high",
      "reasoning": "Checks if LOC+172 (Identifikationsangabe, qualifier at elements[0]) exists and has a non-empty DE3225 value at elements[1][0] (C517 Ortsangabe). Qualifier 172 identifies Messlokation (metering location) in MSCONS SG6.",
      "description_hash": "ad789259",
      "is_external": false
    },
    "560": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation describing when a correction reason must be provided. Always returns True.",
      "description_hash": "6bc8854b",
      "is_external": false
    },
    "566": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation about allowed values from previous master data exchange. Always returns True.",
      "description_hash": "7eb0314b",
      "is_external": false
    },
    "571": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation, always applies unconditionally.",
      "description_hash": "23c12272",
      "is_external": false
    },
    "573": {
      "confidence": "high",
      "reasoning": "Hinweis condition — informational annotation, always applies unconditionally.",
      "description_hash": "273bf57f",
      "is_external": false
    },
    "907": {
      "confidence": "high",
      "reasoning": "Format: max. 4 Nachkommastellen means at most 4 decimal places. Uses validate_max_decimal_places(val, 4) on the QTY quantity value.",
      "description_hash": "cb9ee7ba",
      "is_external": false
    },
    "519": {
      "confidence": "high",
      "reasoning": "Hinweis informational note — always returns True unconditionally.",
      "description_hash": "3434e2e6",
      "is_external": false
    },
    "544": {
      "confidence": "high",
      "reasoning": "Hinweis — informational annotation about quantity splitting requirements for SG6 LOC+172 and meter readings per OBIS code. Always applies unconditionally.",
      "description_hash": "9b5e1be5",
      "is_external": false
    },
    "535": {
      "confidence": "high",
      "reasoning": "Hinweis — informational annotation about usage of network coupling point ID. Always applies unconditionally.",
      "description_hash": "54ec09e1",
      "is_external": false
    },
    "939": {
      "confidence": "high",
      "reasoning": "Format: string must contain @ and . characters — this is an email format check on COM segment.",
      "description_hash": "05a09b9a",
      "is_external": false
    },
    "141": {
      "confidence": "high",
      "reasoning": "Whether the MP-ID carried in SG2 NAD+MR holds the role of MGV (Marktgebietsverantwortlicher) cannot be determined from the EDIFACT message alone — it requires a market participant role registry lookup. Marked as external.",
      "description_hash": "9071b503",
      "is_external": true
    },
    "495": {
      "confidence": "medium",
      "reasoning": "'Der Zeitpunkt muss ≤ dem Wert im DE2380 des DTM+137 sein' — the timestamp must be ≤ DTM+137's DE2380 value. The reference segment is explicitly DTM+137 (elements[0][0]=137, value at elements[0][1]). Implemented by extracting DTM+137's value and comparing the target timestamp (DTM+163 as the most likely MSCONS candidate for this constraint) using lexicographic string ordering, which is valid for CCYYMMDDHHMM format 303 strings. Medium confidence because the specific source DE this condition is attached to in the AHB is ambiguous without the full AHB table.",
      "description_hash": "15943b5e",
      "is_external": false
    },
    "931": {
      "confidence": "high",
      "reasoning": "Format condition: ZZZ = +00 means the timezone portion of the DTM value must be UTC (+00). Uses validate_timezone_utc helper.",
      "description_hash": "825c510c",
      "is_external": false
    },
    "2002": {
      "confidence": "high",
      "reasoning": "Cardinality annotation stating the segment group appears up to three times per SG5 NAD+DP instance. This is an informational structural constraint describing allowed multiplicity, not a boolean predicate. Treated as Hinweis — always True.",
      "description_hash": "b088d731",
      "is_external": false
    },
    "951": {
      "confidence": "medium",
      "reasoning": "Format: Zählpunktbezeichnung — 33 alphanumeric characters. In MSCONS, Zählpunktbezeichnung typically appears in LOC+Z19. Using validate_zahlpunkt helper.",
      "description_hash": "f35fc481",
      "is_external": false
    }
  }
}