<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://vistapedia.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cmdupre</id>
	<title>VistApedia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://vistapedia.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cmdupre"/>
	<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php/Special:Contributions/Cmdupre"/>
	<updated>2026-04-04T04:54:43Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://vistapedia.com/index.php?title=Register_a_patient_via_HL7&amp;diff=10960</id>
		<title>Register a patient via HL7</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Register_a_patient_via_HL7&amp;diff=10960"/>
		<updated>2007-12-17T20:04:37Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Removed.&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=10959</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=10959"/>
		<updated>2007-07-24T16:42:57Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in utilizing VistA to provide our customers with an EHR solution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[HL7 Multi-Listener]]&lt;br /&gt;
&lt;br /&gt;
[[Register a patient via HL7]]&lt;br /&gt;
&lt;br /&gt;
[[RPC&#039;s with Visual Cpp]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Register_a_patient_via_HL7&amp;diff=5101</id>
		<title>Register a patient via HL7</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Register_a_patient_via_HL7&amp;diff=5101"/>
		<updated>2007-07-20T21:26:30Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are my site-specific routines for registering a patient via HL7 messaging:&lt;br /&gt;
&lt;br /&gt;
(the ^CHECK variable is for debugging - I am still in development/testing)&lt;br /&gt;
&lt;br /&gt;
  ; ACSPNT.m --&amp;gt; PROCESS RECEIVED HL7 MESSAGE (ADT-A31) FROM ACS COMPUMD.&lt;br /&gt;
  ;&lt;br /&gt;
  ;&lt;br /&gt;
  ; DBS CALLS:&lt;br /&gt;
  ; D FILE^DIE   REPLACES EXISTING RECORDS&lt;br /&gt;
  ; D UPDATE^DIE ADDS NEW RECORDS&lt;br /&gt;
  ;&lt;br /&gt;
  ; GLOBAL/LOCAL VARIABLES:&lt;br /&gt;
  ; PIDSEG       CURRENT MESSAGE PID SEGMENT&lt;br /&gt;
  ; PIDSEGNAME   TEMP STORAGE OF PATIENT NAME FOR FORMATTING&lt;br /&gt;
  ; INSSEG       ARRAY OF CURRENT MESSAGE IN1 SEGMENTS&lt;br /&gt;
  ; EVNSEG       EVENT SEGMENT *p2&lt;br /&gt;
  ; PNTROOT      FDA_ROOT FOR PATIENT DBS CALLS&lt;br /&gt;
  ; VALPNTROOT   VALIDATED PNTROOT&lt;br /&gt;
  ; PNTINSROOT   FDA_ROOT FOR PATIENT INSURANCE&lt;br /&gt;
  ; PNTERR       ERR MESSAGES FROM PATIENT DBS CALL&lt;br /&gt;
  ; VALERR       ERR MESSAGES FROM VALIDATION CALL&lt;br /&gt;
  ; INSCOUNT     COUNTER FOR INSURANCE ARRAY&lt;br /&gt;
  ; FDAIEN       INTERNAL ENTRY NUMBER DERRIVED FROM PATIENT NUMBER&lt;br /&gt;
  ; FINDERR      ERR MESSAGES FROM FIND^DIC CALL&lt;br /&gt;
  ; SEG          TEMP STORAGE FOR EACH MESSAGE SEGMENT&lt;br /&gt;
  ; HLMSG        MESSAGE CONTROL FOR $$STARTMSG^HLPRS&lt;br /&gt;
  ; HLMTIENS     CURENT MESSAGE RECEIVED&lt;br /&gt;
  ; HEADER       CURRENT MESSAGE HEADER&lt;br /&gt;
  ; RESULT       RETURNED ARRAY FROM FIND^DIC&lt;br /&gt;
  ; SSNRESULT    RESULT OF SOCIAL SECURITY SEARCH&lt;br /&gt;
  ; SSNFINDERR   ERR MESSAGES FROM SOCIAL SECURITY SEARCH&lt;br /&gt;
  ; SSNFOUND     FLAG SET IF SOCIAL SECURITY NUMBER FOUND IN DATABASE&lt;br /&gt;
  ; SSNIEN       IEN OF PATIENT WHERE SSN FOUND *p1&lt;br /&gt;
  ; VALFLAG      SET IF VAL FAILS&lt;br /&gt;
  ; ^ACSERR      LOGFILE FOR VALIDATION ERRORS&lt;br /&gt;
  ; ERRDATE      DATE FOR ERR MESSAGE LOG&lt;br /&gt;
  ; ^CHECK       TEMP STORAGE FOR ERROR MESSAGES&lt;br /&gt;
  ;&lt;br /&gt;
  ; COMMENTS:&lt;br /&gt;
  ; ;)           TEMPORARY COMMENT/LINE OF CODE&lt;br /&gt;
  ;&lt;br /&gt;
  ; FILEMAN FILES:&lt;br /&gt;
  ; ^DPT         PATIENT     (#2)&lt;br /&gt;
  ;&lt;br /&gt;
  ; last update 7.05.2007 0847&lt;br /&gt;
  ; *p1 added 6.26.2007 to account for ssn being reset on filing existing patient information&lt;br /&gt;
  ; *p2 added 7.02.2007 for coordinating deletion of patient with billing system&lt;br /&gt;
  ; *p3 added 7.05.2007 to change month name to a number for sorting err message&lt;br /&gt;
  ;&lt;br /&gt;
 EN  ;entry point, init&lt;br /&gt;
  N ERRDATE&lt;br /&gt;
  N FDAIEN&lt;br /&gt;
  N HLMSG,HEADER,SEG&lt;br /&gt;
  N PIDSEG,PNTROOT,PNTERR,PIDSEGNAME&lt;br /&gt;
  N INSCOUNT,INSSEG&lt;br /&gt;
  N RESULT,FINDERR&lt;br /&gt;
  N SSNRESULT,SSNFINDERR,SSNFOUND,SSNIEN&lt;br /&gt;
  N VALPNTROOT,VALFLAG,VALERR&lt;br /&gt;
  K ^CHECK&lt;br /&gt;
  S VALFLAG=0&lt;br /&gt;
  S SSNIEN=0&lt;br /&gt;
  S ^CHECK(&amp;quot;0BEGIN&amp;quot;)=&amp;quot;VERSION 4.5 - START&amp;quot; ;)&lt;br /&gt;
  S SSNFOUND=0 ;set ssn found flag to false&lt;br /&gt;
  S DUZ=1,DUZ(0)=&amp;quot;@&amp;quot; ;initialize user number and give programmer access to files&lt;br /&gt;
  ;set current d/t&lt;br /&gt;
  N TEMPDATE&lt;br /&gt;
  D DT^DILF(&amp;quot;ERSX&amp;quot;,&amp;quot;NOW&amp;quot;,.TEMPDATE)&lt;br /&gt;
  S ERRDATE=TEMPDATE(0)&lt;br /&gt;
  D MODERRDATE ;*p3&lt;br /&gt;
  K TEMPDATE&lt;br /&gt;
 GETHEADER   ;&lt;br /&gt;
  ;&lt;br /&gt;
  ;get received message header using HLMTIENS(last message received)&lt;br /&gt;
  I $$STARTMSG^HLPRS(.HLMSG,HLMTIENS,.HEADER) G GETSEGMENT&lt;br /&gt;
  ;&lt;br /&gt;
  ;Fall through if message not found&lt;br /&gt;
  S ^ACSERR(ERRDATE,&amp;quot;ACSPNT&amp;quot;,&amp;quot;ERR&amp;quot;)=&amp;quot;** Message Not Found (IEN &amp;quot;_HLMTIENS_&amp;quot;) **&amp;quot;&lt;br /&gt;
  G REXIT ;clean-up and quit this routine&lt;br /&gt;
 GETSEGMENT  ;&lt;br /&gt;
  ;loop through segments&lt;br /&gt;
  S ^CHECK(&amp;quot;0HLMTIENS&amp;quot;)=HLMTIENS ;)&lt;br /&gt;
  S INSCOUNT=0;&lt;br /&gt;
  F  Q:&#039;$$NEXTSEG^HLPRS(.HLMSG,.SEG)  D&lt;br /&gt;
  . I SEG(&amp;quot;SEGMENT TYPE&amp;quot;)=&amp;quot;EVN&amp;quot; ;save EVN segment&lt;br /&gt;
  . I  S EVNSEG(&amp;quot;TYPE&amp;quot;)=$$GET^HLOPRS(.SEG,1)&lt;br /&gt;
  . I SEG(&amp;quot;SEGMENT TYPE&amp;quot;)=&amp;quot;PID&amp;quot; ;save PID segment&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;NO&amp;quot;)=$$GET^HLOPRS(.SEG,3)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;LNAME&amp;quot;)=$$GET^HLOPRS(.SEG,5)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;FNAME&amp;quot;)=$$GET^HLOPRS(.SEG,5,2)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;MI&amp;quot;)=$$GET^HLOPRS(.SEG,5,3)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;REM&amp;quot;)=$$GET^HLOPRS(.SEG,6)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;DOB&amp;quot;)=$$GET^HLOPRS(.SEG,7)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;SEX&amp;quot;)=$$GET^HLOPRS(.SEG,8)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;ADDR1&amp;quot;)=$$GET^HLOPRS(.SEG,11)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;ADDR2&amp;quot;)=$$GET^HLOPRS(.SEG,11,2)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;CITY&amp;quot;)=$$GET^HLOPRS(.SEG,11,3)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;STATE&amp;quot;)=$$GET^HLOPRS(.SEG,11,4)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;ZIP&amp;quot;)=$$GET^HLOPRS(.SEG,11,5)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;HPHONE&amp;quot;)=$$GET^HLOPRS(.SEG,13)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;EMAIL&amp;quot;)=$$GET^HLOPRS(.SEG,13,4)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;WPHONE&amp;quot;)=$$GET^HLOPRS(.SEG,14)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;SSN&amp;quot;)=$$GET^HLOPRS(.SEG,19)&lt;br /&gt;
  . I SEG(&amp;quot;SEGMENT TYPE&amp;quot;)=&amp;quot;IN1&amp;quot; ;save INS segments&lt;br /&gt;
  . I  ;S INSSEG(INSCOUNT,&amp;quot;PLAN&amp;quot;)=$$GET^HLOPRS(.SEG,2) ;same as INS section&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;INS&amp;quot;)=$$GET^HLOPRS(.SEG,3)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;NAME&amp;quot;)=$$GET^HLOPRS(.SEG,4)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;ADDR1&amp;quot;)=$$GET^HLOPRS(.SEG,5)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;ADDR2&amp;quot;)=$$GET^HLOPRS(.SEG,5,2)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;CITY&amp;quot;)=$$GET^HLOPRS(.SEG,5,3)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;STATE&amp;quot;)=$$GET^HLOPRS(.SEG,5,4)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;ZIP&amp;quot;)=$$GET^HLOPRS(.SEG,5,5)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;PHONE&amp;quot;)=$$GET^HLOPRS(.SEG,7)&lt;br /&gt;
  . I  ;S INSSEG(INSCOUNT,&amp;quot;GRP&amp;quot;)=$$GET^HLOPRS(.SEG,8)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;NOIL&amp;quot;)=$$GET^HLOPRS(.SEG,16)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;NOIF&amp;quot;)=$$GET^HLOPRS(.SEG,16,2)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;NOIM&amp;quot;)=$$GET^HLOPRS(.SEG,16,3)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;REL&amp;quot;)=$$GET^HLOPRS(.SEG,17)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;POL&amp;quot;)=$$GET^HLOPRS(.SEG,36)&lt;br /&gt;
  . I  S INSCOUNT=INSCOUNT+1&lt;br /&gt;
  S INSCOUNT=INSCOUNT-1&lt;br /&gt;
  ;all validation performed on cobol side with exception of SSN.&lt;br /&gt;
  ;convert DOB from yyyymmdd to mmddyyyy&lt;br /&gt;
  S PIDSEG(&amp;quot;DOB&amp;quot;)=$E(PIDSEG(&amp;quot;DOB&amp;quot;),5,8)_$E(PIDSEG(&amp;quot;DOB&amp;quot;),1,4)&lt;br /&gt;
  ;set PIDSEGNAME format&lt;br /&gt;
  S PIDSEGNAME=$G(PIDSEG(&amp;quot;LNAME&amp;quot;))_&amp;quot;,&amp;quot;_$G(PIDSEG(&amp;quot;FNAME&amp;quot;))&lt;br /&gt;
  I $G(PIDSEG(&amp;quot;MI&amp;quot;))&#039;=&amp;quot;&amp;quot; S PIDSEGNAME=PIDSEGNAME_&amp;quot; &amp;quot;_PIDSEG(&amp;quot;MI&amp;quot;) ;if midinit exists, append to name&lt;br /&gt;
  ;set INSSEGNOI format and convert relationship code&lt;br /&gt;
  N COUNT,TEMP&lt;br /&gt;
  S COUNT=0&lt;br /&gt;
  S TEMP=&amp;quot;&amp;quot;&lt;br /&gt;
  F  Q:COUNT&amp;gt;INSCOUNT  D&lt;br /&gt;
  . S INSSEG(COUNT,&amp;quot;NOI&amp;quot;)=$G(INSSEG(COUNT,&amp;quot;NOIL&amp;quot;))_&amp;quot;,&amp;quot;_$G(INSSEG(COUNT,&amp;quot;NOIF&amp;quot;))&lt;br /&gt;
  . I $G(INSSEG(COUNT,&amp;quot;NOIM&amp;quot;))&#039;=&amp;quot;&amp;quot; S INSSEG(COUNT,&amp;quot;NOI&amp;quot;)=INSSEG(COUNT,&amp;quot;NOI&amp;quot;)_&amp;quot; &amp;quot;_INSSEG(COUNT,&amp;quot;NOIM&amp;quot;)&lt;br /&gt;
  . I INSSEG(COUNT,&amp;quot;REL&amp;quot;)=&amp;quot;0&amp;quot; S TEMP=&amp;quot;PATIENT&amp;quot;&lt;br /&gt;
  . I INSSEG(COUNT,&amp;quot;REL&amp;quot;)=&amp;quot;1&amp;quot; S TEMP=&amp;quot;SPOUSE&amp;quot;&lt;br /&gt;
  . I INSSEG(COUNT,&amp;quot;REL&amp;quot;)=&amp;quot;2&amp;quot; S TEMP=&amp;quot;NATURAL CHILD&amp;quot;&lt;br /&gt;
  . I TEMP=&amp;quot;&amp;quot; S TEMP=&amp;quot;DO NOT USE&amp;quot;&lt;br /&gt;
  . S INSSEG(COUNT,&amp;quot;REL&amp;quot;)=TEMP&lt;br /&gt;
  . S TEMP=&amp;quot;&amp;quot;&lt;br /&gt;
  . S COUNT=COUNT+1&lt;br /&gt;
  K COUNT,TEMP&lt;br /&gt;
  M ^CHECK(&amp;quot;1PATIENTINFO&amp;quot;)=PIDSEG ;)&lt;br /&gt;
  M ^CHECK(&amp;quot;1INSURANCE&amp;quot;)=INSSEG ;)&lt;br /&gt;
  M ^CHECK(&amp;quot;1EVENT&amp;quot;)=EVNSEG ;)&lt;br /&gt;
  I EVNSEG(&amp;quot;TYPE&amp;quot;)=&amp;quot;A29&amp;quot; ;*p2 delete message received &lt;br /&gt;
  I  D DELETEPAT&lt;br /&gt;
  I  G REXIT&lt;br /&gt;
  D EN^ACSPNT2 ;do insurance company processing&lt;br /&gt;
  I VALFLAG G REXIT ;if validation fails in ACSPNT2, quit&lt;br /&gt;
  ;&lt;br /&gt;
  ;&lt;br /&gt;
 PROCESSPATIENT  ;&lt;br /&gt;
  ;)FIND^DIC(FILE,IENS,FIELDS,FLAGS,[.]VALUE,NUMBER,[.]INDEXES,[.]SCREEN,IDENTIFIER,TARGET_ROOT,MSG_ROOT)&lt;br /&gt;
  ;)finds ACS patient number in ^DPT : Patient File (#2)&lt;br /&gt;
  ;)RETURNED VALUES&lt;br /&gt;
  ;) List ^FOUND&lt;br /&gt;
  ;) ^FOUND(&amp;quot;DILIST&amp;quot;,0)=&amp;quot;1^*^0^&amp;quot;  &amp;lt;--1ST NUMBER IS HOW MANY FOUND (0 OR 1)&lt;br /&gt;
  ;) ^FOUND(&amp;quot;DILIST&amp;quot;,2,1)=1       &amp;lt;--IEN&lt;br /&gt;
  ;)USE THIS TO ADD NEW PATIENT WITH ACSPATNO (CROSS REF IEN)&lt;br /&gt;
  ;)S ^DPT(&amp;quot;ACSPATNO&amp;quot;,(patient number from acs),1)=&amp;quot;&amp;quot; &amp;lt;--1 EQUALS IEN&lt;br /&gt;
  ;&lt;br /&gt;
  I PIDSEG(&amp;quot;SSN&amp;quot;)&#039;?9N S PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;&amp;quot; ;if ssn is != to pattern (9 numbers), set to &amp;quot;&amp;quot;&lt;br /&gt;
  E  D FIND^DIC(2,,&amp;quot;@&amp;quot;,&amp;quot;X&amp;quot;,PIDSEG(&amp;quot;SSN&amp;quot;),,&amp;quot;SSN&amp;quot;,,,&amp;quot;SSNRESULT&amp;quot;,&amp;quot;SSNFINDERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;2SSNRESULT&amp;quot;)=SSNRESULT ;)&lt;br /&gt;
  M ^CHECK(&amp;quot;2SSNFINDERR&amp;quot;)=SSNFINDERR ;)&lt;br /&gt;
  I PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;&amp;quot; S PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;@&amp;quot; G CHECKACSPATNO ;if ssn blank, set to &amp;quot;@&amp;quot;&lt;br /&gt;
  I $P(SSNRESULT(&amp;quot;DILIST&amp;quot;,0),&amp;quot;^&amp;quot;,1)&#039;=0 S SSNFOUND=1 ;if found ssn, set ssn found flag to true&lt;br /&gt;
  I  S SSNIEN=SSNRESULT(&amp;quot;DILIST&amp;quot;,2,1) ;*p1&lt;br /&gt;
  S ^CHECK(&amp;quot;2SSNFLAG&amp;quot;)=SSNFOUND ;)&lt;br /&gt;
 CHECKACSPATNO   ;&lt;br /&gt;
  M ^CHECK(&amp;quot;3PROCESSEDSSN&amp;quot;)=PIDSEG(&amp;quot;SSN&amp;quot;) ;)&lt;br /&gt;
  D FIND^DIC(2,,&amp;quot;@&amp;quot;,&amp;quot;X&amp;quot;,PIDSEG(&amp;quot;NO&amp;quot;),,&amp;quot;ACSPATNO&amp;quot;,,,&amp;quot;RESULT&amp;quot;,&amp;quot;FINDERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;4FINDERR&amp;quot;)=FINDERR ;)&lt;br /&gt;
  M ^CHECK(&amp;quot;4FINDRESULT&amp;quot;)=RESULT ;)&lt;br /&gt;
  I $P(RESULT(&amp;quot;DILIST&amp;quot;,0),&amp;quot;^&amp;quot;,1)=0 G DOUPDATEDIE ;if no entries for ACSPATNO found, go to update (add)&lt;br /&gt;
  ;fall through for found entry&lt;br /&gt;
  ;&lt;br /&gt;
  ;&lt;br /&gt;
 DOFILEDIE   ;&lt;br /&gt;
  ;set fields using $GET ($G) to avoid &#039;variable undefined&#039; error&lt;br /&gt;
  N TEMPIEN&lt;br /&gt;
  S TEMPIEN=RESULT(&amp;quot;DILIST&amp;quot;,2,1)&lt;br /&gt;
  S FDAIEN=RESULT(&amp;quot;DILIST&amp;quot;,2,1)_&amp;quot;,&amp;quot; ;set IEN from returned array plus comma&lt;br /&gt;
  I TEMPIEN=SSNIEN G DOFILEDIENEXT ;*p1&lt;br /&gt;
  I SSNFOUND S PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;@&amp;quot; ;if ssn exists in database, set ssn to @ to avoid duplicate ssn error on add new entry&lt;br /&gt;
 DOFILEDIENEXT   ;*p1&lt;br /&gt;
  I PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;@&amp;quot; S PNTROOT(2,FDAIEN,.363)=&amp;quot;--&amp;quot;&lt;br /&gt;
  I  S PNTROOT(2,FDAIEN,.364)=&amp;quot;&amp;quot;&lt;br /&gt;
  I &#039;SSNFOUND S PNTROOT(2,FDAIEN,.363)=PIDSEG(&amp;quot;SSN&amp;quot;)&lt;br /&gt;
  I  S PNTROOT(2,FDAIEN,.364)=$E(PIDSEG(&amp;quot;SSN&amp;quot;),6,9)&lt;br /&gt;
  I  S PNTROOT(2,FDAIEN,.09)=PIDSEG(&amp;quot;SSN&amp;quot;)&lt;br /&gt;
  K TEMPIEN&lt;br /&gt;
  S ^CHECK(&amp;quot;5FILEIEN&amp;quot;)=FDAIEN ;)&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.01)=PIDSEGNAME&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.091)=$G(PIDSEG(&amp;quot;REM&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.03)=$G(PIDSEG(&amp;quot;DOB&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.02)=$G(PIDSEG(&amp;quot;SEX&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.301)=&amp;quot;NO&amp;quot;&lt;br /&gt;
  S PNTROOT(2,FDAIEN,391)=&amp;quot;NON-VETERAN (OTHER)&amp;quot;&lt;br /&gt;
  S PNTROOT(2,FDAIEN,1901)=&amp;quot;NO&amp;quot;&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.111)=$G(PIDSEG(&amp;quot;ADDR1&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.112)=$G(PIDSEG(&amp;quot;ADDR2&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.114)=$G(PIDSEG(&amp;quot;CITY&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.115)=$G(PIDSEG(&amp;quot;STATE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.116)=$G(PIDSEG(&amp;quot;ZIP&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.131)=$G(PIDSEG(&amp;quot;HPHONE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.132)=$G(PIDSEG(&amp;quot;WPHONE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.133)=$G(PIDSEG(&amp;quot;EMAIL&amp;quot;))&lt;br /&gt;
  S FDAIEN=RESULT(&amp;quot;DILIST&amp;quot;,2,1) ;set IEN from returned array minus comma&lt;br /&gt;
  S ^CHECK(&amp;quot;5FILEIEN2&amp;quot;)=FDAIEN ;)&lt;br /&gt;
  ;do validation&lt;br /&gt;
  D VALS^DIE(&amp;quot;&amp;quot;,&amp;quot;PNTROOT&amp;quot;,&amp;quot;VALPNTROOT&amp;quot;,&amp;quot;VALERR&amp;quot;)&lt;br /&gt;
  N INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  S INDEX=&amp;quot;&amp;quot;&lt;br /&gt;
  S ERRCOUNT=1&lt;br /&gt;
  F  S INDEX=$O(VALPNTROOT(2,FDAIEN_&amp;quot;,&amp;quot;,INDEX)) Q:INDEX=&amp;quot;&amp;quot;  D&lt;br /&gt;
  . I VALPNTROOT(2,FDAIEN_&amp;quot;,&amp;quot;,INDEX)=&amp;quot;^&amp;quot; S ERRNUM=$P(VALERR(&amp;quot;DIERR&amp;quot;),&amp;quot;^&amp;quot;,1)&lt;br /&gt;
  . I  S ^ACSERR(ERRDATE,&amp;quot;ACSPNT&amp;quot;,&amp;quot;FILE ERRNUM&amp;quot;)=ERRNUM&lt;br /&gt;
  . I  D LOGERR&lt;br /&gt;
  . I  Q&lt;br /&gt;
  K INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  ;&lt;br /&gt;
  ;begin file locks&lt;br /&gt;
 FILELOCKDPT ;&lt;br /&gt;
  L +^DPT(FDAIEN):1 ;try lock&lt;br /&gt;
  I $T G DOFILEDIEFILER ;if lock, continue&lt;br /&gt;
  E  G FILELOCKDPT ;if lock fails, keep trying&lt;br /&gt;
  ;end locks&lt;br /&gt;
  ;&lt;br /&gt;
 DOFILEDIEFILER  ;&lt;br /&gt;
  D FILE^DIE(&amp;quot;S&amp;quot;,&amp;quot;VALPNTROOT&amp;quot;,&amp;quot;PNTERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;5FILE&amp;quot;)=PNTERR ;)&lt;br /&gt;
  ;delete previously saved insurances&lt;br /&gt;
  N COUNT,DELROOT,DELIEN&lt;br /&gt;
  S COUNT=1&lt;br /&gt;
  F  Q:COUNT&amp;gt;5  D&lt;br /&gt;
  . S DELIEN=COUNT_&amp;quot;,&amp;quot;_FDAIEN_&amp;quot;,&amp;quot;&lt;br /&gt;
  . S DELROOT(2.312,DELIEN,.01)=&amp;quot;@&amp;quot;&lt;br /&gt;
  . D FILE^DIE(&amp;quot;E&amp;quot;,&amp;quot;DELROOT&amp;quot;)&lt;br /&gt;
  . S COUNT=COUNT+1&lt;br /&gt;
  K COUNT,DELROOT,DELIEN&lt;br /&gt;
  ;add current insurances from message&lt;br /&gt;
  N COUNT,ADDROOT,ADDIEN&lt;br /&gt;
  S COUNT=0&lt;br /&gt;
  F  Q:COUNT&amp;gt;INSCOUNT  D&lt;br /&gt;
  . S ADDIEN=&amp;quot;?+1,&amp;quot;_FDAIEN_&amp;quot;,&amp;quot;&lt;br /&gt;
  . S ADDROOT(2.312,ADDIEN,.01)=INSSEG(COUNT,&amp;quot;NAME&amp;quot;)&lt;br /&gt;
  . S ADDROOT(2.312,ADDIEN,17)=INSSEG(COUNT,&amp;quot;NOI&amp;quot;)&lt;br /&gt;
  . S ADDROOT(2.312,ADDIEN,16)=INSSEG(COUNT,&amp;quot;REL&amp;quot;)&lt;br /&gt;
  . S ADDROOT(2.312,ADDIEN,1)=INSSEG(COUNT,&amp;quot;POL&amp;quot;)&lt;br /&gt;
  . D UPDATE^DIE(&amp;quot;E&amp;quot;,&amp;quot;ADDROOT&amp;quot;)&lt;br /&gt;
  . S COUNT=COUNT+1&lt;br /&gt;
  K COUNT,ADDROOT,ADDIEN&lt;br /&gt;
  ;unlock file&lt;br /&gt;
  L -^DPT(FDAIEN)&lt;br /&gt;
  S ^ACSERR(ERRDATE,&amp;quot;FILER  COMPLETE&amp;quot;)=&amp;quot;(&amp;quot;_PIDSEG(&amp;quot;NO&amp;quot;)_&amp;quot;)&amp;quot;_PIDSEGNAME ;)&lt;br /&gt;
  G REXIT ;clean-up and quit this routine&lt;br /&gt;
  ;&lt;br /&gt;
 DOUPDATEDIE ;&lt;br /&gt;
  ;set fields using $GET ($G) to avoid &#039;variable undefined&#039; error&lt;br /&gt;
  I SSNFOUND S PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;@&amp;quot; ;if ssn exists in database, set ssn to @ to avoid duplicate ssn error on add new entry&lt;br /&gt;
  E  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.363)=PIDSEG(&amp;quot;SSN&amp;quot;)&lt;br /&gt;
  E  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.364)=$E(PIDSEG(&amp;quot;SSN&amp;quot;),6,9)&lt;br /&gt;
  E  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.09)=PIDSEG(&amp;quot;SSN&amp;quot;)&lt;br /&gt;
  I PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;@&amp;quot; S PNTROOT(2,&amp;quot;+1,&amp;quot;,.363)=&amp;quot;--&amp;quot;&lt;br /&gt;
  I  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.364)=&amp;quot;&amp;quot;&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.01)=$G(PIDSEGNAME)&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.091)=$G(PIDSEG(&amp;quot;REM&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.03)=$G(PIDSEG(&amp;quot;DOB&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.02)=$G(PIDSEG(&amp;quot;SEX&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.301)=&amp;quot;NO&amp;quot;&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,391)=&amp;quot;NON-VETERAN (OTHER)&amp;quot;&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,1901)=&amp;quot;NO&amp;quot;&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.111)=$G(PIDSEG(&amp;quot;ADDR1&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.112)=$G(PIDSEG(&amp;quot;ADDR2&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.114)=$G(PIDSEG(&amp;quot;CITY&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.115)=$G(PIDSEG(&amp;quot;STATE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.116)=$G(PIDSEG(&amp;quot;ZIP&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.131)=$G(PIDSEG(&amp;quot;HPHONE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.132)=$G(PIDSEG(&amp;quot;WPHONE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.133)=$G(PIDSEG(&amp;quot;EMAIL&amp;quot;))&lt;br /&gt;
  ;do validation&lt;br /&gt;
  D VALS^DIE(&amp;quot;&amp;quot;,&amp;quot;PNTROOT&amp;quot;,&amp;quot;VALPNTROOT&amp;quot;,&amp;quot;VALERR&amp;quot;)&lt;br /&gt;
  N INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  S INDEX=&amp;quot;&amp;quot;&lt;br /&gt;
  S ERRCOUNT=1&lt;br /&gt;
  F  S INDEX=$O(VALPNTROOT(2,&amp;quot;+1,&amp;quot;,INDEX)) Q:INDEX=&amp;quot;&amp;quot;  D&lt;br /&gt;
  . I VALPNTROOT(2,&amp;quot;+1,&amp;quot;,INDEX)=&amp;quot;^&amp;quot; S ERRNUM=$P(VALERR(&amp;quot;DIERR&amp;quot;),&amp;quot;^&amp;quot;,1)&lt;br /&gt;
  . I  S ^ACSERR(ERRDATE,&amp;quot;ACSPNT&amp;quot;,&amp;quot;UPDATE ERRNUM&amp;quot;)=ERRNUM&lt;br /&gt;
  . I  D LOGERR&lt;br /&gt;
  . I  S VALFLAG=1&lt;br /&gt;
  . I  Q&lt;br /&gt;
  K INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  I VALFLAG G REXIT ;QUIT IF VALIDATION FAILS&lt;br /&gt;
  ;&lt;br /&gt;
 DOUPDATEDIEFILER    ;&lt;br /&gt;
  S PNTERR(&amp;quot;DIERR&amp;quot;)=&amp;quot;&amp;quot;&lt;br /&gt;
  D UPDATE^DIE(&amp;quot;S&amp;quot;,&amp;quot;VALPNTROOT&amp;quot;,&amp;quot;FDAIEN&amp;quot;,&amp;quot;PNTERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;6UPDATEIEN&amp;quot;)=FDAIEN ;)&lt;br /&gt;
  I $G(FDAIEN(1))&#039;=&amp;quot;&amp;quot; S ^DPT(&amp;quot;ACSPATNO&amp;quot;,PIDSEG(&amp;quot;NO&amp;quot;),FDAIEN(1))=&amp;quot;&amp;quot; ;set up my cross-reference&lt;br /&gt;
  M ^CHECK(&amp;quot;6UPDATE&amp;quot;)=PNTERR ;)&lt;br /&gt;
  ;FILE HEALTH RECORD NUMBER&lt;br /&gt;
  I $G(FDAIEN(1))&#039;=&amp;quot;&amp;quot; D EN^ACSPNT3&lt;br /&gt;
  ;ADD insurance to new patient&lt;br /&gt;
  S ^DPT(FDAIEN(1),.312,&amp;quot;?+&amp;quot;,0)=&amp;quot;&amp;quot; ;avoid getting error message of var not found when setting policy number for insurance&lt;br /&gt;
  N COUNT&lt;br /&gt;
  S COUNT=0&lt;br /&gt;
  N PNTINSIEN,VALPNTINSROOT,PNTINSROOT&lt;br /&gt;
  F  Q:COUNT&amp;gt;INSCOUNT  D&lt;br /&gt;
  . S PNTINSIEN=&amp;quot;?+1,&amp;quot;_FDAIEN(1)_&amp;quot;,&amp;quot;&lt;br /&gt;
  . S PNTINSROOT(2.312,PNTINSIEN,.01)=INSSEG(COUNT,&amp;quot;NAME&amp;quot;)&lt;br /&gt;
  . S PNTINSROOT(2.312,PNTINSIEN,17)=INSSEG(COUNT,&amp;quot;NOI&amp;quot;)&lt;br /&gt;
  . S PNTINSROOT(2.312,PNTINSIEN,16)=INSSEG(COUNT,&amp;quot;REL&amp;quot;)&lt;br /&gt;
  . S PNTINSROOT(2.312,PNTINSIEN,1)=INSSEG(COUNT,&amp;quot;POL&amp;quot;)&lt;br /&gt;
  . ;D VALS^DIE(&amp;quot;&amp;quot;,&amp;quot;PNTINSROOT&amp;quot;,&amp;quot;VALPNTINSROOT&amp;quot;,&amp;quot;VALERR&amp;quot;)&lt;br /&gt;
  . D UPDATE^DIE(&amp;quot;E&amp;quot;,&amp;quot;PNTINSROOT&amp;quot;) ;SET TO VALPNTINSROOT IF USING VAL^DIE AND TAKE OUT &amp;quot;E&amp;quot; FLAG&lt;br /&gt;
  . S COUNT=COUNT+1&lt;br /&gt;
  K PNTINSIEN,VALPNTINSROOT,PNTINSROOT&lt;br /&gt;
  K COUNT&lt;br /&gt;
  S ^ACSERR(ERRDATE,&amp;quot;UPDATE COMPLETE&amp;quot;)=&amp;quot;(&amp;quot;_PIDSEG(&amp;quot;NO&amp;quot;)_&amp;quot;)&amp;quot;_PIDSEGNAME ;)&lt;br /&gt;
  G REXIT ;clean-up and quit routine&lt;br /&gt;
  ;&lt;br /&gt;
 REXIT   ;&lt;br /&gt;
  K ERRDATE&lt;br /&gt;
  K HLMSG,HEADER,SEG,FDAIEN&lt;br /&gt;
  K PIDSEG,PNTROOT,PNTERR,PIDSEGNAME&lt;br /&gt;
  K INSCOUNT,INSSEG&lt;br /&gt;
  K RESULT,FINDERR&lt;br /&gt;
  K SSNRESULT,SSNFINDERR,SSNFOUND,SSNIEN&lt;br /&gt;
  K VALPNTROOT,VALFLAG,VALERR&lt;br /&gt;
  S ^CHECK(&amp;quot;9END&amp;quot;)=&amp;quot;VERSION 4.5   - COMPLETE&amp;quot; ;)&lt;br /&gt;
  Q&lt;br /&gt;
  ;&lt;br /&gt;
 LOGERR  ;&lt;br /&gt;
  F  Q:ERRCOUNT&amp;gt;ERRNUM  D&lt;br /&gt;
  . M ^ACSERR(ERRDATE,&amp;quot;ERR TEXT&amp;quot;)=VALERR(&amp;quot;DIERR&amp;quot;,ERRCOUNT,&amp;quot;TEXT&amp;quot;)&lt;br /&gt;
  . S ERRCOUNT=ERRCOUNT+1&lt;br /&gt;
  Q&lt;br /&gt;
  ;&lt;br /&gt;
 DELETEPAT	;*p2&lt;br /&gt;
  D FIND^DIC(2,,&amp;quot;@&amp;quot;,&amp;quot;X&amp;quot;,PIDSEG(&amp;quot;NO&amp;quot;),,&amp;quot;ACSPATNO&amp;quot;,,,&amp;quot;RESULT&amp;quot;,&amp;quot;FINDERR&amp;quot;)&lt;br /&gt;
  I $P(RESULT(&amp;quot;DILIST&amp;quot;,0),&amp;quot;^&amp;quot;,1)=0 G DELETENOTFOUND&lt;br /&gt;
  N DELIEN,DELIEN2&lt;br /&gt;
  S DELIEN=RESULT(&amp;quot;DILIST&amp;quot;,2,1) ;patient IEN from matched ACSPATNO&lt;br /&gt;
  S DELIEN2=DELIEN&lt;br /&gt;
 DELETELOCK	;&lt;br /&gt;
  L +^DPT(DELIEN2):1 ;try lock&lt;br /&gt;
  I $T G DODELETE ;if lock, continue&lt;br /&gt;
  E  G DELETELOCK ;if lock fails, keep trying&lt;br /&gt;
 DODELETE	;&lt;br /&gt;
  S DELIEN=DELIEN_&amp;quot;,&amp;quot;&lt;br /&gt;
  S PNTROOT(2,DELIEN,.09)=&amp;quot;@&amp;quot;&lt;br /&gt;
  S PNTROOT(2,DELIEN,.363)=&amp;quot;--&amp;quot;&lt;br /&gt;
  S PNTROOT(2,DELIEN,.364)=&amp;quot;&amp;quot;&lt;br /&gt;
  D FILE^DIE(&amp;quot;&amp;quot;,&amp;quot;PNTROOT&amp;quot;) ;delete SSN from patient&lt;br /&gt;
  L -^DPT(DELIEN2)&lt;br /&gt;
  K PNTROOT&lt;br /&gt;
 DELETELOCK2	;&lt;br /&gt;
  L +^AUPNPAT(DELIEN2):1&lt;br /&gt;
  I $T G DODELETE2&lt;br /&gt;
  E  G DELETELOCK2&lt;br /&gt;
 DODELETE2	;&lt;br /&gt;
  S DELIEN=DUZ(2)_&amp;quot;,&amp;quot;_DELIEN&lt;br /&gt;
  S PNTROOT(9000001.41,DELIEN,.02)=&amp;quot;d&amp;quot;_PIDSEG(&amp;quot;NO&amp;quot;)&lt;br /&gt;
  D FILE^DIE(&amp;quot;&amp;quot;,&amp;quot;PNTROOT&amp;quot;) ;change HRN to begin with a &amp;quot;d&amp;quot;&lt;br /&gt;
  L -^AUPNPAT(DELIEN2)&lt;br /&gt;
  K ^DPT(&amp;quot;ACSPATNO&amp;quot;,PIDSEG(&amp;quot;NO&amp;quot;)) ;KILL xREF!!&lt;br /&gt;
  S ^ACSERR(ERRDATE,&amp;quot;DELETE COMPLETE&amp;quot;)=&amp;quot;(&amp;quot;_PIDSEG(&amp;quot;NO&amp;quot;)_&amp;quot;)&amp;quot;_PIDSEGNAME ;)&lt;br /&gt;
  K DELIEN,DELIEN2&lt;br /&gt;
  Q&lt;br /&gt;
 DELETENOTFOUND	;&lt;br /&gt;
  S ^ACSERR(ERRDATE,&amp;quot;DELETE COMPLETE&amp;quot;)=&amp;quot;PATIENT NOT FOUND (&amp;quot;_PIDSEG(&amp;quot;NO&amp;quot;)_&amp;quot;)&amp;quot;_PIDSEGNAME ;)&lt;br /&gt;
  Q&lt;br /&gt;
 MODERRDATE	;*p3&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;JAN&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;01&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;FEB&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;02&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;MAR&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;03&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;APR&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;04&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;MAY&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;05&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;JUN&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;06&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;JUL&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;07&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;AUG&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;08&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;SEP&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;09&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;OCT&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;10&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;NOV&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;11&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;DEC&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;12&amp;quot;&lt;br /&gt;
  ;convert to &amp;quot;mm/dd/yyyy&amp;quot; format&lt;br /&gt;
  S $E(ERRDATE,6)=&amp;quot;&amp;quot;&lt;br /&gt;
  S $E(ERRDATE,3)=&amp;quot;/&amp;quot;,$E(ERRDATE,6)=&amp;quot;/&amp;quot;&lt;br /&gt;
  Q&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  ; ACSPNT2.m --&amp;gt; PROCESS RECEIVED HL7 MESSAGE (ADT-A31) FROM ACS COMPUMD.&lt;br /&gt;
  ; ...continued from ACSPNT.m to process insurance company&lt;br /&gt;
  ;&lt;br /&gt;
  ; DBS CALLS:&lt;br /&gt;
  ; D FILE^DIE   REPLACES EXISTING RECORDS&lt;br /&gt;
  ; D UPDATE^DIE ADDS NEW RECORDS&lt;br /&gt;
  ;&lt;br /&gt;
  ; GLOBAL/LOCAL VARIABLES:&lt;br /&gt;
  ; COUNT        COUNTER FOR INSURANCE INDEX&lt;br /&gt;
  ; INSRESULT    RESULT FROM INSURANCE SEARCH&lt;br /&gt;
  ; INSFINDERR   ERR FROM INSURANCE SEARCH&lt;br /&gt;
  ; INSROOT      FDA_ROOT FOR INSURANCE DBS CALLS&lt;br /&gt;
  ; VALINSROOT   VALIDATED INSROOT&lt;br /&gt;
  ; INSERR       ERR MESSAGES FROM INSURANCE DBS CALLS&lt;br /&gt;
  ; INSIEN       IEN FOR DBS CALLS&lt;br /&gt;
  ; ^CHECK       TEMP STORAGE FOR ERR MESSAGES&lt;br /&gt;
  ;&lt;br /&gt;
  ; COMMENTS:&lt;br /&gt;
  ; ;)           TEMPORARY COMMENT/LINE OF CODE&lt;br /&gt;
  ;&lt;br /&gt;
  ; FILEMAN FILES:&lt;br /&gt;
  ; ^DIC(36,     INSURANCE COMPANY FILE (#36)&lt;br /&gt;
  ;&lt;br /&gt;
  ; last update 5.6.2007 1128&lt;br /&gt;
  ;&lt;br /&gt;
 EN  ;entry point, init&lt;br /&gt;
  N COUNT&lt;br /&gt;
  N INSRESULT,INSFINDERR&lt;br /&gt;
  N VALINSROOT&lt;br /&gt;
  S COUNT=0&lt;br /&gt;
 LOOP    ;loop through each INS segment&lt;br /&gt;
  I COUNT&amp;gt;INSCOUNT G REXIT&lt;br /&gt;
 FINDINS ;&lt;br /&gt;
  D FIND^DIC(36,,&amp;quot;@&amp;quot;,&amp;quot;X&amp;quot;,INSSEG(COUNT,&amp;quot;INS&amp;quot;),,&amp;quot;ACSINSNO&amp;quot;,,,&amp;quot;INSRESULT&amp;quot;,&amp;quot;INSFINDERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;4INSFINDERR&amp;quot;)=INSFINDERR ;)&lt;br /&gt;
  M ^CHECK(&amp;quot;4INSFINDRESULT&amp;quot;)=INSRESULT ;)&lt;br /&gt;
  I $P(INSRESULT(&amp;quot;DILIST&amp;quot;,0),&amp;quot;^&amp;quot;,1)=0 G DOUPDATEDIE ;if no entries for ACSINSNO found, go to update (add)&lt;br /&gt;
  ;fall through if insurance company found&lt;br /&gt;
  ;&lt;br /&gt;
 DOFILEDIE   ;&lt;br /&gt;
  N INSROOT,INSERR&lt;br /&gt;
  N INSIEN&lt;br /&gt;
  S INSIEN=INSRESULT(&amp;quot;DILIST&amp;quot;,2,1)_&amp;quot;,&amp;quot; ;set IEN from returned array plus comma&lt;br /&gt;
  S INSROOT(36,INSIEN,.01)=$G(INSSEG(COUNT,&amp;quot;NAME&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.05)=&amp;quot;NO&amp;quot; ;inactive flag&lt;br /&gt;
  S INSROOT(36,INSIEN,.111)=$G(INSSEG(COUNT,&amp;quot;ADDR1&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.112)=$G(INSSEG(COUNT,&amp;quot;ADDR2&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.114)=$G(INSSEG(COUNT,&amp;quot;CITY&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.115)=$G(INSSEG(COUNT,&amp;quot;STATE&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.116)=$G(INSSEG(COUNT,&amp;quot;ZIP&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.131)=$G(INSSEG(COUNT,&amp;quot;PHONE&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,1)=&amp;quot;Y&amp;quot; ;REIMBURSE?&lt;br /&gt;
  S INSROOT(36,INSIEN,2)=&amp;quot;0&amp;quot; ;SIGNATURE REQUIRED ON BILL?&lt;br /&gt;
  S INSIEN=INSRESULT(&amp;quot;DILIST&amp;quot;,2,1)&lt;br /&gt;
  ;do validation&lt;br /&gt;
  D VALS^DIE(&amp;quot;&amp;quot;,&amp;quot;INSROOT&amp;quot;,&amp;quot;VALINSROOT&amp;quot;,&amp;quot;VALERR&amp;quot;)&lt;br /&gt;
  N INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  S INDEX=&amp;quot;&amp;quot;&lt;br /&gt;
  S ERRCOUNT=1&lt;br /&gt;
  F  S INDEX=$O(VALINSROOT(36,INSIEN_&amp;quot;,&amp;quot;,INDEX)) Q:INDEX=&amp;quot;&amp;quot;  D&lt;br /&gt;
  . I VALINSROOT(36,INSIEN_&amp;quot;,&amp;quot;,INDEX)=&amp;quot;^&amp;quot; S ERRNUM=$P(VALERR(&amp;quot;DIERR&amp;quot;),&amp;quot;^&amp;quot;,1)&lt;br /&gt;
  . I  S ^ACSERR(ERRDATE,&amp;quot;ACSPNT2&amp;quot;,&amp;quot;FILE ERRNUM&amp;quot;)=ERRNUM&lt;br /&gt;
  . I  D LOGERR&lt;br /&gt;
  . I  Q&lt;br /&gt;
  K INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  ;&lt;br /&gt;
  ;begin file locks&lt;br /&gt;
 FILELOCKDIC ;&lt;br /&gt;
  L +^DIC(36,INSIEN):1 ;try lock&lt;br /&gt;
  I $T G DOFILEDIEFILER ;if lock, continue&lt;br /&gt;
  E  G FILELOCKDIC ;if lock fails, keep trying&lt;br /&gt;
  ;end locks&lt;br /&gt;
  ;&lt;br /&gt;
 DOFILEDIEFILER  ;&lt;br /&gt;
  D FILE^DIE(&amp;quot;S&amp;quot;,&amp;quot;VALINSROOT&amp;quot;,&amp;quot;INSERR&amp;quot;)&lt;br /&gt;
  L -^DIC(36,INSIEN)&lt;br /&gt;
  K INSROOT,INSERR&lt;br /&gt;
  K INSIEN&lt;br /&gt;
  G NEXTSEGMENT&lt;br /&gt;
 DOUPDATEDIE ;&lt;br /&gt;
  N INSROOT,INSERR&lt;br /&gt;
  N INSIEN&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.01)=$G(INSSEG(COUNT,&amp;quot;NAME&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.05)=&amp;quot;NO&amp;quot; ;inactive flag&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.111)=$G(INSSEG(COUNT,&amp;quot;ADDR1&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.112)=$G(INSSEG(COUNT,&amp;quot;ADDR2&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.114)=$G(INSSEG(COUNT,&amp;quot;CITY&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.115)=$G(INSSEG(COUNT,&amp;quot;STATE&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.116)=$G(INSSEG(COUNT,&amp;quot;ZIP&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.131)=$G(INSSEG(COUNT,&amp;quot;PHONE&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,1)=&amp;quot;Y&amp;quot; ;REIMBURSE?&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,2)=&amp;quot;0&amp;quot; ;SIGNATURE REQUIRED ON BILL?&lt;br /&gt;
  ;do validation&lt;br /&gt;
  D VALS^DIE(&amp;quot;&amp;quot;,&amp;quot;INSROOT&amp;quot;,&amp;quot;VALINSROOT&amp;quot;,&amp;quot;VALERR&amp;quot;)&lt;br /&gt;
  N INDEX,ERRCOUNT,ERRNUM&lt;br /&gt;
  S INDEX=&amp;quot;&amp;quot;&lt;br /&gt;
  S ERRCOUNT=1&lt;br /&gt;
  F  S INDEX=$O(VALINSROOT(36,&amp;quot;?+1,&amp;quot;,INDEX)) Q:INDEX=&amp;quot;&amp;quot;  D&lt;br /&gt;
  . I VALINSROOT(36,&amp;quot;?+1,&amp;quot;,INDEX)=&amp;quot;^&amp;quot; S ERRNUM=$P(VALERR(&amp;quot;DIERR&amp;quot;),&amp;quot;^&amp;quot;,1)&lt;br /&gt;
  . I  S ^ACSERR(ERRDATE,&amp;quot;ACSPNT2&amp;quot;,&amp;quot;UPDATE ERRNUM&amp;quot;)=ERRNUM&lt;br /&gt;
  . I  D LOGERR&lt;br /&gt;
  . I  S VALFLAG=1&lt;br /&gt;
  . I  Q&lt;br /&gt;
  K INDEX,ERRCOUNT,ERRNUM&lt;br /&gt;
  I VALFLAG Q ;if validation fails, return to ACSPNT&lt;br /&gt;
 DOUPDATEDIEFILER    ;&lt;br /&gt;
  ;)S INSERR(&amp;quot;DIERR&amp;quot;)=&amp;quot;&amp;quot;&lt;br /&gt;
  D UPDATE^DIE(&amp;quot;S&amp;quot;,&amp;quot;VALINSROOT&amp;quot;,&amp;quot;INSIEN&amp;quot;,&amp;quot;INSERR&amp;quot;)&lt;br /&gt;
  I $G(INSIEN(1))&#039;=&amp;quot;&amp;quot; S ^DIC(36,&amp;quot;ACSINSNO&amp;quot;,INSSEG(COUNT,&amp;quot;INS&amp;quot;),INSIEN(1))=&amp;quot;ACTIVE&amp;quot; ;set up my cross-reference&lt;br /&gt;
  K INSROOT,INSERR&lt;br /&gt;
  K INSIEN&lt;br /&gt;
 NEXTSEGMENT ;&lt;br /&gt;
  S COUNT=COUNT+1&lt;br /&gt;
  G LOOP&lt;br /&gt;
 REXIT   ;&lt;br /&gt;
  K COUNT&lt;br /&gt;
  K INSRESULT,INSFINDERR&lt;br /&gt;
  K VALINSROOT&lt;br /&gt;
  Q&lt;br /&gt;
 LOGERR  ;&lt;br /&gt;
  F  Q:ERRCOUNT&amp;gt;ERRNUM  D&lt;br /&gt;
  . M ^ACSERR(ERRDATE,&amp;quot;ERR TEXT&amp;quot;)=VALERR(&amp;quot;DIERR&amp;quot;,ERRCOUNT,&amp;quot;TEXT&amp;quot;)&lt;br /&gt;
  . S ERRCOUNT=ERRCOUNT+1&lt;br /&gt;
  Q&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  ; ACSPNT3.m --&amp;gt; PROCESS RECEIVED HL7 MESSAGE (ADT-A31) FROM ACS COMPUMD.&lt;br /&gt;
  ; ...continued from ACSPNT.m to process health record number&lt;br /&gt;
  ; ...*p1 adds coordinating master of record to patient&lt;br /&gt;
  ;&lt;br /&gt;
  ; DBS CALLS:&lt;br /&gt;
  ; D UPDATE^DIE ADDS NEW RECORDS&lt;br /&gt;
  ;&lt;br /&gt;
  ; GLOBAL/LOCAL VARIABLES:&lt;br /&gt;
  ; FAC          USER&#039;S INSTITUTION(FACILITY)&lt;br /&gt;
  ; PFIEN        INTERNAL ENTRY NUMBER IN PATIENT FILE - FROM ACSPNT&lt;br /&gt;
  ; APN          ACS PATIENT NUMBER - FROM ACSPNT&lt;br /&gt;
  ; HRNROOT      ROOT FOR HRN FILE&lt;br /&gt;
  ; HRNSROOT     ROOT FOR HRN SUBFILE&lt;br /&gt;
  ; HRNIEN       INTERNAL ENTRY NUMBER FOR HRN FILE&lt;br /&gt;
  ; HRNSIEN      INTERNAL ENTRY NUMBER FOR HUN SUBFILE&lt;br /&gt;
  ; HRNERR       ERR FOR UPDATE HRN FILE&lt;br /&gt;
  ; HRNSERR      ERR FOR UPDATE HRN SUBFILE&lt;br /&gt;
  ; PATROOT      ROOT FOR PATIENT FILE *p1&lt;br /&gt;
  ; PATIEN       INTERNAL ENTRY NUMBER FOR PATIENT FILE *p1&lt;br /&gt;
  ; PATERR       ERR FOR PATIENT FILE *p1&lt;br /&gt;
  ; DATE         DATE IN INTERNAL FILEMAN FORMAT&lt;br /&gt;
  ; ^CHECK       TEMP STORAGE FOR ERR MESSAGES&lt;br /&gt;
  ;&lt;br /&gt;
  ; COMMENTS:&lt;br /&gt;
  ; ;)           TEMPORARY COMMENT/LINE OF CODE&lt;br /&gt;
  ;&lt;br /&gt;
  ; FILEMAN FILES:&lt;br /&gt;
  ; ^AUPNPAT     IHS PATIENT (#9000001)  9000001.41 - HRN SUBFILE&lt;br /&gt;
  ; ^DPT         PATIENT FILE (#2)       2.991 - ICN SUBFILE *p1&lt;br /&gt;
  ;&lt;br /&gt;
  ; last update 6.26.2007 0954&lt;br /&gt;
  ; *p1 added 6.26.2007 - this adds ICN to patient only because it is required, and the ICN is not correct&lt;br /&gt;
  ;                       for use with MPI as it should be. .04=&amp;quot;1&amp;quot; for locally assigned ICN.&lt;br /&gt;
  ;&lt;br /&gt;
 EN  ;entry point, init&lt;br /&gt;
  N FAC,HRNROOT,HRNSROOT,HRNIEN,HRNSIEN,HRNERR,HRNSERR&lt;br /&gt;
  N PFIEN,APN,DATE&lt;br /&gt;
  N PATROOT,PATIEN,PATERR&lt;br /&gt;
  S PFIEN=FDAIEN(1)&lt;br /&gt;
  S APN=PIDSEG(&amp;quot;NO&amp;quot;)&lt;br /&gt;
  S FAC=DUZ(2)&lt;br /&gt;
  D DT^DILF(,&amp;quot;NOW&amp;quot;,.DATE)&lt;br /&gt;
 UPDATE ;&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.01)=PFIEN&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.02)=DATE&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.03)=DATE&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.11)=DUZ  ;&amp;quot;establishing user&amp;quot;&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.12)=DUZ  ;&amp;quot;USER LAST UPDATE&amp;quot;&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.16)=DATE&lt;br /&gt;
  D UPDATE^DIE(&amp;quot;S&amp;quot;,&amp;quot;HRNROOT&amp;quot;,&amp;quot;HRNIEN&amp;quot;,&amp;quot;HRNERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;HRNERR&amp;quot;)=HRNERR ;)&lt;br /&gt;
  S HRNSIEN(1)=FAC&lt;br /&gt;
  S HRNSIEN=&amp;quot;?+1,&amp;quot;_HRNIEN(1)_&amp;quot;,&amp;quot;&lt;br /&gt;
  S HRNSROOT(9000001.41,HRNSIEN,.01)=FAC&lt;br /&gt;
  S HRNSROOT(9000001.41,HRNSIEN,.02)=APN&lt;br /&gt;
  D UPDATE^DIE(,&amp;quot;HRNSROOT&amp;quot;,&amp;quot;HRNSIEN&amp;quot;,&amp;quot;HRNSERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;HRNSERR&amp;quot;)=HRNSERR ;)&lt;br /&gt;
 FILECMR	; this section is *p1 (CMR - COORDINATING MASTER OF RECORD)&lt;br /&gt;
  S PATROOT(2,PFIEN_&amp;quot;,&amp;quot;,991.01)=PFIEN&lt;br /&gt;
  S PATROOT(2,PFIEN_&amp;quot;,&amp;quot;,991.03)=FAC&lt;br /&gt;
  S PATROOT(2,PFIEN_&amp;quot;,&amp;quot;,991.04)=&amp;quot;1&amp;quot; ;locally assigned ICN&lt;br /&gt;
  D FILE^DIE(&amp;quot;S&amp;quot;,&amp;quot;PATROOT&amp;quot;,&amp;quot;PATERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;PATCMRERR&amp;quot;)=PATERR ;)&lt;br /&gt;
 REXIT   ;EXIT&lt;br /&gt;
  K FAC,HRNROOT,HRNSROOT,HRNIEN,HRNSIEN,HRNERR,HRNSERR&lt;br /&gt;
  K PFIEN,APN,DATE&lt;br /&gt;
  K PATROOT,PATIEN,PATERR&lt;br /&gt;
  Q&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:cmdupre]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Register_a_patient_via_HL7&amp;diff=5038</id>
		<title>Register a patient via HL7</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Register_a_patient_via_HL7&amp;diff=5038"/>
		<updated>2007-07-20T21:26:02Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are my site-specific routines for registering a patient via HL7 messaging:&lt;br /&gt;
(the ^CHECK variable is for debugging - I am still in development/testing)&lt;br /&gt;
&lt;br /&gt;
  ; ACSPNT.m --&amp;gt; PROCESS RECEIVED HL7 MESSAGE (ADT-A31) FROM ACS COMPUMD.&lt;br /&gt;
  ;&lt;br /&gt;
  ;&lt;br /&gt;
  ; DBS CALLS:&lt;br /&gt;
  ; D FILE^DIE   REPLACES EXISTING RECORDS&lt;br /&gt;
  ; D UPDATE^DIE ADDS NEW RECORDS&lt;br /&gt;
  ;&lt;br /&gt;
  ; GLOBAL/LOCAL VARIABLES:&lt;br /&gt;
  ; PIDSEG       CURRENT MESSAGE PID SEGMENT&lt;br /&gt;
  ; PIDSEGNAME   TEMP STORAGE OF PATIENT NAME FOR FORMATTING&lt;br /&gt;
  ; INSSEG       ARRAY OF CURRENT MESSAGE IN1 SEGMENTS&lt;br /&gt;
  ; EVNSEG       EVENT SEGMENT *p2&lt;br /&gt;
  ; PNTROOT      FDA_ROOT FOR PATIENT DBS CALLS&lt;br /&gt;
  ; VALPNTROOT   VALIDATED PNTROOT&lt;br /&gt;
  ; PNTINSROOT   FDA_ROOT FOR PATIENT INSURANCE&lt;br /&gt;
  ; PNTERR       ERR MESSAGES FROM PATIENT DBS CALL&lt;br /&gt;
  ; VALERR       ERR MESSAGES FROM VALIDATION CALL&lt;br /&gt;
  ; INSCOUNT     COUNTER FOR INSURANCE ARRAY&lt;br /&gt;
  ; FDAIEN       INTERNAL ENTRY NUMBER DERRIVED FROM PATIENT NUMBER&lt;br /&gt;
  ; FINDERR      ERR MESSAGES FROM FIND^DIC CALL&lt;br /&gt;
  ; SEG          TEMP STORAGE FOR EACH MESSAGE SEGMENT&lt;br /&gt;
  ; HLMSG        MESSAGE CONTROL FOR $$STARTMSG^HLPRS&lt;br /&gt;
  ; HLMTIENS     CURENT MESSAGE RECEIVED&lt;br /&gt;
  ; HEADER       CURRENT MESSAGE HEADER&lt;br /&gt;
  ; RESULT       RETURNED ARRAY FROM FIND^DIC&lt;br /&gt;
  ; SSNRESULT    RESULT OF SOCIAL SECURITY SEARCH&lt;br /&gt;
  ; SSNFINDERR   ERR MESSAGES FROM SOCIAL SECURITY SEARCH&lt;br /&gt;
  ; SSNFOUND     FLAG SET IF SOCIAL SECURITY NUMBER FOUND IN DATABASE&lt;br /&gt;
  ; SSNIEN       IEN OF PATIENT WHERE SSN FOUND *p1&lt;br /&gt;
  ; VALFLAG      SET IF VAL FAILS&lt;br /&gt;
  ; ^ACSERR      LOGFILE FOR VALIDATION ERRORS&lt;br /&gt;
  ; ERRDATE      DATE FOR ERR MESSAGE LOG&lt;br /&gt;
  ; ^CHECK       TEMP STORAGE FOR ERROR MESSAGES&lt;br /&gt;
  ;&lt;br /&gt;
  ; COMMENTS:&lt;br /&gt;
  ; ;)           TEMPORARY COMMENT/LINE OF CODE&lt;br /&gt;
  ;&lt;br /&gt;
  ; FILEMAN FILES:&lt;br /&gt;
  ; ^DPT         PATIENT     (#2)&lt;br /&gt;
  ;&lt;br /&gt;
  ; last update 7.05.2007 0847&lt;br /&gt;
  ; *p1 added 6.26.2007 to account for ssn being reset on filing existing patient information&lt;br /&gt;
  ; *p2 added 7.02.2007 for coordinating deletion of patient with billing system&lt;br /&gt;
  ; *p3 added 7.05.2007 to change month name to a number for sorting err message&lt;br /&gt;
  ;&lt;br /&gt;
 EN  ;entry point, init&lt;br /&gt;
  N ERRDATE&lt;br /&gt;
  N FDAIEN&lt;br /&gt;
  N HLMSG,HEADER,SEG&lt;br /&gt;
  N PIDSEG,PNTROOT,PNTERR,PIDSEGNAME&lt;br /&gt;
  N INSCOUNT,INSSEG&lt;br /&gt;
  N RESULT,FINDERR&lt;br /&gt;
  N SSNRESULT,SSNFINDERR,SSNFOUND,SSNIEN&lt;br /&gt;
  N VALPNTROOT,VALFLAG,VALERR&lt;br /&gt;
  K ^CHECK&lt;br /&gt;
  S VALFLAG=0&lt;br /&gt;
  S SSNIEN=0&lt;br /&gt;
  S ^CHECK(&amp;quot;0BEGIN&amp;quot;)=&amp;quot;VERSION 4.5 - START&amp;quot; ;)&lt;br /&gt;
  S SSNFOUND=0 ;set ssn found flag to false&lt;br /&gt;
  S DUZ=1,DUZ(0)=&amp;quot;@&amp;quot; ;initialize user number and give programmer access to files&lt;br /&gt;
  ;set current d/t&lt;br /&gt;
  N TEMPDATE&lt;br /&gt;
  D DT^DILF(&amp;quot;ERSX&amp;quot;,&amp;quot;NOW&amp;quot;,.TEMPDATE)&lt;br /&gt;
  S ERRDATE=TEMPDATE(0)&lt;br /&gt;
  D MODERRDATE ;*p3&lt;br /&gt;
  K TEMPDATE&lt;br /&gt;
 GETHEADER   ;&lt;br /&gt;
  ;&lt;br /&gt;
  ;get received message header using HLMTIENS(last message received)&lt;br /&gt;
  I $$STARTMSG^HLPRS(.HLMSG,HLMTIENS,.HEADER) G GETSEGMENT&lt;br /&gt;
  ;&lt;br /&gt;
  ;Fall through if message not found&lt;br /&gt;
  S ^ACSERR(ERRDATE,&amp;quot;ACSPNT&amp;quot;,&amp;quot;ERR&amp;quot;)=&amp;quot;** Message Not Found (IEN &amp;quot;_HLMTIENS_&amp;quot;) **&amp;quot;&lt;br /&gt;
  G REXIT ;clean-up and quit this routine&lt;br /&gt;
 GETSEGMENT  ;&lt;br /&gt;
  ;loop through segments&lt;br /&gt;
  S ^CHECK(&amp;quot;0HLMTIENS&amp;quot;)=HLMTIENS ;)&lt;br /&gt;
  S INSCOUNT=0;&lt;br /&gt;
  F  Q:&#039;$$NEXTSEG^HLPRS(.HLMSG,.SEG)  D&lt;br /&gt;
  . I SEG(&amp;quot;SEGMENT TYPE&amp;quot;)=&amp;quot;EVN&amp;quot; ;save EVN segment&lt;br /&gt;
  . I  S EVNSEG(&amp;quot;TYPE&amp;quot;)=$$GET^HLOPRS(.SEG,1)&lt;br /&gt;
  . I SEG(&amp;quot;SEGMENT TYPE&amp;quot;)=&amp;quot;PID&amp;quot; ;save PID segment&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;NO&amp;quot;)=$$GET^HLOPRS(.SEG,3)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;LNAME&amp;quot;)=$$GET^HLOPRS(.SEG,5)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;FNAME&amp;quot;)=$$GET^HLOPRS(.SEG,5,2)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;MI&amp;quot;)=$$GET^HLOPRS(.SEG,5,3)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;REM&amp;quot;)=$$GET^HLOPRS(.SEG,6)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;DOB&amp;quot;)=$$GET^HLOPRS(.SEG,7)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;SEX&amp;quot;)=$$GET^HLOPRS(.SEG,8)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;ADDR1&amp;quot;)=$$GET^HLOPRS(.SEG,11)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;ADDR2&amp;quot;)=$$GET^HLOPRS(.SEG,11,2)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;CITY&amp;quot;)=$$GET^HLOPRS(.SEG,11,3)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;STATE&amp;quot;)=$$GET^HLOPRS(.SEG,11,4)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;ZIP&amp;quot;)=$$GET^HLOPRS(.SEG,11,5)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;HPHONE&amp;quot;)=$$GET^HLOPRS(.SEG,13)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;EMAIL&amp;quot;)=$$GET^HLOPRS(.SEG,13,4)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;WPHONE&amp;quot;)=$$GET^HLOPRS(.SEG,14)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;SSN&amp;quot;)=$$GET^HLOPRS(.SEG,19)&lt;br /&gt;
  . I SEG(&amp;quot;SEGMENT TYPE&amp;quot;)=&amp;quot;IN1&amp;quot; ;save INS segments&lt;br /&gt;
  . I  ;S INSSEG(INSCOUNT,&amp;quot;PLAN&amp;quot;)=$$GET^HLOPRS(.SEG,2) ;same as INS section&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;INS&amp;quot;)=$$GET^HLOPRS(.SEG,3)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;NAME&amp;quot;)=$$GET^HLOPRS(.SEG,4)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;ADDR1&amp;quot;)=$$GET^HLOPRS(.SEG,5)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;ADDR2&amp;quot;)=$$GET^HLOPRS(.SEG,5,2)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;CITY&amp;quot;)=$$GET^HLOPRS(.SEG,5,3)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;STATE&amp;quot;)=$$GET^HLOPRS(.SEG,5,4)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;ZIP&amp;quot;)=$$GET^HLOPRS(.SEG,5,5)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;PHONE&amp;quot;)=$$GET^HLOPRS(.SEG,7)&lt;br /&gt;
  . I  ;S INSSEG(INSCOUNT,&amp;quot;GRP&amp;quot;)=$$GET^HLOPRS(.SEG,8)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;NOIL&amp;quot;)=$$GET^HLOPRS(.SEG,16)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;NOIF&amp;quot;)=$$GET^HLOPRS(.SEG,16,2)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;NOIM&amp;quot;)=$$GET^HLOPRS(.SEG,16,3)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;REL&amp;quot;)=$$GET^HLOPRS(.SEG,17)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;POL&amp;quot;)=$$GET^HLOPRS(.SEG,36)&lt;br /&gt;
  . I  S INSCOUNT=INSCOUNT+1&lt;br /&gt;
  S INSCOUNT=INSCOUNT-1&lt;br /&gt;
  ;all validation performed on cobol side with exception of SSN.&lt;br /&gt;
  ;convert DOB from yyyymmdd to mmddyyyy&lt;br /&gt;
  S PIDSEG(&amp;quot;DOB&amp;quot;)=$E(PIDSEG(&amp;quot;DOB&amp;quot;),5,8)_$E(PIDSEG(&amp;quot;DOB&amp;quot;),1,4)&lt;br /&gt;
  ;set PIDSEGNAME format&lt;br /&gt;
  S PIDSEGNAME=$G(PIDSEG(&amp;quot;LNAME&amp;quot;))_&amp;quot;,&amp;quot;_$G(PIDSEG(&amp;quot;FNAME&amp;quot;))&lt;br /&gt;
  I $G(PIDSEG(&amp;quot;MI&amp;quot;))&#039;=&amp;quot;&amp;quot; S PIDSEGNAME=PIDSEGNAME_&amp;quot; &amp;quot;_PIDSEG(&amp;quot;MI&amp;quot;) ;if midinit exists, append to name&lt;br /&gt;
  ;set INSSEGNOI format and convert relationship code&lt;br /&gt;
  N COUNT,TEMP&lt;br /&gt;
  S COUNT=0&lt;br /&gt;
  S TEMP=&amp;quot;&amp;quot;&lt;br /&gt;
  F  Q:COUNT&amp;gt;INSCOUNT  D&lt;br /&gt;
  . S INSSEG(COUNT,&amp;quot;NOI&amp;quot;)=$G(INSSEG(COUNT,&amp;quot;NOIL&amp;quot;))_&amp;quot;,&amp;quot;_$G(INSSEG(COUNT,&amp;quot;NOIF&amp;quot;))&lt;br /&gt;
  . I $G(INSSEG(COUNT,&amp;quot;NOIM&amp;quot;))&#039;=&amp;quot;&amp;quot; S INSSEG(COUNT,&amp;quot;NOI&amp;quot;)=INSSEG(COUNT,&amp;quot;NOI&amp;quot;)_&amp;quot; &amp;quot;_INSSEG(COUNT,&amp;quot;NOIM&amp;quot;)&lt;br /&gt;
  . I INSSEG(COUNT,&amp;quot;REL&amp;quot;)=&amp;quot;0&amp;quot; S TEMP=&amp;quot;PATIENT&amp;quot;&lt;br /&gt;
  . I INSSEG(COUNT,&amp;quot;REL&amp;quot;)=&amp;quot;1&amp;quot; S TEMP=&amp;quot;SPOUSE&amp;quot;&lt;br /&gt;
  . I INSSEG(COUNT,&amp;quot;REL&amp;quot;)=&amp;quot;2&amp;quot; S TEMP=&amp;quot;NATURAL CHILD&amp;quot;&lt;br /&gt;
  . I TEMP=&amp;quot;&amp;quot; S TEMP=&amp;quot;DO NOT USE&amp;quot;&lt;br /&gt;
  . S INSSEG(COUNT,&amp;quot;REL&amp;quot;)=TEMP&lt;br /&gt;
  . S TEMP=&amp;quot;&amp;quot;&lt;br /&gt;
  . S COUNT=COUNT+1&lt;br /&gt;
  K COUNT,TEMP&lt;br /&gt;
  M ^CHECK(&amp;quot;1PATIENTINFO&amp;quot;)=PIDSEG ;)&lt;br /&gt;
  M ^CHECK(&amp;quot;1INSURANCE&amp;quot;)=INSSEG ;)&lt;br /&gt;
  M ^CHECK(&amp;quot;1EVENT&amp;quot;)=EVNSEG ;)&lt;br /&gt;
  I EVNSEG(&amp;quot;TYPE&amp;quot;)=&amp;quot;A29&amp;quot; ;*p2 delete message received &lt;br /&gt;
  I  D DELETEPAT&lt;br /&gt;
  I  G REXIT&lt;br /&gt;
  D EN^ACSPNT2 ;do insurance company processing&lt;br /&gt;
  I VALFLAG G REXIT ;if validation fails in ACSPNT2, quit&lt;br /&gt;
  ;&lt;br /&gt;
  ;&lt;br /&gt;
 PROCESSPATIENT  ;&lt;br /&gt;
  ;)FIND^DIC(FILE,IENS,FIELDS,FLAGS,[.]VALUE,NUMBER,[.]INDEXES,[.]SCREEN,IDENTIFIER,TARGET_ROOT,MSG_ROOT)&lt;br /&gt;
  ;)finds ACS patient number in ^DPT : Patient File (#2)&lt;br /&gt;
  ;)RETURNED VALUES&lt;br /&gt;
  ;) List ^FOUND&lt;br /&gt;
  ;) ^FOUND(&amp;quot;DILIST&amp;quot;,0)=&amp;quot;1^*^0^&amp;quot;  &amp;lt;--1ST NUMBER IS HOW MANY FOUND (0 OR 1)&lt;br /&gt;
  ;) ^FOUND(&amp;quot;DILIST&amp;quot;,2,1)=1       &amp;lt;--IEN&lt;br /&gt;
  ;)USE THIS TO ADD NEW PATIENT WITH ACSPATNO (CROSS REF IEN)&lt;br /&gt;
  ;)S ^DPT(&amp;quot;ACSPATNO&amp;quot;,(patient number from acs),1)=&amp;quot;&amp;quot; &amp;lt;--1 EQUALS IEN&lt;br /&gt;
  ;&lt;br /&gt;
  I PIDSEG(&amp;quot;SSN&amp;quot;)&#039;?9N S PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;&amp;quot; ;if ssn is != to pattern (9 numbers), set to &amp;quot;&amp;quot;&lt;br /&gt;
  E  D FIND^DIC(2,,&amp;quot;@&amp;quot;,&amp;quot;X&amp;quot;,PIDSEG(&amp;quot;SSN&amp;quot;),,&amp;quot;SSN&amp;quot;,,,&amp;quot;SSNRESULT&amp;quot;,&amp;quot;SSNFINDERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;2SSNRESULT&amp;quot;)=SSNRESULT ;)&lt;br /&gt;
  M ^CHECK(&amp;quot;2SSNFINDERR&amp;quot;)=SSNFINDERR ;)&lt;br /&gt;
  I PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;&amp;quot; S PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;@&amp;quot; G CHECKACSPATNO ;if ssn blank, set to &amp;quot;@&amp;quot;&lt;br /&gt;
  I $P(SSNRESULT(&amp;quot;DILIST&amp;quot;,0),&amp;quot;^&amp;quot;,1)&#039;=0 S SSNFOUND=1 ;if found ssn, set ssn found flag to true&lt;br /&gt;
  I  S SSNIEN=SSNRESULT(&amp;quot;DILIST&amp;quot;,2,1) ;*p1&lt;br /&gt;
  S ^CHECK(&amp;quot;2SSNFLAG&amp;quot;)=SSNFOUND ;)&lt;br /&gt;
 CHECKACSPATNO   ;&lt;br /&gt;
  M ^CHECK(&amp;quot;3PROCESSEDSSN&amp;quot;)=PIDSEG(&amp;quot;SSN&amp;quot;) ;)&lt;br /&gt;
  D FIND^DIC(2,,&amp;quot;@&amp;quot;,&amp;quot;X&amp;quot;,PIDSEG(&amp;quot;NO&amp;quot;),,&amp;quot;ACSPATNO&amp;quot;,,,&amp;quot;RESULT&amp;quot;,&amp;quot;FINDERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;4FINDERR&amp;quot;)=FINDERR ;)&lt;br /&gt;
  M ^CHECK(&amp;quot;4FINDRESULT&amp;quot;)=RESULT ;)&lt;br /&gt;
  I $P(RESULT(&amp;quot;DILIST&amp;quot;,0),&amp;quot;^&amp;quot;,1)=0 G DOUPDATEDIE ;if no entries for ACSPATNO found, go to update (add)&lt;br /&gt;
  ;fall through for found entry&lt;br /&gt;
  ;&lt;br /&gt;
  ;&lt;br /&gt;
 DOFILEDIE   ;&lt;br /&gt;
  ;set fields using $GET ($G) to avoid &#039;variable undefined&#039; error&lt;br /&gt;
  N TEMPIEN&lt;br /&gt;
  S TEMPIEN=RESULT(&amp;quot;DILIST&amp;quot;,2,1)&lt;br /&gt;
  S FDAIEN=RESULT(&amp;quot;DILIST&amp;quot;,2,1)_&amp;quot;,&amp;quot; ;set IEN from returned array plus comma&lt;br /&gt;
  I TEMPIEN=SSNIEN G DOFILEDIENEXT ;*p1&lt;br /&gt;
  I SSNFOUND S PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;@&amp;quot; ;if ssn exists in database, set ssn to @ to avoid duplicate ssn error on add new entry&lt;br /&gt;
 DOFILEDIENEXT   ;*p1&lt;br /&gt;
  I PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;@&amp;quot; S PNTROOT(2,FDAIEN,.363)=&amp;quot;--&amp;quot;&lt;br /&gt;
  I  S PNTROOT(2,FDAIEN,.364)=&amp;quot;&amp;quot;&lt;br /&gt;
  I &#039;SSNFOUND S PNTROOT(2,FDAIEN,.363)=PIDSEG(&amp;quot;SSN&amp;quot;)&lt;br /&gt;
  I  S PNTROOT(2,FDAIEN,.364)=$E(PIDSEG(&amp;quot;SSN&amp;quot;),6,9)&lt;br /&gt;
  I  S PNTROOT(2,FDAIEN,.09)=PIDSEG(&amp;quot;SSN&amp;quot;)&lt;br /&gt;
  K TEMPIEN&lt;br /&gt;
  S ^CHECK(&amp;quot;5FILEIEN&amp;quot;)=FDAIEN ;)&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.01)=PIDSEGNAME&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.091)=$G(PIDSEG(&amp;quot;REM&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.03)=$G(PIDSEG(&amp;quot;DOB&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.02)=$G(PIDSEG(&amp;quot;SEX&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.301)=&amp;quot;NO&amp;quot;&lt;br /&gt;
  S PNTROOT(2,FDAIEN,391)=&amp;quot;NON-VETERAN (OTHER)&amp;quot;&lt;br /&gt;
  S PNTROOT(2,FDAIEN,1901)=&amp;quot;NO&amp;quot;&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.111)=$G(PIDSEG(&amp;quot;ADDR1&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.112)=$G(PIDSEG(&amp;quot;ADDR2&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.114)=$G(PIDSEG(&amp;quot;CITY&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.115)=$G(PIDSEG(&amp;quot;STATE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.116)=$G(PIDSEG(&amp;quot;ZIP&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.131)=$G(PIDSEG(&amp;quot;HPHONE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.132)=$G(PIDSEG(&amp;quot;WPHONE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.133)=$G(PIDSEG(&amp;quot;EMAIL&amp;quot;))&lt;br /&gt;
  S FDAIEN=RESULT(&amp;quot;DILIST&amp;quot;,2,1) ;set IEN from returned array minus comma&lt;br /&gt;
  S ^CHECK(&amp;quot;5FILEIEN2&amp;quot;)=FDAIEN ;)&lt;br /&gt;
  ;do validation&lt;br /&gt;
  D VALS^DIE(&amp;quot;&amp;quot;,&amp;quot;PNTROOT&amp;quot;,&amp;quot;VALPNTROOT&amp;quot;,&amp;quot;VALERR&amp;quot;)&lt;br /&gt;
  N INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  S INDEX=&amp;quot;&amp;quot;&lt;br /&gt;
  S ERRCOUNT=1&lt;br /&gt;
  F  S INDEX=$O(VALPNTROOT(2,FDAIEN_&amp;quot;,&amp;quot;,INDEX)) Q:INDEX=&amp;quot;&amp;quot;  D&lt;br /&gt;
  . I VALPNTROOT(2,FDAIEN_&amp;quot;,&amp;quot;,INDEX)=&amp;quot;^&amp;quot; S ERRNUM=$P(VALERR(&amp;quot;DIERR&amp;quot;),&amp;quot;^&amp;quot;,1)&lt;br /&gt;
  . I  S ^ACSERR(ERRDATE,&amp;quot;ACSPNT&amp;quot;,&amp;quot;FILE ERRNUM&amp;quot;)=ERRNUM&lt;br /&gt;
  . I  D LOGERR&lt;br /&gt;
  . I  Q&lt;br /&gt;
  K INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  ;&lt;br /&gt;
  ;begin file locks&lt;br /&gt;
 FILELOCKDPT ;&lt;br /&gt;
  L +^DPT(FDAIEN):1 ;try lock&lt;br /&gt;
  I $T G DOFILEDIEFILER ;if lock, continue&lt;br /&gt;
  E  G FILELOCKDPT ;if lock fails, keep trying&lt;br /&gt;
  ;end locks&lt;br /&gt;
  ;&lt;br /&gt;
 DOFILEDIEFILER  ;&lt;br /&gt;
  D FILE^DIE(&amp;quot;S&amp;quot;,&amp;quot;VALPNTROOT&amp;quot;,&amp;quot;PNTERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;5FILE&amp;quot;)=PNTERR ;)&lt;br /&gt;
  ;delete previously saved insurances&lt;br /&gt;
  N COUNT,DELROOT,DELIEN&lt;br /&gt;
  S COUNT=1&lt;br /&gt;
  F  Q:COUNT&amp;gt;5  D&lt;br /&gt;
  . S DELIEN=COUNT_&amp;quot;,&amp;quot;_FDAIEN_&amp;quot;,&amp;quot;&lt;br /&gt;
  . S DELROOT(2.312,DELIEN,.01)=&amp;quot;@&amp;quot;&lt;br /&gt;
  . D FILE^DIE(&amp;quot;E&amp;quot;,&amp;quot;DELROOT&amp;quot;)&lt;br /&gt;
  . S COUNT=COUNT+1&lt;br /&gt;
  K COUNT,DELROOT,DELIEN&lt;br /&gt;
  ;add current insurances from message&lt;br /&gt;
  N COUNT,ADDROOT,ADDIEN&lt;br /&gt;
  S COUNT=0&lt;br /&gt;
  F  Q:COUNT&amp;gt;INSCOUNT  D&lt;br /&gt;
  . S ADDIEN=&amp;quot;?+1,&amp;quot;_FDAIEN_&amp;quot;,&amp;quot;&lt;br /&gt;
  . S ADDROOT(2.312,ADDIEN,.01)=INSSEG(COUNT,&amp;quot;NAME&amp;quot;)&lt;br /&gt;
  . S ADDROOT(2.312,ADDIEN,17)=INSSEG(COUNT,&amp;quot;NOI&amp;quot;)&lt;br /&gt;
  . S ADDROOT(2.312,ADDIEN,16)=INSSEG(COUNT,&amp;quot;REL&amp;quot;)&lt;br /&gt;
  . S ADDROOT(2.312,ADDIEN,1)=INSSEG(COUNT,&amp;quot;POL&amp;quot;)&lt;br /&gt;
  . D UPDATE^DIE(&amp;quot;E&amp;quot;,&amp;quot;ADDROOT&amp;quot;)&lt;br /&gt;
  . S COUNT=COUNT+1&lt;br /&gt;
  K COUNT,ADDROOT,ADDIEN&lt;br /&gt;
  ;unlock file&lt;br /&gt;
  L -^DPT(FDAIEN)&lt;br /&gt;
  S ^ACSERR(ERRDATE,&amp;quot;FILER  COMPLETE&amp;quot;)=&amp;quot;(&amp;quot;_PIDSEG(&amp;quot;NO&amp;quot;)_&amp;quot;)&amp;quot;_PIDSEGNAME ;)&lt;br /&gt;
  G REXIT ;clean-up and quit this routine&lt;br /&gt;
  ;&lt;br /&gt;
 DOUPDATEDIE ;&lt;br /&gt;
  ;set fields using $GET ($G) to avoid &#039;variable undefined&#039; error&lt;br /&gt;
  I SSNFOUND S PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;@&amp;quot; ;if ssn exists in database, set ssn to @ to avoid duplicate ssn error on add new entry&lt;br /&gt;
  E  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.363)=PIDSEG(&amp;quot;SSN&amp;quot;)&lt;br /&gt;
  E  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.364)=$E(PIDSEG(&amp;quot;SSN&amp;quot;),6,9)&lt;br /&gt;
  E  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.09)=PIDSEG(&amp;quot;SSN&amp;quot;)&lt;br /&gt;
  I PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;@&amp;quot; S PNTROOT(2,&amp;quot;+1,&amp;quot;,.363)=&amp;quot;--&amp;quot;&lt;br /&gt;
  I  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.364)=&amp;quot;&amp;quot;&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.01)=$G(PIDSEGNAME)&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.091)=$G(PIDSEG(&amp;quot;REM&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.03)=$G(PIDSEG(&amp;quot;DOB&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.02)=$G(PIDSEG(&amp;quot;SEX&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.301)=&amp;quot;NO&amp;quot;&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,391)=&amp;quot;NON-VETERAN (OTHER)&amp;quot;&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,1901)=&amp;quot;NO&amp;quot;&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.111)=$G(PIDSEG(&amp;quot;ADDR1&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.112)=$G(PIDSEG(&amp;quot;ADDR2&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.114)=$G(PIDSEG(&amp;quot;CITY&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.115)=$G(PIDSEG(&amp;quot;STATE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.116)=$G(PIDSEG(&amp;quot;ZIP&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.131)=$G(PIDSEG(&amp;quot;HPHONE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.132)=$G(PIDSEG(&amp;quot;WPHONE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.133)=$G(PIDSEG(&amp;quot;EMAIL&amp;quot;))&lt;br /&gt;
  ;do validation&lt;br /&gt;
  D VALS^DIE(&amp;quot;&amp;quot;,&amp;quot;PNTROOT&amp;quot;,&amp;quot;VALPNTROOT&amp;quot;,&amp;quot;VALERR&amp;quot;)&lt;br /&gt;
  N INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  S INDEX=&amp;quot;&amp;quot;&lt;br /&gt;
  S ERRCOUNT=1&lt;br /&gt;
  F  S INDEX=$O(VALPNTROOT(2,&amp;quot;+1,&amp;quot;,INDEX)) Q:INDEX=&amp;quot;&amp;quot;  D&lt;br /&gt;
  . I VALPNTROOT(2,&amp;quot;+1,&amp;quot;,INDEX)=&amp;quot;^&amp;quot; S ERRNUM=$P(VALERR(&amp;quot;DIERR&amp;quot;),&amp;quot;^&amp;quot;,1)&lt;br /&gt;
  . I  S ^ACSERR(ERRDATE,&amp;quot;ACSPNT&amp;quot;,&amp;quot;UPDATE ERRNUM&amp;quot;)=ERRNUM&lt;br /&gt;
  . I  D LOGERR&lt;br /&gt;
  . I  S VALFLAG=1&lt;br /&gt;
  . I  Q&lt;br /&gt;
  K INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  I VALFLAG G REXIT ;QUIT IF VALIDATION FAILS&lt;br /&gt;
  ;&lt;br /&gt;
 DOUPDATEDIEFILER    ;&lt;br /&gt;
  S PNTERR(&amp;quot;DIERR&amp;quot;)=&amp;quot;&amp;quot;&lt;br /&gt;
  D UPDATE^DIE(&amp;quot;S&amp;quot;,&amp;quot;VALPNTROOT&amp;quot;,&amp;quot;FDAIEN&amp;quot;,&amp;quot;PNTERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;6UPDATEIEN&amp;quot;)=FDAIEN ;)&lt;br /&gt;
  I $G(FDAIEN(1))&#039;=&amp;quot;&amp;quot; S ^DPT(&amp;quot;ACSPATNO&amp;quot;,PIDSEG(&amp;quot;NO&amp;quot;),FDAIEN(1))=&amp;quot;&amp;quot; ;set up my cross-reference&lt;br /&gt;
  M ^CHECK(&amp;quot;6UPDATE&amp;quot;)=PNTERR ;)&lt;br /&gt;
  ;FILE HEALTH RECORD NUMBER&lt;br /&gt;
  I $G(FDAIEN(1))&#039;=&amp;quot;&amp;quot; D EN^ACSPNT3&lt;br /&gt;
  ;ADD insurance to new patient&lt;br /&gt;
  S ^DPT(FDAIEN(1),.312,&amp;quot;?+&amp;quot;,0)=&amp;quot;&amp;quot; ;avoid getting error message of var not found when setting policy number for insurance&lt;br /&gt;
  N COUNT&lt;br /&gt;
  S COUNT=0&lt;br /&gt;
  N PNTINSIEN,VALPNTINSROOT,PNTINSROOT&lt;br /&gt;
  F  Q:COUNT&amp;gt;INSCOUNT  D&lt;br /&gt;
  . S PNTINSIEN=&amp;quot;?+1,&amp;quot;_FDAIEN(1)_&amp;quot;,&amp;quot;&lt;br /&gt;
  . S PNTINSROOT(2.312,PNTINSIEN,.01)=INSSEG(COUNT,&amp;quot;NAME&amp;quot;)&lt;br /&gt;
  . S PNTINSROOT(2.312,PNTINSIEN,17)=INSSEG(COUNT,&amp;quot;NOI&amp;quot;)&lt;br /&gt;
  . S PNTINSROOT(2.312,PNTINSIEN,16)=INSSEG(COUNT,&amp;quot;REL&amp;quot;)&lt;br /&gt;
  . S PNTINSROOT(2.312,PNTINSIEN,1)=INSSEG(COUNT,&amp;quot;POL&amp;quot;)&lt;br /&gt;
  . ;D VALS^DIE(&amp;quot;&amp;quot;,&amp;quot;PNTINSROOT&amp;quot;,&amp;quot;VALPNTINSROOT&amp;quot;,&amp;quot;VALERR&amp;quot;)&lt;br /&gt;
  . D UPDATE^DIE(&amp;quot;E&amp;quot;,&amp;quot;PNTINSROOT&amp;quot;) ;SET TO VALPNTINSROOT IF USING VAL^DIE AND TAKE OUT &amp;quot;E&amp;quot; FLAG&lt;br /&gt;
  . S COUNT=COUNT+1&lt;br /&gt;
  K PNTINSIEN,VALPNTINSROOT,PNTINSROOT&lt;br /&gt;
  K COUNT&lt;br /&gt;
  S ^ACSERR(ERRDATE,&amp;quot;UPDATE COMPLETE&amp;quot;)=&amp;quot;(&amp;quot;_PIDSEG(&amp;quot;NO&amp;quot;)_&amp;quot;)&amp;quot;_PIDSEGNAME ;)&lt;br /&gt;
  G REXIT ;clean-up and quit routine&lt;br /&gt;
  ;&lt;br /&gt;
 REXIT   ;&lt;br /&gt;
  K ERRDATE&lt;br /&gt;
  K HLMSG,HEADER,SEG,FDAIEN&lt;br /&gt;
  K PIDSEG,PNTROOT,PNTERR,PIDSEGNAME&lt;br /&gt;
  K INSCOUNT,INSSEG&lt;br /&gt;
  K RESULT,FINDERR&lt;br /&gt;
  K SSNRESULT,SSNFINDERR,SSNFOUND,SSNIEN&lt;br /&gt;
  K VALPNTROOT,VALFLAG,VALERR&lt;br /&gt;
  S ^CHECK(&amp;quot;9END&amp;quot;)=&amp;quot;VERSION 4.5   - COMPLETE&amp;quot; ;)&lt;br /&gt;
  Q&lt;br /&gt;
  ;&lt;br /&gt;
 LOGERR  ;&lt;br /&gt;
  F  Q:ERRCOUNT&amp;gt;ERRNUM  D&lt;br /&gt;
  . M ^ACSERR(ERRDATE,&amp;quot;ERR TEXT&amp;quot;)=VALERR(&amp;quot;DIERR&amp;quot;,ERRCOUNT,&amp;quot;TEXT&amp;quot;)&lt;br /&gt;
  . S ERRCOUNT=ERRCOUNT+1&lt;br /&gt;
  Q&lt;br /&gt;
  ;&lt;br /&gt;
 DELETEPAT	;*p2&lt;br /&gt;
  D FIND^DIC(2,,&amp;quot;@&amp;quot;,&amp;quot;X&amp;quot;,PIDSEG(&amp;quot;NO&amp;quot;),,&amp;quot;ACSPATNO&amp;quot;,,,&amp;quot;RESULT&amp;quot;,&amp;quot;FINDERR&amp;quot;)&lt;br /&gt;
  I $P(RESULT(&amp;quot;DILIST&amp;quot;,0),&amp;quot;^&amp;quot;,1)=0 G DELETENOTFOUND&lt;br /&gt;
  N DELIEN,DELIEN2&lt;br /&gt;
  S DELIEN=RESULT(&amp;quot;DILIST&amp;quot;,2,1) ;patient IEN from matched ACSPATNO&lt;br /&gt;
  S DELIEN2=DELIEN&lt;br /&gt;
 DELETELOCK	;&lt;br /&gt;
  L +^DPT(DELIEN2):1 ;try lock&lt;br /&gt;
  I $T G DODELETE ;if lock, continue&lt;br /&gt;
  E  G DELETELOCK ;if lock fails, keep trying&lt;br /&gt;
 DODELETE	;&lt;br /&gt;
  S DELIEN=DELIEN_&amp;quot;,&amp;quot;&lt;br /&gt;
  S PNTROOT(2,DELIEN,.09)=&amp;quot;@&amp;quot;&lt;br /&gt;
  S PNTROOT(2,DELIEN,.363)=&amp;quot;--&amp;quot;&lt;br /&gt;
  S PNTROOT(2,DELIEN,.364)=&amp;quot;&amp;quot;&lt;br /&gt;
  D FILE^DIE(&amp;quot;&amp;quot;,&amp;quot;PNTROOT&amp;quot;) ;delete SSN from patient&lt;br /&gt;
  L -^DPT(DELIEN2)&lt;br /&gt;
  K PNTROOT&lt;br /&gt;
 DELETELOCK2	;&lt;br /&gt;
  L +^AUPNPAT(DELIEN2):1&lt;br /&gt;
  I $T G DODELETE2&lt;br /&gt;
  E  G DELETELOCK2&lt;br /&gt;
 DODELETE2	;&lt;br /&gt;
  S DELIEN=DUZ(2)_&amp;quot;,&amp;quot;_DELIEN&lt;br /&gt;
  S PNTROOT(9000001.41,DELIEN,.02)=&amp;quot;d&amp;quot;_PIDSEG(&amp;quot;NO&amp;quot;)&lt;br /&gt;
  D FILE^DIE(&amp;quot;&amp;quot;,&amp;quot;PNTROOT&amp;quot;) ;change HRN to begin with a &amp;quot;d&amp;quot;&lt;br /&gt;
  L -^AUPNPAT(DELIEN2)&lt;br /&gt;
  K ^DPT(&amp;quot;ACSPATNO&amp;quot;,PIDSEG(&amp;quot;NO&amp;quot;)) ;KILL xREF!!&lt;br /&gt;
  S ^ACSERR(ERRDATE,&amp;quot;DELETE COMPLETE&amp;quot;)=&amp;quot;(&amp;quot;_PIDSEG(&amp;quot;NO&amp;quot;)_&amp;quot;)&amp;quot;_PIDSEGNAME ;)&lt;br /&gt;
  K DELIEN,DELIEN2&lt;br /&gt;
  Q&lt;br /&gt;
 DELETENOTFOUND	;&lt;br /&gt;
  S ^ACSERR(ERRDATE,&amp;quot;DELETE COMPLETE&amp;quot;)=&amp;quot;PATIENT NOT FOUND (&amp;quot;_PIDSEG(&amp;quot;NO&amp;quot;)_&amp;quot;)&amp;quot;_PIDSEGNAME ;)&lt;br /&gt;
  Q&lt;br /&gt;
 MODERRDATE	;*p3&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;JAN&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;01&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;FEB&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;02&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;MAR&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;03&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;APR&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;04&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;MAY&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;05&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;JUN&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;06&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;JUL&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;07&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;AUG&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;08&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;SEP&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;09&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;OCT&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;10&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;NOV&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;11&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;DEC&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;12&amp;quot;&lt;br /&gt;
  ;convert to &amp;quot;mm/dd/yyyy&amp;quot; format&lt;br /&gt;
  S $E(ERRDATE,6)=&amp;quot;&amp;quot;&lt;br /&gt;
  S $E(ERRDATE,3)=&amp;quot;/&amp;quot;,$E(ERRDATE,6)=&amp;quot;/&amp;quot;&lt;br /&gt;
  Q&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  ; ACSPNT2.m --&amp;gt; PROCESS RECEIVED HL7 MESSAGE (ADT-A31) FROM ACS COMPUMD.&lt;br /&gt;
  ; ...continued from ACSPNT.m to process insurance company&lt;br /&gt;
  ;&lt;br /&gt;
  ; DBS CALLS:&lt;br /&gt;
  ; D FILE^DIE   REPLACES EXISTING RECORDS&lt;br /&gt;
  ; D UPDATE^DIE ADDS NEW RECORDS&lt;br /&gt;
  ;&lt;br /&gt;
  ; GLOBAL/LOCAL VARIABLES:&lt;br /&gt;
  ; COUNT        COUNTER FOR INSURANCE INDEX&lt;br /&gt;
  ; INSRESULT    RESULT FROM INSURANCE SEARCH&lt;br /&gt;
  ; INSFINDERR   ERR FROM INSURANCE SEARCH&lt;br /&gt;
  ; INSROOT      FDA_ROOT FOR INSURANCE DBS CALLS&lt;br /&gt;
  ; VALINSROOT   VALIDATED INSROOT&lt;br /&gt;
  ; INSERR       ERR MESSAGES FROM INSURANCE DBS CALLS&lt;br /&gt;
  ; INSIEN       IEN FOR DBS CALLS&lt;br /&gt;
  ; ^CHECK       TEMP STORAGE FOR ERR MESSAGES&lt;br /&gt;
  ;&lt;br /&gt;
  ; COMMENTS:&lt;br /&gt;
  ; ;)           TEMPORARY COMMENT/LINE OF CODE&lt;br /&gt;
  ;&lt;br /&gt;
  ; FILEMAN FILES:&lt;br /&gt;
  ; ^DIC(36,     INSURANCE COMPANY FILE (#36)&lt;br /&gt;
  ;&lt;br /&gt;
  ; last update 5.6.2007 1128&lt;br /&gt;
  ;&lt;br /&gt;
 EN  ;entry point, init&lt;br /&gt;
  N COUNT&lt;br /&gt;
  N INSRESULT,INSFINDERR&lt;br /&gt;
  N VALINSROOT&lt;br /&gt;
  S COUNT=0&lt;br /&gt;
 LOOP    ;loop through each INS segment&lt;br /&gt;
  I COUNT&amp;gt;INSCOUNT G REXIT&lt;br /&gt;
 FINDINS ;&lt;br /&gt;
  D FIND^DIC(36,,&amp;quot;@&amp;quot;,&amp;quot;X&amp;quot;,INSSEG(COUNT,&amp;quot;INS&amp;quot;),,&amp;quot;ACSINSNO&amp;quot;,,,&amp;quot;INSRESULT&amp;quot;,&amp;quot;INSFINDERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;4INSFINDERR&amp;quot;)=INSFINDERR ;)&lt;br /&gt;
  M ^CHECK(&amp;quot;4INSFINDRESULT&amp;quot;)=INSRESULT ;)&lt;br /&gt;
  I $P(INSRESULT(&amp;quot;DILIST&amp;quot;,0),&amp;quot;^&amp;quot;,1)=0 G DOUPDATEDIE ;if no entries for ACSINSNO found, go to update (add)&lt;br /&gt;
  ;fall through if insurance company found&lt;br /&gt;
  ;&lt;br /&gt;
 DOFILEDIE   ;&lt;br /&gt;
  N INSROOT,INSERR&lt;br /&gt;
  N INSIEN&lt;br /&gt;
  S INSIEN=INSRESULT(&amp;quot;DILIST&amp;quot;,2,1)_&amp;quot;,&amp;quot; ;set IEN from returned array plus comma&lt;br /&gt;
  S INSROOT(36,INSIEN,.01)=$G(INSSEG(COUNT,&amp;quot;NAME&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.05)=&amp;quot;NO&amp;quot; ;inactive flag&lt;br /&gt;
  S INSROOT(36,INSIEN,.111)=$G(INSSEG(COUNT,&amp;quot;ADDR1&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.112)=$G(INSSEG(COUNT,&amp;quot;ADDR2&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.114)=$G(INSSEG(COUNT,&amp;quot;CITY&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.115)=$G(INSSEG(COUNT,&amp;quot;STATE&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.116)=$G(INSSEG(COUNT,&amp;quot;ZIP&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.131)=$G(INSSEG(COUNT,&amp;quot;PHONE&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,1)=&amp;quot;Y&amp;quot; ;REIMBURSE?&lt;br /&gt;
  S INSROOT(36,INSIEN,2)=&amp;quot;0&amp;quot; ;SIGNATURE REQUIRED ON BILL?&lt;br /&gt;
  S INSIEN=INSRESULT(&amp;quot;DILIST&amp;quot;,2,1)&lt;br /&gt;
  ;do validation&lt;br /&gt;
  D VALS^DIE(&amp;quot;&amp;quot;,&amp;quot;INSROOT&amp;quot;,&amp;quot;VALINSROOT&amp;quot;,&amp;quot;VALERR&amp;quot;)&lt;br /&gt;
  N INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  S INDEX=&amp;quot;&amp;quot;&lt;br /&gt;
  S ERRCOUNT=1&lt;br /&gt;
  F  S INDEX=$O(VALINSROOT(36,INSIEN_&amp;quot;,&amp;quot;,INDEX)) Q:INDEX=&amp;quot;&amp;quot;  D&lt;br /&gt;
  . I VALINSROOT(36,INSIEN_&amp;quot;,&amp;quot;,INDEX)=&amp;quot;^&amp;quot; S ERRNUM=$P(VALERR(&amp;quot;DIERR&amp;quot;),&amp;quot;^&amp;quot;,1)&lt;br /&gt;
  . I  S ^ACSERR(ERRDATE,&amp;quot;ACSPNT2&amp;quot;,&amp;quot;FILE ERRNUM&amp;quot;)=ERRNUM&lt;br /&gt;
  . I  D LOGERR&lt;br /&gt;
  . I  Q&lt;br /&gt;
  K INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  ;&lt;br /&gt;
  ;begin file locks&lt;br /&gt;
 FILELOCKDIC ;&lt;br /&gt;
  L +^DIC(36,INSIEN):1 ;try lock&lt;br /&gt;
  I $T G DOFILEDIEFILER ;if lock, continue&lt;br /&gt;
  E  G FILELOCKDIC ;if lock fails, keep trying&lt;br /&gt;
  ;end locks&lt;br /&gt;
  ;&lt;br /&gt;
 DOFILEDIEFILER  ;&lt;br /&gt;
  D FILE^DIE(&amp;quot;S&amp;quot;,&amp;quot;VALINSROOT&amp;quot;,&amp;quot;INSERR&amp;quot;)&lt;br /&gt;
  L -^DIC(36,INSIEN)&lt;br /&gt;
  K INSROOT,INSERR&lt;br /&gt;
  K INSIEN&lt;br /&gt;
  G NEXTSEGMENT&lt;br /&gt;
 DOUPDATEDIE ;&lt;br /&gt;
  N INSROOT,INSERR&lt;br /&gt;
  N INSIEN&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.01)=$G(INSSEG(COUNT,&amp;quot;NAME&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.05)=&amp;quot;NO&amp;quot; ;inactive flag&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.111)=$G(INSSEG(COUNT,&amp;quot;ADDR1&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.112)=$G(INSSEG(COUNT,&amp;quot;ADDR2&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.114)=$G(INSSEG(COUNT,&amp;quot;CITY&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.115)=$G(INSSEG(COUNT,&amp;quot;STATE&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.116)=$G(INSSEG(COUNT,&amp;quot;ZIP&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.131)=$G(INSSEG(COUNT,&amp;quot;PHONE&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,1)=&amp;quot;Y&amp;quot; ;REIMBURSE?&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,2)=&amp;quot;0&amp;quot; ;SIGNATURE REQUIRED ON BILL?&lt;br /&gt;
  ;do validation&lt;br /&gt;
  D VALS^DIE(&amp;quot;&amp;quot;,&amp;quot;INSROOT&amp;quot;,&amp;quot;VALINSROOT&amp;quot;,&amp;quot;VALERR&amp;quot;)&lt;br /&gt;
  N INDEX,ERRCOUNT,ERRNUM&lt;br /&gt;
  S INDEX=&amp;quot;&amp;quot;&lt;br /&gt;
  S ERRCOUNT=1&lt;br /&gt;
  F  S INDEX=$O(VALINSROOT(36,&amp;quot;?+1,&amp;quot;,INDEX)) Q:INDEX=&amp;quot;&amp;quot;  D&lt;br /&gt;
  . I VALINSROOT(36,&amp;quot;?+1,&amp;quot;,INDEX)=&amp;quot;^&amp;quot; S ERRNUM=$P(VALERR(&amp;quot;DIERR&amp;quot;),&amp;quot;^&amp;quot;,1)&lt;br /&gt;
  . I  S ^ACSERR(ERRDATE,&amp;quot;ACSPNT2&amp;quot;,&amp;quot;UPDATE ERRNUM&amp;quot;)=ERRNUM&lt;br /&gt;
  . I  D LOGERR&lt;br /&gt;
  . I  S VALFLAG=1&lt;br /&gt;
  . I  Q&lt;br /&gt;
  K INDEX,ERRCOUNT,ERRNUM&lt;br /&gt;
  I VALFLAG Q ;if validation fails, return to ACSPNT&lt;br /&gt;
 DOUPDATEDIEFILER    ;&lt;br /&gt;
  ;)S INSERR(&amp;quot;DIERR&amp;quot;)=&amp;quot;&amp;quot;&lt;br /&gt;
  D UPDATE^DIE(&amp;quot;S&amp;quot;,&amp;quot;VALINSROOT&amp;quot;,&amp;quot;INSIEN&amp;quot;,&amp;quot;INSERR&amp;quot;)&lt;br /&gt;
  I $G(INSIEN(1))&#039;=&amp;quot;&amp;quot; S ^DIC(36,&amp;quot;ACSINSNO&amp;quot;,INSSEG(COUNT,&amp;quot;INS&amp;quot;),INSIEN(1))=&amp;quot;ACTIVE&amp;quot; ;set up my cross-reference&lt;br /&gt;
  K INSROOT,INSERR&lt;br /&gt;
  K INSIEN&lt;br /&gt;
 NEXTSEGMENT ;&lt;br /&gt;
  S COUNT=COUNT+1&lt;br /&gt;
  G LOOP&lt;br /&gt;
 REXIT   ;&lt;br /&gt;
  K COUNT&lt;br /&gt;
  K INSRESULT,INSFINDERR&lt;br /&gt;
  K VALINSROOT&lt;br /&gt;
  Q&lt;br /&gt;
 LOGERR  ;&lt;br /&gt;
  F  Q:ERRCOUNT&amp;gt;ERRNUM  D&lt;br /&gt;
  . M ^ACSERR(ERRDATE,&amp;quot;ERR TEXT&amp;quot;)=VALERR(&amp;quot;DIERR&amp;quot;,ERRCOUNT,&amp;quot;TEXT&amp;quot;)&lt;br /&gt;
  . S ERRCOUNT=ERRCOUNT+1&lt;br /&gt;
  Q&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  ; ACSPNT3.m --&amp;gt; PROCESS RECEIVED HL7 MESSAGE (ADT-A31) FROM ACS COMPUMD.&lt;br /&gt;
  ; ...continued from ACSPNT.m to process health record number&lt;br /&gt;
  ; ...*p1 adds coordinating master of record to patient&lt;br /&gt;
  ;&lt;br /&gt;
  ; DBS CALLS:&lt;br /&gt;
  ; D UPDATE^DIE ADDS NEW RECORDS&lt;br /&gt;
  ;&lt;br /&gt;
  ; GLOBAL/LOCAL VARIABLES:&lt;br /&gt;
  ; FAC          USER&#039;S INSTITUTION(FACILITY)&lt;br /&gt;
  ; PFIEN        INTERNAL ENTRY NUMBER IN PATIENT FILE - FROM ACSPNT&lt;br /&gt;
  ; APN          ACS PATIENT NUMBER - FROM ACSPNT&lt;br /&gt;
  ; HRNROOT      ROOT FOR HRN FILE&lt;br /&gt;
  ; HRNSROOT     ROOT FOR HRN SUBFILE&lt;br /&gt;
  ; HRNIEN       INTERNAL ENTRY NUMBER FOR HRN FILE&lt;br /&gt;
  ; HRNSIEN      INTERNAL ENTRY NUMBER FOR HUN SUBFILE&lt;br /&gt;
  ; HRNERR       ERR FOR UPDATE HRN FILE&lt;br /&gt;
  ; HRNSERR      ERR FOR UPDATE HRN SUBFILE&lt;br /&gt;
  ; PATROOT      ROOT FOR PATIENT FILE *p1&lt;br /&gt;
  ; PATIEN       INTERNAL ENTRY NUMBER FOR PATIENT FILE *p1&lt;br /&gt;
  ; PATERR       ERR FOR PATIENT FILE *p1&lt;br /&gt;
  ; DATE         DATE IN INTERNAL FILEMAN FORMAT&lt;br /&gt;
  ; ^CHECK       TEMP STORAGE FOR ERR MESSAGES&lt;br /&gt;
  ;&lt;br /&gt;
  ; COMMENTS:&lt;br /&gt;
  ; ;)           TEMPORARY COMMENT/LINE OF CODE&lt;br /&gt;
  ;&lt;br /&gt;
  ; FILEMAN FILES:&lt;br /&gt;
  ; ^AUPNPAT     IHS PATIENT (#9000001)  9000001.41 - HRN SUBFILE&lt;br /&gt;
  ; ^DPT         PATIENT FILE (#2)       2.991 - ICN SUBFILE *p1&lt;br /&gt;
  ;&lt;br /&gt;
  ; last update 6.26.2007 0954&lt;br /&gt;
  ; *p1 added 6.26.2007 - this adds ICN to patient only because it is required, and the ICN is not correct&lt;br /&gt;
  ;                       for use with MPI as it should be. .04=&amp;quot;1&amp;quot; for locally assigned ICN.&lt;br /&gt;
  ;&lt;br /&gt;
 EN  ;entry point, init&lt;br /&gt;
  N FAC,HRNROOT,HRNSROOT,HRNIEN,HRNSIEN,HRNERR,HRNSERR&lt;br /&gt;
  N PFIEN,APN,DATE&lt;br /&gt;
  N PATROOT,PATIEN,PATERR&lt;br /&gt;
  S PFIEN=FDAIEN(1)&lt;br /&gt;
  S APN=PIDSEG(&amp;quot;NO&amp;quot;)&lt;br /&gt;
  S FAC=DUZ(2)&lt;br /&gt;
  D DT^DILF(,&amp;quot;NOW&amp;quot;,.DATE)&lt;br /&gt;
 UPDATE ;&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.01)=PFIEN&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.02)=DATE&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.03)=DATE&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.11)=DUZ  ;&amp;quot;establishing user&amp;quot;&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.12)=DUZ  ;&amp;quot;USER LAST UPDATE&amp;quot;&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.16)=DATE&lt;br /&gt;
  D UPDATE^DIE(&amp;quot;S&amp;quot;,&amp;quot;HRNROOT&amp;quot;,&amp;quot;HRNIEN&amp;quot;,&amp;quot;HRNERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;HRNERR&amp;quot;)=HRNERR ;)&lt;br /&gt;
  S HRNSIEN(1)=FAC&lt;br /&gt;
  S HRNSIEN=&amp;quot;?+1,&amp;quot;_HRNIEN(1)_&amp;quot;,&amp;quot;&lt;br /&gt;
  S HRNSROOT(9000001.41,HRNSIEN,.01)=FAC&lt;br /&gt;
  S HRNSROOT(9000001.41,HRNSIEN,.02)=APN&lt;br /&gt;
  D UPDATE^DIE(,&amp;quot;HRNSROOT&amp;quot;,&amp;quot;HRNSIEN&amp;quot;,&amp;quot;HRNSERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;HRNSERR&amp;quot;)=HRNSERR ;)&lt;br /&gt;
 FILECMR	; this section is *p1 (CMR - COORDINATING MASTER OF RECORD)&lt;br /&gt;
  S PATROOT(2,PFIEN_&amp;quot;,&amp;quot;,991.01)=PFIEN&lt;br /&gt;
  S PATROOT(2,PFIEN_&amp;quot;,&amp;quot;,991.03)=FAC&lt;br /&gt;
  S PATROOT(2,PFIEN_&amp;quot;,&amp;quot;,991.04)=&amp;quot;1&amp;quot; ;locally assigned ICN&lt;br /&gt;
  D FILE^DIE(&amp;quot;S&amp;quot;,&amp;quot;PATROOT&amp;quot;,&amp;quot;PATERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;PATCMRERR&amp;quot;)=PATERR ;)&lt;br /&gt;
 REXIT   ;EXIT&lt;br /&gt;
  K FAC,HRNROOT,HRNSROOT,HRNIEN,HRNSIEN,HRNERR,HRNSERR&lt;br /&gt;
  K PFIEN,APN,DATE&lt;br /&gt;
  K PATROOT,PATIEN,PATERR&lt;br /&gt;
  Q&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:cmdupre]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=5057</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=5057"/>
		<updated>2007-07-20T21:22:45Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in utilizing VistA to provide our customers with an EHR solution.&lt;br /&gt;
&lt;br /&gt;
eMail me with any questions: caseydupre@gmail.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[HL7 Multi-Listener]]&lt;br /&gt;
&lt;br /&gt;
[[Register a patient via HL7]]&lt;br /&gt;
&lt;br /&gt;
[[RPC&#039;s with Visual Cpp]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=HL7_Multi-Listener&amp;diff=11193</id>
		<title>HL7 Multi-Listener</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=HL7_Multi-Listener&amp;diff=11193"/>
		<updated>2007-07-20T21:20:27Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Configure HL7 multi-listener and set-up HL7 link parameters.&lt;br /&gt;
&lt;br /&gt;
This instruction assumes that the reader is familiar with the linux&lt;br /&gt;
operating system and  the vi text editor or an equivalent.  It also&lt;br /&gt;
assumes that you have a working  installation and configuration of&lt;br /&gt;
VistA.  For this example, I am running Bhaskar&#039;s  SemiViva 2.3.1 on&lt;br /&gt;
ubuntu linux 7.04.  My machine&#039;s address will be 10.1.1.1, my HL7&lt;br /&gt;
listner will use port 9201, and my user will be root.&lt;br /&gt;
&lt;br /&gt;
All commands should be issued as root and will be expressed as so:&lt;br /&gt;
 &amp;lt;type this&amp;gt;.   &lt;br /&gt;
 &lt;br /&gt;
Any output or text to enter will be listed between&lt;br /&gt;
brackets and astricks, i.e.:&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 text to enter&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Background on my installation and paths:&lt;br /&gt;
&lt;br /&gt;
I unzipped the SemiViva package to /usr/local/ which created directory&lt;br /&gt;
VistAOfficeEHR_2.3.1.  So, my routines are stored in /usr/local/&lt;br /&gt;
VistAOfficeEHR_2.3.1/r.  Also, I ran install so that I created a child&lt;br /&gt;
environment in /vista.  So, my path to gtm is /vista/gtm_V5.2-000/.&lt;br /&gt;
&lt;br /&gt;
First, I installed xinetd because this package was not included by&lt;br /&gt;
default in the ubuntu 7.04 installation.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;apt-get update&amp;gt;&lt;br /&gt;
 &amp;lt;apt-get install xinetd&amp;gt;    installs the xinetd package.&lt;br /&gt;
&lt;br /&gt;
Make sure /etc/xinetd.conf contains &amp;quot;includedir /etc/xinetd.d&amp;quot; as&lt;br /&gt;
shown:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;cat /etc/xinetd.conf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 # Simple configuration file for xinetd&lt;br /&gt;
 #&lt;br /&gt;
 # Some defaults, and include /etc/xinetd.d/&lt;br /&gt;
 &lt;br /&gt;
 defaults&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 # Please note that you need a log_type line to be able to use log_on_success&lt;br /&gt;
 # and log_on_failure. The default is the following :&lt;br /&gt;
 # log_type = SYSLOG daemon info&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 includedir /etc/xinetd.d&lt;br /&gt;
 *******]&lt;br /&gt;
 &lt;br /&gt;
Create a VistA routine that will start the HL7 process when a message&lt;br /&gt;
is received&lt;br /&gt;
(make sure HLPORT is set to the port you want to use)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;vi /usr/local/VistAOfficeEHR_2.3.1/r/VISTAHL7.m&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [*******&lt;br /&gt;
  N HLDP,HLPORT,HLPRTS,IO&lt;br /&gt;
  S HLDP=0,HLPORT=9201&lt;br /&gt;
  F  S HLDP=$O(^HLCS(870,&amp;quot;E&amp;quot;,&amp;quot;M&amp;quot;,HLDP)) Q:&#039;HLDP  D  Q:(HLPRTS=HLPORT)&lt;br /&gt;
  .S HLPRTS=$P(^HLCS(870,HLDP,400),&amp;quot;^&amp;quot;,2)&lt;br /&gt;
  .Q&lt;br /&gt;
  I &#039;HLDP D ^%ZTER Q  K HLPORT,HLPRTS&lt;br /&gt;
  S IO=$P U IO:(NOWRAP:NODELIMITER:IOERROR=&amp;quot;TRAP&amp;quot;)&lt;br /&gt;
  D LISTEN^HLCSTCP&lt;br /&gt;
  Q&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Now, create a script in the gtm directory to call that routine:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;vi /vista/gtm_V5.2-000/vistahl7&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [*******&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 export HOME=/home/`whoami`&lt;br /&gt;
 cd `dirname $0`&lt;br /&gt;
 source ./env&lt;br /&gt;
 cd ../tmp&lt;br /&gt;
 mumps -run ^VISTAHL7&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
do a chmod on the vistahl7 script to make it executable:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;chmod +x /vista/gtm_V5.2-000/vistahl7&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, create a configuration file in xinetd.d to call that script:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;vi /etc/xinetd.d/vistahl7&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 service vistahl7&lt;br /&gt;
 {&lt;br /&gt;
         type = UNLISTED&lt;br /&gt;
         port = 9201&lt;br /&gt;
         socket_type = stream&lt;br /&gt;
         protocol = tcp&lt;br /&gt;
         user = root&lt;br /&gt;
         server = /vista/gtm_V5.2-000/vistahl7&lt;br /&gt;
         disable = no&lt;br /&gt;
         wait = no&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Finally, add the following entry at the end of /etc/services&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 vistahl7        9201/tcp                        # vista hl7 listener&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Restart the xinetd service with:&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/etc/init.d/xinetd restart&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
When you have a connection to the socket just created, you should be&lt;br /&gt;
able to check it with this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;netstat -lan | grep 9201&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [*******&lt;br /&gt;
 tcp        0      0 0.0.0.0:9201            0.0.0.0:*&lt;br /&gt;
 LISTEN&lt;br /&gt;
 tcp        0      0 10.1.1.1:9201         x.x.x.x:59972&lt;br /&gt;
 ESTABLISHED&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have not yet configured the VistA HL7 subsystem, check out this really nice website:&lt;br /&gt;
http://www.geocities.com/kdtop3/&lt;br /&gt;
&lt;br /&gt;
All you have to do to start using the new multi-listener is change your link type to MULTI LISTENER on the link edit screen, then stop and start the link&lt;br /&gt;
manager.  What you do with the message received is now up to you.  I wrote a routine to file patient and insurance information into the VistA database when demographics are received via HL7 from our billing system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Register a patient via HL7]]&lt;br /&gt;
&lt;br /&gt;
[[User:cmdupre]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Register_a_patient_via_HL7&amp;diff=5037</id>
		<title>Register a patient via HL7</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Register_a_patient_via_HL7&amp;diff=5037"/>
		<updated>2007-07-20T21:19:26Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are my site-specific routines for registering a patient via HL7 messaging:&lt;br /&gt;
&lt;br /&gt;
  ; ACSPNT.m --&amp;gt; PROCESS RECEIVED HL7 MESSAGE (ADT-A31) FROM ACS COMPUMD.&lt;br /&gt;
  ;&lt;br /&gt;
  ;&lt;br /&gt;
  ; DBS CALLS:&lt;br /&gt;
  ; D FILE^DIE   REPLACES EXISTING RECORDS&lt;br /&gt;
  ; D UPDATE^DIE ADDS NEW RECORDS&lt;br /&gt;
  ;&lt;br /&gt;
  ; GLOBAL/LOCAL VARIABLES:&lt;br /&gt;
  ; PIDSEG       CURRENT MESSAGE PID SEGMENT&lt;br /&gt;
  ; PIDSEGNAME   TEMP STORAGE OF PATIENT NAME FOR FORMATTING&lt;br /&gt;
  ; INSSEG       ARRAY OF CURRENT MESSAGE IN1 SEGMENTS&lt;br /&gt;
  ; EVNSEG       EVENT SEGMENT *p2&lt;br /&gt;
  ; PNTROOT      FDA_ROOT FOR PATIENT DBS CALLS&lt;br /&gt;
  ; VALPNTROOT   VALIDATED PNTROOT&lt;br /&gt;
  ; PNTINSROOT   FDA_ROOT FOR PATIENT INSURANCE&lt;br /&gt;
  ; PNTERR       ERR MESSAGES FROM PATIENT DBS CALL&lt;br /&gt;
  ; VALERR       ERR MESSAGES FROM VALIDATION CALL&lt;br /&gt;
  ; INSCOUNT     COUNTER FOR INSURANCE ARRAY&lt;br /&gt;
  ; FDAIEN       INTERNAL ENTRY NUMBER DERRIVED FROM PATIENT NUMBER&lt;br /&gt;
  ; FINDERR      ERR MESSAGES FROM FIND^DIC CALL&lt;br /&gt;
  ; SEG          TEMP STORAGE FOR EACH MESSAGE SEGMENT&lt;br /&gt;
  ; HLMSG        MESSAGE CONTROL FOR $$STARTMSG^HLPRS&lt;br /&gt;
  ; HLMTIENS     CURENT MESSAGE RECEIVED&lt;br /&gt;
  ; HEADER       CURRENT MESSAGE HEADER&lt;br /&gt;
  ; RESULT       RETURNED ARRAY FROM FIND^DIC&lt;br /&gt;
  ; SSNRESULT    RESULT OF SOCIAL SECURITY SEARCH&lt;br /&gt;
  ; SSNFINDERR   ERR MESSAGES FROM SOCIAL SECURITY SEARCH&lt;br /&gt;
  ; SSNFOUND     FLAG SET IF SOCIAL SECURITY NUMBER FOUND IN DATABASE&lt;br /&gt;
  ; SSNIEN       IEN OF PATIENT WHERE SSN FOUND *p1&lt;br /&gt;
  ; VALFLAG      SET IF VAL FAILS&lt;br /&gt;
  ; ^ACSERR      LOGFILE FOR VALIDATION ERRORS&lt;br /&gt;
  ; ERRDATE      DATE FOR ERR MESSAGE LOG&lt;br /&gt;
  ; ^CHECK       TEMP STORAGE FOR ERROR MESSAGES&lt;br /&gt;
  ;&lt;br /&gt;
  ; COMMENTS:&lt;br /&gt;
  ; ;)           TEMPORARY COMMENT/LINE OF CODE&lt;br /&gt;
  ;&lt;br /&gt;
  ; FILEMAN FILES:&lt;br /&gt;
  ; ^DPT         PATIENT     (#2)&lt;br /&gt;
  ;&lt;br /&gt;
  ; last update 7.05.2007 0847&lt;br /&gt;
  ; *p1 added 6.26.2007 to account for ssn being reset on filing existing patient information&lt;br /&gt;
  ; *p2 added 7.02.2007 for coordinating deletion of patient with billing system&lt;br /&gt;
  ; *p3 added 7.05.2007 to change month name to a number for sorting err message&lt;br /&gt;
  ;&lt;br /&gt;
 EN  ;entry point, init&lt;br /&gt;
  N ERRDATE&lt;br /&gt;
  N FDAIEN&lt;br /&gt;
  N HLMSG,HEADER,SEG&lt;br /&gt;
  N PIDSEG,PNTROOT,PNTERR,PIDSEGNAME&lt;br /&gt;
  N INSCOUNT,INSSEG&lt;br /&gt;
  N RESULT,FINDERR&lt;br /&gt;
  N SSNRESULT,SSNFINDERR,SSNFOUND,SSNIEN&lt;br /&gt;
  N VALPNTROOT,VALFLAG,VALERR&lt;br /&gt;
  K ^CHECK&lt;br /&gt;
  S VALFLAG=0&lt;br /&gt;
  S SSNIEN=0&lt;br /&gt;
  S ^CHECK(&amp;quot;0BEGIN&amp;quot;)=&amp;quot;VERSION 4.5 - START&amp;quot; ;)&lt;br /&gt;
  S SSNFOUND=0 ;set ssn found flag to false&lt;br /&gt;
  S DUZ=1,DUZ(0)=&amp;quot;@&amp;quot; ;initialize user number and give programmer access to files&lt;br /&gt;
  ;set current d/t&lt;br /&gt;
  N TEMPDATE&lt;br /&gt;
  D DT^DILF(&amp;quot;ERSX&amp;quot;,&amp;quot;NOW&amp;quot;,.TEMPDATE)&lt;br /&gt;
  S ERRDATE=TEMPDATE(0)&lt;br /&gt;
  D MODERRDATE ;*p3&lt;br /&gt;
  K TEMPDATE&lt;br /&gt;
 GETHEADER   ;&lt;br /&gt;
  ;&lt;br /&gt;
  ;get received message header using HLMTIENS(last message received)&lt;br /&gt;
  I $$STARTMSG^HLPRS(.HLMSG,HLMTIENS,.HEADER) G GETSEGMENT&lt;br /&gt;
  ;&lt;br /&gt;
  ;Fall through if message not found&lt;br /&gt;
  S ^ACSERR(ERRDATE,&amp;quot;ACSPNT&amp;quot;,&amp;quot;ERR&amp;quot;)=&amp;quot;** Message Not Found (IEN &amp;quot;_HLMTIENS_&amp;quot;) **&amp;quot;&lt;br /&gt;
  G REXIT ;clean-up and quit this routine&lt;br /&gt;
 GETSEGMENT  ;&lt;br /&gt;
  ;loop through segments&lt;br /&gt;
  S ^CHECK(&amp;quot;0HLMTIENS&amp;quot;)=HLMTIENS ;)&lt;br /&gt;
  S INSCOUNT=0;&lt;br /&gt;
  F  Q:&#039;$$NEXTSEG^HLPRS(.HLMSG,.SEG)  D&lt;br /&gt;
  . I SEG(&amp;quot;SEGMENT TYPE&amp;quot;)=&amp;quot;EVN&amp;quot; ;save EVN segment&lt;br /&gt;
  . I  S EVNSEG(&amp;quot;TYPE&amp;quot;)=$$GET^HLOPRS(.SEG,1)&lt;br /&gt;
  . I SEG(&amp;quot;SEGMENT TYPE&amp;quot;)=&amp;quot;PID&amp;quot; ;save PID segment&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;NO&amp;quot;)=$$GET^HLOPRS(.SEG,3)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;LNAME&amp;quot;)=$$GET^HLOPRS(.SEG,5)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;FNAME&amp;quot;)=$$GET^HLOPRS(.SEG,5,2)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;MI&amp;quot;)=$$GET^HLOPRS(.SEG,5,3)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;REM&amp;quot;)=$$GET^HLOPRS(.SEG,6)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;DOB&amp;quot;)=$$GET^HLOPRS(.SEG,7)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;SEX&amp;quot;)=$$GET^HLOPRS(.SEG,8)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;ADDR1&amp;quot;)=$$GET^HLOPRS(.SEG,11)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;ADDR2&amp;quot;)=$$GET^HLOPRS(.SEG,11,2)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;CITY&amp;quot;)=$$GET^HLOPRS(.SEG,11,3)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;STATE&amp;quot;)=$$GET^HLOPRS(.SEG,11,4)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;ZIP&amp;quot;)=$$GET^HLOPRS(.SEG,11,5)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;HPHONE&amp;quot;)=$$GET^HLOPRS(.SEG,13)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;EMAIL&amp;quot;)=$$GET^HLOPRS(.SEG,13,4)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;WPHONE&amp;quot;)=$$GET^HLOPRS(.SEG,14)&lt;br /&gt;
  . I  S PIDSEG(&amp;quot;SSN&amp;quot;)=$$GET^HLOPRS(.SEG,19)&lt;br /&gt;
  . I SEG(&amp;quot;SEGMENT TYPE&amp;quot;)=&amp;quot;IN1&amp;quot; ;save INS segments&lt;br /&gt;
  . I  ;S INSSEG(INSCOUNT,&amp;quot;PLAN&amp;quot;)=$$GET^HLOPRS(.SEG,2) ;same as INS section&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;INS&amp;quot;)=$$GET^HLOPRS(.SEG,3)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;NAME&amp;quot;)=$$GET^HLOPRS(.SEG,4)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;ADDR1&amp;quot;)=$$GET^HLOPRS(.SEG,5)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;ADDR2&amp;quot;)=$$GET^HLOPRS(.SEG,5,2)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;CITY&amp;quot;)=$$GET^HLOPRS(.SEG,5,3)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;STATE&amp;quot;)=$$GET^HLOPRS(.SEG,5,4)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;ZIP&amp;quot;)=$$GET^HLOPRS(.SEG,5,5)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;PHONE&amp;quot;)=$$GET^HLOPRS(.SEG,7)&lt;br /&gt;
  . I  ;S INSSEG(INSCOUNT,&amp;quot;GRP&amp;quot;)=$$GET^HLOPRS(.SEG,8)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;NOIL&amp;quot;)=$$GET^HLOPRS(.SEG,16)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;NOIF&amp;quot;)=$$GET^HLOPRS(.SEG,16,2)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;NOIM&amp;quot;)=$$GET^HLOPRS(.SEG,16,3)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;REL&amp;quot;)=$$GET^HLOPRS(.SEG,17)&lt;br /&gt;
  . I  S INSSEG(INSCOUNT,&amp;quot;POL&amp;quot;)=$$GET^HLOPRS(.SEG,36)&lt;br /&gt;
  . I  S INSCOUNT=INSCOUNT+1&lt;br /&gt;
  S INSCOUNT=INSCOUNT-1&lt;br /&gt;
  ;all validation performed on cobol side with exception of SSN.&lt;br /&gt;
  ;convert DOB from yyyymmdd to mmddyyyy&lt;br /&gt;
  S PIDSEG(&amp;quot;DOB&amp;quot;)=$E(PIDSEG(&amp;quot;DOB&amp;quot;),5,8)_$E(PIDSEG(&amp;quot;DOB&amp;quot;),1,4)&lt;br /&gt;
  ;set PIDSEGNAME format&lt;br /&gt;
  S PIDSEGNAME=$G(PIDSEG(&amp;quot;LNAME&amp;quot;))_&amp;quot;,&amp;quot;_$G(PIDSEG(&amp;quot;FNAME&amp;quot;))&lt;br /&gt;
  I $G(PIDSEG(&amp;quot;MI&amp;quot;))&#039;=&amp;quot;&amp;quot; S PIDSEGNAME=PIDSEGNAME_&amp;quot; &amp;quot;_PIDSEG(&amp;quot;MI&amp;quot;) ;if midinit exists, append to name&lt;br /&gt;
  ;set INSSEGNOI format and convert relationship code&lt;br /&gt;
  N COUNT,TEMP&lt;br /&gt;
  S COUNT=0&lt;br /&gt;
  S TEMP=&amp;quot;&amp;quot;&lt;br /&gt;
  F  Q:COUNT&amp;gt;INSCOUNT  D&lt;br /&gt;
  . S INSSEG(COUNT,&amp;quot;NOI&amp;quot;)=$G(INSSEG(COUNT,&amp;quot;NOIL&amp;quot;))_&amp;quot;,&amp;quot;_$G(INSSEG(COUNT,&amp;quot;NOIF&amp;quot;))&lt;br /&gt;
  . I $G(INSSEG(COUNT,&amp;quot;NOIM&amp;quot;))&#039;=&amp;quot;&amp;quot; S INSSEG(COUNT,&amp;quot;NOI&amp;quot;)=INSSEG(COUNT,&amp;quot;NOI&amp;quot;)_&amp;quot; &amp;quot;_INSSEG(COUNT,&amp;quot;NOIM&amp;quot;)&lt;br /&gt;
  . I INSSEG(COUNT,&amp;quot;REL&amp;quot;)=&amp;quot;0&amp;quot; S TEMP=&amp;quot;PATIENT&amp;quot;&lt;br /&gt;
  . I INSSEG(COUNT,&amp;quot;REL&amp;quot;)=&amp;quot;1&amp;quot; S TEMP=&amp;quot;SPOUSE&amp;quot;&lt;br /&gt;
  . I INSSEG(COUNT,&amp;quot;REL&amp;quot;)=&amp;quot;2&amp;quot; S TEMP=&amp;quot;NATURAL CHILD&amp;quot;&lt;br /&gt;
  . I TEMP=&amp;quot;&amp;quot; S TEMP=&amp;quot;DO NOT USE&amp;quot;&lt;br /&gt;
  . S INSSEG(COUNT,&amp;quot;REL&amp;quot;)=TEMP&lt;br /&gt;
  . S TEMP=&amp;quot;&amp;quot;&lt;br /&gt;
  . S COUNT=COUNT+1&lt;br /&gt;
  K COUNT,TEMP&lt;br /&gt;
  M ^CHECK(&amp;quot;1PATIENTINFO&amp;quot;)=PIDSEG ;)&lt;br /&gt;
  M ^CHECK(&amp;quot;1INSURANCE&amp;quot;)=INSSEG ;)&lt;br /&gt;
  M ^CHECK(&amp;quot;1EVENT&amp;quot;)=EVNSEG ;)&lt;br /&gt;
  I EVNSEG(&amp;quot;TYPE&amp;quot;)=&amp;quot;A29&amp;quot; ;*p2 delete message received &lt;br /&gt;
  I  D DELETEPAT&lt;br /&gt;
  I  G REXIT&lt;br /&gt;
  D EN^ACSPNT2 ;do insurance company processing&lt;br /&gt;
  I VALFLAG G REXIT ;if validation fails in ACSPNT2, quit&lt;br /&gt;
  ;&lt;br /&gt;
  ;&lt;br /&gt;
 PROCESSPATIENT  ;&lt;br /&gt;
  ;)FIND^DIC(FILE,IENS,FIELDS,FLAGS,[.]VALUE,NUMBER,[.]INDEXES,[.]SCREEN,IDENTIFIER,TARGET_ROOT,MSG_ROOT)&lt;br /&gt;
  ;)finds ACS patient number in ^DPT : Patient File (#2)&lt;br /&gt;
  ;)RETURNED VALUES&lt;br /&gt;
  ;) List ^FOUND&lt;br /&gt;
  ;) ^FOUND(&amp;quot;DILIST&amp;quot;,0)=&amp;quot;1^*^0^&amp;quot;  &amp;lt;--1ST NUMBER IS HOW MANY FOUND (0 OR 1)&lt;br /&gt;
  ;) ^FOUND(&amp;quot;DILIST&amp;quot;,2,1)=1       &amp;lt;--IEN&lt;br /&gt;
  ;)USE THIS TO ADD NEW PATIENT WITH ACSPATNO (CROSS REF IEN)&lt;br /&gt;
  ;)S ^DPT(&amp;quot;ACSPATNO&amp;quot;,(patient number from acs),1)=&amp;quot;&amp;quot; &amp;lt;--1 EQUALS IEN&lt;br /&gt;
  ;&lt;br /&gt;
  I PIDSEG(&amp;quot;SSN&amp;quot;)&#039;?9N S PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;&amp;quot; ;if ssn is != to pattern (9 numbers), set to &amp;quot;&amp;quot;&lt;br /&gt;
  E  D FIND^DIC(2,,&amp;quot;@&amp;quot;,&amp;quot;X&amp;quot;,PIDSEG(&amp;quot;SSN&amp;quot;),,&amp;quot;SSN&amp;quot;,,,&amp;quot;SSNRESULT&amp;quot;,&amp;quot;SSNFINDERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;2SSNRESULT&amp;quot;)=SSNRESULT ;)&lt;br /&gt;
  M ^CHECK(&amp;quot;2SSNFINDERR&amp;quot;)=SSNFINDERR ;)&lt;br /&gt;
  I PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;&amp;quot; S PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;@&amp;quot; G CHECKACSPATNO ;if ssn blank, set to &amp;quot;@&amp;quot;&lt;br /&gt;
  I $P(SSNRESULT(&amp;quot;DILIST&amp;quot;,0),&amp;quot;^&amp;quot;,1)&#039;=0 S SSNFOUND=1 ;if found ssn, set ssn found flag to true&lt;br /&gt;
  I  S SSNIEN=SSNRESULT(&amp;quot;DILIST&amp;quot;,2,1) ;*p1&lt;br /&gt;
  S ^CHECK(&amp;quot;2SSNFLAG&amp;quot;)=SSNFOUND ;)&lt;br /&gt;
 CHECKACSPATNO   ;&lt;br /&gt;
  M ^CHECK(&amp;quot;3PROCESSEDSSN&amp;quot;)=PIDSEG(&amp;quot;SSN&amp;quot;) ;)&lt;br /&gt;
  D FIND^DIC(2,,&amp;quot;@&amp;quot;,&amp;quot;X&amp;quot;,PIDSEG(&amp;quot;NO&amp;quot;),,&amp;quot;ACSPATNO&amp;quot;,,,&amp;quot;RESULT&amp;quot;,&amp;quot;FINDERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;4FINDERR&amp;quot;)=FINDERR ;)&lt;br /&gt;
  M ^CHECK(&amp;quot;4FINDRESULT&amp;quot;)=RESULT ;)&lt;br /&gt;
  I $P(RESULT(&amp;quot;DILIST&amp;quot;,0),&amp;quot;^&amp;quot;,1)=0 G DOUPDATEDIE ;if no entries for ACSPATNO found, go to update (add)&lt;br /&gt;
  ;fall through for found entry&lt;br /&gt;
  ;&lt;br /&gt;
  ;&lt;br /&gt;
 DOFILEDIE   ;&lt;br /&gt;
  ;set fields using $GET ($G) to avoid &#039;variable undefined&#039; error&lt;br /&gt;
  N TEMPIEN&lt;br /&gt;
  S TEMPIEN=RESULT(&amp;quot;DILIST&amp;quot;,2,1)&lt;br /&gt;
  S FDAIEN=RESULT(&amp;quot;DILIST&amp;quot;,2,1)_&amp;quot;,&amp;quot; ;set IEN from returned array plus comma&lt;br /&gt;
  I TEMPIEN=SSNIEN G DOFILEDIENEXT ;*p1&lt;br /&gt;
  I SSNFOUND S PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;@&amp;quot; ;if ssn exists in database, set ssn to @ to avoid duplicate ssn error on add new entry&lt;br /&gt;
 DOFILEDIENEXT   ;*p1&lt;br /&gt;
  I PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;@&amp;quot; S PNTROOT(2,FDAIEN,.363)=&amp;quot;--&amp;quot;&lt;br /&gt;
  I  S PNTROOT(2,FDAIEN,.364)=&amp;quot;&amp;quot;&lt;br /&gt;
  I &#039;SSNFOUND S PNTROOT(2,FDAIEN,.363)=PIDSEG(&amp;quot;SSN&amp;quot;)&lt;br /&gt;
  I  S PNTROOT(2,FDAIEN,.364)=$E(PIDSEG(&amp;quot;SSN&amp;quot;),6,9)&lt;br /&gt;
  I  S PNTROOT(2,FDAIEN,.09)=PIDSEG(&amp;quot;SSN&amp;quot;)&lt;br /&gt;
  K TEMPIEN&lt;br /&gt;
  S ^CHECK(&amp;quot;5FILEIEN&amp;quot;)=FDAIEN ;)&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.01)=PIDSEGNAME&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.091)=$G(PIDSEG(&amp;quot;REM&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.03)=$G(PIDSEG(&amp;quot;DOB&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.02)=$G(PIDSEG(&amp;quot;SEX&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.301)=&amp;quot;NO&amp;quot;&lt;br /&gt;
  S PNTROOT(2,FDAIEN,391)=&amp;quot;NON-VETERAN (OTHER)&amp;quot;&lt;br /&gt;
  S PNTROOT(2,FDAIEN,1901)=&amp;quot;NO&amp;quot;&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.111)=$G(PIDSEG(&amp;quot;ADDR1&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.112)=$G(PIDSEG(&amp;quot;ADDR2&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.114)=$G(PIDSEG(&amp;quot;CITY&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.115)=$G(PIDSEG(&amp;quot;STATE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.116)=$G(PIDSEG(&amp;quot;ZIP&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.131)=$G(PIDSEG(&amp;quot;HPHONE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.132)=$G(PIDSEG(&amp;quot;WPHONE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,FDAIEN,.133)=$G(PIDSEG(&amp;quot;EMAIL&amp;quot;))&lt;br /&gt;
  S FDAIEN=RESULT(&amp;quot;DILIST&amp;quot;,2,1) ;set IEN from returned array minus comma&lt;br /&gt;
  S ^CHECK(&amp;quot;5FILEIEN2&amp;quot;)=FDAIEN ;)&lt;br /&gt;
  ;do validation&lt;br /&gt;
  D VALS^DIE(&amp;quot;&amp;quot;,&amp;quot;PNTROOT&amp;quot;,&amp;quot;VALPNTROOT&amp;quot;,&amp;quot;VALERR&amp;quot;)&lt;br /&gt;
  N INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  S INDEX=&amp;quot;&amp;quot;&lt;br /&gt;
  S ERRCOUNT=1&lt;br /&gt;
  F  S INDEX=$O(VALPNTROOT(2,FDAIEN_&amp;quot;,&amp;quot;,INDEX)) Q:INDEX=&amp;quot;&amp;quot;  D&lt;br /&gt;
  . I VALPNTROOT(2,FDAIEN_&amp;quot;,&amp;quot;,INDEX)=&amp;quot;^&amp;quot; S ERRNUM=$P(VALERR(&amp;quot;DIERR&amp;quot;),&amp;quot;^&amp;quot;,1)&lt;br /&gt;
  . I  S ^ACSERR(ERRDATE,&amp;quot;ACSPNT&amp;quot;,&amp;quot;FILE ERRNUM&amp;quot;)=ERRNUM&lt;br /&gt;
  . I  D LOGERR&lt;br /&gt;
  . I  Q&lt;br /&gt;
  K INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  ;&lt;br /&gt;
  ;begin file locks&lt;br /&gt;
 FILELOCKDPT ;&lt;br /&gt;
  L +^DPT(FDAIEN):1 ;try lock&lt;br /&gt;
  I $T G DOFILEDIEFILER ;if lock, continue&lt;br /&gt;
  E  G FILELOCKDPT ;if lock fails, keep trying&lt;br /&gt;
  ;end locks&lt;br /&gt;
  ;&lt;br /&gt;
 DOFILEDIEFILER  ;&lt;br /&gt;
  D FILE^DIE(&amp;quot;S&amp;quot;,&amp;quot;VALPNTROOT&amp;quot;,&amp;quot;PNTERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;5FILE&amp;quot;)=PNTERR ;)&lt;br /&gt;
  ;delete previously saved insurances&lt;br /&gt;
  N COUNT,DELROOT,DELIEN&lt;br /&gt;
  S COUNT=1&lt;br /&gt;
  F  Q:COUNT&amp;gt;5  D&lt;br /&gt;
  . S DELIEN=COUNT_&amp;quot;,&amp;quot;_FDAIEN_&amp;quot;,&amp;quot;&lt;br /&gt;
  . S DELROOT(2.312,DELIEN,.01)=&amp;quot;@&amp;quot;&lt;br /&gt;
  . D FILE^DIE(&amp;quot;E&amp;quot;,&amp;quot;DELROOT&amp;quot;)&lt;br /&gt;
  . S COUNT=COUNT+1&lt;br /&gt;
  K COUNT,DELROOT,DELIEN&lt;br /&gt;
  ;add current insurances from message&lt;br /&gt;
  N COUNT,ADDROOT,ADDIEN&lt;br /&gt;
  S COUNT=0&lt;br /&gt;
  F  Q:COUNT&amp;gt;INSCOUNT  D&lt;br /&gt;
  . S ADDIEN=&amp;quot;?+1,&amp;quot;_FDAIEN_&amp;quot;,&amp;quot;&lt;br /&gt;
  . S ADDROOT(2.312,ADDIEN,.01)=INSSEG(COUNT,&amp;quot;NAME&amp;quot;)&lt;br /&gt;
  . S ADDROOT(2.312,ADDIEN,17)=INSSEG(COUNT,&amp;quot;NOI&amp;quot;)&lt;br /&gt;
  . S ADDROOT(2.312,ADDIEN,16)=INSSEG(COUNT,&amp;quot;REL&amp;quot;)&lt;br /&gt;
  . S ADDROOT(2.312,ADDIEN,1)=INSSEG(COUNT,&amp;quot;POL&amp;quot;)&lt;br /&gt;
  . D UPDATE^DIE(&amp;quot;E&amp;quot;,&amp;quot;ADDROOT&amp;quot;)&lt;br /&gt;
  . S COUNT=COUNT+1&lt;br /&gt;
  K COUNT,ADDROOT,ADDIEN&lt;br /&gt;
  ;unlock file&lt;br /&gt;
  L -^DPT(FDAIEN)&lt;br /&gt;
  S ^ACSERR(ERRDATE,&amp;quot;FILER  COMPLETE&amp;quot;)=&amp;quot;(&amp;quot;_PIDSEG(&amp;quot;NO&amp;quot;)_&amp;quot;)&amp;quot;_PIDSEGNAME ;)&lt;br /&gt;
  G REXIT ;clean-up and quit this routine&lt;br /&gt;
  ;&lt;br /&gt;
 DOUPDATEDIE ;&lt;br /&gt;
  ;set fields using $GET ($G) to avoid &#039;variable undefined&#039; error&lt;br /&gt;
  I SSNFOUND S PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;@&amp;quot; ;if ssn exists in database, set ssn to @ to avoid duplicate ssn error on add new entry&lt;br /&gt;
  E  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.363)=PIDSEG(&amp;quot;SSN&amp;quot;)&lt;br /&gt;
  E  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.364)=$E(PIDSEG(&amp;quot;SSN&amp;quot;),6,9)&lt;br /&gt;
  E  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.09)=PIDSEG(&amp;quot;SSN&amp;quot;)&lt;br /&gt;
  I PIDSEG(&amp;quot;SSN&amp;quot;)=&amp;quot;@&amp;quot; S PNTROOT(2,&amp;quot;+1,&amp;quot;,.363)=&amp;quot;--&amp;quot;&lt;br /&gt;
  I  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.364)=&amp;quot;&amp;quot;&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.01)=$G(PIDSEGNAME)&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.091)=$G(PIDSEG(&amp;quot;REM&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.03)=$G(PIDSEG(&amp;quot;DOB&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.02)=$G(PIDSEG(&amp;quot;SEX&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.301)=&amp;quot;NO&amp;quot;&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,391)=&amp;quot;NON-VETERAN (OTHER)&amp;quot;&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,1901)=&amp;quot;NO&amp;quot;&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.111)=$G(PIDSEG(&amp;quot;ADDR1&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.112)=$G(PIDSEG(&amp;quot;ADDR2&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.114)=$G(PIDSEG(&amp;quot;CITY&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.115)=$G(PIDSEG(&amp;quot;STATE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.116)=$G(PIDSEG(&amp;quot;ZIP&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.131)=$G(PIDSEG(&amp;quot;HPHONE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.132)=$G(PIDSEG(&amp;quot;WPHONE&amp;quot;))&lt;br /&gt;
  S PNTROOT(2,&amp;quot;+1,&amp;quot;,.133)=$G(PIDSEG(&amp;quot;EMAIL&amp;quot;))&lt;br /&gt;
  ;do validation&lt;br /&gt;
  D VALS^DIE(&amp;quot;&amp;quot;,&amp;quot;PNTROOT&amp;quot;,&amp;quot;VALPNTROOT&amp;quot;,&amp;quot;VALERR&amp;quot;)&lt;br /&gt;
  N INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  S INDEX=&amp;quot;&amp;quot;&lt;br /&gt;
  S ERRCOUNT=1&lt;br /&gt;
  F  S INDEX=$O(VALPNTROOT(2,&amp;quot;+1,&amp;quot;,INDEX)) Q:INDEX=&amp;quot;&amp;quot;  D&lt;br /&gt;
  . I VALPNTROOT(2,&amp;quot;+1,&amp;quot;,INDEX)=&amp;quot;^&amp;quot; S ERRNUM=$P(VALERR(&amp;quot;DIERR&amp;quot;),&amp;quot;^&amp;quot;,1)&lt;br /&gt;
  . I  S ^ACSERR(ERRDATE,&amp;quot;ACSPNT&amp;quot;,&amp;quot;UPDATE ERRNUM&amp;quot;)=ERRNUM&lt;br /&gt;
  . I  D LOGERR&lt;br /&gt;
  . I  S VALFLAG=1&lt;br /&gt;
  . I  Q&lt;br /&gt;
  K INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  I VALFLAG G REXIT ;QUIT IF VALIDATION FAILS&lt;br /&gt;
  ;&lt;br /&gt;
 DOUPDATEDIEFILER    ;&lt;br /&gt;
  S PNTERR(&amp;quot;DIERR&amp;quot;)=&amp;quot;&amp;quot;&lt;br /&gt;
  D UPDATE^DIE(&amp;quot;S&amp;quot;,&amp;quot;VALPNTROOT&amp;quot;,&amp;quot;FDAIEN&amp;quot;,&amp;quot;PNTERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;6UPDATEIEN&amp;quot;)=FDAIEN ;)&lt;br /&gt;
  I $G(FDAIEN(1))&#039;=&amp;quot;&amp;quot; S ^DPT(&amp;quot;ACSPATNO&amp;quot;,PIDSEG(&amp;quot;NO&amp;quot;),FDAIEN(1))=&amp;quot;&amp;quot; ;set up my cross-reference&lt;br /&gt;
  M ^CHECK(&amp;quot;6UPDATE&amp;quot;)=PNTERR ;)&lt;br /&gt;
  ;FILE HEALTH RECORD NUMBER&lt;br /&gt;
  I $G(FDAIEN(1))&#039;=&amp;quot;&amp;quot; D EN^ACSPNT3&lt;br /&gt;
  ;ADD insurance to new patient&lt;br /&gt;
  S ^DPT(FDAIEN(1),.312,&amp;quot;?+&amp;quot;,0)=&amp;quot;&amp;quot; ;avoid getting error message of var not found when setting policy number for insurance&lt;br /&gt;
  N COUNT&lt;br /&gt;
  S COUNT=0&lt;br /&gt;
  N PNTINSIEN,VALPNTINSROOT,PNTINSROOT&lt;br /&gt;
  F  Q:COUNT&amp;gt;INSCOUNT  D&lt;br /&gt;
  . S PNTINSIEN=&amp;quot;?+1,&amp;quot;_FDAIEN(1)_&amp;quot;,&amp;quot;&lt;br /&gt;
  . S PNTINSROOT(2.312,PNTINSIEN,.01)=INSSEG(COUNT,&amp;quot;NAME&amp;quot;)&lt;br /&gt;
  . S PNTINSROOT(2.312,PNTINSIEN,17)=INSSEG(COUNT,&amp;quot;NOI&amp;quot;)&lt;br /&gt;
  . S PNTINSROOT(2.312,PNTINSIEN,16)=INSSEG(COUNT,&amp;quot;REL&amp;quot;)&lt;br /&gt;
  . S PNTINSROOT(2.312,PNTINSIEN,1)=INSSEG(COUNT,&amp;quot;POL&amp;quot;)&lt;br /&gt;
  . ;D VALS^DIE(&amp;quot;&amp;quot;,&amp;quot;PNTINSROOT&amp;quot;,&amp;quot;VALPNTINSROOT&amp;quot;,&amp;quot;VALERR&amp;quot;)&lt;br /&gt;
  . D UPDATE^DIE(&amp;quot;E&amp;quot;,&amp;quot;PNTINSROOT&amp;quot;) ;SET TO VALPNTINSROOT IF USING VAL^DIE AND TAKE OUT &amp;quot;E&amp;quot; FLAG&lt;br /&gt;
  . S COUNT=COUNT+1&lt;br /&gt;
  K PNTINSIEN,VALPNTINSROOT,PNTINSROOT&lt;br /&gt;
  K COUNT&lt;br /&gt;
  S ^ACSERR(ERRDATE,&amp;quot;UPDATE COMPLETE&amp;quot;)=&amp;quot;(&amp;quot;_PIDSEG(&amp;quot;NO&amp;quot;)_&amp;quot;)&amp;quot;_PIDSEGNAME ;)&lt;br /&gt;
  G REXIT ;clean-up and quit routine&lt;br /&gt;
  ;&lt;br /&gt;
 REXIT   ;&lt;br /&gt;
  K ERRDATE&lt;br /&gt;
  K HLMSG,HEADER,SEG,FDAIEN&lt;br /&gt;
  K PIDSEG,PNTROOT,PNTERR,PIDSEGNAME&lt;br /&gt;
  K INSCOUNT,INSSEG&lt;br /&gt;
  K RESULT,FINDERR&lt;br /&gt;
  K SSNRESULT,SSNFINDERR,SSNFOUND,SSNIEN&lt;br /&gt;
  K VALPNTROOT,VALFLAG,VALERR&lt;br /&gt;
  S ^CHECK(&amp;quot;9END&amp;quot;)=&amp;quot;VERSION 4.5   - COMPLETE&amp;quot; ;)&lt;br /&gt;
  Q&lt;br /&gt;
  ;&lt;br /&gt;
 LOGERR  ;&lt;br /&gt;
  F  Q:ERRCOUNT&amp;gt;ERRNUM  D&lt;br /&gt;
  . M ^ACSERR(ERRDATE,&amp;quot;ERR TEXT&amp;quot;)=VALERR(&amp;quot;DIERR&amp;quot;,ERRCOUNT,&amp;quot;TEXT&amp;quot;)&lt;br /&gt;
  . S ERRCOUNT=ERRCOUNT+1&lt;br /&gt;
  Q&lt;br /&gt;
  ;&lt;br /&gt;
 DELETEPAT	;*p2&lt;br /&gt;
  D FIND^DIC(2,,&amp;quot;@&amp;quot;,&amp;quot;X&amp;quot;,PIDSEG(&amp;quot;NO&amp;quot;),,&amp;quot;ACSPATNO&amp;quot;,,,&amp;quot;RESULT&amp;quot;,&amp;quot;FINDERR&amp;quot;)&lt;br /&gt;
  I $P(RESULT(&amp;quot;DILIST&amp;quot;,0),&amp;quot;^&amp;quot;,1)=0 G DELETENOTFOUND&lt;br /&gt;
  N DELIEN,DELIEN2&lt;br /&gt;
  S DELIEN=RESULT(&amp;quot;DILIST&amp;quot;,2,1) ;patient IEN from matched ACSPATNO&lt;br /&gt;
  S DELIEN2=DELIEN&lt;br /&gt;
 DELETELOCK	;&lt;br /&gt;
  L +^DPT(DELIEN2):1 ;try lock&lt;br /&gt;
  I $T G DODELETE ;if lock, continue&lt;br /&gt;
  E  G DELETELOCK ;if lock fails, keep trying&lt;br /&gt;
 DODELETE	;&lt;br /&gt;
  S DELIEN=DELIEN_&amp;quot;,&amp;quot;&lt;br /&gt;
  S PNTROOT(2,DELIEN,.09)=&amp;quot;@&amp;quot;&lt;br /&gt;
  S PNTROOT(2,DELIEN,.363)=&amp;quot;--&amp;quot;&lt;br /&gt;
  S PNTROOT(2,DELIEN,.364)=&amp;quot;&amp;quot;&lt;br /&gt;
  D FILE^DIE(&amp;quot;&amp;quot;,&amp;quot;PNTROOT&amp;quot;) ;delete SSN from patient&lt;br /&gt;
  L -^DPT(DELIEN2)&lt;br /&gt;
  K PNTROOT&lt;br /&gt;
 DELETELOCK2	;&lt;br /&gt;
  L +^AUPNPAT(DELIEN2):1&lt;br /&gt;
  I $T G DODELETE2&lt;br /&gt;
  E  G DELETELOCK2&lt;br /&gt;
 DODELETE2	;&lt;br /&gt;
  S DELIEN=DUZ(2)_&amp;quot;,&amp;quot;_DELIEN&lt;br /&gt;
  S PNTROOT(9000001.41,DELIEN,.02)=&amp;quot;d&amp;quot;_PIDSEG(&amp;quot;NO&amp;quot;)&lt;br /&gt;
  D FILE^DIE(&amp;quot;&amp;quot;,&amp;quot;PNTROOT&amp;quot;) ;change HRN to begin with a &amp;quot;d&amp;quot;&lt;br /&gt;
  L -^AUPNPAT(DELIEN2)&lt;br /&gt;
  K ^DPT(&amp;quot;ACSPATNO&amp;quot;,PIDSEG(&amp;quot;NO&amp;quot;)) ;KILL xREF!!&lt;br /&gt;
  S ^ACSERR(ERRDATE,&amp;quot;DELETE COMPLETE&amp;quot;)=&amp;quot;(&amp;quot;_PIDSEG(&amp;quot;NO&amp;quot;)_&amp;quot;)&amp;quot;_PIDSEGNAME ;)&lt;br /&gt;
  K DELIEN,DELIEN2&lt;br /&gt;
  Q&lt;br /&gt;
 DELETENOTFOUND	;&lt;br /&gt;
  S ^ACSERR(ERRDATE,&amp;quot;DELETE COMPLETE&amp;quot;)=&amp;quot;PATIENT NOT FOUND (&amp;quot;_PIDSEG(&amp;quot;NO&amp;quot;)_&amp;quot;)&amp;quot;_PIDSEGNAME ;)&lt;br /&gt;
  Q&lt;br /&gt;
 MODERRDATE	;*p3&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;JAN&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;01&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;FEB&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;02&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;MAR&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;03&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;APR&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;04&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;MAY&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;05&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;JUN&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;06&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;JUL&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;07&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;AUG&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;08&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;SEP&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;09&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;OCT&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;10&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;NOV&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;11&amp;quot;&lt;br /&gt;
  S:$P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;DEC&amp;quot; $P(ERRDATE,&amp;quot; &amp;quot;,1)=&amp;quot;12&amp;quot;&lt;br /&gt;
  ;convert to &amp;quot;mm/dd/yyyy&amp;quot; format&lt;br /&gt;
  S $E(ERRDATE,6)=&amp;quot;&amp;quot;&lt;br /&gt;
  S $E(ERRDATE,3)=&amp;quot;/&amp;quot;,$E(ERRDATE,6)=&amp;quot;/&amp;quot;&lt;br /&gt;
  Q&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  ; ACSPNT2.m --&amp;gt; PROCESS RECEIVED HL7 MESSAGE (ADT-A31) FROM ACS COMPUMD.&lt;br /&gt;
  ; ...continued from ACSPNT.m to process insurance company&lt;br /&gt;
  ;&lt;br /&gt;
  ; DBS CALLS:&lt;br /&gt;
  ; D FILE^DIE   REPLACES EXISTING RECORDS&lt;br /&gt;
  ; D UPDATE^DIE ADDS NEW RECORDS&lt;br /&gt;
  ;&lt;br /&gt;
  ; GLOBAL/LOCAL VARIABLES:&lt;br /&gt;
  ; COUNT        COUNTER FOR INSURANCE INDEX&lt;br /&gt;
  ; INSRESULT    RESULT FROM INSURANCE SEARCH&lt;br /&gt;
  ; INSFINDERR   ERR FROM INSURANCE SEARCH&lt;br /&gt;
  ; INSROOT      FDA_ROOT FOR INSURANCE DBS CALLS&lt;br /&gt;
  ; VALINSROOT   VALIDATED INSROOT&lt;br /&gt;
  ; INSERR       ERR MESSAGES FROM INSURANCE DBS CALLS&lt;br /&gt;
  ; INSIEN       IEN FOR DBS CALLS&lt;br /&gt;
  ; ^CHECK       TEMP STORAGE FOR ERR MESSAGES&lt;br /&gt;
  ;&lt;br /&gt;
  ; COMMENTS:&lt;br /&gt;
  ; ;)           TEMPORARY COMMENT/LINE OF CODE&lt;br /&gt;
  ;&lt;br /&gt;
  ; FILEMAN FILES:&lt;br /&gt;
  ; ^DIC(36,     INSURANCE COMPANY FILE (#36)&lt;br /&gt;
  ;&lt;br /&gt;
  ; last update 5.6.2007 1128&lt;br /&gt;
  ;&lt;br /&gt;
 EN  ;entry point, init&lt;br /&gt;
  N COUNT&lt;br /&gt;
  N INSRESULT,INSFINDERR&lt;br /&gt;
  N VALINSROOT&lt;br /&gt;
  S COUNT=0&lt;br /&gt;
 LOOP    ;loop through each INS segment&lt;br /&gt;
  I COUNT&amp;gt;INSCOUNT G REXIT&lt;br /&gt;
 FINDINS ;&lt;br /&gt;
  D FIND^DIC(36,,&amp;quot;@&amp;quot;,&amp;quot;X&amp;quot;,INSSEG(COUNT,&amp;quot;INS&amp;quot;),,&amp;quot;ACSINSNO&amp;quot;,,,&amp;quot;INSRESULT&amp;quot;,&amp;quot;INSFINDERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;4INSFINDERR&amp;quot;)=INSFINDERR ;)&lt;br /&gt;
  M ^CHECK(&amp;quot;4INSFINDRESULT&amp;quot;)=INSRESULT ;)&lt;br /&gt;
  I $P(INSRESULT(&amp;quot;DILIST&amp;quot;,0),&amp;quot;^&amp;quot;,1)=0 G DOUPDATEDIE ;if no entries for ACSINSNO found, go to update (add)&lt;br /&gt;
  ;fall through if insurance company found&lt;br /&gt;
  ;&lt;br /&gt;
 DOFILEDIE   ;&lt;br /&gt;
  N INSROOT,INSERR&lt;br /&gt;
  N INSIEN&lt;br /&gt;
  S INSIEN=INSRESULT(&amp;quot;DILIST&amp;quot;,2,1)_&amp;quot;,&amp;quot; ;set IEN from returned array plus comma&lt;br /&gt;
  S INSROOT(36,INSIEN,.01)=$G(INSSEG(COUNT,&amp;quot;NAME&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.05)=&amp;quot;NO&amp;quot; ;inactive flag&lt;br /&gt;
  S INSROOT(36,INSIEN,.111)=$G(INSSEG(COUNT,&amp;quot;ADDR1&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.112)=$G(INSSEG(COUNT,&amp;quot;ADDR2&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.114)=$G(INSSEG(COUNT,&amp;quot;CITY&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.115)=$G(INSSEG(COUNT,&amp;quot;STATE&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.116)=$G(INSSEG(COUNT,&amp;quot;ZIP&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,.131)=$G(INSSEG(COUNT,&amp;quot;PHONE&amp;quot;))&lt;br /&gt;
  S INSROOT(36,INSIEN,1)=&amp;quot;Y&amp;quot; ;REIMBURSE?&lt;br /&gt;
  S INSROOT(36,INSIEN,2)=&amp;quot;0&amp;quot; ;SIGNATURE REQUIRED ON BILL?&lt;br /&gt;
  S INSIEN=INSRESULT(&amp;quot;DILIST&amp;quot;,2,1)&lt;br /&gt;
  ;do validation&lt;br /&gt;
  D VALS^DIE(&amp;quot;&amp;quot;,&amp;quot;INSROOT&amp;quot;,&amp;quot;VALINSROOT&amp;quot;,&amp;quot;VALERR&amp;quot;)&lt;br /&gt;
  N INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  S INDEX=&amp;quot;&amp;quot;&lt;br /&gt;
  S ERRCOUNT=1&lt;br /&gt;
  F  S INDEX=$O(VALINSROOT(36,INSIEN_&amp;quot;,&amp;quot;,INDEX)) Q:INDEX=&amp;quot;&amp;quot;  D&lt;br /&gt;
  . I VALINSROOT(36,INSIEN_&amp;quot;,&amp;quot;,INDEX)=&amp;quot;^&amp;quot; S ERRNUM=$P(VALERR(&amp;quot;DIERR&amp;quot;),&amp;quot;^&amp;quot;,1)&lt;br /&gt;
  . I  S ^ACSERR(ERRDATE,&amp;quot;ACSPNT2&amp;quot;,&amp;quot;FILE ERRNUM&amp;quot;)=ERRNUM&lt;br /&gt;
  . I  D LOGERR&lt;br /&gt;
  . I  Q&lt;br /&gt;
  K INDEX,ERRNUM,ERRCOUNT&lt;br /&gt;
  ;&lt;br /&gt;
  ;begin file locks&lt;br /&gt;
 FILELOCKDIC ;&lt;br /&gt;
  L +^DIC(36,INSIEN):1 ;try lock&lt;br /&gt;
  I $T G DOFILEDIEFILER ;if lock, continue&lt;br /&gt;
  E  G FILELOCKDIC ;if lock fails, keep trying&lt;br /&gt;
  ;end locks&lt;br /&gt;
  ;&lt;br /&gt;
 DOFILEDIEFILER  ;&lt;br /&gt;
  D FILE^DIE(&amp;quot;S&amp;quot;,&amp;quot;VALINSROOT&amp;quot;,&amp;quot;INSERR&amp;quot;)&lt;br /&gt;
  L -^DIC(36,INSIEN)&lt;br /&gt;
  K INSROOT,INSERR&lt;br /&gt;
  K INSIEN&lt;br /&gt;
  G NEXTSEGMENT&lt;br /&gt;
 DOUPDATEDIE ;&lt;br /&gt;
  N INSROOT,INSERR&lt;br /&gt;
  N INSIEN&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.01)=$G(INSSEG(COUNT,&amp;quot;NAME&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.05)=&amp;quot;NO&amp;quot; ;inactive flag&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.111)=$G(INSSEG(COUNT,&amp;quot;ADDR1&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.112)=$G(INSSEG(COUNT,&amp;quot;ADDR2&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.114)=$G(INSSEG(COUNT,&amp;quot;CITY&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.115)=$G(INSSEG(COUNT,&amp;quot;STATE&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.116)=$G(INSSEG(COUNT,&amp;quot;ZIP&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,.131)=$G(INSSEG(COUNT,&amp;quot;PHONE&amp;quot;))&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,1)=&amp;quot;Y&amp;quot; ;REIMBURSE?&lt;br /&gt;
  S INSROOT(36,&amp;quot;?+1,&amp;quot;,2)=&amp;quot;0&amp;quot; ;SIGNATURE REQUIRED ON BILL?&lt;br /&gt;
  ;do validation&lt;br /&gt;
  D VALS^DIE(&amp;quot;&amp;quot;,&amp;quot;INSROOT&amp;quot;,&amp;quot;VALINSROOT&amp;quot;,&amp;quot;VALERR&amp;quot;)&lt;br /&gt;
  N INDEX,ERRCOUNT,ERRNUM&lt;br /&gt;
  S INDEX=&amp;quot;&amp;quot;&lt;br /&gt;
  S ERRCOUNT=1&lt;br /&gt;
  F  S INDEX=$O(VALINSROOT(36,&amp;quot;?+1,&amp;quot;,INDEX)) Q:INDEX=&amp;quot;&amp;quot;  D&lt;br /&gt;
  . I VALINSROOT(36,&amp;quot;?+1,&amp;quot;,INDEX)=&amp;quot;^&amp;quot; S ERRNUM=$P(VALERR(&amp;quot;DIERR&amp;quot;),&amp;quot;^&amp;quot;,1)&lt;br /&gt;
  . I  S ^ACSERR(ERRDATE,&amp;quot;ACSPNT2&amp;quot;,&amp;quot;UPDATE ERRNUM&amp;quot;)=ERRNUM&lt;br /&gt;
  . I  D LOGERR&lt;br /&gt;
  . I  S VALFLAG=1&lt;br /&gt;
  . I  Q&lt;br /&gt;
  K INDEX,ERRCOUNT,ERRNUM&lt;br /&gt;
  I VALFLAG Q ;if validation fails, return to ACSPNT&lt;br /&gt;
 DOUPDATEDIEFILER    ;&lt;br /&gt;
  ;)S INSERR(&amp;quot;DIERR&amp;quot;)=&amp;quot;&amp;quot;&lt;br /&gt;
  D UPDATE^DIE(&amp;quot;S&amp;quot;,&amp;quot;VALINSROOT&amp;quot;,&amp;quot;INSIEN&amp;quot;,&amp;quot;INSERR&amp;quot;)&lt;br /&gt;
  I $G(INSIEN(1))&#039;=&amp;quot;&amp;quot; S ^DIC(36,&amp;quot;ACSINSNO&amp;quot;,INSSEG(COUNT,&amp;quot;INS&amp;quot;),INSIEN(1))=&amp;quot;ACTIVE&amp;quot; ;set up my cross-reference&lt;br /&gt;
  K INSROOT,INSERR&lt;br /&gt;
  K INSIEN&lt;br /&gt;
 NEXTSEGMENT ;&lt;br /&gt;
  S COUNT=COUNT+1&lt;br /&gt;
  G LOOP&lt;br /&gt;
 REXIT   ;&lt;br /&gt;
  K COUNT&lt;br /&gt;
  K INSRESULT,INSFINDERR&lt;br /&gt;
  K VALINSROOT&lt;br /&gt;
  Q&lt;br /&gt;
 LOGERR  ;&lt;br /&gt;
  F  Q:ERRCOUNT&amp;gt;ERRNUM  D&lt;br /&gt;
  . M ^ACSERR(ERRDATE,&amp;quot;ERR TEXT&amp;quot;)=VALERR(&amp;quot;DIERR&amp;quot;,ERRCOUNT,&amp;quot;TEXT&amp;quot;)&lt;br /&gt;
  . S ERRCOUNT=ERRCOUNT+1&lt;br /&gt;
  Q&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  ; ACSPNT3.m --&amp;gt; PROCESS RECEIVED HL7 MESSAGE (ADT-A31) FROM ACS COMPUMD.&lt;br /&gt;
  ; ...continued from ACSPNT.m to process health record number&lt;br /&gt;
  ; ...*p1 adds coordinating master of record to patient&lt;br /&gt;
  ;&lt;br /&gt;
  ; DBS CALLS:&lt;br /&gt;
  ; D UPDATE^DIE ADDS NEW RECORDS&lt;br /&gt;
  ;&lt;br /&gt;
  ; GLOBAL/LOCAL VARIABLES:&lt;br /&gt;
  ; FAC          USER&#039;S INSTITUTION(FACILITY)&lt;br /&gt;
  ; PFIEN        INTERNAL ENTRY NUMBER IN PATIENT FILE - FROM ACSPNT&lt;br /&gt;
  ; APN          ACS PATIENT NUMBER - FROM ACSPNT&lt;br /&gt;
  ; HRNROOT      ROOT FOR HRN FILE&lt;br /&gt;
  ; HRNSROOT     ROOT FOR HRN SUBFILE&lt;br /&gt;
  ; HRNIEN       INTERNAL ENTRY NUMBER FOR HRN FILE&lt;br /&gt;
  ; HRNSIEN      INTERNAL ENTRY NUMBER FOR HUN SUBFILE&lt;br /&gt;
  ; HRNERR       ERR FOR UPDATE HRN FILE&lt;br /&gt;
  ; HRNSERR      ERR FOR UPDATE HRN SUBFILE&lt;br /&gt;
  ; PATROOT      ROOT FOR PATIENT FILE *p1&lt;br /&gt;
  ; PATIEN       INTERNAL ENTRY NUMBER FOR PATIENT FILE *p1&lt;br /&gt;
  ; PATERR       ERR FOR PATIENT FILE *p1&lt;br /&gt;
  ; DATE         DATE IN INTERNAL FILEMAN FORMAT&lt;br /&gt;
  ; ^CHECK       TEMP STORAGE FOR ERR MESSAGES&lt;br /&gt;
  ;&lt;br /&gt;
  ; COMMENTS:&lt;br /&gt;
  ; ;)           TEMPORARY COMMENT/LINE OF CODE&lt;br /&gt;
  ;&lt;br /&gt;
  ; FILEMAN FILES:&lt;br /&gt;
  ; ^AUPNPAT     IHS PATIENT (#9000001)  9000001.41 - HRN SUBFILE&lt;br /&gt;
  ; ^DPT         PATIENT FILE (#2)       2.991 - ICN SUBFILE *p1&lt;br /&gt;
  ;&lt;br /&gt;
  ; last update 6.26.2007 0954&lt;br /&gt;
  ; *p1 added 6.26.2007 - this adds ICN to patient only because it is required, and the ICN is not correct&lt;br /&gt;
  ;                       for use with MPI as it should be. .04=&amp;quot;1&amp;quot; for locally assigned ICN.&lt;br /&gt;
  ;&lt;br /&gt;
 EN  ;entry point, init&lt;br /&gt;
  N FAC,HRNROOT,HRNSROOT,HRNIEN,HRNSIEN,HRNERR,HRNSERR&lt;br /&gt;
  N PFIEN,APN,DATE&lt;br /&gt;
  N PATROOT,PATIEN,PATERR&lt;br /&gt;
  S PFIEN=FDAIEN(1)&lt;br /&gt;
  S APN=PIDSEG(&amp;quot;NO&amp;quot;)&lt;br /&gt;
  S FAC=DUZ(2)&lt;br /&gt;
  D DT^DILF(,&amp;quot;NOW&amp;quot;,.DATE)&lt;br /&gt;
 UPDATE ;&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.01)=PFIEN&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.02)=DATE&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.03)=DATE&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.11)=DUZ  ;&amp;quot;establishing user&amp;quot;&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.12)=DUZ  ;&amp;quot;USER LAST UPDATE&amp;quot;&lt;br /&gt;
  S HRNROOT(9000001,&amp;quot;?+1,&amp;quot;,.16)=DATE&lt;br /&gt;
  D UPDATE^DIE(&amp;quot;S&amp;quot;,&amp;quot;HRNROOT&amp;quot;,&amp;quot;HRNIEN&amp;quot;,&amp;quot;HRNERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;HRNERR&amp;quot;)=HRNERR ;)&lt;br /&gt;
  S HRNSIEN(1)=FAC&lt;br /&gt;
  S HRNSIEN=&amp;quot;?+1,&amp;quot;_HRNIEN(1)_&amp;quot;,&amp;quot;&lt;br /&gt;
  S HRNSROOT(9000001.41,HRNSIEN,.01)=FAC&lt;br /&gt;
  S HRNSROOT(9000001.41,HRNSIEN,.02)=APN&lt;br /&gt;
  D UPDATE^DIE(,&amp;quot;HRNSROOT&amp;quot;,&amp;quot;HRNSIEN&amp;quot;,&amp;quot;HRNSERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;HRNSERR&amp;quot;)=HRNSERR ;)&lt;br /&gt;
 FILECMR	; this section is *p1 (CMR - COORDINATING MASTER OF RECORD)&lt;br /&gt;
  S PATROOT(2,PFIEN_&amp;quot;,&amp;quot;,991.01)=PFIEN&lt;br /&gt;
  S PATROOT(2,PFIEN_&amp;quot;,&amp;quot;,991.03)=FAC&lt;br /&gt;
  S PATROOT(2,PFIEN_&amp;quot;,&amp;quot;,991.04)=&amp;quot;1&amp;quot; ;locally assigned ICN&lt;br /&gt;
  D FILE^DIE(&amp;quot;S&amp;quot;,&amp;quot;PATROOT&amp;quot;,&amp;quot;PATERR&amp;quot;)&lt;br /&gt;
  M ^CHECK(&amp;quot;PATCMRERR&amp;quot;)=PATERR ;)&lt;br /&gt;
 REXIT   ;EXIT&lt;br /&gt;
  K FAC,HRNROOT,HRNSROOT,HRNIEN,HRNSIEN,HRNERR,HRNSERR&lt;br /&gt;
  K PFIEN,APN,DATE&lt;br /&gt;
  K PATROOT,PATIEN,PATERR&lt;br /&gt;
  Q&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:cmdupre]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5134</id>
		<title>Programming VistA Issues</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5134"/>
		<updated>2007-07-20T21:14:51Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: /* Programming Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will cover programming issues.  &lt;br /&gt;
&lt;br /&gt;
=== Programming Issues ===&lt;br /&gt;
&lt;br /&gt;
* [[M/Mumps Language Issues]]&lt;br /&gt;
* [[TIU Package API]]&lt;br /&gt;
* [[Batch Signing of Documents]]&lt;br /&gt;
* [[Debugging with GT.M]]&lt;br /&gt;
* [[CPRSImager (CPRSChart mod)]]&lt;br /&gt;
* [[VistA Imaging Issues]]&lt;br /&gt;
* [[Pharmacy Issues]]&lt;br /&gt;
* [[Add on Functions]]&lt;br /&gt;
* [[Setting up a Linux Printer]]&lt;br /&gt;
* [[Using a linux editor inside VistA]]&lt;br /&gt;
* [[Lab Interfacing]]&lt;br /&gt;
* [[Indirection (@) issues]]&lt;br /&gt;
* [[VistA Database Globals]]&lt;br /&gt;
* [[Patching Instructions]]&lt;br /&gt;
* [[Redirecting pointers]]&lt;br /&gt;
* [[VistA Links]]&lt;br /&gt;
* [[Object Oriented Programming with M]]&lt;br /&gt;
* [[Programming with the VPE code library]]&lt;br /&gt;
* [[SSH Tunneling for CPRS]]&lt;br /&gt;
* [[GT.M Job Examine / System Status Overview]]&lt;br /&gt;
* [[Error Trapping with $ETRAP]]&lt;br /&gt;
* [[RPC&#039;s with Visual Cpp]]&lt;br /&gt;
* [[Register a patient via HL7]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=HL7_Multi-Listener&amp;diff=5035</id>
		<title>HL7 Multi-Listener</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=HL7_Multi-Listener&amp;diff=5035"/>
		<updated>2007-07-20T21:13:55Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Configure HL7 multi-listener and set-up HL7 link parameters.&lt;br /&gt;
&lt;br /&gt;
This instruction assumes that the reader is familiar with the linux&lt;br /&gt;
operating system and  the vi text editor or an equivalent.  It also&lt;br /&gt;
assumes that you have a working  installation and configuration of&lt;br /&gt;
VistA.  For this example, I am running Bhaskar&#039;s  SemiViva 2.3.1 on&lt;br /&gt;
ubuntu linux 7.04.  My machine&#039;s address will be 10.1.1.1, my HL7&lt;br /&gt;
listner will use port 9201, and my user will be root.&lt;br /&gt;
&lt;br /&gt;
All commands should be issued as root and will be expressed as so:&lt;br /&gt;
 &amp;lt;type this&amp;gt;.   &lt;br /&gt;
 &lt;br /&gt;
Any output or text to enter will be listed between&lt;br /&gt;
brackets and astricks, i.e.:&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 text to enter&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Background on my installation and paths:&lt;br /&gt;
&lt;br /&gt;
I unzipped the SemiViva package to /usr/local/ which created directory&lt;br /&gt;
VistAOfficeEHR_2.3.1.  So, my routines are stored in /usr/local/&lt;br /&gt;
VistAOfficeEHR_2.3.1/r.  Also, I ran install so that I created a child&lt;br /&gt;
environment in /vista.  So, my path to gtm is /vista/gtm_V5.2-000/.&lt;br /&gt;
&lt;br /&gt;
First, I installed xinetd because this package was not included by&lt;br /&gt;
default in the ubuntu 7.04 installation.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;apt-get update&amp;gt;&lt;br /&gt;
 &amp;lt;apt-get install xinetd&amp;gt;    installs the xinetd package.&lt;br /&gt;
&lt;br /&gt;
Make sure /etc/xinetd.conf contains &amp;quot;includedir /etc/xinetd.d&amp;quot; as&lt;br /&gt;
shown:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;cat /etc/xinetd.conf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 # Simple configuration file for xinetd&lt;br /&gt;
 #&lt;br /&gt;
 # Some defaults, and include /etc/xinetd.d/&lt;br /&gt;
 &lt;br /&gt;
 defaults&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 # Please note that you need a log_type line to be able to use log_on_success&lt;br /&gt;
 # and log_on_failure. The default is the following :&lt;br /&gt;
 # log_type = SYSLOG daemon info&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 includedir /etc/xinetd.d&lt;br /&gt;
 *******]&lt;br /&gt;
 &lt;br /&gt;
Create a VistA routine that will start the HL7 process when a message&lt;br /&gt;
is received&lt;br /&gt;
(make sure HLPORT is set to the port you want to use)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;vi /usr/local/VistAOfficeEHR_2.3.1/r/VISTAHL7.m&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [*******&lt;br /&gt;
  N HLDP,HLPORT,HLPRTS,IO&lt;br /&gt;
  S HLDP=0,HLPORT=9201&lt;br /&gt;
  F  S HLDP=$O(^HLCS(870,&amp;quot;E&amp;quot;,&amp;quot;M&amp;quot;,HLDP)) Q:&#039;HLDP  D  Q:(HLPRTS=HLPORT)&lt;br /&gt;
  .S HLPRTS=$P(^HLCS(870,HLDP,400),&amp;quot;^&amp;quot;,2)&lt;br /&gt;
  .Q&lt;br /&gt;
  I &#039;HLDP D ^%ZTER Q  K HLPORT,HLPRTS&lt;br /&gt;
  S IO=$P U IO:(NOWRAP:NODELIMITER:IOERROR=&amp;quot;TRAP&amp;quot;)&lt;br /&gt;
  D LISTEN^HLCSTCP&lt;br /&gt;
  Q&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Now, create a script in the gtm directory to call that routine:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;vi /vista/gtm_V5.2-000/vistahl7&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [*******&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 export HOME=/home/`whoami`&lt;br /&gt;
 cd `dirname $0`&lt;br /&gt;
 source ./env&lt;br /&gt;
 cd ../tmp&lt;br /&gt;
 mumps -run ^VISTAHL7&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
do a chmod on the vistahl7 script to make it executable:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;chmod +x /vista/gtm_V5.2-000/vistahl7&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, create a configuration file in xinetd.d to call that script:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;vi /etc/xinetd.d/vistahl7&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 service vistahl7&lt;br /&gt;
 {&lt;br /&gt;
         type = UNLISTED&lt;br /&gt;
         port = 9201&lt;br /&gt;
         socket_type = stream&lt;br /&gt;
         protocol = tcp&lt;br /&gt;
         user = root&lt;br /&gt;
         server = /vista/gtm_V5.2-000/vistahl7&lt;br /&gt;
         disable = no&lt;br /&gt;
         wait = no&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Finally, add the following entry at the end of /etc/services&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 vistahl7        9201/tcp                        # vista hl7 listener&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Restart the xinetd service with:&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/etc/init.d/xinetd restart&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
When you have a connection to the socket just created, you should be&lt;br /&gt;
able to check it with this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;netstat -lan | grep 9201&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [*******&lt;br /&gt;
 tcp        0      0 0.0.0.0:9201            0.0.0.0:*&lt;br /&gt;
 LISTEN&lt;br /&gt;
 tcp        0      0 10.1.1.1:9201         x.x.x.x:59972&lt;br /&gt;
 ESTABLISHED&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have not yet configured the VistA HL7 subsystem, check out this really nice website:&lt;br /&gt;
http://www.geocities.com/kdtop3/&lt;br /&gt;
&lt;br /&gt;
All you have to do to start using the new multi-listener is change your link type to MULTI LISTENER on the link edit screen, then stop and start the link&lt;br /&gt;
manager.  What you do with the message received is now up to you.  I wrote a routine to file patient and insurance information into the VistA database when demographics are received via HL7 from our billing system.&lt;br /&gt;
&lt;br /&gt;
[[User:cmdupre]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=5036</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=5036"/>
		<updated>2007-07-20T21:11:33Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in utilizing VistA to provide our customers with an EHR solution.&lt;br /&gt;
&lt;br /&gt;
eMail me with any questions: caseydupre@gmail.com&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=5032</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=5032"/>
		<updated>2007-07-20T21:10:05Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in utilizing VistA to provide our customers with an EHR package.&lt;br /&gt;
&lt;br /&gt;
eMail me with any questions: caseydupre@gmail.com&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=RPC%27s_with_Visual_Cpp&amp;diff=11393</id>
		<title>RPC&#039;s with Visual Cpp</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=RPC%27s_with_Visual_Cpp&amp;diff=11393"/>
		<updated>2007-07-20T21:08:19Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;First you will need to install the RPC Broker Kit (available at ftp://ftp.va.gov). For Example1, I created an M program and set-up the Remote Procedures File accordingly.&lt;br /&gt;
&lt;br /&gt;
Copy Bapi32.hpp into your Visual C++ project&#039;s header files directory.&lt;br /&gt;
&lt;br /&gt;
In Visual Studio, right-click on your &amp;quot;Header Files&amp;quot; folder and click &amp;quot;Add Files to Folder...&amp;quot; Add Bapi32.hpp. Be sure to add an include line for this header file in one of your source files:&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;Bapi32.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In your dialog cpp file, create a new global instance of TRPCBroker:&lt;br /&gt;
&lt;br /&gt;
TRPCBroker RPCBroker;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Variable declarations for my examples:&lt;br /&gt;
    char * result = &amp;quot;&amp;quot;;&lt;br /&gt;
    CString num1=&amp;quot;&amp;quot;;&lt;br /&gt;
    CString num2=&amp;quot;&amp;quot;;&lt;br /&gt;
    CString num3=&amp;quot;&amp;quot;;&lt;br /&gt;
    char num1c[10]=&amp;quot;&amp;quot;;&lt;br /&gt;
    char num2c[10]=&amp;quot;&amp;quot;;&lt;br /&gt;
    CString name=&amp;quot;&amp;quot;;&lt;br /&gt;
    char namec[255]=&amp;quot;&amp;quot;;&lt;br /&gt;
    int Ulocation=0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example 1: This example takes two user-specified integers, passes those integers to VistA, and receives the sum.&lt;br /&gt;
&lt;br /&gt;
    for (int i=0;i&amp;lt;num1.GetLength();i++)&lt;br /&gt;
        num1c[i]=num1[i];&lt;br /&gt;
    for (int j=0;j&amp;lt;num2.GetLength();j++)&lt;br /&gt;
        num2c[j]=num2[j];&lt;br /&gt;
    &lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;RemoteProcedure&amp;quot;,&amp;quot;TEST&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;ClearParameters&amp;quot;,&amp;quot;1&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;ClearResults&amp;quot;,&amp;quot;1&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;Server&amp;quot;,&amp;quot;brokerserver&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;ListenerPort&amp;quot;,&amp;quot;9200&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,0,num1c);&lt;br /&gt;
    RPCBroker.RPCBParamSet(1,0,num2c);&lt;br /&gt;
&lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
        result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    catch ( ... )&lt;br /&gt;
    {&lt;br /&gt;
        MessageBox(&amp;quot;Runtime Error&amp;quot;,&amp;quot;RPCBroker Call&amp;quot;);&lt;br /&gt;
        result = &amp;quot;Error&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    num3=result;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example 2: This example uses the server settings as shown in Example 1; This code will ask VistA for the user&#039;s DUZ, then request the user&#039;s name, ip address, current port number, server operating system, and current job number.&lt;br /&gt;
&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;Connected&amp;quot;,&amp;quot;1&amp;quot;); //Displays VistA sign-on splash screen&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;RemoteProcedure&amp;quot;,&amp;quot;XWB GET VARIABLE VALUE&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;DUZ&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    name.Format(&amp;quot;^VA(200,%s,0)&amp;quot;,result);&lt;br /&gt;
    for (int i1=0;i1&amp;lt;name.GetLength();i1++)&lt;br /&gt;
        namec[i1]=name[i1];&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,namec);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    namebox = result;&lt;br /&gt;
    for (int i2=0;i2&amp;lt;namebox.GetLength();i2++)&lt;br /&gt;
    {&lt;br /&gt;
        if (result[i2]==94) &lt;br /&gt;
        {&lt;br /&gt;
            Ulocation=i2;&lt;br /&gt;
            i2=namebox.GetLength();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    namebox = namebox.Mid(0,Ulocation);&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;XWBTIP&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    ipbox = result;&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;XWBTSKT&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    portbox=result;&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;$ZV&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    osbox = result;&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;$J&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    jobbox = result;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example 3: This example disconnects the previous server.&lt;br /&gt;
&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;Connected&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:cmdupre]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=RPC%27s_with_Visual_Cpp&amp;diff=5030</id>
		<title>RPC&#039;s with Visual Cpp</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=RPC%27s_with_Visual_Cpp&amp;diff=5030"/>
		<updated>2007-07-20T21:04:31Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;First you will need to install the RPC Broker Kit (available at ftp://ftp.va.gov). For Example1, I created an M program and set-up the Remote Procedures File accordingly.&lt;br /&gt;
&lt;br /&gt;
Copy Bapi32.hpp into your Visual C++ project&#039;s header files directory.&lt;br /&gt;
&lt;br /&gt;
In Visual Studio, right-click on your &amp;quot;Header Files&amp;quot; folder and click &amp;quot;Add Files to Folder...&amp;quot; Add Bapi32.hpp. Be sure to add an include line for this header file in one of your source files:&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;Bapi32.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In your dialog cpp file, create a new global instance of TRPCBroker:&lt;br /&gt;
&lt;br /&gt;
TRPCBroker RPCBroker;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Variable declarations for my examples:&lt;br /&gt;
    char * result = &amp;quot;&amp;quot;;&lt;br /&gt;
    CString num1=&amp;quot;&amp;quot;;&lt;br /&gt;
    CString num2=&amp;quot;&amp;quot;;&lt;br /&gt;
    CString num3=&amp;quot;&amp;quot;;&lt;br /&gt;
    char num1c[10]=&amp;quot;&amp;quot;;&lt;br /&gt;
    char num2c[10]=&amp;quot;&amp;quot;;&lt;br /&gt;
    CString name=&amp;quot;&amp;quot;;&lt;br /&gt;
    char namec[255]=&amp;quot;&amp;quot;;&lt;br /&gt;
    int Ulocation=0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example 1: This example takes two user-specified integers, passes those integers to VistA, and receives the sum.&lt;br /&gt;
&lt;br /&gt;
    for (int i=0;i&amp;lt;num1.GetLength();i++)&lt;br /&gt;
        num1c[i]=num1[i];&lt;br /&gt;
    for (int j=0;j&amp;lt;num2.GetLength();j++)&lt;br /&gt;
        num2c[j]=num2[j];&lt;br /&gt;
    &lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;RemoteProcedure&amp;quot;,&amp;quot;TEST&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;ClearParameters&amp;quot;,&amp;quot;1&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;ClearResults&amp;quot;,&amp;quot;1&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;Server&amp;quot;,&amp;quot;brokerserver&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;ListenerPort&amp;quot;,&amp;quot;9200&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,0,num1c);&lt;br /&gt;
    RPCBroker.RPCBParamSet(1,0,num2c);&lt;br /&gt;
&lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
        result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    catch ( ... )&lt;br /&gt;
    {&lt;br /&gt;
        MessageBox(&amp;quot;Runtime Error&amp;quot;,&amp;quot;RPCBroker Call&amp;quot;);&lt;br /&gt;
        result = &amp;quot;Error&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    num3=result;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example 2: This example uses the server settings as shown in Example 1; This code will ask VistA for the user&#039;s DUZ, then request the user&#039;s name, ip address, current port number, server operating system, and current job number.&lt;br /&gt;
&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;Connected&amp;quot;,&amp;quot;1&amp;quot;); //Displays VistA sign-on splash screen&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;RemoteProcedure&amp;quot;,&amp;quot;XWB GET VARIABLE VALUE&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;DUZ&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    name.Format(&amp;quot;^VA(200,%s,0)&amp;quot;,result);&lt;br /&gt;
    for (int i1=0;i1&amp;lt;name.GetLength();i1++)&lt;br /&gt;
        namec[i1]=name[i1];&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,namec);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    namebox = result;&lt;br /&gt;
    for (int i2=0;i2&amp;lt;namebox.GetLength();i2++)&lt;br /&gt;
    {&lt;br /&gt;
        if (result[i2]==94) &lt;br /&gt;
        {&lt;br /&gt;
            Ulocation=i2;&lt;br /&gt;
            i2=namebox.GetLength();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    namebox = namebox.Mid(0,Ulocation);&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;XWBTIP&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    ipbox = result;&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;XWBTSKT&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    portbox=result;&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;$ZV&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    osbox = result;&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;$J&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    jobbox = result;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example 3: This example disconnects the previous server.&lt;br /&gt;
&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;Connected&amp;quot;,&amp;quot;0&amp;quot;);&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=RPC%27s_with_Visual_Cpp&amp;diff=5029</id>
		<title>RPC&#039;s with Visual Cpp</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=RPC%27s_with_Visual_Cpp&amp;diff=5029"/>
		<updated>2007-07-20T20:53:50Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;First you will need to install the RPC Broker Kit (available at ftp://ftp.va.gov).&lt;br /&gt;
&lt;br /&gt;
Copy Bapi32.hpp into your Visual C++ project&#039;s header files directory.&lt;br /&gt;
&lt;br /&gt;
In Visual Studio, right-click on your &amp;quot;Header Files&amp;quot; folder and click &amp;quot;Add Files to Folder...&amp;quot; Add Bapi32.hpp. Be sure to add an include line for this header file in one of your source files:&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;Bapi32.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In your dialog cpp file, create a new global instance of TRPCBroker:&lt;br /&gt;
&lt;br /&gt;
TRPCBroker RPCBroker;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Variable declarations for my examples:&lt;br /&gt;
    char * result = &amp;quot;&amp;quot;;&lt;br /&gt;
    CString num1=&amp;quot;&amp;quot;;&lt;br /&gt;
    CString num2=&amp;quot;&amp;quot;;&lt;br /&gt;
    CString num3=&amp;quot;&amp;quot;;&lt;br /&gt;
    char num1c[10]=&amp;quot;&amp;quot;;&lt;br /&gt;
    char num2c[10]=&amp;quot;&amp;quot;;&lt;br /&gt;
    CString name=&amp;quot;&amp;quot;;&lt;br /&gt;
    char namec[255]=&amp;quot;&amp;quot;;&lt;br /&gt;
    int Ulocation=0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example 1: This example takes two user-specified integers, passes those integers to VistA, and receives the sum.&lt;br /&gt;
&lt;br /&gt;
    for (int i=0;i&amp;lt;num1.GetLength();i++)&lt;br /&gt;
        num1c[i]=num1[i];&lt;br /&gt;
    for (int j=0;j&amp;lt;num2.GetLength();j++)&lt;br /&gt;
        num2c[j]=num2[j];&lt;br /&gt;
&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;ClearParameters&amp;quot;,&amp;quot;1&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;ClearResults&amp;quot;,&amp;quot;1&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;Server&amp;quot;,&amp;quot;brokerserver&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;ListenerPort&amp;quot;,&amp;quot;9200&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,0,num1c);&lt;br /&gt;
    RPCBroker.RPCBParamSet(1,0,num2c);&lt;br /&gt;
&lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
        result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    catch ( ... )&lt;br /&gt;
    {&lt;br /&gt;
        MessageBox(&amp;quot;Runtime Error&amp;quot;,&amp;quot;RPCBroker Call&amp;quot;);&lt;br /&gt;
        result = &amp;quot;Error&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    num3=result;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example 2: This example uses the server settings as shown in Example 1; This code will ask VistA for the user&#039;s DUZ, then request the user&#039;s name, ip address, current port number, server operating system, and current job number.&lt;br /&gt;
&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;Connected&amp;quot;,&amp;quot;1&amp;quot;); //Displays VistA sign-on splash screen&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;RemoteProcedure&amp;quot;,&amp;quot;XWB GET VARIABLE VALUE&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;DUZ&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    name.Format(&amp;quot;^VA(200,%s,0)&amp;quot;,result);&lt;br /&gt;
    for (int i1=0;i1&amp;lt;name.GetLength();i1++)&lt;br /&gt;
        namec[i1]=name[i1];&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,namec);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    namebox = result;&lt;br /&gt;
    for (int i2=0;i2&amp;lt;namebox.GetLength();i2++)&lt;br /&gt;
    {&lt;br /&gt;
        if (result[i2]==94) &lt;br /&gt;
        {&lt;br /&gt;
            Ulocation=i2;&lt;br /&gt;
            i2=namebox.GetLength();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    namebox = namebox.Mid(0,Ulocation);&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;XWBTIP&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    ipbox = result;&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;XWBTSKT&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    portbox=result;&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;$ZV&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    osbox = result;&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;$J&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    jobbox = result;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example 3: This example disconnects the previous server.&lt;br /&gt;
&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;Connected&amp;quot;,&amp;quot;0&amp;quot;);&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=RPC%27s_with_Visual_Cpp&amp;diff=5028</id>
		<title>RPC&#039;s with Visual Cpp</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=RPC%27s_with_Visual_Cpp&amp;diff=5028"/>
		<updated>2007-07-20T20:48:15Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: Remote Procedure Calls via Visual C++&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;First you will need to install the RPC Broker Kit (available at ftp://ftp.va.gov).&lt;br /&gt;
&lt;br /&gt;
Copy Bapi32.hpp into your Visual C++ project&#039;s header files directory.&lt;br /&gt;
&lt;br /&gt;
In Visual Studio, right-click on your &amp;quot;Header Files&amp;quot; folder and click &amp;quot;Add Files to Folder...&amp;quot; Add Bapi32.hpp. Be sure to add an include line for this header file in one of your source files:&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;Bapi32.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In your dialog cpp file, create a new global instance of TRPCBroker:&lt;br /&gt;
&lt;br /&gt;
TRPCBroker RPCBroker;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Variable declarations for my examples:&lt;br /&gt;
    char * result = &amp;quot;&amp;quot;;&lt;br /&gt;
    CString num1;&lt;br /&gt;
    CString num2;&lt;br /&gt;
    CString num3;&lt;br /&gt;
    char num1c[10]=&amp;quot;&amp;quot;;&lt;br /&gt;
    char num2c[10]=&amp;quot;&amp;quot;;&lt;br /&gt;
    CString name;&lt;br /&gt;
    char namec[255]=&amp;quot;&amp;quot;;&lt;br /&gt;
    int Ulocation=0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example 1: This example takes two user-specified integers, passes those integers to VistA, and receives the sum.&lt;br /&gt;
&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;ClearParameters&amp;quot;,&amp;quot;1&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;ClearResults&amp;quot;,&amp;quot;1&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;Server&amp;quot;,&amp;quot;brokerserver&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;ListenerPort&amp;quot;,&amp;quot;9200&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,0,num1c);&lt;br /&gt;
    RPCBroker.RPCBParamSet(1,0,num2c);&lt;br /&gt;
&lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
        result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    catch ( ... )&lt;br /&gt;
    {&lt;br /&gt;
        MessageBox(&amp;quot;Runtime Error&amp;quot;,&amp;quot;RPCBroker Call&amp;quot;);&lt;br /&gt;
        result = &amp;quot;Error&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    num3=result;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example 2: This example uses the server settings as shown in Example 1; This code will ask VistA for the user&#039;s DUZ, then request the user&#039;s name, ip address, current port number, server operating system, and current job number.&lt;br /&gt;
&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;Connected&amp;quot;,&amp;quot;1&amp;quot;); //Displays VistA sign-on splash screen&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;RemoteProcedure&amp;quot;,&amp;quot;XWB GET VARIABLE VALUE&amp;quot;);&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;DUZ&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    name.Format(&amp;quot;^VA(200,%s,0)&amp;quot;,result);&lt;br /&gt;
    for (int i1=0;i1&amp;lt;name.GetLength();i1++)&lt;br /&gt;
        namec[i1]=name[i1];&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,namec);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    namebox = result;&lt;br /&gt;
    for (int i2=0;i2&amp;lt;namebox.GetLength();i2++)&lt;br /&gt;
    {&lt;br /&gt;
        if (result[i2]==94) &lt;br /&gt;
        {&lt;br /&gt;
            Ulocation=i2;&lt;br /&gt;
            i2=namebox.GetLength();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    namebox = namebox.Mid(0,Ulocation);&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;XWBTIP&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    ipbox = result;&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;XWBTSKT&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    portbox=result;&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;$ZV&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    osbox = result;&lt;br /&gt;
    RPCBroker.RPCBParamSet(0,1,&amp;quot;$J&amp;quot;);&lt;br /&gt;
    result = RPCBroker.RPCBCall(&amp;quot;&amp;quot;);&lt;br /&gt;
    jobbox = result;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example 3: This example disconnects the previous server.&lt;br /&gt;
&lt;br /&gt;
    RPCBroker.RPCBPropSet(&amp;quot;Connected&amp;quot;,&amp;quot;0&amp;quot;);&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5034</id>
		<title>Programming VistA Issues</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5034"/>
		<updated>2007-07-20T20:21:07Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will cover programming issues.  &lt;br /&gt;
&lt;br /&gt;
=== Programming Issues ===&lt;br /&gt;
&lt;br /&gt;
* [[M/Mumps Language Issues]]&lt;br /&gt;
* [[TIU Package API]]&lt;br /&gt;
* [[Batch Signing of Documents]]&lt;br /&gt;
* [[Debugging with GT.M]]&lt;br /&gt;
* [[CPRSImager (CPRSChart mod)]]&lt;br /&gt;
* [[VistA Imaging Issues]]&lt;br /&gt;
* [[Pharmacy Issues]]&lt;br /&gt;
* [[Add on Functions]]&lt;br /&gt;
* [[Setting up a Linux Printer]]&lt;br /&gt;
* [[Using a linux editor inside VistA]]&lt;br /&gt;
* [[Lab Interfacing]]&lt;br /&gt;
* [[Indirection (@) issues]]&lt;br /&gt;
* [[VistA Database Globals]]&lt;br /&gt;
* [[Patching Instructions]]&lt;br /&gt;
* [[Redirecting pointers]]&lt;br /&gt;
* [[VistA Links]]&lt;br /&gt;
* [[Object Oriented Programming with M]]&lt;br /&gt;
* [[Programming with the VPE code library]]&lt;br /&gt;
* [[SSH Tunneling for CPRS]]&lt;br /&gt;
* [[GT.M Job Examine / System Status Overview]]&lt;br /&gt;
* [[Error Trapping with $ETRAP]]&lt;br /&gt;
* [[RPC&#039;s with Visual Cpp]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5027</id>
		<title>Programming VistA Issues</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5027"/>
		<updated>2007-07-20T20:20:48Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will cover programming issues.  &lt;br /&gt;
&lt;br /&gt;
=== Programming Issues ===&lt;br /&gt;
&lt;br /&gt;
* [[M/Mumps Language Issues]]&lt;br /&gt;
* [[TIU Package API]]&lt;br /&gt;
* [[Batch Signing of Documents]]&lt;br /&gt;
* [[Debugging with GT.M]]&lt;br /&gt;
* [[CPRSImager (CPRSChart mod)]]&lt;br /&gt;
* [[VistA Imaging Issues]]&lt;br /&gt;
* [[Pharmacy Issues]]&lt;br /&gt;
* [[Add on Functions]]&lt;br /&gt;
* [[Setting up a Linux Printer]]&lt;br /&gt;
* [[Using a linux editor inside VistA]]&lt;br /&gt;
* [[Lab Interfacing]]&lt;br /&gt;
* [[Indirection (@) issues]]&lt;br /&gt;
* [[VistA Database Globals]]&lt;br /&gt;
* [[Patching Instructions]]&lt;br /&gt;
* [[Redirecting pointers]]&lt;br /&gt;
* [[VistA Links]]&lt;br /&gt;
* [[Object Oriented Programming with M]]&lt;br /&gt;
* [[Programming with the VPE code library]]&lt;br /&gt;
* [[SSH Tunneling for CPRS]]&lt;br /&gt;
* [[GT.M Job Examine / System Status Overview]]&lt;br /&gt;
* [[Error Trapping with $ETRAP]]&lt;br /&gt;
* [[RPC&#039;s with Visual C(pp)]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5026</id>
		<title>Programming VistA Issues</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5026"/>
		<updated>2007-07-20T20:20:29Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will cover programming issues.  &lt;br /&gt;
&lt;br /&gt;
=== Programming Issues ===&lt;br /&gt;
&lt;br /&gt;
* [[M/Mumps Language Issues]]&lt;br /&gt;
* [[TIU Package API]]&lt;br /&gt;
* [[Batch Signing of Documents]]&lt;br /&gt;
* [[Debugging with GT.M]]&lt;br /&gt;
* [[CPRSImager (CPRSChart mod)]]&lt;br /&gt;
* [[VistA Imaging Issues]]&lt;br /&gt;
* [[Pharmacy Issues]]&lt;br /&gt;
* [[Add on Functions]]&lt;br /&gt;
* [[Setting up a Linux Printer]]&lt;br /&gt;
* [[Using a linux editor inside VistA]]&lt;br /&gt;
* [[Lab Interfacing]]&lt;br /&gt;
* [[Indirection (@) issues]]&lt;br /&gt;
* [[VistA Database Globals]]&lt;br /&gt;
* [[Patching Instructions]]&lt;br /&gt;
* [[Redirecting pointers]]&lt;br /&gt;
* [[VistA Links]]&lt;br /&gt;
* [[Object Oriented Programming with M]]&lt;br /&gt;
* [[Programming with the VPE code library]]&lt;br /&gt;
* [[SSH Tunneling for CPRS]]&lt;br /&gt;
* [[GT.M Job Examine / System Status Overview]]&lt;br /&gt;
* [[Error Trapping with $ETRAP]]&lt;br /&gt;
* [[RPC with Visual C++]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5025</id>
		<title>Programming VistA Issues</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5025"/>
		<updated>2007-07-20T20:20:08Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will cover programming issues.  &lt;br /&gt;
&lt;br /&gt;
=== Programming Issues ===&lt;br /&gt;
&lt;br /&gt;
* [[M/Mumps Language Issues]]&lt;br /&gt;
* [[TIU Package API]]&lt;br /&gt;
* [[Batch Signing of Documents]]&lt;br /&gt;
* [[Debugging with GT.M]]&lt;br /&gt;
* [[CPRSImager (CPRSChart mod)]]&lt;br /&gt;
* [[VistA Imaging Issues]]&lt;br /&gt;
* [[Pharmacy Issues]]&lt;br /&gt;
* [[Add on Functions]]&lt;br /&gt;
* [[Setting up a Linux Printer]]&lt;br /&gt;
* [[Using a linux editor inside VistA]]&lt;br /&gt;
* [[Lab Interfacing]]&lt;br /&gt;
* [[Indirection (@) issues]]&lt;br /&gt;
* [[VistA Database Globals]]&lt;br /&gt;
* [[Patching Instructions]]&lt;br /&gt;
* [[Redirecting pointers]]&lt;br /&gt;
* [[VistA Links]]&lt;br /&gt;
* [[Object Oriented Programming with M]]&lt;br /&gt;
* [[Programming with the VPE code library]]&lt;br /&gt;
* [[SSH Tunneling for CPRS]]&lt;br /&gt;
* [[GT.M Job Examine / System Status Overview]]&lt;br /&gt;
* [[Error Trapping with $ETRAP]]&lt;br /&gt;
* [[link]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5024</id>
		<title>Programming VistA Issues</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5024"/>
		<updated>2007-07-20T20:16:13Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will cover programming issues.  &lt;br /&gt;
&lt;br /&gt;
=== Programming Issues ===&lt;br /&gt;
&lt;br /&gt;
* [[M/Mumps Language Issues]]&lt;br /&gt;
* [[TIU Package API]]&lt;br /&gt;
* [[Batch Signing of Documents]]&lt;br /&gt;
* [[Debugging with GT.M]]&lt;br /&gt;
* [[CPRSImager (CPRSChart mod)]]&lt;br /&gt;
* [[VistA Imaging Issues]]&lt;br /&gt;
* [[Pharmacy Issues]]&lt;br /&gt;
* [[Add on Functions]]&lt;br /&gt;
* [[Setting up a Linux Printer]]&lt;br /&gt;
* [[Using a linux editor inside VistA]]&lt;br /&gt;
* [[Lab Interfacing]]&lt;br /&gt;
* [[Indirection (@) issues]]&lt;br /&gt;
* [[VistA Database Globals]]&lt;br /&gt;
* [[Patching Instructions]]&lt;br /&gt;
* [[Redirecting pointers]]&lt;br /&gt;
* [[VistA Links]]&lt;br /&gt;
* [[Object Oriented Programming with M]]&lt;br /&gt;
* [[Programming with the VPE code library]]&lt;br /&gt;
* [[SSH Tunneling for CPRS]]&lt;br /&gt;
* [[GT.M Job Examine / System Status Overview]]&lt;br /&gt;
* [[Error Trapping with $ETRAP]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5023</id>
		<title>Programming VistA Issues</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5023"/>
		<updated>2007-07-20T20:15:47Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: /* Programming Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will cover programming issues.  &lt;br /&gt;
&lt;br /&gt;
=== Programming Issues ===&lt;br /&gt;
&lt;br /&gt;
* [[M/Mumps Language Issues]]&lt;br /&gt;
* [[TIU Package API]]&lt;br /&gt;
* [[Batch Signing of Documents]]&lt;br /&gt;
* [[Debugging with GT.M]]&lt;br /&gt;
* [[CPRSImager (CPRSChart mod)]]&lt;br /&gt;
* [[VistA Imaging Issues]]&lt;br /&gt;
* [[Pharmacy Issues]]&lt;br /&gt;
* [[Add on Functions]]&lt;br /&gt;
* [[Setting up a Linux Printer]]&lt;br /&gt;
* [[Using a linux editor inside VistA]]&lt;br /&gt;
* [[Lab Interfacing]]&lt;br /&gt;
* [[Indirection (@) issues]]&lt;br /&gt;
* [[VistA Database Globals]]&lt;br /&gt;
* [[Patching Instructions]]&lt;br /&gt;
* [[Redirecting pointers]]&lt;br /&gt;
* [[VistA Links]]&lt;br /&gt;
* [[Object Oriented Programming with M]]&lt;br /&gt;
* [[Programming with the VPE code library]]&lt;br /&gt;
* [[SSH Tunneling for CPRS]]&lt;br /&gt;
* [[GT.M Job Examine / System Status Overview]]&lt;br /&gt;
* [[Error Trapping with $ETRAP]]&lt;br /&gt;
* [[RPC with Visual C++]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5022</id>
		<title>Programming VistA Issues</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5022"/>
		<updated>2007-07-20T20:12:42Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will cover programming issues.  &lt;br /&gt;
&lt;br /&gt;
=== Programming Issues ===&lt;br /&gt;
&lt;br /&gt;
* [[M/Mumps Language Issues]]&lt;br /&gt;
* [[TIU Package API]]&lt;br /&gt;
* [[Batch Signing of Documents]]&lt;br /&gt;
* [[Debugging with GT.M]]&lt;br /&gt;
* [[CPRSImager (CPRSChart mod)]]&lt;br /&gt;
* [[VistA Imaging Issues]]&lt;br /&gt;
* [[Pharmacy Issues]]&lt;br /&gt;
* [[Add on Functions]]&lt;br /&gt;
* [[Setting up a Linux Printer]]&lt;br /&gt;
* [[Using a linux editor inside VistA]]&lt;br /&gt;
* [[Lab Interfacing]]&lt;br /&gt;
* [[Indirection (@) issues]]&lt;br /&gt;
* [[VistA Database Globals]]&lt;br /&gt;
* [[Patching Instructions]]&lt;br /&gt;
* [[Redirecting pointers]]&lt;br /&gt;
* [[VistA Links]]&lt;br /&gt;
* [[Object Oriented Programming with M]]&lt;br /&gt;
* [[Programming with the VPE code library]]&lt;br /&gt;
* [[SSH Tunneling for CPRS]]&lt;br /&gt;
* [[GT.M Job Examine / System Status Overview]]&lt;br /&gt;
* [[Error Trapping with $ETRAP]]&lt;br /&gt;
* Using Bapi32.hpp (C++/RPC)&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5021</id>
		<title>Programming VistA Issues</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Programming_VistA_Issues&amp;diff=5021"/>
		<updated>2007-07-20T20:11:57Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: /* Programming Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will cover programming issues.  &lt;br /&gt;
&lt;br /&gt;
=== Programming Issues ===&lt;br /&gt;
&lt;br /&gt;
* [[M/Mumps Language Issues]]&lt;br /&gt;
* [[TIU Package API]]&lt;br /&gt;
* [[Batch Signing of Documents]]&lt;br /&gt;
* [[Debugging with GT.M]]&lt;br /&gt;
* [[CPRSImager (CPRSChart mod)]]&lt;br /&gt;
* [[VistA Imaging Issues]]&lt;br /&gt;
* [[Pharmacy Issues]]&lt;br /&gt;
* [[Add on Functions]]&lt;br /&gt;
* [[Setting up a Linux Printer]]&lt;br /&gt;
* [[Using a linux editor inside VistA]]&lt;br /&gt;
* [[Lab Interfacing]]&lt;br /&gt;
* [[Indirection (@) issues]]&lt;br /&gt;
* [[VistA Database Globals]]&lt;br /&gt;
* [[Patching Instructions]]&lt;br /&gt;
* [[Redirecting pointers]]&lt;br /&gt;
* [[VistA Links]]&lt;br /&gt;
* [[Object Oriented Programming with M]]&lt;br /&gt;
* [[Programming with the VPE code library]]&lt;br /&gt;
* [[SSH Tunneling for CPRS]]&lt;br /&gt;
* [[GT.M Job Examine / System Status Overview]]&lt;br /&gt;
* [[Error Trapping with $ETRAP]]&lt;br /&gt;
* [[Using Bapi32.hpp (C++/RPC)]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=5031</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=5031"/>
		<updated>2007-06-27T19:41:44Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in utilizing VistA to provide our customers with an EHR package.&lt;br /&gt;
&lt;br /&gt;
Here are three routines that I wrote to file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should be able to generalize it with little effort.&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
    *This module is in no way complete!  It is still a work in progress.  Having said that, it will at least work just fine.&lt;br /&gt;
    *There is a global variable (^CHECK) that should be removed.  This is just for my debugging purposes.&lt;br /&gt;
    *I set up my own cross references and use those cross references as the key for my data.&lt;br /&gt;
&lt;br /&gt;
[[Media:ACSPNT.m]]&lt;br /&gt;
&lt;br /&gt;
[[Media:ACSPNT2.m]]&lt;br /&gt;
&lt;br /&gt;
[[Media:ACSPNT3.m]]&lt;br /&gt;
&lt;br /&gt;
This is how to set up a multi listener for the HL7 subsystem using linux and GT.M:&lt;br /&gt;
&lt;br /&gt;
[[HL7 Multi-Listener]]&lt;br /&gt;
&lt;br /&gt;
eMail me with any questions: caseydupre@gmail.com&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=HL7_Multi-Listener&amp;diff=5033</id>
		<title>HL7 Multi-Listener</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=HL7_Multi-Listener&amp;diff=5033"/>
		<updated>2007-06-25T20:22:35Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Configure HL7 multi-listener and set-up HL7 link parameters.&lt;br /&gt;
&lt;br /&gt;
This instruction assumes that the reader is familiar with the linux&lt;br /&gt;
operating system and  the vi text editor or an equivalent.  It also&lt;br /&gt;
assumes that you have a working  installation and configuration of&lt;br /&gt;
VistA.  For this example, I am running Bhaskar&#039;s  SemiViva 2.3.1 on&lt;br /&gt;
ubuntu linux 7.04.  My machine&#039;s address will be 10.1.1.1, my HL7&lt;br /&gt;
listner will use port 9201, and my user will be root.&lt;br /&gt;
&lt;br /&gt;
All commands should be issued as root and will be expressed as so:&lt;br /&gt;
 &amp;lt;type this&amp;gt;.   &lt;br /&gt;
 &lt;br /&gt;
Any output or text to enter will be listed between&lt;br /&gt;
brackets and astricks, i.e.:&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 text to enter&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Background on my installation and paths:&lt;br /&gt;
&lt;br /&gt;
I unzipped the SemiViva package to /usr/local/ which created directory&lt;br /&gt;
VistAOfficeEHR_2.3.1.  So, my routines are stored in /usr/local/&lt;br /&gt;
VistAOfficeEHR_2.3.1/r.  Also, I ran install so that I created a child&lt;br /&gt;
environment in /vista.  So, my path to gtm is /vista/gtm_V5.2-000/.&lt;br /&gt;
&lt;br /&gt;
First, I installed xinetd because this package was not included by&lt;br /&gt;
default in the ubuntu 7.04 installation.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;apt-get update&amp;gt;&lt;br /&gt;
 &amp;lt;apt-get install xinetd&amp;gt;    installs the xinetd package.&lt;br /&gt;
&lt;br /&gt;
Make sure /etc/xinetd.conf contains &amp;quot;includedir /etc/xinetd.d&amp;quot; as&lt;br /&gt;
shown:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;cat /etc/xinetd.conf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 # Simple configuration file for xinetd&lt;br /&gt;
 #&lt;br /&gt;
 # Some defaults, and include /etc/xinetd.d/&lt;br /&gt;
 &lt;br /&gt;
 defaults&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 # Please note that you need a log_type line to be able to use log_on_success&lt;br /&gt;
 # and log_on_failure. The default is the following :&lt;br /&gt;
 # log_type = SYSLOG daemon info&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 includedir /etc/xinetd.d&lt;br /&gt;
 *******]&lt;br /&gt;
 &lt;br /&gt;
Create a VistA routine that will start the HL7 process when a message&lt;br /&gt;
is received&lt;br /&gt;
(make sure HLPORT is set to the port you want to use)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;vi /usr/local/VistAOfficeEHR_2.3.1/r/VISTAHL7.m&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [*******&lt;br /&gt;
  N HLDP,HLPORT,HLPRTS,IO&lt;br /&gt;
  S HLDP=0,HLPORT=9201&lt;br /&gt;
  F  S HLDP=$O(^HLCS(870,&amp;quot;E&amp;quot;,&amp;quot;M&amp;quot;,HLDP)) Q:&#039;HLDP  D  Q:(HLPRTS=HLPORT)&lt;br /&gt;
  .S HLPRTS=$P(^HLCS(870,HLDP,400),&amp;quot;^&amp;quot;,2)&lt;br /&gt;
  .Q&lt;br /&gt;
  I &#039;HLDP D ^%ZTER Q  K HLPORT,HLPRTS&lt;br /&gt;
  S IO=$P U IO:(NOWRAP:NODELIMITER:IOERROR=&amp;quot;TRAP&amp;quot;)&lt;br /&gt;
  D LISTEN^HLCSTCP&lt;br /&gt;
  Q&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Now, create a script in the gtm directory to call that routine:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;vi /vista/gtm_V5.2-000/vistahl7&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [*******&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 export HOME=/home/`whoami`&lt;br /&gt;
 cd `dirname $0`&lt;br /&gt;
 source ./env&lt;br /&gt;
 cd ../tmp&lt;br /&gt;
 mumps -run ^VISTAHL7&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
do a chmod on the vistahl7 script to make it executable:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;chmod +x /vista/gtm_V5.2-000/vistahl7&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, create a configuration file in xinetd.d to call that script:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;vi /etc/xinetd.d/vistahl7&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 service vistahl7&lt;br /&gt;
 {&lt;br /&gt;
         type = UNLISTED&lt;br /&gt;
         port = 9201&lt;br /&gt;
         socket_type = stream&lt;br /&gt;
         protocol = tcp&lt;br /&gt;
         user = root&lt;br /&gt;
         server = /vista/gtm_V5.2-000/vistahl7&lt;br /&gt;
         disable = no&lt;br /&gt;
         wait = no&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Finally, add the following entry at the end of /etc/services&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 vistahl7        9201/tcp                        # vista hl7 listener&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Restart the xinetd service with:&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/etc/init.d/xinetd restart&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
When you have a connection to the socket just created, you should be&lt;br /&gt;
able to check it with this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;netstat -lan | grep 9201&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [*******&lt;br /&gt;
 tcp        0      0 0.0.0.0:9201            0.0.0.0:*&lt;br /&gt;
 LISTEN&lt;br /&gt;
 tcp        0      0 10.1.1.1:9201         x.x.x.x:59972&lt;br /&gt;
 ESTABLISHED&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have not yet configured the VistA HL7 subsystem, check out this really nice website:&lt;br /&gt;
http://www.geocities.com/kdtop3/&lt;br /&gt;
&lt;br /&gt;
All you have to do to start using the new multi-listener is change your link type to MULTI LISTENER on the link edit screen, then stop and start the link&lt;br /&gt;
manager.  What you do with the message received is now up to you.  I wrote a routine to file patient and insurance information into the VistA database when demographics are received via HL7 from our billing system.&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=HL7_Multi-Listener&amp;diff=4854</id>
		<title>HL7 Multi-Listener</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=HL7_Multi-Listener&amp;diff=4854"/>
		<updated>2007-06-25T20:22:21Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Configure HL7 multi-listener and set-up HL7 link parameters.&lt;br /&gt;
&lt;br /&gt;
This instruction assumes that the reader is familiar with the linux&lt;br /&gt;
operating system and  the vi text editor or an equivalent.  It also&lt;br /&gt;
assumes that you have a working  installation and configuration of&lt;br /&gt;
VistA.  For this example, I am running Bhaskar&#039;s  SemiViva 2.3.1 on&lt;br /&gt;
ubuntu linux 7.04.  My machine&#039;s address will be 10.1.1.1, my HL7&lt;br /&gt;
listner will use port 9201, and my user will be root.&lt;br /&gt;
&lt;br /&gt;
All commands should be issued as root and will be expressed as so:&lt;br /&gt;
 &amp;lt;type this&amp;gt;.   &lt;br /&gt;
 &lt;br /&gt;
Any output or text to enter will be listed between&lt;br /&gt;
brackets and astricks, i.e.:&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 text to enter&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Background on my installation and paths:&lt;br /&gt;
&lt;br /&gt;
I unzipped the SemiViva package to /usr/local/ which created directory&lt;br /&gt;
VistAOfficeEHR_2.3.1.  So, my routines are stored in /usr/local/&lt;br /&gt;
VistAOfficeEHR_2.3.1/r.  Also, I ran install so that I created a child&lt;br /&gt;
environment in /vista.  So, my path to gtm is /vista/gtm_V5.2-000/.&lt;br /&gt;
&lt;br /&gt;
First, I installed xinetd because this package was not included by&lt;br /&gt;
default in the ubuntu 7.04 installation.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;apt-get update&amp;gt;&lt;br /&gt;
 &amp;lt;apt-get install xinetd&amp;gt;    installs the xinetd package.&lt;br /&gt;
&lt;br /&gt;
Make sure /etc/xinetd.conf contains &amp;quot;includedir /etc/xinetd.d&amp;quot; as&lt;br /&gt;
shown:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;cat /etc/xinetd.conf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 # Simple configuration file for xinetd&lt;br /&gt;
 #&lt;br /&gt;
 # Some defaults, and include /etc/xinetd.d/&lt;br /&gt;
 &lt;br /&gt;
 defaults&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 # Please note that you need a log_type line to be able to use log_on_success&lt;br /&gt;
 # and log_on_failure. The default is the following :&lt;br /&gt;
 # log_type = SYSLOG daemon info&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 includedir /etc/xinetd.d&lt;br /&gt;
 *******]&lt;br /&gt;
 &lt;br /&gt;
Create a VistA routine that will start the HL7 process when a message&lt;br /&gt;
is received&lt;br /&gt;
(make sure HLPORT is set to the port you want to use)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;vi /usr/local/VistAOfficeEHR_2.3.1/r/VISTAHL7.m&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [*******&lt;br /&gt;
  N HLDP,HLPORT,HLPRTS,IO&lt;br /&gt;
  S HLDP=0,HLPORT=9201&lt;br /&gt;
  F  S HLDP=$O(^HLCS(870,&amp;quot;E&amp;quot;,&amp;quot;M&amp;quot;,HLDP)) Q:&#039;HLDP  D  Q:(HLPRTS=HLPORT)&lt;br /&gt;
  .S HLPRTS=$P(^HLCS(870,HLDP,400),&amp;quot;^&amp;quot;,2)&lt;br /&gt;
  .Q&lt;br /&gt;
  I &#039;HLDP D ^%ZTER Q  K HLPORT,HLPRTS&lt;br /&gt;
  S IO=$P U IO:(NOWRAP:NODELIMITER:IOERROR=&amp;quot;TRAP&amp;quot;)&lt;br /&gt;
  D LISTEN^HLCSTCP&lt;br /&gt;
  Q&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Now, create a script in the gtm directory to call that routine:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;vi /vista/gtm_V5.2-000/vistahl7&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [*******&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 export HOME=/home/`whoami`&lt;br /&gt;
 cd `dirname $0`&lt;br /&gt;
 source ./env&lt;br /&gt;
 cd ../tmp&lt;br /&gt;
 mumps -run ^VISTAHL7&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
do a chmod on the vistahl7 script to make it executable:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;chmod +x /vista/gtm_V5.2-000/vistahl7&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, create a configuration file in xinetd.d to call that script:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;vi /etc/xinetd.d/vistahl7&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 service vistahl7&lt;br /&gt;
 {&lt;br /&gt;
         type = UNLISTED&lt;br /&gt;
         port = 9201&lt;br /&gt;
         socket_type = stream&lt;br /&gt;
         protocol = tcp&lt;br /&gt;
         user = root&lt;br /&gt;
         server = /vista/gtm_V5.2-000/vistahl7&lt;br /&gt;
         disable = no&lt;br /&gt;
         wait = no&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Finally, add the following entry at the end of /etc/services&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 vistahl7        9201/tcp                        # vista hl7 listener&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Restart the xinetd service with:&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/etc/init.d/xinetd restart&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
When you have a connection to the socket just created, you should be&lt;br /&gt;
able to check it with this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;netstat -lan | grep 9201&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [*******&lt;br /&gt;
 tcp        0      0 0.0.0.0:9201            0.0.0.0:*&lt;br /&gt;
 LISTEN&lt;br /&gt;
 tcp        0      0 10.1.1.1:9201         x.x.x.x:59972&lt;br /&gt;
 ESTABLISHED&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have not yet configured the VistA HL7 subsystem, check this really nice website:&lt;br /&gt;
http://www.geocities.com/kdtop3/&lt;br /&gt;
&lt;br /&gt;
All you have to do to start using the new multi-listener is change your link type to MULTI LISTENER on the link edit screen, then stop and start the link&lt;br /&gt;
manager.  What you do with the message received is now up to you.  I wrote a routine to file patient and insurance information into the VistA database when demographics are received via HL7 from our billing system.&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=HL7_Multi-Listener&amp;diff=4853</id>
		<title>HL7 Multi-Listener</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=HL7_Multi-Listener&amp;diff=4853"/>
		<updated>2007-06-25T20:20:11Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Configure HL7 multi-listener and set-up HL7 link parameters.&lt;br /&gt;
&lt;br /&gt;
This instruction assumes that the reader is familiar with the linux&lt;br /&gt;
operating system and  the vi text editor or an equivalent.  It also&lt;br /&gt;
assumes that you have a working  installation and configuration of&lt;br /&gt;
VistA.  For this example, I am running Bhaskar&#039;s  SemiViva 2.3.1 on&lt;br /&gt;
ubuntu linux 7.04.  My machine&#039;s address will be 10.1.1.1, my HL7&lt;br /&gt;
listner will use port 9201, and my user will be root.&lt;br /&gt;
&lt;br /&gt;
All commands should be issued as root and will be expressed as so:&lt;br /&gt;
 &amp;lt;type this&amp;gt;.   &lt;br /&gt;
 &lt;br /&gt;
Any output or text to enter will be listed between&lt;br /&gt;
brackets and astricks, i.e.:&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 text to enter&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Background on my installation and paths:&lt;br /&gt;
&lt;br /&gt;
I unzipped the SemiViva package to /usr/local/ which created directory&lt;br /&gt;
VistAOfficeEHR_2.3.1.  So, my routines are stored in /usr/local/&lt;br /&gt;
VistAOfficeEHR_2.3.1/r.  Also, I ran install so that I created a child&lt;br /&gt;
environment in /vista.  So, my path to gtm is /vista/gtm_V5.2-000/.&lt;br /&gt;
&lt;br /&gt;
First, I installed xinetd because this package was not included by&lt;br /&gt;
default in the ubuntu 7.04 installation.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;apt-get update&amp;gt;&lt;br /&gt;
 &amp;lt;apt-get install xinetd&amp;gt;    installs the xinetd package.&lt;br /&gt;
&lt;br /&gt;
Make sure /etc/xinetd.conf contains &amp;quot;includedir /etc/xinetd.d&amp;quot; as&lt;br /&gt;
shown:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;cat /etc/xinetd.conf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 # Simple configuration file for xinetd&lt;br /&gt;
 #&lt;br /&gt;
 # Some defaults, and include /etc/xinetd.d/&lt;br /&gt;
 &lt;br /&gt;
 defaults&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 # Please note that you need a log_type line to be able to use log_on_success&lt;br /&gt;
 # and log_on_failure. The default is the following :&lt;br /&gt;
 # log_type = SYSLOG daemon info&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 includedir /etc/xinetd.d&lt;br /&gt;
 *******]&lt;br /&gt;
 &lt;br /&gt;
Create a VistA routine that will start the HL7 process when a message&lt;br /&gt;
is received&lt;br /&gt;
(make sure HLPORT is set to the port you want to use)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;vi /usr/local/VistAOfficeEHR_2.3.1/r/VISTAHL7.m&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [*******&lt;br /&gt;
  N HLDP,HLPORT,HLPRTS,IO&lt;br /&gt;
  S HLDP=0,HLPORT=9201&lt;br /&gt;
  F  S HLDP=$O(^HLCS(870,&amp;quot;E&amp;quot;,&amp;quot;M&amp;quot;,HLDP)) Q:&#039;HLDP  D  Q:(HLPRTS=HLPORT)&lt;br /&gt;
  .S HLPRTS=$P(^HLCS(870,HLDP,400),&amp;quot;^&amp;quot;,2)&lt;br /&gt;
  .Q&lt;br /&gt;
  I &#039;HLDP D ^%ZTER Q  K HLPORT,HLPRTS&lt;br /&gt;
  S IO=$P U IO:(NOWRAP:NODELIMITER:IOERROR=&amp;quot;TRAP&amp;quot;)&lt;br /&gt;
  D LISTEN^HLCSTCP&lt;br /&gt;
  Q&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Now, create a script in the gtm directory to call that routine:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;vi /vista/gtm_V5.2-000/vistahl7&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [*******&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 export HOME=/home/`whoami`&lt;br /&gt;
 cd `dirname $0`&lt;br /&gt;
 source ./env&lt;br /&gt;
 cd ../tmp&lt;br /&gt;
 mumps -run ^VISTAHL7&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
do a chmod on the vistahl7 script to make it executable:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;chmod +x /vista/gtm_V5.2-000/vistahl7&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, create a configuration file in xinetd.d to call that script:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;vi /etc/xinetd.d/vistahl7&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 service vistahl7&lt;br /&gt;
 {&lt;br /&gt;
         type = UNLISTED&lt;br /&gt;
         port = 9201&lt;br /&gt;
         socket_type = stream&lt;br /&gt;
         protocol = tcp&lt;br /&gt;
         user = root&lt;br /&gt;
         server = /vista/gtm_V5.2-000/vistahl7&lt;br /&gt;
         disable = no&lt;br /&gt;
         wait = no&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Finally, add the following entry at the end of /etc/services&lt;br /&gt;
&lt;br /&gt;
 [*******&lt;br /&gt;
 vistahl7        9201/tcp                        # vista hl7 listener&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
Restart the xinetd service with:&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/etc/init.d/xinetd restart&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
When you have a connection to the socket just created, you should be&lt;br /&gt;
able to check it with this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;netstat -lan | grep 9201&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [*******&lt;br /&gt;
 tcp        0      0 0.0.0.0:9201            0.0.0.0:*&lt;br /&gt;
 LISTEN&lt;br /&gt;
 tcp        0      0 10.1.1.1:9201         x.x.x.x:59972&lt;br /&gt;
 ESTABLISHED&lt;br /&gt;
 *******]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a great site for configuring VistA (including the HL7 subsystem):&lt;br /&gt;
http://www.geocities.com/kdtop3/&lt;br /&gt;
&lt;br /&gt;
All you have to do to start using the new multi-listener is change your link type to MULTI LISTENER on the link edit screen, then stop and start the link&lt;br /&gt;
manager.  What you do with the message received is now up to you.  I wrote a routine to file patient and insurance information into the VistA database when demographics are received via HL7 from our billing system.&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4861</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4861"/>
		<updated>2007-06-07T21:27:47Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in utilizing VistA to provide our customers with an EHR package.&lt;br /&gt;
&lt;br /&gt;
Here are two routines I wrote file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should be able to generalize it with little effort.&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
    *This module is in no way complete!  It is still a work in progress.  Having said that, it will at least work just fine.&lt;br /&gt;
    *There is a global variable (^CHECK) that should be removed.  This is just for my debugging purposes.&lt;br /&gt;
    *I set up my own cross references and use those cross references as the key for my data.&lt;br /&gt;
&lt;br /&gt;
[[Media:ACSPNT.m]]&lt;br /&gt;
&lt;br /&gt;
[[Media:ACSPNT2.m]]&lt;br /&gt;
&lt;br /&gt;
[[Media:ACSPNT3.m]]&lt;br /&gt;
&lt;br /&gt;
This is how to set up a multi listener for the HL7 subsystem using linux and GT.M:&lt;br /&gt;
&lt;br /&gt;
[[HL7 Multi-Listener]]&lt;br /&gt;
&lt;br /&gt;
eMail me with any questions: caseydupre@gmail.com&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4795</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4795"/>
		<updated>2007-06-07T21:27:27Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in utilizing VistA to provide our customers with an EHR package.&lt;br /&gt;
&lt;br /&gt;
Here are two routines I wrote file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should be able to generalize it with little effort.&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
    *This module is in no way complete!  It is still a work in progress.  Having said that, it will at least work just fine.&lt;br /&gt;
    *There is a global variable (^CHECK) that should be removed.  This is just for my debugging purposes.&lt;br /&gt;
    *I set up my own cross references and use those cross references as the key for my data.&lt;br /&gt;
&lt;br /&gt;
[[Media:ACSPNT.m]]&lt;br /&gt;
&lt;br /&gt;
[[Media:ACSPNT2.m]]&lt;br /&gt;
&lt;br /&gt;
[[Media:ACSPNT3.m]]&lt;br /&gt;
&lt;br /&gt;
This is how to set up a multi listener for the HL7 subsystem using linux and GT.M:&lt;br /&gt;
&lt;br /&gt;
[[HL7 Multi-Listener]]&lt;br /&gt;
&lt;br /&gt;
eMail me with any questions: [caseydupre@gmail.com]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4794</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4794"/>
		<updated>2007-06-07T20:45:31Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in utilizing VistA to provide our customers with an EHR package.&lt;br /&gt;
&lt;br /&gt;
Here are two routines I wrote file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should be able to generalize it with little effort.&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
    *This module is in no way complete!  It is still a work in progress.  Having said that, it will at least work just fine.&lt;br /&gt;
    *There is a global variable (^CHECK) that should be removed.  This is just for my debugging purposes.&lt;br /&gt;
    *I set up my own cross references and use those cross references as the key for my data.&lt;br /&gt;
&lt;br /&gt;
[[Media:ACSPNT.m]]&lt;br /&gt;
&lt;br /&gt;
[[Media:ACSPNT2.m]]&lt;br /&gt;
&lt;br /&gt;
[[Media:ACSPNT3.m]]&lt;br /&gt;
&lt;br /&gt;
This is how to set up a multi listener for the HL7 subsystem using linux and GT.M:&lt;br /&gt;
&lt;br /&gt;
[[HL7 Multi-Listener]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=File:ACSPNT3.m&amp;diff=10968</id>
		<title>File:ACSPNT3.m</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=File:ACSPNT3.m&amp;diff=10968"/>
		<updated>2007-06-07T20:44:48Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4793</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4793"/>
		<updated>2007-05-23T19:10:24Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in utilizing VistA to provide our customers with an EHR package.&lt;br /&gt;
&lt;br /&gt;
Here are two routines I wrote file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should be able to generalize it with little effort.&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
    *This module is in no way complete!  It is still a work in progress.  Having said that, it will at least work just fine.&lt;br /&gt;
    *There is a global variable (^CHECK) that should be removed.  This is just for my debugging purposes.&lt;br /&gt;
    *I set up my own cross references and use those cross references as the key for my data.&lt;br /&gt;
&lt;br /&gt;
[[Media:ACSPNT.m]]&lt;br /&gt;
&lt;br /&gt;
[[Media:ACSPNT2.m]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is how to set up a multi listener for the HL7 subsystem using linux and GT.M:&lt;br /&gt;
&lt;br /&gt;
[[HL7 Multi-Listener]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4784</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4784"/>
		<updated>2007-05-23T19:08:44Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a computer programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in utilizing VistA to provide our customers with an EHR package.&lt;br /&gt;
&lt;br /&gt;
Here are two routines I wrote file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should be able to generalize it with little effort.&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
    *This module is in no way complete!  It is still a work in progress.  Having said that, it will at least work just fine.&lt;br /&gt;
    *There is a global variable (^CHECK) that should be removed.  This is just for my debugging purposes.&lt;br /&gt;
    *I set up my own cross references and use those cross references as the key for my data.&lt;br /&gt;
&lt;br /&gt;
[[Media:ACSPNT.m]]&lt;br /&gt;
&lt;br /&gt;
[[Media:ACSPNT2.m]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is how to set up a multi listener for the HL7 subsystem using linux and GT.M:&lt;br /&gt;
&lt;br /&gt;
[[HL7 Multi-Listener]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=File:ACSPNT2.m&amp;diff=10966</id>
		<title>File:ACSPNT2.m</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=File:ACSPNT2.m&amp;diff=10966"/>
		<updated>2007-05-23T19:08:18Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=File:ACSPNT.m&amp;diff=10965</id>
		<title>File:ACSPNT.m</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=File:ACSPNT.m&amp;diff=10965"/>
		<updated>2007-05-23T19:07:58Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4783</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4783"/>
		<updated>2007-05-22T20:27:52Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a computer programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in utilizing VistA to provide our customers with an EHR package.&lt;br /&gt;
&lt;br /&gt;
Here are two routines I wrote file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should be able to generalize it with little effort.&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
    *This module is in no way complete!  It is still a work in progress.  Having said that, it will at least work just fine.&lt;br /&gt;
    *There is a global variable (^CHECK) that should be removed.  This is just for my debugging purposes.&lt;br /&gt;
    *I set up my own cross references and use those cross references as the key for my data.&lt;br /&gt;
&lt;br /&gt;
[[Media:Acspnt.m]]&lt;br /&gt;
&lt;br /&gt;
[[Media:Acspnt2.m]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is how to set up a multi listener for the HL7 subsystem using linux and GT.M:&lt;br /&gt;
&lt;br /&gt;
[[HL7 Multi-Listener]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)&amp;diff=9732</id>
		<title>Software Development (WG1)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)&amp;diff=9732"/>
		<updated>2007-05-22T20:23:37Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: /*  Modified/New Routines */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Individual Team Pages/Progress ==&lt;br /&gt;
