<channel version="3.2.1">
  <id>6a6a5220-92d5-4892-bfac-4a0238dc4fc6</id>
  <nextMetaDataId>5</nextMetaDataId>
  <name>MONTEFIORE_APOLLO_ORM</name>
  <description></description>
  <enabled>false</enabled>
  <lastModified>
    <time>1430275258327</time>
    <timezone>America/Los_Angeles</timezone>
  </lastModified>
  <revision>2</revision>
  <sourceConnector version="3.2.1">
    <metaDataId>0</metaDataId>
    <name>sourceConnector</name>
    <properties class="com.mirth.connect.connectors.file.FileReceiverProperties" version="3.2.1">
      <pluginProperties/>
      <pollConnectorProperties version="3.2.1">
        <pollingType>interval</pollingType>
        <pollingHour>0</pollingHour>
        <pollingMinute>0</pollingMinute>
        <pollingFrequency>500000</pollingFrequency>
      </pollConnectorProperties>
      <sourceConnectorProperties version="3.2.1">
        <responseVariable>None</responseVariable>
        <respondAfterProcessing>true</respondAfterProcessing>
        <processBatch>true</processBatch>
        <firstResponse>true</firstResponse>
        <resourceIds class="linked-hash-set">
          <string>Default Resource</string>
        </resourceIds>
      </sourceConnectorProperties>
      <scheme>FILE</scheme>
      <host>D:/HealthLevel Data/uw/listener-13C06E45-A7BC-460F-8185-3F16A99EB544/RawHL7/</host>
      <fileFilter>*.hl7</fileFilter>
      <regex>false</regex>
      <directoryRecursion>true</directoryRecursion>
      <ignoreDot>true</ignoreDot>
      <anonymous>true</anonymous>
      <username>anonymous</username>
      <password>anonymous</password>
      <timeout>10000</timeout>
      <secure>true</secure>
      <passive>true</passive>
      <validateConnection>true</validateConnection>
      <afterProcessingAction>MOVE</afterProcessingAction>
      <moveToDirectory>D:/HealthLevel Data/uw/listener-13C06E45-A7BC-460F-8185-3F16A99EB544/RawHL7done/</moveToDirectory>
      <moveToFileName>${originalFilename}</moveToFileName>
      <errorReadingAction>MOVE</errorReadingAction>
      <errorResponseAction>MOVE</errorResponseAction>
      <errorMoveToDirectory>D:/HealthLevel Data/uw/listener-13C06E45-A7BC-460F-8185-3F16A99EB544/RawHL7error/</errorMoveToDirectory>
      <errorMoveToFileName>${originalFilename}</errorMoveToFileName>
      <checkFileAge>false</checkFileAge>
      <fileAge>1000</fileAge>
      <fileSizeMinimum>0</fileSizeMinimum>
      <fileSizeMaximum></fileSizeMaximum>
      <ignoreFileSizeMaximum>true</ignoreFileSizeMaximum>
      <sortBy>date</sortBy>
      <binary>false</binary>
      <charsetEncoding>DEFAULT_ENCODING</charsetEncoding>
    </properties>
    <transformer version="3.2.1">
      <steps>
        <step>
          <sequenceNumber>0</sequenceNumber>
          <name>Variable Diclaration</name>
          <script>var errorDir = &quot;D:/HealthLevel Data/uw/listener-13C06E45-A7BC-460F-8185-3F16A99EB544/RawHL7error/&quot;;
var fileDir = &quot;D:/HealthLevel Data/uw/listener-13C06E45-A7BC-460F-8185-3F16A99EB544/Source/&quot;;
var fileName = &quot;MacLab_UW_&quot;;




var newFileName=&quot;&quot;;
var MIN = 5;
var pipeBatch=&quot;&quot;;
// import java sql package to use prepared statements
importPackage(java.sql);
importPackage(java.io);

// Get Message ChildIndex
function getCI(seg)
{
	return seg.childIndex();
}

// Get Segment Name
function getSN(index)
{
	return (msg.children()[index]).name();
}

// Check source segement is same as the target Segment
function isSeg(src,tgt)
{
	return src == tgt ;
}

function getVal(index,sub,ssub)
{
	var segName = getSN(index);
	if(ssub == 0)
	{
//		logger.info(index+&quot;,&quot;+sub+&quot;,&quot;+ssub);
		var fieldLen = (msg.children()[index][segName+&apos;.&apos;+sub]).children().length();
		var res=&quot;&quot;;
		if(fieldLen &gt;= 1)
		res = (SerializerFactory.getSerializer(&apos;HL7V2&apos;).fromXML((msg.children()[index][segName+&apos;.&apos;+sub])));
	return res;
	}
	else 
		return msg.children()[index][segName+&apos;.&apos;+sub][segName+&apos;.&apos;+sub+&apos;.&apos;+ssub].toString();
}

