| 1 | RAO7PC1 ;HISC/GJC,SS-Procedure Call utilities. ;12/9/02  08:41
 | 
|---|
| 2 |  ;;5.0;Radiology/Nuclear Medicine;**1,16,18,26,36,45,75**;Mar 16, 1998;Build 4
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | EN1(RADFN,RABDT,RAEDT,RAEXN,RACINC) ;
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ; DBIA#2043 - Return list of exams within date range
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  ; ** See routines RAO7PC1A and RAO7PC2 for additional comments **
 | 
|---|
| 9 |  ; ** and output node descriptions                              **
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  ; Input: RADFN-> Patient IEN        RABDT-> beginning date
 | 
|---|
| 12 |  ;        RAEDT-> ending date        RAEXN-> max # of exams
 | 
|---|
| 13 |  ;        RACINC-> include cancelled exams? (1 if yes, default no)
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 |  ; Output:
 | 
|---|
| 16 |  ; ^TMP($J,"RAE1",Patient IEN,Exam ID)=Procedure name^Case number^
 | 
|---|
| 17 |  ;       Report status^Abnormal alert flag^Report ien^
 | 
|---|
| 18 |  ;       Exam status order #~Exam status name^
 | 
|---|
| 19 |  ;       Imaging location name^Imaging type abbr~
 | 
|---|
| 20 |  ;       Imaging type name^abnormal results flag^CPT Code
 | 
|---|
| 21 |  ;       ^CPRS Order ien^Images exist flag
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 |  ;if there are one or more CPT modifiers:
 | 
|---|
| 24 |  ; ^TMP($J,"RAE1",Patient IEN,Exam ID,"CMOD",n)=CPT Mod^CPT Mod Name
 | 
|---|
| 25 |  ;                                         n+1)=CPT Mod^CPT Mod Name
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  ;if CPRS asks to display parent procs, and case is descendent of parent:
 | 
|---|
| 28 |  ; ^TMP($J,"RAE1",Patient IEN,Exam ID,"CPRS")=memb of set^parent prc name
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 |  ; Note: It is possible for the ^TMP global data returned to contain
 | 
|---|
| 31 |  ;       'No Report' and a Report file ien for the same exam.  This is
 | 
|---|
| 32 |  ;       because Imaging can create a report stub in the Report file,
 | 
|---|
| 33 |  ;       but no report interpretation exists and no status is assigned
 | 
|---|
| 34 |  ;       to the report record.
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  ; Exam ID: exam date/time (inverse) concatenated with the case IEN
 | 
|---|
| 37 |  ; Abnormal alert flag:  Y or blank
 | 
|---|
| 38 |  ; Abnormal results flag:  Y or blank, may be turned on even if
 | 
