| 1 | MAGDRPC9 ;WOIFO/EdM - Imaging RPCs ; 11/03/2005  14:48
 | 
|---|
| 2 |  ;;3.0;IMAGING;**50**;26-May-2006
 | 
|---|
| 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 |  ;; |                                                               |
 | 
|---|
| 11 |  ;; | The Food and Drug Administration classifies this software as  |
 | 
|---|
| 12 |  ;; | a medical device.  As such, it may not be changed in any way. |
 | 
|---|
| 13 |  ;; | Modifications to this software may result in an adulterated   |
 | 
|---|
| 14 |  ;; | medical device under 21CFR820, the use of which is considered |
 | 
|---|
| 15 |  ;; | to be a violation of US Federal Statutes.                     |
 | 
|---|
| 16 |  ;; +---------------------------------------------------------------+
 | 
|---|
| 17 |  ;;
 | 
|---|
| 18 |  Q
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 | NEWUID(OUT,OLD,NEW,IMAGE) ; RPC = MAG NEW SOP INSTANCE UID
 | 
|---|
| 21 |  N D0,L,X
 | 
|---|
| 22 |  S IMAGE=+$G(IMAGE),OLD=$G(OLD)
 | 
|---|
| 23 |  S:$G(NEW)="" NEW=OLD
 | 
|---|
| 24 |  S D0=0 S:OLD'="" D0=$O(^MAG(2005,"P",OLD,""))
 | 
|---|
| 25 |  I IMAGE,D0,IMAGE'=D0 S OUT="-1,UID cannot belong to multiple images ("_IMAGE_"/"_D0_")" Q
 | 
|---|
| 26 |  I IMAGE,'D0 S D0=IMAGE
 | 
|---|
| 27 |  I 'D0 S OUT="-2,Cannot find image with UID "_OLD Q
 | 
|---|
| 28 |  S OUT=$P($G(^MAG(2005,D0,"SOP")),"^",2) Q:OUT'=""
 | 
|---|
| 29 |  S L=$L(NEW,".")-1,X=$P(NEW,".",L+1),L=$P(NEW,".",1,L)_"."
 | 
|---|
| 30 |  L +^MAG(2005,"P"):1E9 ; Background process MUST wait
 | 
|---|
| 31 |  S OUT="" F  D  Q:OUT'=""
 | 
|---|
| 32 |  . S OUT=L_X
 | 
|---|
| 33 |  . I $L(OUT)>64 S OUT="-3,Cannot use "_NEW_" to create valid UID" Q
 | 
|---|
| 34 |  . I $D(^MAG(2005,"P",OUT)) S OUT="",X=X+1 Q
 | 
|---|
| 35 |  . S $P(^MAG(2005,D0,"SOP"),"^",2)=OUT
 | 
|---|
| 36 |  . S ^MAG(2005,"P",OUT,D0)=1
 | 
|---|
| 37 |  . Q
 | 
|---|
| 38 |  L -^MAG(2005,"P")
 | 
|---|
| 39 |  Q
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 | NEXT(OUT,SEED,DIR) ; RPC = MAG RAD GET NEXT RPT BY DATE
 | 
|---|
| 42 |  N D2,DFN,EXAMDATE,NAME
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 |  ; ^RADPT(DFN,"DT",D1,"P",D2,0) = Data, $P(17) = pointer to report
 | 
|---|
| 45 |  ; ^RADPT("AR",9999999.9999-D1,DFN,D1)="" ; IA # 65
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 |  ; OUT = report_pointer ^ ExamDate ^ Patient ^ D2
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 |  S SEED=$G(SEED),DIR=$S($G(DIR)<0:-1,1:1) ; default is ascending order
 | 
|---|
| 50 |  S EXAMDATE=$P(SEED,"^",1),DFN=$P(SEED,"^",2),D2=$P(SEED,"^",3)
 | 
|---|
| 51 |  S OUT=0 F  D  Q:OUT
 | 
|---|
| 52 |  . I EXAMDATE="" S EXAMDATE=$O(^RADPT("AR",""),DIR),DFN="" ; IA # 65
 | 
|---|
| 53 |  . I EXAMDATE="" S OUT=-1 Q
 | 