try
{
	// MSH Segment Entries
	var msgTS = msg[&apos;MSH&apos;][&apos;MSH.7&apos;][&apos;MSH.7.1&apos;].toString();
	var msgType = msg[&apos;MSH&apos;][&apos;MSH.9&apos;][&apos;MSH.9.1&apos;].toString();

	// PID Segment Entries
	var MRN = msg[&apos;PID&apos;][&apos;PID.3&apos;][&apos;PID.3.1&apos;].toString();
	var DOB = msg[&apos;PID&apos;][&apos;PID.7&apos;][&apos;PID.7.1&apos;].toString();
	var SEX = msg[&apos;PID&apos;][&apos;PID.8&apos;][&apos;PID.8.1&apos;].toString();
	var RACE = msg[&apos;PID&apos;][&apos;PID.10&apos;][&apos;PID.10.1&apos;].toString();
	var LANG = msg[&apos;PID&apos;][&apos;PID.15&apos;][&apos;PID.15.1&apos;].toString();
    var MS = msg[&apos;PID&apos;][&apos;PID.16&apos;][&apos;PID.16.1&apos;].toString();
	var CSN = msg[&apos;PID&apos;][&apos;PID.18&apos;][&apos;PID.18.1&apos;].toString();

	// N - Items
	var obrLen = msg[&apos;OBR&apos;].length();
	for (var i=0;i&lt;obrLen;i++)
	{
		var rec = {};
		var obrIndex = 	getCI(msg[&apos;OBR&apos;][i]);	
		//logger.info(segIndex);
		// Parsing ORC Segment
		var orcIndex = obrIndex - 1;
		var orcAvailable = isSeg(getSN(orcIndex),&apos;ORC&apos;);
		rec.orc91 = orcAvailable ? getVal(orcIndex,9,1):&apos;&apos;;
		rec.orc101 = orcAvailable ? getVal(orcIndex,10,1):&apos;&apos;;
		rec.orc102 = orcAvailable ? getVal(orcIndex,10,2):&apos;&apos;;
		rec.orc103 = orcAvailable ? getVal(orcIndex,10,3):&apos;&apos;;		
		rec.orc111 = orcAvailable ? getVal(orcIndex,11,1):&apos;&apos;;
		rec.orc112 = orcAvailable ? getVal(orcIndex,11,2):&apos;&apos;;
		rec.orc113 = orcAvailable ? getVal(orcIndex,11,3):&apos;&apos;;
		//logger.info(rec.orc91+&quot;,&quot;+rec.orc101+&quot;,&quot;+rec.orc113);

		// Parsing OBR Segment
		rec.obr21 = getVal(obrIndex,2,1);
		rec.obr31 = getVal(obrIndex,3,1);

		rec.obr323 = getVal(obrIndex,3,3);
		rec.obr322 = getVal(obrIndex,3,2);
		rec.obr326 = getVal(obrIndex,3,6);

		// Order Code
		rec.obr41 = getVal(obrIndex,4,1);
		rec.obr42 = getVal(obrIndex,4,2);
		rec.obr43 = getVal(obrIndex,4,3);
		// Observation Time
		rec.obr71 = getVal(obrIndex,7,1);
		// Ordering Provider
		rec.obr161 = getVal(obrIndex,16,1); 
		rec.obr162 = getVal(obrIndex,16,2); 
		rec.obr163 = getVal(obrIndex,16,3);

		rec.staff_role = &apos;Attending MD&apos; ;
		rec.staff_first = getVal(obrIndex, 32, 3);
		rec.staff_last = getVal(obrIndex, 32, 2);

		// 	Observation Values
		var start = obrIndex+1;
		var end = i &lt; obrLen-1 ? getCI(msg[&apos;OBR&apos;][i+1]) : msg.children().length();
		if(start == end)
		{
			//logger.info(&quot;No OBX Found for OBR[&quot;+i+&quot;]&quot;);
			InsertAllStageORMFile(rec);				
		}
		for(var j=start; j &lt; end; j++)
		{
			if(isSeg(getSN(j),&apos;OBX&apos;))
			{
				rec.obx31 = getVal(j,3,1);
				rec.obx51 = getVal(j,5,0);
				rec.obx_status = getVal(j,11,1);
				var tmpts = getVal(j,14,1);
				rec.ts_when =  tmpts ;
//logger.info(&quot;timestamp: &quot;+ rec.ts_when) ;
				rec.ts_when = tmpts.substr(0,4) + &apos;-&apos; + tmpts.substr(4, 2) + &apos;-&apos; + tmpts.substr(6,2) + &apos; &apos; +
								+ tmpts.substr(8, 2) +&apos;:&apos; + tmpts.substr(10,2)+&apos;:&apos; + tmpts.substr(12,2) ;
				
				//logger.info(&quot;timetampobx&quot; + rec.obx31) ;
				//logger.info(&quot;timetamp&quot; + rec.ts_when.toString()) ;
				var obxinfo = &apos;&apos;;
//logger.info(&quot;Info&quot; + rec.obx31.substr(0,4));
				if (rec.obx31.substr(0,4) == &quot;TIME&quot;)
				{
					obxinfo = &apos;Event_Workflow&apos;;
//logger.info(rec.obx31.substr(0,4) + &apos;-----&apos; + rec.obx31);
				}
				else
				{
					obxinfo = rec.obx31;
//logger.info(&quot;else condition: &quot;+obxinfo);					
				}
				switch (obxinfo)
				{
					case &quot;Custom Field&quot;:
						rec.attribuet_guid = getVal(k, 3, 2);
						rec.attribute_name = getVal(k, 3, 3);
						rec.attribute_value = getVal(k, 5, 1);
						rec.attribute_group = getVal(k, 5, 3);
						break;
					case &quot;Event_Workflow&quot;:
						rec.infotype = &apos;WORKFLOWSTATE&apos;;
							// when obx 3 = Event_Personnel, then obx5 has details including roles
						/*rec.attribute_name = rec.info;
						rec.attribute_value = rec.obx31;*/
						rec.workflow_state = rec.obx31;
						break;

					case &quot;Event_Contrast&quot;:
						rec.infotype = &apos;CONTRAST&apos;;
						rec.attribute_name = getVal(j, 5,1);
						rec.attribute_value = getVal(j, 5, 2);
						break;

					case &quot;Event_Personnel&quot;:
						rec.infotype = &apos;STAFF&apos;;
							// when obx 3 = Event_Personnel, then obx5 has details including roles
						rec.staff_first = getVal(j,5,3);
						rec.staff_last = getVal(j,5,2);
						rec.staff_role = getVal(j,5,6);
						rec.staff_intid = getVal(j,5,10);
						break;
						// when obx 3 = Event_Medication, then obx5 has details
					case &quot;Event_Medication&quot;:
						rec.infotype = &quot;MEDICATION&quot;;
						rec.med_name = getVal(j,5,1);
						rec.med_qty = getVal(j,5,2);
						rec.med_path = getVal(j,5,3);
						rec.med_type = getVal(j,5,5);
						rec.med_unit = getVal(j,6,1);
						break;

					case &quot;Event_Inventory&quot;:
						rec.infotype = &apos;INVENTORY&apos;
							// when obx 3 = Event_Inventory, then obx5 has details
						rec.item_name = getVal(j,5,1);
						rec.item_code = getVal(j,5,2);
						rec.item_type = getVal(j,5,8);
						rec.item_invid1 = getVal(j,5,9);
						rec.item_invid2 = getVal(j,5,11);
						break;

					case &quot;Event_Proc&quot;:
						rec.infotype = &apos;PERFORMED_PROCEDURE&apos;;
							// when obx 3 = Event_Procedure, then obx5 has details
						rec.perf_procname = getVal(j,5,1);
						break;

					default:
						rec.infotype = obxinfo ;

	//				logger.info(rec.obx31);	
				}
				InsertAllStageORMFile(rec);				
			} // end of obx segment
		} // end of j loop ... looping through all the obx available for the obr, by obr group grouping..
	}//end of obr loop for n obr segments...
	if(obrLen == 0)
	{
		InsertAllStageORMFile(rec);				
	}
// Write file to pipe delimited file	
	writeContent();		
}
catch(exception)
{
	var dateString = DateUtil.getCurrentDate(&apos;yyyyMMddHHmmss&apos;);
	var hl7 = SerializerFactory.getSerializer(&apos;HL7V2&apos;).fromXML(msg);
	FileUtil.write(errorDir+&apos;Error_&apos;+dateString+&apos;.hl7&apos;, false, hl7);
	throw(exception);
}</script>
          <type>JavaScript</type>
          <data>
            <entry>
              <string>Script</string>
              <string>var errorDir = &quot;D:/HealthLevel Data/uw/listener-13C06E45-A7BC-460F-8185-3F16A99EB544/RawHL7error/&quot;;
var fileDir = &quot;D:/HealthLevel Data/uw/listener-13C06E45-A7BC-460F-8185-3F16A99EB544/Source/&quot;;
var fileName = &quot;MacLab_UW_&quot;;




var newFileName=&quot;&quot;;
var MIN = 5;
var pipeBatch=&quot;&quot;;
// import java sql package to use prepared statements
importPackage(java.sql);
importPackage(java.io);

// Get Message ChildIndex
function getCI(seg)
{
	return seg.childIndex();
}

// Get Segment Name
function getSN(index)
{
	return (msg.children()[index]).name();
}

// Check source segement is same as the target Segment
function isSeg(src,tgt)
{
	return src == tgt ;
}

function getVal(index,sub,ssub)
{
	var segName = getSN(index);
	if(ssub == 0)
	{
//		logger.info(index+&quot;,&quot;+sub+&quot;,&quot;+ssub);
		var fieldLen = (msg.children()[index][segName+&apos;.&apos;+sub]).children().length();
		var res=&quot;&quot;;
		if(fieldLen &gt;= 1)
		res = (SerializerFactory.getSerializer(&apos;HL7V2&apos;).fromXML((msg.children()[index][segName+&apos;.&apos;+sub])));
	return res;
	}
	else 
		return msg.children()[index][segName+&apos;.&apos;+sub][segName+&apos;.&apos;+sub+&apos;.&apos;+ssub].toString();
}

