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

MAGDSTA7.m

Go to the documentation of this file.
  1. MAGDSTA7 ;WOIFO/PMK - Q/R Retrieve of DICOM images from PACS to VistA ; Mar 04, 2022@13:42:59
  1. ;;3.0;IMAGING;**231,305**;Mar 19, 2002;Build 3
  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. ; Supported IA #2056 reference $$GET1^DIQ function call
  1. ; Supported IA #2056 reference GETS^DIQ subroutine call
  1. ; Supported IA #10103 reference $$FMTE^XLFDT function call
  1. ; Controlled IA #4110 to read REQUEST/CONSULTATION file (#123)
  1. ; Controlled IA #3461 to read TIU EXTERNAL DATA LINK (#8825.91)
  1. ;
  1. Q
  1. ;
  1. ; Look for images for partially resulted or completed studies.
  1. ;
  1. MAIN() ; The main loop for the program for consults and procedures
  1. ; Input Variables
  1. ; SCANMODE ;-- "PATIENT", "DATE", or "NUMBER"
  1. ; DIRECTION ;- 1="ASCENDING" or 0="DESCENDING"
  1. ; BATCHSIZE ;- number of consult & procedure requests to process on this run
  1. ; BEGDATE ;--- begin date for search
  1. ; ENDDATE ;-- end date for search
  1. ; QRSCP ;----- default query/retrieve provider
  1. ; HOURS ;----- 24 character string of Y's and N's indicating active times
  1. ;
  1. N GMRCIEN,RUNTIME,STOP,X
  1. ;
  1. D HEADER^MAGDSTAA(0)
  1. ;
  1. ; STOP: -1=error, 0=run completed, 1=run stopped
  1. S STOP=$$CONLKUP()
  1. Q STOP
  1. ;
  1. CONLKUP() ; Find the next study to retrieve
  1. N STOP
  1. I SCANMODE="PATIENT" D
  1. . S STOP=$$PATIENT()
  1. . Q
  1. E I SCANMODE="DATE" D
  1. . S STOP=$$DATE()
  1. . Q
  1. E I SCANMODE="NUMBER" D
  1. . S STOP=$$NUMBER()
  1. . Q
  1. E D
  1. . W !!,"*** Illegal SCAN MODE: """,SCANMODE,""""
  1. . S STOP=-1
  1. . Q
  1. Q STOP
  1. ;
  1. PATIENT() ; use "AD" cross-reference to find studies for a single patient
  1. ; ^GMR(123,"AD",DFN,GMRCDATE,GMRCIEN)=""
  1. N DATEBEG,DATESTOP,DONE,GMRCDATE,STOP
  1. S STOP=0 ; set to stop the q/r process
  1. D SETDATES(.DATEBEG,.DATESTOP,BEGDATE,ENDDATE,DIRECTION)
  1. S GMRCDATE=DATEBEG,DONE=0
  1. ; reverse date, opposite sort order
  1. F S GMRCDATE=$O(^GMR(123,"AD",DFN,GMRCDATE),-DIRECTION) Q:'GMRCDATE Q:DONE Q:STOP D
  1. . I DIRECTION=1 S DONE=GMRCDATE<DATESTOP Q:DONE
  1. . E S DONE=GMRCDATE>DATESTOP Q:DONE
  1. . S GMRCIEN=""
  1. . F S GMRCIEN=$O(^GMR(123,"AD",DFN,GMRCDATE,GMRCIEN),DIRECTION) Q:'GMRCIEN Q:STOP D
  1. . . ; does this consult get images?
  1. . . I $$CHECK^MAGDSTA6(GMRCIEN)'=1 Q ; nope
  1. . . S STOP=$$CONLKUP1(GMRCIEN)
  1. . . Q
  1. . Q
  1. Q STOP
  1. ;
  1. DATE() ; use "AE" cross-reference to find completed studies
  1. ; ^GMR(123,"AE",SERVICE,STATUS,GMRCDATE,GMRCIEN)=""
  1. ; only look for COMPLETED studies and PARTIAL RESULTS
  1. N DATEBEG,DATESTOP,DONE,GMRCDATE,STATUS,STOP
  1. S STOP=0 ; set to stop the q/r process
  1. D SETDATES(.DATEBEG,.DATESTOP,BEGDATE,ENDDATE,DIRECTION)
  1. S SERVICE="" F S SERVICE=$O(CONSULTSERVICES(SERVICE)) Q:SERVICE="" Q:STOP D
  1. . F STATUS=2,9 D ; STATUS=2 for COMPLETE, STATUS=9 for PARTIAL RESULTS
  1. . . W !!,CONSULTSERVICES(SERVICE)," -- "
  1. . . W $S(STATUS=2:"COMPLETE",STATUS=9:"PARTIAL RESULTS",1:"Unknown Status "_STATUS)
  1. . . S GMRCDATE=DATEBEG,DONE=0
  1. . . ; reverse date, opposite sort order
  1. . . F S GMRCDATE=$O(^GMR(123,"AE",SERVICE,STATUS,GMRCDATE),-DIRECTION) Q:'GMRCDATE Q:DONE Q:STOP D
  1. . . . I DIRECTION=1 S DONE=GMRCDATE<DATESTOP Q:DONE
  1. . . . E S DONE=GMRCDATE>DATESTOP Q:DONE
  1. . . . S GMRCIEN=""
  1. . . . F S GMRCIEN=$O(^GMR(123,"AE",SERVICE,STATUS,GMRCDATE,GMRCIEN),DIRECTION) Q:'GMRCIEN Q:STOP D
  1. . . . . ; does this consult get images?
  1. . . . . I $$CHECK^MAGDSTA6(GMRCIEN)'=1 Q ; nope
  1. . . . . S STOP=$$CONLKUP1(GMRCIEN)
  1. . . . . Q
  1. . . . Q
  1. . . Q
  1. . Q
  1. Q STOP
  1. ;
  1. NUMBER() ; use GMRCIEN to find completed studies
  1. ; ^GMR(123,GMRC)=<consult record>
  1. N BATCHSIZE,GMRCIEN,STOP,STUDYCNT
  1. S STOP=0 ; set to stop the q/r process
  1. S STUDYCNT=0
  1. S BATCHSIZE=$G(^TMP("MAG",$J,"BATCH Q/R","BATCH SIZE"))
  1. S GMRCIEN=$G(^TMP("MAG",$J,"BATCH Q/R","REPORT/STUDY IEN"))
  1. S GMRCIEN=GMRCIEN-DIRECTION ; Massage value for $O
  1. F S GMRCIEN=$O(^GMR(123,GMRCIEN),DIRECTION) Q:'GMRCIEN Q:STUDYCNT>=BATCHSIZE Q:STOP D
  1. . ; does this consult get images?
  1. . I $$CHECK^MAGDSTA6(GMRCIEN)'=1 Q ; nope
  1. . S STUDYCNT=STUDYCNT+1
  1. . S STOP=$$CONLKUP1(GMRCIEN)
  1. . Q
  1. Q STOP
  1. ;
  1. CONLKUP1(GMRCIEN) ; check consult
  1. N ACNUMB,DFN,EXAMDATE,I,ORDERINGFACILITY,MAGIENLIST
  1. ;
  1. S ORDERINGFACILITY=$$GET1^DIQ(123,GMRCIEN,.05,"I")
  1. I $$CHECKDIV^MAGDSTAB()="Y",ORDERINGFACILITY'=DIVISION Q 0 ; not this division
  1. ;
  1. S ACNUMB=$$GMRCACN^MAGDFCNV(GMRCIEN) ; legacy or site-specific
  1. S EXAMDATE=$$GET1^DIQ(123,GMRCIEN,.01,"I")
  1. S DFN=$$GET1^DIQ(123,GMRCIEN,.02,"I")
  1. I $$CONSULT(GMRCIEN,.MAGIENLIST)<0 Q 0
  1. Q $$LOOKUP^MAGDSTAA(DFN,EXAMDATE,GMRCIEN,ACNUMB,.MAGIENLIST)
  1. ;
  1. CONSULT(GMRCIEN,MAGIENLIST) ; return a list of MAG Group IENs
  1. ; A consult may have multiple TIU notes and a TIU note may have multiple image groups.
  1. ; A consult may also have images associated in the DICOM TEMP LIST file (#2006.5839).
  1. N ERROR,GROUPIEN,I,MAG20065839,TIULIST,X
  1. S ERROR=$$CONSULT1(GMRCIEN,.TIULIST)
  1. I ERROR<0 Q ERROR
  1. ; a TIU note may have multiple image groups - get the list
  1. F I=1:1:TIULIST(0) D
  1. . D T892591(TIULIST(I),.MAGIENLIST)
  1. . Q
  1. S MAG20065839=""
  1. F S MAG20065839=$O(^MAG(2006.5839,"C",123,GMRCIEN,MAG20065839)) Q:MAG20065839="" D
  1. . S X=$G(^MAG(2006.5839,MAG20065839,0))
  1. . S GROUPIEN=$P(X,"^",3)
  1. . S MAGIENLIST(GROUPIEN)=""
  1. . Q
  1. Q 0
  1. ;
  1. CONSULT1(GMRCIEN,TIULIST) ; return a list of TIU IENs
  1. ; a consult may have multiple TIU notes - get the list
  1. N A,I,SS2,TIUIEN
  1. K TIULIST ; initialize list of TIU IENs
  1. S TIULIST(0)=0
  1. D GETS^DIQ(123,GMRCIEN,"**","I","A")
  1. I '$D(A) S OUT(1)="-1,Error in CONSULT1 with file #123 GMRCIEN Lookup" Q
  1. S I=0,SS2="",I=0 F S SS2=$O(A(123.03,SS2)) Q:SS2="" D
  1. . S TIUIEN=A(123.03,SS2,.01,"I")
  1. . I $P(TIUIEN,";",2)="TIU(8925," D
  1. . . S I=I+1,TIULIST(0)=I
  1. . . S TIULIST(I)=$P(TIUIEN,";",1)
  1. . . Q
  1. . Q
  1. Q 0
  1. ;
  1. T892591(TIUIEN,MAGIENLIST) ;
  1. N GROUPIEN,TIU892591
  1. S TIU892591=""
  1. F S TIU892591=$O(^TIU(8925.91,"B",TIUIEN,TIU892591)) Q:'TIU892591 D
  1. . S GROUPIEN=$$GET1^DIQ(8925.91,TIU892591,.02,"I")
  1. . S MAGIENLIST(GROUPIEN)=""
  1. . Q
  1. Q
  1. ;
  1. SETDATES(DATEBEG,DATESTOP,BEGDATE,ENDDATE,DIRECTION) ; get date range
  1. ; get the beginning and ending dates for the FOR loop
  1. ; these are in GMRC reverse date format
  1. ; they are also DIRECTION specific
  1. I DIRECTION=1 D ; ascending direction
  1. . S DATEBEG=$$GMRCDATE(BEGDATE)
  1. . S DATESTOP=$$GMRCDATE(ENDDATE)
  1. . Q
  1. E D ; descending direction
  1. . S DATEBEG=$$GMRCDATE(ENDDATE)
  1. . S DATESTOP=$$GMRCDATE(BEGDATE)
  1. . Q
  1. Q
  1. ;
  1. GMRCDATE(GMRCDATE) ; convert a GMRC date to a FM date and vice versa
  1. Q 9999999-GMRCDATE ; unlike radiology which uses 9999999.9999
  1. ;
  1. I CONTINUE D CONTINUE^MAGDSTQ(0)
  1. W @IOF," Patient",?12," Accession ",?30," Date",?40,"Images",?51,"Group #",?60,"VistA",?68,"PACS",?75,"Need"
  1. W !,"---------",?12,"----------------",?30,"--------",?40,"------",?51,"-------",?60,"-----",?68,"----",?75,"----"
  1. Q