| 1 | RAPM ;HOIFO/TH-Radiology Performance Monitors/Indicator; ;5/12/04  10:03
 | 
|---|
| 2 |  ;;5.0;Radiology/Nuclear Medicine;**37,44,48,67**;Mar 16, 1998
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; *** Application variables: ***
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ; Exam Date - RADTE (Regular Fileman format)
 | 
|---|
| 7 |  ;             RADTI (Inverse Fileman format)
 | 
|---|
| 8 |  ; Case Number - RACN               Exam Status - RAEXST
 | 
|---|
| 9 |  ; Category of Exam - RACAT         Primary Interpreting Staff - RAPRIM
 | 
|---|
| 10 |  ; Date Report Entered - RARPTDT    Verified Date - RAVERDT
 | 
|---|
| 11 |  ; Report Status - RARPTST          Page Number - RAPG
 | 
|---|
| 12 |  ; Type of Report - RARPT
 | 
|---|
| 13 |  ; Internal number of an entry in the Patient file (#2) - RADFN
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 | INIT ; Check for the existence of RACESS. Pass in user's DUZ!
 | 
|---|
| 16 |  I $D(DUZ),($O(RACCESS(DUZ,""))']"") D CHECK^RADLQ3(DUZ)
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 |  N DIR,DIRUT,RABDATE,RAEDATE,RARPT,DTDIFF,RABEGDT,RAENDDT,RA1
 | 
|---|
| 19 |  N RAM,RARAD,RAR,RAMSG,X,Y
 | 
|---|
| 20 |  S (RABDATE,RAEDATE,RAANS,RAANS2,RANODIV,RASINCE,RARAD)=""
 | 
|---|
| 21 |  ; RANODIV=1 if one or more exams are missing DIVISION
 | 
|---|
| 22 | PROMPT ; 
 | 
|---|
| 23 |  W @IOF
 | 
|---|
| 24 |  W !!,"Radiology Verification Timeliness Report",!!
 | 
|---|
| 25 |  ; Prompt for Report Type. Quit if no report type selected
 | 
|---|
| 26 |  D GETRPT K DIR Q:$D(DIRUT)
 | 
|---|
| 27 |  ; Prompt for Date Range - Quit if no dates selected
 | 
|---|
| 28 |  W !! D GETDATE K DIR Q:$D(DIRUT)
 | 
|---|
| 29 |  ; Prompt for Radiologist if Short or Both
 | 
|---|
| 30 |  D RADIOL^RAPM3
 | 
|---|
| 31 |  ; Prompt for Division and Imaging Types
 | 
|---|
| 32 |  S X=$$DIVLOC^RAUTL7() I X G EXIT
 | 
|---|
| 33 |  I $D(^TMP($J,"RA I-TYPE","VASCULAR LAB")) D
 | 
|---|
| 34 |  . K ^TMP($J,"RA I-TYPE","VASCULAR LAB")
 | 
|---|
| 35 |  . W !!?5,"*** Imaging type 'Vascular Lab' will not be included in this report ***"
 | 
|---|
| 36 |  ; Prompt for sort option if Detail
 | 
|---|
| 37 |  D:RARPT'="S" SORT K DIR Q:$D(DIRUT)
 | 
|---|
| 38 |  ; Prompt for mail delivery if Short or Both
 | 
|---|
| 39 |  I RARPT'="D" D EMAIL^RAPM2 K DIR Q:$D(DIRUT)
 | 
|---|
| 40 |  ; Warning for Detail or Both
 | 
|---|
| 41 |  I RARPT="D"!(RARPT="B") D
 | 
|---|
| 42 |  . S RATXT="*** The detail report requires a 132 column output device ***"
 | 
|---|
| 43 |  . S RALINE="",$P(RALINE,"*",$L(RATXT))=""
 | 
|---|
| 44 |  . W !!?(80-$L(RATXT)\2),RALINE,!?(80-$L(RATXT)\2),RATXT,!?(80-$L(RATXT)\2),RALINE,!
 | 
|---|
| 45 |  .Q
 | 
|---|
| 46 |  D DEV
 | 
|---|
| 47 |  I RAPOP D  G EXIT
 | 
|---|
| 48 |  . I RAANS!(RAANS2) W !?5,"** No mail will be sent **",$C(7)
 | 
|---|
| 49 |  . Q
 | 
|---|
| 50 | START ; Get data and print the report
 | 
|---|
| 51 |  S:$D(ZTQUEUED) ZTREQ="@" S RAIO=$S(IO="":0,1:1)
 | 
|---|
| 52 |  D GETDATA
 | 
|---|
| 53 |  I RARPT="S"!(RARPT="B") S RAPG=0 D ^RAPM1
 | 
|---|
| 54 |  I RARPT="D"!(RARPT="B") S RAPG=0 D ^RAPM2
 | 
|---|
| 55 |  ; see if need send email
 | 
|---|
| 56 |  D SEND^RAPM2
 | 
|---|
| 57 |  D EXIT
 | 
|---|
| 58 |  Q
 | 
|---|
| 59 |  ;
 | 
|---|
| 60 | GETRPT ; Prompt for Summary or Detail or Both reports; Default = Summary Report
 | 
|---|
| 61 |  W !,"Enter Report Type"
 | 
|---|
| 62 |  S DIR(0)="S^S:Summary;D:Detail;B:Both"
 | 
|---|
| 63 |  S DIR("A")="Select Report Type",DIR("B")="S"
 | 
|---|
| 64 |  S DIR("?")="Enter Summary report OR Detail report OR Both reports"
 | 
|---|
| 65 |  D ^DIR
 | 
|---|
| 66 |  Q:$D(DIRUT) 
 | 
|---|
| 67 |  S RARPT=Y
 | 
|---|
| 68 |  Q
 | 
|---|
| 69 | GETDATE ; Prompt for start and end dates
 | 
|---|
| 70 |  S DIR(0)="D^:"_DT_":AE"
 | 
|---|
| 71 |  I RARPT'="D" D
 | 
|---|
| 72 |  . W !!?4,"The begin date for Summary and Both must be at least 10 days before today.",!
 | 
|---|
| 73 |  . S X1=DT,X2=-10 D C^%DTC S RA1=X
 | 
|---|
| 74 |  . S DIR(0)="D^:"_RA1_":AE"
 | 
|---|
| 75 |  . Q
 | 
|---|
| 76 |  S DIR("A")="Enter starting date"
 | 
|---|
| 77 |  S DIR("?")="Enter date to begin searching from"
 | 
|---|
| 78 |  D ^DIR
 | 
|---|
| 79 |  Q:$D(DIRUT)
 | 
|---|
| 80 |  S RABDATE=Y
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 |  S RADD=$S(RARPT="S":91,1:31),X1=RABDATE,X2=RADD D C^%DTC S RAMAXDT=X
 | 
|---|
| 83 |  ; put 10 day block for summary report or Both
 | 
|---|
| 84 |  I RARPT'="D" D
 | 
|---|
| 85 |  . W !!?4,"The ending date for Summary and Both must be at least 10 days before today.",!
 | 
|---|
| 86 |  . S X1=DT,X2=-10 D C^%DTC S:X<RAMAXDT RAMAXDT=X
 | 
|---|
| 87 |  S:RAMAXDT>DT RAMAXDT=DT
 | 
|---|
| 88 |  S DIR(0)="D^"_RABDATE_":"_RAMAXDT_":AE"
 | 
|---|
| 89 |  S DIR("A")="Enter ending date"
 | 
|---|
| 90 |  S DIR("?",1)="     +91 days max. for Summary, +31 days max. for Detail."
 | 
|---|
| 91 |  S DIR("?",2)="     And the ending date for the Summary and Both"
 | 
|---|
| 92 |  S DIR("?")="     must be at least 10 days before today."
 | 
|---|
| 93 |  D ^DIR
 | 
|---|
| 94 |  Q:$D(DIRUT)
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 |  ; Set end date to end of day
 | 
|---|
| 97 |  ; RABDATE and RAEDATE are original values
 | 
|---|
| 98 |  ; RABEGDT and RAENDDT are used in GETDATA 
 | 
|---|
| 99 |  S RAEDATE=Y,RAENDDT=RAEDATE_.9999
 | 
|---|
| 100 |  ; Set start date back to include current day
 | 
|---|
| 101 |  S RABEGDT=(RABDATE-1)_.9999
 | 
|---|
| 102 |  Q
 | 
|---|
| 103 | SORT ; Prompt for Sorted by
 | 
|---|
| 104 |  W !!,"Sort report by"
 | 
|---|
| 105 |  S DIR(0)="S^C:Case Number;E:Category of Exam;I:Imaging Type;P:Patient Name;R:Radiologist;T:Hrs to Transcrip.;V:Hrs to Verif."
 | 
|---|
| 106 |  S DIR("A")="Select Sorted by",DIR("B")="C"
 | 
|---|
| 107 |  D ^DIR
 | 
|---|
| 108 |  Q:$D(DIRUT)
 | 
|---|
| 109 |  S RASORT=Y
 | 
|---|
| 110 |  S DIR(0)="N^0:240"
 | 
|---|
| 111 |  S DIR("A")="Print PENDING and "_$S(RASORT="V":"Verif.",1:"Transrip.")_" hours greater than or equal to"
 | 
|---|
| 112 |  S DIR("B")="72"
 | 
|---|
| 113 |  S DIR("?")="Enter minimum number of hours elapsed since registration."
 | 
|---|
| 114 |  D ^DIR Q:$D(DIRUT)  S RASINCE=Y
 | 
|---|
| 115 |  Q
 | 
|---|
| 116 | DEV ; Device
 | 
|---|
| 117 |  I $D(DIRUT) D EXIT Q
 | 
|---|
| 118 |  W:RARPT="B" !!,"Specify device for both summary and detail reports."
 | 
|---|
| 119 |  D TASK
 | 
|---|
| 120 |  D ZIS^RAUTL
 | 
|---|
| 121 |  Q
 | 
|---|
| 122 | TASK ; set vars for taskman
 | 
|---|
| 123 |  S ZTRTN="START^RAPM"
 | 
|---|
| 124 |  S ZTSAVE("RA*")=""
 | 
|---|
| 125 |  S ZTSAVE("^TMP($J,""RA D-TYPE"",")=""
 | 
|---|
| 126 |  S ZTSAVE("^TMP($J,""RA I-TYPE"",")=""
 | 
|---|
| 127 |  S ZTDESC="Radiology Verification Timeliness Report"
 | 
|---|
| 128 |  Q
 | 
|---|
| 129 |  ;
 | 
|---|
| 130 | GETDATA ; Get all the data
 | 
|---|
| 131 |  ; Order thru Exam Date (RADTE)
 | 
|---|
| 132 |  S RADTE=RABEGDT F  S RADTE=$O(^RADPT("AR",RADTE)) Q:'RADTE  Q:(RADTE>RAENDDT)  D
 | 
|---|
| 133 |  . S RADFN="" F  S RADFN=$O(^RADPT("AR",RADTE,RADFN)) Q:'RADFN  D
 | 
|---|
| 134 |  . . ; Get patient name
 | 
|---|
| 135 |  . . S RAPATNM=$$GET1^DIQ(2,RADFN,.01) S:RAPATNM="" RAPATNM=" "
 | 
|---|
| 136 |  . . ; Order thru inverse Exam Date (RADTI)
 | 
|---|
| 137 |  . . S RADTI="" F  S RADTI=$O(^RADPT("AR",RADTE,RADFN,RADTI)) Q:'RADTI  D CHECK
 | 
|---|
| 138 |  . . Q
 | 
|---|
| 139 |  . Q
 | 
|---|
| 140 |  Q
 | 
|---|
| 141 | CHECK ; Check type of image
 | 
|---|
| 142 |  Q:'$D(^RADPT(RADFN,"DT",RADTI))  ;no exam data at all
 | 
|---|
| 143 |  S RAITYP=$P($G(^RADPT(RADFN,"DT",RADTI,0)),U,2)
 | 
|---|
| 144 |  S RAIMGTYP=$P($G(^RA(79.2,+RAITYP,0)),U,1)
 | 
|---|
| 145 |  ; quit if img typ is known AND does not match selection
 | 
|---|
| 146 |  I RAIMGTYP'="",'$D(^TMP($J,"RA I-TYPE",RAIMGTYP)) Q
 | 
|---|
| 147 |  I RAIMGTYP="" S RAIMGTYP="(unknown)"
 | 
|---|
| 148 |  ;
 | 
|---|
| 149 |  ; Check division - Quit if no division selected
 | 
|---|
| 150 |  S RASELDIV=$P($G(^RADPT(RADFN,"DT",RADTI,0)),U,3)
 | 
|---|
| 151 |  S RACHKDIV=$P($G(^DIC(4,+RASELDIV,0)),U,1)
 | 
|---|
| 152 |  ; quit if div is known AND does not match selection 
 | 
|---|
| 153 |  I RACHKDIV'="",'$D(^TMP($J,"RA D-TYPE",RACHKDIV)) Q
 | 
|---|
| 154 |  S:RACHKDIV="" RANODIV=1
 | 
|---|
| 155 |  ;
 | 
|---|
| 156 |  ; Get exam related data
 | 
|---|
| 157 |  S RACNI=0 F  S RACNI=$O(^RADPT(RADFN,"DT",RADTI,"P",RACNI)) Q:'RACNI  D
 | 
|---|
| 158 |  . S (RACN0,RAEXST,RANUM,RACN,RAPRIM,RAPRIMNM,RACAT,RARPTTXT)=""
 | 
|---|
| 159 |  . S (RARPTDT,RAVERDT,RARPTST,RADHT,RADHV,RATDFHR,RAVDFHR)=""
 | 
|---|
| 160 |  . ; Get 0 node (RACN0) of ^RADPT(RADFN,"DT",RADTI,"P",RACNI,0)
 | 
|---|
| 161 |  . S RACN0=$G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0))
 | 