try
{
	// MSH Segment Entries
	var msgTS = msg[&apos;MSH&apos;][&apos;MSH.7&apos;][&apos;MSH.7.1&apos;].toString();
	var msgType = msg[&apos;MSH&apos;][&apos;MSH.9&apos;][&apos;MSH.9.1&apos;].toString();

	// PID Segment Entries
	var MRN = msg[&apos;PID&apos;][&apos;PID.3&apos;][&apos;PID.3.1&apos;].toString();
	var DOB = msg[&apos;PID&apos;][&apos;PID.7&apos;][&apos;PID.7.1&apos;].toString();
	var SEX = msg[&apos;PID&apos;][&apos;PID.8&apos;][&apos;PID.8.1&apos;].toString();
	var RACE = msg[&apos;PID&apos;][&apos;PID.10&apos;][&apos;PID.10.1&apos;].toString();
	var LANG = msg[&apos;PID&apos;][&apos;PID.15&apos;][&apos;PID.15.1&apos;].toString();
    var MS = msg[&apos;PID&apos;][&apos;PID.16&apos;][&apos;PID.16.1&apos;].toString();
	var CSN = msg[&apos;PID&apos;][&apos;PID.18&apos;][&apos;PID.18.1&apos;].toString();

	// N - Items
	var obrLen = msg[&apos;OBR&apos;].length();
	for (var i=0;i&lt;obrLen;i++)
	{
		var rec = {};
		var obrIndex = 	getCI(msg[&apos;OBR&apos;][i]);	
		//logger.info(segIndex);
		// Parsing ORC Segment
		var orcIndex = obrIndex - 1;
		var orcAvailable = isSeg(getSN(orcIndex),&apos;ORC&apos;);
		rec.orc91 = orcAvailable ? getVal(orcIndex,9,1):&apos;&apos;;
		rec.orc101 = orcAvailable ? getVal(orcIndex,10,1):&apos;&apos;;
		rec.orc102 = orcAvailable ? getVal(orcIndex,10,2):&apos;&apos;;
		rec.orc103 = orcAvailable ? getVal(orcIndex,10,3):&apos;&apos;;		
		rec.orc111 = orcAvailable ? getVal(orcIndex,11,1):&apos;&apos;;
		rec.orc112 = orcAvailable ? getVal(orcIndex,11,2):&apos;&apos;;
		rec.orc113 = orcAvailable ? getVal(orcIndex,11,3):&apos;&apos;;
		//logger.info(rec.orc91+&quot;,&quot;+rec.orc101+&quot;,&quot;+rec.orc113);

		// Parsing OBR Segment
		rec.obr21 = getVal(obrIndex,2,1);
		rec.obr31 = getVal(obrIndex,3,1);

		rec.obr323 = getVal(obrIndex,3,3);
		rec.obr322 = getVal(obrIndex,3,2);
		rec.obr326 = getVal(obrIndex,3,6);

		// Order Code
		rec.obr41 = getVal(obrIndex,4,1);
		rec.obr42 = getVal(obrIndex,4,2);
		rec.obr43 = getVal(obrIndex,4,3);
		// Observation Time
		rec.obr71 = getVal(obrIndex,7,1);
		// Ordering Provider
		rec.obr161 = getVal(obrIndex,16,1); 
		rec.obr162 = getVal(obrIndex,16,2); 
		rec.obr163 = getVal(obrIndex,16,3);

		rec.staff_role = &apos;Attending MD&apos; ;
		rec.staff_first = getVal(obrIndex, 32, 3);
		rec.staff_last = getVal(obrIndex, 32, 2);

		// 	Observation Values
		var start = obrIndex+1;
		var end = i &lt; obrLen-1 ? getCI(msg[&apos;OBR&apos;][i+1]) : msg.children().length();
		if(start == end)
		{
			//logger.info(&quot;No OBX Found for OBR[&quot;+i+&quot;]&quot;);
			InsertAllStageORMFile(rec);				
		}
		for(var j=start; j &lt; end; j++)
		{
			if(isSeg(getSN(j),&apos;OBX&apos;))
			{
				rec.obx31 = getVal(j,3,1);
				rec.obx51 = getVal(j,5,0);
				rec.obx_status = getVal(j,11,1);
				var tmpts = getVal(j,14,1);
				rec.ts_when =  tmpts ;
//logger.info(&quot;timestamp: &quot;+ rec.ts_when) ;
				rec.ts_when = tmpts.substr(0,4) + &apos;-&apos; + tmpts.substr(4, 2) + &apos;-&apos; + tmpts.substr(6,2) + &apos; &apos; +
								+ tmpts.substr(8, 2) +&apos;:&apos; + tmpts.substr(10,2)+&apos;:&apos; + tmpts.substr(12,2) ;
				
				//logger.info(&quot;timetampobx&quot; + rec.obx31) ;
				//logger.info(&quot;timetamp&quot; + rec.ts_when.toString()) ;
				var obxinfo = &apos;&apos;;
//logger.info(&quot;Info&quot; + rec.obx31.substr(0,4));
				if (rec.obx31.substr(0,4) == &quot;TIME&quot;)
				{
					obxinfo = &apos;Event_Workflow&apos;;
//logger.info(rec.obx31.substr(0,4) + &apos;-----&apos; + rec.obx31);
				}
				else
				{
					obxinfo = rec.obx31;
//logger.info(&quot;else condition: &quot;+obxinfo);					
				}
				switch (obxinfo)
				{
					case &quot;Custom Field&quot;:
						rec.attribuet_guid = getVal(k, 3, 2);
						rec.attribute_name = getVal(k, 3, 3);
						rec.attribute_value = getVal(k, 5, 1);
						rec.attribute_group = getVal(k, 5, 3);
						break;
					case &quot;Event_Workflow&quot;:
						rec.infotype = &apos;WORKFLOWSTATE&apos;;
							// when obx 3 = Event_Personnel, then obx5 has details including roles
						/*rec.attribute_name = rec.info;
						rec.attribute_value = rec.obx31;*/
						rec.workflow_state = rec.obx31;
						break;

					case &quot;Event_Contrast&quot;:
						rec.infotype = &apos;CONTRAST&apos;;
						rec.attribute_name = getVal(j, 5,1);
						rec.attribute_value = getVal(j, 5, 2);
						break;

					case &quot;Event_Personnel&quot;:
						rec.infotype = &apos;STAFF&apos;;
							// when obx 3 = Event_Personnel, then obx5 has details including roles
						rec.staff_first = getVal(j,5,3);
						rec.staff_last = getVal(j,5,2);
						rec.staff_role = getVal(j,5,6);
						rec.staff_intid = getVal(j,5,10);
						break;
						// when obx 3 = Event_Medication, then obx5 has details
					case &quot;Event_Medication&quot;:
						rec.infotype = &quot;MEDICATION&quot;;
						rec.med_name = getVal(j,5,1);
						rec.med_qty = getVal(j,5,2);
						rec.med_path = getVal(j,5,3);
						rec.med_type = getVal(j,5,5);
						rec.med_unit = getVal(j,6,1);
						break;

					case &quot;Event_Inventory&quot;:
						rec.infotype = &apos;INVENTORY&apos;
							// when obx 3 = Event_Inventory, then obx5 has details
						rec.item_name = getVal(j,5,1);
						rec.item_code = getVal(j,5,2);
						rec.item_type = getVal(j,5,8);
						rec.item_invid1 = getVal(j,5,9);
						rec.item_invid2 = getVal(j,5,11);
						break;

					case &quot;Event_Proc&quot;:
						rec.infotype = &apos;PERFORMED_PROCEDURE&apos;;
							// when obx 3 = Event_Procedure, then obx5 has details
						rec.perf_procname = getVal(j,5,1);
						break;

					default:
						rec.infotype = obxinfo ;

	//				logger.info(rec.obx31);	
				}
				InsertAllStageORMFile(rec);				
			} // end of obx segment
		} // end of j loop ... looping through all the obx available for the obr, by obr group grouping..
	}//end of obr loop for n obr segments...
	if(obrLen == 0)
	{
		InsertAllStageORMFile(rec);				
	}
// Write file to pipe delimited file	
	writeContent();		
}
catch(exception)
{
	var dateString = DateUtil.getCurrentDate(&apos;yyyyMMddHHmmss&apos;);
	var hl7 = SerializerFactory.getSerializer(&apos;HL7V2&apos;).fromXML(msg);
	FileUtil.write(errorDir+&apos;Error_&apos;+dateString+&apos;.hl7&apos;, false, hl7);
	throw(exception);
}</string>
            </entry>
          </data>
        </step>
        <step>
          <sequenceNumber>1</sequenceNumber>
          <name>File Scripts</name>
          <script>//Insert record into the file
