RAMAGHL ;HCIOFO/SG - ORDERS/EXAMS API (HL7 UTILITIES) ; 2/25/09 3:30pm
;;5.0;Radiology/Nuclear Medicine;**90**;Mar 16, 1998;Build 20
;
; This routine uses the following IAs:
;
; #872 Access to the file #101 (controlled)
;
Q
;
;***** RETURNS THE LIST OF ACTIVE HL7 APPLICATIONS
;
; .APPLST Reference to a local variable where the list
; of active HL7 applications associated with the
; RA REG*, RA EXAMINED*, RA CANCEL*, and RA RPT*
; HL7 protocols (as receiving applications) will
; be returned to.
; APPLST(
; HL7AppIEN) HL7 application name
;
; Return values:
; <0 Error descriptor (see $$ERROR^RAERR)
; 0 Ok
;
APPLST(APPLST) ;
N IEN,NAME,PART,PIEN,PL,RAMSG,ROOT,SUBSLST
K APPLST
;--- Build the list of subscriber IENs
S ROOT=$$ROOT^DILFD(101,,1)
F PART="RA REG","RA EXAMINED","RA CANCEL","RA RPT" D
. S NAME=$O(@ROOT@("B",PART),-1),PL=$L(PART)
. F S NAME=$O(@ROOT@("B",NAME)) Q:$E(NAME,1,PL)'=PART D
. . S PIEN=0
. . F S PIEN=$O(@ROOT@("B",NAME,PIEN)) Q:PIEN'>0 D
. . . S IEN=0
. . . F S IEN=$O(@ROOT@(PIEN,775,IEN)) Q:IEN'>0 D
. . . . S SUBSLST(+@ROOT@(PIEN,775,IEN,0))=""
;--- Build the list of receiving application IENs
S PIEN=0
F S PIEN=$O(SUBSLST(PIEN)) Q:PIEN'>0 D
. S IEN=+$$GET1^DIQ(101,PIEN_",",770.2,"I",,"RAMSG")
. S:IEN>0 APPLST(IEN)=""
;--- Check if the applications are active and get their names
S IEN=0
F S IEN=$O(APPLST(IEN)) Q:IEN'>0 D
. I $P($$GETAPP^HLCS2(IEN),U,2)="i" K APPLST(IEN) Q
. S APPLST(IEN)=$$GET1^DIQ(771,IEN_",",.01,,,"RAMSG")
;---
Q 0
;
;***** SENDS "EXAMINED" HL7 MESSAGES (ORM)
;
; RACASE Exam/case identifiers
; ^01: IEN of the patient in the file #70 (RADFN)
; ^02: IEN in the REGISTERED EXAMS multiple (RADTI)
; ^03: IEN in the EXAMINATIONS multiple (RACNI)
;
; [RAFLAGS] Flags that control the execution (can be combined):
;
; S Do not send the message to speech recognition
; (dictation) systems
;
; Return values:
; <0 Error descriptor (see $$ERROR^RAERR)
; 0 Ok
;
EXAMINED(RACASE,RAFLAGS) ;
N RACNI,RADFN,RADTI,RAEXEDT,RASSS,RASSSX,RC,TMP
S RADFN=$P(RACASE,U),RADTI=$P(RACASE,U,2),RACNI=$P(RACASE,U,3)
S RAFLAGS=$G(RAFLAGS)
;
;--- Exclude speech recognition (dictation) systems if necessary
I RAFLAGS["S" S RC=$$SPRSUBS(.RASSSX) Q:RC $S(RC<0:RC,1:0)
;
;--- Generate and send the message
S RAEXEDT=1 D EXM^RAHLRPC
Q 0
;
;***** SENDS "REPORT" HL7 MESSAGES (ORU)
;
; RACASE Exam/case identifiers
; ^01: IEN of the patient in the file #70 (RADFN)
; ^02: IEN in the REGISTERED EXAMS multiple (RADTI)
; ^03: IEN in the EXAMINATIONS multiple (RACNI)
;
; [RAFLAGS] Flags that control the execution (can be combined):
;
; S Do not send the message to speech recognition
; (dictation) systems
;
; Return values:
; <0 Error descriptor (see $$ERROR^RAERR)
; 0 Ok
;
REPORT(RACASE,RAFLAGS) ;
N RACNI,RADFN,RADTI,RAMSG,RASSS,RASSSX,RC,RPTIEN,TMP
S RADFN=$P(RACASE,U),RADTI=$P(RACASE,U,2),RACNI=$P(RACASE,U,3)
S RAFLAGS=$G(RAFLAGS)
;
;--- Get the report IEN
S TMP=$$EXAMIENS^RAMAGU04(RACASE)
S RPTIEN=$$GET1^DIQ(70.03,TMP,17,"I",,"RAMSG")
Q:$G(DIERR) $$DBS^RAERR("RAMSG",-9,70.03,TMP)
Q:RPTIEN'>0 0 ; No report yet
;
;--- Send messages only for verified or released reports
S TMP=$$RPTSTAT^RAMAGU12(RPTIEN) Q:TMP<0 TMP
S TMP=$P(TMP,U) Q:(TMP'="V")&(TMP'="R")&(TMP'="EF") 0
;
;--- Exclude speech recognition (dictation) systems if necessary
I RAFLAGS["S" S RC=$$SPRSUBS(.RASSSX) Q:RC $S(RC<0:RC,1:0)
;
;--- Generate and send the message
D RPT^RAHLRPC
Q 0
;
;***** COMPILES A LIST OF SPEACH RECOGNITION SUBSCRIBERS
;
; .RASSSX Reference to a local array where the list of
; speech recognition subscribers is returned to:
;
; RASSSX(EvtDrvrIEN,SubscriberIEN) = EvtDrvrName
;
; EvtDrvrIEN and SubscriberIEN are record numbers
; in the PROTOCOL file (#101).
;
; [.RASSS] Reference to a local array where the list of
; related HL7 applications is returned to:
;
; RASSS(HL7AppIEN) = ""
;
; HL7AppIEN is a record number in the HL7
; APPLICATION PARAMETER file (#771).
;
; Return values:
; <0 Error descriptor (see $$ERROR^RAERR)
; 0 Ok
; >0 Nowhere to send
;
SPRSUBS(RASSSX,RASSS) ;
N APPLST,IEN,RABUF,RAMSG,RC
K RASSS,RASSSX
S RC=$$APPLST(.APPLST) Q:RC<0 RC
;--- Select only those HL7 applications that do not have
; 'S:Speech Recognition' in the APPLICATION TYPE field of
;--- the RAD/NUC MED HL7 APPLICATION EXCEPTION file (#79.7).
S IEN=0
F S IEN=$O(APPLST(IEN)) Q:IEN'>0 D
. I $D(^RA(79.7,IEN,0)) D Q:RC="S"
. . S RC=$$GET1^DIQ(79.7,IEN_",",1.3,"I",,"RAMSG")
. S RASSS(IEN)=""
;--- Quit if all recipients should be skipped
Q:$D(RASSS)<10 1
;--- Build the list of excluded subscriber protocols
D GETSUB^RAHLRS1(.RASSS,.RASSSX)
Q 0
RAMAGHL ;HCIOFO/SG - ORDERS/EXAMS API (HL7 UTILITIES) ; 2/25/09 3:30pm
+1 ;;5.0;Radiology/Nuclear Medicine;**90**;Mar 16, 1998;Build 20
+2 ;
+3 ; This routine uses the following IAs:
+4 ;
+5 ; #872 Access to the file #101 (controlled)
+6 ;
+7 QUIT
+8 ;
+9 ;***** RETURNS THE LIST OF ACTIVE HL7 APPLICATIONS
+10 ;
+11 ; .APPLST Reference to a local variable where the list
+12 ; of active HL7 applications associated with the
+13 ; RA REG*, RA EXAMINED*, RA CANCEL*, and RA RPT*
+14 ; HL7 protocols (as receiving applications) will
+15 ; be returned to.
+16 ; APPLST(
+17 ; HL7AppIEN) HL7 application name
+18 ;
+19 ; Return values:
+20 ; <0 Error descriptor (see $$ERROR^RAERR)
+21 ; 0 Ok
+22 ;
APPLST(APPLST) ;
+1 NEW IEN,NAME,PART,PIEN,PL,RAMSG,ROOT,SUBSLST
+2 KILL APPLST
+3 ;--- Build the list of subscriber IENs
+4 SET ROOT=$$ROOT^DILFD(101,,1)
+5 FOR PART="RA REG","RA EXAMINED","RA CANCEL","RA RPT"
Begin DoDot:1
+6 SET NAME=$ORDER(@ROOT@("B",PART),-1)
SET PL=$LENGTH(PART)
+7 FOR
SET NAME=$ORDER(@ROOT@("B",NAME))
IF $EXTRACT(NAME,1,PL)'=PART
QUIT
Begin DoDot:2
+8 SET PIEN=0
+9 FOR
SET PIEN=$ORDER(@ROOT@("B",NAME,PIEN))
IF PIEN'>0
QUIT
Begin DoDot:3
+10 SET IEN=0
+11 FOR
SET IEN=$ORDER(@ROOT@(PIEN,775,IEN))
IF IEN'>0
QUIT
Begin DoDot:4
+12 SET SUBSLST(+@ROOT@(PIEN,775,IEN,0))=""
End DoDot:4
End DoDot:3
End DoDot:2
End DoDot:1
+13 ;--- Build the list of receiving application IENs
+14 SET PIEN=0
+15 FOR
SET PIEN=$ORDER(SUBSLST(PIEN))
IF PIEN'>0
QUIT
Begin DoDot:1
+16 SET IEN=+$$GET1^DIQ(101,PIEN_",",770.2,"I",,"RAMSG")
+17 IF IEN>0
SET APPLST(IEN)=""
End DoDot:1
+18 ;--- Check if the applications are active and get their names
+19 SET IEN=0
+20 FOR
SET IEN=$ORDER(APPLST(IEN))
IF IEN'>0
QUIT
Begin DoDot:1
+21 IF $PIECE($$GETAPP^HLCS2(IEN),U,2)="i"
KILL APPLST(IEN)
QUIT
+22 SET APPLST(IEN)=$$GET1^DIQ(771,IEN_",",.01,,,"RAMSG")
End DoDot:1
+23 ;---
+24 QUIT 0
+25 ;
+26 ;***** SENDS "EXAMINED" HL7 MESSAGES (ORM)
+27 ;
+28 ; RACASE Exam/case identifiers
+29 ; ^01: IEN of the patient in the file #70 (RADFN)
+30 ; ^02: IEN in the REGISTERED EXAMS multiple (RADTI)
+31 ; ^03: IEN in the EXAMINATIONS multiple (RACNI)
+32 ;
+33 ; [RAFLAGS] Flags that control the execution (can be combined):
+34 ;
+35 ; S Do not send the message to speech recognition
+36 ; (dictation) systems
+37 ;
+38 ; Return values:
+39 ; <0 Error descriptor (see $$ERROR^RAERR)
+40 ; 0 Ok
+41 ;
EXAMINED(RACASE,RAFLAGS) ;
+1 NEW RACNI,RADFN,RADTI,RAEXEDT,RASSS,RASSSX,RC,TMP
+2 SET RADFN=$PIECE(RACASE,U)
SET RADTI=$PIECE(RACASE,U,2)
SET RACNI=$PIECE(RACASE,U,3)
+3 SET RAFLAGS=$GET(RAFLAGS)
+4 ;
+5 ;--- Exclude speech recognition (dictation) systems if necessary
+6 IF RAFLAGS["S"
SET RC=$$SPRSUBS(.RASSSX)
IF RC
QUIT $SELECT(RC<0:RC,1:0)
+7 ;
+8 ;--- Generate and send the message
+9 SET RAEXEDT=1
DO EXM^RAHLRPC
+10 QUIT 0
+11 ;
+12 ;***** SENDS "REPORT" HL7 MESSAGES (ORU)
+13 ;
+14 ; RACASE Exam/case identifiers
+15 ; ^01: IEN of the patient in the file #70 (RADFN)
+16 ; ^02: IEN in the REGISTERED EXAMS multiple (RADTI)
+17 ; ^03: IEN in the EXAMINATIONS multiple (RACNI)
+18 ;
+19 ; [RAFLAGS] Flags that control the execution (can be combined):
+20 ;
+21 ; S Do not send the message to speech recognition
+22 ; (dictation) systems
+23 ;
+24 ; Return values:
+25 ; <0 Error descriptor (see $$ERROR^RAERR)
+26 ; 0 Ok
+27 ;
REPORT(RACASE,RAFLAGS) ;
+1 NEW RACNI,RADFN,RADTI,RAMSG,RASSS,RASSSX,RC,RPTIEN,TMP
+2 SET RADFN=$PIECE(RACASE,U)
SET RADTI=$PIECE(RACASE,U,2)
SET RACNI=$PIECE(RACASE,U,3)
+3 SET RAFLAGS=$GET(RAFLAGS)
+4 ;
+5 ;--- Get the report IEN
+6 SET TMP=$$EXAMIENS^RAMAGU04(RACASE)
+7 SET RPTIEN=$$GET1^DIQ(70.03,TMP,17,"I",,"RAMSG")
+8 IF $GET(DIERR)
QUIT $$DBS^RAERR("RAMSG",-9,70.03,TMP)
+9 ; No report yet
IF RPTIEN'>0
QUIT 0
+10 ;
+11 ;--- Send messages only for verified or released reports
+12 SET TMP=$$RPTSTAT^RAMAGU12(RPTIEN)
IF TMP<0
QUIT TMP
+13 SET TMP=$PIECE(TMP,U)
IF (TMP'="V")&(TMP'="R")&(TMP'="EF")
QUIT 0
+14 ;
+15 ;--- Exclude speech recognition (dictation) systems if necessary
+16 IF RAFLAGS["S"
SET RC=$$SPRSUBS(.RASSSX)
IF RC
QUIT $SELECT(RC<0:RC,1:0)
+17 ;
+18 ;--- Generate and send the message
+19 DO RPT^RAHLRPC
+20 QUIT 0
+21 ;
+22 ;***** COMPILES A LIST OF SPEACH RECOGNITION SUBSCRIBERS
+23 ;
+24 ; .RASSSX Reference to a local array where the list of
+25 ; speech recognition subscribers is returned to:
+26 ;
+27 ; RASSSX(EvtDrvrIEN,SubscriberIEN) = EvtDrvrName
+28 ;
+29 ; EvtDrvrIEN and SubscriberIEN are record numbers
+30 ; in the PROTOCOL file (#101).
+31 ;
+32 ; [.RASSS] Reference to a local array where the list of
+33 ; related HL7 applications is returned to:
+34 ;
+35 ; RASSS(HL7AppIEN) = ""
+36 ;
+37 ; HL7AppIEN is a record number in the HL7
+38 ; APPLICATION PARAMETER file (#771).
+39 ;
+40 ; Return values:
+41 ; <0 Error descriptor (see $$ERROR^RAERR)
+42 ; 0 Ok
+43 ; >0 Nowhere to send
+44 ;
SPRSUBS(RASSSX,RASSS) ;
+1 NEW APPLST,IEN,RABUF,RAMSG,RC
+2 KILL RASSS,RASSSX
+3 SET RC=$$APPLST(.APPLST)
IF RC<0
QUIT RC
+4 ;--- Select only those HL7 applications that do not have
+5 ; 'S:Speech Recognition' in the APPLICATION TYPE field of
+6 ;--- the RAD/NUC MED HL7 APPLICATION EXCEPTION file (#79.7).
+7 SET IEN=0
+8 FOR
SET IEN=$ORDER(APPLST(IEN))
IF IEN'>0
QUIT
Begin DoDot:1
+9 IF $DATA(^RA(79.7,IEN,0))
Begin DoDot:2
+10 SET RC=$$GET1^DIQ(79.7,IEN_",",1.3,"I",,"RAMSG")
End DoDot:2
IF RC="S"
QUIT
+11 SET RASSS(IEN)=""
End DoDot:1
+12 ;--- Quit if all recipients should be skipped
+13 IF $DATA(RASSS)<10
QUIT 1
+14 ;--- Build the list of excluded subscriber protocols
+15 DO GETSUB^RAHLRS1(.RASSS,.RASSSX)
+16 QUIT 0