Musterinstanz 'Healthcare: HL7 an Berichte' anpassen

Dieses Kapitel enthält folgende Abschnitte:

Berichte schreiben
Untergeordnete Nachrichtenflüsse anpassen

Berichte schreiben

Sie können die Scriptsprache PHP für die textbasierte Berichterstellung verwenden. Das Muster erstellt ein Beispiel für eine PHP-Berichtsschablone mit der Bezeichnung ADT_A01.php. Erstellen Sie zusätzliche PHP-Scripts, um Berichte für andere HL7-Nachrichtentypen zu generieren.

Die Unterstützung für die Scriptsprache PHP ist auf allen Betriebssystemen verfügbar, auf denen WebSphere Message Broker unterstützt wird. Für die Berichterstellung ist eine umfangreiche Gruppe von PHP-Funktionen verfügbar. Zu diesen Funktionen gehört der Zugriff auf benannte Elemente in der HL7-Nachricht.

Weitere Informationen zu den PHP-Funktionen, die von WebSphere Message Broker unterstützt werden, finden Sie im Abschnitt "PHP extensions" (PHP-Erweiterungen) in der Dokumentation zu WebSphere Message Broker.

Weitere Informationen zu der Scriptsprache PHP finden Sie auf der Website PHP: Hypertext Preprocessor.

Die PHP-Beispiele in diesem Abschnitt verwenden folgende HL7 ADT A01-Nachricht:

MSH|^~\&|ADT1|MCM|LABADT|MCM|198808181126|SECURITY|ADT^A01^ADT_A01|MSG00001-
|P|
2.5
EVN|A01|198808181123
PID|1||PATID1234^5^M11^ADT1^MR^MCM~123456789^^^USSSA^SS||JONES^WILLIAM^A^III
NK1|1|JONES^BARBARA^K|WI^WIFE||||NK^NEXT OF KIN
NK1|2|JONES^MARK^K|SO^SON||||NK^NEXT OF KIN
NK1|3|JONES^SOPHIE^K|DA^DAUGHTER||||NK^NEXT OF KIN
PV1|1|I|2000^2012^01||||004777^LEBAUER^SIDNEY^J.|||SUR||||ADM|A0
    

Sie können die Musterinstanz anpassen, indem Sie den Vorlagen zur Berichterstellung (Scripts) PHP-Markup hinzufügen. PHP-Scripts erfordern häufig Zugriff auf Daten in den HL7-Nachrichten. Auf Daten in Nachrichten wird mithilfe einer Pfadsyntax zugegriffen. Es gibt zwei Möglichkeiten, den Pfad zu Elementen und Feldern in HL7-Nachrichten zu ermitteln. Die erste Methode ist die Verwendung eines Debuggers und die zweite Methode ist die Verwendung der Nachrichtengruppe HL7v25P.

Pfade mithilfe des Debuggers berechnen

Die erste Methode zur Berechnung eines Pfads ist es, sich die tatsächlichen HL7-Nachrichten beim Durchlaufen Ihres Brokers anzuschauen. Legen Sie einen Unterbrechungspunkt im Nachrichtenfluss des Prozessors fest und senden Sie eine HL7-Nachricht an Ihren Broker:

Diagramm mit einem Unterbrechungspunkt im Nachrichtenfluss des Prozessors

Im folgenden Screenshot wird eine HL7-Nachricht in der Ansicht 'Variablen' im Broker Toolkit gezeigt:

Diagramm mit der Ansicht 'Variablen' im Message Broker Toolkit

Der Pfad zum hervorgehobenen Element im Screenshot ist $input_assembly->XMLNSC->HL7->PID->{'PID.3.PatientIdentifierList'}->{'CX.1'}. Die Pfade in der Nachrichtengruppe HL7v25P enthalten Punkte (z. B. PID.3.PatientIdentifierList) und müssen deshalb in Klammern gesetzt werden, damit sie von der PHP-Laufzeit richtig interpretiert werden.

HL7-Nachrichten werden immer Ihren Berichtsprozeduren in der Nachrichtendomäne XMLNSC vorgelegt.

Pfade mithilfe der Nachrichtengruppe HL7v25P berechnen

Die zweite Methode zum Berechnen von Pfaden ist die Überprüfung der Nachrichtengruppe HL7v25P und das Ermitteln der Pfade zu Elementen und Feldern auf Basis des Nachrichtenmodells:

Diagramm mit einem Abschnitt der Nachrichtengruppe HL7v25P

Die Pfade in beiden Methoden sind gleich, der einzige Unterschied ist, ob Sie in den tatsächlichen HL7-Nachrichten oder im HL7-Nachrichtenmodell starten.