function InsertAllStageORMFile(rec)
{
	var body = getRecord(rec);
	pipeBatch += body;
}

// Check Whether File Exists or not.
function fileDoesNotExist()
{
	var f = new File(fileDir+newFileName);
	return !f.exists();
}


// Write the record to the file
function writeContent()
{
	// Writing the pipe delimted file to the file directory
	var newdate = DateUtil.getCurrentDate(&apos;yyyy/MM/dd HH:mm&apos;);
	var oldConf = globalChannelMap.get(&quot;old&quot;);
	var olddate = oldConf.date;
	newFileName= fileName+DateUtil.convertDate(&apos;yyyy/MM/dd HH:mm&apos;, &apos;yyyyMMddHHmm&apos;, olddate)+&quot;.psv&quot;;
	// If file is a new one after deployment or execeeds certian minutes create new file
	if(fileDoesNotExist() || ((new Date(newdate).getTime() - new Date(olddate).getTime())/60000 &gt; MIN) )
	{
		logger.info(&quot;Creating New File&quot;);
		newFileName= fileName + DateUtil.convertDate(&apos;yyyy/MM/dd HH:mm&apos;, &apos;yyyyMMddHHmm&apos;, newdate)+&quot;.psv&quot;;
		var header= getHeader();
		// Write header to file
		pipeBatch = header+pipeBatch;
		// Change Config Data
		oldConf.date = newdate;
		globalChannelMap.put(&quot;old&quot;,oldConf);
	}
	FileUtil.write(fileDir+newFileName,true,pipeBatch);
}


// Convert the record into a valid Pipe Delimited Record
function getPipeData(rec)
{
	return (SerializerFactory.getSerializer(&apos;HL7V2&apos;).fromXML(rec)).replace(&quot;REC|&quot;,&quot;&quot;)+&quot;\r\n&quot;;
}


// Create Header
function getHeader()
{
	//var incMsg = SerializerFactory.getSerializer(&apos;HL7V2&apos;).fromXML(&quot;|||||||||||||||insurancename|insurance_type|IN1segmentsequence#&quot;);
	var header = new XML(&quot;&lt;REC/&gt;&quot;);

	header[&apos;REC&apos;][&apos;REC.1&apos;] = &quot;Patient_Id&quot;;
	header[&apos;REC&apos;][&apos;REC.2&apos;] = &quot;dob&quot;;
	header[&apos;REC&apos;][&apos;REC.3&apos;] = &quot;Sex&quot;;
	header[&apos;REC&apos;][&apos;REC.4&apos;] = &quot;Race&quot;;
	header[&apos;REC&apos;][&apos;REC.5&apos;] = &quot;Language&quot;;
	header[&apos;REC&apos;][&apos;REC.6&apos;] = &quot;Marital_Status&quot;;
	header[&apos;REC&apos;][&apos;REC.7&apos;] = &quot;Account_Number&quot;;
	header[&apos;REC&apos;][&apos;REC.8&apos;] = &quot;ORC91&quot;;
	header[&apos;REC&apos;][&apos;REC.9&apos;] = &quot;ORC101&quot;;
	header[&apos;REC&apos;][&apos;REC.10&apos;] = &quot;ORC102&quot;;
	header[&apos;REC&apos;][&apos;REC.11&apos;] = &quot;ORC103&quot;;
	header[&apos;REC&apos;][&apos;REC.12&apos;] = &quot;ORC111&quot;;
	header[&apos;REC&apos;][&apos;REC.13&apos;] = &quot;ORC112&quot;;
	header[&apos;REC&apos;][&apos;REC.14&apos;] = &quot;ORC113&quot;;
	header[&apos;REC&apos;][&apos;REC.15&apos;] = &quot;OBR21&quot;;
	header[&apos;REC&apos;][&apos;REC.16&apos;] = &quot;OBR31&quot;;
	header[&apos;REC&apos;][&apos;REC.17&apos;] = &quot;OBR41&quot;;
	header[&apos;REC&apos;][&apos;REC.18&apos;] = &quot;OBR42&quot;;
	header[&apos;REC&apos;][&apos;REC.19&apos;] = &quot;OBR43&quot;;
	header[&apos;REC&apos;][&apos;REC.20&apos;] = &quot;OBR71&quot;;
	header[&apos;REC&apos;][&apos;REC.21&apos;] = &quot;OBR161&quot;;
	header[&apos;REC&apos;][&apos;REC.22&apos;] = &quot;OBR162&quot;;
	header[&apos;REC&apos;][&apos;REC.23&apos;] = &quot;OBR163&quot;;
	
	header[&apos;REC&apos;][&apos;REC.24&apos;] = &quot;info&quot;;   
	header[&apos;REC&apos;][&apos;REC.25&apos;] = &quot;OBX51&quot;; 
	header[&apos;REC&apos;][&apos;REC.26&apos;] = &quot;OBX31&quot;; 

	header[&apos;REC&apos;][&apos;REC.27&apos;] = &quot;attribute_group&quot;; 
	header[&apos;REC&apos;][&apos;REC.28&apos;] = &quot;attribute_guid&quot;; 
	header[&apos;REC&apos;][&apos;REC.29&apos;] = &quot;attribute_name&quot;; 
	header[&apos;REC&apos;][&apos;REC.30&apos;] = &quot;attribute_value&quot;; 
	
	header[&apos;REC&apos;][&apos;REC.31&apos;] = &quot;ts_when&quot;; 

	header[&apos;REC&apos;][&apos;REC.32&apos;] = &quot;workflow_state&quot;;
	
	header[&apos;REC&apos;][&apos;REC.33&apos;] = &quot;staff_first&quot;; 
	header[&apos;REC&apos;][&apos;REC.34&apos;] = &quot;staff_last&quot;;
	header[&apos;REC&apos;][&apos;REC.35&apos;] = &quot;staff_role&quot;; 
	header[&apos;REC&apos;][&apos;REC.36&apos;] = &quot;staff_intid&quot;; 

	header[&apos;REC&apos;][&apos;REC.37&apos;] = &quot;med_name&quot;; 
	header[&apos;REC&apos;][&apos;REC.38&apos;] = &quot;med_qty&quot;; 
	header[&apos;REC&apos;][&apos;REC.39&apos;] = &quot;med_path&quot;; 
	header[&apos;REC&apos;][&apos;REC.40&apos;] = &quot;med_unit&quot;; 
	header[&apos;REC&apos;][&apos;REC.41&apos;] = &quot;med_type&quot;; 

	header[&apos;REC&apos;][&apos;REC.42&apos;] = &quot;item_name&quot;; 
	header[&apos;REC&apos;][&apos;REC.43&apos;] = &quot;item_code&quot;; 
	header[&apos;REC&apos;][&apos;REC.44&apos;] = &quot;item_type&quot;; 
	header[&apos;REC&apos;][&apos;REC.45&apos;] = &quot;item_invid1&quot;;
	header[&apos;REC&apos;][&apos;REC.46&apos;] = &quot;item_invid2&quot;; 

	header[&apos;REC&apos;][&apos;REC.47&apos;] = &quot;perf_procname&quot;;
	

	return getPipeData(header);
}


