SDVWHLE1 ;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 ; TRNSMKPI(PATIENTN,SSN,SD1,SC,STYP,SDARRAY,OUTIN,MSGCTRL,SDVWNVAI) ; ;; ;;; ;;HL7TRANSMIT DRIVER FOR ; MAKE AN APPOINTMENT AS WITH ANALOGOUS $$EN^VWSDMKPI CALL ; ; ;HOWEVER, DATE/TIMES ARE EXTERNAL FORM,PATIENT SSN OR OTHER LOOKUP ID INSTEAD OF PATIENT DFN ;AND LOCATION (CLINIC) EXTERNAL NAMES INSTEAD OF INTERNAL IEN, ; ; ;;INPUT : MSGCTRL PASSED BY REFERENCE TO RECEIVE THIS BACK AFTER TRANSMITTING ;;THEN; ; ;SSN AS PATIENT SSN OR OTHER UNIQUE PATIENT LOOKUP ID INSTEAD OF DFN (REQUIRED) ; PATIENTN PATIENT NAME (REQUIRED) ;; SD1 APPOINTMENT DATE(EXTERNAL FORMAT)(REQUIRED) ;;; SC CLINIC FOR APPOINTMENT(EXTERNAL FORMAT) (REQUIRED) ;;;; STYP =(REQUIRED) ;;;;; =1 c&p ; =2 10-10 ; =3 SCHEDULED APPOINTMENT ; =4 UNSCHEDULED VISIT ; OUTIN= "O" for oupatient or "I" for inpatient ; SDARRAY AS DEFINED BELOW ( WITH DATE/TIMES IN EXTERNAL DATE/TIME FORMAT) ; (PASSED ARRAYS WITH NUMERIC INFO W/O QUOTES AND NON-NUMERIC ENCLOSED WITH QUOTES) ; SDVWNVAI OPTIONAL PASSED ARGUMENT WITH VALUES AS DEFINED BELOW REGARDING ICN CONNECTION ; ; ;;;;;OUTPUT;;;;; Q ;"NEW MESSAGE ERROR" ;; "PID" ; "PV1" ; "PV2" ; "NTE"_INDEX ; "STYP" ; "HOSPLOC" ; ; EXAMPLE AS IF ANALOGOUS CALL MADE AS BELOW: ; ;; N DFN(SSN AND PATIENT NAME INSTEAD),SD1,SC(HOSP LOCATION ;; (CLINIC) EXT FORMAT NAME INSTEAD,STYP, ; N SDARRAY (DATE/TIMES IN EXTERNAL FORMAT),IER ; N SDVWNVAI ; EXIST AS NON-VA RELATED PFSS EVENT MODE ; = "D" DISABLING THE NEED FOR ICN ; = "O" AS OTHER NON-VA ICN SYSTEM ( FUTURE) ; S XQORMUTE = 1 ;SILENT MODE FOR NON-INTERACTIVE MODE W/O WRITE IN XQOR ROUTINES ; S SDVWNVAI = "D" ; NON-VA TESTING HERE WITH DISABLING THE NEED FOR ICN ; S SSN=100001234 ; DFN=1 ; S SD1="JAN 23, 2007@09:30"; SD1=3070123.0930 ; S SC="RADIOLOGY CLINIC" ; S SC=3 ; S STYP=3 ; S OUTIN="O" for outpatient clinic ; S SDARRAY("DATE NOW")= "DATE NOW" ; D NOW^%DTC S X2=X\1 S Y=X2 D DD^%DT S SDARRAY("DATE NOW")=Y ; S SDARRAY("APPT TYPE")=9 ; S SDARRAY("SCHED_REQ_TYPE")="O" ; S SDARRAY("NEXT APPT IND")=0 ; S SDARRAY("FOLLOWUP VISIT INDICATOR")=0 ; 0 FOR NO ; S SDARRAY("DATA ENTRY CLERK")="NEW PERSON NAME" ; DUZ ; ;THEN PARAMETERS CONVERTED TO INTERNAL VALUE ; S IER=$$EN^SDVWMKPI(DFN,SD1,SC,STYP,.SDARRAY) ; ; ; SDARRAY ELEMENT DEFINITIONS FOLLOW: ; ; ; ; ; SDARRAY("DATE NOW") (REQ AT TIME REQUEST MADE) ; ; SDARRAY("LAB DATE TIME ASSOCIATED") = ; "" OR DATE/TIME (OPTIONAL) ; ; SDARRAY("X-RAY DATE TIME ASSOCIATED") = ; "" OR DATE/TIME (OPTIONAL) ; ; SDARRAY("EKG DATE TIME ASSOCIATED") = ; "" OR DATE/TIME (OPTIONAL) ; ; SDARRAY("APPT TYPE") = 9 (REQUIRED) ; 9 for REGULAR APPOINTMENT TYPE ; ptr 409.1 ; SDARRAY("APPT SUB-CATEGORY") = "0" (NOT USED) ; "0" for none ; ptr 35.2 ; ;; SDARRAY("SCHED_REQ_TYPE")='O' (REQUIRED) ; 'O' FOR OTHER THAN 'NEXT AVA.' APPT.; ; set of codes ; SDARRAY("NEXT APPT IND")=0 (REQUIRED) ; 0 FOR NO ; SDARRAY("DESIRED DATE TIME OF APPT")=SD (OPTIONAL) ; SDARRAY("FOLLOWUP VISIT INDICATOR")= (REQUIRED) ; "0" FOR NO ; "1" FOR YES ; ; ; ; SDARRAY("X RAY DATA FREE TEXT")= (OPTIONAL) ; SDARRAY("OTHER DATA FREE TEXT")= (OPTIONAL) ; SDARRAY("OTHER WARD LOCATION")= (OPTIONAL) ; ; ; SDARRAY("DATA ENTRY CLERK")= (REQUIRED) ; DUZ OF NEW PERSON (FILE 200) PTR ; ; SDARRAY("PRIOR XRAY RESULTS TO CLINIC")= (OPTIONAL) ; "Y" OR "" ; ; ; SDARRAY("CHECKED-IN DATE")= (OPTIONAL) ; "" OR DATE APPOINTMENT MADE ; FOR AN UNSCHEDULED VISIT ; ; VWSDNVAI ; (OPTIONAL) EXIST AS NON-VA RELATED PFSS EVENT MODE ; = "D" DISABLING THE NEED FOR ICN ; = "O" AS OTHER NON-VA ICN SYSTEM ( FUTURE) ; ; N APPARMS,HLSTATS,ERROR,SEG,WHO N HLMSTATE,ERROR,INDEX,CONSTRUC,IFLAG,ERR N X,INTE,HOSPLOC,Y ; ; ;;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")="A08" ; PATIENT UPDATE S ERR="" S ERROR="" ; ;;CREATE NEW MESSAGE ;; I '$$NEWMSG^HLOAPI(.APPARMS,.HLMSTATE,.ERROR) Q "NEW MESSAGE ERROR" ; ; ;Use message control ID in MSH segment for sync flag ; ; ;CREATE SEGMENT D SET^HLOAPI(.SEG,"PID",0) D SET^HLOAPI(.SEG,SSN,3) D SET^HLOAPI(.SEG,PATIENTN,5) D SET^HLOAPI(.SEG,SSN,19) ; ;; ADD SEGMENT I '$$ADDSEG^HLOAPI(.HLMSTATE,.SEG) S ERR=ERR_"^"_"PID" ; ; ; ;;CREATE SEGMENT ; D SET^HLOAPI(.SEG,"PV1",0) D SET^HLOAPI(.SEG,OUTIN,2) ;"O" or "I" oupatient or inpatient ;D SET^HLOAPI(.SEG,IEN,3) ;HOSP LOC IEN NOT AVAILABLE D SET^HLOAPI(.SEG,SDARRAY("APPT TYPE"),4) ;ADMISSION TYPE (APPOINTMENT TYPE) D SET^HLOAPI(.SEG,STYP,10) ; HOSPITAL SERVICE (PURPOSE OF VISIT) ;CONVERT EXTERNAL DATE/TIME TO FM INTERNAL, THEN TO HL7 S X=SD1 S %DT="T" D ^%DT S INTE=Y ;EXT TO FM INTERNAL ; D SET^HLOAPI(.SEG,$$HLDATE^HLFNC(INTE,"TS"),44) ; DATE/TIME TO MAKE APPT ; ;; ADD SEGMENT ;; ;TEMP BELOW; ;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 ;; I '$$ADDSEG^HLOAPI(.HLMSTATE,.SEG) S ERR=ERR_"^"_"PV1" ; ; ;CREATE SEGMENT ; D SET^HLOAPI(.SEG,"PV2",0) I $D(SDARRAY("DESIRED DATE TIME OF APPT"))>0 D .S X=SDARRAY("DESIRED DATE TIME OF APPT") S %DT="T" D ^%DT S INTE=Y ;EXT TO FM INTERNAL .D SET^HLOAPI(.SEG,$$HLDATE^HLFNC(INTE,"TS"),8) ;EXPECTED(DESIRED) DATE/TIME OF VISIT E D .S X=SD1 S %DT="T" D ^%DT S INTE=Y ;EXT TO FM INTERNAL .D SET^HLOAPI(.SEG,$$HLDATE^HLFNC(INTE,"TS"),8) ;EXPECTED(DESIRED) DATE/TIME OF VISIT S X=SDARRAY("DATE NOW") D ^%DT S INTE=Y\1 ;EXT TO FM INTERNAL D SET^HLOAPI(.SEG,$$HLDATE^HLFNC(INTE,"TS"),46) ;EXPECTED(DESIRED) DATE/TIME OF VISIT ; ;ADD SEGMENT TO MESSAGE ; I '$$ADDSEG^HLOAPI(.HLMSTATE,.SEG) S ERR=ERR_"^"_"PV2" ; ; ; ;CREATE NTE SEGMENT FOR STYP ; D SET^HLOAPI(.SEG,"NTE",0) D SET^HLOAPI(.SEG,"STYP="_STYP,3) ; ;; ADD SEGMENT ; I '$$ADDSEG^HLOAPI(.HLMSTATE,.SEG) S ERR=ERR_"^"_"STYP" ; ; ; ; ; ;CREATE NTE SEGMENT FOR SC HOSPITAL LOCATION (CLINIC) ; D SET^HLOAPI(.SEG,"NTE",0) D SET^HLOAPI(.SEG,"SDLOCATE="_""""_SC_"""",3) ; ;; ADD SEGMENT ; I '$$ADDSEG^HLOAPI(.HLMSTATE,.SEG) S ERR=ERR_"^"_"HOSPLOC" ; ; ; ; ;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 ; ; NOW OPTIONAL NTE SEGMENT IF SDVWNVAI IS DEFINED ; I $D(SDVWNVAI) D .; .;CREATE NTE SEGMENT FOR SDVWNVAI .; .D SET^HLOAPI(.SEG,"NTE",0) .D SET^HLOAPI(.SEG,"SDVWNVAI="_SDVWNVAI,3) .; .;; ADD SEGMENT .; .I '$$ADDSEG^HLOAPI(.HLMSTATE,.SEG) S ERR=ERR_"^"_"SDVWNVAI" .; .; .; ; ; DEFINE SENDING AND RECEIVING PARAMETERS S APPARMS("SENDING APPLICATION")="VWSD HLO EXT" S APPARMS("ACCEPT ACK TYPE")="NE" ;"AL" ;"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" ;"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"