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"
