| 1 | RAPMW ;HOIFO/SWM-Radiology Wait Time reports ;11/07/05 12:53
 | 
|---|
| 2 |  ;;5.0;Radiology/Nuclear Medicine;**67,79,83**;Mar 16, 1998;Build 4
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; ___ set up RACESS array
 | 
|---|
| 5 |  I $D(DUZ),($O(RACCESS(DUZ,""))']"") D CHECK^RADLQ3(DUZ)
 | 
|---|
| 6 |  ; ___ new/set/kill other variables
 | 
|---|
| 7 |  K ^TMP($J)
 | 
|---|
| 8 |  ;**********************************************************
 | 
|---|
| 9 |  ;*  On Dec. 14, 2006, Dr. Anderson requested that the
 | 
|---|
| 10 |  ;*  RADIAION THERAPY procedure type be dropped from the
 | 
|---|
| 11 |  ;*  Wait Times Report but it may be included in the future.
 | 
|---|
| 12 |  ;*  
 | 
|---|
| 13 |  ;*  If RADIATION THERAPY will be included again, the only
 | 
|---|
| 14 |  ;*  coding that needs to be changed is the line below; it
 | 
|---|
| 15 |  ;*  should be removed.  The rest of the coding that handles
 | 
|---|
| 16 |  ;*  exclusion of Procedure Types don't have to be changed
 | 
|---|
| 17 |  ;*  because it uses RAXCLUDE() to exclude procedure types.
 | 
|---|
| 18 |  ;*
 | 
|---|
| 19 |  S RAXCLUDE("RADIATION THERAPY")=""
 | 
|---|
| 20 |  ;*
 | 
|---|
| 21 |  ;***********************************************************
 | 
|---|
| 22 |  D SETPTA
 | 
|---|
| 23 |  S (RATOTAL,RAXIT)=0
 | 
|---|
| 24 |  W @IOF
 | 
|---|
| 25 |  W !,"Radiology Outpatient Procedure Wait Time Report"
 | 
|---|
| 26 |  ; __ get report type
 | 
|---|
| 27 |  D GETTYP I $D(DIRUT) G EXIT
 | 
|---|
| 28 |  ; ___ get date range
 | 
|---|
| 29 |  W !! D GETDATE I $D(DIRUT) G EXIT
 | 
|---|
| 30 |  ; ___ get division
 | 
|---|
| 31 |  S X=$$GETDIV() I X G EXIT
 | 
|---|
| 32 |  ; ___ ask what to ask next, procedure or img typ
 | 
|---|
| 33 |  D ASKIP I RANX="" G EXIT
 | 
|---|
| 34 |  I RANX="P" D  W "."
 | 
|---|
| 35 |  .W !!?5,"All PROCEDURE TYPES will be included"
 | 
|---|
| 36 |  .I $O(RAXCLUDE(""))]"" D
 | 
|---|
| 37 |  .W ", except "
 | 
|---|
| 38 |  .S I="" F  S I=$O(RAXCLUDE(I)) Q:I=""  W I W:$O(RAXCLUDE(I))]"" ", "
 | 
|---|
| 39 |  .Q
 | 
|---|
| 40 |  I RANX="C" D  I RAQUIT G EXIT
 | 
|---|
| 41 |  . ; ___ get procedure/CPT CODE(s)
 | 
|---|
| 42 |  . D GETPROC
 | 
|---|
| 43 |  . Q
 | 
|---|
| 44 |  ; *79, skip ask spec imaing type
 | 
