Konzept: Die Trennzeichenhierarchie und warum sie fast immer leise bricht

HL7 v2 ist kein Format mit Grammatik, sondern eine Positionskonvention über fünf Trennzeichenebenen. Keine schließenden Tags, keine Typprüfung im Transport. Wer sich verzählt, bekommt keinen Fehler - er bekommt falsche Daten.

EbeneZeichenDeklariert inEscape
Segment<CR> (0x0D)fix–
Feld|MSH-1 (Zeichen direkt nach MSH)\F\
Wiederholung~MSH-2, Pos. 2\R\
Komponente^MSH-2, Pos. 1\S\
Subkomponente&MSH-2, Pos. 4\T\
Escape-Zeichen\MSH-2, Pos. 3\E\

Drei Punkte, die praktisch zählen:

  1. MSH ist ein Sonderfall. MSH-1 ist das Feldtrennzeichen, MSH-2 ist ^~\&. Beide werden nie escaped. Sie definieren das Escaping erst. Deshalb zählt in MSH die Feldnummerierung anders als im naiven split("|").
  2. Die Zeichen sind theoretisch frei wählbar, praktisch ist ^~\& universell. Ein Parser, der sie hart verdrahtet statt aus MSH-1/MSH-2 zu lesen, funktioniert 99 % der Zeit und liefert beim einen abweichenden Haus stillen Datenmüll.
  3. Segmentterminator ist <CR>, nicht <CRLF>. Tolerante Parser schlucken alles, strikte nicht. Daher der klassische „warum hat die Fallnummer plötzlich ein führendes Steuerzeichen”-*Fehler nach einem Umweg über ein Windows-Texttool.

Darunter liegt MLLP: Rahmen <VT> (0x0B) vorn, <FS><CR> (0x1C 0x0D) hinten - nötig, weil TCP nur einen Bytestrom liefert und keine Nachrichtengrenzen kennt.

Portalbezug

Ein Patientenportal lebt vom Matching über Name, Geburtsdatum, Fallnummer. Genau diese Felder enthalten die Zeichen, die HL7 v2 als Struktur interpretiert. Ein Escaping-Fehler im Namen ist kein Absturz, sondern ein Patient, der sich nicht anmelden kann oder ein Datensatz auf dem falschen Fall.

Beispielnachricht (synthetisch)

MSH|^~\&|KISADT|KH_NORDSTADT|PORTAL|KH_NORDSTADT|20260807081512||ADT^A01^ADT_A01|MSG20260807000137|P|2.5|||AL|NE
EVN|A01|20260807081500|||PFLEGE01
PID|1||4711234^^^KH_NORDSTADT^PI||Grünberg^Anna-Sofie^Maria^^Dr.||19850312|F|||Meyer & Sohn-Weg 12^^Musterstadt^^12345^D||^PRN^PH^^^0170^5550123
PV1|1|I|CHI2^Z14^01^KH_NORDSTADT||||1122^Weiss^Thomas^^^Dr. med.|||CHI||||E||||E20260807003|||||||||||||||||||||||||20260807081500
NTE|1|P|Aufnahme über ZNA | Patientin wünscht Portalzugang

Transfer

Alle drei Fehler sind Kahn-Kategorie Conformance — Verletzung der Kodierregeln, bevor überhaupt jemand über Plausibilität oder Vollständigkeit nachdenkt. Genau das ist die Datenstrecke, an der KI im Krankenhaus scheitert: kein Modell repariert einen Nachnamen, der im Transport an einem & zerfallen ist. Für die Inventur-Checkliste: pro eingehender Strecke prüfen, ob der Parser MSH-1/MSH-2 tatsächlich ausliest und ob MSH-18 gesetzt ist.


Fragen an die Kunden-IT

  • Welche Trennzeichen stehen in MSH-1 und MSH-2 — Standardbelegung oder abweichend? Und liest euer Parser sie tatsächlich aus, oder sind sie fest verdrahtet?
  • Was passiert bei euch mit |, ^, ~, & oder \ im Freitext — wird escaped, ersetzt oder unverändert durchgereicht?
  • Ist MSH-18 gesetzt, und stimmt der Wert mit dem tatsächlich verwendeten Encoding überein?
  • Wurde die Strecke je mit einem Namen wie Meyer & Sohn-Weg oder Grünberg-Weiß getestet, oder nur mit ASCII-Testdaten?
  • Wer bereinigt Steuerzeichen und Trennzeichen aus Altdatenbeständen — und an welcher Stelle im Pfad passiert das?

Lektüre & Belege