- MAGDSTQ1 ;WOIFO/PMK - Study Tracker - Query/Retrieve user ; Feb 15, 2022@10:52:44
- ;;3.0;IMAGING;**231,305**;Mar 19, 2002;Build 3
- ;; 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. |
- ;; +---------------------------------------------------------------+
- ;;
- ;
- ; Notice: This routine is on both VistA and the DICOM Gateway
- ;
- ;
- Q
- ;
- PNAME ; get patient name attribute
- N HELP,PROMPT,X
- S PATLKUPMODE=$$GETMODE()
- I PATLKUPMODE="VISTA" D ; routine for VistA
- . D PATIENTQ^MAGDSTQ7
- . Q
- E D
- . S PROMPT="Enter the Patient Name"
- . S HELP(1)="Enter the Patient Name in ""LAST^FIRST^MIDDLE"" format"
- . S HELP(2)="You can enter a partial match and use ""*"" as a wild-card"
- . S X=$$GETKEY(ATTRIB,PROMPT,.HELP)
- . D CHKNAME(ATTRIB)
- . Q
- Q
- ;
- CHKNAME(ATTRIB) ; convert comma(s) to caret(s) & remove leading spaces
- I $D(^TMP("MAG",$J,"Q/R QUERY",QRSTACK,ATTRIB)) S ^(ATTRIB)=$TR(^(ATTRIB),",","^")
- ; remove any spaces before delimiters
- F Q:$G(^TMP("MAG",$J,"Q/R QUERY",QRSTACK,ATTRIB))'[" ^" D
- . S ^(ATTRIB)=$P(^TMP("MAG",$J,"Q/R QUERY",QRSTACK,ATTRIB)," ^",1)_"^"_$P(^(ATTRIB)," ^",2,999)
- . Q
- ; remove any spaces after delimiters
- F Q:$G(^TMP("MAG",$J,"Q/R QUERY",QRSTACK,ATTRIB))'["^ " D
- . S ^(ATTRIB)=$P(^TMP("MAG",$J,"Q/R QUERY",QRSTACK,ATTRIB),"^ ",1)_"^"_$P(^(ATTRIB),"^ ",2,999)
- . Q
- I $D(^TMP("MAG",$J,"Q/R QUERY",QRSTACK,ATTRIB)) S ^(ATTRIB)=$TR(^(ATTRIB),",","^")
- Q
- ;
- PID ; get patient id attribute
- N HELP,PROMPT,X
- S PATLKUPMODE=$$GETMODE()
- I PATLKUPMODE="VISTA" D ; routine for VistA
- . D PATIENTQ^MAGDSTQ7
- . Q
- E D
- . S PROMPT="Enter the Patient ID"
- . S HELP(1)="Enter the Patient ID (Social Security Number)"
- . S X=$$GETKEY(ATTRIB,PROMPT,.HELP)
- . Q
- Q
- ;
- GETMODE() ; get the patient lookup CLIENT for manual Q/R client
- N HELP,X
- S PATLKUPMODE=$G(^TMP("MAG",$J,"Q/R PARAM","PATIENT LOOKUP MODE"),"<undef>")
- I PATLKUPMODE="<undef>" D
- . I '$$VISTA^MAGDSTQ,'$D(^TMP("MAG",$J,"DICOM RPC USER")) S PATLKUPMODE="MANUAL" Q ; On gateway w/o RPCs
- . I $$YESNO^MAGDSTQ("Use VistA Patient identification information for PACS Query/Retrieve?","y",.X,.HELP)<0 Q:""
- . S PATLKUPMODE=$S(X="YES":"VISTA",1:"MANUAL")
- . S ^TMP("MAG",$J,"Q/R PARAM","PATIENT LOOKUP MODE")=PATLKUPMODE
- . I PATLKUPMODE="VISTA" D
- . . D ASKDASH^MAGDSTQ0
- . . Q
- . Q
- Q PATLKUPMODE
- ;
- SEX ; get the patient's sex
- N HELP,PROMPT,X
- S PROMPT="Enter the sex of the patient"
- S HELP(1)="Enter M for male, F for female, or O for other."
- S X=$$GETKEY(ATTRIB,PROMPT,.HELP,"$$CHECKSEX(.X)")
- Q
- ;
- CHECKSEX(X) ;
- N RETURN,Y
- S RETURN=-1
- S X=$E(X) ; allow only a single uppercase letter
- X ^%ZOSF("UPPERCASE") S X=Y
- I "MFO"[X S RETURN=0
- Q RETURN
- ;
- ACNUMB ; enter the accession number
- N ANPREFIX,HELP,PROMPT,X
- S PROMPT="Enter the Accession Number"
- S ANPREFIX=$G(^TMP("MAG",$J,"Q/R PARAM","ACCESSION NUMBER PREFIX"),"<undef>")
- I ANPREFIX'="<undef>",ANPREFIX'="" S PROMPT=PROMPT_" ("_ANPREFIX_")"
- S HELP(1)="For Radiology, the Accession Number is the Date-Case Number or Site-Date-Case Number."
- S HELP(2)="For CPRS Requests, it is ""GMRC-"" followed by the request number, or"
- S HELP(3)="Site-GMR-Request Number, where Site is the station number."
- S X=$$GETKEY(ATTRIB,PROMPT,.HELP)
- I "@^"'[X S X=$$ANPREFIX
- Q
- ;
- ANPREFIX() ; add the site-specific accession number prefix
- N ANPREFIX,RETURN
- I $L(X,"-")=3 S RETURN=0 ; <station name> - MMDDYY - <case number>
- E D
- . S ANPREFIX=$G(^TMP("MAG",$J,"Q/R PARAM","ACCESSION NUMBER PREFIX"),"<undef>")
- . I ANPREFIX="<undef>" D
- . . I $$VISTA^MAGDSTQ D ; VistA code - call API
- . . . S ANPREFIX=$$ANPREFIX^MAGDSTAB
- . . . Q
- . . E D ; DICOM Gateway code - call RPC
- . . . N RPCERR
- . . . I '$D(^TMP("MAG",$J,"DICOM RPC USER")) D Q ; no RPC
- . . . . S ANPREFIX=""
- . . . . Q
- . . . S RPCERR=$$CALLRPC^MAGM2VCU("MAG DICOM GET ACN PREFIX","M",.ANPREFIX)
- . . . I RPCERR<0 D S OUTPUT(0)=-1 Q
- . . . . D ERRORMSG^MAGDSTQ0(1,"Error in MAG DICOM GET ACN PREFIX rpc",.ANPREFIX)
- . . . . Q
- . . . Q
- . . S ANPREFIX=$$GETANPFX(ANPREFIX) ; allow the accession number prefix to be changed
- . . S ^TMP("MAG",$J,"Q/R PARAM","ACCESSION NUMBER PREFIX")=ANPREFIX
- . . Q
- . S RETURN=1
- . I $D(^TMP("MAG",$J,"Q/R QUERY",QRSTACK,ATTRIB)) S ^(ATTRIB)=ANPREFIX_^(ATTRIB)
- . Q
- Q RETURN
- ;
- GETANPFX(DEFAULT) ; get the accession number prefix
- N ANPREFIX,OK
- S OK=0 F D Q:OK
- . W !!,"Enter the Accession Number Prefix: "
- . I $L(DEFAULT) W DEFAULT,"// "
- . R ANPREFIX:DTIME E S OK=-1 Q
- . I ANPREFIX="",$L(DEFAULT) S ANPREFIX=DEFAULT W ANPREFIX
- . I ANPREFIX="" W " -- use ""@"" to remove it" Q
- . I ANPREFIX["^" S OK=-1 Q
- . I ANPREFIX="@" S ANPREFIX=""
- . I ANPREFIX?0.4(1U,1N,1"-") S OK=1
- . E W " ???",!,"Please enter ""@"" or 1-4 characters (numeric, uppercase characters, hyphen)"
- . Q
- Q ANPREFIX
- ;
- REFDOC ;
- N HELP,PROMPT,X
- S PROMPT="Enter the Referring Physician's name"
- S HELP(1)="Enter the Referring Physician's name in ""LAST^FIRST^MI"" format"
- S X=$$GETKEY(ATTRIB,PROMPT,.HELP)
- D CHKNAME(ATTRIB)
- Q
- ;
- STUDYID ; enter the study id
- N HELP,PROMPT,X
- S PROMPT="Enter the Study Identifier"
- S HELP(1)="The Study Identifier is generated by the modality."
- S X=$$GETKEY(ATTRIB,PROMPT,.HELP)
- Q
- ;
- SERIESNO ; enter the series number
- N HELP,PROMPT,X
- S PROMPT="Enter the Series Number"
- S HELP(1)="The Study Number is generated by the modality."
- S X=$$GETKEY(ATTRIB,PROMPT,.HELP)
- Q
- ;
- REQPROID ; enter the requested procedure id
- N HELP,PROMPT,X
- S PROMPT="Enter the Requested Procedure ID"
- S HELP(1)="The Requested Procedure ID is generated by VistA."
- S HELP(2)="For Radiology, it is Case Number."
- S HELP(3)="For CPRS requests, it is the consult or procedure number."
- S X=$$GETKEY(ATTRIB,PROMPT,.HELP)
- Q
- ;
- SPSTEPID ; enter the scheduled procedure step id
- N HELP,PROMPT,X
- S PROMPT="Enter the Scheduled Procedure Step ID"
- S HELP(1)="The studies generated by VistA, it is the Accession Number."
- S X=$$GETKEY(ATTRIB,PROMPT,.HELP)
- Q
- ;
- STUDYUID ; enter the study instance uid
- N HELP,PROMPT,X
- S PROMPT="Enter the Study Instance UID"
- S X=$$GETKEY(ATTRIB,PROMPT,.HELP,"$$CHECKUID(.X)")
- Q
- ;
- SERIEUID ; enter the series instance uid
- N HELP,PROMPT,X
- S PROMPT="Enter the Series Instance UID"
- S X=$$GETKEY(ATTRIB,PROMPT,.HELP,"$$CHECKUID(.X)")
- Q
- ;
- SOPUID ; enter the SOP instance uid
- N HELP,PROMPT,X
- S PROMPT="Enter the SOP Instance UID"
- S X=$$GETKEY(ATTRIB,PROMPT,.HELP,"$$CHECKUID(.X)")
- Q
- ;
- CHECKUID(X) ; check the format of the uid
- N RETURN
- S RETURN=-1
- I X?.(1N.N1".")1N.N S RETURN=0
- Q RETURN
- ;
- MODALITY ; select the modality
- N HELP,PROMPT,X
- S PROMPT="Enter the Modality Code"
- S HELP(1)="Please enter the DICOM modality value"
- S HELP(2)="Examples: CR, CT, DX, MR, NM, RF, US, XA"
- S X=$$GETKEY(ATTRIB,PROMPT,.HELP,"$$CHECKMOD(.X)")
- Q
- ;
- CHECKMOD(X) ; check the validity of the entered modality value
- N DICTIEN,MODALIEN,RETURN,Y
- X ^%ZOSF("UPPERCASE") S X=Y
- I X="" S RETURN=0
- E I $$VISTA^MAGDSTQ D
- . S RETURN=0 ; can't check on VistA
- . Q
- E D
- . S DICTIEN=$O(^MAGDICOM(2006.51,"B","0008,0060",""))
- . I 'DICTIEN D
- . . W !!,"Please run the menu option to Reinitialize All the DICOM Master Files",!
- . . S RETURN=-1
- . . Q
- . E S MODALIEN=$O(^MAGDICOM(2006.51,DICTIEN,1,"B",X,"")) I 'MODALIEN D
- . . W !,"*** Warning: Modality """,X,""" is not defined in DICOM."
- . . S RETURN=-1
- . . Q
- . E D
- . . W " -- ",$P($P(^MAGDICOM(2006.51,DICTIEN,1,MODALIEN,0),"^",2),"=",1)
- . . R Y:5
- . . S RETURN=0
- . . Q
- . Q
- Q RETURN
- ;
- BIRTHDAT ; birth date, may be a range
- D GETDATE("B")
- Q
- ;
- STDYDATE ; study date, may be a range
- D GETDATE("S")
- Q
- ;
- GETDATE(TYPE) ; get the date
- N HELP,PROMPT,X
- S PROMPT=$S(TYPE="B":"Birth",1:"Study")_" Date (yyyymmdd or yyyymmdd-yyyymmdd)"
- S HELP(1)="The "_$S(TYPE="B":"birth",1:"study")_" date can be entered in several formats:"
- S HELP(2)=" 1) yyyymmdd (selects only one date)"
- S HELP(3)=" 2) yyyymmdd- (selects that date and subsequent ones)"
- S HELP(4)=" 3) -yyyymmdd (selects that date and prior ones)"
- S HELP(5)=" 4) yyyymmdd-yyyymmdd (selects an inclusive range of dates)"
- S HELP(6)=" 5) FileMan ""T..."" dates are accepted and converted to yyyymmdd"
- S X=$$GETKEY(ATTRIB,PROMPT,.HELP,"$$CHKDATE(.X)")
- Q
- ;
- CHKDATE(X) ; check the date
- I (X?1"T".E)!(X="NOW") D
- . N %DT
- . S %DT="TS" D ^%DT
- . S X=Y\1,$E(X)=$E(X)+17
- . Q
- Q $S(X="":0,X?8N:0,X?8N1"-":0,X?1"-"8N:0,X?8N1"-"8N:0,1:-1)
- ;
- STDYTIME ; study time, may be a range
- N HELP,PROMPT,X
- S PROMPT="Study Time (hhmmss or hhmmss-hhmmss)"
- S HELP(1)="The study time can be entered in several formats:"
- S HELP(2)=" 1) hhmmss (selects only one time - not too useful!)"
- S HELP(3)=" 2) hhmmss- (selects that time and subsequent ones)"
- S HELP(4)=" 3) -hhmmss (selects that time and prior ones)"
- S HELP(5)=" 4) hhmmss-hhmmss (selects an inclusive range of times)"
- S HELP(6)="Note: all times are 24-hour"
- S X=$$GETKEY(ATTRIB,PROMPT,.HELP,"$$CHKTIME(.X)")
- Q
- ;
- CHKTIME(X) ; check the study time
- Q $S(X="":0,X?6N:0,X?6N1"-":0,X?1"-"6N:0,X?6N1"-"6N:0,1:-1)
- ;
- QRROOT ; get query/retrieve root
- N HELP,PROMPT,X
- S PROMPT="Query/Retrieve Root (Patient or Study)"
- S HELP(1)="The Query/Retrieve Root determines the DICOM information model for the query."
- S HELP(2)=""
- S HELP(3)="The Patient Root has four levels: Patient, Study, Series, and Image."
- S HELP(4)=""
- S HELP(5)="The Study Root Information Model has three levels: Study, Series, and Image,"
- S HELP(6)="with the Patient Level information included in the Study Level."
- S HELP(7)=""
- S HELP(8)="If you are only looking for a single study and know the accession number, the"
- S HELP(9)="STUDY Root will allow you search by accession number and find it quickest."
- S HELP(10)=""
- S HELP(11)="If you are looking for all the studies for a patient, use the PATIENT Root."
- S X=$$GETKEY(ATTRIB,PROMPT,.HELP,"$$CHKQRR(.X)")
- Q
- ;
- CHKQRR(X) ; check the query/retrieve root
- N ERROR,Y,Z S ERROR=1
- X ^%ZOSF("UPPERCASE") S X=Y
- I $E(X)="P" S X="PATIENT",ERROR=0
- E I $E(X)="S" D
- . S X="STUDY",ERROR=0
- . I $G(^TMP("MAG",$J,"Q/R PARAM","QUERY LEVEL"))="PATIENT" D
- . . W !,"Patient Level queries are not supported for Study Root -- changing to STUDY"
- . . R Z:5
- . . S ^TMP("MAG",$J,"Q/R PARAM","QUERY LEVEL")="STUDY"
- . . Q
- . Q
- Q ERROR
- ;
- GETKEY(ATTRIB,PROMPT,HELP,CHECK) ; get the value for the key
- N DONE,DEFAULT,I,X
- S DEFAULT=$G(^TMP("MAG",$J,"Q/R QUERY",QRSTACK,ATTRIB))
- S DONE="" F D Q:DONE
- . W !!,PROMPT,": " I DEFAULT'="" W DEFAULT,"// "
- . R X:DTIME I X="" S X=DEFAULT W X
- . I X["?" D
- . . W ! S I=0 F S I=$O(HELP(I)) Q:'I W !,HELP(I)
- . . I DEFAULT'="" W !!,"(Enter ""@"" to delete the """,DEFAULT,""" value)"
- . . Q
- . E S DONE=1 I X'="^" D ; a caret will terminate the program
- . . I X="@" D
- . . . K ^TMP("MAG",$J,"Q/R QUERY",QRSTACK,ATTRIB) W " -- deleted"
- . . . I ATTRIB?1"PATIENT".E K ^TMP("MAG",$J,"Q/R PARAM","PATIENT LOOKUP MODE") ; reset VistA/Manual Mode
- . . . Q
- . . E D
- . . . I $D(CHECK),@CHECK D W "Illegal Value" S DONE=0
- . . . . I $X>60 W !
- . . . . E W " "
- . . . . Q
- . . . E S ^TMP("MAG",$J,"Q/R QUERY",QRSTACK,ATTRIB)=X
- . . . Q
- . . Q
- . Q
- Q X
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HMAGDSTQ1 12247 printed Feb 18, 2025@23:28:25 Page 2
- MAGDSTQ1 ;WOIFO/PMK - Study Tracker - Query/Retrieve user ; Feb 15, 2022@10:52:44
- +1 ;;3.0;IMAGING;**231,305**;Mar 19, 2002;Build 3
- +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 ;; | The Food and Drug Administration classifies this software as |
- +11 ;; | a medical device. As such, it may not be changed in any way. |
- +12 ;; | Modifications to this software may result in an adulterated |
- +13 ;; | medical device under 21CFR820, the use of which is considered |
- +14 ;; | to be a violation of US Federal Statutes. |
- +15 ;; +---------------------------------------------------------------+
- +16 ;;
- +17 ;
- +18 ; Notice: This routine is on both VistA and the DICOM Gateway
- +19 ;
- +20 ;
- +21 QUIT
- +22 ;
- PNAME ; get patient name attribute
- +1 NEW HELP,PROMPT,X
- +2 SET PATLKUPMODE=$$GETMODE()
- +3 ; routine for VistA
- IF PATLKUPMODE="VISTA"
- Begin DoDot:1
- +4 DO PATIENTQ^MAGDSTQ7
- +5 QUIT
- End DoDot:1
- +6 IF '$TEST
- Begin DoDot:1
- +7 SET PROMPT="Enter the Patient Name"
- +8 SET HELP(1)="Enter the Patient Name in ""LAST^FIRST^MIDDLE"" format"
- +9 SET HELP(2)="You can enter a partial match and use ""*"" as a wild-card"
- +10 SET X=$$GETKEY(ATTRIB,PROMPT,.HELP)
- +11 DO CHKNAME(ATTRIB)
- +12 QUIT
- End DoDot:1
- +13 QUIT
- +14 ;
- CHKNAME(ATTRIB) ; convert comma(s) to caret(s) & remove leading spaces
- +1 IF $DATA(^TMP("MAG",$JOB,"Q/R QUERY",QRSTACK,ATTRIB))
- SET ^(ATTRIB)=$TRANSLATE(^(ATTRIB),",","^")
- +2 ; remove any spaces before delimiters
- +3 FOR
- if $GET(^TMP("MAG",$JOB,"Q/R QUERY",QRSTACK,ATTRIB))'[" ^"
- QUIT
- Begin DoDot:1
- +4 SET ^(ATTRIB)=$PIECE(^TMP("MAG",$JOB,"Q/R QUERY",QRSTACK,ATTRIB)," ^",1)_"^"_$PIECE(^(ATTRIB)," ^",2,999)
- +5 QUIT
- End DoDot:1
- +6 ; remove any spaces after delimiters
- +7 FOR
- if $GET(^TMP("MAG",$JOB,"Q/R QUERY",QRSTACK,ATTRIB))'["^ "
- QUIT
- Begin DoDot:1
- +8 SET ^(ATTRIB)=$PIECE(^TMP("MAG",$JOB,"Q/R QUERY",QRSTACK,ATTRIB),"^ ",1)_"^"_$PIECE(^(ATTRIB),"^ ",2,999)
- +9 QUIT
- End DoDot:1
- +10 IF $DATA(^TMP("MAG",$JOB,"Q/R QUERY",QRSTACK,ATTRIB))
- SET ^(ATTRIB)=$TRANSLATE(^(ATTRIB),",","^")
- +11 QUIT
- +12 ;
- PID ; get patient id attribute
- +1 NEW HELP,PROMPT,X
- +2 SET PATLKUPMODE=$$GETMODE()
- +3 ; routine for VistA
- IF PATLKUPMODE="VISTA"
- Begin DoDot:1
- +4 DO PATIENTQ^MAGDSTQ7
- +5 QUIT
- End DoDot:1
- +6 IF '$TEST
- Begin DoDot:1
- +7 SET PROMPT="Enter the Patient ID"
- +8 SET HELP(1)="Enter the Patient ID (Social Security Number)"
- +9 SET X=$$GETKEY(ATTRIB,PROMPT,.HELP)
- +10 QUIT
- End DoDot:1
- +11 QUIT
- +12 ;
- GETMODE() ; get the patient lookup CLIENT for manual Q/R client
- +1 NEW HELP,X
- +2 SET PATLKUPMODE=$GET(^TMP("MAG",$JOB,"Q/R PARAM","PATIENT LOOKUP MODE"),"<undef>")
- +3 IF PATLKUPMODE="<undef>"
- Begin DoDot:1
- +4 ; On gateway w/o RPCs
- IF '$$VISTA^MAGDSTQ
- IF '$DATA(^TMP("MAG",$JOB,"DICOM RPC USER"))
- SET PATLKUPMODE="MANUAL"
- QUIT
- +5 IF $$YESNO^MAGDSTQ("Use VistA Patient identification information for PACS Query/Retrieve?","y",.X,.HELP)<0
- if ""
- QUIT
- +6 SET PATLKUPMODE=$SELECT(X="YES":"VISTA",1:"MANUAL")
- +7 SET ^TMP("MAG",$JOB,"Q/R PARAM","PATIENT LOOKUP MODE")=PATLKUPMODE
- +8 IF PATLKUPMODE="VISTA"
- Begin DoDot:2
- +9 DO ASKDASH^MAGDSTQ0
- +10 QUIT
- End DoDot:2
- +11 QUIT
- End DoDot:1
- +12 QUIT PATLKUPMODE
- +13 ;
- SEX ; get the patient's sex
- +1 NEW HELP,PROMPT,X
- +2 SET PROMPT="Enter the sex of the patient"
- +3 SET HELP(1)="Enter M for male, F for female, or O for other."
- +4 SET X=$$GETKEY(ATTRIB,PROMPT,.HELP,"$$CHECKSEX(.X)")
- +5 QUIT
- +6 ;
- CHECKSEX(X) ;
- +1 NEW RETURN,Y
- +2 SET RETURN=-1
- +3 ; allow only a single uppercase letter
- SET X=$EXTRACT(X)
- +4 XECUTE ^%ZOSF("UPPERCASE")
- SET X=Y
- +5 IF "MFO"[X
- SET RETURN=0
- +6 QUIT RETURN
- +7 ;
- ACNUMB ; enter the accession number
- +1 NEW ANPREFIX,HELP,PROMPT,X
- +2 SET PROMPT="Enter the Accession Number"
- +3 SET ANPREFIX=$GET(^TMP("MAG",$JOB,"Q/R PARAM","ACCESSION NUMBER PREFIX"),"<undef>")
- +4 IF ANPREFIX'="<undef>"
- IF ANPREFIX'=""
- SET PROMPT=PROMPT_" ("_ANPREFIX_")"
- +5 SET HELP(1)="For Radiology, the Accession Number is the Date-Case Number or Site-Date-Case Number."
- +6 SET HELP(2)="For CPRS Requests, it is ""GMRC-"" followed by the request number, or"
- +7 SET HELP(3)="Site-GMR-Request Number, where Site is the station number."
- +8 SET X=$$GETKEY(ATTRIB,PROMPT,.HELP)
- +9 IF "@^"'[X
- SET X=$$ANPREFIX
- +10 QUIT
- +11 ;
- ANPREFIX() ; add the site-specific accession number prefix
- +1 NEW ANPREFIX,RETURN
- +2 ; <station name> - MMDDYY - <case number>
- IF $LENGTH(X,"-")=3
- SET RETURN=0
- +3 IF '$TEST
- Begin DoDot:1
- +4 SET ANPREFIX=$GET(^TMP("MAG",$JOB,"Q/R PARAM","ACCESSION NUMBER PREFIX"),"<undef>")
- +5 IF ANPREFIX="<undef>"
- Begin DoDot:2
- +6 ; VistA code - call API
- IF $$VISTA^MAGDSTQ
- Begin DoDot:3
- +7 SET ANPREFIX=$$ANPREFIX^MAGDSTAB
- +8 QUIT
- End DoDot:3
- +9 ; DICOM Gateway code - call RPC
- IF '$TEST
- Begin DoDot:3
- +10 NEW RPCERR
- +11 ; no RPC
- IF '$DATA(^TMP("MAG",$JOB,"DICOM RPC USER"))
- Begin DoDot:4
- +12 SET ANPREFIX=""
- +13 QUIT
- End DoDot:4
- QUIT
- +14 SET RPCERR=$$CALLRPC^MAGM2VCU("MAG DICOM GET ACN PREFIX","M",.ANPREFIX)
- +15 IF RPCERR<0
- Begin DoDot:4
- +16 DO ERRORMSG^MAGDSTQ0(1,"Error in MAG DICOM GET ACN PREFIX rpc",.ANPREFIX)
- +17 QUIT
- End DoDot:4
- SET OUTPUT(0)=-1
- QUIT
- +18 QUIT
- End DoDot:3
- +19 ; allow the accession number prefix to be changed
- SET ANPREFIX=$$GETANPFX(ANPREFIX)
- +20 SET ^TMP("MAG",$JOB,"Q/R PARAM","ACCESSION NUMBER PREFIX")=ANPREFIX
- +21 QUIT
- End DoDot:2
- +22 SET RETURN=1
- +23 IF $DATA(^TMP("MAG",$JOB,"Q/R QUERY",QRSTACK,ATTRIB))
- SET ^(ATTRIB)=ANPREFIX_^(ATTRIB)
- +24 QUIT
- End DoDot:1
- +25 QUIT RETURN
- +26 ;
- GETANPFX(DEFAULT) ; get the accession number prefix
- +1 NEW ANPREFIX,OK
- +2 SET OK=0
- FOR
- Begin DoDot:1
- +3 WRITE !!,"Enter the Accession Number Prefix: "
- +4 IF $LENGTH(DEFAULT)
- WRITE DEFAULT,"// "
- +5 READ ANPREFIX:DTIME
- IF '$TEST
- SET OK=-1
- QUIT
- +6 IF ANPREFIX=""
- IF $LENGTH(DEFAULT)
- SET ANPREFIX=DEFAULT
- WRITE ANPREFIX
- +7 IF ANPREFIX=""
- WRITE " -- use ""@"" to remove it"
- QUIT
- +8 IF ANPREFIX["^"
- SET OK=-1
- QUIT
- +9 IF ANPREFIX="@"
- SET ANPREFIX=""
- +10 IF ANPREFIX?0.4(1U,1N,1"-")
- SET OK=1
- +11 IF '$TEST
- WRITE " ???",!,"Please enter ""@"" or 1-4 characters (numeric, uppercase characters, hyphen)"
- +12 QUIT
- End DoDot:1
- if OK
- QUIT
- +13 QUIT ANPREFIX
- +14 ;
- REFDOC ;
- +1 NEW HELP,PROMPT,X
- +2 SET PROMPT="Enter the Referring Physician's name"
- +3 SET HELP(1)="Enter the Referring Physician's name in ""LAST^FIRST^MI"" format"
- +4 SET X=$$GETKEY(ATTRIB,PROMPT,.HELP)
- +5 DO CHKNAME(ATTRIB)
- +6 QUIT
- +7 ;
- STUDYID ; enter the study id
- +1 NEW HELP,PROMPT,X
- +2 SET PROMPT="Enter the Study Identifier"
- +3 SET HELP(1)="The Study Identifier is generated by the modality."
- +4 SET X=$$GETKEY(ATTRIB,PROMPT,.HELP)
- +5 QUIT
- +6 ;
- SERIESNO ; enter the series number
- +1 NEW HELP,PROMPT,X
- +2 SET PROMPT="Enter the Series Number"
- +3 SET HELP(1)="The Study Number is generated by the modality."
- +4 SET X=$$GETKEY(ATTRIB,PROMPT,.HELP)
- +5 QUIT
- +6 ;
- REQPROID ; enter the requested procedure id
- +1 NEW HELP,PROMPT,X
- +2 SET PROMPT="Enter the Requested Procedure ID"
- +3 SET HELP(1)="The Requested Procedure ID is generated by VistA."
- +4 SET HELP(2)="For Radiology, it is Case Number."
- +5 SET HELP(3)="For CPRS requests, it is the consult or procedure number."
- +6 SET X=$$GETKEY(ATTRIB,PROMPT,.HELP)
- +7 QUIT
- +8 ;
- SPSTEPID ; enter the scheduled procedure step id
- +1 NEW HELP,PROMPT,X
- +2 SET PROMPT="Enter the Scheduled Procedure Step ID"
- +3 SET HELP(1)="The studies generated by VistA, it is the Accession Number."
- +4 SET X=$$GETKEY(ATTRIB,PROMPT,.HELP)
- +5 QUIT
- +6 ;
- STUDYUID ; enter the study instance uid
- +1 NEW HELP,PROMPT,X
- +2 SET PROMPT="Enter the Study Instance UID"
- +3 SET X=$$GETKEY(ATTRIB,PROMPT,.HELP,"$$CHECKUID(.X)")
- +4 QUIT
- +5 ;
- SERIEUID ; enter the series instance uid
- +1 NEW HELP,PROMPT,X
- +2 SET PROMPT="Enter the Series Instance UID"
- +3 SET X=$$GETKEY(ATTRIB,PROMPT,.HELP,"$$CHECKUID(.X)")
- +4 QUIT
- +5 ;
- SOPUID ; enter the SOP instance uid
- +1 NEW HELP,PROMPT,X
- +2 SET PROMPT="Enter the SOP Instance UID"
- +3 SET X=$$GETKEY(ATTRIB,PROMPT,.HELP,"$$CHECKUID(.X)")
- +4 QUIT
- +5 ;
- CHECKUID(X) ; check the format of the uid
- +1 NEW RETURN
- +2 SET RETURN=-1
- +3 IF X?.(1N.N1".")1N.N
- SET RETURN=0
- +4 QUIT RETURN
- +5 ;
- MODALITY ; select the modality
- +1 NEW HELP,PROMPT,X
- +2 SET PROMPT="Enter the Modality Code"
- +3 SET HELP(1)="Please enter the DICOM modality value"
- +4 SET HELP(2)="Examples: CR, CT, DX, MR, NM, RF, US, XA"
- +5 SET X=$$GETKEY(ATTRIB,PROMPT,.HELP,"$$CHECKMOD(.X)")
- +6 QUIT
- +7 ;
- CHECKMOD(X) ; check the validity of the entered modality value
- +1 NEW DICTIEN,MODALIEN,RETURN,Y
- +2 XECUTE ^%ZOSF("UPPERCASE")
- SET X=Y
- +3 IF X=""
- SET RETURN=0
- +4 IF '$TEST
- IF $$VISTA^MAGDSTQ
- Begin DoDot:1
- +5 ; can't check on VistA
- SET RETURN=0
- +6 QUIT
- End DoDot:1
- +7 IF '$TEST
- Begin DoDot:1
- +8 SET DICTIEN=$ORDER(^MAGDICOM(2006.51,"B","0008,0060",""))
- +9 IF 'DICTIEN
- Begin DoDot:2
- +10 WRITE !!,"Please run the menu option to Reinitialize All the DICOM Master Files",!
- +11 SET RETURN=-1
- +12 QUIT
- End DoDot:2
- +13 IF '$TEST
- SET MODALIEN=$ORDER(^MAGDICOM(2006.51,DICTIEN,1,"B",X,""))
- IF 'MODALIEN
- Begin DoDot:2
- +14 WRITE !,"*** Warning: Modality """,X,""" is not defined in DICOM."
- +15 SET RETURN=-1
- +16 QUIT
- End DoDot:2
- +17 IF '$TEST
- Begin DoDot:2
- +18 WRITE " -- ",$PIECE($PIECE(^MAGDICOM(2006.51,DICTIEN,1,MODALIEN,0),"^",2),"=",1)
- +19 READ Y:5
- +20 SET RETURN=0
- +21 QUIT
- End DoDot:2
- +22 QUIT
- End DoDot:1
- +23 QUIT RETURN
- +24 ;
- BIRTHDAT ; birth date, may be a range
- +1 DO GETDATE("B")
- +2 QUIT
- +3 ;
- STDYDATE ; study date, may be a range
- +1 DO GETDATE("S")
- +2 QUIT
- +3 ;
- GETDATE(TYPE) ; get the date
- +1 NEW HELP,PROMPT,X
- +2 SET PROMPT=$SELECT(TYPE="B":"Birth",1:"Study")_" Date (yyyymmdd or yyyymmdd-yyyymmdd)"
- +3 SET HELP(1)="The "_$SELECT(TYPE="B":"birth",1:"study")_" date can be entered in several formats:"
- +4 SET HELP(2)=" 1) yyyymmdd (selects only one date)"
- +5 SET HELP(3)=" 2) yyyymmdd- (selects that date and subsequent ones)"
- +6 SET HELP(4)=" 3) -yyyymmdd (selects that date and prior ones)"
- +7 SET HELP(5)=" 4) yyyymmdd-yyyymmdd (selects an inclusive range of dates)"
- +8 SET HELP(6)=" 5) FileMan ""T..."" dates are accepted and converted to yyyymmdd"
- +9 SET X=$$GETKEY(ATTRIB,PROMPT,.HELP,"$$CHKDATE(.X)")
- +10 QUIT
- +11 ;
- CHKDATE(X) ; check the date
- +1 IF (X?1"T".E)!(X="NOW")
- Begin DoDot:1
- +2 NEW %DT
- +3 SET %DT="TS"
- DO ^%DT
- +4 SET X=Y\1
- SET $EXTRACT(X)=$EXTRACT(X)+17
- +5 QUIT
- End DoDot:1
- +6 QUIT $SELECT(X="":0,X?8N:0,X?8N1"-":0,X?1"-"8N:0,X?8N1"-"8N:0,1:-1)
- +7 ;
- STDYTIME ; study time, may be a range
- +1 NEW HELP,PROMPT,X
- +2 SET PROMPT="Study Time (hhmmss or hhmmss-hhmmss)"
- +3 SET HELP(1)="The study time can be entered in several formats:"
- +4 SET HELP(2)=" 1) hhmmss (selects only one time - not too useful!)"
- +5 SET HELP(3)=" 2) hhmmss- (selects that time and subsequent ones)"
- +6 SET HELP(4)=" 3) -hhmmss (selects that time and prior ones)"
- +7 SET HELP(5)=" 4) hhmmss-hhmmss (selects an inclusive range of times)"
- +8 SET HELP(6)="Note: all times are 24-hour"
- +9 SET X=$$GETKEY(ATTRIB,PROMPT,.HELP,"$$CHKTIME(.X)")
- +10 QUIT
- +11 ;
- CHKTIME(X) ; check the study time
- +1 QUIT $SELECT(X="":0,X?6N:0,X?6N1"-":0,X?1"-"6N:0,X?6N1"-"6N:0,1:-1)
- +2 ;
- QRROOT ; get query/retrieve root
- +1 NEW HELP,PROMPT,X
- +2 SET PROMPT="Query/Retrieve Root (Patient or Study)"
- +3 SET HELP(1)="The Query/Retrieve Root determines the DICOM information model for the query."
- +4 SET HELP(2)=""
- +5 SET HELP(3)="The Patient Root has four levels: Patient, Study, Series, and Image."
- +6 SET HELP(4)=""
- +7 SET HELP(5)="The Study Root Information Model has three levels: Study, Series, and Image,"
- +8 SET HELP(6)="with the Patient Level information included in the Study Level."
- +9 SET HELP(7)=""
- +10 SET HELP(8)="If you are only looking for a single study and know the accession number, the"
- +11 SET HELP(9)="STUDY Root will allow you search by accession number and find it quickest."
- +12 SET HELP(10)=""
- +13 SET HELP(11)="If you are looking for all the studies for a patient, use the PATIENT Root."
- +14 SET X=$$GETKEY(ATTRIB,PROMPT,.HELP,"$$CHKQRR(.X)")
- +15 QUIT
- +16 ;
- CHKQRR(X) ; check the query/retrieve root
- +1 NEW ERROR,Y,Z
- SET ERROR=1
- +2 XECUTE ^%ZOSF("UPPERCASE")
- SET X=Y
- +3 IF $EXTRACT(X)="P"
- SET X="PATIENT"
- SET ERROR=0
- +4 IF '$TEST
- IF $EXTRACT(X)="S"
- Begin DoDot:1
- +5 SET X="STUDY"
- SET ERROR=0
- +6 IF $GET(^TMP("MAG",$JOB,"Q/R PARAM","QUERY LEVEL"))="PATIENT"
- Begin DoDot:2
- +7 WRITE !,"Patient Level queries are not supported for Study Root -- changing to STUDY"
- +8 READ Z:5
- +9 SET ^TMP("MAG",$JOB,"Q/R PARAM","QUERY LEVEL")="STUDY"
- +10 QUIT
- End DoDot:2
- +11 QUIT
- End DoDot:1
- +12 QUIT ERROR
- +13 ;
- GETKEY(ATTRIB,PROMPT,HELP,CHECK) ; get the value for the key
- +1 NEW DONE,DEFAULT,I,X
- +2 SET DEFAULT=$GET(^TMP("MAG",$JOB,"Q/R QUERY",QRSTACK,ATTRIB))
- +3 SET DONE=""
- FOR
- Begin DoDot:1
- +4 WRITE !!,PROMPT,": "
- IF DEFAULT'=""
- WRITE DEFAULT,"// "
- +5 READ X:DTIME
- IF X=""
- SET X=DEFAULT
- WRITE X
- +6 IF X["?"
- Begin DoDot:2
- +7 WRITE !
- SET I=0
- FOR
- SET I=$ORDER(HELP(I))
- if 'I
- QUIT
- WRITE !,HELP(I)
- +8 IF DEFAULT'=""
- WRITE !!,"(Enter ""@"" to delete the """,DEFAULT,""" value)"
- +9 QUIT
- End DoDot:2
- +10 ; a caret will terminate the program
- IF '$TEST
- SET DONE=1
- IF X'="^"
- Begin DoDot:2
- +11 IF X="@"
- Begin DoDot:3
- +12 KILL ^TMP("MAG",$JOB,"Q/R QUERY",QRSTACK,ATTRIB)
- WRITE " -- deleted"
- +13 ; reset VistA/Manual Mode
- IF ATTRIB?1"PATIENT".E
- KILL ^TMP("MAG",$JOB,"Q/R PARAM","PATIENT LOOKUP MODE")
- +14 QUIT
- End DoDot:3
- +15 IF '$TEST
- Begin DoDot:3
- +16 IF $DATA(CHECK)
- IF @CHECK
- Begin DoDot:4
- +17 IF $X>60
- WRITE !
- +18 IF '$TEST
- WRITE " "
- +19 QUIT
- End DoDot:4
- WRITE "Illegal Value"
- SET DONE=0
- +20 IF '$TEST
- SET ^TMP("MAG",$JOB,"Q/R QUERY",QRSTACK,ATTRIB)=X
- +21 QUIT
- End DoDot:3
- +22 QUIT
- End DoDot:2
- +23 QUIT
- End DoDot:1
- if DONE
- QUIT
- +24 QUIT X