MAGGI12 ;WOIFO/GEK/SG/JSL - IMAGE FILE API (PROPERTIES) ; 1/13/09 11:20am
;;3.0;IMAGING;**93,94,122,138**;Mar 19, 2002;Build 5380;Sep 03, 2013
;; 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. |
;; +---------------------------------------------------------------+
;;
Q
;
;##### RETURNS IEN OF THE GROUP PARENT FOR THE IMAGE
;
; IEN Internal Entry Number of the image record
;
; Return Values
; =============
; <0 Error descriptor (see the $$ERROR^MAGUERR)
; 0 Image is not a member of a group
; >0 IEN of the group parent
;
; Notes
; =====
;
; For a deleted image, the function returns the IEN of the group
; that the image belonged to before it was marked as deleted.
;
GRPIEN(IEN) ; Returns IEN of the Group parent for the Image.
N ERR,NODE
S NODE=$$NODE^MAGGI11(IEN,.ERR)
I NODE="" D STORE^MAGUERR(ERR) Q ERR
Q +$P($G(@NODE@(0)),U,10) ; GROUP PARENT (14)
;
;##### ALLOCATES A NEW RECORD IN THE IMAGE FILE (#2005) AND LOCKS IT
;
; Return Values
; =============
; >0 IEN for the new record in the IMAGE file (#2005)
;
; Notes
; =====
;
; The placeholder for the new record (^MAG(2005,IEN) node) is LOCKed
; by this function. It is responsibility of the caller to unlock the
; record after it is created or the record creation is canceled.
;
NEWIEN() ;
N DIEN,IEN,NEWIEN,NODE
S NEWIEN=0
;---
F D Q:NEWIEN
. S IEN=$O(^MAG(2005," "),-1)+1
. ;--- Check the IMAGE AUDIT file for a deleted image
. S DIEN=$O(^MAG(2005.1," "),-1)+1
. S:DIEN>IEN IEN=DIEN
. ;--- If the record already exists, skip it
. S NODE=$NA(^MAG(2005,IEN)) Q:$D(@NODE)
. ;--- Lock the placeholder in order to make sure that nobody
. ;--- else is trying to allocate it at the same time.
. D LOCK^DILF(NODE) E Q
. ;--- Double check that the record has not been created after the
. ;--- previous $D() check and the LOCK command (a race condition)
. I $D(@NODE) L -@NODE Q
. ;--- Success
. S NEWIEN=IEN
. Q
;---
Q NEWIEN
;
;##### RETURNS THE PARENT DATA (SUB)FILE REFERENCE
;
; IEN Internal Entry Number of the image record
;
; Return Values
; =============
; <0 Error descriptor (see the $$ERROR^MAGUERR)
; 0 Image does not have a parent file reference
; >0 Parent data file reference (file/subfile number and
; IEN in the PARENT DATA FILE file (#2005.03) at the
; same time).
;
PARFILE(IEN) ;
N ERR,NODE,PARENTFILE,PFN0
S NODE=$$NODE^MAGGI11(IEN,.ERR)
I NODE="" D STORE^MAGUERR(ERR) Q ERR
;--- Check if the image record has a parent data file reference
S PARENTFILE=$P($G(@NODE@(2)),U,6) ; PARENT DATA FILE# (16)
Q:PARENTFILE="" 0
;--- Check if the pointer to the PARENT DATA FILE
;--- file (#2005.03) is valid
S PFN0=$G(^MAG(2005.03,PARENTFILE,0))
Q:PFN0="" $$ERROR^MAGUERR(-34,,IEN,PARENTFILE)
;--- Check if file descriptor has a value in FILE POINTER field (.04)
Q:$P(PFN0,U,4)="" $$ERROR^MAGUERR(-35,,PARENTFILE)
;--- Return the reference
Q PARENTFILE
;
;##### RETURNS STATUS OF THE IMAGE
;
; IEN Internal Entry Number of the image record
;
; Return Values
; =============
; <0 Error descriptor (see the $$ERROR^MAGUERR)
; "" Status is not defined
; >0 Image status
; ^01: Status code (internal value)
; ^02: Description (external value)
;
STATUS(IEN) ;
N ERR,STATUS
S STATUS=$$IMGST^MAGGI11(IEN,.ERR)
D:ERR<0 STORE^MAGUERR(ERR)
Q $S(STATUS>0:STATUS,ERR<0:ERR,1:"")
;
;##### RETURNS THE VIEWABLE STATUS OF THE IMAGE
;
; IEN IEN of the image record in the file #2005
;
; [FLAGS] Flags that control execution (can be combined):
;
; Q Perform the integrity checks
;
; [.MESSAGES] Reference to a local array for messages returned
; by the image data checks. A node in this array is
; defined only if the result value contains the
; corresponding subscript value (e.g. the "Q" node is
; defined only if integrity checks fail and the result
; contains "Q").
;
; MESSAGES(
;
; "Q") Message returned by the integrity checks.
;
; "R") Message returned by the Radiology report checks
; (reserved but not implemented)
;
; "S") Message regarding the image status.
;
; "T") Message returned by the TIU note checks.
;
; Return Values
; =============
; "" Image can be viewed
; ... One or more characters that indicate why
; the image cannot be viewed "as usual":
;
; D Deleted image
; Q Questionable integrity
; R Problem with the Radiology report
; (reserved but not implemented)
; S Check the value of the STATUS field
; T Can't view the TIU note
;
VIEWSTAT(IEN,FLAGS,MESSAGES) ;
N MAGCF,MAGVS
K MESSAGES S MAGVS="",MAGCF=$G(FLAGS)
D
. N BUF,ERR,GRPIEN,NODE,STATUS
. ;--- Validate IEN and get the image status
. S STATUS=$$IMGST^MAGGI11(IEN,.ERR)
. S NODE=$$NODE^MAGGI11(IEN)
. ;--- Force the integrity check in case of error(s)
. I (ERR<0)!(NODE="") S MAGCF=MAGCF_"Q" Q
. ; gek/ P94t7 if IEN is in a group, we also mark child as "T" if Grp is "T"
. S GRPIEN=+$P($G(@NODE@(0)),U,10)
. I GRPIEN D
. . N GBUF,GNODE
. . S GNODE=$$NODE^MAGGI11(GRPIEN)
. . S GBUF=$G(@GNODE@(2))
. . D:+$P(GBUF,U,6)=8925
. . . N IEN,TMP
. . . S IEN=+$P(GBUF,U,7) Q:'IEN
. . . S TMP=$$CANDO^TIULP(IEN,"VIEW") ;IA#2322
. . . S:'TMP MAGVS=MAGVS_"T",MESSAGES("T")=$P(TMP,U,2)
. . . Q
. . Q
. I MAGVS["T" Q
. ; gek/ p94t7 __ Done changes
. ;--- Check the image status
. D:STATUS'<10
. . I +STATUS=12 S MAGVS=MAGVS_"D" Q
. . ;Patch 140 Status of 13 will continue and MESSAGES("S") will have reason
. . S MAGVS=MAGVS_"S"
. . S MESSAGES("S")=$$MSG^MAGUERR(-33,,$P(STATUS,U,2))
. . Q
. ;--- Check if the TIU note can be viewed
. S BUF=$G(@NODE@(2))
. D:+$P(BUF,U,6)=8925
. . N IEN,TMP S IEN=+$P(BUF,U,7) Q:'IEN
. . S TMP=$$CANDO^TIULP(IEN,"VIEW") ;IA#2322
. . S:'TMP MAGVS=MAGVS_"T",MESSAGES("T")=$P(TMP,U,2)
. . Q
. ;--- Check the status of the group if necessary
. I MAGVS'["D",MAGVS'["S" D
. . S GRPIEN=$P($G(@NODE@(0)),U,10) Q:GRPIEN'>0 ; GROUP PARENT
. . S STATUS=$$IMGST^MAGGI11(GRPIEN) Q:STATUS<10
. . ;--- Force the integrity check if the existing
. . ;--- image entry belongs to a deleted group.
. . I +STATUS=12 S MAGCF=MAGCF_"Q" Q
. . ;--- Extend the "non-viewable" group status to the image
. . S MAGVS=MAGVS_"S"
. . S MESSAGES("S")=$$MSG^MAGUERR(-33,,$P(STATUS,U,2))
. . Q
. Q
;
;--- Radiology report
; Reserved but not implemented
;
;--- Questionable integrity
D:MAGCF["Q"
. N MAGQI
. D CHK^MAGGSQI(.MAGQI,IEN)
. S:'$G(MAGQI(0)) MAGVS=MAGVS_"Q",MESSAGES("Q")=$P(MAGQI(0),U,2)
. Q
;
;---
Q MAGVS
;+++++ ANNSTAT *******
; Determine if this image can be annotated.
; *** INPUT Parameters
;
; VSTCODE : The Image 'View Status' numeric code.
; if this isn't sent as a parameter, it is computed.
;
; MAGIEN : Image IEN (^MAG(2005))
;
; *** OUTPUT Parameters (optional)
; DESC : Text Reason for the result;
;
; Result Values
; --------------------------
; RESULT of this call is a numeric value
; 0 : success, image can be annotated.
;
; Values of STATUS field (113) that are okay.
; 1 : Viewable (RESULT will be changed to 0)
; 2 : QA Reviewed (RESULT will be changed to 0)
;
;
; Values of STATUS field (113)
; that will block Annotation.
; 10 : Image capture is in progress, (Future for groups.)
; 11 : Image Needs Review
; 12 : Image is Deleted.
; 13 : Image Never Existed. ;p130
;
; Values of Image "View Status" that will block Annotation
; ("View Status" is a computed value, not an IMAGE Field)
; 21 : Image has Questionable Integrity issues.
; 22 : User cannot "VIEW" the associated TIU Note.
; due to TIU Business Rules
; 23 : Image is not Viewable by Radiology Rule (Future )
;
; Values of other codes specific for blocked Annotation
; 30 : User Cannot "MAKE ADDENDUM" to the associated TIU Note.
; due to TIU Business Rules
; 31 : Image in Rescinded.
;
;
ANNSTAT(MAGIEN,VSTCODE,DESC) ;Annotation Status
N ANCODE,FLG,STI,VSTCD,TIUIEN,AMND,MSG,X,X2,GRPIEN
;
S ANCODE=$G(VSTCODE)
S DESC=""
I ANCODE="" D
. ; compute View Status Code if not sent.
. ; QI Check already done in MAGAII ;S FLG="Q"
. S FLG=""
. S VSTCD=$$VIEWSTAT(MAGIEN,FLG,.MSG)
. ; example of Result from $$VIEWSTAT
. ; "" : success , viewable
. ; "QT" : a Text String if not viewable
. ;
. ; -MSG- : is an array of reasons for failure, each letter
. ; of Result is node of array i.e. MSG("Q")="..."
. ; MSG("T")="..."
. ; for this call ANNSTAT, we will just get first entry
. ;
. ;if the View Status Code (VSTCD) is not "", return it's text in MSG
. I VSTCD]"" S X=$O(MSG("")) S DESC=$G(MSG(X))
. S STI=+$P($G(^MAG(2005,MAGIEN,100)),"^",8) ; STATUS (113)
. ;--- Now get View Status Numeric value
. S ANCODE=$$VSTCODE^MAGGAII(VSTCD,STI)
. Q
;
; if the View Status Code > 9 then user cannot view the image, so
; we won't let user annotate the image.
; and will get a generic description of the code, if DESC is still ""
I (ANCODE>9) S DESC=$S(DESC="":$$VSTTEXT(ANCODE),1:DESC) Q ANCODE
; if Image is attached to TIU Note, we check TIU Business Rules.
S GRPIEN=$P($G(^MAG(2005,MAGIEN,0)),U,10),GRPIEN=$S(+GRPIEN:GRPIEN,1:MAGIEN)
S X2=$G(^MAG(2005,GRPIEN,2))
I $P(X2,"^",6)=8925 D
. S TIUIEN=$P(X2,"^",7)
. ; If we don't have a pointer to 8925, that is DB corruption
. ; This would probably already be caught,
. ; but check in case. VIEWSTAT wasn't run prior to this call.
. I 'TIUIEN S ANCODE=21,DESC="Invalid pointer to TIU Package ("_TIUIEN_")" Q
. S AMND=$$CANDO^TIULP(TIUIEN,"MAKE ADDENDUM") ;IA#2322
. ; Example of result from TIULP
. ; 0^ You may not ADDEND this UNSIGNED PRIMARY CARE.
. ; 1
. I 'AMND S ANCODE=30,DESC=$P(AMND,"^",2)
. Q
; if ANCODE > 9 then TIU Business rule says no Annotation.
I (ANCODE>9) S DESC=$S(DESC="":$$VSTTEXT(ANCODE),1:DESC) Q ANCODE
;
I $P($G(^MAG(2005,MAGIEN,100)),"^",12)=1 D
. ; Image is Rescinded
. S ANCODE=31
. Q
; if ANCODE > 9 then Image is rescinded and stop Annotation.
I (ANCODE>9) S DESC=$$VSTTEXT(ANCODE) Q ANCODE
; If we get here, Image can be annotated.
; - not changing to 0. Status here is 1 or 2 for viewable.
;S DESC="Image can be annotated."
; Send exact numeric code. Delphi understands < 10 is viewable
; and can be annotated.
S DESC=$$VSTTEXT(ANCODE)
Q ANCODE
;
; ##### VSTTEXT returns a Description of the Status Code.
;
; CODE is the numeric code for the Annotation Status.
; This is based on Status, Viewable Status, and
; two new return values for Annotation Status.
;
VSTTEXT(CODE) ;Description for Annotation Status
N I,DONE,STR
S (I,DONE)=0
F D Q:DONE
. S I=I+1
. S STR=$T(DATA+I)
. I $P(STR,";",3)=CODE S DESC=$P(STR,";",4),DONE=1
. I $P(STR,";",3)="END" S DESC=$P(STR,";",4)_CODE,DONE=1
. Q
Q DESC
; ##### DATA Table for Image Status, View Status, Annotation Status.
;
; the Code is in Piece 3, and the Description is in Piece 4.
;
; Image STATUS field (113)
; Codes 0..12 are the Status Codes from field 113
;
; Viewable Status and Annotation Status are computed values,
; based on, but not equal to STATUS (113)
; they depend on TIU Business Rules, QI Of image, User Keys.
; The Codes are computed in other functions. Description of the
; code is returned from this table.
;
; Codes 21..23 are the Viewable Status Codes. (computed value)
; Codes 30..31 are Annotation Status Codes.
DATA ;
;;0;Image is Viewable;
;;1;Image is Viewable.;
;;2;Image is QA Reviewed.;
;
;;10;Image capture is in progress.; (Future for groups.)
;;11;Image needs review.;
;;12;Image is deleted.;
;;13;Image Never Existed.; << p130 for images that didn't exist.
;
;;21;Image has Questionable Integrity issues.;
;;22;User cannot 'View' the associated TIU note. TIU Business Rule.;
;;23;Image is not Viewable by Radiology Rule.; (future)
;
;;30;User cannot 'Make Addendum' to the associated TIU Note. TIU Business Rule.;
;;31;Image is Rescinded.;
;;END;User cannot Annotate the Image. Unknown CODE: ;
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HMAGGI12 13927 printed Oct 16, 2024@18:03:12 Page 2
MAGGI12 ;WOIFO/GEK/SG/JSL - IMAGE FILE API (PROPERTIES) ; 1/13/09 11:20am
+1 ;;3.0;IMAGING;**93,94,122,138**;Mar 19, 2002;Build 5380;Sep 03, 2013
+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 QUIT
+18 ;
+19 ;##### RETURNS IEN OF THE GROUP PARENT FOR THE IMAGE
+20 ;
+21 ; IEN Internal Entry Number of the image record
+22 ;
+23 ; Return Values
+24 ; =============
+25 ; <0 Error descriptor (see the $$ERROR^MAGUERR)
+26 ; 0 Image is not a member of a group
+27 ; >0 IEN of the group parent
+28 ;
+29 ; Notes
+30 ; =====
+31 ;
+32 ; For a deleted image, the function returns the IEN of the group
+33 ; that the image belonged to before it was marked as deleted.
+34 ;
GRPIEN(IEN) ; Returns IEN of the Group parent for the Image.
+1 NEW ERR,NODE
+2 SET NODE=$$NODE^MAGGI11(IEN,.ERR)
+3 IF NODE=""
DO STORE^MAGUERR(ERR)
QUIT ERR
+4 ; GROUP PARENT (14)
QUIT +$PIECE($GET(@NODE@(0)),U,10)
+5 ;
+6 ;##### ALLOCATES A NEW RECORD IN THE IMAGE FILE (#2005) AND LOCKS IT
+7 ;
+8 ; Return Values
+9 ; =============
+10 ; >0 IEN for the new record in the IMAGE file (#2005)
+11 ;
+12 ; Notes
+13 ; =====
+14 ;
+15 ; The placeholder for the new record (^MAG(2005,IEN) node) is LOCKed
+16 ; by this function. It is responsibility of the caller to unlock the
+17 ; record after it is created or the record creation is canceled.
+18 ;
NEWIEN() ;
+1 NEW DIEN,IEN,NEWIEN,NODE
+2 SET NEWIEN=0
+3 ;---
+4 FOR
Begin DoDot:1
+5 SET IEN=$ORDER(^MAG(2005," "),-1)+1
+6 ;--- Check the IMAGE AUDIT file for a deleted image
+7 SET DIEN=$ORDER(^MAG(2005.1," "),-1)+1
+8 if DIEN>IEN
SET IEN=DIEN
+9 ;--- If the record already exists, skip it
+10 SET NODE=$NAME(^MAG(2005,IEN))
if $DATA(@NODE)
QUIT
+11 ;--- Lock the placeholder in order to make sure that nobody
+12 ;--- else is trying to allocate it at the same time.
+13 DO LOCK^DILF(NODE)
IF '$TEST
QUIT
+14 ;--- Double check that the record has not been created after the
+15 ;--- previous $D() check and the LOCK command (a race condition)
+16 IF $DATA(@NODE)
LOCK -@NODE
QUIT
+17 ;--- Success
+18 SET NEWIEN=IEN
+19 QUIT
End DoDot:1
if NEWIEN
QUIT
+20 ;---
+21 QUIT NEWIEN
+22 ;
+23 ;##### RETURNS THE PARENT DATA (SUB)FILE REFERENCE
+24 ;
+25 ; IEN Internal Entry Number of the image record
+26 ;
+27 ; Return Values
+28 ; =============
+29 ; <0 Error descriptor (see the $$ERROR^MAGUERR)
+30 ; 0 Image does not have a parent file reference
+31 ; >0 Parent data file reference (file/subfile number and
+32 ; IEN in the PARENT DATA FILE file (#2005.03) at the
+33 ; same time).
+34 ;
PARFILE(IEN) ;
+1 NEW ERR,NODE,PARENTFILE,PFN0
+2 SET NODE=$$NODE^MAGGI11(IEN,.ERR)
+3 IF NODE=""
DO STORE^MAGUERR(ERR)
QUIT ERR
+4 ;--- Check if the image record has a parent data file reference
+5 ; PARENT DATA FILE# (16)
SET PARENTFILE=$PIECE($GET(@NODE@(2)),U,6)
+6 if PARENTFILE=""
QUIT 0
+7 ;--- Check if the pointer to the PARENT DATA FILE
+8 ;--- file (#2005.03) is valid
+9 SET PFN0=$GET(^MAG(2005.03,PARENTFILE,0))
+10 if PFN0=""
QUIT $$ERROR^MAGUERR(-34,,IEN,PARENTFILE)
+11 ;--- Check if file descriptor has a value in FILE POINTER field (.04)
+12 if $PIECE(PFN0,U,4)=""
QUIT $$ERROR^MAGUERR(-35,,PARENTFILE)
+13 ;--- Return the reference
+14 QUIT PARENTFILE
+15 ;
+16 ;##### RETURNS STATUS OF THE IMAGE
+17 ;
+18 ; IEN Internal Entry Number of the image record
+19 ;
+20 ; Return Values
+21 ; =============
+22 ; <0 Error descriptor (see the $$ERROR^MAGUERR)
+23 ; "" Status is not defined
+24 ; >0 Image status
+25 ; ^01: Status code (internal value)
+26 ; ^02: Description (external value)
+27 ;
STATUS(IEN) ;
+1 NEW ERR,STATUS
+2 SET STATUS=$$IMGST^MAGGI11(IEN,.ERR)
+3 if ERR<0
DO STORE^MAGUERR(ERR)
+4 QUIT $SELECT(STATUS>0:STATUS,ERR<0:ERR,1:"")
+5 ;
+6 ;##### RETURNS THE VIEWABLE STATUS OF THE IMAGE
+7 ;
+8 ; IEN IEN of the image record in the file #2005
+9 ;
+10 ; [FLAGS] Flags that control execution (can be combined):
+11 ;
+12 ; Q Perform the integrity checks
+13 ;
+14 ; [.MESSAGES] Reference to a local array for messages returned
+15 ; by the image data checks. A node in this array is
+16 ; defined only if the result value contains the
+17 ; corresponding subscript value (e.g. the "Q" node is
+18 ; defined only if integrity checks fail and the result
+19 ; contains "Q").
+20 ;
+21 ; MESSAGES(
+22 ;
+23 ; "Q") Message returned by the integrity checks.
+24 ;
+25 ; "R") Message returned by the Radiology report checks
+26 ; (reserved but not implemented)
+27 ;
+28 ; "S") Message regarding the image status.
+29 ;
+30 ; "T") Message returned by the TIU note checks.
+31 ;
+32 ; Return Values
+33 ; =============
+34 ; "" Image can be viewed
+35 ; ... One or more characters that indicate why
+36 ; the image cannot be viewed "as usual":
+37 ;
+38 ; D Deleted image
+39 ; Q Questionable integrity
+40 ; R Problem with the Radiology report
+41 ; (reserved but not implemented)
+42 ; S Check the value of the STATUS field
+43 ; T Can't view the TIU note
+44 ;
VIEWSTAT(IEN,FLAGS,MESSAGES) ;
+1 NEW MAGCF,MAGVS
+2 KILL MESSAGES
SET MAGVS=""
SET MAGCF=$GET(FLAGS)
+3 Begin DoDot:1
+4 NEW BUF,ERR,GRPIEN,NODE,STATUS
+5 ;--- Validate IEN and get the image status
+6 SET STATUS=$$IMGST^MAGGI11(IEN,.ERR)
+7 SET NODE=$$NODE^MAGGI11(IEN)
+8 ;--- Force the integrity check in case of error(s)
+9 IF (ERR<0)!(NODE="")
SET MAGCF=MAGCF_"Q"
QUIT
+10 ; gek/ P94t7 if IEN is in a group, we also mark child as "T" if Grp is "T"
+11 SET GRPIEN=+$PIECE($GET(@NODE@(0)),U,10)
+12 IF GRPIEN
Begin DoDot:2
+13 NEW GBUF,GNODE
+14 SET GNODE=$$NODE^MAGGI11(GRPIEN)
+15 SET GBUF=$GET(@GNODE@(2))
+16 if +$PIECE(GBUF,U,6)=8925
Begin DoDot:3
+17 NEW IEN,TMP
+18 SET IEN=+$PIECE(GBUF,U,7)
if 'IEN
QUIT
+19 ;IA#2322
SET TMP=$$CANDO^TIULP(IEN,"VIEW")
+20 if 'TMP
SET MAGVS=MAGVS_"T"
SET MESSAGES("T")=$PIECE(TMP,U,2)
+21 QUIT
End DoDot:3
+22 QUIT
End DoDot:2
+23 IF MAGVS["T"
QUIT
+24 ; gek/ p94t7 __ Done changes
+25 ;--- Check the image status
+26 if STATUS'<10
Begin DoDot:2
+27 IF +STATUS=12
SET MAGVS=MAGVS_"D"
QUIT
+28 ;Patch 140 Status of 13 will continue and MESSAGES("S") will have reason
+29 SET MAGVS=MAGVS_"S"
+30 SET MESSAGES("S")=$$MSG^MAGUERR(-33,,$PIECE(STATUS,U,2))
+31 QUIT
End DoDot:2
+32 ;--- Check if the TIU note can be viewed
+33 SET BUF=$GET(@NODE@(2))
+34 if +$PIECE(BUF,U,6)=8925
Begin DoDot:2
+35 NEW IEN,TMP
SET IEN=+$PIECE(BUF,U,7)
if 'IEN
QUIT
+36 ;IA#2322
SET TMP=$$CANDO^TIULP(IEN,"VIEW")
+37 if 'TMP
SET MAGVS=MAGVS_"T"
SET MESSAGES("T")=$PIECE(TMP,U,2)
+38 QUIT
End DoDot:2
+39 ;--- Check the status of the group if necessary
+40 IF MAGVS'["D"
IF MAGVS'["S"
Begin DoDot:2
+41 ; GROUP PARENT
SET GRPIEN=$PIECE($GET(@NODE@(0)),U,10)
if GRPIEN'>0
QUIT
+42 SET STATUS=$$IMGST^MAGGI11(GRPIEN)
if STATUS<10
QUIT
+43 ;--- Force the integrity check if the existing
+44 ;--- image entry belongs to a deleted group.
+45 IF +STATUS=12
SET MAGCF=MAGCF_"Q"
QUIT
+46 ;--- Extend the "non-viewable" group status to the image
+47 SET MAGVS=MAGVS_"S"
+48 SET MESSAGES("S")=$$MSG^MAGUERR(-33,,$PIECE(STATUS,U,2))
+49 QUIT
End DoDot:2
+50 QUIT
End DoDot:1
+51 ;
+52 ;--- Radiology report
+53 ; Reserved but not implemented
+54 ;
+55 ;--- Questionable integrity
+56 if MAGCF["Q"
Begin DoDot:1
+57 NEW MAGQI
+58 DO CHK^MAGGSQI(.MAGQI,IEN)
+59 if '$GET(MAGQI(0))
SET MAGVS=MAGVS_"Q"
SET MESSAGES("Q")=$PIECE(MAGQI(0),U,2)
+60 QUIT
End DoDot:1
+61 ;
+62 ;---
+63 QUIT MAGVS
+64 ;+++++ ANNSTAT *******
+65 ; Determine if this image can be annotated.
+66 ; *** INPUT Parameters
+67 ;
+68 ; VSTCODE : The Image 'View Status' numeric code.
+69 ; if this isn't sent as a parameter, it is computed.
+70 ;
+71 ; MAGIEN : Image IEN (^MAG(2005))
+72 ;
+73 ; *** OUTPUT Parameters (optional)
+74 ; DESC : Text Reason for the result;
+75 ;
+76 ; Result Values
+77 ; --------------------------
+78 ; RESULT of this call is a numeric value
+79 ; 0 : success, image can be annotated.
+80 ;
+81 ; Values of STATUS field (113) that are okay.
+82 ; 1 : Viewable (RESULT will be changed to 0)
+83 ; 2 : QA Reviewed (RESULT will be changed to 0)
+84 ;
+85 ;
+86 ; Values of STATUS field (113)
+87 ; that will block Annotation.
+88 ; 10 : Image capture is in progress, (Future for groups.)
+89 ; 11 : Image Needs Review
+90 ; 12 : Image is Deleted.
+91 ; 13 : Image Never Existed. ;p130
+92 ;
+93 ; Values of Image "View Status" that will block Annotation
+94 ; ("View Status" is a computed value, not an IMAGE Field)
+95 ; 21 : Image has Questionable Integrity issues.
+96 ; 22 : User cannot "VIEW" the associated TIU Note.
+97 ; due to TIU Business Rules
+98 ; 23 : Image is not Viewable by Radiology Rule (Future )
+99 ;
+100 ; Values of other codes specific for blocked Annotation
+101 ; 30 : User Cannot "MAKE ADDENDUM" to the associated TIU Note.
+102 ; due to TIU Business Rules
+103 ; 31 : Image in Rescinded.
+104 ;
+105 ;
ANNSTAT(MAGIEN,VSTCODE,DESC) ;Annotation Status
+1 NEW ANCODE,FLG,STI,VSTCD,TIUIEN,AMND,MSG,X,X2,GRPIEN
+2 ;
+3 SET ANCODE=$GET(VSTCODE)
+4 SET DESC=""
+5 IF ANCODE=""
Begin DoDot:1
+6 ; compute View Status Code if not sent.
+7 ; QI Check already done in MAGAII ;S FLG="Q"
+8 SET FLG=""
+9 SET VSTCD=$$VIEWSTAT(MAGIEN,FLG,.MSG)
+10 ; example of Result from $$VIEWSTAT
+11 ; "" : success , viewable
+12 ; "QT" : a Text String if not viewable
+13 ;
+14 ; -MSG- : is an array of reasons for failure, each letter
+15 ; of Result is node of array i.e. MSG("Q")="..."
+16 ; MSG("T")="..."
+17 ; for this call ANNSTAT, we will just get first entry
+18 ;
+19 ;if the View Status Code (VSTCD) is not "", return it's text in MSG
+20 IF VSTCD]""
SET X=$ORDER(MSG(""))
SET DESC=$GET(MSG(X))
+21 ; STATUS (113)
SET STI=+$PIECE($GET(^MAG(2005,MAGIEN,100)),"^",8)
+22 ;--- Now get View Status Numeric value
+23 SET ANCODE=$$VSTCODE^MAGGAII(VSTCD,STI)
+24 QUIT
End DoDot:1
+25 ;
+26 ; if the View Status Code > 9 then user cannot view the image, so
+27 ; we won't let user annotate the image.
+28 ; and will get a generic description of the code, if DESC is still ""
+29 IF (ANCODE>9)
SET DESC=$SELECT(DESC="":$$VSTTEXT(ANCODE),1:DESC)
QUIT ANCODE
+30 ; if Image is attached to TIU Note, we check TIU Business Rules.
+31 SET GRPIEN=$PIECE($GET(^MAG(2005,MAGIEN,0)),U,10)
SET GRPIEN=$SELECT(+GRPIEN:GRPIEN,1:MAGIEN)
+32 SET X2=$GET(^MAG(2005,GRPIEN,2))
+33 IF $PIECE(X2,"^",6)=8925
Begin DoDot:1
+34 SET TIUIEN=$PIECE(X2,"^",7)
+35 ; If we don't have a pointer to 8925, that is DB corruption
+36 ; This would probably already be caught,
+37 ; but check in case. VIEWSTAT wasn't run prior to this call.
+38 IF 'TIUIEN
SET ANCODE=21
SET DESC="Invalid pointer to TIU Package ("_TIUIEN_")"
QUIT
+39 ;IA#2322
SET AMND=$$CANDO^TIULP(TIUIEN,"MAKE ADDENDUM")
+40 ; Example of result from TIULP
+41 ; 0^ You may not ADDEND this UNSIGNED PRIMARY CARE.
+42 ; 1
+43 IF 'AMND
SET ANCODE=30
SET DESC=$PIECE(AMND,"^",2)
+44 QUIT
End DoDot:1
+45 ; if ANCODE > 9 then TIU Business rule says no Annotation.
+46 IF (ANCODE>9)
SET DESC=$SELECT(DESC="":$$VSTTEXT(ANCODE),1:DESC)
QUIT ANCODE
+47 ;
+48 IF $PIECE($GET(^MAG(2005,MAGIEN,100)),"^",12)=1
Begin DoDot:1
+49 ; Image is Rescinded
+50 SET ANCODE=31
+51 QUIT
End DoDot:1
+52 ; if ANCODE > 9 then Image is rescinded and stop Annotation.
+53 IF (ANCODE>9)
SET DESC=$$VSTTEXT(ANCODE)
QUIT ANCODE
+54 ; If we get here, Image can be annotated.
+55 ; - not changing to 0. Status here is 1 or 2 for viewable.
+56 ;S DESC="Image can be annotated."
+57 ; Send exact numeric code. Delphi understands < 10 is viewable
+58 ; and can be annotated.
+59 SET DESC=$$VSTTEXT(ANCODE)
+60 QUIT ANCODE
+61 ;
+62 ; ##### VSTTEXT returns a Description of the Status Code.
+63 ;
+64 ; CODE is the numeric code for the Annotation Status.
+65 ; This is based on Status, Viewable Status, and
+66 ; two new return values for Annotation Status.
+67 ;
VSTTEXT(CODE) ;Description for Annotation Status
+1 NEW I,DONE,STR
+2 SET (I,DONE)=0
+3 FOR
Begin DoDot:1
+4 SET I=I+1
+5 SET STR=$TEXT(DATA+I)
+6 IF $PIECE(STR,";",3)=CODE
SET DESC=$PIECE(STR,";",4)
SET DONE=1
+7 IF $PIECE(STR,";",3)="END"
SET DESC=$PIECE(STR,";",4)_CODE
SET DONE=1
+8 QUIT
End DoDot:1
if DONE
QUIT
+9 QUIT DESC
+10 ; ##### DATA Table for Image Status, View Status, Annotation Status.
+11 ;
+12 ; the Code is in Piece 3, and the Description is in Piece 4.
+13 ;
+14 ; Image STATUS field (113)
+15 ; Codes 0..12 are the Status Codes from field 113
+16 ;
+17 ; Viewable Status and Annotation Status are computed values,
+18 ; based on, but not equal to STATUS (113)
+19 ; they depend on TIU Business Rules, QI Of image, User Keys.
+20 ; The Codes are computed in other functions. Description of the
+21 ; code is returned from this table.
+22 ;
+23 ; Codes 21..23 are the Viewable Status Codes. (computed value)
+24 ; Codes 30..31 are Annotation Status Codes.
DATA ;
+1 ;;0;Image is Viewable;
+2 ;;1;Image is Viewable.;
+3 ;;2;Image is QA Reviewed.;
+4 ;
+5 ;;10;Image capture is in progress.; (Future for groups.)
+6 ;;11;Image needs review.;
+7 ;;12;Image is deleted.;
+8 ;;13;Image Never Existed.; << p130 for images that didn't exist.
+9 ;
+10 ;;21;Image has Questionable Integrity issues.;
+11 ;;22;User cannot 'View' the associated TIU note. TIU Business Rule.;
+12 ;;23;Image is not Viewable by Radiology Rule.; (future)
+13 ;
+14 ;;30;User cannot 'Make Addendum' to the associated TIU Note. TIU Business Rule.;
+15 ;;31;Image is Rescinded.;
+16 ;;END;User cannot Annotate the Image. Unknown CODE: ;
+17 QUIT