MAGGI11 ;WOIFO/GEK/SG - IMAGE FILE API (LOW LEVEL) ; 1/16/09 10:04am
 ;;3.0;IMAGING;**93**;Dec 02, 2009;Build 163
 ;;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.                     |
 ;; +---------------------------------------------------------------+
 ;;
 ; Unless stated otherwise, error descriptors returned to the ERR
 ; parameter of entry points in this routine are NOT stored regardless
 ; of the mode set by the CLEAR^MAGUERR. If you need to store them
 ; (e.g. to return from an RPC), then you have to do this in your
 ; code using the STORE^MAGUERR.
 ;
 Q
 ;
 ;##### CHECKS IF THE CURRENT USER CAN DELETE THE IMAGE
 ;
 ; IMGIEN        Internal Entry Number of the image record
 ;
 ; [FLAGS]       Flags that control the execution (can be combined):
 ;
 ;                 S  Allow deletion regardless of security keys
 ;
 ; [.ERR]        Reference to a local variable where the error
 ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 ;
 ; Return Values
 ; =============
 ;            0  Image cannot be deleted or there was an error;
 ;               check the value of the ERR parameter.
 ;            1  User can delete the image
 ;
CANDEL(IMGIEN,FLAGS,ERR) ;
 S FLAGS=$G(FLAGS)
 I $TR(FLAGS,"S")'=""  S ERR=$$IPVE^MAGUERR("FLAGS")  Q 0
 ;--- Validate IEN and check if the image is already deleted
 I $$ISDEL(IMGIEN,.ERR)  S ERR=$$ERROR^MAGUERR(-37,,"Deleted")  Q 0
 Q:ERR<0 0
 ;--- Check the security key if necessary
 I FLAGS'["S",'$D(^XUSEC("MAG DELETE",DUZ))  D  Q 0
 . S ERR=$$ERROR^MAGUERR(-36)
 . Q
 ;--- User can delete the image
 Q 1
 ;
 ;##### CHECKS IF THE IMAGE CAN BE VIEWED
 ;
 ; IMGIEN        Internal Entry Number of the image record
 ;
 ; [.ERR]        Reference to a local variable where the error
 ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 ;
 ; Return Values
 ; =============
 ;            0  Image cannot be viewed or there was an error;
 ;               check the value of the ERR parameter.
 ;            1  Image is viewable
 ;
