SRHLOORU ;B'HAM ISC/DLR - Surgery Interface Outgoing ORU message ; [ 05/19/98 9:33 AM ]
;;3.0; Surgery ;**41**;24 Jun 93
; Per VHA Directive 10-93-142, this routine SHOULD NOT be modified.
MSG(CASE,SRSTATUS,SREVENT) ;send ORU message
;This message is sent for every event point within the surgery options.
;There will be a ZIU message sent for each of the following surgery
;events, if SRSTATUS is equal to (NOT COMPLETE), (COMPLETE), or
;(ABORTED): S12 New Appointment; S13 Reschedule; S14 Modification;
;S15 Cancellation; and S17 Deletion. The events codes are set to
;SREVENT within the surgery routine options.
;
I $$V^SRHLU D MSG^SRHLVOOR(CASE,SRSTATUS,CASE) Q
I SRSTATUS="(REQUESTED)"!(SRSTATUS="(SCHEDULED)")!(SRSTATUS="(DELETED)")!(SRSTATUS="(CANCELLED)") Q
START ;
S HLDAP=$O(^HL(771,"B","SR SURGERY",0)) Q:$G(HLDAP)=""
Q:$P($G(^HL(771,HLDAP,0)),U,2)'="a"
;check for the existence of file 133.2
Q:'$D(^SRO(133.2,0))
I $P(^SRO(133.2,$O(^SRO(133.2,"AC","OPERATION",0)),0),U,4)'["S",$P(^SRO(133.2,$O(^SRO(133.2,"AC","PROCEDURE",0)),0),U,4)'["S" Q
K ^TMP("HLS",$J)
N HLCOMP,HLSUB,HLREP,SRI,SRX,UPDATE,PRT,OUT
;V. 1.6 interface
;EID - IEN of event protocol
;HL - array of output parameters
;INT - only for VISTA-to-VISTA message exchange
;SRET - Surgery Event Trigger
S SRET="SR Unsolicited transmission of VistA Requested Observation"
S EID=$O(^ORD(101,"B",SRET,0)),HL="HL",INT=0
D INIT^HLFNC2(EID,.HL,INT) S HLCOMP=$E(HL("ECH"),1),HLREP=$E(HL("ECH"),2),HLSUB=$E(HL("ECH"),4),HLFS=HL("FS"),HLQ=HL("Q"),HLECH=HL("ECH")
;Q:'$O(HL("")) ;read HL for the error message
D SEG
;SKIP duplicate messages
D CHECK I $D(UPDATE) D GEN,DISPLAY
EXIT ;
Q
GEN ;generate the message
;HLEID - IEN of event protocol
;HLARYTYP - acknowledgement array (see V. 1.6 HL7 doc)
;HLFORMAT - is HLMA is pre-formatted HL7 form
;HLMTIEN - IEN in 772
;HLRESLT - message ID and/or the error message (for output)
;HLP("CONTPTR") - continuation pointer field value (not used)
;HLP("PRIORITY") - priority field value (not used)
;HLP("SECURITY") - security information (not used)
S HLEID=EID,HLARYTYP="GM",HLFORMAT=1,HLMTIEN="",HLRESLT=""
D GENERATE^HLMA(HLEID,HLARYTYP,HLFORMAT,.HLRESLT,HLMTIEN,.HLP)
Q
SEG ;segments
S SRI=1
D PID^SRHLUO(.SRI,"HLS")
D OBR^SRHLUO4(.SRI,CASE,"HLS")
Q
DISPLAY ;screen message to user
W !,"Sending an observation result message for case #",CASE
Q
CHECK ;checks ^XTMP for duplicate modification messages
N X
I $D(^XTMP("SRHL7"_CASE,EID_"ORU",0)) D
.S X=0 F S X=$O(^TMP("HLS",$J,X)) Q:'X!($D(UPDATE)) D
..I '$D(^XTMP("SRHL7"_CASE,EID_"ORU",X)) S UPDATE=1 Q
..I ^TMP("HLS",$J,X)'=^XTMP("SRHL7"_CASE,EID_"ORU",X) S UPDATE=1
.I $O(^XTMP("SRHL7"_CASE,EID_"ORU",X)) S UPDATE=1
I '$D(^XTMP("SRHL7"_CASE,EID_"ORU",0))!$D(UPDATE) K ^XTMP("SRHL7"_CASE,EID_"ORU") S UPDATE=1,^XTMP("SRHL7"_CASE,EID_"ORU",0)=DT D
.S X=0 F S X=$O(^TMP("HLS",$J,X)) Q:'X S ^XTMP("SRHL7"_CASE,EID_"ORU",X)=^TMP("HLS",$J,X)
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSRHLOORU 3021 printed Oct 16, 2024@18:39:56 Page 2
SRHLOORU ;B'HAM ISC/DLR - Surgery Interface Outgoing ORU message ; [ 05/19/98 9:33 AM ]
+1 ;;3.0; Surgery ;**41**;24 Jun 93
+2 ; Per VHA Directive 10-93-142, this routine SHOULD NOT be modified.
MSG(CASE,SRSTATUS,SREVENT) ;send ORU message
+1 ;This message is sent for every event point within the surgery options.
+2 ;There will be a ZIU message sent for each of the following surgery
+3 ;events, if SRSTATUS is equal to (NOT COMPLETE), (COMPLETE), or
+4 ;(ABORTED): S12 New Appointment; S13 Reschedule; S14 Modification;
+5 ;S15 Cancellation; and S17 Deletion. The events codes are set to
+6 ;SREVENT within the surgery routine options.
+7 ;
+8 IF $$V^SRHLU
DO MSG^SRHLVOOR(CASE,SRSTATUS,CASE)
QUIT
+9 IF SRSTATUS="(REQUESTED)"!(SRSTATUS="(SCHEDULED)")!(SRSTATUS="(DELETED)")!(SRSTATUS="(CANCELLED)")
QUIT
START ;
+1 SET HLDAP=$ORDER(^HL(771,"B","SR SURGERY",0))
if $GET(HLDAP)=""
QUIT
+2 if $PIECE($GET(^HL(771,HLDAP,0)),U,2)'="a"
QUIT
+3 ;check for the existence of file 133.2
+4 if '$DATA(^SRO(133.2,0))
QUIT
+5 IF $PIECE(^SRO(133.2,$ORDER(^SRO(133.2,"AC","OPERATION",0)),0),U,4)'["S"
IF $PIECE(^SRO(133.2,$ORDER(^SRO(133.2,"AC","PROCEDURE",0)),0),U,4)'["S"
QUIT
+6 KILL ^TMP("HLS",$JOB)
+7 NEW HLCOMP,HLSUB,HLREP,SRI,SRX,UPDATE,PRT,OUT
+8 ;V. 1.6 interface
+9 ;EID - IEN of event protocol
+10 ;HL - array of output parameters
+11 ;INT - only for VISTA-to-VISTA message exchange
+12 ;SRET - Surgery Event Trigger
+13 SET SRET="SR Unsolicited transmission of VistA Requested Observation"
+14 SET EID=$ORDER(^ORD(101,"B",SRET,0))
SET HL="HL"
SET INT=0
+15 DO INIT^HLFNC2(EID,.HL,INT)
SET HLCOMP=$EXTRACT(HL("ECH"),1)
SET HLREP=$EXTRACT(HL("ECH"),2)
SET HLSUB=$EXTRACT(HL("ECH"),4)
SET HLFS=HL("FS")
SET HLQ=HL("Q")
SET HLECH=HL("ECH")
+16 ;Q:'$O(HL("")) ;read HL for the error message
+17 DO SEG
+18 ;SKIP duplicate messages
+19 DO CHECK
IF $DATA(UPDATE)
DO GEN
DO DISPLAY
EXIT ;
+1 QUIT
GEN ;generate the message
+1 ;HLEID - IEN of event protocol
+2 ;HLARYTYP - acknowledgement array (see V. 1.6 HL7 doc)
+3 ;HLFORMAT - is HLMA is pre-formatted HL7 form
+4 ;HLMTIEN - IEN in 772
+5 ;HLRESLT - message ID and/or the error message (for output)
+6 ;HLP("CONTPTR") - continuation pointer field value (not used)
+7 ;HLP("PRIORITY") - priority field value (not used)
+8 ;HLP("SECURITY") - security information (not used)
+9 SET HLEID=EID
SET HLARYTYP="GM"
SET HLFORMAT=1
SET HLMTIEN=""
SET HLRESLT=""
+10 DO GENERATE^HLMA(HLEID,HLARYTYP,HLFORMAT,.HLRESLT,HLMTIEN,.HLP)
+11 QUIT
SEG ;segments
+1 SET SRI=1
+2 DO PID^SRHLUO(.SRI,"HLS")
+3 DO OBR^SRHLUO4(.SRI,CASE,"HLS")
+4 QUIT
DISPLAY ;screen message to user
+1 WRITE !,"Sending an observation result message for case #",CASE
+2 QUIT
CHECK ;checks ^XTMP for duplicate modification messages
+1 NEW X
+2 IF $DATA(^XTMP("SRHL7"_CASE,EID_"ORU",0))
Begin DoDot:1
+3 SET X=0
FOR
SET X=$ORDER(^TMP("HLS",$JOB,X))
if 'X!($DATA(UPDATE))
QUIT
Begin DoDot:2
+4 IF '$DATA(^XTMP("SRHL7"_CASE,EID_"ORU",X))
SET UPDATE=1
QUIT
+5 IF ^TMP("HLS",$JOB,X)'=^XTMP("SRHL7"_CASE,EID_"ORU",X)
SET UPDATE=1
End DoDot:2
+6 IF $ORDER(^XTMP("SRHL7"_CASE,EID_"ORU",X))
SET UPDATE=1
End DoDot:1
+7 IF '$DATA(^XTMP("SRHL7"_CASE,EID_"ORU",0))!$DATA(UPDATE)
KILL ^XTMP("SRHL7"_CASE,EID_"ORU")
SET UPDATE=1
SET ^XTMP("SRHL7"_CASE,EID_"ORU",0)=DT
Begin DoDot:1
+8 SET X=0
FOR
SET X=$ORDER(^TMP("HLS",$JOB,X))
if 'X
QUIT
SET ^XTMP("SRHL7"_CASE,EID_"ORU",X)=^TMP("HLS",$JOB,X)
End DoDot:1
+9 QUIT