DGHTHL7 ;ALB/JAM - Home Telehealth Patient Sign-up HL7;10 January 2005 ; 9/25/07 10:18am
;;5.3;Registration;**644**;Aug 13, 1993;Build 11
;
BLDHL7(DGHTH,MSG) ;Build HL7 Registration message for Home Telehealth
;Input : DGHTH - Arry with Home Telehealth transaction data
; MSG - Array to put message into (full global ref)
;Output: N - Last line number used, or
; 0 - no message built, or
; -1^ErrorText on error
; MSG will contain HL7 message
;Note : Insertion into MSG begins at next available line number
;
N DFN,VENDOR,CONSULT,COORD,EVENTDT,VALCHK,DGX,ERR,PROTNAME,VAFPID
N HLFS,HLECH,HLQ,HL,EVN,PID,PD1,PV1,LINE,X,Y
S ERR=0,X="" F S X=$O(DGHTH(X)) Q:X="" D I ERR Q
.I DGHTH(X)="" S VALCHK="-1^Bad Input ("_X_")",ERR=1 Q
.S @X=DGHTH(X)
I ERR Q $G(VALCHK)
I $G(MSG)="" Q "-1^Bad input variable (MSG)"
S PROTNAME="DG HOME TELEHEALTH ADT-A04 SERVER"
D INIT^HLFNC2(PROTNAME,.HL)
I ($O(HL(""))="") Q "-1^Unable to initialize HL7 variables"
S LINE=+$O(@MSG@(""),-1)
;
;EVN segment
S EVN=$$EVN("A04","A04",EVENTDT)
I $P(EVN,U)=-1 K @MSG Q EVN
S LINE=LINE+1 S @MSG@(LINE)=EVN
;
;PID segment
S PID=$$PID(DFN,.HL,.VAFPID)
I $P(PID,U)=-1 Q PID
D PIDVAL I ERR Q ERR
S DGX=$O(VAFPID(0)),LINE=LINE+1 S @MSG@(LINE)=VAFPID(DGX)
F S DGX=$O(VAFPID(DGX)) Q:'DGX D
.S @MSG@(LINE,DGX-1)=VAFPID(DGX)
;
;PD1 segment
S PD1=$$PD1(DFN,COORD)
I $P(PD1,U)=-1 Q PD1
S LINE=LINE+1 S @MSG@(LINE)=PD1
;
;PV1 segment
S $P(PV1,HLFS,1)=1,$P(PV1,HLFS,5)=CONSULT
S $P(PV1,HLFS,39)=$$STA^XUAF4(DUZ(2))
S PV1="PV1"_HLFS_PV1
S LINE=LINE+1 S @MSG@(LINE)=PV1
;
Q LINE
;
EVN(TYPE,FLAG,DGEVDT) ;Build EVN segment
;Input: TYPE - HL7 event type
; FLAG - HL7 Event Reason Code
; DGEVDT - Event Date/Time [Optional]
;Output: value - EVN segment
; -1^ErrorText on error
;
N USRNAM,USERID,COMP,SUBCOMP,EVN
I $G(TYPE)=""!($G(FLAG)="") Q "-1^Value missing to build message (EVN segment)"
S EVN=$$EVN^VAFHLEVN(TYPE,FLAG,DGEVDT)
I ($E(EVN,1,3)'="EVN") Q "-1^Error build message (EVN segment)"
;Add user and user's facility to EVN segment
S COMP=$E(HL("ECH"),1),SUBCOMP=$E(HL("ECH"),4)
S USRNAM=$$HLNAME^HLFNC($$GET1^DIQ(200,DUZ_",",.01),HL("ECH"))
S USERID=DUZ_COMP_$P(USRNAM,COMP)_COMP_$P(USRNAM,COMP,2)_COMP_COMP_COMP
S USERID=USERID_COMP_COMP_COMP_"USVHA"_SUBCOMP_SUBCOMP_"0363"_COMP_"L"
S USERID=USERID_COMP_COMP_COMP_"NI"_COMP_"VA FACILITY ID"_SUBCOMP
S USERID=USERID_$P($$SITE^VASITE,"^",3)_SUBCOMP_"L"
S $P(EVN,HLFS,6)=USERID,$P(EVN,HLFS,8)=$P($$SITE^VASITE,HLFS,3)
Q EVN
;
PID(DFN,HL,DGPID) ;Build PID segment
;Input: DFN - Patient DFN
; HL - HL7 values
;Output: DGPIR - PID array segment
; 1 - PID segment build (no error)
; -1^ErrorText on error
;
N FLDS,DGX
I $G(DFN)="" Q "-1^Value missing to build message (PID segment)"
S FLDS=$$COMMANUM^VAFCADT2(1,9)_",10NTB,11,"
S FLDS=FLDS_$$COMMANUM^VAFCADT2(12,21)_",22B"
D BLDPID^VAFCQRY(DFN,"",FLDS,.DGPID,.HL)
S DGX=$O(DGPID(0)) I DGX S DGX=DGPID(DGX)
I $P(DGX,"^")'="PID" Q "-1^Error build message (PID segment)"
Q 1
;
PD1(DFN,COORD) ;Build PD1 segment
;Input: DFN - Patient DFN
; COOR - Care Coordinator
;Output: PD1 - PD1 segment
; -1^ErrorText on error
;
N PD1,DGNAME
I $G(DFN)=""!($G(COORD)="") Q "-1^Value missing to build message (PD1 segment)"
S PD1=$$EN^VAFHLPD1(DFN,3)
I ($E(PD1,1,3)'="PD1") Q "-1^Error build message (PD1 segment)"
S DGNAME("FILE")=200,DGNAME("IENS")=COORD,DGNAME("FIELD")=.01
S $P(PD1,HLFS,5)=COORD_$E(HLECH)_$$HLNAME^XLFNAME(.DGNAME,"",$E(HLECH))
Q PD1
;
PIDVAL ;validate PID segment
;locate the fields in variable FLDS in VAFPID array, check its not null
N NSTR,STR,FLN,FLDS,FLC,X,Y,Z
S FLDS="4^6^8^12^20",(FLN,FLN(0))=0,DGX=0
S STR="Patient Identifier list^Patient Name^Date of Birth^Patient address^SSN"
F S DGX=$O(VAFPID(DGX)) Q:'DGX D I ERR Q
.S FLN(DGX)=$L(VAFPID(DGX),"^")-1,FLC=FLN,FLN=FLN+FLN(DGX)
.F X=1:1 S Y=$P(FLDS,"^",X) Q:Y="" I Y'="C" D I ERR Q
..I Y'>FLN S $P(FLDS,"^",X)="C" D
...I FLN(DGX)=FLN S:($P(VAFPID(DGX),"^",Y-FLC)="")!($P(VAFPID(DGX),"^",Y-FLC)="""""") ERR="-1^Error in PID-"_(Y-1)_" field ("_$P(STR,"^",X)_")" Q
...S NSTR=$P(VAFPID(DGX-1),"^",FLN(DGX-1)+1)_VAFPID(DGX) I ($P(NSTR,"^",Y-FLC)="")!($P(NSTR,"^",Y-FLC)="""""") S ERR="-1^Error in PID-"_(Y-1)_" field ("_$P(STR,"^",X)_")" Q
Q
;
BLDHL7I(DFN,MSG) ;Build HL7 Registration message for telehealth
;Input : DFN - Pointer to PATIENT
; MSG - Array to put message into (full global ref)
;Output: Last line number used
; -1^ErrorText on error
; MSG will contain HL7 message
;Notes : Insertion into MSG begins at next available line number
I '$D(^DPT(DFN,0)) Q "-1^Bad input (DFN)"
I $G(MSG)="" Q "-1^Bad input variable (MSG)"
N HLFS,HLECH,HLQ,HL,EVN,VAFPID,PV1,LINE,FLDS,DGVEN,DGX
N EVNTDT,ERR,PROT4HL7,COMP,SUBCOMP,USRNAM,USERID
S PROT4HL7="DG HOME TELEHEALTH ADT-A03 SERVER"
D INIT^HLFNC2(PROT4HL7,.HL)
I ($O(HL(""))="") Q "-1^Unable to initialize HL7 variables"
S EVNTDT=$$NOW^XLFDT()
S LINE=+$O(@MSG@(""),-1)
;EVN segment
S EVN=$$EVN("A03","A03",EVNTDT)
I EVN<0 K @MSG Q "-1^Error build message (EVN segment)"
S LINE=LINE+1
S @MSG@(LINE)=EVN
;
;PID segment
N DGX
S PID=$$PID(DGDFN,.HL,.VAFPID)
I +PID'>0 S ERR=1 K @MSG Q "-1^Error build message (PID segment)"
S DGX=$O(VAFPID(0)),LINE=LINE+1 S @MSG@(LINE)=VAFPID(DGX)
F S DGX=$O(VAFPID(DGX)) Q:'DGX D
.S @MSG@(LINE,DGX-1)=VAFPID(DGX)
;Done
Q 1
SNDHL7(MSG,PTRRCV,PROTNAME) ;Send HL7 Home Telehealth message to server
;Input : MSG - Array containing HL7 message to transmit
; (full global reference)
; - Must be in format required for interaction
; with the HL7 package
; PTRRCV - Pointer for vendor receiving system
; PROTNAME - Protocol name
;Output: Message ID
; Message ID or 0^ErrorText on error
;Notes : The global array ^TMP("HLS",$J) will be KILLed if MSG
; does not use this global location
I $G(MSG)="" Q "-1^Bad input variable(MSG)"
I '$G(PTRRCV) Q "-1^Bad input variable for vendor (PTRRCV)"
I ($O(@MSG@(""))="") Q "-1^Message empty... can't send empty"
N DGARRAY,HL,HLL,HLFS,HLECH,HLQ,HLMTIEN,HLRESLT,HLP,KILLARRY,ARRY4HL7,APPINFO,DIC,CLPROT,SIEN,LINK
S ARRY4HL7=$NA(^TMP("HLS",$J))
D INIT^HLFNC2(PROTNAME,.HL)
I ($O(HL(""))="") Q "-1^Unable to initialize HL7 variables"
S APPINFO=$$APP4MSH(PTRRCV)
I APPINFO="" Q "-1^Unable to determine receiving system information"
;See if MSG is ^TMP("HLS",$J)
S KILLARRY=0
I (MSG'=ARRY4HL7) D
.;Make sure '$J' wasn't used
.Q:(MSG="^TMP(""HLS"",$J)")
.;Initialize ^TMP("HLS",$J) and merge XMITARRY into it
.K @ARRY4HL7
.M @ARRY4HL7=@MSG
.S KILLARRY=1
;Using dynamic MSH segment
S $P(HLP("SUBSCRIBER"),"^",2)="DG HOME TELEHEALTH"
S $P(HLP("SUBSCRIBER"),"^",3)=$P(APPINFO,"^",1)
S $P(HLP("SUBSCRIBER"),"^",4)="HTAPPL"
S $P(HLP("SUBSCRIBER"),"^",5)=$P(APPINFO,"^",2)
S HLP("PRIORITY")="I" ;Immediate priority
;Get subscriber protocol
S DIC="^ORD(101,",DIC(0)="B",X=PROTNAME D ^DIC
D GETS^DIQ(101,+Y,"775*","E","ARRAY1")
S CLPROT=ARRAY1(101.0775,$O(ARRAY1(101.0775,0)),.01,"E")
;Use inst file ien to retrieve logical link for dynamic addressing
D LINK^HLUTIL3(DGVEN,.DGARRAY,"")
S LINK=DGARRAY($O(DGARRAY(0)))
S HLL("LINKS",1)=CLPROT_U_LINK
D GENERATE^HLMA(PROTNAME,"GM",1,.HLRESLT,"",.HLP)
;S:('HLRESLT) HLRESLT=$P(HLRESLT,"^",2,3)
;Delete ^TMP("HLS",$J) if MSG was different
K:(KILLARRY) @ARRY4HL7
;Done
Q HLRESLT
;
APP4MSH(PTRRCV) ;Determine sending and receiving application for MSH segment
;Input : PTRRCV = Pointer to file #4 for receiving system
;Output: Sending Facility ^ Receiving Facility
; Null = Error/bad input
N SNDFAC,RCVFAC
I 'PTRRCV Q ""
I $$GET1^DIQ(4,PTRRCV,.01)="" Q ""
S SNDFAC=$P($$SITE^VASITE(),"^",3)_$E(HLECH)
S SNDFAC=SNDFAC_$$GET1^DIQ(4,$P($$SITE^VASITE(),"^"),60,"E")_$E(HLECH)
S SNDFAC=SNDFAC_"DNS"
S RCVFAC=$$GET1^DIQ(4,PTRRCV,99,"E")_$E(HLECH)
S RCVFAC=RCVFAC_$$GET1^DIQ(4,PTRRCV,60,"E")_$E(HLECH)_"DNS"
Q SNDFAC_"^"_RCVFAC
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDGHTHL7 8302 printed Dec 13, 2024@02:43:44 Page 2
DGHTHL7 ;ALB/JAM - Home Telehealth Patient Sign-up HL7;10 January 2005 ; 9/25/07 10:18am
+1 ;;5.3;Registration;**644**;Aug 13, 1993;Build 11
+2 ;
BLDHL7(DGHTH,MSG) ;Build HL7 Registration message for Home Telehealth
+1 ;Input : DGHTH - Arry with Home Telehealth transaction data
+2 ; MSG - Array to put message into (full global ref)
+3 ;Output: N - Last line number used, or
+4 ; 0 - no message built, or
+5 ; -1^ErrorText on error
+6 ; MSG will contain HL7 message
+7 ;Note : Insertion into MSG begins at next available line number
+8 ;
+9 NEW DFN,VENDOR,CONSULT,COORD,EVENTDT,VALCHK,DGX,ERR,PROTNAME,VAFPID
+10 NEW HLFS,HLECH,HLQ,HL,EVN,PID,PD1,PV1,LINE,X,Y
+11 SET ERR=0
SET X=""
FOR
SET X=$ORDER(DGHTH(X))
if X=""
QUIT
Begin DoDot:1
+12 IF DGHTH(X)=""
SET VALCHK="-1^Bad Input ("_X_")"
SET ERR=1
QUIT
+13 SET @X=DGHTH(X)
End DoDot:1
IF ERR
QUIT
+14 IF ERR
QUIT $GET(VALCHK)
+15 IF $GET(MSG)=""
QUIT "-1^Bad input variable (MSG)"
+16 SET PROTNAME="DG HOME TELEHEALTH ADT-A04 SERVER"
+17 DO INIT^HLFNC2(PROTNAME,.HL)
+18 IF ($ORDER(HL(""))="")
QUIT "-1^Unable to initialize HL7 variables"
+19 SET LINE=+$ORDER(@MSG@(""),-1)
+20 ;
+21 ;EVN segment
+22 SET EVN=$$EVN("A04","A04",EVENTDT)
+23 IF $PIECE(EVN,U)=-1
KILL @MSG
QUIT EVN
+24 SET LINE=LINE+1
SET @MSG@(LINE)=EVN
+25 ;
+26 ;PID segment
+27 SET PID=$$PID(DFN,.HL,.VAFPID)
+28 IF $PIECE(PID,U)=-1
QUIT PID
+29 DO PIDVAL
IF ERR
QUIT ERR
+30 SET DGX=$ORDER(VAFPID(0))
SET LINE=LINE+1
SET @MSG@(LINE)=VAFPID(DGX)
+31 FOR
SET DGX=$ORDER(VAFPID(DGX))
if 'DGX
QUIT
Begin DoDot:1
+32 SET @MSG@(LINE,DGX-1)=VAFPID(DGX)
End DoDot:1
+33 ;
+34 ;PD1 segment
+35 SET PD1=$$PD1(DFN,COORD)
+36 IF $PIECE(PD1,U)=-1
QUIT PD1
+37 SET LINE=LINE+1
SET @MSG@(LINE)=PD1
+38 ;
+39 ;PV1 segment
+40 SET $PIECE(PV1,HLFS,1)=1
SET $PIECE(PV1,HLFS,5)=CONSULT
+41 SET $PIECE(PV1,HLFS,39)=$$STA^XUAF4(DUZ(2))
+42 SET PV1="PV1"_HLFS_PV1
+43 SET LINE=LINE+1
SET @MSG@(LINE)=PV1
+44 ;
+45 QUIT LINE
+46 ;
EVN(TYPE,FLAG,DGEVDT) ;Build EVN segment
+1 ;Input: TYPE - HL7 event type
+2 ; FLAG - HL7 Event Reason Code
+3 ; DGEVDT - Event Date/Time [Optional]
+4 ;Output: value - EVN segment
+5 ; -1^ErrorText on error
+6 ;
+7 NEW USRNAM,USERID,COMP,SUBCOMP,EVN
+8 IF $GET(TYPE)=""!($GET(FLAG)="")
QUIT "-1^Value missing to build message (EVN segment)"
+9 SET EVN=$$EVN^VAFHLEVN(TYPE,FLAG,DGEVDT)
+10 IF ($EXTRACT(EVN,1,3)'="EVN")
QUIT "-1^Error build message (EVN segment)"
+11 ;Add user and user's facility to EVN segment
+12 SET COMP=$EXTRACT(HL("ECH"),1)
SET SUBCOMP=$EXTRACT(HL("ECH"),4)
+13 SET USRNAM=$$HLNAME^HLFNC($$GET1^DIQ(200,DUZ_",",.01),HL("ECH"))
+14 SET USERID=DUZ_COMP_$PIECE(USRNAM,COMP)_COMP_$PIECE(USRNAM,COMP,2)_COMP_COMP_COMP
+15 SET USERID=USERID_COMP_COMP_COMP_"USVHA"_SUBCOMP_SUBCOMP_"0363"_COMP_"L"
+16 SET USERID=USERID_COMP_COMP_COMP_"NI"_COMP_"VA FACILITY ID"_SUBCOMP
+17 SET USERID=USERID_$PIECE($$SITE^VASITE,"^",3)_SUBCOMP_"L"
+18 SET $PIECE(EVN,HLFS,6)=USERID
SET $PIECE(EVN,HLFS,8)=$PIECE($$SITE^VASITE,HLFS,3)
+19 QUIT EVN
+20 ;
PID(DFN,HL,DGPID) ;Build PID segment
+1 ;Input: DFN - Patient DFN
+2 ; HL - HL7 values
+3 ;Output: DGPIR - PID array segment
+4 ; 1 - PID segment build (no error)
+5 ; -1^ErrorText on error
+6 ;
+7 NEW FLDS,DGX
+8 IF $GET(DFN)=""
QUIT "-1^Value missing to build message (PID segment)"
+9 SET FLDS=$$COMMANUM^VAFCADT2(1,9)_",10NTB,11,"
+10 SET FLDS=FLDS_$$COMMANUM^VAFCADT2(12,21)_",22B"
+11 DO BLDPID^VAFCQRY(DFN,"",FLDS,.DGPID,.HL)
+12 SET DGX=$ORDER(DGPID(0))
IF DGX
SET DGX=DGPID(DGX)
+13 IF $PIECE(DGX,"^")'="PID"
QUIT "-1^Error build message (PID segment)"
+14 QUIT 1
+15 ;
PD1(DFN,COORD) ;Build PD1 segment
+1 ;Input: DFN - Patient DFN
+2 ; COOR - Care Coordinator
+3 ;Output: PD1 - PD1 segment
+4 ; -1^ErrorText on error
+5 ;
+6 NEW PD1,DGNAME
+7 IF $GET(DFN)=""!($GET(COORD)="")
QUIT "-1^Value missing to build message (PD1 segment)"
+8 SET PD1=$$EN^VAFHLPD1(DFN,3)
+9 IF ($EXTRACT(PD1,1,3)'="PD1")
QUIT "-1^Error build message (PD1 segment)"
+10 SET DGNAME("FILE")=200
SET DGNAME("IENS")=COORD
SET DGNAME("FIELD")=.01
+11 SET $PIECE(PD1,HLFS,5)=COORD_$EXTRACT(HLECH)_$$HLNAME^XLFNAME(.DGNAME,"",$EXTRACT(HLECH))
+12 QUIT PD1
+13 ;
PIDVAL ;validate PID segment
+1 ;locate the fields in variable FLDS in VAFPID array, check its not null
+2 NEW NSTR,STR,FLN,FLDS,FLC,X,Y,Z
+3 SET FLDS="4^6^8^12^20"
SET (FLN,FLN(0))=0
SET DGX=0
+4 SET STR="Patient Identifier list^Patient Name^Date of Birth^Patient address^SSN"
+5 FOR
SET DGX=$ORDER(VAFPID(DGX))
if 'DGX
QUIT
Begin DoDot:1
+6 SET FLN(DGX)=$LENGTH(VAFPID(DGX),"^")-1
SET FLC=FLN
SET FLN=FLN+FLN(DGX)
+7 FOR X=1:1
SET Y=$PIECE(FLDS,"^",X)
if Y=""
QUIT
IF Y'="C"
Begin DoDot:2
+8 IF Y'>FLN
SET $PIECE(FLDS,"^",X)="C"
Begin DoDot:3
+9 IF FLN(DGX)=FLN
if ($PIECE(VAFPID(DGX),"^",Y-FLC)="")!($PIECE(VAFPID(DGX),"^",Y-FLC)="""""")
SET ERR="-1^Error in PID-"_(Y-1)_" field ("_$PIECE(STR,"^",X)_")"
QUIT
+10 SET NSTR=$PIECE(VAFPID(DGX-1),"^",FLN(DGX-1)+1)_VAFPID(DGX)
IF ($PIECE(NSTR,"^",Y-FLC)="")!($PIECE(NSTR,"^",Y-FLC)="""""")
SET ERR="-1^Error in PID-"_(Y-1)_" field ("_$PIECE(STR,"^",X)_")"
QUIT
End DoDot:3
End DoDot:2
IF ERR
QUIT
End DoDot:1
IF ERR
QUIT
+11 QUIT
+12 ;
BLDHL7I(DFN,MSG) ;Build HL7 Registration message for telehealth
+1 ;Input : DFN - Pointer to PATIENT
+2 ; MSG - Array to put message into (full global ref)
+3 ;Output: Last line number used
+4 ; -1^ErrorText on error
+5 ; MSG will contain HL7 message
+6 ;Notes : Insertion into MSG begins at next available line number
+7 IF '$DATA(^DPT(DFN,0))
QUIT "-1^Bad input (DFN)"
+8 IF $GET(MSG)=""
QUIT "-1^Bad input variable (MSG)"
+9 NEW HLFS,HLECH,HLQ,HL,EVN,VAFPID,PV1,LINE,FLDS,DGVEN,DGX
+10 NEW EVNTDT,ERR,PROT4HL7,COMP,SUBCOMP,USRNAM,USERID
+11 SET PROT4HL7="DG HOME TELEHEALTH ADT-A03 SERVER"
+12 DO INIT^HLFNC2(PROT4HL7,.HL)
+13 IF ($ORDER(HL(""))="")
QUIT "-1^Unable to initialize HL7 variables"
+14 SET EVNTDT=$$NOW^XLFDT()
+15 SET LINE=+$ORDER(@MSG@(""),-1)
+16 ;EVN segment
+17 SET EVN=$$EVN("A03","A03",EVNTDT)
+18 IF EVN<0
KILL @MSG
QUIT "-1^Error build message (EVN segment)"
+19 SET LINE=LINE+1
+20 SET @MSG@(LINE)=EVN
+21 ;
+22 ;PID segment
+23 NEW DGX
+24 SET PID=$$PID(DGDFN,.HL,.VAFPID)
+25 IF +PID'>0
SET ERR=1
KILL @MSG
QUIT "-1^Error build message (PID segment)"
+26 SET DGX=$ORDER(VAFPID(0))
SET LINE=LINE+1
SET @MSG@(LINE)=VAFPID(DGX)
+27 FOR
SET DGX=$ORDER(VAFPID(DGX))
if 'DGX
QUIT
Begin DoDot:1
+28 SET @MSG@(LINE,DGX-1)=VAFPID(DGX)
End DoDot:1
+29 ;Done
+30 QUIT 1
SNDHL7(MSG,PTRRCV,PROTNAME) ;Send HL7 Home Telehealth message to server
+1 ;Input : MSG - Array containing HL7 message to transmit
+2 ; (full global reference)
+3 ; - Must be in format required for interaction
+4 ; with the HL7 package
+5 ; PTRRCV - Pointer for vendor receiving system
+6 ; PROTNAME - Protocol name
+7 ;Output: Message ID
+8 ; Message ID or 0^ErrorText on error
+9 ;Notes : The global array ^TMP("HLS",$J) will be KILLed if MSG
+10 ; does not use this global location
+11 IF $GET(MSG)=""
QUIT "-1^Bad input variable(MSG)"
+12 IF '$GET(PTRRCV)
QUIT "-1^Bad input variable for vendor (PTRRCV)"
+13 IF ($ORDER(@MSG@(""))="")
QUIT "-1^Message empty... can't send empty"
+14 NEW DGARRAY,HL,HLL,HLFS,HLECH,HLQ,HLMTIEN,HLRESLT,HLP,KILLARRY,ARRY4HL7,APPINFO,DIC,CLPROT,SIEN,LINK
+15 SET ARRY4HL7=$NAME(^TMP("HLS",$JOB))
+16 DO INIT^HLFNC2(PROTNAME,.HL)
+17 IF ($ORDER(HL(""))="")
QUIT "-1^Unable to initialize HL7 variables"
+18 SET APPINFO=$$APP4MSH(PTRRCV)
+19 IF APPINFO=""
QUIT "-1^Unable to determine receiving system information"
+20 ;See if MSG is ^TMP("HLS",$J)
+21 SET KILLARRY=0
+22 IF (MSG'=ARRY4HL7)
Begin DoDot:1
+23 ;Make sure '$J' wasn't used
+24 if (MSG="^TMP(""HLS"",$J)")
QUIT
+25 ;Initialize ^TMP("HLS",$J) and merge XMITARRY into it
+26 KILL @ARRY4HL7
+27 MERGE @ARRY4HL7=@MSG
+28 SET KILLARRY=1
End DoDot:1
+29 ;Using dynamic MSH segment
+30 SET $PIECE(HLP("SUBSCRIBER"),"^",2)="DG HOME TELEHEALTH"
+31 SET $PIECE(HLP("SUBSCRIBER"),"^",3)=$PIECE(APPINFO,"^",1)
+32 SET $PIECE(HLP("SUBSCRIBER"),"^",4)="HTAPPL"
+33 SET $PIECE(HLP("SUBSCRIBER"),"^",5)=$PIECE(APPINFO,"^",2)
+34 ;Immediate priority
SET HLP("PRIORITY")="I"
+35 ;Get subscriber protocol
+36 SET DIC="^ORD(101,"
SET DIC(0)="B"
SET X=PROTNAME
DO ^DIC
+37 DO GETS^DIQ(101,+Y,"775*","E","ARRAY1")
+38 SET CLPROT=ARRAY1(101.0775,$ORDER(ARRAY1(101.0775,0)),.01,"E")
+39 ;Use inst file ien to retrieve logical link for dynamic addressing
+40 DO LINK^HLUTIL3(DGVEN,.DGARRAY,"")
+41 SET LINK=DGARRAY($ORDER(DGARRAY(0)))
+42 SET HLL("LINKS",1)=CLPROT_U_LINK
+43 DO GENERATE^HLMA(PROTNAME,"GM",1,.HLRESLT,"",.HLP)
+44 ;S:('HLRESLT) HLRESLT=$P(HLRESLT,"^",2,3)
+45 ;Delete ^TMP("HLS",$J) if MSG was different
+46 if (KILLARRY)
KILL @ARRY4HL7
+47 ;Done
+48 QUIT HLRESLT
+49 ;
APP4MSH(PTRRCV) ;Determine sending and receiving application for MSH segment
+1 ;Input : PTRRCV = Pointer to file #4 for receiving system
+2 ;Output: Sending Facility ^ Receiving Facility
+3 ; Null = Error/bad input
+4 NEW SNDFAC,RCVFAC
+5 IF 'PTRRCV
QUIT ""
+6 IF $$GET1^DIQ(4,PTRRCV,.01)=""
QUIT ""
+7 SET SNDFAC=$PIECE($$SITE^VASITE(),"^",3)_$EXTRACT(HLECH)
+8 SET SNDFAC=SNDFAC_$$GET1^DIQ(4,$PIECE($$SITE^VASITE(),"^"),60,"E")_$EXTRACT(HLECH)
+9 SET SNDFAC=SNDFAC_"DNS"
+10 SET RCVFAC=$$GET1^DIQ(4,PTRRCV,99,"E")_$EXTRACT(HLECH)
+11 SET RCVFAC=RCVFAC_$$GET1^DIQ(4,PTRRCV,60,"E")_$EXTRACT(HLECH)_"DNS"
+12 QUIT SNDFAC_"^"_RCVFAC