DGMSTHL7 ;ALB/SCK - Military Sexual Trauma HL7 Message builder ;8 Jan 99
 ;;5.3;Registration;**195**;Aug 13, 1993
 Q
 ;
EVENT(DFN,DGEVNT,DGRSLT) ; Entry point to initiate HL7 ADT message for a MST status event
 ; Input
 ;     DFN    - IEN of patient in the PATIENT File, #2
 ;     DGEVNT - Event type, currently only A08 supported, Optional
 ;              Default is A08
 ;     DGRSLT - Location of results from event trigger
 ;
 ; Output
 ;     DGRSLT= results of event action
 ;
 N EVNTDT,EVNTINFO
 ;
 S DFN=$G(DFN)
 I 'DFN S @DGRSLT="-1^Invalid DFN" Q
 ;
 S DGEVNT=$G(DGEVNT)
 S:'(DGEVNT]"") DGEVNT="A08"
 I DGEVNT'["A08" S @DGRSLT="-1^Event type not supported" Q
 ;
 S DGRSLT=$G(DGRSLT)
 Q:'(DGRSLT]"")
 ;
 N GLOREF
 S GLOREF="^TMP(""HLS"","_$J_")"
 K @GLOREF
 ;
 S EVNTINFO("DFN")=DFN
 S EVNTINFO("EVENT")="A08"
 S EVNTINFO("DATE")=$$NOW^XLFDT
 S EVNTINFO("SERVER")="DGMST A08 SERVER"
 ;
 S @DGRSLT=$$BLDMSG(.EVNTINFO,GLOREF)
 I (+@DGRSLT>0) D
 . S @DGRSLT=$$SENDMSG(.EVNTINFO,GLOREF)
 Q
 ;
BLDMSG(EVNTINFO,XMTARRY) ;
 ;  Input
 ;     EVNTINFO - Array of event information
 ;         ("DATE")    - Event date
 ;         ("DFN")     - IEN of patient in PATIENT File (#2)
 ;         ("EVENT")   - HL7 message event
 ;         ("SERVER")  - HL7 Server protocol
 ;
 ;     XMTARRY - Location to place HL7 message array, Optional
 ;               Default is ^TMP("HLS",$J)
 ;
 ;  Output
 ;     XMTARRY - HL7 Message
 ;
 N HLEID,HL,HLFS,HLECH,HLQ,LASTLINE,VAFSTR,LINESADD,HLP
 ;
 S XMTARRY=$G(XMTARRY)
 S:(XMTARRY="") XMTARRY="^TMP(""HLS"","_$J_")"
 ;
 Q:$G(EVNTINFO("SERVER"))']"" "-1^Server protocol not defined"
 I $G(EVNTINFO("SERVER"))]"" D
 . D INIT^HLFNC2(EVNTINFO("SERVER"),.HL)
 Q:($O(HL(""))="") "-1^Unable to initialize HL7 variables"
 ;
 ;; Build EVN segment
 N VAFEVN,VAFSTR
 S VAFSTR="1,2,"
 S VAFEVN=$$EN^VAFHLEVN(EVNTINFO("EVENT"),EVNTINFO("DATE"),VAFSTR,HL("Q"),HL("FS"))
 S $P(VAFEVN,HL("FS"),2)=EVNTINFO("EVENT")
 S LASTLINE=1+$G(LASTLINE)
 S @XMTARRY@(LASTLINE)=VAFEVN
 ;
 ;; Build PID segment
 N VAFPID
 S VAFSTR="1,2,3,4,5,6,7,8,10,11,12,13,14,16,17,19,"
 S VAFPID=$$EN^VAFHLPID(EVNTINFO("DFN"),VAFSTR)
 S LASTLINE=1+$G(LASTLINE),LINESADD=1+$G(LINESADD)+$O(VAFPID(""),-1)
 M @XMTARRY@(LASTLINE)=VAFPID
 ;
 ;; Build ZEL segment, include only the MST status and status change date
 N VAFZEL
 S VAFSTR="1,23,24,"
 S VAFZEL=$$EN^VAFHLZEL(EVNTINFO("DFN"),VAFSTR)
 S LASTLINE=1+$G(LASTLINE)
 M @XMTARRY@(LASTLINE)=VAFZEL
 ;
 Q LASTLINE_U_LINESADD
 ;