=== [[Software Development (WG1) Distribution (T1) | Distribution]] ===&lt;br /&gt;
=== [[Software Development (WG1) Patching (T2) | Patching]] ===&lt;br /&gt;
=== [[Software Development (WG1) Version Control (T3) | Version Control]] ===&lt;br /&gt;
=== [[Software Development (WG1) Configuration (T4) | Configuration]] ===&lt;br /&gt;
=== [[Software Development (WG1) M2Web (T5) | M2Web]] ===&lt;br /&gt;
=== [[Software Development (WG1) Portability (T6) | Portability]] ===&lt;br /&gt;
=== [[Software Development (WG1) Modified/New Routines (T7) | Modified/New Routines]] ===&lt;br /&gt;
*[[User:Cmdupre]] - Patient filing VIA HL7 messaging&lt;br /&gt;
&lt;br /&gt;
=== [[Software Development (WG1) Education (T8) | Education Team]] ===&lt;br /&gt;
&lt;br /&gt;
== Historic Meetings ==&lt;br /&gt;
=== Seattle Meeting 12-May-2005 thru 15-May-2005 ===&lt;br /&gt;
==== Agenda ====&lt;br /&gt;
==== Summary of Results ==== &lt;br /&gt;
=== Greenbelt Meeting 27-Oct-2005 thru 30-Oct-2005 ===&lt;br /&gt;
&lt;br /&gt;
[http://www.worldvista.org/working-groups/software-development/meetings/20051027-Greenbelt Meeting Homepage]&lt;br /&gt;
&lt;br /&gt;
ATTENDEES&lt;br /&gt;
*1.Ignacio Valdes&lt;br /&gt;
*2.Jim Self&lt;br /&gt;
*3.Brian Lord&lt;br /&gt;
*4.David Whitten&lt;br /&gt;
*5.Mark Amundson&lt;br /&gt;
*6.K.S. Bhaskar&lt;br /&gt;
*7.Maury Pepper&lt;br /&gt;
*8.Rick Marshall&lt;br /&gt;
*9.Dee Knapp&lt;br /&gt;
*10.Kevin Toppenberg&lt;br /&gt;
*11.Nancy Anthracite&lt;br /&gt;
*12.Chris Richardson&lt;br /&gt;
*13.Joseph Dal Molin&lt;br /&gt;
*14.Claudine Beron&lt;br /&gt;
*15.Bob Miller&lt;br /&gt;
*16.Robert DeWayne&lt;br /&gt;
*17.Frank Fukunaga&lt;br /&gt;
*18.David Shull&lt;br /&gt;
*19.Jeff Abbott (remotely)&lt;br /&gt;
*20.Norman Dodd (remotely)&lt;br /&gt;
*21.Steve Miysato (remotely)&lt;br /&gt;
*22.Larry Landis&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enhancement@2:00pm Sunday, October 30, 2005&lt;br /&gt;
Name changed “WorldVistA EHR Plus”&lt;br /&gt;
&lt;br /&gt;
Final Vote@4:30pm Saturday, October 29, 2005 (1 vote each, secret)&lt;br /&gt;
9	WorldVistA EHR&lt;br /&gt;
1	VistaLibre&lt;br /&gt;
1	VOICE&lt;br /&gt;
0	FreeVistA&lt;br /&gt;
3	CommunityVistA&lt;br /&gt;
1	WorldVistA&lt;br /&gt;
&lt;br /&gt;
Preliminary Vote @ 3:30pm Saturday, October 29, 2005 (3 votes each, open)&lt;br /&gt;
4	WorldVistA&lt;br /&gt;
13	WorldVistA EHR&lt;br /&gt;
1	VistA EHR&lt;br /&gt;
1	Opensource VistA&lt;br /&gt;
5	VOICE&lt;br /&gt;
0	Buena VistA&lt;br /&gt;
1	EVistA&lt;br /&gt;
6	FreeVistA&lt;br /&gt;
0	FreeVistA EHR&lt;br /&gt;
0	International VistA&lt;br /&gt;
1	RealVistA&lt;br /&gt;
1	UnivistA&lt;br /&gt;
0	GrandeVista&lt;br /&gt;
0	WVistA&lt;br /&gt;
0	VistARx&lt;br /&gt;
1	Leonardo Da Vista&lt;br /&gt;
1	TrueVistA&lt;br /&gt;
1	VistAVera/VeraVistA&lt;br /&gt;
4	Community VistA&lt;br /&gt;
0	MyHealthyVistA&lt;br /&gt;
1	OneVistA/1VistA/VistAOne&lt;br /&gt;
0	VistA Revolutions&lt;br /&gt;
0	VistAXP&lt;br /&gt;
5	VistALibrA&lt;br /&gt;
0	VistAViva/VivaVista&lt;br /&gt;
0	VistA Gold&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PICTURES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[[Image:Wiki.png|Caption text]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)&amp;diff=4781</id>
		<title>Software Development (WG1)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)&amp;diff=4781"/>
		<updated>2007-05-22T20:21:53Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: /*  Modified/New Routines */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Individual Team Pages/Progress ==&lt;br /&gt;