// Create Record
function getRecord(record)
{
	// Create Record to be inserted in the File
	var rec = new XML(&quot;&lt;REC/&gt;&quot;);
	rec[&apos;REC&apos;][&apos;REC.1&apos;] = MRN;
	rec[&apos;REC&apos;][&apos;REC.2&apos;] = DOB;
	rec[&apos;REC&apos;][&apos;REC.3&apos;] = SEX;
	rec[&apos;REC&apos;][&apos;REC.4&apos;] = RACE;
	rec[&apos;REC&apos;][&apos;REC.5&apos;] = LANG;
	rec[&apos;REC&apos;][&apos;REC.6&apos;] = MS;
	rec[&apos;REC&apos;][&apos;REC.7&apos;] = CSN;
	rec[&apos;REC&apos;][&apos;REC.8&apos;] = record.orc91 ? record.orc91 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.9&apos;] = record.orc101 ? record.orc101 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.10&apos;] = record.orc102 ? record.orc102 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.11&apos;] = record.orc103 ? record.orc103 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.12&apos;] = record.orc111 ? record.orc111 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.13&apos;] = record.orc112 ? record.orc112 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.14&apos;] = record.orc113 ? record.orc113 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.15&apos;] = record.obr21 ? record.obr21 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.16&apos;] = record.obr31 ? record.obr31 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.17&apos;] = record.obr41 ? record.obr41 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.18&apos;] = record.obr42 ? record.obr42 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.19&apos;] = record.obr43 ? record.obr43 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.20&apos;] = record.obr71 ? record.obr71 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.21&apos;] = record.obr161 ? record.obr161 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.22&apos;] = record.obr162 ? record.obr162 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.23&apos;] = record.obr163 ? record.obr163 : &apos;&apos;;
	
	rec[&apos;REC&apos;][&apos;REC.24&apos;] = record.infotype ? record.infotype : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.25&apos;] = record.obx51 ? record.obx51 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.26&apos;] = record.obx31 ? record.obx31 : &apos;&apos;;
	
	rec[&apos;REC&apos;][&apos;REC.27&apos;] = record.attribute_group ? record.attribute_group : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.28&apos;] = record.attribute_guid ? record.attribute_guid : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.29&apos;] = record.attribute_name ? record.attribute_name : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.30&apos;] = record.attribute_value ? record.attribute_value : &apos;&apos;;

	rec[&apos;REC&apos;][&apos;REC.31&apos;] = record.ts_when ? record.ts_when : &apos;&apos;;	

	rec[&apos;REC&apos;][&apos;REC.32&apos;] =  record.workflow_state ? record.workflow_state : &apos;&apos;;
	
	rec[&apos;REC&apos;][&apos;REC.33&apos;] = record.staff_first ? record.staff_first : &apos;&apos;;  
	rec[&apos;REC&apos;][&apos;REC.34&apos;] = record.staff_last ? record.staff_last : &apos;&apos;; 
	rec[&apos;REC&apos;][&apos;REC.35&apos;] = record.staff_role ? record.staff_role : &apos;&apos;; 
	rec[&apos;REC&apos;][&apos;REC.36&apos;] = record.staff_intid ? record.staff_intid : &apos;&apos;;

	rec[&apos;REC&apos;][&apos;REC.37&apos;] = record.med_name ? record.med_name : &apos;&apos;; 
	rec[&apos;REC&apos;][&apos;REC.38&apos;] = record.med_qty ? record.med_qty : &apos;&apos;; 
	rec[&apos;REC&apos;][&apos;REC.39&apos;] = record.med_path ? record.med_path : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.40&apos;] = record.med_unit ? record.med_unit : &apos;&apos;; 
	rec[&apos;REC&apos;][&apos;REC.41&apos;] = record.med_type ? record.med_type : &apos;&apos;;

	rec[&apos;REC&apos;][&apos;REC.42&apos;] = record.item_name ? record.item_name : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.43&apos;] = record.item_code ? record.item_code : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.44&apos;] = record.item_type ? record.item_type : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.45&apos;] = record.item_invid1 ? record.item_invid1 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.46&apos;] = record.item_invid2 ? record.item_invid2 : &apos;&apos;;

	rec[&apos;REC&apos;][&apos;REC.47&apos;] = record.perf_procname ? record.perf_procname : &apos;&apos;;
	//logger.info(rec);
	return getPipeData(rec);
}</script>
          <type>JavaScript</type>
          <data>
            <entry>
              <string>Script</string>
              <string>//Insert record into the file
function InsertAllStageORMFile(rec)
{
	var body = getRecord(rec);
	pipeBatch += body;
}

// Check Whether File Exists or not.
function fileDoesNotExist()
{
	var f = new File(fileDir+newFileName);
	return !f.exists();
}


// Write the record to the file
function writeContent()
{
	// Writing the pipe delimted file to the file directory
	var newdate = DateUtil.getCurrentDate(&apos;yyyy/MM/dd HH:mm&apos;);
	var oldConf = globalChannelMap.get(&quot;old&quot;);
	var olddate = oldConf.date;
	newFileName= fileName+DateUtil.convertDate(&apos;yyyy/MM/dd HH:mm&apos;, &apos;yyyyMMddHHmm&apos;, olddate)+&quot;.psv&quot;;
	// If file is a new one after deployment or execeeds certian minutes create new file
	if(fileDoesNotExist() || ((new Date(newdate).getTime() - new Date(olddate).getTime())/60000 &gt; MIN) )
	{
		logger.info(&quot;Creating New File&quot;);
		newFileName= fileName + DateUtil.convertDate(&apos;yyyy/MM/dd HH:mm&apos;, &apos;yyyyMMddHHmm&apos;, newdate)+&quot;.psv&quot;;
		var header= getHeader();
		// Write header to file
		pipeBatch = header+pipeBatch;
		// Change Config Data
		oldConf.date = newdate;
		globalChannelMap.put(&quot;old&quot;,oldConf);
	}
	FileUtil.write(fileDir+newFileName,true,pipeBatch);
}


// Convert the record into a valid Pipe Delimited Record
function getPipeData(rec)
{
	return (SerializerFactory.getSerializer(&apos;HL7V2&apos;).fromXML(rec)).replace(&quot;REC|&quot;,&quot;&quot;)+&quot;\r\n&quot;;
}


