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

MAGDSTQ0.m

Go to the documentation of this file.
  1. MAGDSTQ0 ;WOIFO/PMK - Study Tracker - Query/Retrieve user ; Aug 16, 2020@17:57:20
  1. ;;3.0;IMAGING;**231**;Mar 19, 2002;Build 9;Jun 29, 2011
  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. ;
  1. ; Notice: This routine is on both VistA and the DICOM Gateway
  1. ;
  1. ; Supported IA #10103 reference $$NOW^XLFDT function call
  1. ; Supported IA #10103 reference $$FMADD^XLFDT function call
  1. ;
  1. Q
  1. ;
  1. INITXTMP() ; initialize ^XTMP
  1. N MAGXTMP,PURGE,TODAY
  1. S MAGXTMP="MAG Q/R Client"
  1. S TODAY=$$NOW^XLFDT()\1
  1. D KILLXTMP(MAGXTMP,TODAY)
  1. S PURGE=$$FMADD^XLFDT(TODAY,7) ; keep a week's worth for debug purposes
  1. S MAGXTMP=MAGXTMP_" "_TODAY
  1. I '$D(^XTMP(MAGXTMP,0)) S ^(0)=PURGE_"^"_TODAY_"^DICOM Q/R Client"
  1. K ^XTMP(MAGXTMP,HOSTNAME,$J)
  1. Q MAGXTMP
  1. ;
  1. KILLXTMP(MAGXTMP,TODAY) ; remove old ^XTMP files
  1. N X
  1. F S MAGXTMP=$O(^XTMP(MAGXTMP)) Q:MAGXTMP'?1"MAG".E D
  1. . ; check purge date against today's - keep a week's worth for debug purposes
  1. . S X=$G(^XTMP(MAGXTMP,0)) I $P(X,"^",1)<TODAY K ^XTMP(MAGXTMP)
  1. . Q
  1. Q
  1. ;
  1. KEYLIST(KEYLIST) ; initialize KEYLIST
  1. N I,LINETAG,T
  1. S QRROOT=$G(^TMP("MAG",$J,"Q/R PARAM","ROOT"))
  1. S QUERYLEVEL=$G(^TMP("MAG",$J,"Q/R QUERY",QRSTACK,"QUERY LEVEL"))
  1. S LINETAG=$E(QRROOT,1)_QUERYLEVEL
  1. S T=$T(@LINETAG) I T="" Q 0 ; not a valid Q/R Root/Level pair
  1. K KEYLIST
  1. S KEYCOUNT=0
  1. F I=1:1 S T=$P($T(@LINETAG+I),";;",2) Q:T="END" D
  1. . S KEYCOUNT=KEYCOUNT+1
  1. . S KEYLIST(KEYCOUNT)=T
  1. . Q
  1. Q KEYCOUNT
  1. ;
  1. PPATIENT ; patient root patient level query keys
  1. ;;PATIENT NAME|PNAME^MAGDSTQ1
  1. ;;PATIENT ID|PID^MAGDSTQ1
  1. ;;PATIENT BIRTH DATE|BIRTHDAT^MAGDSTQ1
  1. ;;PATIENT'S SEX|SEX^MAGDSTQ1
  1. ;;END
  1. ;;
  1. PSTUDY ; patient root study level query keys
  1. ;;PATIENT NAME|PNAME^MAGDSTQ1
  1. ;;PATIENT ID|PID^MAGDSTQ1
  1. ;;PATIENT BIRTH DATE|BIRTHDAT^MAGDSTQ1
  1. ;;PATIENT'S SEX|SEX^MAGDSTQ1
  1. ;;ACCESSION NUMBER|ACNUMB^MAGDSTQ1
  1. ;;STUDY DATE|STDYDATE^MAGDSTQ1
  1. ;;STUDY TIME|STDYTIME^MAGDSTQ1
  1. ;;STUDY ID|STUDYID^MAGDSTQ1
  1. ;;STUDY INSTANCE UID(0001)|STUDYUID^MAGDSTQ1
  1. ;;MODALITY|MODALITY^MAGDSTQ1
  1. ;;REFERRING PHYSICIAN|REFDOC^MAGDSTQ1
  1. ;;END
  1. ;;
  1. PSERIES ; patient root series level query keys
  1. ;;PATIENT NAME|PNAME^MAGDSTQ1
  1. ;;PATIENT ID|PID^MAGDSTQ1
  1. ;;PATIENT BIRTH DATE|BIRTHDAT^MAGDSTQ1
  1. ;;PATIENT'S SEX|SEX^MAGDSTQ1
  1. ;;ACCESSION NUMBER|ACNUMB^MAGDSTQ1
  1. ;;STUDY DATE|STDYDATE^MAGDSTQ1
  1. ;;STUDY TIME|STDYTIME^MAGDSTQ1
  1. ;;STUDY ID|STUDYID^MAGDSTQ1
  1. ;;STUDY INSTANCE UID(0001)|STUDYUID^MAGDSTQ1
  1. ;;MODALITY|MODALITY^MAGDSTQ1
  1. ;;REFERRING PHYSICIAN|REFDOC^MAGDSTQ1
  1. ;;SERIES NUMBER|SERIESNO^MAGDSTQ1
  1. ;;SERIES INSTANCE UID(0001)|SERIEUID^MAGDSTQ1
  1. ;;END
  1. ;;
  1. PIMAGE ; patient root image level query keys
  1. ;;PATIENT NAME|PNAME^MAGDSTQ1
  1. ;;PATIENT ID|PID^MAGDSTQ1
  1. ;;PATIENT BIRTH DATE|BIRTHDAT^MAGDSTQ1
  1. ;;PATIENT'S SEX|SEX^MAGDSTQ1
  1. ;;ACCESSION NUMBER|ACNUMB^MAGDSTQ1
  1. ;;STUDY DATE|STDYDATE^MAGDSTQ1
  1. ;;STUDY TIME|STDYTIME^MAGDSTQ1
  1. ;;STUDY ID|STUDYID^MAGDSTQ1
  1. ;;STUDY INSTANCE UID(0001)|STUDYUID^MAGDSTQ1
  1. ;;MODALITY|MODALITY^MAGDSTQ1
  1. ;;REFERRING PHYSICIAN|REFDOC^MAGDSTQ1
  1. ;;SERIES NUMBER|SERIESNO^MAGDSTQ1
  1. ;;SERIES INSTANCE UID(0001)|SERIEUID^MAGDSTQ1
  1. ;;SOP INSTANCE UID(0001)|SOPUID^MAGDSTQ1
  1. ;;END
  1. ;;
  1. SSTUDY ; study root study level query keys
  1. ;;PATIENT NAME|PNAME^MAGDSTQ1
  1. ;;PATIENT ID|PID^MAGDSTQ1
  1. ;;PATIENT BIRTH DATE|BIRTHDAT^MAGDSTQ1
  1. ;;PATIENT'S SEX|SEX^MAGDSTQ1
  1. ;;ACCESSION NUMBER|ACNUMB^MAGDSTQ1
  1. ;;STUDY DATE|STDYDATE^MAGDSTQ1
  1. ;;STUDY TIME|STDYTIME^MAGDSTQ1
  1. ;;STUDY ID|STUDYID^MAGDSTQ1
  1. ;;STUDY INSTANCE UID(0001)|STUDYUID^MAGDSTQ1
  1. ;;MODALITY|MODALITY^MAGDSTQ1
  1. ;;REFERRING PHYSICIAN|REFDOC^MAGDSTQ1
  1. ;;END
  1. ;;
  1. SSERIES ; study root series level query keys
  1. ;;PATIENT NAME|PNAME^MAGDSTQ1
  1. ;;PATIENT ID|PID^MAGDSTQ1
  1. ;;PATIENT BIRTH DATE|BIRTHDAT^MAGDSTQ1
  1. ;;PATIENT'S SEX|SEX^MAGDSTQ1
  1. ;;ACCESSION NUMBER|ACNUMB^MAGDSTQ1
  1. ;;STUDY DATE|STDYDATE^MAGDSTQ1
  1. ;;STUDY TIME|STDYTIME^MAGDSTQ1
  1. ;;STUDY ID|STUDYID^MAGDSTQ1
  1. ;;STUDY INSTANCE UID(0001)|STUDYUID^MAGDSTQ1
  1. ;;MODALITY|MODALITY^MAGDSTQ1
  1. ;;REFERRING PHYSICIAN|REFDOC^MAGDSTQ1
  1. ;;SERIES NUMBER|SERIESNO^MAGDSTQ1
  1. ;;SERIES INSTANCE UID(0001)|SERIEUID^MAGDSTQ1
  1. ;;END
  1. ;;
  1. SIMAGE ; study root image level query keys
  1. ;;PATIENT NAME|PNAME^MAGDSTQ1
  1. ;;PATIENT ID|PID^MAGDSTQ1
  1. ;;PATIENT BIRTH DATE|BIRTHDAT^MAGDSTQ1
  1. ;;PATIENT'S SEX|SEX^MAGDSTQ1
  1. ;;ACCESSION NUMBER|ACNUMB^MAGDSTQ1
  1. ;;STUDY DATE|STDYDATE^MAGDSTQ1
  1. ;;STUDY TIME|STDYTIME^MAGDSTQ1
  1. ;;STUDY ID|STUDYID^MAGDSTQ1
  1. ;;STUDY INSTANCE UID(0001)|STUDYUID^MAGDSTQ1
  1. ;;MODALITY|MODALITY^MAGDSTQ1
  1. ;;REFERRING PHYSICIAN|REFDOC^MAGDSTQ1
  1. ;;SERIES NUMBER|SERIESNO^MAGDSTQ1
  1. ;;SERIES INSTANCE UID(0001)|SERIEUID^MAGDSTQ1
  1. ;;SOP INSTANCE UID(0001)|SOPUID^MAGDSTQ1
  1. ;;END
  1. ;;
  1. ;
  1. ASKDASH ; ask the dash question
  1. N PIDDASHES
  1. S PIDDASHES=$G(^TMP("MAG",$J,"Q/R PARAM","PATIENT ID DASHES"))
  1. I PIDDASHES="" D
  1. . ; set the patient lookup CLIENT for manual Q/R client
  1. . N X,DEFAULT
  1. . D DASHES(.DEFAULT) ; get VistA setting for dashes in PID
  1. . I $$YESNO^MAGDSTQ("Include dashes in the PATIENT ID key?",DEFAULT,.X)<0 Q
  1. . S (^TMP("MAG",$J,"Q/R PARAM","PATIENT ID DASHES"),PIDDASHES)=$E(X,1)
  1. . Q
  1. Q
  1. ;
  1. DASHES(OUTPUT) ; lookup whether or not PID should contain dashes - returns Y or N
  1. I $$VISTA^MAGDSTQ D ; VistA code - call API
  1. . D DASHES^MAGDSTA3(.OUTPUT)
  1. . Q
  1. E D ; DICOM Gateway code - call RPC
  1. . N RPCERR
  1. . S RPCERR=$$CALLRPC^MAGM2VCU("MAG DICOM GET PT ID DASHES","M",.OUTPUT)
  1. . I RPCERR<0 D S OUTPUT(0)=-1 Q
  1. . . D ERRORMSG^MAGDSTQ0(1,"Error in MAG DICOM GET PT ID DASHES rpc",.OUTPUT)
  1. . . Q
  1. . Q
  1. Q
  1. ;
  1. PUSH(QRSTACK) ; push the query down onto the stack
  1. S QRSTACK=QRSTACK+1
  1. ; remove any previous query results
  1. K ^TMP("MAG",$J,"Q/R QUERY",QRSTACK) ; remove any previous query results
  1. K ^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK) ; remove any previous query results
  1. ; copy the previous stack results to the new stack
  1. M ^TMP("MAG",$J,"Q/R QUERY",QRSTACK)=^TMP("MAG",$J,"Q/R QUERY",QRSTACK-1)
  1. M ^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK)=^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK-1)
  1. Q
  1. ;
  1. POP(QRSTACK) ; remove the old query from the stack
  1. K ^TMP("MAG",$J,"Q/R QUERY",QRSTACK) ; remove any old query results
  1. K ^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK) ; remove any old query results
  1. I QRSTACK>1 S QRSTACK=QRSTACK-1
  1. E D
  1. . S ^TMP("MAG",$J,"Q/R QUERY",QRSTACK,"ROOT")=QRROOT
  1. . S ^TMP("MAG",$J,"Q/R QUERY",QRSTACK,"QUERY LEVEL")=QRROOT
  1. . S ^TMP("MAG",$J,"Q/R QUERY",QRSTACK,"QUERY USER APPLICATION")=QRSCP
  1. . Q
  1. D KEYLIST^MAGDSTQ0(.KEYLIST)
  1. Q
  1. ;
  1. ERRORMSG(PAUSE,TEXT,INFO) ; display error message to user called from MAGDSTQA
  1. N COMEFROM,I,J,MAXLEN,MSG,X
  1. S COMEFROM=$P($STACK($STACK-1,"PLACE")," ",1)
  1. S I=0,MAXLEN=36+$L(COMEFROM) ; max length of last line
  1. I $L($G(TEXT)) S I=I+1,MSG(I)=TEXT
  1. S I=I+1,MSG(I)=""
  1. I $D(INFO)=1 D ERRMSG1(.MSG,.I,INFO)
  1. E F J=1:1 Q:'$D(INFO(J)) D ERRMSG1(.MSG,.I,INFO(J))
  1. F J=1:1:I I $L(MSG(J))>MAXLEN S MAXLEN=$L(MSG(J))
  1. S I=I+1,MSG(I)=""
  1. S I=I+1,MSG(I)="Message generated at MUMPS line tag "_COMEFROM
  1. W ! F J=1:1:MAXLEN+8 W "*"
  1. F J=1:1:I W !,"*** ",MSG(J),?MAXLEN+4," ***"
  1. W ! F J=1:1:MAXLEN+8 W "*"
  1. I $G(PAUSE) D CONTINUE^MAGDSTQ
  1. Q
  1. ;
  1. ERRMSG1(MSG,I,INFO) ; split long lines into shorter ones
  1. N J,K,X
  1. I $L(INFO)'>75 S I=I+1,MSG(I)=INFO Q
  1. ; split the line up into shorter ones
  1. S K=1,X=$P(INFO," ",1)
  1. F J=2:1:$L(INFO," ") D
  1. . I ($L(X)+$L($P(INFO," ",J)))>75 D ; output short line
  1. . . S I=I+1,MSG(I)=X,X="",K=0
  1. . . Q
  1. . S K=K+1,$P(X," ",K)=$P(INFO," ",J)
  1. . Q
  1. I X'="" S I=I+1,MSG(I)=X ; flush buffer
  1. Q