1 | RAPM2 ;HOIFO/TH-Radiology Performance Monitors/Indicator; ;2/26/04 12:41
|
---|
2 | ;;5.0;Radiology/Nuclear Medicine;**37,44,48,63,67**;Mar 16, 1998
|
---|
3 | ; IA 10090 allows Read w/Fileman for entire file 4
|
---|
4 | ; Print Detail report
|
---|
5 | DETAIL ; Print Detail report
|
---|
6 | I ($Y+5)>IOSL!(RARPT="B") D
|
---|
7 | . I IO=IO(0),($E(IOST,1,2)="C-") D
|
---|
8 | . . R !,"Press RETURN to continue. ",X:DTIME
|
---|
9 | D HDR("D")
|
---|
10 | D PRTTOT
|
---|
11 | D DHDR
|
---|
12 | D DRPT Q:RAXIT
|
---|
13 | D DFOOT
|
---|
14 | Q
|
---|
15 | ;
|
---|
16 | PRTTOT ; Print total number of reports
|
---|
17 | S RATOTCNT=+$G(^TMP($J,"RAPM","TOTAL"))
|
---|
18 | W !,"Total number of reports expected for procedures performed during specified date range: ",$J(RATOTCNT,$L(RATOTCNT))
|
---|
19 | Q
|
---|
20 | ;
|
---|
21 | DHDR ; Header
|
---|
22 | I ($Y+5)>IOSL D
|
---|
23 | . S RAPG=RAPG+1,RAHD(0)="Detail Verification Timeliness Report"
|
---|
24 | . W @IOF,!?(RAIOM-$L(RAHD(0))\2),RAHD(0),?(RAIOM-10),"Page: ",$G(RAPG)
|
---|
25 | W !!,?32,"Date/Time",?48,"Date/Time",?68,"Date/Time",?102,"Cat"
|
---|
26 | W ?106,"Rpt",?110,"Img",?116,"Procedure"
|
---|
27 | W !,"Patient Name",?18,"Case #",?32,"Registered",?48,"Transcribed",?62,"Hrs"
|
---|
28 | W ?68,"Verified",?82,"Hrs",?87,"Radiologist",?102,"Exm",?106,"Sts"
|
---|
29 | W ?110,"Typ",?119,"Name",!
|
---|
30 | Q
|
---|
31 | ;
|
---|
32 | DRPT ; Read records
|
---|
33 | S RAXIT=0
|
---|
34 | I '$D(^TMP($J,"RAPM2")) W !!?30,"No data to print...",!!!!! Q
|
---|
35 | S D1="" F S D1=$O(^TMP($J,"RAPM2",D1)) Q:D1="" Q:RAXIT D
|
---|
36 | . S D2="" F S D2=$O(^TMP($J,"RAPM2",D1,D2)) Q:D2="" Q:RAXIT D
|
---|
37 | . . S D3="" F S D3=$O(^TMP($J,"RAPM2",D1,D2,D3)) Q:D3="" Q:RAXIT D
|
---|
38 | . . . D SRT
|
---|
39 | Q
|
---|
40 | ;
|
---|
41 | SRT ; Read records
|
---|
42 | I RASORT="C"!(RASORT="P") S RAREC=$G(^TMP($J,"RAPM2",D1,D2,D3)) D DET Q
|
---|
43 | S D4="" F S D4=$O(^TMP($J,"RAPM2",D1,D2,D3,D4)) Q:D4="" Q:RAXIT D
|
---|
44 | . S RAREC=$G(^TMP($J,"RAPM2",D1,D2,D3,D4)) D DET
|
---|
45 | Q
|
---|
46 | ;
|
---|
47 | DET ; Print detail records
|
---|
48 | ; use Transcription elasped hr for all sorts, except if sort by Verif.
|
---|
49 | S RAVAL=$S(RASORT="V":$P(RAREC,U,13),1:$P(RAREC,U,12))
|
---|
50 | ; remove symbols before comparison
|
---|
51 | S:$E(RAVAL)="<" RAVAL=.5 S:$E(RAVAL)=">" RAVAL=999
|
---|
52 | ; include PENDING and those with hours > RASINCE
|
---|
53 | I RAVAL'="",RAVAL<RASINCE Q
|
---|
54 | I ($Y+5)>IOSL D
|
---|
55 | . I IO=IO(0) D
|
---|
56 | . . I $E(IOST,1,2)="C-" R !,"Press RETURN to continue or ""^"" to exit. ",X:DTIME S:X="^" RAXIT=1
|
---|
57 | . Q:RAXIT
|
---|
58 | . D DHDR
|
---|
59 | Q:RAXIT
|
---|
60 | W !,$E($P(RAREC,U,2),1,15)
|
---|
61 | W ?17,$P(RAREC,U,1)
|
---|
62 | W ?31,$P($$FMTE^XLFDT($P(RAREC,U,3),"2FS"),":",1,2)
|
---|
63 | W ?46,$P($$FMTE^XLFDT($P(RAREC,U,4),"2FS"),":",1,2),?61,$J($P(RAREC,U,12),4)
|
---|
64 | W ?66,$P($$FMTE^XLFDT($P(RAREC,U,5),"2FS"),":",1,2),?81,$J($P(RAREC,U,13),4)
|
---|
65 | I $P(RAREC,U,6)'="" W ?86,$E($P(RAREC,U,6),1,16)
|
---|
66 | W ?104,$P(RAREC,U,7),?107,$P(RAREC,U,8)
|
---|
67 | W ?110,$E($P(RAREC,U,9),1,3),?114,$E($P(RAREC,U,14),1,15)
|
---|
68 | W:$P(RAREC,U,11)="" ?130,"*D"
|
---|
69 | Q
|
---|
70 | ;
|
---|
71 | DFOOT ; Footer for Detail report
|
---|
72 | I ($Y+5)>IOSL D
|
---|
73 | . I IO=IO(0) D
|
---|
74 | . . I $E(IOST,1,2)="C-" R !,"Press RETURN to continue. ",X:DTIME
|
---|
75 | . D DHDR
|
---|
76 | W !!,"Note: Category of Exam: 'I' for Inpatient; 'O' for Outpatient; "
|
---|
77 | W "'C' for Contract; 'S' for Sharing; 'E' for Employee; 'R' for Research"
|
---|
78 | W !," Report Status: 'V' for Verififed; 'R' for Released/Not "
|
---|
79 | W "Verified; 'PD' for Problem Draft; 'D' for Draft"
|
---|
80 | W:RANODIV !," *D = Division is missing"
|
---|
81 | W !!?5,"* A printset, i.e., a set of multiple exams that share the same report, will be expected to have 1 report."
|
---|
82 | W !!?5,"* Cancelled and ""No Credit"" cases are excluded from this report."
|
---|
83 | Q
|
---|
84 | ;
|
---|
85 | STORE ; Store detail information
|
---|
86 | Q:RARPT="S"
|
---|
87 | ; for storage subscript: if no rpt dt, set to neg
|
---|
88 | S RADHT=$S(RARPTDT="":-1,1:RATDFHR)
|
---|
89 | S RADHV=$S(RAVERDT="":-1,1:RAVDFHR)
|
---|
90 | ; for display: truncate decimal portion of hours
|
---|
91 | S:RATDFHR'="" RATDFHR=RATDFHR\1
|
---|
92 | S:RAVDFHR'="" RAVDFHR=RAVDFHR\1
|
---|
93 | S RATDFHR=$S(RATDFHR="":"",RATDFHR<1:"<1",RATDFHR>999:">999",1:RATDFHR)
|
---|
94 | S RAVDFHR=$S(RAVDFHR="":"",RAVDFHR<1:"<1",RAVDFHR>999:">999",1:RAVDFHR)
|
---|
95 | ;
|
---|
96 | S RAREC1=RACN_U_RAPATNM_U_RADTE_U_RARPTDT_U
|
---|
97 | S RAREC1=RAREC1_RAVERDT_U_RAPRIMNM_U_RACAT_U_RARPTST_U_RAIMGTYP_U
|
---|
98 | S RAREC1=RAREC1_RADFN_U_RACHKDIV_U_RATDFHR_U_RAVDFHR_U_RAPRCN
|
---|
99 | ;
|
---|
100 | I RASORT="C" S ^TMP($J,"RAPM2",$P(RADTE,"."),RACN,RAPATNM)=RAREC1
|
---|
101 | I RASORT="P" S ^TMP($J,"RAPM2",RAPATNM,$P(RADTE,"."),RACN)=RAREC1
|
---|
102 | I RASORT="I" S ^TMP($J,"RAPM2",RAIMGTYP,$P(RADTE,"."),RACN,RAPATNM)=RAREC1
|
---|
103 | I RASORT="E" S ^TMP($J,"RAPM2",RACAT,$P(RADTE,"."),RACN,RAPATNM)=RAREC1
|
---|
104 | I RASORT="R" S ^TMP($J,"RAPM2",RAPRIMNM,$P(RADTE,"."),RACN,RAPATNM)=RAREC1
|
---|
105 | I RASORT="T" S ^TMP($J,"RAPM2",RADHT,RADTE,RACN,RAPATNM)=RAREC1
|
---|
106 | I RASORT="V" S ^TMP($J,"RAPM2",RADHV,RADTE,RACN,RAPATNM)=RAREC1
|
---|
107 | Q
|
---|
108 | EMAIL ; Ask if ready to email the summary report
|
---|
109 | N RA1
|
---|
110 | W ! S DIR(0)="Y"
|
---|
111 | S DIR("A")="Send summary report to local mail group ""G.RAD PERFORMANCE INDICATOR"""
|
---|
112 | S DIR("B")="Yes"
|
---|
113 | D ^DIR
|
---|
114 | Q:$D(DIRUT)
|
---|
115 | S RAANS=Y
|
---|
116 | S RA1=$O(^RA(79,0)) Q:'RA1
|
---|
117 | I '$O(^RA(79,RA1,1,0)) D Q
|
---|
118 | . W !!,?5,"No OUTLOOK mail group(s) have been entered yet."
|
---|
119 | . Q
|
---|
120 | W ! S DIR(0)="Y"
|
---|
121 | S DIR("A")="Send summary report to OUTLOOK mail group(s)"
|
---|
122 | S DIR("B")="Yes"
|
---|
123 | D ^DIR
|
---|
124 | S RAANS2=Y
|
---|
125 | I RAANS2 D CKMONTH^RAPM4
|
---|
126 | Q
|
---|
127 | SEND ; Send summary report to mail group
|
---|
128 | I RAANS=0,RAANS2=0 Q
|
---|
129 | N RA1,RA2,RASVSUB,RASVTEXT,RASTR
|
---|
130 | S XMSUB="Radiology Summary Verification Timeliness"
|
---|
131 | S XMDUZ=DUZ
|
---|
132 | S XMTEXT="^TMP($J,""RAPM"","
|
---|
133 | S RASVSUB=XMSUB,RASVTEXT=XMTEXT
|
---|
134 | I RAANS=1 D
|
---|
135 | . S XMY("G.RAD PERFORMANCE INDICATOR")=""
|
---|
136 | . D ^XMD
|
---|
137 | . K XMY
|
---|
138 | . Q
|
---|
139 | I RAANS2=1 D
|
---|
140 | . S RA1=$O(^RA(79,0)) Q:'RA1
|
---|
141 | . S XMSUB=RASVSUB,XMTEXT=RASVTEXT
|
---|
142 | . S RA2=0
|
---|
143 | .; Outlook mailgroup flagged for HQ should always get automatic mid-
|
---|
144 | .; mid-month rpt, but only get user-initiated rpt if user specifies so
|
---|
145 | .;
|
---|
146 | .; All non-HQ outlook mailgroups get all reports, including autom rpt
|
---|
147 | .;
|
---|
148 | . F S RA2=$O(^RA(79,RA1,1,RA2)) Q:'RA2 S RASTR=$G(^(RA2,0)) D
|
---|
149 | .. I $P(RASTR,U,2)="Y",$G(RAUTOM) S XMY($P(RASTR,U))=""
|
---|
150 | .. I $P(RASTR,U,2)'="Y" S XMY($P(RASTR,U))=""
|
---|
151 | .. Q
|
---|
152 | . Q:'$D(XMY)
|
---|
153 | . D ^XMD
|
---|
154 | . K XMY
|
---|
155 | . Q
|
---|
156 | K XMDUZ
|
---|
157 | Q
|
---|
158 | HDR(RATYP) ; Print appropriate header
|
---|
159 | U:RAIO IO S RAPG=$G(RAPG)+1
|
---|
160 | I RAPG>1!($E(IOST,1,2)="C-") W:RAIO @IOF
|
---|
161 | I $E(IOST,1,2)="P-",(RAPG>1) W:RAIO @IOF
|
---|
162 | S RAHD(0)=$S(RATYP="S":"Summary",RATYP="D":"Detail",1:"")
|
---|
163 | S RAHD(0)=RAHD(0)_" Verification Timeliness Report"
|
---|
164 | S RAIOM=$S(RATYP="S":80,1:IOM)
|
---|
165 | W:RAIO !?(RAIOM-$L(RAHD(0))\2),RAHD(0),?(RAIOM-10),"Page: ",$G(RAPG),!
|
---|
166 | I RATYP="S" S RAN=1 D
|
---|
167 | . S ^TMP($J,"RAPM",RAN)=" Summary Verification Timeliness Report Page: "_$G(RAPG) S RAN=RAN+1
|
---|
168 | . S ^TMP($J,"RAPM",RAN)="",RAN=RAN+1
|
---|
169 | ;
|
---|
170 | D GETS^DIQ(4,DUZ(2),".01;14*;99","E","RAR","RAMSG")
|
---|
171 | K X
|
---|
172 | S X(1)=RAR(4,DUZ(2)_",",.01,"E") ; Name of facility
|
---|
173 | S X(2)=RAR(4,DUZ(2)_",",99,"E") ; Station Number
|
---|
174 | I $D(RAR(4.014)) D
|
---|
175 | . S X(3)=RAR(4.014,"1,"_DUZ(2)_",",.01,"E") ; Association
|
---|
176 | . S X(4)=RAR(4.014,"1,"_DUZ(2)_",",1,"E") ; Parent of Association
|
---|
177 | . S X(5)=$S(X(3)="VISN":X(4),1:"") ; should be VISN number
|
---|
178 | E S X(5)=""
|
---|
179 | ;
|
---|
180 | W:RAIO !,"Facility: ",X(1),?41,"Station: ",X(2),?60,"VISN: ",X(5)
|
---|
181 | I RATYP="S" D
|
---|
182 | . S $P(X(6)," ",79)=""
|
---|
183 | . S $E(X(6),1,(10+$L(X(1))))="Facility: "_X(1)
|
---|
184 | . S $E(X(6),41,(50+$L(X(2))))="Station: "_X(2)
|
---|
185 | . S $E(X(6),60,(66+$L(X(5))))="VISN: "_X(5)
|
---|
186 | . S ^TMP($J,"RAPM",RAN)=X(6)
|
---|
187 | . S RAN=RAN+1
|
---|
188 | . Q
|
---|
189 | W !,"Division: "
|
---|
190 | I RATYP="S" S ^TMP($J,"RAPM",RAN)="Division: "
|
---|
191 | D DIV
|
---|
192 | S:(RATYP="S") RAN=RAN+1
|
---|
193 | ;
|
---|
194 | W:RAIO !,"Exam Date Range: "
|
---|
195 | W:RAIO $$FMTE^XLFDT(RABDATE,"2D")," - ",$$FMTE^XLFDT(RAEDATE,"2D")
|
---|
196 | I RATYP="S" S ^TMP($J,"RAPM",RAN)="Exam Date Range: "_$$FMTE^XLFDT(RABDATE,"2D")_" - "_$$FMTE^XLFDT(RAEDATE,"2D") S RAN=RAN+1
|
---|
197 | ;
|
---|
198 | W:RAIO !,"Imaging Type(s): "
|
---|
199 | I RATYP="S" S ^TMP($J,"RAPM",RAN)="Imaging Type(s): "
|
---|
200 | D IMG
|
---|
201 | S:RATYP="S" RAN=RAN+1
|
---|
202 | ;
|
---|
203 | ; Run date and time
|
---|
204 | S NOW=$$NOW^XLFDT,NOW=$P(NOW,".",1)_"."_$E($P(NOW,".",2),1,4)
|
---|
205 | W:RAIO !,"Run Date/Time: ",$$FMTE^XLFDT(NOW,"2P"),!
|
---|
206 | I RATYP="S" S ^TMP($J,"RAPM",RAN)="Run Date/Time: "_$$FMTE^XLFDT(NOW,"2P"),RAN=RAN+1
|
---|
207 | I RARAD D
|
---|
208 | . W:RAIO !,"Primary Interpreting Staff Physician: ",$$GET1^DIQ(200,RARAD,.01),!
|
---|
209 | . I RATYP="S" D
|
---|
210 | .. S ^TMP($J,"RAPM",RAN)="",RAN=RAN+1
|
---|
211 | .. S ^TMP($J,"RAPM",RAN)="Primary Interpreting Staff Physician: "_$$GET1^DIQ(200,RARAD,.01),RAN=RAN+1
|
---|
212 | .. Q
|
---|
213 | . Q
|
---|
214 | I (RARPT="D"!(RARPT="B")),(RATYP'="S") D
|
---|
215 | . S RASRT=$S(RASORT="C":"Case Number",RASORT="E":"Category of Exam",RASORT="I":"Imaging Type",RASORT="P":"Patient Name",RASORT="R":"Radiologist",RASORT="T":"Hrs to Transcription",RASORT="V":"Hrs to Verification",1:"")
|
---|
216 | . W:RAIO !,"Sorted by: ",RASRT,?45,"Min. hours elasped to "_$S(RASORT="V":"Verification",1:"Transcription")_": "_RASINCE
|
---|
217 | Q
|
---|
218 | DIV ; List selected Division
|
---|
219 | Q:'$D(^TMP($J,"RA D-TYPE"))
|
---|
220 | S RADIV="" F I=1:1 S RADIV=$O(^TMP($J,"RA D-TYPE",RADIV)) Q:RADIV="" D
|
---|
221 | . I $X'>(RAIOM-$L("Division(s): ")) D
|
---|
222 | . . W:RAIO RADIV_$S($O(^TMP($J,"RA D-TYPE",RADIV))]"":", ",1:"")
|
---|
223 | . . I RATYP="S" S ^TMP($J,"RAPM",RAN)=^TMP($J,"RAPM",RAN)_RADIV_$S($O(^TMP($J,"RA D-TYPE",RADIV))]"":", ",1:"")
|
---|
224 | . I $X>(RAIOM-$L("Division(s): ")) D
|
---|
225 | . . W:RAIO !?($X+$L("Division(s): "))
|
---|
226 | . . I RATYP="S" S RAN=RAN+1,^TMP($J,"RAPM",RAN)=" "
|
---|
227 | Q
|
---|
228 | IMG ; List selected Imaging Type(s)
|
---|
229 | Q:'$D(^TMP($J,"RA I-TYPE"))
|
---|
230 | ;N RALMAX,RALUSED,RATAIL,RALDENT
|
---|
231 | S RALDENT=$L("Imaging Type(s): ")
|
---|
232 | S RALMAX=RAIOM-RALDENT
|
---|
233 | S RALUSED=0
|
---|
234 | S RAIMG="" F J=1:1 S RAIMG=$O(^TMP($J,"RA I-TYPE",RAIMG)) Q:RAIMG="" D
|
---|
235 | . S RATAIL=$S($O(^TMP($J,"RA I-TYPE",RAIMG))]"":", ",1:"")
|
---|
236 | . I (RALUSED+$L(RAIMG)+$L(RATAIL))>RALMAX D
|
---|
237 | .. W:RAIO !?RALDENT
|
---|
238 | .. I RATYP="S" S RAN=RAN+1,^TMP($J,"RAPM",RAN)=" "
|
---|
239 | .. S RALUSED=0
|
---|
240 | .. Q
|
---|
241 | . W:RAIO RAIMG_RATAIL
|
---|
242 | . I RATYP="S" S ^TMP($J,"RAPM",RAN)=^TMP($J,"RAPM",RAN)_RAIMG_RATAIL
|
---|
243 | . S RALUSED=RALUSED+$L(RAIMG)+$L(RATAIL)
|
---|
244 | Q
|
---|