|---|
| 39 |  ;     abnormal alert flag is not
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 |  Q:'RADFN!('RABDT)!('RAEDT)
 | 
|---|
| 42 |  N RAEXNP S RAEXNP=RAEXN ;save original value of RAEXN
 | 
|---|
| 43 |  ; if last char RAEXNP has "P", then count max no. by parent and 
 | 
|---|
| 44 |  ; single, not by individual cases
 | 
|---|
| 45 |  S RACINC=+$G(RACINC)
 | 
|---|
| 46 |  Q:RABDT>RAEDT  ; quit if ending date before beginning date
 | 
|---|
| 47 |  K ^TMP($J,"RAE1") S RAEXN=+$G(RAEXN)
 | 
|---|
| 48 |  S:$P(RABDT,".",2) RABDT=RABDT\1 S:$P(RAEDT,".",2) RAEDT=RAEDT\1
 | 
|---|
| 49 |  N RABNOR,RACNST,RACNT,RACPT,RACSE,RADIAG,RAIBDT,RAIEDT,RAILOC,RAITY
 | 
|---|
| 50 |  N RANO,RAPRC,RAREX,RARPT,RARPTST
 | 
|---|
| 51 |  N RAXAM,RAXID,RAXIT,RAXSTAT,RABNORMR,RASHOCAN
 | 
|---|
| 52 |  S RACNST=9999999.9999
 | 
|---|
| 53 |  S RAIBDT=RACNST-(RAEDT+.9999),RAIEDT=RACNST-(RABDT-.0001)
 | 
|---|
| 54 |  S (RACNT,RAXIT)=0
 | 
|---|
| 55 |  F  S RAIBDT=$O(^RADPT(RADFN,"DT",RAIBDT)) Q:RAIBDT'>0!(RAIBDT>RAIEDT)  D  Q:RAXIT
 | 
|---|
| 56 |  . D SETDATA^RAO7PC1A ; obtain exam data, set ^TMP($J,"RAE1",Patient IEN,Exam ID)
 | 
|---|
| 57 |  . Q
 | 
|---|
| 58 |  Q
 | 
|---|
| 59 | EN2(RADFN) ;
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 |  ; DBIA#2012 - Return last 7 days of non-cancelled exams
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 |  ; Input: RADFN-> Patient IEN
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 |  ; Output:
 | 
|---|
| 66 |  ; ^TMP($J,"RAE7",Patient IEN,Exam ID)=procedure name^case number^
 | 
|---|
| 67 |  ;       report status^imaging location IEN^imaging location name^
 | 
|---|
| 68 |  ;       contrast medium or media used
 | 
|---|
| 69 |  ;       Note: Single characters in parenthesis indicate contrast
 | 
|---|
| 70 |  ;       involvement: (I)=Iodinated ionic; (N)=Iodinated non-ionic;
 | 
|---|
| 71 |  ;        (L)=Gadolinium; (C)=Oral Cholecystographic; (G)=Gastrografin;
 | 
|---|
| 72 |  ;        (B)=Barium; (M)=unspecified contrast media
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 |  ; Exam ID: exam date/time (inverse) concatenated with the case IEN
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  Q:'RADFN  D EN2^RAO7PC1A Q
 | 
|---|
| 77 |  ;
 | 
|---|
| 78 | EN3(X) ; DBIA#2265 - Return narrative text for exam(s)
 | 
|---|
| 79 |  ; Input:
 | 
|---|
| 80 |  ; X-> Exam id in one of two forms:
 | 
|---|
| 81 |  ;   1) Pat. DFN^inv. exam date^Case IEN
 | 
|---|
| 82 |  ;      Retrieves a single report for a single exam
 | 
|---|
| 83 |  ;   2) Pat. DFN^inv. exam date^
 | 
|---|
| 84 |  ;      Retrieves all reports for a set of exams ordered on one order
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  ; Note:  Input delimiter can be any of the following: ^~\&;-
 | 
|---|
| 87 |  ;        a delimiter may be a single space i.e, " "
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 |  ; Output:
 | 
|---|
| 90 |  ; ^TMP($J,"RAE2",Patient IEN,case IEN,procedure name)=report status^
 | 
|---|
| 91 |  ; abnormal alert flag^CPRS Order ien^amended report?
 | 
|---|
| 92 |  ; ^TMP($J,"RAE2",Patient IEN,case IEN,procedure name,"CM",n)=contrast
 | 
|---|
| 93 |  ; media used during exam (internal)^contrast media used during exam
 | 
|---|
| 94 |  ; (external)
 | 
|---|
| 95 |  ; ^TMP($J,"RAE2",Patient IEN,case IEN,procedure name,"D",n)=diagnostic
 | 
|---|
| 96 |  ; code (n=1, this is the primary code)
 | 
|---|
| 97 |  ; ^TMP($J,"RAE2",Patient IEN,case IEN,procedure name,"H",n)=clin history
 | 
|---|
| 98 |  ; (a line of text)
 | 
|---|
| 99 |  ; ^TMP($J,"RAE2",Patient IEN,case IEN,procedure name,"I",n)=impression
 | 
|---|
| 100 |  ; (a line of text)
 | 
|---|
| 101 |  ; ^TMP($J,"RAE2",Patient IEN,case IEN,procedure name,"M",n)=modifier
 | 
|---|
| 102 |  ; (external format)
 | 
|---|
| 103 |  ; ^TMP($J,"RAE2",Patient IEN,case IEN,procedure name,"P")=primary
 | 
|---|
| 104 |  ; interpreting staff IEN^primary interpreting resident IEN^date
 | 
|---|
| 105 |  ; report entered
 | 
|---|
| 106 |  ; ^TMP($J,"RAE2",Patient IEN,case IEN,procedure name,"R",n)=report
 | 
|---|
| 107 |  ; (a line of text)
 | 