|---|
| 54 |  . I DFN="" S DFN=$O(^RADPT("AR",EXAMDATE,""),DIR) ; IA # 65
 | 
|---|
| 55 |  . I DFN="" S EXAMDATE=$O(^RADPT("AR",EXAMDATE),DIR),D2="" Q  ; IA # 65
 | 
|---|
| 56 |  . S:'D2 D2=$S(DIR>0:0,1:" ")
 | 
|---|
| 57 |  . S D2=$O(^RADPT(DFN,"DT",9999999.9999-EXAMDATE,"P",D2),DIR) ; IA # 1172
 | 
|---|
| 58 |  . I 'D2 D  Q
 | 
|---|
| 59 |  . . S DFN=$O(^RADPT("AR",EXAMDATE,DFN),DIR),D2="" ; IA # 65
 | 
|---|
| 60 |  . . I 'DFN D
 | 
|---|
| 61 |  . . . S EXAMDATE=$O(^RADPT("AR",EXAMDATE),DIR),DFN="" ; IA # 65
 | 
|---|
| 62 |  . . . I EXAMDATE="" S OUT=-1
 | 
|---|
| 63 |  . . . Q
 | 
|---|
| 64 |  . . Q
 | 
|---|
| 65 |  . S OUT=$P($G(^RADPT(DFN,"DT",9999999.9999-EXAMDATE,"P",D2,0)),"^",17) ; IA # 1172
 | 
|---|
| 66 |  . S:OUT OUT=OUT_"^"_EXAMDATE_"^"_DFN_"^"_D2
 | 
|---|
| 67 |  . Q
 | 
|---|
| 68 |  Q
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 | NXTPTRPT(OUT,DFN,RARPT1,DIR) ; RPC = MAG RAD GET NEXT RPT BY PT
 | 
|---|
| 71 |  S DFN=$G(DFN)
 | 
|---|
| 72 |  I 'DFN S OUT="-1,Patient DFN not passed" Q
 | 
|---|
| 73 |  I '$D(^RARPT("C",DFN)) S OUT="-2,Patient does not have any radiology reports" Q  ; IA # 2442
 | 
|---|
| 74 |  S RARPT1=$G(RARPT1),DIR=$S($G(DIR)<0:-1,1:1) ; default is ascending order
 | 
|---|
| 75 |  S OUT=$O(^RARPT("C",DFN,RARPT1),DIR) ; IA # 2442
 | 
|---|
| 76 |  Q
 | 
|---|
| 77 |  ;
 | 
|---|
| 78 | GETICN(OUT,DFN) ; RPC = MAG DICOM GET ICN
 | 
|---|
| 79 |  S OUT=$$GETICN^MPIF001(DFN)
 | 
|---|
| 80 |  Q
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 | CLEAN ; Overflow from MAGDRPC4
 | 
|---|
| 83 |  N STUID
 | 
|---|
| 84 |  S S0=$P(SENT(I),"^",1),S1=$P(SENT(I),"^",2)
 | 
|---|
| 85 |  Q:'$D(^MAGDOUTP(2006.574,S0,1,S1))
 | 
|---|
| 86 |  L +^MAGDOUTP(2006.574,S0,1,0):1E9 ; Background process MUST wait
 | 
|---|
| 87 |  S X=$G(^MAGDOUTP(2006.574,S0,0)),LOC=$P(X,"^",4),PRI=+$P(X,"^",5)
 | 
|---|
| 88 |  S STS=$P($G(^MAGDOUTP(2006.574,S0,1,S1,0)),"^",2)
 | 
|---|
| 89 |  K ^MAGDOUTP(2006.574,S0,1,S1)
 | 
|---|
| 90 |  I LOC'="",STS'="" K ^MAGDOUTP(2006.574,"STS",LOC,PRI,STS,S0,S1)
 | 
|---|
| 91 |  S X=$G(^MAGDOUTP(2006.574,S0,1,0))
 | 
|---|
| 92 |  S $P(X,"^",4)=$P(X,"^",4)-1
 | 
|---|
| 93 |  S ^MAGDOUTP(2006.574,S0,1,0)=X
 | 
|---|
| 94 |  L -^MAGDOUTP(2006.574,S0,1,0)
 | 
|---|
| 95 |  Q:$O(^MAGDOUTP(2006.574,S0,1,0))
 | 