CANVIEW(IMGIEN,ERR) ;
 N STATUS
 S STATUS=$$IMGST(IMGIEN,.ERR)
 I STATUS'<10  S ERR=$$ERROR^MAGUERR("-33S",,$P(STATUS,U,2))  Q 0
 Q (ERR'<0)
 ;
 ;##### RETURNS NUMBER OF THE FILE THAT STORES THE IMAGE RECORD
 ;
 ; IMGIEN        Internal Entry Number of the image record
 ;
 ; [.ERR]        Reference to a local variable where the error
 ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 ;
 ; Return Values
 ; =============
 ;           ""  Invalid IEN or there is no such record
 ;           >0  Image file number (2005 or 2005.1)
 ;
FILE(IMGIEN,ERR) ;
 S ERR=""
 ;--- Validate the IMGIEN parameter
 I (IMGIEN'>0)!(+IMGIEN'=IMGIEN)  D  Q ""
 . S ERR=$$ERROR^MAGUERR("-3S",,"IMGIEN",IMGIEN)
 . Q
 ;--- Check if the image data exists
 Q:$D(^MAG(2005,IMGIEN)) 2005
 ;~~~ Delete this comment and the following line of code when
 ;~~~ the IMAGE AUDIT file (#2005.1) is completely eliminated.
 Q:$D(^MAG(2005.1,IMGIEN)) 2005.1
 ;--- There is no such record
 S ERR=$$ERROR^MAGUERR("-22S",,2005,IMGIEN_",")
 Q ""
 ;
 ;***** RETURNS THE IMAGE STATUS
 ;
 ; IMGIEN        Internal Entry Number of the image record
 ;
 ; [.ERR]        Reference to a local variable where the error
 ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 ;
 ; Return Values
 ; =============
 ;           ""  Status is not defined or there was an error;
 ;               check the value of the ERR parameter.
 ;           >0  Image status
 ;                 ^01: Status code (internal value)
 ;                 ^02: Description (external value)
 ;
IMGST(IMGIEN,ERR) ;
 N MAGMSG,NODE,STCODE
 S NODE=$$NODE(IMGIEN,.ERR)  Q:NODE="" ""
 ;--- Get the internal value of the STATUS field (113)
 S STCODE=+$P($G(@NODE@(100)),U,8)  Q:'STCODE ""
 ;--- Return the status
 Q STCODE_U_$$IMGSTDSC(STCODE)
 ;
 ;##### RETURNS THE DESCRIPTION FOR THE IMAGE STATUS CODE
 ;
 ; STCODE        Internal value of the STATUS field (113)
 ;
 ; [.ERR]        Reference to a local variable where the error
 ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 ;
 ; Return Values
 ; =============
 ;               Description of the image status (usually, the
 ;               external value of the STATUS field)
 ;
IMGSTDSC(STCODE,ERR) ;
 Q:'STCODE ""
 N MAGMSG,STDESCR
 ;--- Get the external value of the STATUS field
 S STDESCR=$$EXTERNAL^DILFD(2005,113,,STCODE,"MAGMSG")
 S:$G(DIERR) ERR=$$ERROR^MAGUERR("-38S",,STCODE)
 ;--- Return the description
 Q $S(STDESCR'="":STDESCR,1:"<Status: "_STCODE_">")
 ;
 ;##### CHECKS IF THE IMAGE IS MARKED AS DELETED
 ;
 ; IMGIEN        Internal Entry Number of the image record
 ;
 ; [.ERR]        Reference to a local variable where the error
 ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 ;
 ; Return Values
 ; =============
 ;            0  Image is not marked as deleted or there was an error;
 ;               check the value of the ERR parameter.
 ;            1  IMGIEN references a deleted image
 ;
ISDEL(IMGIEN,ERR) ;
 ;~~~ Delete this comment and the following lines of code when
 ;~~~ the IMAGE AUDIT file (#2005.1) is completely eliminated.
 S ERR=""
 I $D(^MAG(2005.1,IMGIEN))  Q:'$D(^MAG(2005,IMGIEN)) 1  D  Q 0
 . S ERR=$$ERROR^MAGUERR("-43S",,IMGIEN)
 . Q
 ;---
 Q (+$$IMGST(IMGIEN,.ERR)=12)
 ;
 ;##### CHECKS IF THE IEN IS INVALID OR THE IMAGE IS DELETED
 ;
 ; IMGIEN        Internal Entry Number of the image record
 ;
 ; [.ERR]        Reference to a local variable where the error
 ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 ;
 ; Return Values
 ; =============
 ;            0  IEN is valid and the image is not deleted
 ;            1  Invalid IEN or the image is marked as delete;
 ;               check the value of the ERR parameter for details.
 ;
ISDELINV(IMGIEN,ERR) ;
 Q $S($$ISDEL(IMGIEN,.ERR):1,1:ERR<0)
 ;
 ;##### CHECKS IF THE IMGIEN REFERENCES A GROUP PARENT
 ;
 ; IMGIEN        Internal Entry Number of the image record
 ;
 ; [.ERR]        Reference to a local variable where the error
 ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 ;
 ; Return Values
 ; =============
 ;            0  Image is not a group parent or there was an error;
 ;               check the value of the ERR parameter.
 ;            1  IMGIEN references a group parent
 ;
ISGRP(IMGIEN,ERR) ;
 N NODE,OBJTYPE
 S NODE=$$NODE(IMGIEN,.ERR)  Q:NODE="" 0
 S OBJTYPE=$P($G(@NODE@(0)),U,6)  ; OBJECT TYPE (3)
 Q (OBJTYPE=11)!(OBJTYPE=16)
 ;
 ;##### CHECKS IF THE PARAMETER VALUE IS A VALID IMAGE IEN
 ;
 ; IMGIEN        Internal Entry Number of the image record
 ;
 ; [.ERR]        Reference to a local variable where the error
 ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 ;
 ; Return Values
 ; =============
 ;            0  Parameter value is not a valid image IEN;
 ;               check the value of the ERR parameter.
 ;            1  Valid image IEN
 ;
ISVALID(IMGIEN,ERR) ;
 Q $$NODE(IMGIEN,.ERR)'=""
 ;
 ;##### RETURNS THE CLOSED REFERENCE TO THE IMAGE RECORD
 ;
 ; IMGIEN        Internal Entry Number of the image record
 ;
 ; [.ERR]        Reference to a local variable where the error
 ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 ;
 ; Return Values
 ; =============
 ;           ""  Invalid IEN or there is no such record
 ;  "^MAG(...)"  Closed reference to the image data node
 ;
NODE(IMGIEN,ERR) ;
 S ERR=""
 ;--- Validate the IMGIEN parameter
 I (IMGIEN'>0)!(+IMGIEN'=IMGIEN)  D  Q ""
 . S ERR=$$ERROR^MAGUERR("-3S",,"IMGIEN",IMGIEN)
 . Q
 ;--- Check if the image data exists
 Q:$D(^MAG(2005,IMGIEN)) $NA(^(IMGIEN))
 ;~~~ Delete this comment and the following line of code when
 ;~~~ the IMAGE AUDIT file (#2005.1) is completely eliminated.
 Q:$D(^MAG(2005.1,IMGIEN)) $NA(^(IMGIEN))
 ;--- There is no such record
 S ERR=$$ERROR^MAGUERR("-22S",,2005,IMGIEN_",")
 Q ""
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HMAGGI11   9007     printed  Sep 23, 2025@19:38:39                                                                                                                                                                                                     Page 2
MAGGI11   ;WOIFO/GEK/SG - IMAGE FILE API (LOW LEVEL) ; 1/16/09 10:04am
 +1       ;;3.0;IMAGING;**93**;Dec 02, 2009;Build 163
 +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      ;; |                                                               |
 +11      ;; | The Food and Drug Administration classifies this software as  |
 +12      ;; | a medical device.  As such, it may not be changed in any way. |
 +13      ;; | Modifications to this software may result in an adulterated   |
 +14      ;; | medical device under 21CFR820, the use of which is considered |
 +15      ;; | to be a violation of US Federal Statutes.                     |
 +16      ;; +---------------------------------------------------------------+
 +17      ;;
 +18      ; Unless stated otherwise, error descriptors returned to the ERR
 +19      ; parameter of entry points in this routine are NOT stored regardless
 +20      ; of the mode set by the CLEAR^MAGUERR. If you need to store them
 +21      ; (e.g. to return from an RPC), then you have to do this in your
 +22      ; code using the STORE^MAGUERR.
 +23      ;
 +24       QUIT 
 +25      ;
 +26      ;##### CHECKS IF THE CURRENT USER CAN DELETE THE IMAGE
 +27      ;
 +28      ; IMGIEN        Internal Entry Number of the image record
 +29      ;
 +30      ; [FLAGS]       Flags that control the execution (can be combined):
 +31      ;
 +32      ;                 S  Allow deletion regardless of security keys
 +33      ;
 +34      ; [.ERR]        Reference to a local variable where the error
 +35      ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 +36      ;
 +37      ; Return Values
 +38      ; =============
 +39      ;            0  Image cannot be deleted or there was an error;
 +40      ;               check the value of the ERR parameter.
 +41      ;            1  User can delete the image
 +42      ;
CANDEL(IMGIEN,FLAGS,ERR) ;
 +1        SET FLAGS=$GET(FLAGS)
 +2        IF $TRANSLATE(FLAGS,"S")'=""
               SET ERR=$$IPVE^MAGUERR("FLAGS")
               QUIT 0
 +3       ;--- Validate IEN and check if the image is already deleted
 +4        IF $$ISDEL(IMGIEN,.ERR)
               SET ERR=$$ERROR^MAGUERR(-37,,"Deleted")
               QUIT 0
 +5        if ERR<0
               QUIT 0
 +6       ;--- Check the security key if necessary
 +7        IF FLAGS'["S"
               IF '$DATA(^XUSEC("MAG DELETE",DUZ))
                   Begin DoDot:1
 +8                    SET ERR=$$ERROR^MAGUERR(-36)
 +9                    QUIT 
                   End DoDot:1
                   QUIT 0
 +10      ;--- User can delete the image
 +11       QUIT 1
 +12      ;
 +13      ;##### CHECKS IF THE IMAGE CAN BE VIEWED
 +14      ;
 +15      ; IMGIEN        Internal Entry Number of the image record
 +16      ;
 +17      ; [.ERR]        Reference to a local variable where the error
 +18      ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 +19      ;
 +20      ; Return Values
 +21      ; =============
 +22      ;            0  Image cannot be viewed or there was an error;
 +23      ;               check the value of the ERR parameter.
 +24      ;            1  Image is viewable
 +25      ;
CANVIEW(IMGIEN,ERR) ;
 +1        NEW STATUS
 +2        SET STATUS=$$IMGST(IMGIEN,.ERR)
 +3        IF STATUS'<10
               SET ERR=$$ERROR^MAGUERR("-33S",,$PIECE(STATUS,U,2))
               QUIT 0
 +4        QUIT (ERR'<0)
 +5       ;
 +6       ;##### RETURNS NUMBER OF THE FILE THAT STORES THE IMAGE RECORD
 +7       ;
 +8       ; IMGIEN        Internal Entry Number of the image record
 +9       ;
 +10      ; [.ERR]        Reference to a local variable where the error
 +11      ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 +12      ;
 +13      ; Return Values
 +14      ; =============
 +15      ;           ""  Invalid IEN or there is no such record
 +16      ;           >0  Image file number (2005 or 2005.1)
 +17      ;
FILE(IMGIEN,ERR) ;
 +1        SET ERR=""
 +2       ;--- Validate the IMGIEN parameter
 +3        IF (IMGIEN'>0)!(+IMGIEN'=IMGIEN)
               Begin DoDot:1
 +4                SET ERR=$$ERROR^MAGUERR("-3S",,"IMGIEN",IMGIEN)
 +5                QUIT 
               End DoDot:1
               QUIT ""
 +6       ;--- Check if the image data exists
 +7        if $DATA(^MAG(2005,IMGIEN))
               QUIT 2005
 +8       ;~~~ Delete this comment and the following line of code when
 +9       ;~~~ the IMAGE AUDIT file (#2005.1) is completely eliminated.
 +10       if $DATA(^MAG(2005.1,IMGIEN))
               QUIT 2005.1
 +11      ;--- There is no such record
 +12       SET ERR=$$ERROR^MAGUERR("-22S",,2005,IMGIEN_",")
 +13       QUIT ""
 +14      ;
 +15      ;***** RETURNS THE IMAGE STATUS
 +16      ;
 +17      ; IMGIEN        Internal Entry Number of the image record
 +18      ;
 +19      ; [.ERR]        Reference to a local variable where the error
 +20      ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 +21      ;
 +22      ; Return Values
 +23      ; =============
 +24      ;           ""  Status is not defined or there was an error;
 +25      ;               check the value of the ERR parameter.
 +26      ;           >0  Image status
 +27      ;                 ^01: Status code (internal value)
 +28      ;                 ^02: Description (external value)
 +29      ;
IMGST(IMGIEN,ERR) ;
 +1        NEW MAGMSG,NODE,STCODE
 +2        SET NODE=$$NODE(IMGIEN,.ERR)
           if NODE=""
               QUIT ""
 +3       ;--- Get the internal value of the STATUS field (113)
 +4        SET STCODE=+$PIECE($GET(@NODE@(100)),U,8)
           if 'STCODE
               QUIT ""
 +5       ;--- Return the status
 +6        QUIT STCODE_U_$$IMGSTDSC(STCODE)
 +7       ;
 +8       ;##### RETURNS THE DESCRIPTION FOR THE IMAGE STATUS CODE
 +9       ;
 +10      ; STCODE        Internal value of the STATUS field (113)
 +11      ;
 +12      ; [.ERR]        Reference to a local variable where the error
 +13      ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 +14      ;
 +15      ; Return Values
 +16      ; =============
 +17      ;               Description of the image status (usually, the
 +18      ;               external value of the STATUS field)
 +19      ;
IMGSTDSC(STCODE,ERR) ;
 +1        if 'STCODE
               QUIT ""
 +2        NEW MAGMSG,STDESCR
 +3       ;--- Get the external value of the STATUS field
 +4        SET STDESCR=$$EXTERNAL^DILFD(2005,113,,STCODE,"MAGMSG")
 +5        if $GET(DIERR)
               SET ERR=$$ERROR^MAGUERR("-38S",,STCODE)
 +6       ;--- Return the description
 +7        QUIT $SELECT(STDESCR'="":STDESCR,1:"<Status: "_STCODE_">")
 +8       ;
 +9       ;##### CHECKS IF THE IMAGE IS MARKED AS DELETED
 +10      ;
 +11      ; IMGIEN        Internal Entry Number of the image record
 +12      ;
 +13      ; [.ERR]        Reference to a local variable where the error
 +14      ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 +15      ;
 +16      ; Return Values
 +17      ; =============
 +18      ;            0  Image is not marked as deleted or there was an error;
 +19      ;               check the value of the ERR parameter.
 +20      ;            1  IMGIEN references a deleted image
 +21      ;
ISDEL(IMGIEN,ERR) ;
 +1       ;~~~ Delete this comment and the following lines of code when
 +2       ;~~~ the IMAGE AUDIT file (#2005.1) is completely eliminated.
 +3        SET ERR=""
 +4        IF $DATA(^MAG(2005.1,IMGIEN))
               if '$DATA(^MAG(2005,IMGIEN))
                   QUIT 1
               Begin DoDot:1
 +5                SET ERR=$$ERROR^MAGUERR("-43S",,IMGIEN)
 +6                QUIT 
               End DoDot:1
               QUIT 0
 +7       ;---
 +8        QUIT (+$$IMGST(IMGIEN,.ERR)=12)
 +9       ;
 +10      ;##### CHECKS IF THE IEN IS INVALID OR THE IMAGE IS DELETED
 +11      ;
 +12      ; IMGIEN        Internal Entry Number of the image record
 +13      ;
 +14      ; [.ERR]        Reference to a local variable where the error
 +15      ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 +16      ;
 +17      ; Return Values
 +18      ; =============
 +19      ;            0  IEN is valid and the image is not deleted
 +20      ;            1  Invalid IEN or the image is marked as delete;
 +21      ;               check the value of the ERR parameter for details.
 +22      ;
ISDELINV(IMGIEN,ERR) ;
 +1        QUIT $SELECT($$ISDEL(IMGIEN,.ERR):1,1:ERR<0)
 +2       ;
 +3       ;##### CHECKS IF THE IMGIEN REFERENCES A GROUP PARENT
 +4       ;
 +5       ; IMGIEN        Internal Entry Number of the image record
 +6       ;
 +7       ; [.ERR]        Reference to a local variable where the error
 +8       ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 +9       ;
 +10      ; Return Values
 +11      ; =============
 +12      ;            0  Image is not a group parent or there was an error;
 +13      ;               check the value of the ERR parameter.
 +14      ;            1  IMGIEN references a group parent
 +15      ;
ISGRP(IMGIEN,ERR) ;
 +1        NEW NODE,OBJTYPE
 +2        SET NODE=$$NODE(IMGIEN,.ERR)
           if NODE=""
               QUIT 0
 +3       ; OBJECT TYPE (3)
           SET OBJTYPE=$PIECE($GET(@NODE@(0)),U,6)
 +4        QUIT (OBJTYPE=11)!(OBJTYPE=16)
 +5       ;
 +6       ;##### CHECKS IF THE PARAMETER VALUE IS A VALID IMAGE IEN
 +7       ;
 +8       ; IMGIEN        Internal Entry Number of the image record
 +9       ;
 +10      ; [.ERR]        Reference to a local variable where the error
 +11      ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 +12      ;
 +13      ; Return Values
 +14      ; =============
 +15      ;            0  Parameter value is not a valid image IEN;
 +16      ;               check the value of the ERR parameter.
 +17      ;            1  Valid image IEN
 +18      ;
ISVALID(IMGIEN,ERR) ;
 +1        QUIT $$NODE(IMGIEN,.ERR)'=""
 +2       ;
 +3       ;##### RETURNS THE CLOSED REFERENCE TO THE IMAGE RECORD
 +4       ;
 +5       ; IMGIEN        Internal Entry Number of the image record
 +6       ;
 +7       ; [.ERR]        Reference to a local variable where the error
 +8       ;               descriptor (see the $$ERROR^MAGUERR) is returned to.
 +9       ;
 +10      ; Return Values
 +11      ; =============
 +12      ;           ""  Invalid IEN or there is no such record
 +13      ;  "^MAG(...)"  Closed reference to the image data node
 +14      ;
NODE(IMGIEN,ERR) ;
 +1        SET ERR=""
 +2       ;--- Validate the IMGIEN parameter
 +3        IF (IMGIEN'>0)!(+IMGIEN'=IMGIEN)
               Begin DoDot:1
 +4                SET ERR=$$ERROR^MAGUERR("-3S",,"IMGIEN",IMGIEN)
 +5                QUIT 
               End DoDot:1
               QUIT ""
 +6       ;--- Check if the image data exists
 +7        if $DATA(^MAG(2005,IMGIEN))
               QUIT $NAME(^(IMGIEN))
 +8       ;~~~ Delete this comment and the following line of code when
 +9       ;~~~ the IMAGE AUDIT file (#2005.1) is completely eliminated.
 +10       if $DATA(^MAG(2005.1,IMGIEN))
               QUIT $NAME(^(IMGIEN))
 +11      ;--- There is no such record
 +12       SET ERR=$$ERROR^MAGUERR("-22S",,2005,IMGIEN_",")
 +13       QUIT ""