Skip to content

Instantly share code, notes, and snippets.

@jnimmo
Created January 20, 2015 22:01
Show Gist options
  • Save jnimmo/5721f27e95f9b6607c18 to your computer and use it in GitHub Desktop.
Save jnimmo/5721f27e95f9b6607c18 to your computer and use it in GitHub Desktop.
MirthConnect Channel - Mindray Ultrasound DICOM to HL7 message for Intrahealth Profile
<channel version="3.1.1">
<id>b5e5f65c-36c8-4b8c-bb67-ec4db347e603</id>
<nextMetaDataId>5</nextMetaDataId>
<name>Mindray Ultrasound to Profile</name>
<description>Accepts DICOM images, builds a HL7 file and embeds the images as JPEGs ready for automatic import to Profile</description>
<enabled>true</enabled>
<lastModified>
<time>1419210099205</time>
<timezone>Pacific/Auckland</timezone>
</lastModified>
<revision>71</revision>
<sourceConnector version="3.1.1">
<metaDataId>0</metaDataId>
<name>sourceConnector</name>
<properties class="com.mirth.connect.connectors.dimse.DICOMReceiverProperties" version="3.1.1">
<pluginProperties/>
<listenerConnectorProperties version="3.1.1">
<host>0.0.0.0</host>
<port>104</port>
</listenerConnectorProperties>
<sourceConnectorProperties version="3.1.1">
<responseVariable>None</responseVariable>
<respondAfterProcessing>true</respondAfterProcessing>
<processBatch>false</processBatch>
<firstResponse>false</firstResponse>
</sourceConnectorProperties>
<applicationEntity>MIRTH</applicationEntity>
<localHost></localHost>
<localPort></localPort>
<localApplicationEntity></localApplicationEntity>
<soCloseDelay>50</soCloseDelay>
<releaseTo>5</releaseTo>
<requestTo>5</requestTo>
<idleTo>60</idleTo>
<reaper>10</reaper>
<rspDelay>0</rspDelay>
<pdv1>false</pdv1>
<sndpdulen>16</sndpdulen>
<rcvpdulen>16</rcvpdulen>
<async>0</async>
<bigEndian>false</bigEndian>
<bufSize>1</bufSize>
<defts>false</defts>
<dest></dest>
<nativeData>false</nativeData>
<sorcvbuf>0</sorcvbuf>
<sosndbuf>0</sosndbuf>
<tcpDelay>true</tcpDelay>
<keyPW></keyPW>
<keyStore></keyStore>
<keyStorePW></keyStorePW>
<noClientAuth>true</noClientAuth>
<nossl2>true</nossl2>
<tls>notls</tls>
<trustStore></trustStore>
<trustStorePW></trustStorePW>
</properties>
<transformer version="3.1.1">
<steps/>
<inboundDataType>DICOM</inboundDataType>
<outboundDataType>DICOM</outboundDataType>
<inboundProperties class="com.mirth.connect.plugins.datatypes.dicom.DICOMDataTypeProperties" version="3.1.1"/>
<outboundProperties class="com.mirth.connect.plugins.datatypes.dicom.DICOMDataTypeProperties" version="3.1.1"/>
</transformer>
<filter version="3.1.1">
<rules/>
</filter>
<transportName>DICOM Listener</transportName>
<mode>SOURCE</mode>
<enabled>true</enabled>
<waitForPrevious>true</waitForPrevious>
</sourceConnector>
<destinationConnectors>
<connector version="3.1.1">
<metaDataId>2</metaDataId>
<name>Write HL7</name>
<properties class="com.mirth.connect.connectors.file.FileDispatcherProperties" version="3.1.1">
<pluginProperties/>
<destinationConnectorProperties version="3.1.1">
<queueEnabled>false</queueEnabled>
<sendFirst>false</sendFirst>
<retryIntervalMillis>10000</retryIntervalMillis>
<regenerateTemplate>false</regenerateTemplate>
<retryCount>0</retryCount>
<rotate>false</rotate>
<threadCount>1</threadCount>
<validateResponse>false</validateResponse>
</destinationConnectorProperties>
<scheme>FILE</scheme>
<host>C:/HLINK/HL7_in/RAD</host>
<outputPattern>Mindray_${message.messageId}.hl7</outputPattern>
<anonymous>true</anonymous>
<username>anonymous</username>
<password>anonymous</password>
<timeout>10000</timeout>
<secure>true</secure>
<passive>true</passive>
<validateConnection>true</validateConnection>
<outputAppend>false</outputAppend>
<errorOnExists>false</errorOnExists>
<temporary>false</temporary>
<binary>false</binary>
<charsetEncoding>DEFAULT_ENCODING</charsetEncoding>
<template>${message.encodedData}</template>
</properties>
<transformer version="3.1.1">
<steps>
<step>
<sequenceNumber>0</sequenceNumber>
<name>Patient_Name</name>
<script>var mapping;try { mapping = msg[&apos;tag00100010&apos;].toString(); }catch (e) { logger.error(e); mapping = &apos;&apos;;}channelMap.put(&apos;Patient_Name&apos;, validate( mapping , &apos;&apos;, new Array()));</script>
<type>Mapper</type>
<data>
<entry>
<string>Variable</string>
<string>Patient_Name</string>
</entry>
<entry>
<string>Mapping</string>
<string>msg[&apos;tag00100010&apos;].toString()</string>
</entry>
<entry>
<string>DefaultValue</string>
<string></string>
</entry>
<entry>
<string>RegularExpressions</string>
<list/>
</entry>
<entry>
<string>isGlobal</string>
<string>channel</string>
</entry>
</data>
</step>
<step>
<sequenceNumber>1</sequenceNumber>
<name>Patient_DOB</name>
<script>var mapping;try { mapping = msg[&apos;tag00100030&apos;].toString(); }catch (e) { logger.error(e); mapping = &apos;&apos;;}channelMap.put(&apos;Patient_DOB&apos;, validate( mapping , &apos;&apos;, new Array()));</script>
<type>Mapper</type>
<data>
<entry>
<string>Variable</string>
<string>Patient_DOB</string>
</entry>
<entry>
<string>Mapping</string>
<string>msg[&apos;tag00100030&apos;].toString()</string>
</entry>
<entry>
<string>DefaultValue</string>
<string></string>
</entry>
<entry>
<string>RegularExpressions</string>
<list/>
</entry>
<entry>
<string>isGlobal</string>
<string>channel</string>
</entry>
</data>
</step>
<step>
<sequenceNumber>2</sequenceNumber>
<name>Patient_OtherID</name>
<script>var mapping;try { mapping = msg[&apos;tag00101000&apos;].toString(); }catch (e) { logger.error(e); mapping = &apos;&apos;;}channelMap.put(&apos;Patient_OtherID&apos;, validate( mapping , &apos;&apos;, new Array()));</script>
<type>Mapper</type>
<data>
<entry>
<string>Variable</string>
<string>Patient_OtherID</string>
</entry>
<entry>
<string>Mapping</string>
<string>msg[&apos;tag00101000&apos;].toString()</string>
</entry>
<entry>
<string>DefaultValue</string>
<string></string>
</entry>
<entry>
<string>RegularExpressions</string>
<list/>
</entry>
<entry>
<string>isGlobal</string>
<string>channel</string>
</entry>
</data>
</step>
<step>
<sequenceNumber>3</sequenceNumber>
<name>Patient_NHI</name>
<script>var mapping;try { mapping = msg[&apos;tag00100020&apos;].toString(); }catch (e) { logger.error(e); mapping = &apos;&apos;;}channelMap.put(&apos;Patient_NHI&apos;, validate( mapping , &apos;&apos;, new Array()));</script>
<type>Mapper</type>
<data>
<entry>
<string>Variable</string>
<string>Patient_NHI</string>
</entry>
<entry>
<string>Mapping</string>
<string>msg[&apos;tag00100020&apos;].toString()</string>
</entry>
<entry>
<string>DefaultValue</string>
<string></string>
</entry>
<entry>
<string>RegularExpressions</string>
<list/>
</entry>
<entry>
<string>isGlobal</string>
<string>channel</string>
</entry>
</data>
</step>
<step>
<sequenceNumber>4</sequenceNumber>
<name>Patient_Sex</name>
<script>var mapping;try { mapping = msg[&apos;tag00100040&apos;].toString(); }catch (e) { logger.error(e); mapping = &apos;&apos;;}channelMap.put(&apos;Patient_Sex&apos;, validate( mapping , &apos;&apos;, new Array()));</script>
<type>Mapper</type>
<data>
<entry>
<string>Variable</string>
<string>Patient_Sex</string>
</entry>
<entry>
<string>Mapping</string>
<string>msg[&apos;tag00100040&apos;].toString()</string>
</entry>
<entry>
<string>DefaultValue</string>
<string></string>
</entry>
<entry>
<string>RegularExpressions</string>
<list/>
</entry>
<entry>
<string>isGlobal</string>
<string>channel</string>
</entry>
</data>
</step>
<step>
<sequenceNumber>5</sequenceNumber>
<name>Ultrasound_Type</name>
<script>var mapping;try { mapping = msg[&apos;tag00185020&apos;].toString(); }catch (e) { logger.error(e); mapping = &apos;&apos;;}channelMap.put(&apos;Ultrasound_Type&apos;, validate( mapping , &apos;&apos;, new Array()));</script>
<type>Mapper</type>
<data>
<entry>
<string>Variable</string>
<string>Ultrasound_Type</string>
</entry>
<entry>
<string>Mapping</string>
<string>msg[&apos;tag00185020&apos;].toString()</string>
</entry>
<entry>
<string>DefaultValue</string>
<string></string>
</entry>
<entry>
<string>RegularExpressions</string>
<list/>
</entry>
<entry>
<string>isGlobal</string>
<string>channel</string>
</entry>
</data>
</step>
<step>
<sequenceNumber>6</sequenceNumber>
<name>Ultrasound_Datetime</name>
<script>var mapping;try { mapping = msg[&apos;tag00200010&apos;].toString(); }catch (e) { logger.error(e); mapping = &apos;&apos;;}channelMap.put(&apos;Ultrasound_Datetime&apos;, validate( mapping , &apos;&apos;, new Array()));</script>
<type>Mapper</type>
<data>
<entry>
<string>Variable</string>
<string>Ultrasound_Datetime</string>
</entry>
<entry>
<string>Mapping</string>
<string>msg[&apos;tag00200010&apos;].toString()</string>
</entry>
<entry>
<string>DefaultValue</string>
<string></string>
</entry>
<entry>
<string>RegularExpressions</string>
<list/>
</entry>
<entry>
<string>isGlobal</string>
<string>channel</string>
</entry>
</data>
</step>
<step>
<sequenceNumber>7</sequenceNumber>
<name>Study_UID</name>
<script>var mapping;try { mapping = msg[&apos;tag0020000D&apos;].toString(); }catch (e) { logger.error(e); mapping = &apos;&apos;;}channelMap.put(&apos;Study_UID&apos;, validate( mapping , &apos;&apos;, new Array()));</script>
<type>Mapper</type>
<data>
<entry>
<string>Variable</string>
<string>Study_UID</string>
</entry>
<entry>
<string>Mapping</string>
<string>msg[&apos;tag0020000D&apos;].toString()</string>
</entry>
<entry>
<string>DefaultValue</string>
<string></string>
</entry>
<entry>
<string>RegularExpressions</string>
<list/>
</entry>
<entry>
<string>isGlobal</string>
<string>channel</string>
</entry>
</data>
</step>
<step>
<sequenceNumber>8</sequenceNumber>
<name>FileMetaVersion</name>
<script>var mapping;try { mapping = msg[&apos;tag00020003&apos;].toString(); }catch (e) { logger.error(e); mapping = &apos;&apos;;}channelMap.put(&apos;FileMetaVersion&apos;, validate( mapping , &apos;&apos;, new Array()));</script>
<type>Mapper</type>
<data>
<entry>
<string>Variable</string>
<string>FileMetaVersion</string>
</entry>
<entry>
<string>Mapping</string>
<string>msg[&apos;tag00020003&apos;].toString()</string>
</entry>
<entry>
<string>DefaultValue</string>
<string></string>
</entry>
<entry>
<string>RegularExpressions</string>
<list/>
</entry>
<entry>
<string>isGlobal</string>
<string>channel</string>
</entry>
</data>
</step>
<step>
<sequenceNumber>9</sequenceNumber>
<name>Write HL7 for Profile</name>
<script>var currentdate=DateUtil.getCurrentDate(&quot;yyyyMMddHHmmss&quot;);
//Adding data to MSH Fields
tmp[&apos;MSH&apos;][&apos;MSH.7&apos;][&apos;MSH.7.1&apos;] = currentdate;
tmp[&apos;MSH&apos;][&apos;MSH.10&apos;][&apos;MSH.10.1&apos;] = channelMap.get(&apos;Study_UID&apos;);
tmp[&apos;RF1&apos;][&apos;RF1.3&apos;][&apos;RF1.3.2&apos;] = &quot;US &quot; + channelMap.get(&apos;Ultrasound_Type&apos;);
tmp[&apos;RF1&apos;][&apos;RF1.6&apos;][&apos;RF1.6.1&apos;] = channelMap.get(&apos;Study_UID&apos;);
//Adding data to PID Fields
tmp[&apos;PID&apos;][&apos;PID.2&apos;][&apos;PID.2.1&apos;] = channelMap.get(&apos;Patient_NHI&apos;);
tmp[&apos;PID&apos;][&apos;PID.3&apos;][&apos;PID.3.1&apos;] = channelMap.get(&apos;Patient_OtherID&apos;);
//Set the patient name as the NHI if the name is missing
if (channelMap.get(&apos;Patient_Name&apos;) == &apos;&apos;) {
tmp[&apos;PID&apos;][&apos;PID.5&apos;][&apos;PID.5.1&apos;] = channelMap.get(&apos;Patient_NHI&apos;);
tmp[&apos;PID&apos;][&apos;PID.5&apos;][&apos;PID.5.2&apos;] = &quot;NHI&quot;;
}
else {
tmp[&apos;PID&apos;][&apos;PID.5&apos;] = channelMap.get(&apos;Patient_Name&apos;);
}
tmp[&apos;PID&apos;][&apos;PID.7&apos;][&apos;PID.7.1&apos;] = channelMap.get(&apos;Patient_DOB&apos;);
tmp[&apos;PID&apos;][&apos;PID.8&apos;][&apos;PID.8.1&apos;] = channelMap.get(&apos;Patient_Sex&apos;);
//Adding data to ORC and OBR Fields
tmp[&apos;ORC&apos;][&apos;ORC.2&apos;][&apos;ORC.2.1&apos;] = &quot;F1U080:MIRTH:1:&quot; + channelMap.get(&apos;Study_UID&apos;);
tmp[&apos;OBR&apos;][&apos;OBR.7&apos;][&apos;OBR.7.1&apos;] = channelMap.get(&apos;Ultrasound_Datetime&apos;);
if (DICOMUtil.getSliceCount(connectorMessage) &gt; 0) {
// Need to strip CR/LF from the JPEG file
var jpegData = DICOMUtil.convertDICOM(&apos;JPEG&apos;, connectorMessage);
tmp[&apos;OBX&apos;][&apos;OBX.5&apos;][&apos;OBX.5.5&apos;] = jpegData.replaceAll(&quot;\\r\\n&quot;, &quot;&quot;);
}
tmp[&apos;PV1&apos;][&apos;PV1.19&apos;][&apos;PV1.19.1&apos;]=channelMap.get(&apos;Study_UID&apos;);</script>
<type>JavaScript</type>
<data>
<entry>
<string>Script</string>
<string>var currentdate=DateUtil.getCurrentDate(&quot;yyyyMMddHHmmss&quot;);
//Adding data to MSH Fields
tmp[&apos;MSH&apos;][&apos;MSH.7&apos;][&apos;MSH.7.1&apos;] = currentdate;
tmp[&apos;MSH&apos;][&apos;MSH.10&apos;][&apos;MSH.10.1&apos;] = channelMap.get(&apos;Study_UID&apos;);
tmp[&apos;RF1&apos;][&apos;RF1.3&apos;][&apos;RF1.3.2&apos;] = &quot;US &quot; + channelMap.get(&apos;Ultrasound_Type&apos;);
tmp[&apos;RF1&apos;][&apos;RF1.6&apos;][&apos;RF1.6.1&apos;] = channelMap.get(&apos;Study_UID&apos;);
//Adding data to PID Fields
tmp[&apos;PID&apos;][&apos;PID.2&apos;][&apos;PID.2.1&apos;] = channelMap.get(&apos;Patient_NHI&apos;);
tmp[&apos;PID&apos;][&apos;PID.3&apos;][&apos;PID.3.1&apos;] = channelMap.get(&apos;Patient_OtherID&apos;);
//Set the patient name as the NHI if the name is missing
if (channelMap.get(&apos;Patient_Name&apos;) == &apos;&apos;) {
tmp[&apos;PID&apos;][&apos;PID.5&apos;][&apos;PID.5.1&apos;] = channelMap.get(&apos;Patient_NHI&apos;);
tmp[&apos;PID&apos;][&apos;PID.5&apos;][&apos;PID.5.2&apos;] = &quot;NHI&quot;;
}
else {
tmp[&apos;PID&apos;][&apos;PID.5&apos;] = channelMap.get(&apos;Patient_Name&apos;);
}
tmp[&apos;PID&apos;][&apos;PID.7&apos;][&apos;PID.7.1&apos;] = channelMap.get(&apos;Patient_DOB&apos;);
tmp[&apos;PID&apos;][&apos;PID.8&apos;][&apos;PID.8.1&apos;] = channelMap.get(&apos;Patient_Sex&apos;);
//Adding data to ORC and OBR Fields
tmp[&apos;ORC&apos;][&apos;ORC.2&apos;][&apos;ORC.2.1&apos;] = &quot;F1U080:MIRTH:1:&quot; + channelMap.get(&apos;Study_UID&apos;);
tmp[&apos;OBR&apos;][&apos;OBR.7&apos;][&apos;OBR.7.1&apos;] = channelMap.get(&apos;Ultrasound_Datetime&apos;);
if (DICOMUtil.getSliceCount(connectorMessage) &gt; 0) {
// Need to strip CR/LF from the JPEG file
var jpegData = DICOMUtil.convertDICOM(&apos;JPEG&apos;, connectorMessage);
tmp[&apos;OBX&apos;][&apos;OBX.5&apos;][&apos;OBX.5.5&apos;] = jpegData.replaceAll(&quot;\\r\\n&quot;, &quot;&quot;);
}
tmp[&apos;PV1&apos;][&apos;PV1.19&apos;][&apos;PV1.19.1&apos;]=channelMap.get(&apos;Study_UID&apos;);</string>
</entry>
</data>
</step>
</steps>
<inboundTemplate encoding="base64"></inboundTemplate>
<outboundTemplate encoding="base64">TVNIfF5+XCZ8TUlSVEh8dXJvbGFzc298UHJvZmlsZXx1cm9sYXNzb3wyMDAwMDEwMTAwMDAwMHx8
UkVGXkkxMl5SRUZfSTEyfHxQfDIuNF5OWkxeMS4wDQpSRjF8fHxDTE5eVWx0cmFzb3VuZHx8fFN0
dWR5SUQKUFJEfFJUfF5Bc3NvY2lhdGVzXlVyb2xvZ3l8fHx8fA1QSUR8fHxOSEl8fHx8fE0NT1JD
fElOfFBsYWNlck9yZGVyTnVtYmVyfHx8fHx8fHx8fF5Bc3NvY2lhdGVzXlVyb2xvZ3l8fHx8QVRU
Ck9CUnx8UGxhY2VyT3JkZXJOdW1iZXJ8fExJVHx8fHx8fHx8fHx8fF5Bc3NvY2lhdGVzXlVyb2xv
Z3l8fHx8fHx8fHxGDU9CWHx8RUR8SlBFR15EaXNwbGF5IEZvcm1hdCBJbiBKUEVHXjk5TlpBVEZ8
fF5eXkJhc2U2NF5EQVRBfHx8fHx8QwpQVjF8fE98fHx8fHx8fFM3MHx8fHx8fHx8fFN0dWR5SUQ=
</outboundTemplate>
<inboundDataType>DICOM</inboundDataType>
<outboundDataType>HL7V2</outboundDataType>
<inboundProperties class="com.mirth.connect.plugins.datatypes.dicom.DICOMDataTypeProperties" version="3.1.1"/>
<outboundProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeProperties" version="3.1.1">
<serializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2SerializationProperties" version="3.1.1">
<handleRepetitions>true</handleRepetitions>
<handleSubcomponents>true</handleSubcomponents>
<useStrictParser>false</useStrictParser>
<useStrictValidation>false</useStrictValidation>
<stripNamespaces>true</stripNamespaces>
<segmentDelimiter>\r</segmentDelimiter>
<convertLineBreaks>true</convertLineBreaks>
</serializationProperties>
<deserializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DeserializationProperties" version="3.1.1">
<useStrictParser>false</useStrictParser>
<useStrictValidation>false</useStrictValidation>
<segmentDelimiter>\r</segmentDelimiter>
</deserializationProperties>
<batchProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2BatchProperties" version="3.1.1">
<splitType>MSH_Segment</splitType>
<batchScript></batchScript>
</batchProperties>
<responseGenerationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseGenerationProperties" version="3.1.1">
<segmentDelimiter>\r</segmentDelimiter>
<successfulACKCode>AA</successfulACKCode>
<successfulACKMessage></successfulACKMessage>
<errorACKCode>AE</errorACKCode>
<errorACKMessage>An Error Occurred Processing Message.</errorACKMessage>
<rejectedACKCode>AR</rejectedACKCode>
<rejectedACKMessage>Message Rejected.</rejectedACKMessage>
<msh15ACKAccept>false</msh15ACKAccept>
</responseGenerationProperties>
<responseValidationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseValidationProperties" version="3.1.1">
<successfulACKCode>AA,CA</successfulACKCode>
<errorACKCode>AE,CE</errorACKCode>
<rejectedACKCode>AR,CR</rejectedACKCode>
</responseValidationProperties>
</outboundProperties>
</transformer>
<responseTransformer version="3.1.1">
<steps/>
<inboundDataType>HL7V2</inboundDataType>
<outboundDataType>HL7V2</outboundDataType>
<inboundProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeProperties" version="3.1.1">
<serializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2SerializationProperties" version="3.1.1">
<handleRepetitions>true</handleRepetitions>
<handleSubcomponents>true</handleSubcomponents>
<useStrictParser>false</useStrictParser>
<useStrictValidation>false</useStrictValidation>
<stripNamespaces>true</stripNamespaces>
<segmentDelimiter>\r</segmentDelimiter>
<convertLineBreaks>true</convertLineBreaks>
</serializationProperties>
<deserializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DeserializationProperties" version="3.1.1">
<useStrictParser>false</useStrictParser>
<useStrictValidation>false</useStrictValidation>
<segmentDelimiter>\r</segmentDelimiter>
</deserializationProperties>
<batchProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2BatchProperties" version="3.1.1">
<splitType>MSH_Segment</splitType>
<batchScript></batchScript>
</batchProperties>
<responseGenerationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseGenerationProperties" version="3.1.1">
<segmentDelimiter>\r</segmentDelimiter>
<successfulACKCode>AA</successfulACKCode>
<successfulACKMessage></successfulACKMessage>
<errorACKCode>AE</errorACKCode>
<errorACKMessage>An Error Occurred Processing Message.</errorACKMessage>
<rejectedACKCode>AR</rejectedACKCode>
<rejectedACKMessage>Message Rejected.</rejectedACKMessage>
<msh15ACKAccept>false</msh15ACKAccept>
</responseGenerationProperties>
<responseValidationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseValidationProperties" version="3.1.1">
<successfulACKCode>AA,CA</successfulACKCode>
<errorACKCode>AE,CE</errorACKCode>
<rejectedACKCode>AR,CR</rejectedACKCode>
</responseValidationProperties>
</inboundProperties>
<outboundProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeProperties" version="3.1.1">
<serializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2SerializationProperties" version="3.1.1">
<handleRepetitions>true</handleRepetitions>
<handleSubcomponents>true</handleSubcomponents>
<useStrictParser>false</useStrictParser>
<useStrictValidation>false</useStrictValidation>
<stripNamespaces>true</stripNamespaces>
<segmentDelimiter>\r</segmentDelimiter>
<convertLineBreaks>true</convertLineBreaks>
</serializationProperties>
<deserializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DeserializationProperties" version="3.1.1">
<useStrictParser>false</useStrictParser>
<useStrictValidation>false</useStrictValidation>
<segmentDelimiter>\r</segmentDelimiter>
</deserializationProperties>
<batchProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2BatchProperties" version="3.1.1">
<splitType>MSH_Segment</splitType>
<batchScript></batchScript>
</batchProperties>
<responseGenerationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseGenerationProperties" version="3.1.1">
<segmentDelimiter>\r</segmentDelimiter>
<successfulACKCode>AA</successfulACKCode>
<successfulACKMessage></successfulACKMessage>
<errorACKCode>AE</errorACKCode>
<errorACKMessage>An Error Occurred Processing Message.</errorACKMessage>
<rejectedACKCode>AR</rejectedACKCode>
<rejectedACKMessage>Message Rejected.</rejectedACKMessage>
<msh15ACKAccept>false</msh15ACKAccept>
</responseGenerationProperties>
<responseValidationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseValidationProperties" version="3.1.1">
<successfulACKCode>AA,CA</successfulACKCode>
<errorACKCode>AE,CE</errorACKCode>
<rejectedACKCode>AR,CR</rejectedACKCode>
</responseValidationProperties>
</outboundProperties>
</responseTransformer>
<filter version="3.1.1">
<rules>
<rule>
<sequenceNumber>0</sequenceNumber>
<name>Check if study contains at least the patient name OR NHI and DOB</name>
<data>
<entry>
<string>Script</string>
<string>// Require at least one identifier
var ptName = msg[&apos;tag00100010&apos;].toString();
var ptOtherID = msg[&apos;tag00101000&apos;].toString();
var ptNHI = msg[&apos;tag00100020&apos;].toString();
var ptDOB = msg[&apos;tag00100030&apos;].toString();
var acceptMsg = false;
if (ptName.length &gt; 3 &amp;&amp; (ptNHI.length == 7 || ptOtherID.length == 7 || ptDOB.length == 8))
{
acceptMsg = true;
}
else
{
alerts.sendAlert(&quot;An ultrasound image was discarded because it was missing a name or NHI&quot;);
}
return acceptMsg;</string>
</entry>
</data>
<type>JavaScript</type>
<script>// Require at least one identifier
var ptName = msg[&apos;tag00100010&apos;].toString();
var ptOtherID = msg[&apos;tag00101000&apos;].toString();
var ptNHI = msg[&apos;tag00100020&apos;].toString();
var ptDOB = msg[&apos;tag00100030&apos;].toString();
var acceptMsg = false;
if (ptName.length &gt; 3 &amp;&amp; (ptNHI.length == 7 || ptOtherID.length == 7 || ptDOB.length == 8))
{
acceptMsg = true;
}
else
{
alerts.sendAlert(&quot;An ultrasound image was discarded because it was missing a name or NHI&quot;);
}
return acceptMsg;</script>
<operator>NONE</operator>
</rule>
</rules>
</filter>
<transportName>File Writer</transportName>
<mode>DESTINATION</mode>
<enabled>true</enabled>
<waitForPrevious>true</waitForPrevious>
</connector>
<connector version="3.1.1">
<metaDataId>4</metaDataId>
<name>DICOM Mapper</name>
<properties class="com.mirth.connect.connectors.vm.VmDispatcherProperties" version="3.1.1">
<pluginProperties/>
<destinationConnectorProperties version="3.1.1">
<queueEnabled>false</queueEnabled>
<sendFirst>false</sendFirst>
<retryIntervalMillis>10000</retryIntervalMillis>
<regenerateTemplate>false</regenerateTemplate>
<retryCount>0</retryCount>
<rotate>false</rotate>
<threadCount>1</threadCount>
<validateResponse>false</validateResponse>
</destinationConnectorProperties>
<channelId>none</channelId>
<channelTemplate>${message.encodedData}</channelTemplate>
<mapVariables/>
</properties>
<transformer version="3.1.1">
<steps/>
<inboundTemplate encoding="base64"></inboundTemplate>
<inboundDataType>DICOM</inboundDataType>
<outboundDataType>XML</outboundDataType>
<inboundProperties class="com.mirth.connect.plugins.datatypes.dicom.DICOMDataTypeProperties" version="3.1.1"/>
<outboundProperties class="com.mirth.connect.plugins.datatypes.xml.XMLDataTypeProperties" version="3.1.1">
<serializationProperties class="com.mirth.connect.plugins.datatypes.xml.XMLSerializationProperties" version="3.1.1">
<stripNamespaces>true</stripNamespaces>
</serializationProperties>
<batchProperties class="com.mirth.connect.plugins.datatypes.xml.XMLBatchProperties" version="3.1.1">
<splitType>Element_Name</splitType>
<elementName></elementName>
<level>1</level>
<query></query>
<batchScript></batchScript>
</batchProperties>
</outboundProperties>
</transformer>
<responseTransformer version="3.1.1">
<steps/>
<inboundDataType>XML</inboundDataType>
<outboundDataType>XML</outboundDataType>
<inboundProperties class="com.mirth.connect.plugins.datatypes.xml.XMLDataTypeProperties" version="3.1.1">
<serializationProperties class="com.mirth.connect.plugins.datatypes.xml.XMLSerializationProperties" version="3.1.1">
<stripNamespaces>true</stripNamespaces>
</serializationProperties>
<batchProperties class="com.mirth.connect.plugins.datatypes.xml.XMLBatchProperties" version="3.1.1">
<splitType>Element_Name</splitType>
<elementName></elementName>
<level>1</level>
<query></query>
<batchScript></batchScript>
</batchProperties>
</inboundProperties>
<outboundProperties class="com.mirth.connect.plugins.datatypes.xml.XMLDataTypeProperties" version="3.1.1">
<serializationProperties class="com.mirth.connect.plugins.datatypes.xml.XMLSerializationProperties" version="3.1.1">
<stripNamespaces>true</stripNamespaces>
</serializationProperties>
<batchProperties class="com.mirth.connect.plugins.datatypes.xml.XMLBatchProperties" version="3.1.1">
<splitType>Element_Name</splitType>
<elementName></elementName>
<level>1</level>
<query></query>
<batchScript></batchScript>
</batchProperties>
</outboundProperties>
</responseTransformer>
<filter version="3.1.1">
<rules>
<rule>
<sequenceNumber>0</sequenceNumber>
<name>Never save</name>
<data>
<entry>
<string>Script</string>
<string>return false;</string>
</entry>
</data>
<type>JavaScript</type>
<script>return false;</script>
<operator>NONE</operator>
</rule>
</rules>
</filter>
<transportName>Channel Writer</transportName>
<mode>DESTINATION</mode>
<enabled>false</enabled>
<waitForPrevious>true</waitForPrevious>
</connector>
</destinationConnectors>
<preprocessingScript>// Modify the message variable below to pre process data
return message;</preprocessingScript>
<postprocessingScript>// This script executes once after a message has been processed
// Responses returned from here will be stored as &quot;Postprocessor&quot; in the response map
return;</postprocessingScript>
<deployScript>// This script executes once when the channel is deployed
// You only have access to the globalMap and globalChannelMap here to persist data
return;</deployScript>
<undeployScript>// This script executes once when the channel is undeployed
// You only have access to the globalMap and globalChannelMap here to persist data
return;</undeployScript>
<properties version="3.1.1">
<clearGlobalChannelMap>true</clearGlobalChannelMap>
<messageStorageMode>DEVELOPMENT</messageStorageMode>
<encryptData>false</encryptData>
<removeContentOnCompletion>false</removeContentOnCompletion>
<removeAttachmentsOnCompletion>false</removeAttachmentsOnCompletion>
<initialState>STARTED</initialState>
<storeAttachments>true</storeAttachments>
<tags class="linked-hash-set"/>
<metaDataColumns>
<metaDataColumn>
<name>SOURCE</name>
<type>STRING</type>
<mappingName>mirth_source</mappingName>
</metaDataColumn>
<metaDataColumn>
<name>TYPE</name>
<type>STRING</type>
<mappingName>mirth_type</mappingName>
</metaDataColumn>
</metaDataColumns>
<attachmentProperties>
<className>com.mirth.connect.server.attachments.DICOMAttachmentHandler</className>
<type>DICOM</type>
<properties/>
</attachmentProperties>
<pruneMetaDataDays>180</pruneMetaDataDays>
<archiveEnabled>true</archiveEnabled>
</properties>
</channel>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment