| 1 | RAPMW1 ;HOIFO/SWM-Radiology Wait Time reports ;12/05/05 13:40 | 
|---|
| 2 | ;;5.0;Radiology/Nuclear Medicine;**67,79,83**;Mar 16, 1998;Build 4 | 
|---|
| 3 | ; IA 10090 allows Read w/Fileman for entire file 4 | 
|---|
| 4 | ; summary | 
|---|
| 5 | Q | 
|---|
| 6 | FILTER1 ; | 
|---|
| 7 | S RABAD=0 | 
|---|
| 8 | I '$D(^RADPT(RADFN,"DT",RADTI)) S RABAD=1 Q  ;no exam data | 
|---|
| 9 | ;division | 
|---|
| 10 | S RASELDIV=$P($G(^RADPT(RADFN,"DT",RADTI,0)),U,3) | 
|---|
| 11 | S RACHKDIV=$P($G(^DIC(4,+RASELDIV,0)),U) | 
|---|
| 12 | I RACHKDIV'="",'$D(^TMP($J,"RA D-TYPE",RACHKDIV)) S RABAD=1 Q | 
|---|
| 13 | ;imaging type | 
|---|
| 14 | S RAITYP=$P($G(^RADPT(RADFN,"DT",RADTI,0)),U,2) | 
|---|
| 15 | S RAIMGTYP=$P($G(^RA(79.2,+RAITYP,0)),U) | 
|---|
| 16 | ; *79 removed check for imaging type | 
|---|
| 17 | I RAIMGTYP="" S RAIMGTYP="(unk)" | 
|---|
| 18 | Q | 
|---|
| 19 | FILTER2 ; | 
|---|
| 20 | S RABAD=0 | 
|---|
| 21 | S RACN0=$G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0)) | 
|---|
| 22 | I RACN0="" S RABAD=1 Q  ;no case level data | 
|---|
| 23 | I RANX="C",'$D(^TMP($J,"RA WAIT2",+$P(RACN0,U,2))) S RABAD=1 Q | 
|---|
| 24 | S RACNISAV=RACNI ; save orig. before it's changed due printset | 
|---|
| 25 | I RANX="P",$P(RACN0,U,25)>1 D  G EXCL | 
|---|
| 26 | .; If selecting by Proc Type, and case is from printset -- | 
|---|
| 27 | .; pick case with highest ranked Procedure Type | 
|---|
| 28 | .; then skip remaining cases by setting a high RACNI | 
|---|
| 29 | .S I=0 | 
|---|
| 30 | .K RARY ;array of cases and rank number | 
|---|
| 31 | .F  S I=$O(^RADPT(RADFN,"DT",RADTI,"P",I)) Q:'I  S RACN0=$G(^(I,0)) D:RACN0'="" | 
|---|
| 32 | ..S RABAD=0 D CHECK3 Q:RABAD  ;skip case if it meets 1 of 3 exclusions | 
|---|
| 33 | ..D PTA^RAPMW2 | 
|---|
| 34 | ..;eg. rary(6,racni)=racn0 for Ultrasound | 
|---|
| 35 | ..S RARY(RAHIER(RAPTA),I)=RACN0 | 
|---|
| 36 | ..Q | 
|---|
| 37 | .S RAHI=$O(RARY("")) ;highest rank number from prtset cases | 
|---|
| 38 | .I RAHI="" D  Q  ; no case in prtset can be used | 
|---|
| 39 | ..S RABAD=1,RACNI=99999 | 
|---|
| 40 | ..Q | 
|---|
| 41 | .S RACNI=$O(RARY(RAHI,0)) | 
|---|
| 42 | .I RACNI="" D  Q  ;should not happen | 
|---|
| 43 | ..S RABAD=1,RACNI=99999 | 
|---|
| 44 | ..Q | 
|---|
| 45 | .S RACN0=RARY(RAHI,RACNI) ;reset racn0 | 
|---|
| 46 | .S RA72=^RA(72,+$P(RACN0,U,3),0) ;reset ra72 | 
|---|
| 47 | .S RACNISAV=RACNI ; save orig. before it's changed due printset | 
|---|
| 48 | .S RACNI=99999 ;set to 99999 so GETDATA loop would skip rest of prtset | 
|---|
| 49 | .Q | 
|---|
| 50 | D CHECK3 | 
|---|
| 51 | EXCL ; skip case if its proc isn't among user-selected procs | 
|---|
| 52 | D PTA^RAPMW2 ; *79, Procedure Type via CPT Code & Sherrill's Xcel sheet | 
|---|
| 53 | I $D(RAXCLUDE(RAPTA)) S RABAD=1 Q | 
|---|
| 54 | Q | 
|---|
| 55 | CHECK3 ; check inpatient, no credit, cancelled exam | 
|---|
| 56 | ; CATEGORY OF EXAM is inpatient | 
|---|
| 57 | I $P(RACN0,U,4)="I" S RABAD=1 Q | 
|---|
| 58 | ; exam's credit method is 2 (no credit) | 
|---|
| 59 | I $P(RACN0,U,26)=2 S RABAD=1 Q | 
|---|
| 60 | ; exam status is cancelled | 
|---|
| 61 | I $P(RACN0,U,3)="" S RABAD=1 Q  ;no exam status | 
|---|
| 62 | S RA72=^RA(72,+$P(RACN0,U,3),0) ;file 72 node 0 | 
|---|
| 63 | I $P(RA72,U,3)=0 S RABAD=1 Q  ;skip cancelled exam | 
|---|
| 64 | Q | 
|---|
| 65 | STORSUM ; | 
|---|
| 66 | S RACOL=$S(RAWAITD'>30:1,RAWAITD'>60:2,RAWAITD'>90:3,RAWAITD'>120:4,1:5) | 
|---|
| 67 | S RACOL(RAPTA,RACOL)=RACOL(RAPTA,RACOL)+1 | 
|---|
| 68 | S RATOTAL(RAPTA)=RATOTAL(RAPTA)+1,RATOTAL=RATOTAL+1 | 
|---|
| 69 | ; count negative Wait Days as 0 | 
|---|
| 70 | S RAWAITD(RAPTA)=RAWAITD(RAPTA)+$S(RAWAITD<0:0,1:RAWAITD) | 
|---|
| 71 | Q | 
|---|
| 72 | WRTSUM ; | 
|---|
| 73 | S RAHD0="Summary",RAPG=1 | 
|---|
| 74 | D SETHD | 
|---|
| 75 | D PRTS Q:RAXIT | 
|---|
| 76 | D FOOTS | 
|---|
| 77 | Q | 
|---|
| 78 | SETHD ; Set up header & dev vars for identical parts of summary and detail reports | 
|---|
| 79 | S RAIOM=$S(RATYP="S":80,1:IOM),$P(RADASH,"-",46)="" | 
|---|
| 80 | S RAH1=RAHD0_" Radiology Outpatient Procedure Wait Time Report" | 
|---|
| 81 | ; Hdr Line 3 -- Facility, Station, VISN | 
|---|
| 82 | D GETS^DIQ(4,DUZ(2),".01;14*;99","E","RAR","RAMSG") | 
|---|
| 83 | K X | 
|---|
| 84 | S X(1)=RAR(4,DUZ(2)_",",.01,"E") ; Name of facility | 
|---|
| 85 | S X(2)=RAR(4,DUZ(2)_",",99,"E") ;  Station Number | 
|---|
| 86 | I $D(RAR(4.014)) D | 
|---|
| 87 | . S X(3)=RAR(4.014,"1,"_DUZ(2)_",",.01,"E") ; Association | 
|---|
| 88 | . S X(4)=RAR(4.014,"1,"_DUZ(2)_",",1,"E") ; Parent of Association | 
|---|
| 89 | . S X(5)=$S(X(3)="VISN":X(4),1:"") ; should be VISN number | 
|---|
| 90 | E  S X(5)="" | 
|---|
| 91 | ; | 
|---|
| 92 | S $P(X(6)," ",79)="" | 
|---|
| 93 | S $E(X(6),1,(10+$L(X(1))))="Facility: "_X(1) | 
|---|
| 94 | S $E(X(6),41,(50+$L(X(2))))="Station: "_X(2) | 
|---|
| 95 | S $E(X(6),60,(66+$L(X(5))))="VISN: "_X(5) | 
|---|
| 96 | S RAH3=X(6) ;Facility, Station, VISN | 
|---|
| 97 | ; Hdr Line 4 -- Division(s) | 
|---|
| 98 | K RAH4 | 
|---|
| 99 | I '$D(^TMP($J,"RA D-TYPE")) S RAH4(1)="No division selected" | 
|---|
| 100 | E  D | 
|---|
| 101 | .S RA1=1,RADIV="" S RAH4(1)="Division(s): " | 
|---|
| 102 | .F  S RADIV=$O(^TMP($J,"RA D-TYPE",RADIV)) Q:RADIV=""  D | 
|---|
| 103 | ..S:$L(RAH4(RA1))+$L(RADIV)>RAIOM RA1=RA1+1,$P(RAH4(RA1)," ",14)="" | 
|---|
| 104 | ..S RAH4(RA1)=RAH4(RA1)_RADIV_$S($O(^TMP($J,"RA D-TYPE",RADIV))]"":", ",1:"") | 
|---|
| 105 | ..Q | 
|---|
| 106 | .Q | 
|---|
| 107 | ; Hdr line 5 -- Exam Date Range | 
|---|
| 108 | S RAH5="Exam Date Range: "_$$FMTE^XLFDT(RABDATE,"2D")_"-"_$$FMTE^XLFDT(RAEDATE,"2D") | 
|---|
| 109 | ; Hdr line 6 -- Imaging Type(s) selected | 
|---|
| 110 | K RAH6 | 
|---|
| 111 | I RANX="P" D | 
|---|
| 112 | .S RAH6(1)="PROCEDURE TYPES: All" ;*79 | 
|---|
| 113 | .I $O(RAXCLUDE(""))]"" D | 
|---|
| 114 | ..S RAH6(1)=RAH6(1)_", except " | 
|---|
| 115 | ..S I="" F  S I=$O(RAXCLUDE(I)) Q:I=""  S RAH6(1)=RAH6(1)_I S:$O(RAXCLUDE(I))]"" RAH6(1)=RAH6(1)_", " | 
|---|
| 116 | ..Q | 
|---|
| 117 | .Q | 
|---|
| 118 | ; Hdr line 7 -- CPT and Proc names | 
|---|
| 119 | K RAH7 I RANX="C" D  ; *79 | 
|---|
| 120 | .S RAH7(0)="CPT CODES and PROCEDURES: " | 
|---|
| 121 | .S RA1=1,RA2="",RAH7(1)=RAH7(0) | 
|---|
| 122 | .F  S RA2=$O(^TMP($J,"RA WAIT1",RA2)) Q:RA2=""  D | 
|---|
| 123 | ..S RA1=RA1+1 | 
|---|
| 124 | ..S RAH7(RA1)="     "_^TMP($J,"RA WAIT1",RA2)_"  "_RA2 | 
|---|
| 125 | ..Q | 
|---|
| 126 | .Q | 
|---|
| 127 | ;Hdr line 8 -- Run Date/Time | 
|---|
| 128 | S RANOW=$$NOW^XLFDT,RANOW=$E(RANOW,1,12) | 
|---|
| 129 | S RAH8="Run Date/Time: "_$$FMTE^XLFDT(RANOW,"2P") | 
|---|
| 130 | Q | 
|---|
| 131 | HD ; | 
|---|
| 132 | W:$E(IOST,1,2)="C-" @IOF W !?(RAIOM-$L(RAH1)\2),RAH1 | 
|---|
| 133 | W !,"Page: ",RAPG,! | 
|---|
| 134 | W !,RAH3 | 
|---|
| 135 | S I=0 F  S I=$O(RAH4(I)) Q:'I  W !,RAH4(I) | 
|---|
| 136 | W !,RAH5 | 
|---|
| 137 | S I=0 F  S I=$O(RAH6(I)) Q:'I  W !,RAH6(I) | 
|---|
| 138 | S I=0 F  S I=$O(RAH7(I)) Q:'I  W !,RAH7(I) I ($Y+5)>IOSL D PRESS Q:RAXIT  W:$E(IOST,1,2)="C-" @IOF | 
|---|
| 139 | Q:RAXIT | 
|---|
| 140 | W !,RAH8 | 
|---|
| 141 | Q | 
|---|
| 142 | HDSUM ; | 
|---|
| 143 | W !!,"Total number of procedures registered during specified exam date range: ",RATOTAL,! | 
|---|
| 144 | Q | 
|---|
| 145 | PRTS ; | 
|---|
| 146 | I RAPG=1 D HD Q:RAXIT  D HDSUM S RAPG=RAPG+1 | 
|---|
| 147 | S I="" F  S I=$O(RACOL(I)) Q:I=""  D | 
|---|
| 148 | .F J=1:1:5 S RAPCT(I,J)=$S(RATOTAL(I)>0:$J(RACOL(I,J)/RATOTAL(I)*100,5,1),1:$J(0,5,1)),RACOL(I,J)=$J(RACOL(I,J),7) | 
|---|
| 149 | .S RAAVG(I)=$S(RATOTAL(I)>0:$J(RAWAITD(I)/RATOTAL(I),7,0),1:"") | 
|---|
| 150 | .I I="unknown",RATOTAL(I)=0 K RATOTAL(I),RACOL(I) Q  ;remove "unknown" row if 0s | 
|---|
| 151 | .I RANX="C",RATOTAL(I)=0 K RATOTAL(I),RACOL(I) Q  ;remov 0 row if by CPT | 
|---|
| 152 | .I $D(RAXCLUDE(I)) K RATOTAL(I),RACOL(I) Q  ;remove excluded Proc Type | 
|---|
| 153 | .S RATOTAL(I)=$J(RATOTAL(I),8) | 
|---|
| 154 | .Q | 
|---|
| 155 | W !?30,"DAYS WAIT -- PERCENTAGES",! D COLHDS^RAPMW2(1) | 
|---|
| 156 | S I="" F  S I=$O(RACOL(I)) Q:I=""  D | 
|---|
| 157 | .W !,$E($S(I="unknown":""""_I_"""",1:I),1,26),?30,RAPCT(I,1),?40,RAPCT(I,2),?50,RAPCT(I,3),?60,RAPCT(I,4),?70,RAPCT(I,5) | 
|---|
| 158 | .Q | 
|---|
| 159 | D PRESS Q:RAXIT | 
|---|
| 160 | W !!!!?30,"DAYS WAIT -- COUNTS",! D COLHDS^RAPMW2(2) | 
|---|
| 161 | S I="" F  S I=$O(RACOL(I)) Q:I=""  D | 
|---|
| 162 | .W !,$E($S(I="unknown":""""_I_"""",1:I),1,26),?27,RACOL(I,1),?34,RACOL(I,2),?41,RACOL(I,3),?48,RACOL(I,4),?55,RACOL(I,5),?62,RATOTAL(I),?69,$S(RAAVG(I)="":"      -",1:RAAVG(I)) | 
|---|
| 163 | .Q | 
|---|
| 164 | W !!,"Number of procedures cancelled and re-ordered on the same day = ",RASAME | 
|---|
| 165 | ; *79, deleted display of average wait days | 
|---|
| 166 | Q | 
|---|
| 167 | FOOTS ; | 
|---|
| 168 | I RANEG W !!?3,"(There ",$S(RANEG=1:"is",1:"are")," ",RANEG," case",$S(RANEG=1:"",1:"s")," with negative days wait included in the first column.)",! | 
|---|
| 169 | D PRESS Q:RAXIT  W:$E(IOST,1,2)="C-" @IOF | 
|---|
| 170 | S RAMAX=$S($D(RATOTAL("unknown")):33,1:28) | 
|---|
| 171 | F I=1:1:RAMAX Q:RAXIT  W !?4,$P($T(FOOTS2+I),";;",2) I ($Y+5)>IOSL D PRESS Q:RAXIT  W:$E(IOST,1,2)="C-" @IOF | 
|---|
| 172 | Q | 
|---|
| 173 | PRESS ; | 
|---|
| 174 | Q:$D(ZTQUEUED) | 
|---|
| 175 | I IO=IO(0) D | 
|---|
| 176 | .I $E(IOST,1,2)="C-" R !,"Press RETURN to continue, ""^"" to exit:",RAKEY:DTIME | 
|---|
| 177 | .S:$G(RAKEY)="^" RAXIT=1 | 
|---|
| 178 | .Q | 
|---|
| 179 | Q | 
|---|
| 180 | FOOTS2 ; | 
|---|
| 181 | ;; | 
|---|
| 182 | ;;1. Cancelled, "No Credit", inpatient cases, and not the highest modality | 
|---|
| 183 | ;;   of a printset are excluded from this report.  (See 3. below.) | 
|---|
| 184 | ;; | 
|---|
| 185 | ;;2. Columns represent # of days wait from the Registered date (the date/ | 
|---|
| 186 | ;;   time entered at the "Imaging Exam Date/Time:" prompt) backwards to the | 
|---|
| 187 | ;;   Date Desired for the ordered procedure.  The calculation is based on | 
|---|
| 188 | ;;   the number of different days and not rounded off by hours.  The "31-60" | 
|---|
| 189 | ;;   column represents those orders that were registered 31 days or more but | 
|---|
| 190 | ;;   less than 61 days after the Date Desired. | 
|---|
| 191 | ;; | 
|---|
| 192 | ;;3. If the user did not select a specific CPT Code or Procedure Name, | 
|---|
| 193 | ;;   then the cases from a printset (group of cases that share the same | 
|---|
| 194 | ;;   report) will have only the case with the highest modality printed. | 
|---|
| 195 | ;;   The modalities have this hierarchical order, where (1) is the highest: | 
|---|
| 196 | ;;   (1) Interventional, (2) MRI, (3) CT, (4) Cardiac Stress test, | 
|---|
| 197 | ;;   (5) Nuc Med, (6) US, (7) Mammo, (8) General Rad (9) Other | 
|---|
| 198 | ;; | 
|---|
| 199 | ;;4. "Procedure Types" are assigned by a national CPT code look-up table | 
|---|
| 200 | ;;   and may differ from locally defined "Imaging Types."  Therefore the | 
|---|
| 201 | ;;   number of procedures in each category may not be the same as other | 
|---|
| 202 | ;;   radiology management reports. | 
|---|
| 203 | ;; | 
|---|
| 204 | ;;5. "Avg. Days" is the average days wait.  It is calculated from the sum | 
|---|
| 205 | ;;   of the days wait for that Procedure Type, divided by the count of cases | 
|---|
| 206 | ;;   included in this report for that Procedure Type.  Negative days wait | 
|---|
| 207 | ;;   is counted as 0.  A "-" means an average cannot be calculated. | 
|---|
| 208 | ;; | 
|---|
| 209 | ;;6. Procedure Type of "unknown" refers to either cases that have no | 
|---|
| 210 | ;;   matching procedure type in the spreadsheet of CPT Codes provided | 
|---|
| 211 | ;;   by the Office of Patient Care Services, or cases that are missing | 
|---|
| 212 | ;;   data for the procedure. | 
|---|
| 213 | ;; | 
|---|