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

MAGDQR08.m

Go to the documentation of this file.
  1. MAGDQR08 ;WOIFO/EdM,MLH,BT - Cross-References for Query/Retrieve ; 27 Nov 2012 12:58 PM
  1. ;;3.0;IMAGING;**54,118,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. UIDS(REQ,T,UID,PRMUID,ANY,OK,UIDS) ; Overflow from MAGDQR02
  1. N FATAL,I,P,V,IDX,PAT,PAT0
  1. S FATAL=0
  1. S PRMUID=$G(PRMUID)
  1. F I=20:1:23 K ^TMP("MAG",$J,"QR",I)
  1. S T=$$STUIDTAG^MAGDQR00,(ANY,PAT)=0
  1. ;
  1. S P=""
  1. F S P=$O(REQ(T,P)) Q:P="" D:REQ(T,P)'=""
  1. . S ANY=1 K ^TMP("MAG",$J,"QR",7)
  1. . ; old DB structure
  1. . S I=$$MATCHD^MAGDQR03(REQ(T,P),"^MAG(2005,""P"",LOOP)","^TMP(""MAG"",$J,""QR"",7,LOOP)")
  1. . S V=""
  1. . F S V=$O(^TMP("MAG",$J,"QR",7,V)) Q:V="" D
  1. . . S PAT=""
  1. . . S I=""
  1. . . F S I=$O(^MAG(2005,"P",V,I)) Q:I="" D
  1. . . . N C,X
  1. . . . ; If this image has a parent,
  1. . . . ; its UID is an image UID and not a study UID
  1. . . . S X=$G(^MAG(2005,I,0)),PAT0=$P(X,"^",7)
  1. . . . S IDX=$G(^MAG(2005,I,2))\2_" "_PAT0
  1. . . . D:PAT0
  1. . . . . I PAT="" S PAT=PAT0 Q
  1. . . . . Q:PRMUID=1
  1. . . . . S:PAT'=PAT0 PAT=-1 ; Duplicate UID if different patient...
  1. . . . . Q
  1. . . . Q:$P(X,"^",10)
  1. . . . S UID=1,^TMP("MAG",$J,"QR",20,I)=""
  1. . . . S C=0 F S C=$O(^MAG(2005,I,1,C)) Q:'C D
  1. . . . . S X=+$P($G(^MAG(2005,I,1,C,0)),"^",1)
  1. . . . . S:X ^TMP("MAG",$J,"QR",21,X)=""
  1. . . . . Q
  1. . . . Q
  1. . . Q
  1. . ; new DB structure
  1. . S I=$$MATCHD^MAGDQR03(REQ(T,P),"^MAGV(2005.62,""B"",LOOP)","^TMP(""MAG"",$J,""QR"",27,LOOP)")
  1. . S V=""
  1. . F S V=$O(^TMP("MAG",$J,"QR",27,V)) Q:V="" D Q:PAT<0
  1. . . S PAT=""
  1. . . S I="" F S I=$O(^MAGV(2005.62,"B",V,I)) Q:I="" D Q:PAT<0
  1. . . . Q:$P($G(^MAGV(2005.62,I,5)),"^",2)="I" ; study marked inaccessible
  1. . . . N PROCIX,PATIX
  1. . . . S PROCIX=$P($G(^MAGV(2005.62,I,6)),"^",1) Q:'PROCIX
  1. . . . S PATIX=$P($G(^MAGV(2005.61,PROCIX,6)),"^",1) Q:'PATIX
  1. . . . S PAT0=$P($G(^MAGV(2005.6,PATIX,0)),"^",1) Q:PAT0=""
  1. . . . S:PAT="" PAT=PAT0
  1. . . . I PRMUID'=1,PAT'=PAT0 S PAT=-1 Q ; duplicate UID if different patient...
  1. . . . S UID=1,^TMP("MAG",$J,"QR",20,"N"_I)=""
  1. . . . Q
  1. . . Q
  1. . Q
  1. ;
  1. D:PAT<0
  1. . I (PRMUID=2)!(PRMUID=3) S PRMUID(T)="" Q
  1. . D ERR^MAGDQRUE("Duplicate Study UID (tag 0020,000D)")
  1. . S FATAL=1
  1. . Q
  1. I FATAL D ERRSAV^MAGDQRUE Q
  1. ;
  1. S OK=1,X="Study Series Image",UIDS=""
  1. F T=23,22 S I="" F S I=$O(^TMP("MAG",$J,"QR",T,I)) Q:I="" D Q:'OK
  1. . F P=22,21 D
  1. . . Q:P'<T Q:'$D(^TMP("MAG",$J,"QR",P)) Q:$D(^TMP("MAG",$J,"QR",P,I))
  1. . . S OK=0 S:UIDS'="" UIDS=UIDS=UIDS_", "
  1. . . S UIDS=UIDS_$P(X," ",P)_"/"_$P(X," ",T)
  1. . . Q
  1. . Q
  1. ;
  1. S T=0 S:OK T=1
  1. F I=23,22,20 D:T
  1. . Q:'$D(^TMP("MAG",$J,"QR",I))
  1. . M ^TMP("MAG",$J,"QR",8)=^TMP("MAG",$J,"QR",I)
  1. . S T=0
  1. . Q
  1. ;
  1. F I=20:1:23,27 K ^TMP("MAG",$J,"QR",I)
  1. Q
  1. ;
  1. PRUNE(RESULT) ; Remove duplicate UIDs based on PRMUID
  1. ; PRMUID must be defined before calling this procedure
  1. ; PRMUID : Duplicate UID Handling parameter
  1. ; 0 : Error if there is duplicate UID (Error Handled outside this procedure)
  1. ; 1 : All (Duplicate is not an error so this proc won't be called)
  1. ; 2 : Keep UID with the oldest image saved date, delete the rest (handled in this procedure)
  1. ; 3 : Keep UID with the latest image saved date, delete the rest (handled in this procedure)
  1. ;
  1. I PRMUID'=2,PRMUID'=3 Q
  1. ;
  1. ; Based on Study UID and PRMUID, generate KEEP array containing Header Records to keep
  1. N KEEP
  1. D KEEPHDR(.KEEP)
  1. ;
  1. ; Based on what records to keep, generate HDR containing all headers with remove/keep indicator
  1. N HDR
  1. D SAVHDR(.KEEP,.HDR)
  1. ;
  1. ; Based on HDR indicators, remove or keep Study UID, return number of records removed
  1. N KILLCNT
  1. S KILLCNT=$$REMDUP(.HDR)
  1. ;
  1. ; Update the Sub File 2006.57321 Header's highest IEN and # of entries
  1. D UPDSUBHD(RESULT,KILLCNT)
  1. Q
  1. ;
  1. REMDUP(HDR) ; Based on HDR array, remove or keep Study UID records, return number of records removed
  1. N NEWCNT,KILLCNT
  1. S NEWCNT=0 ;Result # counter
  1. S KILLCNT=0 ;Number of killed records
  1. N HDRRECNO
  1. S HDRRECNO=0
  1. ;
  1. F S HDRRECNO=$O(HDR(HDRRECNO)) Q:'HDRRECNO D
  1. . ; if this header to delete, delete the rest of the group records
  1. . I HDR(HDRRECNO)=0 S KILLCNT=KILLCNT+$$DELSUB(RESULT,HDRRECNO) Q
  1. . ; if this header to keep, update the "Result # " with the new counter
  1. . D UPDHDREC(RESULT,HDRRECNO,.NEWCNT)
  1. ;
  1. Q KILLCNT
  1. ;
  1. SAVHDR(KEEP,HDR) ; Based on what to keep, generate HDR array contains records to keep and to remove
  1. N STUIDTAG,HDRTAG
  1. S STUIDTAG=$$STUIDTAG^MAGDQR00
  1. S HDRTAG=$$HDRTAG^MAGDQR00
  1. ;
  1. N STUIDREC,STUDYUID,HDRRECNO
  1. S STUIDREC=0
  1. F S STUIDREC=$O(^MAGDQR(2006.5732,RESULT,1,"B",STUIDTAG,STUIDREC)) Q:'STUIDREC D
  1. . S STUDYUID=$P(^MAGDQR(2006.5732,RESULT,1,STUIDREC,0),U,2)
  1. . S HDRRECNO=$O(^MAGDQR(2006.5732,RESULT,1,"B",HDRTAG,STUIDREC),-1)
  1. . S HDR(HDRRECNO)=$D(KEEP(STUDYUID,HDRRECNO))
  1. Q
  1. ;
  1. KEEPHDR(KEEP) ; Based on PRMUID, get "the oldest/latest date" records to keep
  1. N ORD
  1. S ORD=$S(PRMUID=2:1,1:-1)
  1. ;
  1. N STUDYUID,IMGSAVDT,HDRRECNO
  1. S STUDYUID=""
  1. F S STUDYUID=$O(^TMP("MAG",$J,"QR",99,STUDYUID)) Q:STUDYUID="" D
  1. . S IMGSAVDT=$O(^TMP("MAG",$J,"QR",99,STUDYUID,""),ORD) Q:IMGSAVDT=""
  1. . S HDRRECNO=$O(^TMP("MAG",$J,"QR",99,STUDYUID,IMGSAVDT,""))
  1. . S KEEP(STUDYUID,HDRRECNO)=""
  1. . Q
  1. Q
  1. ;
  1. DELSUB(RESULT,HDRRECNO) ; Delete Sub File (2006.57321) record group including indices
  1. ; The Header Information such as Highest IEN and Counter will be updated at the end (UPDSUBHD)
  1. N HDRTAG
  1. S HDRTAG=$$HDRTAG^MAGDQR00
  1. N DELCNT,RECNO,TAG,QUIT
  1. S (QUIT,DELCNT)=0
  1. S RECNO=HDRRECNO-1
  1. ;
  1. F S RECNO=$O(^MAGDQR(2006.5732,RESULT,1,RECNO)) Q:'RECNO D Q:QUIT
  1. . S TAG=$P(^MAGDQR(2006.5732,RESULT,1,RECNO,0),U)
  1. . I TAG=HDRTAG,RECNO'=HDRRECNO S QUIT=1 Q
  1. . K ^MAGDQR(2006.5732,RESULT,1,RECNO)
  1. . K ^MAGDQR(2006.5732,RESULT,1,"B",TAG,RECNO)
  1. . S DELCNT=DELCNT+1
  1. ;
  1. Q DELCNT
  1. ;
  1. UPDHDREC(RESULT,R1,NEWCNT) ; Update Header Result # record with a new counter
  1. N TAGVAL
  1. S NEWCNT=NEWCNT+1
  1. S TAGVAL="Result # "_NEWCNT
  1. S ^MAGDQR(2006.5732,RESULT,1,R1,0)=$$HDRTAG^MAGDQR00_U_TAGVAL
  1. Q
  1. ;
  1. UPDSUBHD(RESULT,KILLCNT) ; Update the Sub File 2006.57321 Header
  1. N HDR,LSTIEN,LSTRECNO,CNT
  1. S HDR=$G(^MAGDQR(2006.5732,RESULT,1,0))
  1. S LSTIEN=$P(HDR,U,3)
  1. S LSTRECNO=$O(^MAGDQR(2006.5732,RESULT,1," "),-1)
  1. S:LSTRECNO<LSTIEN LSTIEN=$O(^MAGDQR(2006.5732,RESULT,1,LSTIEN),-1)
  1. S CNT=$P(HDR,U,4)-KILLCNT
  1. S ^MAGDQR(2006.5732,RESULT,1,0)="TAG"_U_"2006.57321"_U_LSTIEN_U_CNT
  1. Q
  1. ;
  1. ACCNUM(IMAGE) ; Calculate Accession Number for Image
  1. N GMRCPTR,PARENT,TIUPTR,X
  1. S X=$G(^MAG(2005,IMAGE,2)),PARENT=+$P(X,"^",6),TIUPTR=$P(X,"^",7)
  1. I PARENT'=8925,PARENT'=2006.5839 Q ""
  1. Q:'TIUPTR ""
  1. S GMRCPTR=$$GET1^DIQ(8925,TIUPTR,1405,"I") Q:GMRCPTR'[";GMR(123" "" ; IA # 3268
  1. Q $$GMRCACN^MAGDFCNV(+GMRCPTR)
  1. ;
  1. PROCNAM(IMAGE) ; Calculate Procedure Name for Image
  1. N PROCPTR,X
  1. S X=$G(^MAG(2005,IMAGE,40)),PROCPTR=$P(X,"^",4) Q:'PROCPTR ""
  1. S X=$G(^MAG(2005.84,PROCPTR,0))
  1. Q $P(X,"^",1)
  1. ;
  1. PROCNUM(IMAGE) ; Calculate Procedure Number for Image
  1. N X
  1. S X=$G(^MAG(2005,IMAGE,40))
  1. Q $P(X,"^",4)
  1. ;
  1. ;
  1. ; This routine takes care of two cross-references on the Image File
  1. ;
  1. ; ^MAG(2005,"CONSULT1",accession,image)=""
  1. ; ^MAG(2005,"CONSULT2",procedure,accession,image)=""
  1. ;
  1. ; DA ---- Image #
  1. ; KILL -- flag: 0=SET, 1=KILL
  1. ;
  1. X1(DA,KILL) N GP,PA,T0,X
  1. S X=$G(^MAG(2005,IMAGE,2)),PA=+$P(X,"^",6),T0=$P(X,"^",7)
  1. I PA'=8925,PA'=2006.5839 Q
  1. Q:'T0
  1. S GP=$$GET1^DIQ(8925,T0,1405,"I") Q:GP'[";GMR(123"
  1. I KILL K ^MAG(2005,"CONSULT1",$$GMRCACN^MAGDFCNV(+GP),IMAGE) Q
  1. S ^MAG(2005,"CONSULT1",$$GMRCACN^MAGDFCNV(+GP),IMAGE)=""
  1. Q
  1. ;
  1. X2(IMAGE,KILL) N CO,GP,PA,PR,T0,X
  1. S X=$G(^MAG(2005,IMAGE,2)),PA=+$P(X,"^",6),T0=$P(X,"^",7)
  1. I PA'=8925,PA'=2006.5839 Q
  1. Q:'T0
  1. S X=$G(^MAG(2005,IMAGE,40)),PR=$P(X,"^",4) Q:'PR
  1. S X=$G(^MAG(2005.84,PR,0)),CO=$P(X,"^",1) Q:CO=""
  1. S GP=$$GET1^DIQ(8925,T0,1405,"I") Q:GP'[";GMR(123"
  1. I KILL K ^MAG(2005,"CONSULT2",CO,$$GMRCACN^MAGDFCNV(+GP),IMAGE) Q
  1. S ^MAG(2005,"CONSULT2",CO,$$GMRCACN^MAGDFCNV(+GP),IMAGE)=""
  1. Q
  1. ;
  1. ; ============================================================
  1. ; To be included in post-init (through TaskMan?):
  1. ;
  1. REDO F X="CONSULT1","CONSULT2" K ^MAG(2005,X)
  1. S DA=0 F S DA=$O(^MAG(2005,DA)) Q:'DA D
  1. . D X1(DA,0)
  1. . D X2(DA,0)
  1. . Q
  1. Q