|---|
| 96 |  L +^MAGDOUTP(2006.574,0):1E9 ; Background process MUST wait
 | 
|---|
| 97 |  S STUID=$G(^MAGDOUTP(2006.574,S0,2))
 | 
|---|
| 98 |  K ^MAGDOUTP(2006.574,S0)
 | 
|---|
| 99 |  K:STUID'="" ^MAGDOUTP(2006.574,"STUDY",STUID)
 | 
|---|
| 100 |  S X=$G(^MAGDOUTP(2006.574,0))
 | 
|---|
| 101 |  S $P(X,"^",4)=$P(X,"^",4)-1
 | 
|---|
| 102 |  S ^MAGDOUTP(2006.574,0)=X
 | 
|---|
| 103 |  L -^MAGDOUTP(2006.574,0)
 | 
|---|
| 104 |  Q
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 | IENLOOK ; Overflow from MAGDRPC4
 | 
|---|
| 107 |  ; lookup image by the IEN
 | 
|---|
| 108 |  N D0,GROUPIEN,P,X
 | 
|---|
| 109 |  S NUMBER=+$P(NUMBER,"`",2)
 | 
|---|
| 110 |  ; patient safety checks
 | 
|---|
| 111 |  D CHK^MAGGSQI(.X,NUMBER) I +$G(X(0))'=1 D  Q
 | 
|---|
| 112 |  . S OUT(1)="-9,"_$P(X(0),"^",2,999)
 | 
|---|
| 113 |  . Q
 | 
|---|
| 114 |  S GROUPIEN=$P($G(^MAG(2005,NUMBER,0)),"^",10)
 | 
|---|
| 115 |  I GROUPIEN D CHK^MAGGSQI(.X,GROUPIEN) I +$G(X(0))'=1 D  Q
 | 
|---|
| 116 |  . S OUT(1)="-10,Group #"_GROUPIEN_": "_$P(X(0),"^",2,999)
 | 
|---|
| 117 |  . Q
 | 
|---|
| 118 |  ;
 | 
|---|
| 119 |  S X=$G(^MAG(2005,NUMBER,2)),P=$P(X,"^",6),D0=$P(X,"^",7)
 | 
|---|
| 120 |  I 'P!'D0 D  ; get parent from group
 | 
|---|
| 121 |  . S:GROUPIEN X=$G(^MAG(2005,GROUPIEN,2)),P=$P(X,"^",6),D0=$P(X,"^",7)
 | 
|---|
| 122 |  . Q
 | 
|---|
| 123 |  ;
 | 
|---|
| 124 |  S OUT(2)=P_"^"_D0_"^"_NUMBER_"^" ; result w/o Accession Number
 | 
|---|
| 125 |  I 'P!'D0 S OUT(1)="-6,Warning - Parent file entry is not present - no Accession Number."
 | 
|---|
| 126 |  E  I P=74 D
 | 
|---|
| 127 |  . S X=P_"^"_D0_"^"_NUMBER_"^"_$P($G(^RARPT(D0,0)),"^",1) ; IA # 1171
 | 
|---|
| 128 |  . S OUT(1)=1,OUT(2)=X
 | 
|---|
| 129 |  . Q
 | 
|---|
| 130 |  E  I P=8925 D
 | 
|---|
| 131 |  . ; get pointer from TIU to consult request
 | 
|---|
| 132 |  . S X=$$GET1^DIQ(8925,D0,1405,"I") ; IA ???
 | 
|---|
| 133 |  . I $P(X,";",2)="GMR(123," D
 | 
|---|
| 134 |  . . S X=P_"^"_D0_"^"_NUMBER_"^GMRC-"_$P(X,";")
 | 
|---|
| 135 |  . . S OUT(1)=1,OUT(2)=X
 | 
|---|
| 136 |  . . Q
 | 
|---|
| 137 |  . E  S OUT(1)="-8,Problem with parent file "_P_", internal entry number "_D0_" - no Accession Number."
 | 
|---|
| 138 |  . Q
 | 
|---|
| 139 |  E  S OUT(1)="-7,Parent file "_P_" not yet supported - no Accession Number."
 | 
|---|
| 140 |  Q
 | 
|---|
| 141 |  ;
 | 
|---|