Mit Mirth Connect lassen sich aus DICOM-Daten mit eingebetteten Bilddateien HL7-MDM Nachrichten generieren, sofern die DICOM-Daten die Patientennummer und Fallnummer enthalten. Damit Mirth Connect von allen IP DICOM Daten entgegennehmen kann, muss hier anders als bei TCP/IP-Verbindungen 0.0.0.0
als Listener Adresse eingegeben werden, siehe MIRTH-2116.
Mit dem Toolkit DCMTK kann man dann den Aubau einer Verbindung testen:
$ echoscu -v -aec IMIRTHSCP 10.6.110.12 16999 I: Requesting Association I: Association Accepted (Max Send PDV: 16372) I: Sending Echo Request: MsgID 1 I: Received Echo Response (Status: Success) I: Releasing Association
Sinnvollerweise prüft man dann zunächst bei den eingegangenen DICOM-Daten über einen Filter ab, dass diese eine Patienten- und Fallnummer enthalten:
// Prüft auf rein numerische PID und FallID in einer DICOM Nachricht // // $Id$ var invalid_id = new RegExp('[^0-9]'); if ( invalid_id.test( msg['tag00080050'].toString() ) || invalid_id.test( msg['tag00100020'].toString() ) ) { return false; } else if ( msg['tag00080050'].toString() == '' || msg['tag00100020'].toString() == '') return false; else return true;
Hier wird die Fallnummer in dem Feld Accession-Number übermittelt.
Über zwei destinations wird dann die Verarbeitung durchgeführt. In der ersten destination werden die Bildddaten aus dem DICOM-attachment in einer Channelvariable abgespeichert und auf dem Fileserver des Zielsytems abgelegt. Hier kommt folgender Transformer zum Einsatz:
// Legt den Inhalt des DICOM-Attachments in einem JPEG-Byte Array ab // // $id$ FileContent = DICOMUtil.convertDICOM('JPEG', connectorMessage, 1); channelMap.put('FileContent',FileContent);
Über eine 2. destination wird dann aus der DICOM-Datei die HL7-MDM Nachricht gebildet. Hier kommen auch wieder einige Hilfsfunktionen zum Einsatz.
// Wandelt eine DICOM-Datei in eine MDM-Datei um // // $id$ // Mapping AETitle -> Fachrichtung var AEtitleOE = { "HNKAetitle":"HNO" } // Mapping AETitle -> Dokumenztenart var AEtitleDocumenttype = { "HNKAetitle":"Ultraschall" } // Pfad für Dateibereitstellung auf dem Server var prefix = '/opt/orbis/KHV/jaif/docs/'; // MSH tmp['MSH']['MSH.3']['MSH.3.1'] = msg['tag00081010'].toString().listlookup(AEtitleOE); tmp['MSH']['MSH.4']['MSH.4.1'] = msg['tag00081010'].toString().listlookup(AEtitleOE); tmp['MSH']['MSH.7']['MSH.7.1'] = msg['tag0008002A'].toString().substring(0,14); tmp['MSH']['MSH.10']['MSH.10.1'] = $('UID'); // EVN tmp['EVN']['EVN.2']['EVN.2.1'] = msg['tag0008002A'].toString().substring(0,14); // PID tmp['PID']['PID.3']['PID.3.1'] = msg['tag00100020'].toString(); tmp['PID']['PID.5'] = msg['tag00100010'].toString(); tmp['PID']['PID.7']['PID.7.1'] = msg['tag00100030'].toString(); tmp['PID']['PID.8']['PID.8.1'] = msg['tag00100040'].toString(); // PV1 tmp['PV1']['PV1.19']['PV1.19.1'] = msg['tag00080050'].toString(); // TXA tmp['TXA']['TXA.2']['TXA.2.1'] = msg['tag00081010'].toString().listlookup(AEtitleDocumenttype); tmp['TXA']['TXA.3']['TXA.3.1'] = 'JPG'; tmp['TXA']['TXA.8']['TXA.8.1'] = msg['tag0008002A'].toString().substring(0,14); tmp['TXA']['TXA.12']['TXA.12.1'] = $('UID'); tmp['TXA']['TXA.12']['TXA.12.2'] = msg['tag00081010'].toString(); tmp['TXA']['TXA.16']['TXA.16.1'] = prefix + $('UID') + '.jpg'; tmp['TXA']['TXA.17']['TXA.17.1'] = 'F';
Im Transformer des Eingangs-channels wurden zuvor noch folgende Channel-Variablen belegt:
SUID = msg['tag0020000D'].toString() SeriesID = msg['tag00200011'].toString() InstanceNumber = msg['tag00200013'].toString() UID = $('SUID') + '.' + $('InstanceNumber')