| 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 | 
|---|