|---|
| 162 |  . Q:RACN0=""  ; no exam data
 | 
|---|
| 163 |  . ; Get Case number: Exam Date - Case Number
 | 
|---|
| 164 |  . S RACN=$E(RADTE,4,7)_$E(RADTE,2,3)_"-"_$P(RACN0,U,1)
 | 
|---|
| 165 |  . ; Get exam status
 | 
|---|
| 166 |  . S RAEXST=$P(RACN0,U,3)
 | 
|---|
| 167 |  . Q:RAEXST=""  ; no exam status
 | 
|---|
| 168 |  . ; Quit if exam's CREDIT METHOD is 2 = no credit
 | 
|---|
| 169 |  . Q:$P(RACN0,U,26)=2
 | 
|---|
| 170 |  . ; Quit if exam status is "Cancelled"
 | 
|---|
| 171 |  . I $P(^RA(72,RAEXST,0),U,3)=0 Q
 | 
|---|
| 172 |  . ; Get number of set - '1' separate; '2' for combined report.
 | 
|---|
| 173 |  . S RANUM=$P(RACN0,U,25)
 | 
|---|
| 174 |  . ; if member of set > 1 then set RACNI to 99999 to skip remaining cases
 | 
|---|
| 175 |  . I RANUM>1 S RACNI=99999
 | 
