MAGJEX1 ;WIRMFO/JHC,ISI/JL - VistARad RPC calls ; 10/17/2022
;;3.0;IMAGING;**16,22,18,65,101,115,104,120,133,341**;Dec 21, 2022;Build 28
;; Per VHA Directive 2004-038, this routine should not be modified.
;; +---------------------------------------------------------------+
;; | Property of the US Government. |
;; | No permission to copy or redistribute this software is given. |
;; | Use of unreleased versions of this software requires the user |
;; | to execute a written test agreement with the VistA Imaging |
;; | Development Office of the Department of Veterans Affairs, |
;; | telephone (301) 734-0100. |
;; | The Food and Drug Administration classifies this software as |
;; | a medical device. As such, it may not be changed in any way. |
;; | Modifications to this software may result in an adulterated |
;; | medical device under 21CFR820, the use of which is considered |
;; | to be a violation of US Federal Statutes. |
;; +---------------------------------------------------------------+
;;
; Reference to EN2^RAUTL20 in ICR #3270
;; ISI IMAGING;**99,101**
Q
;
;
ERR N ERR S ERR=$$EC^%ZOSV S @MAGGRY@(0)="0^4~"_ERR
D @^%ZOSF("ERRTN")
Q:$Q 1 Q
;
;***** Open an exam.
; RPC: MAGJ RADCASEIMAGES
;
OPENCASE(MAGGRY,DATA) ;
; MAGGRY holds $NA reference to ^TMP for rpc return
; all ref's to MAGGRY use subscript indirection
; input in DATA:
; OPEN_FLAG ^ RADFN^RADTI^RACNI^RARPT ^ PSINDGET ^ <unused> ^ USETGA (forced to zero) ; ISI
; OPEN_FLAG = 0: Open, view only
; 1: Open, lock the case for status update
; 2: Open, Reserve for Interpretation
; VIX: Fetching metadata only; Jukebox retrieval occurs (P115 & earlier)
; VIX-Metadata: Fetching metadata only; no JB Retrieval (P104,ff)
; VIX-Open: Fetching metadata with JB Retrieval (P104,ff)
; RADFN^RADTI^RACNI^RARPT = Exam ID string, specifies case of interest
; PSINDGET= Presentation State indicators of interest to client
; K/I/U for Key Image/ Interpretation/ User PS types
; USETGA = hard-code to "0": Open BIG file ; ISI remove support for downsampled image fetch
;
; Details of Reply message are below tag OPENCASZ
;
N $ETRAP,$ESTACK S $ETRAP="D ERR^MAGJEX1"
N RARPT,RADFN,RADTI,RACNI,RADIV
N DAYCASE,CURCASE,REPLY,CT,MAGS,STARTNOD,LOCKED,DATAOUT,RADATA,RIST,MDL
N IMAG,MAGXX,MAGFILE,MAGFILE1,MAGFILE2,MAGFILE3,MAGLST,MAGOBJT,MODALITY
N MAGSTRT,MAGEND,CURPATHS
N MIXEDUP,VIEWOK,USETGA,USELORES,IMGST,REMOTE,DIQUIET
N LOGDATA,MODIF,EXCAT,RADATA2,PSIND,RACPT,RASTCAT,RASTORD,ACQSITE,ALTPATH,PROCDT
N YNMAMMO,YNREVANN,PSINDGET,JBDISABLE,STANUM
N ASIGDUZ,ASIGRIST,ASIGREPL,RADATA9,PLACE ; ISI
S DIQUIET=1 D DT^DICRW
S (CT,MIXEDUP)=0,MODALITY="",DATAOUT="",DAYCASE="",MAGLST="MAGJOPENCASE",(ACQSITE,ALTPATH,PROCDT,STANUM)=""
S VIEWOK=1
K MAGGRY S MAGGRY=$NA(^TMP($J,MAGLST)),STARTNOD=0 K @MAGGRY ; assign MAGGRY value
S CURCASE=$P(DATA,U),RARPT=+$P(DATA,U,5),PSINDGET=+$P(DATA,U,6)
S PSIND="" I PSINDGET]"" F I="K","I","U" I $F(PSINDGET,I) S PSIND(I)=""
S USETGA=0 ; ISI hard-code to "0"
S RADFN=$P(DATA,U,2),RADTI=$P(DATA,U,3),RACNI=$P(DATA,U,4)
I RADFN,RADTI,RACNI D GETEXAM2^MAGJUTL1(RADFN,RADTI,RACNI,"",.X)
I 'X S REPLY="4~Request Contains Invalid Case Pointer ("_RADFN_U_RADTI_U_RACNI_U_RARPT_")." G OPENCASZ
S RADATA=$G(^TMP($J,"MAGRAEX",1,1)),RADATA2=$G(^(2)),RADATA9=$G(^("ISI")) ; ISI
K ^TMP($J,"MAGRAEX")
S RADIV=$P(RADATA2,U,5),MODIF=$P(RADATA2,U,8),RASTCAT=$P(RADATA2,U,11),RASTORD=$P(RADATA,U,15)
S PLACE=$P(RADATA2,U,6) ; ISI
S RARPT=+$P(RADATA,U,10),DAYCASE=$P(RADATA,U,12),RACPT=$P(RADATA,U,17)
I 'RARPT!'$D(^RARPT(RARPT,2005)) S REPLY="4~This exam has no report entry for associating images; no images can be accessed." G OPENCASZ
D CKINTEG^MAGJRPT(.X,RADFN,RADTI,RACNI,RARPT,RADATA)
I X]"" S MIXEDUP=1,MIXEDUP("REPLY")=X ; DB corruption
; ISI begin ...
S ASIGDUZ=+$P(RADATA9,U,3),ASIGRIST=0,ASIGREPL=0 ; ISI
I ASIGDUZ D
. F X="S","R" I $D(^VA(200,"ARC",X,ASIGDUZ)) S ASIGRIST=1 Q
; check if an assignment conflict exists for current user:
; exam is lockable (curcase = 1 or 2); if a rist is attempting to open, & exam is assigned, then block:
; Rist vs Tech has Assign? tech: allow View/Cancel; Rist: View/Override/Cancel
; Note that reply code 10 is a special value, used ONLY to enable the Assign over-ride for a rist
I CURCASE,'$$ASIGME^ISIJUTL1(ASIGDUZ) I CURCASE'=11 D G OPENCASZ:'(+REPLY=5) S CURCASE=0,ASIGREPL=1
. I ASIGRIST,(CURCASE=1) S REPLY="10~Case #"_DAYCASE_" is Assigned to "_$$USERINF^MAGJUTL3(ASIGDUZ,1)_". You may View only, Override the assignment, or Cancel. " ; #10=View/Override/Cancel"
. E I ASIGRIST S REPLY="2~Case #"_DAYCASE_" is Assigned to "_$$USERINF^MAGJUTL3(ASIGDUZ,1)_"; Reserve not allowed."
. E S REPLY="5~Case #"_DAYCASE_" is Assigned to "_$$USERINF^MAGJUTL3(ASIGDUZ,1)_"; exam NOT Locked. "
I CURCASE=11 S CURCASE=1 ; Came through Override pathway--allow override lock attempt
I ASIGREPL ; Assign conflict logic has already created a reply code/msg
E S REPLY="4~Attempting to open/display case #"_DAYCASE
; ISI ... end
S JBDISABLE=0
I CURCASE="VIX-Metadata" S JBDISABLE=1 ; metadata only, do not trigger JB fetches
;
; Note in several reply messages below the use of "2~"
; This value triggers specific behaviors in vrad client and VIX
; -- client displays an Information message box
; -- VIX 'tags' the exam to refresh the file list metadata from the source
; on any subsequent access for this exam
; These respective behaviours are mutually appropriate for both parts of
; the system for all the messages involved; avoid using "2~" unless the
; same functionality applies for any given new functionality
;
S IMGST=$$JBFETCH^MAGJUTL2(RARPT,.MAGS,USETGA,JBDISABLE) ; open only if NOT on JB
I +IMGST D G OPENCASZ ; some images are on JB
. I $D(MAGS("OFFLN")) N T,TT S T="",TT="" D
. . F S T=$O(MAGS("OFFLN",T)) Q:T="" S TT=TT_$S(TT="":"",1:", ")_T
. . S REPLY="2~Case #"_DAYCASE_"--Images for this exam are stored OFF-LINE. To view these images, contact your Imaging Coordinator, and request mounting of the following platters: "_TT
. E I JBDISABLE S REPLY="2~Case #"_DAYCASE_"--"_+IMGST_" Images are on Jukebox."
. E S REPLY="2~Case #"_DAYCASE_"--"_+IMGST_" Images have been requested from Jukebox; try again later."
I '$P(IMGST,U,2) S REPLY="2~No Images exist for Case #"_DAYCASE_"." G OPENCASZ
S USELORES=+$P(IMGST,U,3)_U_$P(IMGST,U,2)
S MAGSTRT=1,MAGEND=MAGS D IMGLOOP^MAGJEX1B
;
I ACQSITE="" S ACQSITE=RADIV
;
; Conditionally support revising an unlocked exam's annotations as a function
; of exam status and credentials of (current & original) interpreter (P101).
S YNREVANN=$$ZRUREVAN^MAGJUTL4(RADFN,RADTI,RACNI)
;
; Return flag to allow display of disclaimer text if ExamType="Mammogram".
; Note the VRad client may override based on image metadata (P101).
S YNMAMMO=$$ZRUMAMMO^MAGJUTL4(RACPT)
;
;
I ASIGREPL ; ISI ; Assign conflict logic has already created a reply code/msg
E S REPLY="0~Images for Case #"_DAYCASE ; ISI
;
OPENCASZ I 'CT,(REPLY["Attempting") S REPLY="4~Unable to retrieve images for Case #"_DAYCASE_"."
;
; Contents of successful reply = 4 pipe-delimited ("|") pieces:
; 1: # Image nodes ^ Reply Msg Type ~ Reply Msg display text
; 2: RADFN^RADTI^RACNI^RARPT --> Exam ID String
; 3: Pt Name ^ CASE # ^ Proc. Name ^ Exam Date ^ Time ^ Modality ^
; SSN ^ <unused> ^ LOCKED Status ^ Modifier ^ Exam Status Category
; 4: Is Radiologist? ^ Alt_Path Flag ^ Acquisition Site ^ Procedure Date ^
; Revise Annotations? ^ Mammography? ^ Station Number | Regional image(0/1)
;
S REMOTE=+$G(MAGJOB("REMOTE")) ; ISI
S LOCKED=0
I MIXEDUP D
. N IMIX,XDFN,XPTS S VIEWOK=$S($D(MAGJOB("KEYS","MAGJ SEE BAD IMAGES")):1,1:0)
. I MIXEDUP>1 D
. . S XPTS="",XDFN=0 F IMIX=0:1 S XDFN=$O(MIXEDUP(XDFN)) Q:'XDFN S XPTS=XPTS_$S(IMIX:" and ",1:" ")_$$PNAM(XDFN)
. . S XPTS=$S(IMIX=1:" ",1:"s ")_XPTS
. . S REPLY=(7-VIEWOK)_"~This exam is registered for "_$$PNAM(RADFN)_"; however, it is linked to images for patient"_XPTS_". This is a serious problem--immediately report it to Radiology management and Imaging support staff!"
. E S REPLY=(7-VIEWOK)_"~"_MIXEDUP("REPLY")
. I CURCASE S REPLY=REPLY_" The exam is NOT Locked." S CURCASE=0
I CT D
. S RIST=$S(+MAGJOB("USER",1):1,1:0),EXCAT=""
. S LOGDATA=RADFN_U_+$P(MAGS(1),U,4)_U_+MAGS_U_REMOTE ; for Img Access log
. I CURCASE D
. . I $G(MAGJOB("CONSOLIDATED")),'$D(MAGJOB("DIVSCRN",RADIV)) D S CURCASE=0 Q
. . . S REPLY="5~Exam is for Station #"_$$STATN(RADIV)_"; you are logged on to #"_$$STATN(DUZ(2))_". Exam is NOT Locked."
. . S XX=$P(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0),U,3)
. . I '$D(^RA(72,"AVC","E",XX)) D S CURCASE=0 Q
. . . D LOCKACT^MAGJEX1A(RARPT,DAYCASE,100,.RESULT) ; between reserve and now, exam may have been Taken & Updated
. . . I +RESULT(1)!+RESULT(2) D LOCKACT^MAGJEX1A(RARPT,DAYCASE,101,.RESULT) ; so, cancel any lock/reserve
. . . S REPLY="5~For Case #"_DAYCASE_", current Status is "_$P(^RA(72,XX,0),U)_"; Lock or Reserve NOT allowed."
. . E S EXCAT="E"
. . I RIST D ; lock only for Current Case, Radiologist, & Full Res images ; ISI remove deprecated logic re usetga
. . . ; save data needed to later log Interpreted event
. . . D LOCKACT^MAGJEX1A(RARPT,DAYCASE,CURCASE,.RESULT,.REPLY,LOGDATA)
. . . S LOCKED=$S(+RESULT:1,+$P(RESULT,U,2):2,1:0)
. I EXCAT="" D
. . I RASTORD=9 S EXCAT="C" Q ; Complete
. . E S EXCAT=RASTCAT
. . I EXCAT="D"!(EXCAT="T") S EXCAT="I" ; just display one value meaning Interpreted
. S DATAOUT=$P(RADATA,U,4)_U_DAYCASE_U_$P(RADATA,U,9)
. S X=$P(RADATA,U,6),T=$L(X," "),X=$P(X," ",1,T-1)_U_$P(X," ",T)
. S DATAOUT=DATAOUT_U_X
. S DATAOUT=DATAOUT_U_MODALITY_U_$P(RADATA,U,5)_U_U_LOCKED
. S DATAOUT=DATAOUT_U_MODIF_U_EXCAT_U_"|"_RIST_U_ALTPATH_U_ACQSITE_U_PROCDT_U_YNREVANN_U_YNMAMMO_U_STANUM_U_"|"_$$REGIONAL(.MAGS)_U_PLACE ; ISI adds pipe-piece 5!
. ; ISI remove deprecated logic re usetga
S @MAGGRY@(STARTNOD)=CT_U_REPLY_"|"_RADFN_U_RADTI_U_RACNI_U_RARPT_"|"_DATAOUT
; if mixedup & not have keys to see images, delete image refs
; & send only reply msg
I MIXEDUP,('VIEWOK) S CT=0 K @MAGGRY S @MAGGRY@(0)=CT_U_REPLY
E S $P(@MAGGRY@(0),U)=CT+STARTNOD
I CT,(LOCKED'=2),(CURCASE'["VIX") D LOG^MAGJUTL3("VR-VW",LOGDATA,$$PSETLST(RADFN,RADTI,RACNI)) ; Image access log
Q
;
PSETLST(RADFN,RADTI,RACNI) ; Return list of Printset Case #'s for exam
N I,MAGPSET,PSETLST,RAPRTSET,X
S PSETLST="" ; initialize return value
I +$G(RADFN),+$G(RADTI),+$G(RACNI) D
. D EN2^RAUTL20(.MAGPSET)
. Q:'RAPRTSET ; variable set by above call; stop if not a printset
. S X=""
. F I=0:1 S X=$O(MAGPSET(X)) Q:'X S PSETLST=PSETLST_$S(I:U,1:"")_$P(MAGPSET(X),U)
Q:$Q PSETLST Q
;
PNAM(X) ; return pt name for input DFN
I X S X=$G(^DPT(+X,0)) I X]"" S X=$P(X,U)
E S X="UNKNOWN"
Q X
;
STATN(X) ; get station #, else return input value
N T
I X]"" D GETS^DIQ(4,X,99,"","T") S T=$G(T(4,X_",",99,"E")) I T]"" S X=T
Q X
;
END Q ;
;
REGIONAL(MAGS) ; ISI -- return 1 if image storage loc is regional
N IEN,LOC,RSL
S RSL=""
I $G(MAGS) D ;aft called jbfetch^magjutl2
. S IEN=+$P($G(MAGS(1)),U,4) Q:'IEN ;MAG IEN 1st image
. S LOC=+$P($G(^MAG(2005,+IEN,0)),"^",3) ;NETWORK LOCATION
. I $G(^MAG(2005.2,LOC,"REGIONAL")) S RSL=1
Q RSL
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HMAGJEX1 11672 printed Oct 16, 2024@18:07:20 Page 2
MAGJEX1 ;WIRMFO/JHC,ISI/JL - VistARad RPC calls ; 10/17/2022
+1 ;;3.0;IMAGING;**16,22,18,65,101,115,104,120,133,341**;Dec 21, 2022;Build 28
+2 ;; Per VHA Directive 2004-038, this routine should not be modified.
+3 ;; +---------------------------------------------------------------+
+4 ;; | Property of the US Government. |
+5 ;; | No permission to copy or redistribute this software is given. |
+6 ;; | Use of unreleased versions of this software requires the user |
+7 ;; | to execute a written test agreement with the VistA Imaging |
+8 ;; | Development Office of the Department of Veterans Affairs, |
+9 ;; | telephone (301) 734-0100. |
+10 ;; | The Food and Drug Administration classifies this software as |
+11 ;; | a medical device. As such, it may not be changed in any way. |
+12 ;; | Modifications to this software may result in an adulterated |
+13 ;; | medical device under 21CFR820, the use of which is considered |
+14 ;; | to be a violation of US Federal Statutes. |
+15 ;; +---------------------------------------------------------------+
+16 ;;
+17 ; Reference to EN2^RAUTL20 in ICR #3270
+18 ;; ISI IMAGING;**99,101**
+19 QUIT
+20 ;
+21 ;
ERR NEW ERR
SET ERR=$$EC^%ZOSV
SET @MAGGRY@(0)="0^4~"_ERR
+1 DO @^%ZOSF("ERRTN")
+2 if $QUIT
QUIT 1
QUIT
+3 ;
+4 ;***** Open an exam.
+5 ; RPC: MAGJ RADCASEIMAGES
+6 ;
OPENCASE(MAGGRY,DATA) ;
+1 ; MAGGRY holds $NA reference to ^TMP for rpc return
+2 ; all ref's to MAGGRY use subscript indirection
+3 ; input in DATA:
+4 ; OPEN_FLAG ^ RADFN^RADTI^RACNI^RARPT ^ PSINDGET ^ <unused> ^ USETGA (forced to zero) ; ISI
+5 ; OPEN_FLAG = 0: Open, view only
+6 ; 1: Open, lock the case for status update
+7 ; 2: Open, Reserve for Interpretation
+8 ; VIX: Fetching metadata only; Jukebox retrieval occurs (P115 & earlier)
+9 ; VIX-Metadata: Fetching metadata only; no JB Retrieval (P104,ff)
+10 ; VIX-Open: Fetching metadata with JB Retrieval (P104,ff)
+11 ; RADFN^RADTI^RACNI^RARPT = Exam ID string, specifies case of interest
+12 ; PSINDGET= Presentation State indicators of interest to client
+13 ; K/I/U for Key Image/ Interpretation/ User PS types
+14 ; USETGA = hard-code to "0": Open BIG file ; ISI remove support for downsampled image fetch
+15 ;
+16 ; Details of Reply message are below tag OPENCASZ
+17 ;
+18 NEW $ETRAP,$ESTACK
SET $ETRAP="D ERR^MAGJEX1"
+19 NEW RARPT,RADFN,RADTI,RACNI,RADIV
+20 NEW DAYCASE,CURCASE,REPLY,CT,MAGS,STARTNOD,LOCKED,DATAOUT,RADATA,RIST,MDL
+21 NEW IMAG,MAGXX,MAGFILE,MAGFILE1,MAGFILE2,MAGFILE3,MAGLST,MAGOBJT,MODALITY
+22 NEW MAGSTRT,MAGEND,CURPATHS
+23 NEW MIXEDUP,VIEWOK,USETGA,USELORES,IMGST,REMOTE,DIQUIET
+24 NEW LOGDATA,MODIF,EXCAT,RADATA2,PSIND,RACPT,RASTCAT,RASTORD,ACQSITE,ALTPATH,PROCDT
+25 NEW YNMAMMO,YNREVANN,PSINDGET,JBDISABLE,STANUM
+26 ; ISI
NEW ASIGDUZ,ASIGRIST,ASIGREPL,RADATA9,PLACE
+27 SET DIQUIET=1
DO DT^DICRW
+28 SET (CT,MIXEDUP)=0
SET MODALITY=""
SET DATAOUT=""
SET DAYCASE=""
SET MAGLST="MAGJOPENCASE"
SET (ACQSITE,ALTPATH,PROCDT,STANUM)=""
+29 SET VIEWOK=1
+30 ; assign MAGGRY value
KILL MAGGRY
SET MAGGRY=$NAME(^TMP($JOB,MAGLST))
SET STARTNOD=0
KILL @MAGGRY
+31 SET CURCASE=$PIECE(DATA,U)
SET RARPT=+$PIECE(DATA,U,5)
SET PSINDGET=+$PIECE(DATA,U,6)
+32 SET PSIND=""
IF PSINDGET]""
FOR I="K","I","U"
IF $FIND(PSINDGET,I)
SET PSIND(I)=""
+33 ; ISI hard-code to "0"
SET USETGA=0
+34 SET RADFN=$PIECE(DATA,U,2)
SET RADTI=$PIECE(DATA,U,3)
SET RACNI=$PIECE(DATA,U,4)
+35 IF RADFN
IF RADTI
IF RACNI
DO GETEXAM2^MAGJUTL1(RADFN,RADTI,RACNI,"",.X)
+36 IF 'X
SET REPLY="4~Request Contains Invalid Case Pointer ("_RADFN_U_RADTI_U_RACNI_U_RARPT_")."
GOTO OPENCASZ
+37 ; ISI
SET RADATA=$GET(^TMP($JOB,"MAGRAEX",1,1))
SET RADATA2=$GET(^(2))
SET RADATA9=$GET(^("ISI"))
+38 KILL ^TMP($JOB,"MAGRAEX")
+39 SET RADIV=$PIECE(RADATA2,U,5)
SET MODIF=$PIECE(RADATA2,U,8)
SET RASTCAT=$PIECE(RADATA2,U,11)
SET RASTORD=$PIECE(RADATA,U,15)
+40 ; ISI
SET PLACE=$PIECE(RADATA2,U,6)
+41 SET RARPT=+$PIECE(RADATA,U,10)
SET DAYCASE=$PIECE(RADATA,U,12)
SET RACPT=$PIECE(RADATA,U,17)
+42 IF 'RARPT!'$DATA(^RARPT(RARPT,2005))
SET REPLY="4~This exam has no report entry for associating images; no images can be accessed."
GOTO OPENCASZ
+43 DO CKINTEG^MAGJRPT(.X,RADFN,RADTI,RACNI,RARPT,RADATA)
+44 ; DB corruption
IF X]""
SET MIXEDUP=1
SET MIXEDUP("REPLY")=X
+45 ; ISI begin ...
+46 ; ISI
SET ASIGDUZ=+$PIECE(RADATA9,U,3)
SET ASIGRIST=0
SET ASIGREPL=0
+47 IF ASIGDUZ
Begin DoDot:1
+48 FOR X="S","R"
IF $DATA(^VA(200,"ARC",X,ASIGDUZ))
SET ASIGRIST=1
QUIT
End DoDot:1
+49 ; check if an assignment conflict exists for current user:
+50 ; exam is lockable (curcase = 1 or 2); if a rist is attempting to open, & exam is assigned, then block:
+51 ; Rist vs Tech has Assign? tech: allow View/Cancel; Rist: View/Override/Cancel
+52 ; Note that reply code 10 is a special value, used ONLY to enable the Assign over-ride for a rist
+53 IF CURCASE
IF '$$ASIGME^ISIJUTL1(ASIGDUZ)
IF CURCASE'=11
Begin DoDot:1
+54 ; #10=View/Override/Cancel"
IF ASIGRIST
IF (CURCASE=1)
SET REPLY="10~Case #"_DAYCASE_" is Assigned to "_$$USERINF^MAGJUTL3(ASIGDUZ,1)_". You may View only, Override the assignment, or Cancel. "
+55 IF '$TEST
IF ASIGRIST
SET REPLY="2~Case #"_DAYCASE_" is Assigned to "_$$USERINF^MAGJUTL3(ASIGDUZ,1)_"; Reserve not allowed."
+56 IF '$TEST
SET REPLY="5~Case #"_DAYCASE_" is Assigned to "_$$USERINF^MAGJUTL3(ASIGDUZ,1)_"; exam NOT Locked. "
End DoDot:1
if '(+REPLY=5)
GOTO OPENCASZ
SET CURCASE=0
SET ASIGREPL=1
+57 ; Came through Override pathway--allow override lock attempt
IF CURCASE=11
SET CURCASE=1
+58 ; Assign conflict logic has already created a reply code/msg
IF ASIGREPL
+59 IF '$TEST
SET REPLY="4~Attempting to open/display case #"_DAYCASE
+60 ; ISI ... end
+61 SET JBDISABLE=0
+62 ; metadata only, do not trigger JB fetches
IF CURCASE="VIX-Metadata"
SET JBDISABLE=1
+63 ;
+64 ; Note in several reply messages below the use of "2~"
+65 ; This value triggers specific behaviors in vrad client and VIX
+66 ; -- client displays an Information message box
+67 ; -- VIX 'tags' the exam to refresh the file list metadata from the source
+68 ; on any subsequent access for this exam
+69 ; These respective behaviours are mutually appropriate for both parts of
+70 ; the system for all the messages involved; avoid using "2~" unless the
+71 ; same functionality applies for any given new functionality
+72 ;
+73 ; open only if NOT on JB
SET IMGST=$$JBFETCH^MAGJUTL2(RARPT,.MAGS,USETGA,JBDISABLE)
+74 ; some images are on JB
IF +IMGST
Begin DoDot:1
+75 IF $DATA(MAGS("OFFLN"))
NEW T,TT
SET T=""
SET TT=""
Begin DoDot:2
+76 FOR
SET T=$ORDER(MAGS("OFFLN",T))
if T=""
QUIT
SET TT=TT_$SELECT(TT="":"",1:", ")_T
+77 SET REPLY="2~Case #"_DAYCASE_"--Images for this exam are stored OFF-LINE. To view these images, contact your Imaging Coordinator, and request mounting of the following platters: "_TT
End DoDot:2
+78 IF '$TEST
IF JBDISABLE
SET REPLY="2~Case #"_DAYCASE_"--"_+IMGST_" Images are on Jukebox."
+79 IF '$TEST
SET REPLY="2~Case #"_DAYCASE_"--"_+IMGST_" Images have been requested from Jukebox; try again later."
End DoDot:1
GOTO OPENCASZ
+80 IF '$PIECE(IMGST,U,2)
SET REPLY="2~No Images exist for Case #"_DAYCASE_"."
GOTO OPENCASZ
+81 SET USELORES=+$PIECE(IMGST,U,3)_U_$PIECE(IMGST,U,2)
+82 SET MAGSTRT=1
SET MAGEND=MAGS
DO IMGLOOP^MAGJEX1B
+83 ;
+84 IF ACQSITE=""
SET ACQSITE=RADIV
+85 ;
+86 ; Conditionally support revising an unlocked exam's annotations as a function
+87 ; of exam status and credentials of (current & original) interpreter (P101).
+88 SET YNREVANN=$$ZRUREVAN^MAGJUTL4(RADFN,RADTI,RACNI)
+89 ;
+90 ; Return flag to allow display of disclaimer text if ExamType="Mammogram".
+91 ; Note the VRad client may override based on image metadata (P101).
+92 SET YNMAMMO=$$ZRUMAMMO^MAGJUTL4(RACPT)
+93 ;
+94 ;
+95 ; ISI ; Assign conflict logic has already created a reply code/msg
IF ASIGREPL
+96 ; ISI
IF '$TEST
SET REPLY="0~Images for Case #"_DAYCASE
+97 ;
OPENCASZ IF 'CT
IF (REPLY["Attempting")
SET REPLY="4~Unable to retrieve images for Case #"_DAYCASE_"."
+1 ;
+2 ; Contents of successful reply = 4 pipe-delimited ("|") pieces:
+3 ; 1: # Image nodes ^ Reply Msg Type ~ Reply Msg display text
+4 ; 2: RADFN^RADTI^RACNI^RARPT --> Exam ID String
+5 ; 3: Pt Name ^ CASE # ^ Proc. Name ^ Exam Date ^ Time ^ Modality ^
+6 ; SSN ^ <unused> ^ LOCKED Status ^ Modifier ^ Exam Status Category
+7 ; 4: Is Radiologist? ^ Alt_Path Flag ^ Acquisition Site ^ Procedure Date ^
+8 ; Revise Annotations? ^ Mammography? ^ Station Number | Regional image(0/1)
+9 ;
+10 ; ISI
SET REMOTE=+$GET(MAGJOB("REMOTE"))
+11 SET LOCKED=0
+12 IF MIXEDUP
Begin DoDot:1
+13 NEW IMIX,XDFN,XPTS
SET VIEWOK=$SELECT($DATA(MAGJOB("KEYS","MAGJ SEE BAD IMAGES")):1,1:0)
+14 IF MIXEDUP>1
Begin DoDot:2
+15 SET XPTS=""
SET XDFN=0
FOR IMIX=0:1
SET XDFN=$ORDER(MIXEDUP(XDFN))
if 'XDFN
QUIT
SET XPTS=XPTS_$SELECT(IMIX:" and ",1:" ")_$$PNAM(XDFN)
+16 SET XPTS=$SELECT(IMIX=1:" ",1:"s ")_XPTS
+17 SET REPLY=(7-VIEWOK)_"~This exam is registered for "_$$PNAM(RADFN)_"; however, it is linked to images for patient"_XPTS_". This is a serious problem--immediately report it to Radiology management and Imaging support staff!"
End DoDot:2
+18 IF '$TEST
SET REPLY=(7-VIEWOK)_"~"_MIXEDUP("REPLY")
+19 IF CURCASE
SET REPLY=REPLY_" The exam is NOT Locked."
SET CURCASE=0
End DoDot:1
+20 IF CT
Begin DoDot:1
+21 SET RIST=$SELECT(+MAGJOB("USER",1):1,1:0)
SET EXCAT=""
+22 ; for Img Access log
SET LOGDATA=RADFN_U_+$PIECE(MAGS(1),U,4)_U_+MAGS_U_REMOTE
+23 IF CURCASE
Begin DoDot:2
+24 IF $GET(MAGJOB("CONSOLIDATED"))
IF '$DATA(MAGJOB("DIVSCRN",RADIV))
Begin DoDot:3
+25 SET REPLY="5~Exam is for Station #"_$$STATN(RADIV)_"; you are logged on to #"_$$STATN(DUZ(2))_". Exam is NOT Locked."
End DoDot:3
SET CURCASE=0
QUIT
+26 SET XX=$PIECE(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0),U,3)
+27 IF '$DATA(^RA(72,"AVC","E",XX))
Begin DoDot:3
+28 ; between reserve and now, exam may have been Taken & Updated
DO LOCKACT^MAGJEX1A(RARPT,DAYCASE,100,.RESULT)
+29 ; so, cancel any lock/reserve
IF +RESULT(1)!+RESULT(2)
DO LOCKACT^MAGJEX1A(RARPT,DAYCASE,101,.RESULT)
+30 SET REPLY="5~For Case #"_DAYCASE_", current Status is "_$PIECE(^RA(72,XX,0),U)_"; Lock or Reserve NOT allowed."
End DoDot:3
SET CURCASE=0
QUIT
+31 IF '$TEST
SET EXCAT="E"
+32 ; lock only for Current Case, Radiologist, & Full Res images ; ISI remove deprecated logic re usetga
IF RIST
Begin DoDot:3
+33 ; save data needed to later log Interpreted event
+34 DO LOCKACT^MAGJEX1A(RARPT,DAYCASE,CURCASE,.RESULT,.REPLY,LOGDATA)
+35 SET LOCKED=$SELECT(+RESULT:1,+$PIECE(RESULT,U,2):2,1:0)
End DoDot:3
End DoDot:2
+36 IF EXCAT=""
Begin DoDot:2
+37 ; Complete
IF RASTORD=9
SET EXCAT="C"
QUIT
+38 IF '$TEST
SET EXCAT=RASTCAT
+39 ; just display one value meaning Interpreted
IF EXCAT="D"!(EXCAT="T")
SET EXCAT="I"
End DoDot:2
+40 SET DATAOUT=$PIECE(RADATA,U,4)_U_DAYCASE_U_$PIECE(RADATA,U,9)
+41 SET X=$PIECE(RADATA,U,6)
SET T=$LENGTH(X," ")
SET X=$PIECE(X," ",1,T-1)_U_$PIECE(X," ",T)
+42 SET DATAOUT=DATAOUT_U_X
+43 SET DATAOUT=DATAOUT_U_MODALITY_U_$PIECE(RADATA,U,5)_U_U_LOCKED
+44 ; ISI adds pipe-piece 5!
SET DATAOUT=DATAOUT_U_MODIF_U_EXCAT_U_"|"_RIST_U_ALTPATH_U_ACQSITE_U_PROCDT_U_YNREVANN_U_YNMAMMO_U_STANUM_U_"|"_$$REGIONAL(.MAGS)_U_PLACE
+45 ; ISI remove deprecated logic re usetga
End DoDot:1
+46 SET @MAGGRY@(STARTNOD)=CT_U_REPLY_"|"_RADFN_U_RADTI_U_RACNI_U_RARPT_"|"_DATAOUT
+47 ; if mixedup & not have keys to see images, delete image refs
+48 ; & send only reply msg
+49 IF MIXEDUP
IF ('VIEWOK)
SET CT=0
KILL @MAGGRY
SET @MAGGRY@(0)=CT_U_REPLY
+50 IF '$TEST
SET $PIECE(@MAGGRY@(0),U)=CT+STARTNOD
+51 ; Image access log
IF CT
IF (LOCKED'=2)
IF (CURCASE'["VIX")
DO LOG^MAGJUTL3("VR-VW",LOGDATA,$$PSETLST(RADFN,RADTI,RACNI))
+52 QUIT
+53 ;
PSETLST(RADFN,RADTI,RACNI) ; Return list of Printset Case #'s for exam
+1 NEW I,MAGPSET,PSETLST,RAPRTSET,X
+2 ; initialize return value
SET PSETLST=""
+3 IF +$GET(RADFN)
IF +$GET(RADTI)
IF +$GET(RACNI)
Begin DoDot:1
+4 DO EN2^RAUTL20(.MAGPSET)
+5 ; variable set by above call; stop if not a printset
if 'RAPRTSET
QUIT
+6 SET X=""
+7 FOR I=0:1
SET X=$ORDER(MAGPSET(X))
if 'X
QUIT
SET PSETLST=PSETLST_$SELECT(I:U,1:"")_$PIECE(MAGPSET(X),U)
End DoDot:1
+8 if $QUIT
QUIT PSETLST
QUIT
+9 ;
PNAM(X) ; return pt name for input DFN
+1 IF X
SET X=$GET(^DPT(+X,0))
IF X]""
SET X=$PIECE(X,U)
+2 IF '$TEST
SET X="UNKNOWN"
+3 QUIT X
+4 ;
STATN(X) ; get station #, else return input value
+1 NEW T
+2 IF X]""
DO GETS^DIQ(4,X,99,"","T")
SET T=$GET(T(4,X_",",99,"E"))
IF T]""
SET X=T
+3 QUIT X
+4 ;
END ;
QUIT
+1 ;
REGIONAL(MAGS) ; ISI -- return 1 if image storage loc is regional
+1 NEW IEN,LOC,RSL
+2 SET RSL=""
+3 ;aft called jbfetch^magjutl2
IF $GET(MAGS)
Begin DoDot:1
+4 ;MAG IEN 1st image
SET IEN=+$PIECE($GET(MAGS(1)),U,4)
if 'IEN
QUIT
+5 ;NETWORK LOCATION
SET LOC=+$PIECE($GET(^MAG(2005,+IEN,0)),"^",3)
+6 IF $GET(^MAG(2005.2,LOC,"REGIONAL"))
SET RSL=1
End DoDot:1
+7 QUIT RSL
+8 ;