// Create Header
function getHeader()
{
	//var incMsg = SerializerFactory.getSerializer(&apos;HL7V2&apos;).fromXML(&quot;|||||||||||||||insurancename|insurance_type|IN1segmentsequence#&quot;);
	var header = new XML(&quot;&lt;REC/&gt;&quot;);

	header[&apos;REC&apos;][&apos;REC.1&apos;] = &quot;Patient_Id&quot;;
	header[&apos;REC&apos;][&apos;REC.2&apos;] = &quot;dob&quot;;
	header[&apos;REC&apos;][&apos;REC.3&apos;] = &quot;Sex&quot;;
	header[&apos;REC&apos;][&apos;REC.4&apos;] = &quot;Race&quot;;
	header[&apos;REC&apos;][&apos;REC.5&apos;] = &quot;Language&quot;;
	header[&apos;REC&apos;][&apos;REC.6&apos;] = &quot;Marital_Status&quot;;
	header[&apos;REC&apos;][&apos;REC.7&apos;] = &quot;Account_Number&quot;;
	header[&apos;REC&apos;][&apos;REC.8&apos;] = &quot;ORC91&quot;;
	header[&apos;REC&apos;][&apos;REC.9&apos;] = &quot;ORC101&quot;;
	header[&apos;REC&apos;][&apos;REC.10&apos;] = &quot;ORC102&quot;;
	header[&apos;REC&apos;][&apos;REC.11&apos;] = &quot;ORC103&quot;;
	header[&apos;REC&apos;][&apos;REC.12&apos;] = &quot;ORC111&quot;;
	header[&apos;REC&apos;][&apos;REC.13&apos;] = &quot;ORC112&quot;;
	header[&apos;REC&apos;][&apos;REC.14&apos;] = &quot;ORC113&quot;;
	header[&apos;REC&apos;][&apos;REC.15&apos;] = &quot;OBR21&quot;;
	header[&apos;REC&apos;][&apos;REC.16&apos;] = &quot;OBR31&quot;;
	header[&apos;REC&apos;][&apos;REC.17&apos;] = &quot;OBR41&quot;;
	header[&apos;REC&apos;][&apos;REC.18&apos;] = &quot;OBR42&quot;;
	header[&apos;REC&apos;][&apos;REC.19&apos;] = &quot;OBR43&quot;;
	header[&apos;REC&apos;][&apos;REC.20&apos;] = &quot;OBR71&quot;;
	header[&apos;REC&apos;][&apos;REC.21&apos;] = &quot;OBR161&quot;;
	header[&apos;REC&apos;][&apos;REC.22&apos;] = &quot;OBR162&quot;;
	header[&apos;REC&apos;][&apos;REC.23&apos;] = &quot;OBR163&quot;;
	
	header[&apos;REC&apos;][&apos;REC.24&apos;] = &quot;info&quot;;   
	header[&apos;REC&apos;][&apos;REC.25&apos;] = &quot;OBX51&quot;; 
	header[&apos;REC&apos;][&apos;REC.26&apos;] = &quot;OBX31&quot;; 

	header[&apos;REC&apos;][&apos;REC.27&apos;] = &quot;attribute_group&quot;; 
	header[&apos;REC&apos;][&apos;REC.28&apos;] = &quot;attribute_guid&quot;; 
	header[&apos;REC&apos;][&apos;REC.29&apos;] = &quot;attribute_name&quot;; 
	header[&apos;REC&apos;][&apos;REC.30&apos;] = &quot;attribute_value&quot;; 
	
	header[&apos;REC&apos;][&apos;REC.31&apos;] = &quot;ts_when&quot;; 

	header[&apos;REC&apos;][&apos;REC.32&apos;] = &quot;workflow_state&quot;;
	
	header[&apos;REC&apos;][&apos;REC.33&apos;] = &quot;staff_first&quot;; 
	header[&apos;REC&apos;][&apos;REC.34&apos;] = &quot;staff_last&quot;;
	header[&apos;REC&apos;][&apos;REC.35&apos;] = &quot;staff_role&quot;; 
	header[&apos;REC&apos;][&apos;REC.36&apos;] = &quot;staff_intid&quot;; 

	header[&apos;REC&apos;][&apos;REC.37&apos;] = &quot;med_name&quot;; 
	header[&apos;REC&apos;][&apos;REC.38&apos;] = &quot;med_qty&quot;; 
	header[&apos;REC&apos;][&apos;REC.39&apos;] = &quot;med_path&quot;; 
	header[&apos;REC&apos;][&apos;REC.40&apos;] = &quot;med_unit&quot;; 
	header[&apos;REC&apos;][&apos;REC.41&apos;] = &quot;med_type&quot;; 

	header[&apos;REC&apos;][&apos;REC.42&apos;] = &quot;item_name&quot;; 
	header[&apos;REC&apos;][&apos;REC.43&apos;] = &quot;item_code&quot;; 
	header[&apos;REC&apos;][&apos;REC.44&apos;] = &quot;item_type&quot;; 
	header[&apos;REC&apos;][&apos;REC.45&apos;] = &quot;item_invid1&quot;;
	header[&apos;REC&apos;][&apos;REC.46&apos;] = &quot;item_invid2&quot;; 

	header[&apos;REC&apos;][&apos;REC.47&apos;] = &quot;perf_procname&quot;;
	

	return getPipeData(header);
}


