SDVWHLE2 ;ENHANCED HL7 TRANSMIT DRIVERS (continued) FOR SDAPI and MAKE AN APPOINTMENT REQUEST 11/18/06 ;;5.3;Scheduling;**502**;Aug 13, 1993 ;Build 14 ; Copyright (C) 2007 WorldVistA ; ; This program is free software; you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation; either version 2 of the License, or ; (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ; TRNSDAPI(SDARRAY,MSGCTRL) ; ; VERSION 3.1 N APPARMS,HLSTATS,ERROR,SEG,WHO N HLMSTATE,ERROR,INDEX,CONSTRUC,IFLAG,X,Y,INTE,ERR ; ; ;HL7 TRANSMIT DRIVER FOR ;REQUEST SDAPI LIST OF APPOINTMENTS USING VWSDAPI CALLUP PARAMETERS ; ; ;HOWEVER, DATE/TIMES ARE EXTERNAL FORM,PATIENT SSN OR OTHER LOOKUP ID INSTEAD OF PATIENT DFN ;( FOR PARTIENTS IN FILE 2) ;AND LOCATION (CLINIC) ( IN FILE 44) EXTERNAL NAMES INSTEAD OF INTERNAL IEN.ALSO FOR DATA ENTRY CLERK, EXTERNAL ;FORMAT (IN FILE 200 NEW PERSON FILE) ; ;INPUT : MSGCTRL PASSED BY REFERENCE TO RECEIVE THIS BACK AFTER TRANSMITTING ; SDARRAY ; ;EXAMPLE ANALOGOUS CALL: S SDARRAY(1)="Nov 10,2006;Nov 14,2006" ; S SDARRAY(3)="R;I" ;; S SDARRAY(2)="HOSPLOC" EXTERNAL NAMES ;; S SDARRAY(4)=100001234 ;SSN OR OTHER LOOKUP ID INSTEAD OF DFN ;ZZ PATIENT,TEST ONE ; S SDARRAY("MAX")=3 ; S SDARRAY("FLDS")="1;2;3" ; D $$SDAPI^SDAMA301(.SDARRAY) ; ; (PASSED ARRAYS WITH NUMERIC INFO W/O QUOTES AND NON-NUMERIC ENCLOSED WITH QUOTES) ;OUTPUT : ; RETURN ; IER="OK" ; ="NEW MESSAGE ERROR" ; ="QRD" ERROR ; ="QRF" ERROR ; ="NTE"_INDEX ; =ERROR VALUE ; ;BUILD PARAMETERS S APPARMS("COUNTRY")="USA" S APPARMS("FIELD SEPARATOR")="|" S APPARMS("ENCODING CHARACTERS")="^~\&" S APPARMS("VERSION")=2.4 S APPARMS("MESSAGE TYPE")="ADT" S APPARMS("EVENT")="A19" ; PATIENT INQUIRY ; ;;CREATE NEW MESSAGE ;; ; S ERR="" S ERROR="" I '$$NEWMSG^HLOAPI(.APPARMS,.HLMSTATE,.ERROR) Q "NEW MESSAGE ERROR" ; ; ; ;Use message control ID in MSH segment for sync flag later in returned application ack ; ;;CREATE SEGMENT ; D SET^HLOAPI(.SEG,"QRD",0) D SET^HLOAPI(.SEG,$$HLDATE^HLFNC($$NOW^XLFDT(),"TS"),1) ; ;; ADD SEGMENT I '$$ADDSEG^HLOAPI(.HLMSTATE,.SEG) S ERR="QRD" ;CREATE SEGMENT ; D SET^HLOAPI(.SEG,"QRF",0) S X=$P(SDARRAY(1),";",1) D ^%DT S INTE=Y ;EXT TO FM INTERNAL D SET^HLOAPI(.SEG,$$HLDATE^HLFNC(INTE,"TS"),2) ;WHEN START DATE S X=$P(SDARRAY(1),";",2) D ^%DT S INTE=Y ;EXT TO FM INTERNAL D SET^HLOAPI(.SEG,$$HLDATE^HLFNC(INTE,"TS"),3) ;WHEN END DATE D SET^HLOAPI(.SEG,"SCHED",6) ;WHICH DATE/TIME QUALIFIER D SET^HLOAPI(.SEG,"REP",7) ; WHICH DATE/TIME STATUS QUALIFIER D SET^HLOAPI(.SEG,"ALL",8) ; DATE/TIME SELECTION QUALIFIER ; ;ADD SEGMENT TO MESSAGE ; I '$$ADDSEG^HLOAPI(.HLMSTATE,.SEG) S ERR="QRF" ; ; ;CREATE NTE SEGMENTS FROM SDARRAY ELEMENTS S INDEX=0 F S INDEX=$O(SDARRAY(INDEX)) Q:INDEX="" D .D SET^HLOAPI(.SEG,"NTE",0) .I INDEX=+INDEX S CONSTRUC="SDARRAY("_INDEX_")=" .I INDEX'=+INDEX S CONSTRUC="SDARRAY("_""""_INDEX_""""_")=" .I SDARRAY(INDEX)=+SDARRAY(INDEX) S CONSTRUC=CONSTRUC_SDARRAY(INDEX) .I SDARRAY(INDEX)'=+SDARRAY(INDEX) S CONSTRUC=CONSTRUC_""""_SDARRAY(INDEX)_"""" .D SET^HLOAPI(.SEG,CONSTRUC,3) ; COMMENTS STORING SDARRAY(?)ARRAY ELEMENT .; .;ADD SEGMENT TO MESSAGE .; .; .S IFLAG=0 .I '$$ADDSEG^HLOAPI(.HLMSTATE,.SEG) S IFLAG="NTE"_INDEX .; .I IFLAG'=0 Q I IFLAG'=0 Q IFLAG ; DEFINE SENDING AND RECEIVING PARAMETERS S APPARMS("SENDING APPLICATION")="VWSD HLO EXT" S APPARMS("ACCEPT ACK TYPE")="NE" ;"AL" ;S APPARMS("APP ACK RESPONSE")="APPACKRR^SDVWHLEX" ;S APPARMS("ACCEPT ACK RESPONSE")="MSGPROC^SDVWHLEX" ;REVERSE BELOW S APPARMS("ACCEPT ACK RESPONSE")="APPACKRR^SDVWHLEX" ; WHEN COMIT ACK , SU OR AE RETURN MADE S APPARMS("APP ACK RESPONSE")="MSGPROC^SDVWHLEX" ; WHEN NO ACK RETURN MADE S APPARMS("APP ACK TYPE")="NE" ;"AL" S WHO("RECEIVING APPLICATION")="VWSD RECEIVER" S WHO("FACILITY LINK NAME")="VWSDTSMML" ; ;SEND MESSAGE ; I '$$SENDONE^HLOAPI1(.HLMSTATE,.APPARMS,.WHO,.ERROR) Q "ERR="_ERR_" ERROR="_ERROR S MSGCTRL=HLMSTATE("HDR","MESSAGE CONTROL ID") ;HLMSTATE("ID") Q "OK"