Patientendatenabfrage

Alternativ zur Versorgung eines Systems mit Patinentendaten per ADT-Rundruf empfiehlt es sich insbesondere bei Systeme, die sich nur temporär im Netz befinden, diese nur bei Bedarf mit Patientendaten zu versorgen. Hierzu wird mittels der Fallnummer eine Anfrage nach Patientenfall- und Bewegungsdaten mit der HL7-Nachricht QRY-A19 durchgeführt.

Die Kommunikation läßt sich am elegantesten per TCP/IP-Socket bewerkstellingen. Als ACK-Nachricht auf die Anfrage wird der Inhalt der Variable customRespone aus der Response Map übermittelt.

cQryA19KhvSoure

Die eingegangene Nachricht wird in einer Archiv-Destination abgelegt.

cQryA19KhvDestination

In einem Transformer Schritt wird dann mittels JavaScript
die Antwort HL7-Nachricht aufgebaut:

// Einlesen des PV1.19 Feldinhalts = FALLNR des Patienten.
// Ggf. abprüfen mit anderen Felder.

// Ausführen einer SQL Abfrage aus Patientendatenbank
var dbConn = DatabaseConnectionFactory.createDatabaseConnection(
	'oracle.jdbc.driver.OracleDriver',
	'database','userid','password'
);


var strQRYFALLNR = msg['QRD']['QRD.8']['QRD.8.1'].toString();
logger.error("FALLNR : " + strQRYFALLNR);

var sqlStr ="\
SELECT \
F.FALLNR, 	\
NAT.NAME,	\
NAT.VORNAME, \
TO_CHAR(NAT.GEBDAT,'YYYYMMDD') GEBDAT,	\
NAT.GESCHLECHT, \
PF.FREMD_PERSNR PID,	\
TO_CHAR(SYSDATE, 'YYYYMMDDhh24miss') ABFRAGEZEIT \
FROM \
FALL F,	\
NATPERSON NAT,	\
PERSON_FREMD PF	\
WHERE	\
F.PERSNR = NAT.PERSNR  AND	\
NAT.PERSNR = PF.PERSNR AND	\
F.STORNO_DATUM IS NULL AND	\
F.FALLNR = '" + strQRYFALLNR + "'";

logger.error("SQL String" + sqlStr);

// Execute SQL Statement and save them as results
var results = dbConn.executeCachedQuery(sqlStr);

var resultSize = results.size();

// Aufbereiten des Resultsets
// hier nur eine Ergebniszeile durch Abfrage
if(resultSize>0){

	for(var i = 0;i<resultSize;i++){

	results.next();

	var strFALLNR =results.getString(1);
	var strNAME = results.getString(2);
	var strVORNAME = results.getString(3);
	var strGEBDAT = results.getString(4);
	var strGESCHLECHT = results.getString(5);
	var strPID = results.getString(6);
	var strSYSDATE = results.getString(7); 

	}
}

// Kopieren der Resultsetdaten in das output message template

// MSH
// MSH.7.1 Date/Time of Message = Abfragezeit der SQL Abfrage
tmp['MSH']['MSH.7']['MSH.7.1'] = strSYSDATE;

// MSA
// MSA.2.1 Message Control ID (= Msg ID der Anfragenachricht)
tmp['MSA']['MSA.2']['MSA.2.1'] = msg['MSH']['MSH.10']['MSH.10.1'].toString();

// QRD
// Rückübermittlung des eingegangenen QRD Segments
tmp['QRD'] = msg['QRD'].copy();

// PID
// PID.2.1 External ID Number
tmp['PID']['PID.2']['PID.2.1'] = strPID;
// PID.3.1 Internal ID Number
tmp['PID']['PID.3']['PID.3.1'] = strPID;
// PID.5.1 Family Name
tmp['PID']['PID.5']['PID.5.1'] = strNAME;
// PID.5.2 Given Name
tmp['PID']['PID.5']['PID.5.2'] = strVORNAME;
// PID.7.1 Date of Birth
tmp['PID']['PID.7']['PID.7.1'] = strGEBDAT;
// PID.8.1 Sex
if (strGESCHLECHT == 'W') strGESCHLECHT = 'F';
tmp['PID']['PID.8']['PID.8.1'] = strGESCHLECHT;

// PV1
// PV1.19 Fallnummer
tmp['PV1']['PV1.19']['PV1.19.1'] = strQRYFALLNR;

// Schliessen der Connection
dbConn.close();

// Erstellen der AckMessage
var ackMessage = SerializerFactory.getHL7Serializer().fromXML(tmp);

// Füllen der Antwortvariablen (ResponseMap für Source ACK)
responseMap.put("customResponse",
	ResponseFactory.getSuccessResponse(ackMessage))

// Löschen der Abfrageergebnisvariablen
results = "";