In den beiden Spalten ganz rechts im Screenshot der Nachrichtengruppe wird die minimale und maximale Anzahl des Auftretens eines Element oder Felds in einer HL7-Nachricht gezeigt. In Ihren PHP-Scripts muss berücksichtigt werden, ob ein Element oder Feld vorhanden sein muss (Werte 1 und 1), vorhanden sein kann (Werte 0 und 1), sich wiederholen kann (Werte 0 und -1) oder sich mindestens einmal wiederholen wird (Werte 1 und -1). Diese Möglichkeiten sind in HL7-Nachrichten einheitlich.

PHP-Codebeispiele

In den folgenden Codebeispielen wird gezeigt, wie Sie allgemeine Tasks in PHP-Scripts implementieren können.

Integrierte PHP-Funktionen

Für Ihre PHP-Scripts ist eine umfangreiche Gruppe integrierter Funktionen verfügbar.

    <?php
        date_default_timezone_set('UTC');
        echo date('n/j/Y');
    ?>
    

Dieser Ausschnitt erzeugt im Bericht folgende Ausgabe:

    12/9/2011
    

Weitere Informationen zu den PHP-Funktionen, die von WebSphere Message Broker unterstützt werden, finden Sie im Abschnitt "PHP extensions" (PHP-Erweiterungen) in der Dokumentation zu WebSphere Message Broker (die PHP-Laufzeit in Message Broker unterstützt eine Teilmenge der Erweiterungen, die von der Open-Source-PHP-Implementierung implementiert wurden).

Umgebungsvariablen

Auf Umgebungsvariablen wird über die superglobale PHP-Variable $_ENV zugegriffen.

    <?php
        echo $_ENV['MB_WORK_PATH'].'\n';
        echo $_ENV['MB_BROKER_NAME'].'\n';
        echo $_ENV['MB_EXECUTION_GROUP_NAME'].'\n';
        echo $_ENV['MB_NODE_NAME'].'\n';
        echo $_ENV['MB_MESSAGE_FLOW_NAME'].'\n';
    ?>
    

Dieser Ausschnitt erzeugt im Bericht folgende Ausgabe:

    C:\Dokumente und Einstellungen\All Users\Application Data\IBM\MQSI
    HEALTHCARE
    Healthcare
    PHP Compute
    healthcare.ReportProcessor
    

Nachrichtendaten

Auf Elemente und Felder in HL7-Nachrichten kann mithilfe von Pfaden zugegriffen werden.

    <?php
        echo $input_assembly->XMLNSC->HL7->MSH->{'MSH.9.MessageType'}->{'MSG.1'};
    ?>
    

Dieser Ausschnitt erzeugt im Bericht folgende Ausgabe:

    ADT
    

Auf fehlende Daten prüfen

PHP stellt die Funktion is_null bereit, um zu prüfen, ob ein Element oder ein Feld fehlt.

    <?php
        $result = is_null($input_assembly->XMLNSC->HL7->XYZ);
        echo var_dump($result);
    ?>
    

Dieser Ausschnitt erzeugt im Bericht folgende Ausgabe:

    bool(true)
    

Wiederholelemente

Wiederholelemente können mithilfe der PHP-Anweisung foreach iteriert werden.

    <?php
        foreach ($input_assembly->XMLNSC->HL7->NK1 as $kin) {
            echo var_dump($kin);
        }
    ?>
    

Dieser Ausschnitt erzeugt im Bericht folgende Ausgabe:

    object(MbsElement)#26 (4) {
      ["NK1.1.SetIDNK1"]=>
      string(1) "1"
      ["NK1.2.Name"]=>
      NULL
      ["NK1.3.Relationship"]=>
      NULL
      ["NK1.7.ContactRole"]=>
      NULL
    }
    object(MbsElement)#27 (4) {
      ["NK1.1.SetIDNK1"]=>
      string(1) "2"
      ["NK1.2.Name"]=>
      NULL
      ["NK1.3.Relationship"]=>
      NULL
      ["NK1.7.ContactRole"]=>
      NULL
    }
    object(MbsElement)#28 (4) {
      ["NK1.1.SetIDNK1"]=>
      string(1) "3"
      ["NK1.2.Name"]=>
      NULL
      ["NK1.3.Relationship"]=>
      NULL
      ["NK1.7.ContactRole"]=>
      NULL
    }
    

Die NULL-Werte in der Ausgabe von var_dump sind erwartet, obwohl diese Elemente Daten enthalten.

Auf Elemente und Felder in HL7-Nachrichten kann in Wiederholelementen mithilfe der Variablen foreach zugegriffen werden:

    <?php
        foreach ($input_assembly->XMLNSC->HL7->NK1 as $kin) {
            echo var_dump($kin->{'NK1.2.Name'}->{'XPN.2'});
        }
    ?>
    

