1 | RAWKLU ;HISC/GJC-physician workload statistics by wRVU or CPT ;10/26/05 14:57
|
---|
2 | ;;5.0;Radiology/Nuclear Medicine;**64,77**;Mar 16, 1998;Build 7
|
---|
3 | ;09/25/06 KAM/BAY Remedy Call 154793 PATCH *77 RVU with 0 value
|
---|
4 | ; and changed CPT calls from ^ICPTCOD to ^RACPTMSC
|
---|
5 | ; eliminating the need for IA's 1995 amd 1996
|
---|
6 | ;03/28/07 KAM/BAY Remedy Call 179232 Patch RA*5*77
|
---|
7 | ; Add check to see if current RVU data is available and if
|
---|
8 | ; not use previous year RVU data
|
---|
9 | ;
|
---|
10 | ;DBIA#:4799 ($$RVU^FBRVU) return wRVU value for CPT, CPT Mod, & exam
|
---|
11 | ; date/time
|
---|
12 | ;DBIA#:10060 EN1^RASELCT enacts 10060 which allows lookups on the NEW
|
---|
13 | ; PERSON (#200) file
|
---|
14 | ;DBIA#:10063 ($$S^%ZTLOAD)
|
---|
15 | ;DBIA#:10103 ($$FMTE^XLFDT) & ($$NOW^XLFDT)
|
---|
16 | ;DBIA#:10104 ($$CJ^XLFSTR)
|
---|
17 | ;DBIA#:1519 ($$EN^XUTMDEVQ)
|
---|
18 | ;
|
---|
19 | EN(RARPTYP,RASCLD) ;Identifies the option that the user wishes to execute.
|
---|
20 | ;input: RARPTYP="CPT" for the CPT workload report -or- "RVU" for
|
---|
21 | ; wRVU workload report. Exit if the value is neither 'CPT'
|
---|
22 | ; or 'RVU'.
|
---|
23 | ; RASCLD=null for the CPT report, zero for non-scaled wRVU, & one
|
---|
24 | ; for the scaled wRVU report.
|
---|
25 | ;
|
---|
26 | I RARPTYP'="CPT",(RARPTYP'="RVU") Q
|
---|
27 | I RARPTYP="CPT",(RASCLD'="") Q
|
---|
28 | K ^TMP($J,"RA STFPHYS"),^TMP("RA STFPHYS-IEN",$J)
|
---|
29 | I RARPTYP="RVU" W !!,"Please note that this report is best suited for display on a 132 column device."
|
---|
30 | ;
|
---|
31 | PHYST ;allow the user to select one/many/all physicians
|
---|
32 | ;(w/ staff classification) ;DBIA#: 10060
|
---|
33 | S RADIC="^VA(200,",RADIC(0)="QEAMZ",RAUTIL="RA STFPHYS"
|
---|
34 | S RADIC("A")="Select Physician: ",RADIC("B")="All"
|
---|
35 | S RADIC("S")="I $D(^VA(200,""ARC"",""S"",+Y))\10"
|
---|
36 | W !! D EN1^RASELCT(.RADIC,RAUTIL) K %W,%Y1,DIC,RADIC,RAQUIT,RAUTIL,X,Y
|
---|
37 | ;did the user select physicians to compile data on? if not, quit
|
---|
38 | I $O(^TMP($J,"RA STFPHYS",""))="" D Q
|
---|
39 | .W !!?3,$C(7),"Staff Physician data was not selected."
|
---|
40 | .Q
|
---|
41 | ;
|
---|
42 | ;build a new staff physician array (the other array is subscripted by
|
---|
43 | ;physician name then IEN) subscripting by staff physician IEN this
|
---|
44 | ;allows us to check the IEN of the staff physician selected by the
|
---|
45 | ;user against the IEN of the staff physician on the exam record
|
---|
46 | S X="" F S X=$O(^TMP($J,"RA STFPHYS",X)) Q:X="" D
|
---|
47 | .S Y=0
|
---|
48 | .F S Y=$O(^TMP($J,"RA STFPHYS",X,Y)) Q:'Y S ^TMP("RA STFPHYS-IEN",$J,Y)=""
|
---|
49 | .Q
|
---|
50 | ;
|
---|
51 | K ^TMP($J,"RA STFPHYS") S RADATE=$$FMTE^XLFDT($$NOW^XLFDT\1,1)
|
---|
52 | ;
|
---|
53 | STRTDT ;Prompt the user for a starting date (VERIFIED DATE)
|
---|
54 | S RASTART=$$STRTDT^RAWKLU1(RADATE,2110101)
|
---|
55 | I RASTART=-1 D XIT Q
|
---|
56 | S RABGDTI=$P(RASTART,U),RABGDTX=$P(RASTART,U,2),RAMBGDT=RABGDTI-.0001
|
---|
57 | ;need inv. verified date to search ^RARPT("AA",
|
---|
58 | S RAMBGDT=9999999.9999-RAMBGDT
|
---|
59 | K RASTART
|
---|
60 | ;
|
---|
61 | ENDDT ;Prompt the user for an ending date (VERIFIED DATE)
|
---|
62 | S RAEND=$$ENDDT^RAWKLU1(RABGDTI,RABGDTX)
|
---|
63 | I RAEND=-1 D XIT Q
|
---|
64 | S RAENDTI=$P(RAEND,U),RAENDTX=$P(RAEND,U,2),RAMENDT=RAENDTI+.9999
|
---|
65 | ;need inv. verified date to search ^RARPT("AA",
|
---|
66 | S RAMENDT=9999999.9999-RAMENDT
|
---|
67 | K RAEND
|
---|
68 | ;
|
---|
69 | F I="RARPTYP","^TMP(""RA STFPHYS-IEN"",$J,","RADATE","RAB*","RAM*","RAE*","RASCLD" S ZTSAVE(I)=""
|
---|
70 | S I="RA print "_$S(RARPTYP="CPT":"CPTs",1:"wRVUs")_" totals for physicians within imaging type"
|
---|
71 | D EN^XUTMDEVQ("START^RAWKLU",I,.ZTSAVE,,1)
|
---|
72 | I +$G(ZTSK)>0 W !!,"Task Number: "_ZTSK,!
|
---|
73 | K I,ZTSAVE,ZTSK
|
---|
74 | Q
|
---|
75 | ;
|
---|
76 | START ;check exams based on criteria input by user; physician & exam D/T
|
---|
77 | ;eliminate the exam record is one of the following conditions is true:
|
---|
78 | ;1-the status of the exam is 'Cancelled'
|
---|
79 | ;2-the physician(s) selected are not the primary staff for the exam
|
---|
80 | ;
|
---|
81 | ;03/28/07 KAM/BAY Remedy Call 179232 Added next line
|
---|
82 | S RACYFLG=0
|
---|
83 | ;03/28/07 KAM/BAY RA*5*77/179232 Added Fee Basis Data Check
|
---|
84 | D CHKCY^RAWKLU2
|
---|
85 | S:$D(ZTQUEUED)#2 ZTREQ="@"
|
---|
86 | K ^TMP($J,"RA BY STFPHYS"),^TMP($J,"RA BY I-TYPE")
|
---|
87 | S ^TMP($J,"RA BY I-TYPE")="0^0^0^0^0^0^0^0^0",CNT=0
|
---|
88 | ;define where the totals for imaging type will reside on the globals
|
---|
89 | F RAI="RAD","MRI","CT","US","NM","VAS","ANI","CARD","MAM" S CNT=CNT+1,RAIAB(RAI)=CNT
|
---|
90 | K RAI,CNT S RARPTVDT=RAMBGDT,(RACNT,RAXIT)=0
|
---|
91 | F S RARPTVDT=$O(^RARPT("AA",RARPTVDT),-1) Q:'RARPTVDT!(RARPTVDT<RAMENDT) D Q:RAXIT
|
---|
92 | .S RARPTIEN=0
|
---|
93 | .F S RARPTIEN=$O(^RARPT("AA",RARPTVDT,RARPTIEN)) Q:'RARPTIEN D Q:RAXIT
|
---|
94 | ..S RARPT=$G(^RARPT(RARPTIEN,0)),RADFN=+$P(RARPT,U,2),RADTE=+$P(RARPT,U,3)
|
---|
95 | ..S RADTI=9999999.9999-RADTE,RA7002=$G(^RADPT(RADFN,"DT",RADTI,0))
|
---|
96 | ..Q:$P(RA7002,U,2)="" ;no imaging type defined
|
---|
97 | ..S RAITYP=$P($G(^RA(79.2,$P(RA7002,U,2),0)),U,3) ;abbreviation
|
---|
98 | ..Q:'($D(RAIAB(RAITYP))#2)
|
---|
99 | ..S RACNI=0
|
---|
100 | ..F S RACNI=$O(^RADPT(RADFN,"DT",RADTI,"P",RACNI)) Q:'RACNI D Q:RAXIT
|
---|
101 | ...S RA7003=$G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0)) Q:RA7003="" ;missing exam node
|
---|
102 | ...Q:$P(RA7003,U,17)'=RARPTIEN ;exam references a different report!
|
---|
103 | ...S RACNT=RACNT+1
|
---|
104 | ...;
|
---|
105 | ...;did the user stop the task? Check every five hundred records...
|
---|
106 | ...S:RACNT#500=0 (RAXIT,ZTSTOP)=$$S^%ZTLOAD() Q:RAXIT
|
---|
107 | ...;
|
---|
108 | ...;1-begin exam status check
|
---|
109 | ...Q:$P($G(^RA(72,+$P(RA7003,U,3),0)),U,3)=0 ;cancelled...
|
---|
110 | ...;end exam status check
|
---|
111 | ...;
|
---|
112 | ...;2-begin physician check
|
---|
113 | ...Q:'$P(RA7003,U,15) ;no physician, quit check
|
---|
114 | ...Q:'$D(^TMP("RA STFPHYS-IEN",$J,$P(RA7003,U,15)))#2
|
---|
115 | ...;end physician check
|
---|
116 | ...;
|
---|
117 | ...S RASTAFF=$$EXTERNAL^DILFD(70.03,15,,$P(RA7003,U,15))
|
---|
118 | ...I RARPTYP="CPT" D Q
|
---|
119 | ....;Total the # of CPTs performed by a physician within an i-type;
|
---|
120 | ....;the # on CPTs performed within i-type; the # of procedures
|
---|
121 | ....;performed by physician. all exams are either detailed or series
|
---|
122 | ....;(CPT codes defined) types of procedures.
|
---|
123 | ....D ARY(1)
|
---|
124 | ....Q
|
---|
125 | ...D RVU
|
---|
126 | ...Q
|
---|
127 | ..Q
|
---|
128 | .Q
|
---|
129 | D EN^RAWKLU1 ;output the report
|
---|
130 | D XIT
|
---|
131 | Q
|
---|
132 | ;
|
---|
133 | ARY(Y) ;increment the array by one in the case of CPT or by the wRVU
|
---|
134 | ;value
|
---|
135 | ;input: Y=either one when adding the number of CPTs performed by a
|
---|
136 | ; physician, within an i-type or by physician within i-type
|
---|
137 | ; -or- the WRVU value when totaling for the aforementioned criteria
|
---|
138 | ;
|
---|
139 | S $P(^TMP($J,"RA BY STFPHYS",RASTAFF),U,RAIAB(RAITYP))=+$P($G(^TMP($J,"RA BY STFPHYS",RASTAFF)),U,RAIAB(RAITYP))+Y
|
---|
140 | S $P(^TMP($J,"RA BY I-TYPE"),U,RAIAB(RAITYP))=$P(^TMP($J,"RA BY I-TYPE"),U,RAIAB(RAITYP))+Y
|
---|
141 | Q
|
---|
142 | ;
|
---|
143 | RVU ;Total the # of wRVUs performed by a physician within an i-type; all
|
---|
144 | ;exams are either detailed or series types of procedures. By definition
|
---|
145 | ;these procedure types MUST have CPT code defined.
|
---|
146 | ;Pass the exam date, CPT, & CPT modifiers into the FEE BASIS function
|
---|
147 | ;to derive the wRVU
|
---|
148 | ;
|
---|
149 | ;get exam date/time
|
---|
150 | N RAXAMDT S RAXAMDT=$P(RA7002,U)
|
---|
151 | ;get the CPT code value
|
---|
152 | S RACPT=$P($G(^RAMIS(71,+$P(RA7003,U,2),0)),U,9) ;pointer to file #81
|
---|
153 | ; 09/27/2006 KAM/BAY Patch RA*5*77 Changed next line to use ^RACPTMSC
|
---|
154 | S RACPT=$P($$NAMCODE^RACPTMSC(RACPT,RAXAMDT),U,1) ;CPT code is 1st pc
|
---|
155 | ;
|
---|
156 | ;get CPT code modifier string
|
---|
157 | S RACPTMOD="",RABILAT=0
|
---|
158 | I $O(^RADPT(RADFN,"DT",RADTI,"P",RACNI,"CMOD",0))>0 S RAI=0 D
|
---|
159 | .F S RAI=$O(^RADPT(RADFN,"DT",RADTI,"P",RACNI,"CMOD",RAI)) Q:'RAI D
|
---|
160 | ..S RACPTMOD(0)=+$G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,"CMOD",RAI,0))
|
---|
161 | ..;09/27/2006 KAM/BAY RA*5*77 Changed next line to use ^RACPTMSC
|
---|
162 | ..S RA813(0)=$$BASICMOD^RACPTMSC(RACPTMOD(0),RAXAMDT)
|
---|
163 | ..I 'RABILAT,$P(RA813(0),U,2)=50 S RABILAT=1 ;bilateral multiplier=2
|
---|
164 | ..S RACPTMOD=RACPTMOD_$P(RA813(0),U,2)_","
|
---|
165 | ..Q
|
---|
166 | .Q
|
---|
167 | ;get wRVU value from FEE BASIS; returns a string: status^value^message
|
---|
168 | ;where status'=1 means "in error". All exams prior to 1/1/1999 will
|
---|
169 | ;use 1999 wRVU values for their calculations.
|
---|
170 | ;03/28/2007 KAM/BAY Rem Call 179232 Added RACYFLG to $S in next line
|
---|
171 | S RAWRVU=$$RVU^FBRVU(RACPT,RACPTMOD,$S(RAXAMDT<2990101:2990101,RACYFLG:RAXAMDT-10000,1:RAXAMDT))
|
---|
172 | ; 09/25/2006 KAM/BAY Remedy Call 154793 Correct 0 RVUs
|
---|
173 | I $P(RAWRVU,U,2)=0,RACPTMOD="" D
|
---|
174 | . S RAWRVU=$$RVU^FBRVU(RACPT,26,$S(RAXAMDT<2990101:2990101,RACYFLG:RAXAMDT-10000,1:RAXAMDT))
|
---|
175 | ;
|
---|
176 | I $P(RAWRVU,U)=1 D
|
---|
177 | .;apply bilateral multiplier if appropriate
|
---|
178 | .S:RABILAT RAWRVU=$P(RAWRVU,U,2)*2
|
---|
179 | .;or not...
|
---|
180 | .S:'RABILAT RAWRVU=$P(RAWRVU,U,2)
|
---|
181 | .I RASCLD S RAWRVU=RAWRVU*$$SFCTR^RAWRVUP($P(RA7002,U,2),RAXAMDT)
|
---|
182 | .Q
|
---|
183 | ;
|
---|
184 | E S RAWRVU=0 ;status some other value than 1; "in error"
|
---|
185 | S:RAWRVU>0 RAWRVU=$J(RAWRVU,1,2) ;do not round the value...
|
---|
186 | D ARY(RAWRVU)
|
---|
187 | K RA813,RABILAT,RACPT,RACPTMOD,RAI,RAWRVU
|
---|
188 | Q
|
---|
189 | ;
|
---|
190 | XIT ;kill variables and exit
|
---|
191 | W:$G(ZTSTOP)=1 !,$$CJ^XLFSTR("USER STOPPED PROCESS THROUGH TASKMAN",IOM)
|
---|
192 | K DIRUT,DTOUT,DUOUT,RA7002,RA7003,RABGDTI,RABGDTX,RACNI,RADATE
|
---|
193 | K RADFN,RADTE,RADTI,RAENDTI,RAENDTX,RAIAB,RAITYP,RAMBGDT,RAMENDT
|
---|
194 | K RARPT,RARPTIEN,RARPTVDT,RASTAFF,RAXIT,X,Y,^TMP("RA STFPHYS-IEN",$J)
|
---|
195 | K ^TMP($J,"RA BY STFPHYS"),^TMP($J,"RA BY I-TYPE"),RACYFLG
|
---|
196 | Q
|
---|