| 1 | RAWKLU1 ;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 |  ;03/28/07 KAM/BAY Remedy Call 179232 Patch RA*5*77
 | 
|---|
| 4 |  ;         Add note to header if current calendar year data was
 | 
|---|
| 5 |  ;         not used used in the report creation and add default
 | 
|---|
| 6 |  ;         scaling factors to print
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  ;DBIA#:2541 ($$KSP^XUPARAM) returns the DEFAULT INSTITUTION (#217)
 | 
|---|
| 9 |  ;      from the KERNEL SYSTEM PARAMETERS (#8989.3) file.
 | 
|---|
| 10 |  ;DBIA#:2171 ($$NAME^XUAF4) resolves the DEFAULT INSTITUTION value into
 | 
|---|
| 11 |  ;      the name of the facility
 | 
|---|
| 12 |  ;DBIA#:10063 ($$S^%ZTLOAD)
 | 
|---|
| 13 |  ;DBIA#:10103 ($$FMTE^XLFDT) & ($$NOW^XLFDT)
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 | EN ;entry point; called from RAWKLU...
 | 
|---|
| 16 |  S RAFAC=$$NAME^XUAF4(+$$KSP^XUPARAM("INST"))
 | 
|---|
| 17 |  S:RAFAC="" RAFAC="***undefined facility name***"
 | 
|---|
| 18 |  S $P(RALN,"-",IOM+1)="",(RACNT,RAPG)=0
 | 
|---|
| 19 |  S RAHDR="IMAGING PHYSICIAN WORKLOAD SUMMARY BY "
 | 
|---|
| 20 |  I RARPTYP="CPT" S RAHDR=RAHDR_"NUMBER OF CPT CODES"
 | 
|---|
| 21 |  I RARPTYP="RVU" S RAHDR=RAHDR_$S(RASCLD=1:"SCALED ",1:"")_"PROFESSIONAL COMPONENT CMS RVU"
 | 
|---|
| 22 |  S RARDATE=$$FMTE^XLFDT($$NOW^XLFDT,"1D")
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 |  ;$O through physician names; print totals...
 | 
|---|
| 25 |  I RARPTYP="RVU" S RATMP="("_$S(RASCLD'=1:"un-s",1:"S")_"caled wRVU)"
 | 
|---|
| 26 |  S RAPCE=$S(RARPTYP="CPT":3,RARPTYP="RVU"&(IOM=132):5,1:7)
 | 
|---|
| 27 |  S RATRUNC=$S(RARPTYP="CPT":20,RARPTYP="RVU"&(IOM=80):23,1:27)
 | 
|---|
| 28 |  S RAWDTH=$S(RARPTYP="CPT":5,1:8),RADEC=$S(RARPTYP="RVU":2,1:0)
 | 
|---|
| 29 |  D HDR S RAX=""
 | 
|---|
| 30 |  F  S RAX=$O(^TMP($J,"RA BY STFPHYS",RAX)) Q:RAX=""  D  Q:RAXIT
 | 
|---|
| 31 |  .S RACNT=RACNT+1,RAY=$G(^TMP($J,"RA BY STFPHYS",RAX)),RATOT=0
 | 
|---|
| 32 |  .;did the user stop the task? Check every five hundred records...
 | 
|---|
| 33 |  .S:RACNT#500=0 (RAXIT,ZTSTOP)=$$S^%ZTLOAD() Q:RAXIT
 | 
|---|
| 34 |  .W !,$E(RAX,1,RATRUNC) ;physician name
 | 
|---|
| 35 |  .D WRITE(RAPCE,0,RAY,RAWDTH,RADEC)
 | 
|---|
| 36 |  .S RAFMAT=$P($T(CFMAT+10),";;",2,99)
 | 
|---|
| 37 |  .;single physician total for all i-types - adj RAWDTH for totals
 | 
|---|
| 38 |  .W ?$P(RAFMAT,U,RAPCE),$J(RATOT,$S(RAWDTH=8:10,1:6),RADEC)
 | 
|---|
| 39 |  .I $Y>(IOSL-4) S RAXIT=$$EOS^RAUTL5() Q:RAXIT  D HDR
 | 
|---|
| 40 |  .Q
 | 
|---|
| 41 |  ;print the imaging type and physician totals...
 | 
|---|
| 42 |  I RAXIT D XIT Q
 | 
|---|
| 43 |  I 'RACNT W !,$$CJ^XLFSTR("No data found for this report",IOM) D XIT Q
 | 
|---|
| 44 |  I $Y>(IOSL-4) S RAXIT=$$EOS^RAUTL5() Q:RAXIT  D HDR
 | 
|---|
| 45 |  S RAY=$G(^TMP($J,"RA BY I-TYPE")),RATOT=0
 | 
|---|
| 46 |  W !!,"Physician Total"
 | 
|---|
| 47 |  D WRITE(RAPCE,0,RAY,RAWDTH,RADEC)
 | 
|---|
| 48 |  S RAFMAT=$P($T(CFMAT+10),";;",2,99)
 | 
|---|
| 49 |  ;total for all physicians for all i-types - adj RAWDTH for totals
 | 
|---|
| 50 |  W ?$P(RAFMAT,U,RAPCE),$J(RATOT,$S(RAWDTH=8:10,1:6),RADEC) ;physician total for all i-types
 | 
|---|
| 51 |  I RASCLD=1 S RASFACTR="" D
 | 
|---|
| 52 |  .I $Y>(IOSL-4) S RAXIT=$$EOS^RAUTL5() Q:RAXIT  D HDR
 | 
|---|
| 53 |  .W !!,"For calendar year "_($E(DT,1,3)+1700)_" the following scaling factors apply:"
 | 
|---|
| 54 |  .S I=0
 | 
|---|
| 55 |  . ;04/13/07 KAM/BAY RA*5*77 Modified next line to loop thru all imaging types
 | 
|---|
| 56 |  .F  S I=$O(^RA(79.2,I)) Q:'I   D  Q:RAXIT
 | 
|---|
| 57 |  ..S I(0)=$G(^RA(79.2,I,0))
 | 
|---|
| 58 |  ..I $Y>(IOSL-4) S RAXIT=$$EOS^RAUTL5() Q:RAXIT  D HDR
 | 
|---|
| 59 |  .. ;04/13/07 KAM/BAY Added $S to next line for default
 | 
|---|
| 60 |  .. W !,$P(I(0),U),?34,$P(I(0),U,3),?49,$S($O(^RA(79.2,I,"CY",0))>0:$$SFCTR^RAWRVUP(I,DT),1:"1.00 (default)")
 | 
|---|
| 61 |  ..Q
 | 
|---|
| 62 |  .Q
 | 
|---|
| 63 | XIT ;exit and kill variables
 | 
|---|
| 64 |  K I,RACNT,RADEC,RAFAC,RAFMAT,RAHDR,RAI,RALN,RAPCE,RAPG,RARDATE,RASFACTR,RATAB,RATMP,RATOT
 | 
|---|
| 65 |  K RATRUNC,RAWDTH,RAX,RAY
 | 
|---|
| 66 |  Q
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 | HDR ; Header for our report
 | 
|---|
| 69 |  W:RAPG!($E(IOST,1,2)="C-") @IOF
 | 
|---|
| 70 |  S RAPG=RAPG+1
 | 
|---|
| 71 |  W !?(IOM-$L(RAHDR)\2),RAHDR
 | 
|---|
| 72 |  W !,"Run Date: ",RARDATE,?68,"Page: ",RAPG
 | 
|---|
| 73 |  W !,"Facility: ",$E(RAFAC,1,40),?41,"Date Range: ",RABGDTX_" - "_RAENDTX
 | 
|---|
| 74 |  ;03/28/07 KAM/BAY RA*5*77/179232 Added next 2 lines
 | 
|---|
| 75 |  I $G(RACYFLG) D
 | 
|---|
| 76 |  . W !,?7,"***This report was prepared with "_$$LASTCY^FBAAFSR()_" Calendar Year RVU Data***"
 | 
|---|
| 77 |  ;header formatting logic for CPT & RVU reports
 | 
|---|
| 78 |  W:RARPTYP="RVU" !,$$CJ^XLFSTR(RATMP,IOM)
 | 
|---|
| 79 |  W:RARPTYP="CPT" ! ;CPT report
 | 
|---|
| 80 |  N RAPCE S RAPCE=$S(RARPTYP="CPT":2,RARPTYP="RVU"&(IOM=132):4,1:6)
 | 
|---|
| 81 |  I '$D(RASFACTR)#2 D
 | 
|---|
| 82 |  .W !,"Physician" D WRITE(RAPCE,1)
 | 
|---|
| 83 |  W:$D(RASFACTR)#2 !,"Imaging Type",?34,"Abbreviation",?49,"wRVU scaling factor"
 | 
|---|
| 84 |  W !,RALN
 | 
|---|
| 85 |  Q
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 | STRTDT(RADATE,RAEARLY) ;Prompt the user for the starting date report verified
 | 
|---|
| 88 |  ;RADATE-Today's date; DT-implicitly defined as today's date(internal format)
 | 
|---|
| 89 |  ;RAEARLY-Earliest conceivable starting date
 | 
|---|
| 90 |  W ! K DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y N RARSLT
 | 
|---|
| 91 |  S DIR(0)="DA^"_RAEARLY_":"_"DT:PEX"
 | 
|---|
| 92 |  S DIR("A",1)="Calculate physician workload over a date range; enter a start date"
 | 
|---|
| 93 |  S DIR("A")="of: "
 | 
|---|
| 94 |  S DIR("?",1)="Workload is assigned on the date the report is verified, not the date"
 | 
|---|
| 95 |  S DIR("?",2)="the report is dictated.",DIR("?",3)=""
 | 
|---|
| 96 |  S DIR("?",4)="This is the date from which our search will begin. The starting"
 | 
|---|
| 97 |  S DIR("?",5)="date must not precede: "_$$FMTE^XLFDT(RAEARLY,"1D")_" and must not come after: "_RADATE_"."
 | 
|---|
| 98 |  S DIR("?")="Dates associated with a time will not be accepted."
 | 
|---|
| 99 |  S DIR("B")=RADATE D ^DIR
 | 
|---|
| 100 |  S:$D(DIRUT) RARSLT=-1 S:'$D(DIRUT) RARSLT=Y_U_Y(0)
 | 
|---|
| 101 |  K DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
 | 
|---|
| 102 |  Q RARSLT
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 | ENDDT(RABGDTI,RABGDTX) ;Prompt the user for the ending date report verified (no greater than a 
 | 
|---|
| 105 |  ;year after the start date input by the user)
 | 
|---|
| 106 |  ;DT-implicitly defined as today's date(internal format)
 | 
|---|
| 107 |  ;RABGDTI-The search start date (selected by the user; internal format)
 | 
|---|
| 108 |  ;RABGDTX-The search start date (selected by the user; external format)
 | 
|---|
| 109 |  W ! K DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y N RAEND,RARSLT
 | 
|---|
| 110 |  ;is today's date 365 days or more past the start date? If yes, calculate end date
 | 
|---|
| 111 |  ;by adding a year to the start date selected by the user
 | 
|---|
| 112 |  I $$FMDIFF^XLFDT(DT,RABGDTI,1)'<365 S RAEND=$$FMADD^XLFDT(RABGDTI,365,0,0,0)
 | 
|---|
| 113 |  ;if not, default using DT (today's date) 
 | 
|---|
| 114 |  S:'$D(RAEND)#2 RAEND=DT
 | 
|---|
| 115 |  S DIR(0)="DA^"_RABGDTI_":"_RAEND_":PEX"
 | 
|---|
| 116 |  S DIR("A")="Enter an end date of: "
 | 
|---|
| 117 |  S DIR("?",1)="Workload is assigned on the date the report is verified, not the date"
 | 
|---|
| 118 |  S DIR("?",2)="the report is dictated.",DIR("?",3)=""
 | 
|---|
| 119 |  S DIR("?",4)="This is the date in which our search will end. The ending date"
 | 
|---|
| 120 |  S DIR("?",5)="must not precede: "_RABGDTX_" and must not exceed: "_$$FMTE^XLFDT(RAEND,"1D")_"."
 | 
|---|
| 121 |  S DIR("?")="Dates associated with a time will not be accepted."
 | 
|---|
| 122 |  S DIR("B")=$$FMTE^XLFDT(RAEND,"1D") D ^DIR K DIR
 | 
|---|
| 123 |  S:$D(DIRUT) RARSLT=-1 S:'$D(DIRUT) RARSLT=Y_U_Y(0)
 | 
|---|
| 124 |  K DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
 | 
|---|
| 125 |  Q RARSLT
 | 
|---|
| 126 |  ;
 | 
|---|
| 127 | WRITE(RAPCE,HDR,RAY,RAWDTH,RADEC) ;Write out the column headers and the data for our reports.
 | 
|---|
| 128 |  ;input: RAPCE=the piece of data referenced from the format string defined in CFMAT (req'd)
 | 
|---|
| 129 |  ;         HDR=1 if called from the HDR subroutine, else HDR is 0 (req'd)
 | 
|---|
| 130 |  ;         RAY=data to be printed; not a label (optional)
 | 
|---|
| 131 |  ;      RAWDTH=field width; right justified (optional)
 | 
|---|
| 132 |  ;       RADEC=number of decimal places; either zero or two (optional)
 | 
|---|
| 133 |  S RANGE=$S(HDR=1:10,1:9)
 | 
|---|
| 134 |  F RAI=1:1:RANGE S RAFMAT=$P($T(CFMAT+RAI),";;",2,99) D
 | 
|---|
| 135 |  .S RATAB=$P(RAFMAT,U,RAPCE) S:HDR=0 RATOT=RATOT+$P(RAY,U,RAI)
 | 
|---|
| 136 |  .I $P(RAFMAT,U)="NUC",((RAPCE=6)!(RAPCE=7)) W ! ;RVU on 80
 | 
|---|
| 137 |  .W ?RATAB,$S(HDR=1:$P(RAFMAT,U),1:$J(+$P(RAY,U,RAI),RAWDTH,RADEC))
 | 
|---|
| 138 |  .Q
 | 
|---|
| 139 |  K RANGE
 | 
|---|
| 140 |  Q
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 | CFMAT ;ImgTyp Abbr^colabbr-cpt80^col-data80^colabbr-rvu132^col-data132^colabbr-rvu80^col-data80
 | 
|---|
| 143 |  ;;RAD^23^21^34^29^30^25
 | 
|---|
| 144 |  ;;MRI^29^27^45^40^40^35
 | 
|---|
| 145 |  ;;CT^36^33^56^50^51^45
 | 
|---|
| 146 |  ;;US^42^39^66^60^61^55
 | 
|---|
| 147 |  ;;NUC^47^45^75^70^14^9
 | 
|---|
| 148 |  ;;VAS^53^51^85^80^25^20
 | 
|---|
| 149 |  ;;ANI^59^57^95^91^36^31
 | 
|---|
| 150 |  ;;CARD^64^63^104^100^46^42
 | 
|---|
| 151 |  ;;MAM^70^67^115^110^58^53
 | 
|---|
| 152 |  ;;Total^75^74^125^120^70^65
 | 
|---|
| 153 |  ;;
 | 
|---|