// Create Record
function getRecord(record)
{
	// Create Record to be inserted in the File
	var rec = new XML(&quot;&lt;REC/&gt;&quot;);
	rec[&apos;REC&apos;][&apos;REC.1&apos;] = MRN;
	rec[&apos;REC&apos;][&apos;REC.2&apos;] = DOB;
	rec[&apos;REC&apos;][&apos;REC.3&apos;] = SEX;
	rec[&apos;REC&apos;][&apos;REC.4&apos;] = RACE;
	rec[&apos;REC&apos;][&apos;REC.5&apos;] = LANG;
	rec[&apos;REC&apos;][&apos;REC.6&apos;] = MS;
	rec[&apos;REC&apos;][&apos;REC.7&apos;] = CSN;
	rec[&apos;REC&apos;][&apos;REC.8&apos;] = record.orc91 ? record.orc91 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.9&apos;] = record.orc101 ? record.orc101 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.10&apos;] = record.orc102 ? record.orc102 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.11&apos;] = record.orc103 ? record.orc103 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.12&apos;] = record.orc111 ? record.orc111 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.13&apos;] = record.orc112 ? record.orc112 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.14&apos;] = record.orc113 ? record.orc113 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.15&apos;] = record.obr21 ? record.obr21 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.16&apos;] = record.obr31 ? record.obr31 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.17&apos;] = record.obr41 ? record.obr41 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.18&apos;] = record.obr42 ? record.obr42 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.19&apos;] = record.obr43 ? record.obr43 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.20&apos;] = record.obr71 ? record.obr71 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.21&apos;] = record.obr161 ? record.obr161 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.22&apos;] = record.obr162 ? record.obr162 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.23&apos;] = record.obr163 ? record.obr163 : &apos;&apos;;
	
	rec[&apos;REC&apos;][&apos;REC.24&apos;] = record.infotype ? record.infotype : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.25&apos;] = record.obx51 ? record.obx51 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.26&apos;] = record.obx31 ? record.obx31 : &apos;&apos;;
	
	rec[&apos;REC&apos;][&apos;REC.27&apos;] = record.attribute_group ? record.attribute_group : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.28&apos;] = record.attribute_guid ? record.attribute_guid : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.29&apos;] = record.attribute_name ? record.attribute_name : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.30&apos;] = record.attribute_value ? record.attribute_value : &apos;&apos;;

	rec[&apos;REC&apos;][&apos;REC.31&apos;] = record.ts_when ? record.ts_when : &apos;&apos;;	

	rec[&apos;REC&apos;][&apos;REC.32&apos;] =  record.workflow_state ? record.workflow_state : &apos;&apos;;
	
	rec[&apos;REC&apos;][&apos;REC.33&apos;] = record.staff_first ? record.staff_first : &apos;&apos;;  
	rec[&apos;REC&apos;][&apos;REC.34&apos;] = record.staff_last ? record.staff_last : &apos;&apos;; 
	rec[&apos;REC&apos;][&apos;REC.35&apos;] = record.staff_role ? record.staff_role : &apos;&apos;; 
	rec[&apos;REC&apos;][&apos;REC.36&apos;] = record.staff_intid ? record.staff_intid : &apos;&apos;;

	rec[&apos;REC&apos;][&apos;REC.37&apos;] = record.med_name ? record.med_name : &apos;&apos;; 
	rec[&apos;REC&apos;][&apos;REC.38&apos;] = record.med_qty ? record.med_qty : &apos;&apos;; 
	rec[&apos;REC&apos;][&apos;REC.39&apos;] = record.med_path ? record.med_path : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.40&apos;] = record.med_unit ? record.med_unit : &apos;&apos;; 
	rec[&apos;REC&apos;][&apos;REC.41&apos;] = record.med_type ? record.med_type : &apos;&apos;;

	rec[&apos;REC&apos;][&apos;REC.42&apos;] = record.item_name ? record.item_name : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.43&apos;] = record.item_code ? record.item_code : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.44&apos;] = record.item_type ? record.item_type : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.45&apos;] = record.item_invid1 ? record.item_invid1 : &apos;&apos;;
	rec[&apos;REC&apos;][&apos;REC.46&apos;] = record.item_invid2 ? record.item_invid2 : &apos;&apos;;

	rec[&apos;REC&apos;][&apos;REC.47&apos;] = record.perf_procname ? record.perf_procname : &apos;&apos;;
	//logger.info(rec);
	return getPipeData(rec);
}</string>
            </entry>
          </data>
        </step>
      </steps>
      <inboundTemplate encoding="base64"></inboundTemplate>
      <outboundTemplate encoding="base64"></outboundTemplate>
      <inboundDataType>HL7V2</inboundDataType>
      <outboundDataType>HL7V2</outboundDataType>
      <inboundProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeProperties" version="3.2.1">
        <serializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2SerializationProperties" version="3.2.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.2.1">
          <useStrictParser>false</useStrictParser>
          <useStrictValidation>false</useStrictValidation>
          <segmentDelimiter>\r</segmentDelimiter>
        </deserializationProperties>
        <batchProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2BatchProperties" version="3.2.1">
          <splitType>MSH_Segment</splitType>
          <batchScript></batchScript>
        </batchProperties>
        <responseGenerationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseGenerationProperties" version="3.2.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>
          <dateFormat>yyyyMMddHHmmss</dateFormat>
        </responseGenerationProperties>
        <responseValidationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseValidationProperties" version="3.2.1">
          <successfulACKCode>AA,CA</successfulACKCode>
          <errorACKCode>AE,CE</errorACKCode>
          <rejectedACKCode>AR,CR</rejectedACKCode>
          <validateMessageControlId>false</validateMessageControlId>
          <originalMessageControlId>Destination_Encoded</originalMessageControlId>
          <originalIdMapVariable></originalIdMapVariable>
        </responseValidationProperties>
      </inboundProperties>
      <outboundProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeProperties" version="3.2.1">
        <serializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2SerializationProperties" version="3.2.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.2.1">
          <useStrictParser>false</useStrictParser>
          <useStrictValidation>false</useStrictValidation>
          <segmentDelimiter>\r</segmentDelimiter>
        </deserializationProperties>
        <batchProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2BatchProperties" version="3.2.1">
          <splitType>MSH_Segment</splitType>
          <batchScript></batchScript>
        </batchProperties>
        <responseGenerationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseGenerationProperties" version="3.2.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>
          <dateFormat>yyyyMMddHHmmss</dateFormat>
        </responseGenerationProperties>
        <responseValidationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseValidationProperties" version="3.2.1">
          <successfulACKCode>AA,CA</successfulACKCode>
          <errorACKCode>AE,CE</errorACKCode>
          <rejectedACKCode>AR,CR</rejectedACKCode>
          <validateMessageControlId>false</validateMessageControlId>
          <originalMessageControlId>Destination_Encoded</originalMessageControlId>
          <originalIdMapVariable></originalIdMapVariable>
        </responseValidationProperties>
      </outboundProperties>
    </transformer>
    <filter version="3.2.1">
      <rules>
        <rule>
          <sequenceNumber>0</sequenceNumber>
          <name>Accept message if &quot;msg[&apos;MSH&apos;].toString()&quot; exists</name>
          <data>
            <entry>
              <string>Field</string>
              <string>msg[&apos;MSH&apos;].toString()</string>
            </entry>
            <entry>
              <string>Name</string>
              <string></string>
            </entry>
            <entry>
              <string>OriginalField</string>
              <string></string>
            </entry>
            <entry>
              <string>Equals</string>
              <string>2</string>
            </entry>
            <entry>
              <string>Values</string>
              <list/>
            </entry>
          </data>
          <type>Rule Builder</type>
          <script>if(msg[&apos;MSH&apos;].toString().length &gt; 0) {
	return true;
}
return false;</script>
          <operator>NONE</operator>
        </rule>
        <rule>
          <sequenceNumber>1</sequenceNumber>
          <name>Accept message if &quot;msg[&apos;MSH&apos;][&apos;MSH.9&apos;][&apos;MSH.9.1&apos;].toString()&quot; equals &quot;ORU&quot;</name>
          <data>
            <entry>
              <string>Field</string>
              <string>msg[&apos;MSH&apos;][&apos;MSH.9&apos;][&apos;MSH.9.1&apos;].toString()</string>
            </entry>
            <entry>
              <string>Name</string>
              <string></string>
            </entry>
            <entry>
              <string>OriginalField</string>
              <string></string>
            </entry>
            <entry>
              <string>Equals</string>
              <string>1</string>
            </entry>
            <entry>
              <string>Values</string>
              <list>
                <string>&quot;ORU&quot;</string>
              </list>
            </entry>
          </data>
          <type>Rule Builder</type>
          <script>if(msg[&apos;MSH&apos;][&apos;MSH.9&apos;][&apos;MSH.9.1&apos;].toString() == &quot;ORU&quot;) {
	return true;
}
return false;</script>
          <operator>AND</operator>
        </rule>
        <rule>
          <sequenceNumber>2</sequenceNumber>
          <name>Accept message if &quot;msg[&apos;PID&apos;].toString()&quot; exists</name>
          <data>
            <entry>
              <string>Field</string>
              <string>msg[&apos;PID&apos;].toString()</string>
            </entry>
            <entry>
              <string>Name</string>
              <string></string>
            </entry>
            <entry>
              <string>OriginalField</string>
              <string></string>
            </entry>
            <entry>
              <string>Equals</string>
              <string>2</string>
            </entry>
            <entry>
              <string>Values</string>
              <list/>
            </entry>
          </data>
          <type>Rule Builder</type>
          <script>if(msg[&apos;PID&apos;].toString().length &gt; 0) {
	return true;
}
return false;</script>
          <operator>AND</operator>
        </rule>
      </rules>
    </filter>
    <transportName>File Reader</transportName>
    <mode>SOURCE</mode>
    <enabled>true</enabled>
    <waitForPrevious>true</waitForPrevious>
  </sourceConnector>
  <destinationConnectors>
    <connector version="3.2.1">
      <metaDataId>1</metaDataId>
      <name>Destination 1</name>
      <properties class="com.mirth.connect.connectors.js.JavaScriptDispatcherProperties" version="3.2.1">
        <pluginProperties/>
        <destinationConnectorProperties version="3.2.1">
          <queueEnabled>false</queueEnabled>
          <sendFirst>false</sendFirst>
          <retryIntervalMillis>10000</retryIntervalMillis>
          <regenerateTemplate>false</regenerateTemplate>
          <retryCount>0</retryCount>
          <rotate>false</rotate>
          <includeFilterTransformer>false</includeFilterTransformer>
          <threadCount>1</threadCount>
          <validateResponse>false</validateResponse>
          <resourceIds class="linked-hash-set">
            <string>Default Resource</string>
          </resourceIds>
        </destinationConnectorProperties>
        <script>//logger.info(&quot;Completed the Transaction&quot;);</script>
      </properties>
      <transformer version="3.2.1">
        <steps/>
        <inboundTemplate encoding="base64"></inboundTemplate>
        <outboundTemplate encoding="base64"></outboundTemplate>
        <inboundDataType>HL7V2</inboundDataType>
        <outboundDataType>DELIMITED</outboundDataType>
        <inboundProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeProperties" version="3.2.1">
          <serializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2SerializationProperties" version="3.2.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.2.1">
            <useStrictParser>false</useStrictParser>
            <useStrictValidation>false</useStrictValidation>
            <segmentDelimiter>\r</segmentDelimiter>
          </deserializationProperties>
          <batchProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2BatchProperties" version="3.2.1">
            <splitType>MSH_Segment</splitType>
            <batchScript></batchScript>
          </batchProperties>
          <responseGenerationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseGenerationProperties" version="3.2.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>
            <dateFormat>yyyyMMddHHmmss</dateFormat>
          </responseGenerationProperties>
          <responseValidationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseValidationProperties" version="3.2.1">
            <successfulACKCode>AA,CA</successfulACKCode>
            <errorACKCode>AE,CE</errorACKCode>
            <rejectedACKCode>AR,CR</rejectedACKCode>
            <validateMessageControlId>false</validateMessageControlId>
            <originalMessageControlId>Destination_Encoded</originalMessageControlId>
            <originalIdMapVariable></originalIdMapVariable>
          </responseValidationProperties>
        </inboundProperties>
        <outboundProperties class="com.mirth.connect.plugins.datatypes.delimited.DelimitedDataTypeProperties" version="3.2.1">
          <serializationProperties class="com.mirth.connect.plugins.datatypes.delimited.DelimitedSerializationProperties" version="3.2.1">
            <columnDelimiter>|</columnDelimiter>
            <recordDelimiter>\n</recordDelimiter>
            <quoteChar>&quot;</quoteChar>
            <escapeWithDoubleQuote>true</escapeWithDoubleQuote>
            <quoteEscapeChar>\</quoteEscapeChar>
            <numberedRows>false</numberedRows>
            <ignoreCR>true</ignoreCR>
          </serializationProperties>
          <deserializationProperties class="com.mirth.connect.plugins.datatypes.delimited.DelimitedDeserializationProperties" version="3.2.1">
            <columnDelimiter>|</columnDelimiter>
            <recordDelimiter>\n</recordDelimiter>
            <quoteChar>&quot;</quoteChar>
            <escapeWithDoubleQuote>true</escapeWithDoubleQuote>
            <quoteEscapeChar>\</quoteEscapeChar>
          </deserializationProperties>
          <batchProperties class="com.mirth.connect.plugins.datatypes.delimited.DelimitedBatchProperties" version="3.2.1">
            <splitType>Record</splitType>
            <batchSkipRecords>0</batchSkipRecords>
            <batchMessageDelimiter></batchMessageDelimiter>
            <batchMessageDelimiterIncluded>false</batchMessageDelimiterIncluded>
            <batchGroupingColumn></batchGroupingColumn>
            <batchScript></batchScript>
          </batchProperties>
        </outboundProperties>
      </transformer>
      <responseTransformer version="3.2.1">
        <steps/>
        <inboundDataType>HL7V2</inboundDataType>
        <outboundDataType>HL7V2</outboundDataType>
        <inboundProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeProperties" version="3.2.1">
          <serializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2SerializationProperties" version="3.2.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.2.1">
            <useStrictParser>false</useStrictParser>
            <useStrictValidation>false</useStrictValidation>
            <segmentDelimiter>\r</segmentDelimiter>
          </deserializationProperties>
          <batchProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2BatchProperties" version="3.2.1">
            <splitType>MSH_Segment</splitType>
            <batchScript></batchScript>
          </batchProperties>
          <responseGenerationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseGenerationProperties" version="3.2.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>
            <dateFormat>yyyyMMddHHmmss</dateFormat>
          </responseGenerationProperties>
          <responseValidationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseValidationProperties" version="3.2.1">
            <successfulACKCode>AA,CA</successfulACKCode>
            <errorACKCode>AE,CE</errorACKCode>
            <rejectedACKCode>AR,CR</rejectedACKCode>
            <validateMessageControlId>false</validateMessageControlId>
            <originalMessageControlId>Destination_Encoded</originalMessageControlId>
            <originalIdMapVariable></originalIdMapVariable>
          </responseValidationProperties>
        </inboundProperties>
        <outboundProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeProperties" version="3.2.1">
          <serializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2SerializationProperties" version="3.2.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.2.1">
            <useStrictParser>false</useStrictParser>
            <useStrictValidation>false</useStrictValidation>
            <segmentDelimiter>\r</segmentDelimiter>
          </deserializationProperties>
          <batchProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2BatchProperties" version="3.2.1">
            <splitType>MSH_Segment</splitType>
            <batchScript></batchScript>
          </batchProperties>
          <responseGenerationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseGenerationProperties" version="3.2.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>
            <dateFormat>yyyyMMddHHmmss</dateFormat>
          </responseGenerationProperties>
          <responseValidationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseValidationProperties" version="3.2.1">
            <successfulACKCode>AA,CA</successfulACKCode>
            <errorACKCode>AE,CE</errorACKCode>
            <rejectedACKCode>AR,CR</rejectedACKCode>
            <validateMessageControlId>false</validateMessageControlId>
            <originalMessageControlId>Destination_Encoded</originalMessageControlId>
            <originalIdMapVariable></originalIdMapVariable>
          </responseValidationProperties>
        </outboundProperties>
      </responseTransformer>
      <filter version="3.2.1">
        <rules/>
      </filter>
      <transportName>JavaScript Writer</transportName>
      <mode>DESTINATION</mode>
      <enabled>true</enabled>
      <waitForPrevious>true</waitForPrevious>
    </connector>
  </destinationConnectors>
  <preprocessingScript>// Modify the message variable below to pre process data

