automapper-validation 0.1.59

AHB condition expression parsing, evaluation, and EDIFACT validation
Documentation
{
  "generated_at": "2026-04-22T18:16:49Z",
  "ahb_file": "REQOTE_AHB_1_2_20260401.xml",
  "format_version": "FV2610",
  "conditions": {
    "2063": {
      "confidence": "medium",
      "reasoning": "LIN++Z67 means elements[1][0]==\"Z67\" (Erforderliches Messprodukt Typ 2 Backend). Parallel to 2061/2062 for Z67. At most one occurrence per message in SG27.",
      "description_hash": "c228489f",
      "is_external": false
    },
    "2064": {
      "confidence": "medium",
      "reasoning": "LIN++Z68 means elements[1][0]==\"Z68\" (Konfigurationserlaubnis Typ 2 SMGW). Parallel pattern for Z68. At most one occurrence per message in SG27.",
      "description_hash": "619cf8a9",
      "is_external": false
    },
    "40": {
      "confidence": "high",
      "reasoning": "DE3155 is the communication qualifier at COM elements[0][1]. Checks the same COM segment's qualifier for TE (telephone), FX (fax), AJ, or AL codes using self_segment_value to read the sibling component without scanning the whole message.",
      "description_hash": "93ce6d00",
      "is_external": false
    },
    "491": {
      "confidence": "high",
      "reasoning": "Checks whether the DTM value at CCYYMMDDHHMM falls within German winter time (MEZ) as represented in UTC, per Kapitel 3.6. Uses is_mez_utc validator via format_check so ctx.resolved_value is preferred when set during tree-based validation.",
      "description_hash": "e5622c59",
      "is_external": false
    },
    "35": {
      "confidence": "low",
      "reasoning": "Whether the market participant identified by NAD+MS has the role LF (Lieferant) requires external market data — the EDIFACT message contains the party ID but not their role assignment in the energy market.",
      "description_hash": "2b6492b5",
      "is_external": true
    },
    "1": {
      "confidence": "high",
      "reasoning": "Simple absence check: condition is True when no DTM segment has qualifier 203 (Ausführungsdatum) at elements[0][0].",
      "description_hash": "cd69a0f4",
      "is_external": false
    },
    "490": {
      "confidence": "high",
      "reasoning": "Checks whether the DTM value at CCYYMMDDHHMM falls within German summer time (MESZ) as represented in UTC, per Kapitel 3.5. Uses is_mesz_utc validator via format_check so ctx.resolved_value is preferred when set during tree-based validation.",
      "description_hash": "7741a899",
      "is_external": false
    },
    "18": {
      "confidence": "high",
      "reasoning": "IMD++Z55 notation: elements[0] is empty (item description type), elements[1][0] == \"Z55\" (Änderung Konfiguration). has_segment_matching checks both element position and value simultaneously.",
      "description_hash": "3a22e3ed",
      "is_external": false
    },
    "52": {
      "confidence": "high",
      "reasoning": "DE3155 is the communication qualifier at COM elements[0][1]. Checks the same COM segment's qualifier for TE (telephone) or AL codes. Uses self_segment_value to stay scoped to the current segment, not scan the whole message.",
      "description_hash": "cd9c54bc",
      "is_external": false
    },
    "493": {
      "confidence": "medium",
      "reasoning": "Whether the NAD+MR market participant ID belongs to the gas sector (Sparte Gas) cannot be determined from the EDIFACT message content alone — it requires an external market participant registry lookup.",
      "description_hash": "e1990b94",
      "is_external": true
    },
    "17": {
      "confidence": "high",
      "reasoning": "Presence check: condition is True when any RFF segment in SG1 has qualifier Z41 at elements[0][0].",
      "description_hash": "748054e0",
      "is_external": false
    },
    "21": {
      "confidence": "high",
      "reasoning": "LIN++Z66 notation: elements[0] is empty, elements[1][0] == \"Z66\" (Erforderliches Produkt Ad-hoc-Steuerkanal). has_segment_matching checks the qualifier in element 1.",
      "description_hash": "9f437403",
      "is_external": false
    },
    "2005": {
      "confidence": "medium",
      "reasoning": "SG27 must appear exactly once per message. LIN is the entry segment of SG27, so counting LIN instances in the SG27 group path gives the SG27 repetition count. Returns True only when exactly one SG27 is present.",
      "description_hash": "3478e2d4",
      "is_external": false
    },
    "23": {
      "confidence": "high",
      "reasoning": "LIN++Z68 notation: elements[0] is empty, elements[1][0] == \"Z68\" (Erforderliches Produkt Konfigurationserlaubnis für Werte nach Typ 2 aus SMGW). has_segment_matching checks the qualifier in element 1.",
      "description_hash": "528b0550",
      "is_external": false
    },
    "22": {
      "confidence": "high",
      "reasoning": "LIN++Z67 notation: elements[0] is empty, elements[1][0] == \"Z67\" (Erforderliches Messprodukt für Werte nach Typ 2 aus Backend). has_segment_matching checks the qualifier in element 1.",
      "description_hash": "4a886f54",
      "is_external": false
    },
    "2": {
      "confidence": "high",
      "reasoning": "Simple absence check: condition is True when no DTM segment has qualifier 469 (Beginn zum nächstmöglichen Termin) at elements[0][0].",
      "description_hash": "3aef21b7",
      "is_external": false
    },
    "24": {
      "confidence": "low",
      "reasoning": "Whether a product is to be ordered is business intent that cannot be determined from the EDIFACT message content alone — requires external context about the ordering process.",
      "description_hash": "c7b26404",
      "is_external": true
    },
    "39": {
      "confidence": "high",
      "reasoning": "DE3155 is the communication qualifier, the second component of COM's first element (elements[0][1]). Checking the same COM segment's sibling component for code EM (electronic mail) using self_segment_value_equals to respect ctx.resolved_segment.",
      "description_hash": "32c7cdac",
      "is_external": false
    },
    "53": {
      "confidence": "low",
      "reasoning": "Whether the LF (energy supplier) is assigned to the market location of the named location during the desired implementation period requires external market registry data — cannot be derived from the EDIFACT message alone.",
      "description_hash": "cb56822d",
      "is_external": true
    },
    "20": {
      "confidence": "high",
      "reasoning": "LIN++Z65 notation: elements[0] is empty, elements[1][0] == \"Z65\" (Erforderliches Produkt Leistungskurvendefinitionen). has_segment_matching checks the qualifier in element 1.",
      "description_hash": "8f6bf5e9",
      "is_external": false
    },
    "492": {
      "confidence": "low",
      "reasoning": "Whether the market participant identified by NAD+MR belongs to the electricity sector (Sparte Strom) requires external market data — the EDIFACT message contains the party ID but not their commodity sector classification.",
      "description_hash": "31226eb3",
      "is_external": true
    },
    "19": {
      "confidence": "high",
      "reasoning": "LIN++Z64 notation: elements[0] is empty (line number), elements[1][0] == \"Z64\" (Erforderliches Produkt Schaltzeitdefinitionen). has_segment_matching checks the qualifier in element 1.",
      "description_hash": "f22cfb1e",
      "is_external": false
    },
    "2060": {
      "confidence": "medium",
      "reasoning": "LIN+Z64 (Erforderliches Produkt Schaltzeitdefinitionen) may appear at most once per message in SG27. Notation LIN+Z64 means elements[0][0]==\"Z64\". Count via count_qualified_in_group at element index 0. Zero occurrences also satisfies <= 1.",
      "description_hash": "4b9cc1b7",
      "is_external": false
    },
    "2061": {
      "confidence": "medium",
      "reasoning": "LIN++Z65 means elements[0] is empty and elements[1][0]==\"Z65\". count_qualified_in_group checks element index 1 for qualifier Z65 in SG27 group. At most one occurrence satisfies the constraint.",
      "description_hash": "97b2581c",
      "is_external": false
    },
    "36": {
      "confidence": "low",
      "reasoning": "Whether the market participant identified by NAD+MS has the role NB (Netzbetreiber) requires external market data — the EDIFACT message contains the party ID but not their role assignment.",
      "description_hash": "97af7d10",
      "is_external": true
    },
    "16": {
      "confidence": "high",
      "reasoning": "Absence check: condition is True when no RFF segment in SG1 has qualifier Z41 at elements[0][0]. Message-wide lacks_qualifier covers SG1 scope since Z41 is distinctive.",
      "description_hash": "8449aa92",
      "is_external": false
    },
    "2062": {
      "confidence": "medium",
      "reasoning": "LIN++Z66 means elements[1][0]==\"Z66\" (Ad-hoc-Steuerkanal product). Parallel to condition 2061 but for Z66. At most one occurrence per message in SG27.",
      "description_hash": "06ee4c21",
      "is_external": false
    }
  }
}