HL7-v2-Viewer

Nur zur Ansicht, kein Medizinprodukt, keine Konformitätsprüfung. Ihre Nachrichten bleiben im Browser. Bitte nutzen Sie Testdaten oder anonymisierte Daten.

Aufbau einer HL7-v2-Nachricht: Segmente, Felder, Komponenten

Eine HL7-v2-Nachricht besteht aus Segmenten, jedes Segment aus Feldern, jedes Feld aus Komponenten und diese gegebenenfalls aus Subkomponenten. Die Ebenen werden durch feste Trennzeichen getrennt, die im ersten Segment, dem MSH, festgelegt sind. Diese Seite erklärt das an echten Beispielzeilen. Die Beispiele sind frei erfunden und lassen sich im Viewer öffnen.

Die vier Ebenen

EbeneTrennerBeispiel
SegmentZeilenende (CR)PID|… ist ein Segment, die Kennung steht am Zeilenanfang
Feld|PID-5 ist das fünfte Feld von PID (der Name)
Wiederholung~zwei Kennungen in PID-3, durch ~ getrennt
Komponente^Nachname^Vorname in PID-5
Subkomponente&Unterteilung einer Komponente, zum Beispiel beim Familiennamen

Eine Zeile gelesen

Das PID-Segment des Aufnahme-Beispiels, mit farbigen Trennzeichen:

| Feld^ Komponente~ Wiederholung& Subkomponente

PID|1||TEST-100234^^^KLINIKUM_TEST^MR~TEST-F-7781^^^KLINIKUM_TEST^VN||Beispielmann^Bernd^Karl^^^^L||19710305|M|||Teststraße 12^^Musterstadt^^99999^DE^H||^PRN^PH^^49^555^1234567~^NET^Internet^bernd@example.invalid|||||TEST-ACC-5001

Am Zeilenanfang steht die Segmentkennung PID. PID-1 ist 1, PID-2 ist leer. In PID-3 stehen zwei Wiederholungen. Die erste lautet TEST-100234^^^KLINIKUM_TEST^MR und hat Komponenten:

TeilWertBedeutung
PID-3[1].1TEST-100234die Kennung selbst
PID-3[1].4KLINIKUM_TESTdie Stelle, die die Kennung vergeben hat
PID-3[1].5MRArt der Kennung (hier Patientenakte, „medical record“)

Die zweite Wiederholung nach dem ~ hat die Art VN, eine Besuchs- bzw. Fallnummer. Der Viewer schreibt Wiederholungen als [n], also PID-3[2].1. Andere Werkzeuge schreiben das anders. Welche Komponente was bedeutet, hängt vom Datentyp des Feldes ab (hier CX, eine erweiterte Kennung).

Dieses Beispiel im Viewer öffnen

Trennzeichen kommen aus dem MSH

Das erste Segment jeder Nachricht ist MSH. Direkt hinter den drei Buchstaben steht das Feldtrennzeichen, danach die vier Kodierzeichen:

MSH|^~\&|TESTKIS|KLINIKUM_TEST|TESTLIS|KLINIKUM_TEST|20261027083015||ADT^A01^ADT_A01|MSG-A01-0001|P|2.5.1
ZeichenAufgabeWo festgelegt
|trennt FelderMSH-1
^trennt KomponentenMSH-2, 1. Zeichen
~trennt Wiederholungen eines FeldesMSH-2, 2. Zeichen
\leitet Escape-Sequenzen einMSH-2, 3. Zeichen
&trennt SubkomponentenMSH-2, 4. Zeichen

Die Zeichen |^~\& sind der übliche Satz. Ein Empfänger soll sie aus dem MSH lesen und nicht fest voraussetzen. Der Viewer macht das so und weist darauf hin, wenn sie vom Üblichen abweichen.

Die Zählung im MSH weicht ab

Das Feldtrennzeichen hinter „MSH“ ist selbst MSH-1. Das erste Feld, das Sie nach einem Split an | erhalten, ist deshalb schon MSH-2 (die Kodierzeichen), und MSH-9 ist der Nachrichtentyp. In allen anderen Segmenten ist das erste Feld nach der Kennung Feld 1. Wer MSH wie die anderen Segmente zählt, verschiebt alle Felder um eins.

Pfadschreibweise

Ein Wert wird als SEGMENT-Feld.Komponente.Subkomponente angegeben, etwa PID-5.2 für den Vornamen oder MSH-9.2 für das Auslöseereignis. Bei wiederholten Segmenten (mehrere OBX) unterscheidet die laufende Nummer in Feld 1 die einzelnen Zeilen. Im Viewer zeigt jede Zeile ihren Pfad an.

Leer ist nicht gleich „“

Ein leeres Feld (||) heißt: keine Angabe in dieser Nachricht. Zwei Anführungszeichen ("") sind der Nullwert und bedeuten ausdrücklich, dass ein vorhandener Wert gelöscht werden soll bzw. keiner existiert. Bei Änderungsnachrichten wie ADT^A08 ist das ein Unterschied. Der Viewer zeigt Nullwerte deshalb getrennt an. Überzählige Trennzeichen am Zeilenende (|||) sind erlaubt und verändern nichts.

Escape-Sequenzen

Kommen Trennzeichen im Text selbst vor, werden sie durch eine Sequenz mit dem Escape-Zeichen ersetzt. Der Buchstabe in der Sequenz steht für das Trennzeichen, das im MSH festgelegt ist.