//var fname = &quot;C://a-xfer//monfepic//testadt-output//&quot; + originalFilename + &quot;.psv&quot; ;
//var columnsout = &quot;A|B|C|D|E&quot; ;

//FileUtil.write( fname, false, columnsout);
//FileUtil.write(&quot;c:\\workspace\\mirth-test\\fixed.txt&quot;, true, &quot;Patient ID,First Name,Last Name\r\n&quot;);
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
logger.info(&quot;Deploying the Channel&quot;);
var conf = {};
var dateString = DateUtil.getCurrentDate(&apos;yyyy/MM/dd HH:mm&apos;);
conf.date = dateString;
globalChannelMap.put(&apos;old&apos;,conf);
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.2.1">
    <clearGlobalChannelMap>true</clearGlobalChannelMap>
    <messageStorageMode>DEVELOPMENT</messageStorageMode>
    <encryptData>false</encryptData>
    <removeContentOnCompletion>false</removeContentOnCompletion>
    <removeAttachmentsOnCompletion>false</removeAttachmentsOnCompletion>
    <initialState>STARTED</initialState>
    <storeAttachments>false</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>
      <type>None</type>
      <properties/>
    </attachmentProperties>
    <pruneMetaDataDays>7</pruneMetaDataDays>
    <pruneContentDays>7</pruneContentDays>
    <archiveEnabled>false</archiveEnabled>
    <resourceIds class="linked-hash-set">
      <string>Default Resource</string>
    </resourceIds>
  </properties>
</channel>