=== [[Software Development (WG1) Distribution (T1) | Distribution]] ===&lt;br /&gt;
=== [[Software Development (WG1) Patching (T2) | Patching]] ===&lt;br /&gt;
=== [[Software Development (WG1) Version Control (T3) | Version Control]] ===&lt;br /&gt;
=== [[Software Development (WG1) Configuration (T4) | Configuration]] ===&lt;br /&gt;
=== [[Software Development (WG1) M2Web (T5) | M2Web]] ===&lt;br /&gt;
=== [[Software Development (WG1) Portability (T6) | Portability]] ===&lt;br /&gt;
=== [[Software Development (WG1) Modified/New Routines (T7) | Modified/New Routines]] ===&lt;br /&gt;
*[[User:Cmdupre]]&lt;br /&gt;
&lt;br /&gt;
=== [[Software Development (WG1) Education (T8) | Education Team]] ===&lt;br /&gt;
&lt;br /&gt;
== Historic Meetings ==&lt;br /&gt;
=== Seattle Meeting 12-May-2005 thru 15-May-2005 ===&lt;br /&gt;
==== Agenda ====&lt;br /&gt;
==== Summary of Results ==== &lt;br /&gt;
=== Greenbelt Meeting 27-Oct-2005 thru 30-Oct-2005 ===&lt;br /&gt;
&lt;br /&gt;
[http://www.worldvista.org/working-groups/software-development/meetings/20051027-Greenbelt Meeting Homepage]&lt;br /&gt;
&lt;br /&gt;
ATTENDEES&lt;br /&gt;
*1.Ignacio Valdes&lt;br /&gt;
*2.Jim Self&lt;br /&gt;
*3.Brian Lord&lt;br /&gt;
*4.David Whitten&lt;br /&gt;
*5.Mark Amundson&lt;br /&gt;
*6.K.S. Bhaskar&lt;br /&gt;
*7.Maury Pepper&lt;br /&gt;
*8.Rick Marshall&lt;br /&gt;
*9.Dee Knapp&lt;br /&gt;
*10.Kevin Toppenberg&lt;br /&gt;
*11.Nancy Anthracite&lt;br /&gt;
*12.Chris Richardson&lt;br /&gt;
*13.Joseph Dal Molin&lt;br /&gt;
*14.Claudine Beron&lt;br /&gt;
*15.Bob Miller&lt;br /&gt;
*16.Robert DeWayne&lt;br /&gt;
*17.Frank Fukunaga&lt;br /&gt;
*18.David Shull&lt;br /&gt;
*19.Jeff Abbott (remotely)&lt;br /&gt;
*20.Norman Dodd (remotely)&lt;br /&gt;
*21.Steve Miysato (remotely)&lt;br /&gt;
*22.Larry Landis&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enhancement@2:00pm Sunday, October 30, 2005&lt;br /&gt;
Name changed “WorldVistA EHR Plus”&lt;br /&gt;
&lt;br /&gt;
Final Vote@4:30pm Saturday, October 29, 2005 (1 vote each, secret)&lt;br /&gt;
9	WorldVistA EHR&lt;br /&gt;
1	VistaLibre&lt;br /&gt;
1	VOICE&lt;br /&gt;
0	FreeVistA&lt;br /&gt;
3	CommunityVistA&lt;br /&gt;
1	WorldVistA&lt;br /&gt;
&lt;br /&gt;
Preliminary Vote @ 3:30pm Saturday, October 29, 2005 (3 votes each, open)&lt;br /&gt;
4	WorldVistA&lt;br /&gt;
13	WorldVistA EHR&lt;br /&gt;
1	VistA EHR&lt;br /&gt;
1	Opensource VistA&lt;br /&gt;
5	VOICE&lt;br /&gt;
0	Buena VistA&lt;br /&gt;
1	EVistA&lt;br /&gt;
6	FreeVistA&lt;br /&gt;
0	FreeVistA EHR&lt;br /&gt;
0	International VistA&lt;br /&gt;
1	RealVistA&lt;br /&gt;
1	UnivistA&lt;br /&gt;
0	GrandeVista&lt;br /&gt;
0	WVistA&lt;br /&gt;
0	VistARx&lt;br /&gt;
1	Leonardo Da Vista&lt;br /&gt;
1	TrueVistA&lt;br /&gt;
1	VistAVera/VeraVistA&lt;br /&gt;
4	Community VistA&lt;br /&gt;
0	MyHealthyVistA&lt;br /&gt;
1	OneVistA/1VistA/VistAOne&lt;br /&gt;
0	VistA Revolutions&lt;br /&gt;
0	VistAXP&lt;br /&gt;
5	VistALibrA&lt;br /&gt;
0	VistAViva/VivaVista&lt;br /&gt;
0	VistA Gold&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PICTURES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[[Image:Wiki.png|Caption text]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Software_Development_(WG1)&amp;diff=4780</id>
		<title>Software Development (WG1)</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Software_Development_(WG1)&amp;diff=4780"/>
		<updated>2007-05-22T20:21:34Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: /*  Modified/New Routines */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Individual Team Pages/Progress ==&lt;br /&gt;
=== [[Software Development (WG1) Distribution (T1) | Distribution]] ===&lt;br /&gt;
=== [[Software Development (WG1) Patching (T2) | Patching]] ===&lt;br /&gt;
=== [[Software Development (WG1) Version Control (T3) | Version Control]] ===&lt;br /&gt;
=== [[Software Development (WG1) Configuration (T4) | Configuration]] ===&lt;br /&gt;
=== [[Software Development (WG1) M2Web (T5) | M2Web]] ===&lt;br /&gt;
=== [[Software Development (WG1) Portability (T6) | Portability]] ===&lt;br /&gt;
=== [[Software Development (WG1) Modified/New Routines (T7) | Modified/New Routines]] ===&lt;br /&gt;
*[[Cmdupre]]&lt;br /&gt;
&lt;br /&gt;
=== [[Software Development (WG1) Education (T8) | Education Team]] ===&lt;br /&gt;
&lt;br /&gt;
== Historic Meetings ==&lt;br /&gt;
=== Seattle Meeting 12-May-2005 thru 15-May-2005 ===&lt;br /&gt;
==== Agenda ====&lt;br /&gt;
==== Summary of Results ==== &lt;br /&gt;
=== Greenbelt Meeting 27-Oct-2005 thru 30-Oct-2005 ===&lt;br /&gt;
&lt;br /&gt;
[http://www.worldvista.org/working-groups/software-development/meetings/20051027-Greenbelt Meeting Homepage]&lt;br /&gt;
&lt;br /&gt;
ATTENDEES&lt;br /&gt;
*1.Ignacio Valdes&lt;br /&gt;
*2.Jim Self&lt;br /&gt;
*3.Brian Lord&lt;br /&gt;
*4.David Whitten&lt;br /&gt;
*5.Mark Amundson&lt;br /&gt;
*6.K.S. Bhaskar&lt;br /&gt;
*7.Maury Pepper&lt;br /&gt;
*8.Rick Marshall&lt;br /&gt;
*9.Dee Knapp&lt;br /&gt;
*10.Kevin Toppenberg&lt;br /&gt;
*11.Nancy Anthracite&lt;br /&gt;
*12.Chris Richardson&lt;br /&gt;
*13.Joseph Dal Molin&lt;br /&gt;
*14.Claudine Beron&lt;br /&gt;
*15.Bob Miller&lt;br /&gt;
*16.Robert DeWayne&lt;br /&gt;
*17.Frank Fukunaga&lt;br /&gt;
*18.David Shull&lt;br /&gt;
*19.Jeff Abbott (remotely)&lt;br /&gt;
*20.Norman Dodd (remotely)&lt;br /&gt;
*21.Steve Miysato (remotely)&lt;br /&gt;
*22.Larry Landis&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enhancement@2:00pm Sunday, October 30, 2005&lt;br /&gt;
Name changed “WorldVistA EHR Plus”&lt;br /&gt;
&lt;br /&gt;
Final Vote@4:30pm Saturday, October 29, 2005 (1 vote each, secret)&lt;br /&gt;
9	WorldVistA EHR&lt;br /&gt;
1	VistaLibre&lt;br /&gt;
1	VOICE&lt;br /&gt;
0	FreeVistA&lt;br /&gt;
3	CommunityVistA&lt;br /&gt;
1	WorldVistA&lt;br /&gt;
&lt;br /&gt;
Preliminary Vote @ 3:30pm Saturday, October 29, 2005 (3 votes each, open)&lt;br /&gt;
4	WorldVistA&lt;br /&gt;
13	WorldVistA EHR&lt;br /&gt;
1	VistA EHR&lt;br /&gt;
1	Opensource VistA&lt;br /&gt;
5	VOICE&lt;br /&gt;
0	Buena VistA&lt;br /&gt;
1	EVistA&lt;br /&gt;
6	FreeVistA&lt;br /&gt;
0	FreeVistA EHR&lt;br /&gt;
0	International VistA&lt;br /&gt;
1	RealVistA&lt;br /&gt;
1	UnivistA&lt;br /&gt;
0	GrandeVista&lt;br /&gt;
0	WVistA&lt;br /&gt;
0	VistARx&lt;br /&gt;
1	Leonardo Da Vista&lt;br /&gt;
1	TrueVistA&lt;br /&gt;
1	VistAVera/VeraVistA&lt;br /&gt;
4	Community VistA&lt;br /&gt;
0	MyHealthyVistA&lt;br /&gt;
1	OneVistA/1VistA/VistAOne&lt;br /&gt;
0	VistA Revolutions&lt;br /&gt;
0	VistAXP&lt;br /&gt;
5	VistALibrA&lt;br /&gt;
0	VistAViva/VivaVista&lt;br /&gt;
0	VistA Gold&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PICTURES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[[Image:Wiki.png|Caption text]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4782</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4782"/>
		<updated>2007-05-22T20:18:24Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a computer programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in utilizing VistA to provide our customers with an EHR package.&lt;br /&gt;
&lt;br /&gt;
Here are two routines I wrote file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should definitely be able to generalize it.&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
    *This module is in no way complete!  It is still a work in progress.  Having said that, it *should* at least work just fine.&lt;br /&gt;
    *There is a global variable (^CHECK) that should be removed.  This is just for debugging purposes.&lt;br /&gt;
    *I set up my own cross references and use those cross references as the key for my data.&lt;br /&gt;
&lt;br /&gt;
[[Media:Acspnt.m]]&lt;br /&gt;
&lt;br /&gt;
[[Media:Acspnt2.m]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is how to set up a multi listener for the HL7 subsystem using linux and GT.M:&lt;br /&gt;
&lt;br /&gt;
[[HL7 Multi-Listener]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4778</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4778"/>
		<updated>2007-05-22T20:17:14Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a computer programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in using VistA to provide an EHR package to our customers.&lt;br /&gt;
&lt;br /&gt;
Here are two routines I wrote file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should definitely be able to generalize it.&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
    *This module is in no way complete!  It is still a work in progress.  Having said that, it *should* at least work just fine.&lt;br /&gt;
    *There is a global variable (^CHECK) that should be removed.  This is just for debugging purposes.&lt;br /&gt;
    *I set up my own cross references and use those cross references as the key for my data.&lt;br /&gt;
&lt;br /&gt;
[[Media:Acspnt.m]]&lt;br /&gt;
&lt;br /&gt;
[[Media:Acspnt2.m]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is how to set up a multi listener for the HL7 subsystem using linux and GT.M:&lt;br /&gt;
&lt;br /&gt;
[[HL7 Multi-Listener]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4777</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4777"/>
		<updated>2007-05-22T20:16:42Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a computer programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in using VistA to provide an EHR package to our customers.&lt;br /&gt;
&lt;br /&gt;
Here are two routines I wrote file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should definitely be able to generalize it.&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
    *This module is in no way complete!  It is still a work in progress.  Having said that, it *should* at least work just fine.&lt;br /&gt;
    *There is a global variable (^CHECK) that will be removed later.  This is just for debugging purposes.&lt;br /&gt;
    *I set up my own cross references and use those cross references as the key for my data.&lt;br /&gt;
&lt;br /&gt;
[[Media:Acspnt.m]]&lt;br /&gt;
&lt;br /&gt;
[[Media:Acspnt2.m]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is how to set up a multi listener for the HL7 subsystem using linux and GT.M:&lt;br /&gt;
&lt;br /&gt;
[[HL7 Multi-Listener]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4776</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4776"/>
		<updated>2007-05-22T16:48:41Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a computer programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in using VistA to provide an EHR package to our customers.&lt;br /&gt;
&lt;br /&gt;
Here are two routines I wrote file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should definitely be able to generalize it.&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
    *This module is in no way complete!  It is still a work in progress.  Having said that, it *should* at least work just fine.&lt;br /&gt;
    *There is a global variable (^CHECK) that will be removed later.  This is just for debugging purposes.&lt;br /&gt;
    *I set up my own cross references and use those cross references as the key for my data.&lt;br /&gt;
&lt;br /&gt;
[[Media:Acspnt.m]]&lt;br /&gt;
&lt;br /&gt;
[[Media:Acspnt2.m]]&lt;br /&gt;
&lt;br /&gt;
It is obvious that I have no idea what I am doing with this wiki page =)  Please bare with me.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is how to set up a multi listener for the HL7 subsystem using linux and GT.M:&lt;br /&gt;
&lt;br /&gt;
[[HL7 Multi-Listener]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4775</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4775"/>
		<updated>2007-05-22T16:48:22Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a computer programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in using VistA to provide an EHR package to our customers.&lt;br /&gt;
&lt;br /&gt;
Here are two routines I wrote file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should definitely be able to generalize it.&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
    *This module is in no way complete!  It is still a work in progress.  Having said that, it *should* at least work just fine.&lt;br /&gt;
    *There is a global variable (^CHECK) that will be removed later.  This is just for debugging purposes.&lt;br /&gt;
    *I set up my own cross references and use those cross references as the key for my data.&lt;br /&gt;
&lt;br /&gt;
[[Media:Acspnt.m]]&lt;br /&gt;
&lt;br /&gt;
[[Media:Acspnt2.m]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is obvious that I have no idea what I am doing with this wiki page =)  Please bare with me.&lt;br /&gt;
&lt;br /&gt;
This is how to set up a multi listener for the HL7 subsystem using linux and GT.M:&lt;br /&gt;
&lt;br /&gt;
[[HL7 Multi-Listener]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4774</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4774"/>
		<updated>2007-05-22T16:46:31Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a computer programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in using VistA to provide an EHR package to our customers.&lt;br /&gt;
&lt;br /&gt;
Here are two routines I wrote file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should definitely be able to generalize it.&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
    *This module is in no way complete!  It is still a work in progress.  Having said that, it *should* at least work just fine.&lt;br /&gt;
    *There is a global variable (^CHECK) that will be removed later.  This is just for debugging purposes.&lt;br /&gt;
    *I set up my own cross references and use those cross references as the key for my data.&lt;br /&gt;
&lt;br /&gt;
[[Media:Acspnt.m]]&lt;br /&gt;
&lt;br /&gt;
[[Media:Acspnt2.m]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is obvious that I have no idea what I am doing with this wiki page =)  Please bare with me.&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4773</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4773"/>
		<updated>2007-05-22T16:46:18Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a computer programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in using VistA to provide an EHR package to our customers.&lt;br /&gt;
&lt;br /&gt;
Here are two routines I wrote file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should definitely be able to generalize it.&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
    *This module is in no way complete!  It is still a work in progress.  Having said that, it *should* at least work just fine.&lt;br /&gt;
    *There is a global variable (^CHECK) that will be removed later.  This is just for debugging purposes.&lt;br /&gt;
    *I set up my own cross references and use those cross references as the key for my data.&lt;br /&gt;
&lt;br /&gt;
[[:Media:Acspnt.m]]&lt;br /&gt;
&lt;br /&gt;
[[:Media:Acspnt2.m]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is obvious that I have no idea what I am doing with this wiki page =)  Please bare with me.&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4772</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4772"/>
		<updated>2007-05-22T16:46:04Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a computer programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in using VistA to provide an EHR package to our customers.&lt;br /&gt;
&lt;br /&gt;
Here are two routines I wrote file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should definitely be able to generalize it.&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
    *This module is in no way complete!  It is still a work in progress.  Having said that, it *should* at least work just fine.&lt;br /&gt;
    *There is a global variable (^CHECK) that will be removed later.  This is just for debugging purposes.&lt;br /&gt;
    *I set up my own cross references and use those cross references as the key for my data.&lt;br /&gt;
&lt;br /&gt;
[[File:Acspnt.m]]&lt;br /&gt;
&lt;br /&gt;
[[File:Acspnt2.m]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is obvious that I have no idea what I am doing with this wiki page =)  Please bare with me.&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4771</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4771"/>
		<updated>2007-05-22T16:42:31Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a computer programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in using VistA to provide an EHR package to our customers.&lt;br /&gt;
&lt;br /&gt;
Here are two routines I wrote file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should definitely be able to generalize it.&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
    *This module is in no way complete!  It is still a work in progress.  Having said that, it *should* at least work just fine.&lt;br /&gt;
    *There is a global variable (^CHECK) that will be removed later.  This is just for debugging purposes.&lt;br /&gt;
    *I set up my own cross references and use those cross references as the key for my data.&lt;br /&gt;
&lt;br /&gt;
[[Image:Acspnt.m]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Acspnt2.m]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is obvious that I have no idea what I am doing with this wiki page =)  Please bare with me.&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4770</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4770"/>
		<updated>2007-05-22T16:39:11Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a computer programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in using VistA to provide an EHR package to our customers.&lt;br /&gt;
&lt;br /&gt;
Here are two routines I wrote file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should definitely be able to generalize it.&lt;br /&gt;
&lt;br /&gt;
Note: this module is in no way complete!  It is still a work in progress.  Having said that, it *should* at least work just fine.  There is a global variable (^CHECK) that will be removed later.  This is just for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
[[Image:Acspnt.m]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Acspnt2.m]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is obvious that I have no idea what I am doing with this wiki page =)  Please bare with me.&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4769</id>
		<title>User:Cmdupre</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=User:Cmdupre&amp;diff=4769"/>
		<updated>2007-05-22T16:37:41Z</updated>

		<summary type="html">&lt;p&gt;Cmdupre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a computer programmer with a company in Lafayette, Louisiana.  We are a software vendor who concentrates mostly on our medical billing package.  We are interested in using VistA to provide an EHR package to our customers.&lt;br /&gt;
&lt;br /&gt;
Here are two routines I wrote file our patient demographics via the HL7 messaging subsystem through our billing system interface program.  Most of the data validation is taken care of on my cobol side, so you will not see much of that done here.  This is a very specific module for my application, but we should definitely be able to generalize it.&lt;br /&gt;
&lt;br /&gt;
Note: this module is in no way complete!  It is still a work in progress.  Having said that, it *should* at least work just fine.  There is a global variable (^CHECK) that will be removed later.  This is just for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
[[Image:Acspnt.m]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Acspnt2.m]]&lt;/div&gt;</summary>
		<author><name>Cmdupre</name></author>
	</entry>
</feed>