Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: MAGVCQRY

MAGVCQRY.m

Go to the documentation of this file.
  1. MAGVCQRY ;;WOIFO/MAT - DICOM Storage Commit RPCs ; 19 Jul 2013 5:59 PM
  1. ;;3.0;IMAGING;**138**;Mar 19, 2002;Build 5380;Sep 03, 2013
  1. ;; Per VHA Directive 2004-038, this routine should not be modified.
  1. ;; +---------------------------------------------------------------+
  1. ;; | Property of the US Government. |
  1. ;; | No permission to copy or redistribute this software is given. |
  1. ;; | Use of unreleased versions of this software requires the user |
  1. ;; | to execute a written test agreement with the VistA Imaging |
  1. ;; | Development Office of the Department of Veterans Affairs, |
  1. ;; | telephone (301) 734-0100. |
  1. ;; | The Food and Drug Administration classifies this software as |
  1. ;; | a medical device. As such, it may not be changed in any way. |
  1. ;; | Modifications to this software may result in an adulterated |
  1. ;; | medical device under 21CFR820, the use of which is considered |
  1. ;; | to be a violation of US Federal Statutes. |
  1. ;; +---------------------------------------------------------------+
  1. ;;
  1. Q
  1. ;
  1. ; /* Query each serially, < MAG*3.0*34 structure first. Order may
  1. ; change if we determine that modalities are able & configured
  1. ; to use Storage Commit are stacked heavily in favor of the SOP
  1. ; Classes supported by *34.
  1. ; */
  1. ;
  1. ;+++ Process ad hoc queries from MAGVC WI GET for existing work items.
  1. ;
  1. MAIN(RETURN,WIIEN) ;
  1. ;
  1. N FILE S FILE=2006.941
  1. ;
  1. ;--- Validate incoming items.
  1. Q:$G(WIIEN)="" -1_"`"_"WORK ITEM IEN Not Provided."
  1. ;
  1. Q:('$D(^MAGV(FILE,WIIEN))) -2_"`"_"WORK ITEM IEN Not Found."
  1. ;
  1. ;--- Process STATUS=RECEIVED; FAILED only? Do not process "IN PROGRESS","SUCCESS".
  1. N SCSTATUS S SCSTATUS=1
  1. ;
  1. ;--- Lock Work Item.
  1. L +^MAGV(FILE,WIIEN):5 I $T D
  1. . ;
  1. . ;--- Set WI Status to "IN PROGRESS"
  1. . N STATSET S STATSET=$$ZUPD8STS(WIIEN,"IN PROGRESS")
  1. . I +STATSET<0 D
  1. . . ;
  1. . . ;--- Watch locking...
  1. . . Q
  1. . ;--- Loop through items & check archive status.
  1. . N CTITEM S CTITEM=$P(^MAGV(FILE,WIIEN,2,0),U,4)
  1. . N CT
  1. . F CT=1:1:CTITEM D
  1. . . ;
  1. . . N UIDSOP S UIDSOP=$P(^MAGV(FILE,WIIEN,2,CT,0),"~",2)
  1. . . ;--- Query < MAG*3.0*34 structure.
  1. . . N STATUS S STATUS=$$QRYLEGAC^MAGVCQRY(UIDSOP)
  1. . . ;--- Query >= MAG*3.0*34 structure.
  1. . . I 'STATUS S STATUS=$$QRYCURNT^MAGVCQRY(UIDSOP)
  1. . . ;
  1. . . I STATUS D
  1. . . . S $P(^MAGV(FILE,WIIEN,2,CT,0),"~",3,4)="C"
  1. . . . Q
  1. . . E D
  1. . . . S $P(^MAGV(FILE,WIIEN,2,CT,0),"~",3,4)="U~U"
  1. . . . S SCSTATUS=0
  1. . . . Q
  1. . ;--- Set aggregate STATUS and unlock WI.
  1. . N WISTATUS S WISTATUS=$S(SCSTATUS=0:"FAILURE",1:"SUCCESS")
  1. . S RETURN(0)=$$ZUPD8STS(WIIEN,WISTATUS)
  1. . L -^MAGV(FILE,WIIEN)
  1. . Q
  1. ;--- Else error nolock.
  1. E D
  1. . S RETURN(0)="-1`Unable to Lock Work Item "_WIIEN
  1. . Q
  1. ;--- Return Status [??? No; the re-sent WI handles that] and Reason
  1. Q RETURN(0)
  1. ;
  1. ;+++++ Query a single MAG*3.0*34 introduced IMAGE SOP INSTANCE.
  1. ;
  1. QRYCURNT(UIDSOP) ;
  1. ;
  1. N YNCURNT S YNCURNT=0
  1. N SOPUID S SOPUID=UIDSOP
  1. ;
  1. ;--- Check STATUS (#15) is 'A'ccessible in IMAGE SOP INSTANCE file (#2005.54).
  1. ; Returns '0' if 'I'naccessible, IEN in IMAGE SOP INSTANCE file if 'A'ccessible.
  1. N IENIMGSOP S IENIMGSOP=$$QRYSOPIN(SOPUID)
  1. D
  1. . Q:'IENIMGSOP
  1. . ;
  1. . ;--- Return ARTIFACT TOKEN of IMAGE INSTANCE file (#2005.65) for input IEN
  1. . ; of IMAGE SOP INSTANCE file (#2005.54)
  1. . N TKNARTIF S TKNARTIF=$$QRYIMGIN(IENIMGSOP)
  1. . Q:TKNARTIF="" D
  1. . . ;
  1. . . ;--- Return IEN of ARTIFACT INSTANCE file (#2006.918) given ARTIFACT TOKEN
  1. . . N IENARTIF S IENARTIF=$$QRYARTIF(TKNARTIF)
  1. . . Q:'IENARTIF D
  1. . . . ;
  1. . . . ;--- Return ARCHIVE status of STORAGE PROVIDER file (#2006.917) given IENARTIN.
  1. . . . N ARCHSTAT S ARCHSTAT=$$QRYARTIN(IENARTIF)
  1. . . . Q:'ARCHSTAT S YNCURNT=ARCHSTAT
  1. Q YNCURNT
  1. ;
  1. ;+++ Level 1: Query IMAGE SOP INSTANCE file (#2005.64) for accessibility.
  1. ;
  1. ; Note: "ORIGINAL [old] SOP INSTANCE UID" is field #1 at 0;2
  1. ;
  1. ; Note: "ARTIFACT ON FILE" (#12) description says "at least one Object";
  1. ; Is there only one object per IMGSOPIN.
  1. ;
  1. QRYSOPIN(IMGSOPIN) ;
  1. ;
  1. N RETURN S RETURN=0
  1. N IENIMGSOP S IENIMGSOP=$O(^MAGV(2005.64,"B",IMGSOPIN,""))
  1. D
  1. . Q:IENIMGSOP=""
  1. . ;
  1. . ;--- Check STATUS (#40) as "A"ccessible or "I"naccessible.
  1. . Q:$P($G(^MAGV(2005.64,IENIMGSOP,11)),U,1)'="A"
  1. . S RETURN=IENIMGSOP
  1. . Q
  1. Q RETURN
  1. ;
  1. ;+++ Level 2: Lookup ARTIFACT TOKEN (#.01) via IMAGE INSTANCE file (#2005.65)
  1. ;
  1. QRYIMGIN(IENIMGSOP) ;
  1. ;
  1. N IENARTIF,TKNARTIF S (IENARTIF,TKNARTIF)=0
  1. D
  1. . ;--- SOP INSTANCE REFERENCE (#11) points to IMAGE SOP INSTANCE (#2005.64)
  1. . N IENIMGIN S IENIMGIN=""
  1. . F S IENIMGIN=$O(^MAGV(2005.65,"C",IENIMGSOP,IENIMGIN)) Q:IENIMGIN="" D
  1. . . ;
  1. . . ;--- Select the object w/ ORIGINAL SOP INSTANCE=1 (not 'derived').
  1. . . S:+$P(^MAGV(2005.65,IENIMGIN,1),U,2) TKNARTIF=$P(^MAGV(2005.65,IENIMGIN,0),U)
  1. . . Q
  1. . Q
  1. Q TKNARTIF
  1. ;
  1. ;+++ Level 3: Query ARTIFACT file (#2006.916)
  1. ;
  1. ; POINTED TO BY: ARTIFACT REFERENCE field (#.02) of the IMAGE INSTANCE FILE File (#2005.65)
  1. ; ARTIFACT field (#.01) of the ARTIFACT INSTANCE File (#2006.918)
  1. ;
  1. ; /* Based on the above, can bypass the ARTIFACT file. Else use ARTIFACT TOKEN?
  1. ; */
  1. ; ARTIFACT field (#.01) of the ARTIFACT RETENTION POLICY File (#2006.921)
  1. ; ARTIFACT field (#5 ) of the STORAGE TRANSACTION File (#2006.926)
  1. ;
  1. QRYARTIF(TKNARTIF) ;
  1. ;
  1. N IENARTIF S IENARTIF=$O(^MAGV(2006.916,"B",TKNARTIF,""))
  1. Q IENARTIF
  1. ;
  1. ;+++ Level 4: Query ARTIFACT INSTANCE file (#2006.918) for STORAGE PROVIDER
  1. ;
  1. QRYARTIN(IENARTIF) ;
  1. ;
  1. N FILE S FILE=2006.918
  1. N ARCHSTAT S ARCHSTAT=0
  1. N IENPROVD
  1. D
  1. . N IENARTIN S IENARTIN=""
  1. . F S IENARTIN=$O(^MAGV(FILE,"B",IENARTIF,IENARTIN)) Q:IENARTIN="" Q:ARCHSTAT D
  1. . . ;
  1. . . S IENPROVD=$P(^MAGV(FILE,IENARTIN,0),U,2)
  1. . . I IENPROVD'="" S ARCHSTAT=$$YNSTOPRV(IENPROVD)
  1. . . Q
  1. . Q
  1. Q ARCHSTAT
  1. ;
  1. ;+++ Level 5: Query STORAGE PROVIDER file (#2006.917)
  1. ;
  1. ; Note: Depending on number of these, may best array them first.
  1. ;
  1. ; INPUT: PROVDIEN -- IEN of entry in the STORAGE PROVIDER file (#2006.917)
  1. ; OUTPUT: YN -- 1 if ARCHIVE field (#4) is 1 (YES)
  1. ; 0 else.
  1. YNSTOPRV(IENPROVD) ;
  1. ;
  1. N YN S YN=0
  1. N ARCH S ARCH=$P($G(^MAGV(2006.917,IENPROVD,0)),U,4)
  1. S:ARCH YN=ARCH
  1. Q YN
  1. ;
  1. ZUPD8STS(WIIEN,STATUS) ;
  1. N RETURN S RETURN=0
  1. N FDA S FDA(2006.941,WIIEN_",",3)=STATUS
  1. N MAGERR
  1. D FILE^DIE("E","FDA","MAGERR")
  1. ;--- Trap UPDATER Error
  1. I $D(MAGERR) S RETURN=-6_"`"_MAGERR("DIERR",1,"TEXT",1)
  1. Q RETURN
  1. ;
  1. ;+++ Process an object in legacy structure (<MAG*3.0*34).
  1. ;
  1. QRYLEGAC(UIDSOP) ;
  1. ;
  1. N RETURN S RETURN=0
  1. D
  1. . Q:($D(^MAG(2005,"P",UIDSOP))="")
  1. . ;
  1. . N MAGIEN S MAGIEN=$$WMAGIEN(UIDSOP)
  1. . Q:MAGIEN=""
  1. . ;
  1. . ;--- Check the STATUS (#113) field ... ,D0,100) [8S]
  1. . N VIEWSTAT S VIEWSTAT=$$WMAGSTAT(MAGIEN)
  1. . Q:'VIEWSTAT
  1. . ;
  1. . N NEXTVAR S NEXTVAR=$$WRMVOL(MAGIEN)
  1. . Q:NEXTVAR=""
  1. . ;
  1. . N ISWORM S ISWORM=$$YNWORM(NEXTVAR)
  1. . Q:ISWORM=""
  1. . ;
  1. . S:ISWORM RETURN=1
  1. . Q
  1. Q RETURN
  1. ;
  1. ; # 60 -- PACS UID ,D0,"PACS") [60F] ... "P" Cross-reference
  1. ;
  1. ; for a group entry: is (0020,000D), Study Instance UID
  1. ; for an image entry: is (0008,0018), SOP Instance UID
  1. ;
  1. ; #252 -- NEW SOP INSTANCE UID ,D0,"SOP") [2F] ... "P" Cross-reference
  1. ;
  1. ; the VA's new SOP instance UID for the corrected image.
  1. ;
  1. ;--- Check the STATUS (#113) field ... ,D0,100) [8S]
  1. ;
  1. ; By default, all images are viewable. Images w/ no status are viewable.
  1. ; Status 12 --> Deleted
  1. ;
  1. WMAGSTAT(MAGIEN) ;
  1. N YNMAGST S YNMAGST=$P(^MAG(2005,MAGIEN,100),U,8)
  1. S YNMAGST=$S(0:YNMAGST=12,1:1)
  1. Q YNMAGST
  1. ;
  1. ;--- Return IMAGE file (#2005) IEN. Caller QUITs if null.
  1. ;
  1. WMAGIEN(UIDSOP) ;
  1. N MAGIEN S MAGIEN=$O(^MAG(2005,"P",UIDSOP,""))
  1. Q MAGIEN
  1. ;
  1. WRMVOL(MAGIEN) ;
  1. N PTNETLOC S PTNETLOC=$P(^MAG(2005,MAGIEN,0),U,5)
  1. Q PTNETLOC
  1. ;
  1. ;+++ Is NETWORK LOCATION file (#2005.2) STORAGE TYPE field (#6) "WORM"?
  1. ;
  1. YNWORM(IENETLOC) ;
  1. ;
  1. N ISWORM S ISWORM=0
  1. N TMP S TMP=$P(^MAG(2005.2,IENETLOC,0),U,7)
  1. S:($E(TMP,1,4)="WORM") ISWORM=1
  1. Q ISWORM
  1. ;
  1. ; MAGVCQRY