SequenzBedeutung
\F\Feldtrennzeichen (üblich |)
\S\Komponententrennzeichen (^)
\T\Subkomponententrennzeichen (&)
\R\Wiederholungstrennzeichen (~)
\E\das Escape-Zeichen selbst (\)
\.br\Zeilenumbruch in Freitext
\Xhh…\Zeichen als Hexadezimalwert

Im Änderungs-Beispiel steht die Straße als Teststraße 12 \T\ 14. Gemeint ist „Teststraße 12 & 14“. Der Viewer zeigt den entschlüsselten Text und behält den Originaltext im Rohtext bei. Ein unmaskiertes & oder | im Freitext erzeugt dagegen zusätzliche Subkomponenten oder Felder. Das ist eine mögliche Fehlerquelle, siehe Häufige Fehler.

Datentypen in Kürze

Ein Feld hat einen Datentyp, und der legt fest, was die Komponenten bedeuten. Die wichtigsten, mit Beispielen aus den Beispielnachrichten:

TypBedeutungKomponenten, Beispiel
ST, TXTexteinfacher Text ohne Komponenten
NMZahl5.9, Dezimalpunkt, kein Komma
DTM / TSZeitpunkt20261027083015 = 27.10.2026 08:30:15
CXKennungID ^ Prüfziffer ^ Verfahren ^ vergebende Stelle ^ Art
XPNPersonennameNachname ^ Vorname ^ weitere Vornamen ^ Suffix ^ Präfix ^ Titel ^ Namensart
XADAdresseStraße ^ Zusatz ^ Ort ^ Bundesland ^ PLZ ^ Land ^ Art
XTNTelefon, E-MailNummer-Komponenten und E-Mail-Komponente, je nach Version
PLAufenthaltsortStation ^ Zimmer ^ Bett ^ Einrichtung
CWE / CEcodierter WertCode ^ Text ^ Codesystem

Zeitpunkte dürfen gekürzt werden: 20261027 ist nur das Datum, 202610270830 hat Minuten. Optional folgt eine Zeitzone, zum Beispiel +0100. Ohne Angabe ist unklar, in welcher Zeitzone der Absender gemeint hat. Die genauen Komponentenlisten je Version stehen in der Spezifikation. Der Viewer beschreibt nur eine Auswahl, unbekannte Stellen erscheinen als „Feld n“.

Reihenfolge, Gruppen und Z-Segmente

Welche Segmente in welcher Reihenfolge vorkommen, regelt die Nachrichtenstruktur (MSH-9.3, zum Beispiel ADT_A01). Segmente können optional oder wiederholbar sein und bilden Gruppen: Bei ORU^R01 gehört jedes OBX zum davor stehenden OBR, bis das nächste OBR beginnt. Ein NTE gehört zum Segment direkt davor.

Segmente, deren Name mit Z beginnt (zum Beispiel ZPI), sind lokale Erweiterungen. Ihr Inhalt ist nur durch die Schnittstellenbeschreibung des Absenders erklärbar. Das Änderungs-Beispiel enthält eins:

ZPI|1|KARTE-0815|Zusatzinfo nur lokal gültig

Zeilenende und MLLP

Segmente enden mit einem Wagenrücklauf (CR, Hex 0D). Viele Texteditoren, Mails und Logs machen daraus einen Zeilenvorschub (LF) oder CRLF. Der Viewer liest alle drei. Über TCP/IP werden Nachrichten üblicherweise mit dem MLLP-Rahmen übertragen: Ein Startzeichen (Hex 0B) steht vor der Nachricht, danach folgen die Zeichen Hex 1C und 0D. Diese Zeichen gehören nicht zur Nachricht; der Viewer entfernt sie und meldet es. Quelle: Quellen.

Abgrenzung zu FHIR und CDA

HL7 v2 ist ein Format aus getrennten Zeilen und Feldern. FHIR beschreibt Ressourcen in JSON oder XML, CDA beschreibt klinische Dokumente in XML. Alle drei stammen aus dem Umfeld von HL7 International, sind aber unterschiedliche Formate. Dieser Viewer liest nur das Pipe-Format von v2.

Kurz beantwortet

Warum ist MSH-9 der Nachrichtentyp, obwohl er das achte Feld nach MSH ist?

Weil das Feldtrennzeichen hinter „MSH“ als MSH-1 zählt. Das erste Feld nach MSH| ist MSH-2. In allen anderen Segmenten beginnt die Zählung mit dem ersten Feld hinter der Kennung.

Was ist der Unterschied zwischen ~ und ^?

^ trennt Komponenten innerhalb eines Feldwerts (Nachname^Vorname). ~ trennt mehrere Wiederholungen desselben Feldes, etwa zwei Patientenkennungen in PID-3.

Wie maskiere ich ein | im Text?

Mit der Escape-Sequenz \F\. Entsprechend \S\ für ^, \R\ für ~, \T\ für & und \E\ für den Backslash. Gemeint sind jeweils die Zeichen, die im MSH festgelegt sind.

Über den Entwickler

Entwickelt von Thomas Freimoser, München / Remote. Dieses Werkzeug liest HL7-v2-Nachrichten lokal im Browser; es gibt keinen Upload und kein Tracking.