SENDMSG(EVNTINFO,XMTARRY) ;  Send ADT HL7 message
 ;  Input
 ;    EVNTINFO
 ;    XMTARRY
 ;
 ;  Output
 ;
 ;
 N ARRY4HL7,KILLARRY,HL,HLRESLT
 S XMTARRY=$G(XMTARRY)
 S:'(XMTARRY]"") XMTARRY="^TMP(""HLS"","_$J_")"
 Q:($O(@XMTARRY@(""))="") "-1^Can not send empty message"
 ;
 K HL
 S ARRY4HL7="^TMP(""HLS"","_$J_")"
 ;
 ;; If server not specified, then quit with error
 Q:$G(EVNTINFO("SERVER"))']"" "-1^Server protocol not defined"
 ;
 ;; Initialize HL7 variables
 I $G(EVNTINFO("SERVER"))]"" D
 . D INIT^HLFNC2(EVNTINFO("SERVER"),.HL)
 Q:($O(HL(""))="") "-1^Unable to initialize HL7 variables"
 ;
 ;; Check if XMTARRY is ^TMP("HLS",$J)
 S KILLARRY=0
 I (XMTARRY'=ARRY4HL7) D
 . ;; make sure '$J' wasn't used
 . Q:(XMTARRY="TMP(""HLS"",$J")
 . K @ARRY4HL7
 . M @ARRY4HL7=@XMTARRY
 . S KILLARRY=1
 ;
 ;; Broadcast message
 D GENERATE^HLMA(EVNTINFO("SERVER"),"GM",1,.HLRESLT,"",.HLP)
 S:('HLRESLT) HLRESLT=$P(HLRESLT,"^",2,3)
 ;
 ;; Delete ^TMP("HLS",$J) if XMTARRY was different
 K:(KILLARRY) @ARRY4HL7
 ;
 Q $G(HLRESLT)
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDGMSTHL7   3612     printed  Sep 23, 2025@20:20:17                                                                                                                                                                                                    Page 2
DGMSTHL7  ;ALB/SCK - Military Sexual Trauma HL7 Message builder ;8 Jan 99
 +1       ;;5.3;Registration;**195**;Aug 13, 1993
 +2        QUIT 
 +3       ;
EVENT(DFN,DGEVNT,DGRSLT) ; Entry point to initiate HL7 ADT message for a MST status event
 +1       ; Input
 +2       ;     DFN    - IEN of patient in the PATIENT File, #2
 +3       ;     DGEVNT - Event type, currently only A08 supported, Optional
 +4       ;              Default is A08
 +5       ;     DGRSLT - Location of results from event trigger
 +6       ;
 +7       ; Output
 +8       ;     DGRSLT= results of event action
 +9       ;
 +10       NEW EVNTDT,EVNTINFO
 +11      ;
 +12       SET DFN=$GET(DFN)
 +13       IF 'DFN
               SET @DGRSLT="-1^Invalid DFN"
               QUIT 
 +14      ;
 +15       SET DGEVNT=$GET(DGEVNT)
 +16       if '(DGEVNT]"")
               SET DGEVNT="A08"
 +17       IF DGEVNT'["A08"
               SET @DGRSLT="-1^Event type not supported"
               QUIT 
 +18      ;
 +19       SET DGRSLT=$GET(DGRSLT)
 +20       if '(DGRSLT]"")
               QUIT 
 +21      ;
 +22       NEW GLOREF
 +23       SET GLOREF="^TMP(""HLS"","_$JOB_")"
 +24       KILL @GLOREF
 +25      ;
 +26       SET EVNTINFO("DFN")=DFN
 +27       SET EVNTINFO("EVENT")="A08"
 +28       SET EVNTINFO("DATE")=$$NOW^XLFDT
 +29       SET EVNTINFO("SERVER")="DGMST A08 SERVER"
 +30      ;
 +31       SET @DGRSLT=$$BLDMSG(.EVNTINFO,GLOREF)
 +32       IF (+@DGRSLT>0)
               Begin DoDot:1
 +33               SET @DGRSLT=$$SENDMSG(.EVNTINFO,GLOREF)
               End DoDot:1
 +34       QUIT 
 +35      ;
BLDMSG(EVNTINFO,XMTARRY) ;
 +1       ;  Input
 +2       ;     EVNTINFO - Array of event information
 +3       ;         ("DATE")    - Event date
 +4       ;         ("DFN")     - IEN of patient in PATIENT File (#2)
 +5       ;         ("EVENT")   - HL7 message event
 +6       ;         ("SERVER")  - HL7 Server protocol
 +7       ;
 +8       ;     XMTARRY - Location to place HL7 message array, Optional
 +9       ;               Default is ^TMP("HLS",$J)
 +10      ;
 +11      ;  Output
 +12      ;     XMTARRY - HL7 Message
 +13      ;
 +14       NEW HLEID,HL,HLFS,HLECH,HLQ,LASTLINE,VAFSTR,LINESADD,HLP
 +15      ;
 +16       SET XMTARRY=$GET(XMTARRY)
 +17       if (XMTARRY="")
               SET XMTARRY="^TMP(""HLS"","_$JOB_")"
 +18      ;
 +19       if $GET(EVNTINFO("SERVER"))']""
               QUIT "-1^Server protocol not defined"
 +20       IF $GET(EVNTINFO("SERVER"))]""
               Begin DoDot:1
 +21               DO INIT^HLFNC2(EVNTINFO("SERVER"),.HL)
               End DoDot:1
 +22       if ($ORDER(HL(""))="")
               QUIT "-1^Unable to initialize HL7 variables"
 +23      ;
 +24      ;; Build EVN segment
 +25       NEW VAFEVN,VAFSTR
 +26       SET VAFSTR="1,2,"
 +27       SET VAFEVN=$$EN^VAFHLEVN(EVNTINFO("EVENT"),EVNTINFO("DATE"),VAFSTR,HL("Q"),HL("FS"))
 +28       SET $PIECE(VAFEVN,HL("FS"),2)=EVNTINFO("EVENT")
 +29       SET LASTLINE=1+$GET(LASTLINE)
 +30       SET @XMTARRY@(LASTLINE)=VAFEVN
 +31      ;
 +32      ;; Build PID segment
 +33       NEW VAFPID
 +34       SET VAFSTR="1,2,3,4,5,6,7,8,10,11,12,13,14,16,17,19,"
 +35       SET VAFPID=$$EN^VAFHLPID(EVNTINFO("DFN"),VAFSTR)
 +36       SET LASTLINE=1+$GET(LASTLINE)
           SET LINESADD=1+$GET(LINESADD)+$ORDER(VAFPID(""),-1)
 +37       MERGE @XMTARRY@(LASTLINE)=VAFPID
 +38      ;
 +39      ;; Build ZEL segment, include only the MST status and status change date
 +40       NEW VAFZEL
 +41       SET VAFSTR="1,23,24,"
 +42       SET VAFZEL=$$EN^VAFHLZEL(EVNTINFO("DFN"),VAFSTR)
 +43       SET LASTLINE=1+$GET(LASTLINE)
 +44       MERGE @XMTARRY@(LASTLINE)=VAFZEL
 +45      ;
 +46       QUIT LASTLINE_U_LINESADD
 +47      ;
SENDMSG(EVNTINFO,XMTARRY) ;  Send ADT HL7 message
 +1       ;  Input
 +2       ;    EVNTINFO
 +3       ;    XMTARRY
 +4       ;
 +5       ;  Output
 +6       ;
 +7       ;
 +8        NEW ARRY4HL7,KILLARRY,HL,HLRESLT
 +9        SET XMTARRY=$GET(XMTARRY)
 +10       if '(XMTARRY]"")
               SET XMTARRY="^TMP(""HLS"","_$JOB_")"
 +11       if ($ORDER(@XMTARRY@(""))="")
               QUIT "-1^Can not send empty message"
 +12      ;
 +13       KILL HL
 +14       SET ARRY4HL7="^TMP(""HLS"","_$JOB_")"
 +15      ;
 +16      ;; If server not specified, then quit with error
 +17       if $GET(EVNTINFO("SERVER"))']""
               QUIT "-1^Server protocol not defined"
 +18      ;
 +19      ;; Initialize HL7 variables
 +20       IF $GET(EVNTINFO("SERVER"))]""
               Begin DoDot:1
 +21               DO INIT^HLFNC2(EVNTINFO("SERVER"),.HL)
               End DoDot:1
 +22       if ($ORDER(HL(""))="")
               QUIT "-1^Unable to initialize HL7 variables"
 +23      ;
 +24      ;; Check if XMTARRY is ^TMP("HLS",$J)
 +25       SET KILLARRY=0
 +26       IF (XMTARRY'=ARRY4HL7)
               Begin DoDot:1
 +27      ;; make sure '$J' wasn't used
 +28               if (XMTARRY="TMP(""HLS"",$J")
                       QUIT 
 +29               KILL @ARRY4HL7
 +30               MERGE @ARRY4HL7=@XMTARRY
 +31               SET KILLARRY=1
               End DoDot:1
 +32      ;
 +33      ;; Broadcast message
 +34       DO GENERATE^HLMA(EVNTINFO("SERVER"),"GM",1,.HLRESLT,"",.HLP)
 +35       if ('HLRESLT)
               SET HLRESLT=$PIECE(HLRESLT,"^",2,3)
 +36      ;
 +37      ;; Delete ^TMP("HLS",$J) if XMTARRY was different
 +38       if (KILLARRY)
               KILL @ARRY4HL7
 +39      ;
 +40       QUIT $GET(HLRESLT)