|---|
| 176 |  . ; Get Radiologist (Primary Interpreting Staff) internal # and name. 
 | 
|---|
| 177 |  . S RAPRIM=$P(RACN0,U,15)
 | 
|---|
| 178 |  . ; if specific radiologist requested, quit if not his/her case
 | 
|---|
| 179 |  . I RARAD,RAPRIM'=RARAD Q
 | 
|---|
| 180 |  . S RAPRIMNM=$$GET1^DIQ(200,RAPRIM,.01) S:RAPRIMNM="" RAPRIMNM=" "
 | 
|---|
| 181 |  . ; Get Category of Exam
 | 
|---|
| 182 |  . S RACAT=$P(RACN0,U,4)
 | 
|---|
| 183 |  . ; Get Procedure Name
 | 
|---|
| 184 |  . S RAPRCN=$P($G(^RAMIS(71,+$P(RACN0,U,2),0)),U)
 | 
|---|
| 185 |  . ; Get IEN of imaging report
 | 
|---|
| 186 |  . S RARPTTXT=$P(RACN0,U,17)
 | 
|---|
| 187 |  . ; Pending if no imaging report OR report doesn't exist in the Report
 | 
|---|
| 188 |  . ; file (#74) OR Stub report
 | 
|---|
| 189 |  . S RAHASR=0 ;=1 has real report
 | 
|---|
| 190 |  . I $D(^RARPT(+RARPTTXT,0)),'$$STUB^RAEDCN1(+RARPTTXT) S RAHASR=1
 | 
|---|
| 191 |  . I 'RAHASR D
 | 
|---|
| 192 |  . . S ^TMP($J,"RAPM","TR",0)=$G(^TMP($J,"RAPM","TR",0))+1
 | 
|---|
| 193 |  . . S ^TMP($J,"RAPM","VR",0)=$G(^TMP($J,"RAPM","VR",0))+1
 | 
|---|
| 194 |  . ; Get report info. if real report exists.
 | 
|---|
| 195 |  . I RAHASR D RPTINFO^RAPM1
 | 
|---|
| 196 |  . D STORE^RAPM2
 | 
|---|
| 197 |  . ; Calculate the total number of reports
 | 
|---|
| 198 |  . S ^TMP($J,"RAPM","TOTAL")=$G(^TMP($J,"RAPM","TOTAL"))+1
 | 
|---|
| 199 |  Q
 | 
|---|
| 200 | EXIT ; Exit
 | 
|---|
| 201 |  ; Close device
 | 
|---|
| 202 |  D CLOSE^RAUTL
 | 
|---|
| 203 |  K RACN0,RAEXST,RANUM,RACN,RAPRIM,RAPRIMNM,RACAT,RARPTTXT,RAANS,RATXT
 | 
|---|
| 204 |  K DIR,DIRUT,RABDATE,RAEDATE,RARPT,DTDIFF,RABEGDT,RAENDDT,RAITYP,RAIMGTYP,RATYP
 | 
|---|
| 205 |  K ZTRTN,ZTSAVE,ZTDESC,RAPG,RASELDIV,RACHKDIV,RACNO,RAVHRS
 | 
|---|
| 206 |  K RADIV,RAN,RAIMG,RAREC1,RATOTCNT,RACNI,RADFN,RADTE,RADTI,RAHD,RAPATNM
 | 
|---|
| 207 |  K RAPOP,RAPSTX,RAQUIT,RAREC,RARPTDT,RARPTST,RASORT,RASRT,RATDFHR,RAHASR
 | 
|---|
| 208 |  K RATDFSEC,RATHRS,RAVDFHR,RAVDFSEC,RAVERDT,RAMES,RALINE,RAMAXDT,RADD
 | 
|---|
| 209 |  K RAANS2,RAIOM,RAHDR,RANODIV,RASINCE,RADHT,RADHV,RAVAL,RAPRCN
 | 
|---|
| 210 |  K RAXIT,RAIO,RALDENT,RALMAX,RALUSED,RATAIL
 | 
|---|
| 211 |  K ^TMP($J)
 | 
|---|
| 212 |  Q
 | 
|---|