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  Sep 23, 2025@19:42:56                                                                                                                                                                                                    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       ;