|---|
| 108 |  ; ^TMP($J,"RAE2",Patient IEN,case IEN,procedure name,"RFS")=REASON
 | 
|---|
| 109 |  ; FOR STUDY; the reason the study was conducted (a line of text)
 | 
|---|
| 110 |  ; ^TMP($J,"RAE2",Patient IEN,case IEN,procedure name,"V",n)=verifier IEN
 | 
|---|
| 111 |  ; ^signature block name
 | 
|---|
| 112 |  ; ^TMP($J,"RAE2",Patient IEN,case IEN,procedure name,"TCOM",1)=techno-
 | 
|---|
| 113 |  ; logist comment (a line of text)
 | 
|---|
| 114 |  ; ^TMP($J,"RAE2",Patient IEN,"PRINT_SET")=null (IFF this is a printset)
 | 
|---|
| 115 |  ; ^TMP($J,"RAE2",Patient IEN,"ORD")=name of ordered procedure for
 | 
|---|
| 116 |  ;  examsets and printsets
 | 
|---|
| 117 |  ; ^TMP($J,"RAE2",Patient IEN,"ORD",case IEN)=name of ordered procedure
 | 
|---|
| 118 |  ;  for that case; not part of an examset or printset
 | 
|---|
| 119 |  ;
 | 
|---|
| 120 |  K RAU,^TMP($J,"RAE2") S RAU=$$DEL(X)
 | 
|---|
| 121 |  I RAU="" K RAU Q
 | 
|---|
| 122 |  Q:'$P(X,RAU)!('$P(X,RAU,2))  ; Quit if no Pat. DFN -or- no inv. exam DT
 | 
|---|
| 123 |  N RACIEN,RADFN,RAINVXDT,RAPSET,Y S RAPSET=0
 | 
|---|
| 124 |  S RADFN=$P(X,RAU),RAINVXDT=$P(X,RAU,2),RACIEN=+$P(X,RAU,3)
 | 
|---|
| 125 |  K RAU Q:'($D(^RADPT(RADFN,"DT",RAINVXDT,0))#2)
 | 
|---|
| 126 | SS I RACIEN D CASE^RAO7PC2(RACIEN) D SVTCOM^RAUTL11(RADFN,RAINVXDT,RACIEN) Q  ;P18 mod by SS
 | 
|---|
| 127 |  S Y=0
 | 
|---|
| 128 |  F  S Y=$O(^RADPT(RADFN,"DT",RAINVXDT,"P",Y)) Q:Y'>0  D
 | 
|---|
| 129 |  . D CASE^RAO7PC2(Y)
 | 
|---|
| 130 |  . D SVTCOM^RAUTL11(RADFN,RAINVXDT,Y) ;P18 save TCOM in ^TMP
 | 
|---|
| 131 |  . S RAPSET=0 ;P18 modified 
 | 
|---|
| 132 |  . Q
 | 
|---|
| 133 |  Q
 | 
|---|
| 134 |  ;
 | 
|---|
| 135 | EN30(RAOIFN) ; DBIA#2266 - Return narrative text for exam(s). To be used
 | 
|---|
| 136 |  ; with the EN3 entry point above.
 | 
|---|
| 137 |  ; Input: RAOIFN -> the ien of Rad/Nuc Med Order
 | 
|---|
| 138 |  Q:'RAOIFN  ; order passed in as 0 or null
 | 
|---|
| 139 |  Q:'$D(^RAO(75.1,RAOIFN,0))  ; no such order
 | 
|---|
| 140 |  Q:'$D(^RADPT("AO",RAOIFN))  ; no exam associated with this order
 | 
|---|
| 141 |  N RADFN,RADTI,RACNI,RAXSET
 | 
|---|
| 142 |  S RADFN=+$O(^RADPT("AO",RAOIFN,0)) Q:'RADFN
 | 
|---|
| 143 |  S RADTI=+$O(^RADPT("AO",RAOIFN,RADFN,0)) Q:'RADTI
 | 
|---|
| 144 |  S RAXSET=+$P($G(^RADPT(RADFN,"DT",RADTI,0)),"^",5) ; set if RAXSET=1
 | 
|---|
| 145 |  I RAXSET D EN3(RADFN_"^"_RADTI_"^") Q  ; exam set, hit EN3 code
 | 