Dieser Ausschnitt erzeugt im Bericht folgende Ausgabe:

    string(7) "BARBARA"
    string(4) "MARK"
    string(6) "SOPHIE"
    

Untergeordnete Nachrichtenflüsse anpassen

Den Benutzern des Musters stehen sechs hauptsächliche untergeordnete Nachrichtenflüsse für die Anpassung zur Verfügung.

Anpassung 'Empfänger'

Der Nachrichtenfluss 'Empfänger' ruft den untergeordneten Nachrichtenfluss OnReceive auf, wenn eine HL7-Nachricht empfangen und überprüft wurde.

Der standardmäßige untergeordnete Nachrichtenfluss OnReceive hat keine Auswirkung auf die Nachricht, kann mit diesem Anpassungspunkt aber Daten aus den Quellen standardisieren, damit Ihre Anforderungen erfüllt werden. Beispielsweise verwenden Sie das Standarddatum im Format JJJJ-MM-TT , aber die Quelle verwendet ein anderes Datumsformat. Mit diesem Anpassungspunkt können Sie alle Quellendaten ändern. Außerdem können Sie an diesem Punkt Daten einfügen, die aus anderen Quellen (z. B. Datenbanken) verfügbar sind.

Anpassung 'Prozessor'

Der untergeordnete Nachrichtenfluss für die Anpassung OnProcess wurde vor dem Generieren des Berichts aufgerufen. Dieser untergeordnete Nachrichtenfluss hat standardmäßig keine Auswirkung auf die Nachricht, aber Sie können mit diesem untergeordneten Nachrichtenfluss eine Eingabenachricht erstellen, die mit den für Ihre Berichte erforderlichen Spezifikationen übereinstimmt.

Bestätigung für Bestätigungsnachrichten (ACK) und negative Bestätigungsnachrichten (NACK)

Die untergeordneten Nachrichtenflüsse OnSendACK und OnSendNACK werden aufgerufen, bevor Bestätigungsnachrichten generiert werden. Diese untergeordneten Nachrichtenflüsse haben standardmäßig keine Auswirkung auf die Nachricht, aber Sie können mit diesen untergeordneten Nachrichtenflüssen eine Bestätigungsnachricht erstellen, die mit den für Ihre Quellenanwendung erforderlichen Spezifikationen übereinstimmt.

Anpassung bei Fehler

Der untergeordnete Nachrichtenfluss OnErrorQueue wird aufgerufen, wenn ein Fehler ermittelt wurde und eine Fehlernachricht in die Fehlerwarteschlange geschrieben wird. Der untergeordnete Standardnachrichtenfluss für die Anpassung hat keine Auswirkung auf die Nachricht, aber Sie können mit diesem untergeordneten Nachrichtenfluss eine Fehlernachricht erstellen, die mit den für Ihre Quellenumgebung erforderlichen Spezifikationen übereinstimmt.

Anpassung ohne Übereinstimmung

Der Datenfluss 'Prozessor' führt ein PHP-Script mit der Bezeichnung Processor.php aus. Dieses PHP-Script ermittelt den Namen eines PHP-Scripts, das den Bericht für diese Nachricht generiert. Der Name des PHP-Scripts verwendet das Ereignis und den Code der HL7-Nachricht. Dies ist beispielsweise ADT_A01.php, wenn es sich bei der HL7-Nachricht um eine Nachricht zur Zulassung eines Patienten handelt (ADT^A01). Wenn das PHP-Script nicht gefunden wird, wird der untergeordnete Nachrichtenfluss OnNoMatch aufgerufen. Dieser untergeordnete Nachrichtenfluss hat standardmäßig keine Auswirkung auf die Nachricht, aber Sie können mit diesem untergeordneten Nachrichtenfluss Nachrichten verarbeiten, die keinen Bericht generiert haben.

Anpassung bei fertig gestellter Datei

Der untergeordnete Nachrichtenfluss OnFileFinished wird aufgerufen, wenn die Berichtsdatei abgeschlossen und in das Ausgabeverzeichnis kopiert wurde. Dieser untergeordnete Nachrichtenfluss hat standardmäßig keine Auswirkung auf die Nachricht, aber Sie können mit diesem untergeordneten Nachrichtenfluss die Verarbeitung der fertig gestellten Datei erweitern. Nach der Fertigstellung des Berichts erstellt der Knoten 'FileOutput' eine neue Berichtsdatei, die für nachfolgend generierte Berichte verwendet wird.

Zurück zur Musterspezifikation 'Healthcare: HL7 an Berichte'