|---|
| 45 |  I "B^D"[RATYP D  I $D(DIRUT) G EXIT
 | 
|---|
| 46 |  . D ASKSORT I $D(DIRUT) Q
 | 
|---|
| 47 |  . D ASKDAYS
 | 
|---|
| 48 |  . Q
 | 
|---|
| 49 |  I "B^D"[RATYP D
 | 
|---|
| 50 |  .S RATXT="*** The detail report requires a 132 column output device ***"
 | 
|---|
| 51 |  .S RALINE="",$P(RALINE,"*",$L(RATXT)+1)=""
 | 
|---|
| 52 |  .W !!?(80-$L(RATXT)\2),RALINE,!?(80-$L(RATXT)\2),RATXT,!?(80-$L(RATXT)\2),RALINE,!
 | 
|---|
| 53 |  .Q
 | 
|---|
| 54 |  D GETDEV I RAPOP G EXIT
 | 
|---|
| 55 |  D START
 | 
|---|
| 56 |  Q
 | 
|---|
| 57 | START ; taskman to del task after job, set Radiology IO
 | 
|---|
| 58 |  S:$D(ZTQUEUED) ZTREQ="@" S RAIO=$S(IO="":0,1:1) ;RAIO true/false
 | 
|---|
| 59 |  ; get data
 | 
|---|
| 60 |  ;    remove: inpatient, cancelled
 | 
|---|
| 61 |  ;    keep: specific proc/CPT, imag types if entered
 | 
|---|
| 62 |  S RASAME=0 ; count # procedures cancelled and re-ordered same day
 | 
|---|
| 63 |  S RANEG=0 ; count # negative Days Wait
 | 
|---|
| 64 |  D GETDATA
 | 
|---|
| 65 |  U:RAIO IO
 | 
|---|
| 66 |  I "S^B"[RATYP D WRTSUM^RAPMW1 ; summary report
 | 
|---|
| 67 |  I RATYP="B",$E(IOST,1,2)'="C-" W @IOF
 | 
|---|
| 68 |  I "D^B"[RATYP D WRTDET^RAPMW2 ; detail report
 | 
|---|
| 69 |  D EXIT
 | 
|---|
| 70 |  Q
 | 
|---|
| 71 | GETTYP ;
 | 
|---|
| 72 |  S DIR(0)="S^S:Summary;D:Detail;B:Both"
 | 
|---|
| 73 |  S DIR("A")="Select Report Type",DIR("B")="S"
 | 
|---|
| 74 |  S DIR("?")="Enter Summary report OR Detail report OR Both reports"
 | 
|---|
| 75 |  W !!,"Enter Report Type"
 | 
|---|
| 76 |  D ^DIR K DIR
 | 
|---|
| 77 |  Q:$D(DIRUT)
 | 
|---|
| 78 |  S RATYP=Y
 | 
|---|
| 79 |  Q
 | 
|---|
| 80 | GETDATE ; start and end dates
 | 
|---|
| 81 |  S DIR(0)="D^:"_DT_":AEX"
 | 
|---|
| 82 |  W !?4,"The starting and ending dates are based upon what was entered at",!?4,"the ""Imaging Exam Date/Time"" prompt during Registration.",!
 | 
|---|
| 83 |  S DIR("A")="Enter starting date"
 | 
|---|
| 84 |  S DIR("?")="Enter date to begin searching Exam date from"
 | 
|---|
| 85 |  D ^DIR K DIR
 | 
|---|
| 86 |  Q:$D(DIRUT)
 | 
|---|
| 87 |  S RABDATE=Y
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 |  S RADD=$S(RATYP="S":91,1:31),X1=RABDATE,X2=RADD D C^%DTC S RAMAXDT=X
 | 
|---|
| 90 |  I RAMAXDT>DT S RAMAXDT=DT W !!?4,"** Ending Date cannot be later than today's date. **",!
 | 
|---|
| 91 |  S DIR(0)="D^"_RABDATE_":"_RAMAXDT_":AEX"
 | 
|---|
| 92 |  S DIR("A")="Enter ending date"
 | 
|---|
| 93 |  S DIR("?",1)="+91 days max. for Summary, +31 days max. for Detail."
 | 
|---|
| 94 |  S DIR("?")="But the Ending Date cannot be later than today's date."
 | 
|---|
| 95 |  D ^DIR K DIR
 | 
|---|
| 96 |  Q:$D(DIRUT)
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 |  ; RABDATE, RAEDATE original values
 | 
|---|
| 99 |  ; RABEGDT, RAENDDT used in GETDATA 
 | 
|---|
| 100 |  ; Set to end of day
 | 
|---|
| 101 |  S RAEDATE=Y,RAENDDT=RAEDATE_.9999
 | 
|---|
| 102 |  ; Set to include current day
 | 
|---|
| 103 |  S RABEGDT=(RABDATE-1)_.9999
 | 
|---|
| 104 |  Q
 | 
|---|
| 105 | GETDIV() ;
 | 
|---|
| 106 |  N X S X=$$SETUPDI^RAUTL7() Q:X 1
 | 
|---|
| 107 |  D SELDIV^RAUTL7
 | 
|---|
| 108 |  I '$D(^TMP($J,"RA D-TYPE"))!(RAQUIT) D  Q 1
 | 
|---|
| 109 |  .K RACCESS(DUZ,"DIV-IMG"),^TMP($J,"DIV-IMG")
 | 
|---|
| 110 |  .Q
 | 
|---|
| 111 |  Q 0
 | 
|---|
| 112 | ASKIP ;
 | 
|---|
| 113 |  S RANX=""
 | 
|---|
| 114 |  S DIR(0)="S^C:CPT Code/Procedure Name;P:Procedure Type"
 | 
|---|
| 115 |  S DIR("?")=" "
 | 
|---|
| 116 |  S DIR("?",1)="   ""CPT Code/Procedure Name"" will include only the"
 | 
|---|
| 117 |  S DIR("?",2)="   user selected CPT Codes and Procedure names in this"
 | 
|---|
| 118 |  S DIR("?",3)="   date range, except for cases that are cancelled, have"
 | 
|---|
| 119 |  S DIR("?",4)="   no credit, and are inpatient."
 | 
|---|
| 120 |  S DIR("?",5)=" "
 | 
|---|
| 121 |  S DIR("?",6)="   ""Procedure Type"" will include all cases in this"
 | 
|---|
| 122 |  S DIR("?",7)="   date range, except for the 3 exclusions above and also"
 | 
|---|
| 123 |  S DIR("?",8)="   except if the case is part of a printset and it is not"
 | 
|---|
| 124 |  S DIR("?",9)="   the highest ranked modality in the printset."
 | 
|---|
| 125 |  S DIR("A")="What do you want to choose next",DIR("B")="P"
 | 
|---|
| 126 |  W !!,"Enter next item to select."
 | 
|---|
| 127 |  D ^DIR K DIR
 | 
|---|
| 128 |  Q:$D(DIRUT)
 | 
|---|
| 129 |  S RANX=Y
 | 
|---|
| 130 |  Q
 | 
|---|
| 131 |  ; *79 removed GETIMG() section
 | 
|---|
| 132 | GETPROC ;
 | 
|---|
| 133 |  S RADIC="^RAMIS(71,",RADIC(0)="QEAMZ"
 | 
|---|
| 134 |  S RADIC("A")="Select Procedure/CPT Code: "
 | 
|---|
| 135 |  S RAUTIL="RA WAIT"
 | 
|---|
| 136 |  D EN1^RASELCT(.RADIC,RAUTIL)
 | 
|---|
| 137 |  Q:RAQUIT
 | 
|---|
| 138 |  S RA1=""
 | 
|---|
| 139 |  F  S RA1=$O(^TMP($J,"RA WAIT",RA1)) Q:RA1=""  S RA2=0 D
 | 
|---|
| 140 |  .F  S RA2=$O(^TMP($J,"RA WAIT",RA1,RA2)) Q:'RA2  S ^TMP($J,"RA WAIT2",RA2)="",^TMP($J,"RA WAIT1",RA1)=$P($$NAMCODE^RACPTMSC($P($G(^RAMIS(71,RA2,0)),U,9),DT),U) D
 | 
|---|
| 141 |  ..;if parent was selected, then save iens of its descendents for FILTER2
 | 
|---|
| 142 |  ..I $P(^RAMIS(71,RA2,0),U,6)="P" D
 | 
|---|
| 143 |  ...S RA3=0 F  S RA3=$O(^RAMIS(71,RA2,4,"B",RA3)) Q:'RA3  S ^TMP($J,"RA WAIT2",RA3)=""
 | 
|---|
| 144 |  ...Q
 | 
|---|
| 145 |  ..Q
 | 
|---|
| 146 |  .Q
 | 
|---|
| 147 |  Q
 | 
|---|
| 148 | ASKSORT ;
 | 
|---|
| 149 |  S DIR(0)="S^CN:Case Number;CPT:CPT Code;DD:Date Desired;D:Days Wait;DO:Date of Order;DR:Date of Registration;I:Imaging Type;PN:Patient Name;PT:PROCEDURE TYPE;PROC:Procedure Name"
 | 
|---|
| 150 |  S DIR("?")="Select which item to use for sorting the Detail Report"
 | 
|---|
| 151 |  S DIR("A")="Sorted by",DIR("B")="D"
 | 
|---|
| 152 |  W !!,"Sort report by"
 | 
|---|
| 153 |  D ^DIR
 | 
|---|
| 154 |  I $D(DIRUT) K DIR Q
 | 
|---|
| 155 |  S RASORT=Y
 | 
|---|
| 156 |  S RASORTNM=Y(0)
 | 
|---|
| 157 |  S:RASORTNM["Regis" RASORTNM="Dt. Register"
 | 
|---|
| 158 |  K DIR
 | 
|---|
| 159 |  Q
 | 
|---|
| 160 | ASKDAYS ;
 | 
|---|
| 161 |  S DIR(0)="N^0:120"
 | 
|---|
| 162 |  S DIR("A")="Print wait days greater than or equal to"
 | 
|---|
| 163 |  S DIR("B")="0"
 | 
|---|
| 164 |  S DIR("?",1)="Enter the minimum number of Days Wait between Date Desired and Registered Date."
 | 
|---|
| 165 |  S DIR("?",2)="Only cases with Days Wait greater than or equal to this value"
 | 
|---|
| 166 |  S DIR("?")="will be listed in the detail report."
 | 
|---|
| 167 |  D ^DIR K DIR Q:$D(DIRUT)  S RASINCE=Y
 | 
|---|
| 168 |  Q
 | 
|---|
| 169 | GETDEV ;
 | 
|---|
| 170 |  W:RATYP="B" !!,"Specify device for both summary and detail reports."
 | 
|---|
| 171 |  D TASK
 | 
|---|
| 172 |  D ZIS^RAUTL
 | 
|---|
| 173 |  Q
 | 
|---|
| 174 | TASK ; set vars for taskman
 | 
|---|
| 175 |  S ZTRTN="START^RAPMW"
 | 
|---|
| 176 |  S ZTSAVE("RA*")=""
 | 
|---|
| 177 |  S ZTSAVE("^TMP($J,")=""
 | 
|---|
| 178 |  S ZTDESC="Radiology Outpatient Wait Time Report"
 | 
|---|
| 179 |  Q
 | 
|---|
| 180 | GETDATA ;
 | 
|---|
| 181 |  S RABAD=0 ;=0 means nothing bad, so accept case; =1 means reject case
 | 
|---|
| 182 |  ;loop thru exam date (RADTE)
 | 
|---|
| 183 |  S RADTE=RABEGDT
 | 
|---|
| 184 |  F  S RADTE=$O(^RADPT("AR",RADTE)) Q:'RADTE  Q:(RADTE>RAENDDT)  D
 | 
|---|
| 185 |  .S RADFN="" F  S RADFN=$O(^RADPT("AR",RADTE,RADFN)) Q:'RADFN  S RABAD=0 D
 | 
|---|
| 186 |  ..S RADTI="" F  S RADTI=$O(^RADPT("AR",RADTE,RADFN,RADTI)) Q:'RADTI  D FILTER1^RAPMW1 I 'RABAD D
 | 
|---|
| 187 |  ...S RACNI=0 F  S RACNI=$O(^RADPT(RADFN,"DT",RADTI,"P",RACNI)) Q:'RACNI  D FILTER2^RAPMW1 I 'RABAD D CALC^RAPMW2
 | 
|---|
| 188 |  ...Q
 | 
|---|
| 189 |  ..Q
 | 
|---|
| 190 |  .Q
 | 
|---|
| 191 |  Q
 | 
|---|
| 192 | EXIT ;
 | 
|---|
| 193 |  D CLOSE^RAUTL ;close dev
 | 
|---|
| 194 |  K I,J,POP,RA0,RA1,RA16,RA2,RA3,RA71REC,RA72,X,X1,X2,Y,^TMP($J)
 | 
|---|
| 195 |  K RABAD,RABDATE,RABEGDT,RACHKDIV,RACN0,RACNI,RACNISAV,RACNL,RACOL
 | 
|---|
| 196 |  K RACPT,RADASH,RADD,RADFN,RADIC,RADIV,RADSDT,RADTE,RADTI,RADTORD
 | 
|---|
| 197 |  K RAEDATE,RAENDDT,RAH1,RAH3,RAH4,RAH5,RAH6,RAH7,RAH8,RAHD0,RAIMGTYP
 | 
|---|
| 198 |  K RAIO,RAIOM,RAIT,RAITYP,RAKEY,RALINE,RAMAX,RAMAXDT,RANEG,RANOW,RANX
 | 
|---|
| 199 |  K RAOREC,RAORIEN,RAPATND,RAPATNM,RAPG,RAPOP,RAPROCNM,RAPSTX,RAQUIT
 | 
|---|
| 200 |  K RAR,RAREC,RASAME,RASAME2,RASELDIV,RASINCE,RASORT,RASORTNM
 | 
|---|
| 201 |  K RAAVG,RATOTAL,RATYP,RAUTIL,RAWAITD,RATXT,RAXDT,RAXIT,RAXMST
 | 
|---|
| 202 |  K RACPTC,RACPTI,RAHI,RAHIER,RAPCT,RAPRC,RAPTA,RARY,RAXCLUDE,RAMES
 | 
|---|
| 203 |  ;
 | 
|---|
| 204 |  ; ^TMP($J,"RA I-TYPE","CT SCAN",ienFile79.2)="" <--*79 not needed
 | 
|---|
| 205 |  ; ^TMP($J,"RA D-TYPE","SUPPORT ISC",ienFile79)=""
 | 
|---|
| 206 |  ; ^TMP($J,"RA WAIT",ProcNam,ienFile71)=""<--from EN1^RASELCT
 | 
|---|
| 207 |  ; ^TMP($J,"RA WAIT1",ProcNam)=CPTcode<--hdr of rpt, SETHD^RAPMW1
 | 
|---|
| 208 |  ; ^TMP($J,"RA WAIT2",ienFile71)=""<--screen cases, FILTER2^RAPMW1
 | 
|---|
| 209 |  ;ex.   ^TMP($J,"RA WAIT","TEETH",31)=
 | 
|---|
| 210 |  ;ex.   ^TMP($J,"RA WAIT1","TEETH")=70320
 | 
|---|
| 211 |  ;ex.   ^TMP($J,"RA WAIT2",31)=
 | 
|---|
| 212 |  ; ^TMP($J,"RA WAIT NO ORD",RADFN,RADTI,RACNI)=ienFile75.1
 | 
|---|
| 213 |  ; ^TMP($J,"RA WAIT NO DSR DT",RADFN,RADTI,RACNI)=ienFile75.1
 | 
|---|
| 214 |  ; ^TMP($J,"RA WAIT3",RASORT,RADTE,RAPATNM,RACNI)=""<--detail display
 | 
|---|
| 215 |  Q
 | 
|---|
| 216 | SETPTA ;Set up Proc Type Array, w Sherrill Snuggs' Xcel file
 | 
|---|
| 217 |  ; also setup RATOTAL(), RACOL(,), RAHIER()
 | 
|---|
| 218 |  N I,J
 | 
|---|
| 219 |  S I=""
 | 
|---|
| 220 |  ; RATOTAL(I) sub-total, each Proc Type
 | 
|---|
| 221 |  ; RAWAITD(I) total wait days, each Proc Type
 | 
|---|
| 222 |  ; RAAVG(I)   average wait days, each Proc Type
 | 
|---|
| 223 |  F  S I=$O(^RA(73.2,"AC",I)) Q:I=""  S RATOTAL(I)=0,RAWAITD(I)=0,RAAVG(I)=0 F J=1:1:5 S RACOL(I,J)=0
 | 
|---|
| 224 |  S I="unknown",RATOTAL(I)=0,RAWAITD(I)=0,RAAVG(I)=0 F J=1:1:5 S RACOL(I,J)=0
 | 
|---|
| 225 |  ; Rank Proc Types, needed to pick case from printset
 | 
|---|
| 226 |  ; 1=Interventional  2=MR  3=CT  4=Card. Stress Test  5=NM
 | 
|---|
| 227 |  ; 6=US  7=Mammo  8=Plain Film (Gen Rad)  9=Other
 | 
|---|
| 228 |  S I=""
 | 
|---|
| 229 |  F  S I=$O(RATOTAL(I)) Q:I=""  D
 | 
|---|
| 230 |  .S J=$E(I,1,3)
 | 
|---|
| 231 |  .S RAHIER(I)=$S(J="CAR":4,J="COM":3,J="GEN":8,J="INT":1,J="MAG":2,J="MAM":7,J="NUC":5,J="ULT":6,1:9)
 | 
|---|
| 232 |  .Q
 | 
|---|
| 233 |  Q
 | 
|---|