|---|
| 146 |  ; the following code is executed for non-exam set examinations
 | 
|---|
| 147 |  S RACNI=+$O(^RADPT("AO",RAOIFN,RADFN,RADTI,0)) Q:'RACNI
 | 
|---|
| 148 |  D EN3(RADFN_"^"_RADTI_"^"_RACNI)
 | 
|---|
| 149 |  Q
 | 
|---|
| 150 | EN4(RABBRV,RAARY) ; Return Imaging Locations
 | 
|---|
| 151 |  ; Input: RABBRV-> Abbreviation for I-Type    RAARY-> data storage array
 | 
|---|
| 152 |  ;
 | 
|---|
| 153 |  ; Output:
 | 
|---|
| 154 |  ; array name(location IEN)=File 79.1 IEN^File 44 name^division IEN
 | 
|---|
| 155 |  ; ^division name
 | 
|---|
| 156 |  ;
 | 
|---|
| 157 |  Q:RABBRV']""  ; quit no I-Type abbreviation
 | 
|---|
| 158 |  Q:RAARY']""  ;  quit no data storage array
 | 
|---|
| 159 |  N RADIV,RAITY,RALOC,RAX
 | 
|---|
| 160 |  S RAITY=+$O(^RA(79.2,"C",RABBRV,0)) Q:'RAITY
 | 
|---|
| 161 |  S RAX=0 F  S RAX=$O(^RA(79.1,"BIMG",RAITY,RAX)) Q:RAX'>0  D
 | 
|---|
| 162 |  . S RADIV(79)=$G(^RA(79.1,RAX,"DIV"))
 | 
|---|
| 163 |  . S RALOC(0)=$G(^RA(79.1,RAX,0))
 | 
|---|
| 164 |  . Q:$P(RALOC(0),"^",19)]""  ;inactive DT present, can't be a future DT
 | 
|---|
| 165 |  . S RALOC=$P($G(^SC(+RALOC(0),0)),U)
 | 
|---|
| 166 |  . S RALOC=$S(RALOC]"":RALOC,1:"Unknown")
 | 
|---|
| 167 |  . S RADIV=+$P($G(^RA(79,+RADIV(79),0)),U),RADIV(4)=$G(^DIC(4,RADIV,0))
 | 
|---|
| 168 |  . S RADIV=$S($P(RADIV(4),U)]"":$P(RADIV(4),U),1:"Unknown")
 | 
|---|
| 169 |  . S @(RAARY_"("_RAX_")")=RAX_U_RALOC_U_+RADIV(79)_U_RADIV
 | 
|---|
| 170 |  . Q
 | 
|---|
| 171 |  Q
 | 
|---|
| 172 | CASE(RAOIFN,RARRAY) ; Return the case numbers and the total number of
 | 
|---|
| 173 |  ; case numbers associated with a particular order.
 | 
|---|
| 174 |  ; Input: RAOIFN-order ien (75.1)
 | 
|---|
| 175 |  ;        RARRAY-data storage (local array)
 | 
|---|
| 176 |  ; Return: RATTL-n^x where n is the number of cases in the array
 | 
|---|
| 177 |  ;               x=PRINTSET if a single report covers many cases.
 | 
|---|
| 178 |  ;               -1 if error (invalid order ien)
 | 
|---|
| 179 |  ;               -2 no registered case to date -OR- case(s) cancelled
 | 
|---|
| 180 |  ;               If -1 or -2, second piece of RATTL gives the reason
 | 
|---|
| 181 |  ;         RARRAY-local data array, array_name(case #)
 | 
|---|
| 182 |  N RATTL S RATTL="" D CASE^RAO7PC1A
 | 
|---|
| 183 |  Q RATTL
 | 
|---|
| 184 | DEL(X) ; Determine the delimiter used to seperate the data
 | 
|---|
| 185 |  ; Input: 'X'-> data seperated by a delimiter (first & second pieces
 | 
|---|
| 186 |  ; will follow null)
 | 
|---|
| 187 |  N Y,Z
 | 
|---|
| 188 |  F Y="^","~","\","&",";","-"," " S Z=$F(X,Y) I +Z Q
 | 
|---|
| 189 |  Q $S(+Z>0:Y,1:"") ; pass back the delimiter used, or null if not found
 | 
|---|