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

MAGDSTQ5.m

Go to the documentation of this file.
  1. MAGDSTQ5 ;WOIFO/PMK - Study Tracker - Patient Level Query/Retrieve Display; Jul 23, 2020@07:39:54
  1. ;;3.0;IMAGING;**231**;Mar 19, 2002;Build 9;Aug 30, 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. ;
  1. ; Notice: This routine is on both VistA and the DICOM Gateway
  1. ;
  1. ;
  1. Q
  1. ;
  1. DISPLAY ;
  1. ; the values of the following four status is important
  1. N INCORRECT S INCORRECT=-1 ; incorrect selection
  1. N NOTSELECTED S NOTSELECTED=-2 ; proposed selection not selected
  1. N CARET S CARET=-3 ; caret (^) indicator
  1. ;
  1. N JPATIENT,JSTUDY,JSERIES,JIMAGE ; IENs
  1. N SETKEYS S SETKEYS=0 ; query keys are set for the next operation
  1. N HIT ; flag indicated that a patient, study, series, image(s) were selected
  1. N REPEAT ; loop control
  1. N RETURN
  1. ;
  1. I $D(^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK,"MESSAGE","MSG",0)) D Q
  1. . ; display the message, decrement QRSTACK and quit
  1. . N I
  1. . F I=1:1:^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK,"MESSAGE","MSG",0) W !,^(I)
  1. . D CONTINUE^MAGDSTQ
  1. . D POP^MAGDSTQ0(.QRSTACK) ; remove the last q/r key entry from the stack
  1. . Q
  1. ;
  1. S HIT=0,REPEAT=1
  1. F D Q:'REPEAT
  1. . S RETURN=$$DISPLAY1()
  1. . I HIT S REPEAT=0 Q
  1. . ; check for going back - RETURN should be 0 for QRSTACK=1
  1. . I 'RETURN S X="YES" ; ignore prompt
  1. . E D ; do prompt
  1. . . W !!,"Nothing selected -- Exit display of query results?"
  1. . . R " y// ",X:DTIME E S X="^"
  1. . . Q
  1. . I X="" S X="y" W X
  1. . I "Yy"[$E(X) D
  1. . . S REPEAT=0
  1. . . D POP^MAGDSTQ0(.QRSTACK) ; remove the last q/r key entry from the stack
  1. . . Q
  1. . Q
  1. Q
  1. ;
  1. DISPLAY1() ; select the patient
  1. N N,REPEAT,RETURN1,RETURN2
  1. S N=$G(^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK,"PATIENT"),0)
  1. I N=0 Q 0 ; no patient data
  1. ;
  1. S REPEAT=1
  1. F D Q:'REPEAT
  1. . I N=1,$G(^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK,"STUDY",1),0) D
  1. . . S JPATIENT=1
  1. . . S RETURN1=0
  1. . . Q
  1. . E D Q:'REPEAT ; N>1
  1. . . S RETURN1=$$MULTIPLE("PATIENT",N)
  1. . . I RETURN1=INCORRECT Q
  1. . . I RETURN1>0 S HIT=1 ; patient selected
  1. . . I RETURN1'=0 S REPEAT=0 Q
  1. . . Q
  1. . S RETURN2=$$DISPLAY2()
  1. . I HIT S REPEAT=0
  1. . I RETURN2=NOTSELECTED,N=1 S REPEAT=0,RETURN1=NOTSELECTED
  1. . Q
  1. Q RETURN1
  1. ;
  1. DISPLAY2() ; select the study
  1. N N,REPEAT,RETURN1,RETURN2
  1. I '$D(JPATIENT) Q 0 ; no patient selected
  1. S N=$G(^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK,"STUDY",JPATIENT),0)
  1. I N=0 Q 0 ; no study data
  1. ;
  1. S REPEAT=1
  1. F D Q:'REPEAT
  1. . I N=1,$G(^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK,"SERIES",JPATIENT,1),0) D
  1. . . S JSTUDY=1
  1. . . S RETURN1=0
  1. . . Q
  1. . E D Q:'REPEAT ; N>1
  1. . . S RETURN1=$$MULTIPLE("STUDY",N)
  1. . . I RETURN1=INCORRECT Q
  1. . . I RETURN1>0 S HIT=1 ; study selected
  1. . . I RETURN1'=0 S REPEAT=0 Q
  1. . . Q
  1. . S RETURN2=$$DISPLAY3()
  1. . I HIT S REPEAT=0
  1. . I RETURN2=NOTSELECTED,N=1 S REPEAT=0,RETURN1=NOTSELECTED
  1. . Q
  1. Q RETURN1
  1. ;
  1. DISPLAY3() ; select the series
  1. N N,REPEAT,RETURN1,RETURN2
  1. I '$D(JSTUDY) Q 0 ; no study selected
  1. S N=$G(^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK,"SERIES",JPATIENT,JSTUDY),0)
  1. I N=0 Q 0 ; no series data
  1. ;
  1. S REPEAT=1
  1. F D Q:'REPEAT
  1. . I N=1,$G(^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK,"IMAGE",JPATIENT,JSTUDY,1),0) D
  1. . . S JSERIES=1
  1. . . S RETURN1=0
  1. . . Q
  1. . E D Q:'REPEAT ; N>1
  1. . . S RETURN1=$$MULTIPLE("SERIES",N)
  1. . . I RETURN1=INCORRECT Q
  1. . . I RETURN1>0 S HIT=1 ; series selected
  1. . . I RETURN1'=0 S REPEAT=0 Q
  1. . . Q
  1. . S RETURN2=$$DISPLAY4()
  1. . I HIT S REPEAT=0
  1. . I RETURN2=NOTSELECTED,N=1 S REPEAT=0,RETURN1=NOTSELECTED
  1. . Q
  1. Q RETURN1
  1. ;
  1. DISPLAY4() ; select the image
  1. N N,REPEAT,RETURN1
  1. I '$D(JSERIES) Q 0 ; no series selected
  1. S N=$G(^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK,"IMAGE",JPATIENT,JSTUDY,JSERIES),0)
  1. I N=0 Q 0 ; no image data
  1. ;
  1. S REPEAT=1
  1. F D Q:'REPEAT
  1. . S RETURN1=$$MULTIPLE("IMAGE",N)
  1. . I RETURN1=INCORRECT Q
  1. . I RETURN1>0 S HIT=1 ; image selected
  1. . I RETURN1'=0 S REPEAT=0 Q
  1. . Q
  1. Q RETURN1
  1. ;
  1. ;
  1. ;
  1. MULTIPLE(LEVEL,N) ; display information for multiple entries
  1. N DONE,IBEGIN,IEND,INCREMENT,PROMPT,SELECT
  1. S DONE=0
  1. ;
  1. I N=1 D
  1. . S SELECT=$$SINGLE(LEVEL,1)
  1. . I SELECT=INCORRECT S SELECT=NOTSELECTED
  1. . Q
  1. E D ; multiple matches, select one
  1. . S IBEGIN=1 F D MULTI Q:DONE D Q:DONE
  1. . . S IBEGIN=IBEGIN+INCREMENT
  1. . . I IBEGIN>N S SELECT=NOTSELECTED,DONE=1
  1. . . Q
  1. . Q
  1. Q SELECT
  1. ;
  1. MULTI ; display one set of information
  1. N FIRSTLINE,FINISHED,I,OLDMODALITY,RETURN
  1. S FINISHED=0 F D Q:FINISHED
  1. . I IBEGIN=1 D
  1. . . D MULTITOP
  1. . . S FIRSTLINE=0
  1. . . Q
  1. . E D
  1. . . W @IOF
  1. . . S FIRSTLINE=1
  1. . . Q
  1. . ;
  1. . S INCREMENT=(IOSL-4)-$Y
  1. . I INCREMENT<5 S INCREMENT=22
  1. . S IEND=IBEGIN+INCREMENT-1 I IEND>N S IEND=N
  1. . F I=IBEGIN:1:IEND D MULTIONE
  1. . W !!,"Enter 1-",IEND," to see the ",PROMPT(1)," details"
  1. . I IEND<N W ", <Enter> to see more ",PROMPT(2)
  1. . R ": ",I:DTIME E D MULTIEND S FINISHED=1 Q
  1. . I I="" S SELECT=NOTSELECTED S FINISHED=1 Q
  1. . I I["^" D MULTIEND S FINISHED=1 Q
  1. . I I?1N.N,I'<1,I'>IEND S SELECT=$$SINGLE(LEVEL,I) S DONE=1,FINISHED=1 Q
  1. . R " ???",X:DTIME E D MULTIEND S FINISHED=1 Q
  1. . Q
  1. Q
  1. ;
  1. MULTIEND ; set loop end variables
  1. S DONE=1,I="",SELECT=NOTSELECTED
  1. Q
  1. ;
  1. MULTITOP ; display the MULTI header
  1. I LEVEL="PATIENT" D
  1. . W @IOF,?4,"Identifier ",?17,"Patient Name",?60,"Birth Date",?75,"Sex"
  1. . W !?4,"-----------",?17,"------------",?60,"----------",?75,"---"
  1. . S PROMPT(1)="patient",PROMPT(2)="patients"
  1. . S (JPATIENT,JSTUDY,JSERIES)=""
  1. . Q
  1. E I LEVEL="STUDY" D
  1. . D HEADER
  1. . S RETURN=$$PATIENT^MAGDSTQ6() ; ignore RETURN
  1. . W !!?4,"Accession Number",?22,"Study Date",?34,"Description"
  1. . W !?4,"----------------",?22,"----------",?34,"-----------"
  1. . S PROMPT(1)="study",PROMPT(2)="studies"
  1. . S (JSTUDY,JSERIES)=""
  1. . Q
  1. E I LEVEL="SERIES" D
  1. . D HEADER
  1. . S RETURN=$$STUDY^MAGDSTQ6() ; ignore RETURN
  1. . S PROMPT(1)="series",PROMPT(2)="series"
  1. . Q
  1. E D ; image (composite SOP object)
  1. . D HEADER
  1. . S RETURN=$$SERIES^MAGDSTQ6() ; ignore RETURN
  1. . S PROMPT(1)="image",PROMPT(2)="images"
  1. . Q
  1. Q
  1. ;
  1. MULTIONE ; display one line of data for each patient, study, series, or image
  1. N VAR
  1. S VAR=""
  1. W:'FIRSTLINE !
  1. I LEVEL="SERIES" D
  1. . N MODALITY
  1. . S MODALITY=^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK,"SERIES",JPATIENT,JSTUDY,I,"MODALITY")
  1. . I MODALITY=$G(OLDMODALITY) Q
  1. . W "Modality: ",MODALITY,!
  1. . S OLDMODALITY=MODALITY
  1. . Q
  1. W $J(I,3),")",?5 S FIRSTLINE=0
  1. I LEVEL="PATIENT" D
  1. . F S VAR=$O(^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK,"PATIENT",I,VAR)) Q:VAR="" N @VAR S @VAR=^(VAR)
  1. . W PID,?17,$E($$NAME^MAGDSTQ6(PNAME),1,40),?60,$$DATE^MAGDSTQ6(DOB,"SHORT"),?76,SEX
  1. . Q
  1. E I LEVEL="STUDY" D
  1. . F S VAR=$O(^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK,"STUDY",JPATIENT,I,VAR)) Q:VAR="" N @VAR S @VAR=^(VAR)
  1. . W ACNUMB
  1. . W ?22,$$DATE^MAGDSTQ6(STUDYDATE,"SHORT")
  1. . W ?34,$E(DESCRIPTION,1,80-34) ; output to end of 80 character line
  1. . Q
  1. E I LEVEL="SERIES" D
  1. . F S VAR=$O(^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK,"SERIES",JPATIENT,JSTUDY,I,VAR)) Q:VAR="" N @VAR S @VAR=^(VAR)
  1. . I $G(SERIESDESC)'="",SERIESDESC'="<unknown>" W SERIESDESC
  1. . E W "Series UID: ",SERIESUID
  1. . Q
  1. E I LEVEL="IMAGE" D
  1. . F S VAR=$O(^XTMP(MAGXTMP,HOSTNAME,$J,QRSTACK,"IMAGE",JPATIENT,JSTUDY,JSERIES,I,VAR)) Q:VAR="" N @VAR S @VAR=^(VAR)
  1. . W "SOP Instance UID: ",SOPUID
  1. . Q
  1. Q
  1. ;
  1. SINGLE(LEVEL,I) ; display detailed information for one entity
  1. N RETURN,X
  1. D HEADER
  1. I LEVEL="PATIENT" D
  1. . S JPATIENT=I,RETURN=$$PATIENT^MAGDSTQ6()
  1. . Q
  1. E I LEVEL="STUDY" D
  1. . S JSTUDY=I,RETURN=$$STUDY^MAGDSTQ6()
  1. . Q
  1. E I LEVEL="SERIES" D
  1. . S JSERIES=I,RETURN=$$SERIES^MAGDSTQ6()
  1. . Q
  1. E D
  1. . S JIMAGE=I,RETURN=$$IMAGE^MAGDSTQ6()
  1. . Q
  1. Q RETURN
  1. ;
  1. N I,J,X
  1. S X=$S(OPTION="QR":"QUERY/RETRIEVE",1:"QUERY")_" RESULTS"
  1. S J=80-$L(X)/2
  1. W @IOF,?J,X
  1. W !,?J F I=1:1:$L(X) W "-"
  1. W !
  1. Q