| 1 | FBAAPCS ;WCIOFO/SAB-REPORT COST/SAVINGS FROM RBRVS FEE SCHEDULE ;6/28/1999
 | 
|---|
| 2 |  ;;3.5;FEE BASIS;**4,77**;JAN 30, 1995
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; ask date range
 | 
|---|
| 5 |  D DATE^FBAAUTL Q:FBPOP
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  W !,"Note: code descriptors will be versioned for the Ending DATE"
 | 
|---|
| 8 |  N ICPTVDT S ICPTVDT=$G(ENDDATE)
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  ; ask CPT codes to include
 | 
|---|
| 11 |  K FBRCPT
 | 
|---|
| 12 |  S DIR(0)="Y",DIR("A")="Include all CPT codes",DIR("B")="YES"
 | 
|---|
| 13 |  D ^DIR K DIR G:$D(DIRUT) EXIT
 | 
|---|
| 14 |  S FBRCPT=$S(Y:"A",1:"")
 | 
|---|
| 15 |  ; if not all CPT codes then ask selection method
 | 
|---|
| 16 |  I FBRCPT="" D
 | 
|---|
| 17 |  . S DIR(0)="S^1:RANGE OF CODES;2:INDIVIDUAL CODES"
 | 
|---|
| 18 |  . S DIR("A")="Choose a method to specify CPT Codes"
 | 
|---|
| 19 |  . S DIR("?",1)="You must choose one of the two methods that can be used"
 | 
|---|
| 20 |  . S DIR("?",2)="to specify the CPT codes to be included on the report."
 | 
|---|
| 21 |  . S DIR("?",3)="If the Range method is chosen, you will asked for one or more"
 | 
|---|
| 22 |  . S DIR("?",4)="ranges of CPT codes. (e.g. from 11000 to 11999)"
 | 
|---|
| 23 |  . S DIR("?",5)="If the Individual method is chosen, you will be asked to select"
 | 
|---|
| 24 |  . S DIR("?",6)="one or more specific CPT codes."
 | 
|---|
| 25 |  . S DIR("?")="Enter a code from the list."
 | 
|---|
| 26 |  . D ^DIR K DIR Q:$D(DIRUT)
 | 
|---|
| 27 |  . S FBRCPT=$S(Y=1:"R",1:"I")
 | 
|---|
| 28 |  I FBRCPT="" G EXIT
 | 
|---|
| 29 |  ; if individual selected then ask specific codes
 | 
|---|
| 30 |  I FBRCPT="I" D  I $D(DTOUT)!$D(DUOUT)!'$O(FBRCPT(0)) G EXIT
 | 
|---|
| 31 |  . W !,"Note: code descriptors will be versioned for the Ending DATE"
 | 
|---|
| 32 |  . F  D  Q:Y'>0!$D(DIRUT)
 | 
|---|
| 33 |  . . S DIR(0)="PO^81:EM"
 | 
|---|
| 34 |  . . D ^DIR K DIR Q:$D(DIRUT)
 | 
|---|
| 35 |  . . I Y>0 S FBRCPT($P(Y,U))=$P(Y,U,2)
 | 
|---|
| 36 |  ; if range selected then ask ranges
 | 
|---|
| 37 |  I FBRCPT="R" D  I $D(DTOUT)!$D(DUOUT)!'$O(FBRCPT(0)) G EXIT
 | 
|---|
| 38 |  . N FBI,FBX
 | 
|---|
| 39 |  . S FBI=0 F  D  Q:Y=""!$D(DIRUT)
 | 
|---|
| 40 |  . . S DIR(0)="FO^5:5",DIR("A")="Start of CPT Range #"_(FBI+1)
 | 
|---|
| 41 |  . . D ^DIR K DIR Q:$D(DIRUT)
 | 
|---|
| 42 |  . . S FBX=Y
 | 
|---|
| 43 |  . . S DIR(0)="F^5:5",DIR("A")="End of CPT Range #"_(FBI+1)
 | 
|---|
| 44 |  . . D ^DIR K DIR Q:$D(DIRUT)
 | 
|---|
| 45 |  . . S $P(FBX,U,2)=Y
 | 
|---|
| 46 |  . . I $P(FBX,U)]$P(FBX,U,2) W $C(7),!,"Start can't be after the End" Q
 | 
|---|
| 47 |  . . S FBI=FBI+1,FBRCPT(FBI)=FBX
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 |  ; ask device
 | 
|---|
| 50 |  W !!,"Note: Additional data printed if device supports 130+ characters"
 | 
|---|
| 51 |  S VAR="BEGDATE^ENDDATE^FBRCPT*",PGM="START^FBAAPCS"
 | 
|---|
| 52 |  D ZIS^FBAAUTL G EXIT:FBPOP
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 | START ; queued entry
 | 
|---|
| 55 |  ; input
 | 
|---|
| 56 |  ;   BEGDATE - begin date (fileman)
 | 
|---|
| 57 |  ;   ENDDATE - end date (fileman)
 | 
|---|
| 58 |  ;   FBRCPT  - CPT codes to report ('A' All, 'I' Individual, 'R' Ranges)
 | 
|---|
| 59 |  ;   FBRCPT( - array of specifc codes or ranges when not All CPT codes
 | 
|---|
| 60 |  ;     format when FBRCPT="I"
 | 
|---|
| 61 |  ;       FBRCPT(cpt code internal value)=cpt code external value
 | 
|---|
| 62 |  ;     format when FBRCPT="R"
 | 
|---|
| 63 |  ;       FBRCPT(sequential range #)=start value^end value
 | 
|---|
| 64 |  U IO
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 | GATHER ; collect and sort data
 | 
|---|
| 67 |  K ^TMP($J)
 | 
|---|
| 68 |  ; loop thru payments by date finalized
 | 
|---|
| 69 |  S FBDT=BEGDATE-1
 | 
|---|
| 70 |  F  S FBDT=$O(^FBAAC("AK",FBDT)) Q:FBDT'>0!(FBDT>ENDDATE)  D
 | 
|---|
| 71 |  . ; loop thru veterans
 | 
|---|
| 72 |  . S FBDFN=0
 | 
|---|
| 73 |  . F  S FBDFN=$O(^FBAAC("AK",FBDT,FBDFN)) Q:FBDFN'>0  D
 | 
|---|
| 74 |  . . ; loop thru vendors
 | 
|---|
| 75 |  . . S FBV=0
 | 
|---|
| 76 |  . . F  S FBV=$O(^FBAAC("AK",FBDT,FBDFN,FBV)) Q:FBV'>0  D
 | 
|---|
| 77 |  . . . ; loop thru initial treatment dates
 | 
|---|
| 78 |  . . . S FBK=0
 | 
|---|
| 79 |  . . . F  S FBK=$O(^FBAAC("AK",FBDT,FBDFN,FBV,FBK)) Q:FBK'>0  D
 | 
|---|
| 80 |  . . . . ; loop thru service provided (cpt)
 | 
|---|
| 81 |  . . . . S FBL=0
 | 
|---|
| 82 |  . . . . F  S FBL=$O(^FBAAC("AK",FBDT,FBDFN,FBV,FBK,FBL)) Q:FBL'>0  D
 | 
|---|
| 83 |  . . . . . S FBY0=$G(^FBAAC(FBDFN,1,FBV,1,FBK,1,FBL,0))
 | 
|---|
| 84 |  . . . . . S FBCPT=$$CPT^FBAAUTL4($P(FBY0,U))
 | 
|---|
| 85 |  . . . . . ; quit if CPT code not included in report
 | 
|---|
| 86 |  . . . . . I FBRCPT="I",'$D(FBRCPT($P(FBY0,U))) Q
 | 
|---|
| 87 |  . . . . . I FBRCPT="R" S FBFND=0 D  Q:'FBFND
 | 
|---|
| 88 |  . . . . . . S FBI=0 F  S FBI=$O(FBRCPT(FBI)) Q:'FBI  I $P(FBRCPT(FBI),U)']FBCPT,FBCPT']$P(FBRCPT(FBI),U,2) S FBFND=1 Q
 | 
|---|
| 89 |  . . . . . ; passed CPT checks
 | 
|---|
| 90 |  . . . . . S FBY2=$G(^FBAAC(FBDFN,1,FBV,1,FBK,1,FBL,2))
 | 
|---|
| 91 |  . . . . . S FBMODL=$$MODL^FBAAUTL4("^FBAAC("_FBDFN_",1,"_FBV_",1,"_FBK_",1,"_FBL_",""M"")","E")
 | 
|---|
| 92 |  . . . . . S FBCPTM=" "_FBCPT_$S(FBMODL]"":"-"_FBMODL,1:"")
 | 
|---|
| 93 |  . . . . . ; retrieve counts and totals for the CPT-MODIFIERS combination
 | 
|---|
| 94 |  . . . . . S FBX=$G(^TMP($J,FBCPTM))
 | 
|---|
| 95 |  . . . . . ; update counts and totals for this payment
 | 
|---|
| 96 |  . . . . . S $P(FBX,U)=$P(FBX,U)+1 ; total count
 | 
|---|
| 97 |  . . . . . S $P(FBX,U,2)=$P(FBX,U,2)+$P(FBY0,U,3) ; total paid
 | 
|---|
| 98 |  . . . . . ; if paid at the RBRVS amount
 | 
|---|
| 99 |  . . . . . I +$P(FBY0,U,3)=+$P(FBY2,U,12),$P(FBY2,U,13)="R" D
 | 
|---|
| 100 |  . . . . . . S $P(FBX,U,3)=$P(FBX,U,3)+1 ; RBRVS count
 | 
|---|
| 101 |  . . . . . . S $P(FBX,U,4)=$P(FBX,U,4)+$P(FBY0,U,3) ; RBRVS payments
 | 
|---|
| 102 |  . . . . . . ; calc 75th percentile
 | 
|---|
| 103 |  . . . . . . S FBDOS=$P($G(^FBAAC(FBDFN,1,FBV,1,FBK,0)),U)
 | 
|---|
| 104 |  . . . . . . S FBAMT=$$PRCTL^FBAAFSF($P(FBY0,U),FBMODL,FBDOS)
 | 
|---|
| 105 |  . . . . . . I FBAMT>0 D
 | 
|---|
| 106 |  . . . . . . . S $P(FBX,U,5)=$P(FBX,U,5)+1 ; covered by 75th count
 | 
|---|
| 107 |  . . . . . . . S $P(FBX,U,6)=$P(FBX,U,6)+FBAMT ; 75th estimated payment
 | 
|---|
| 108 |  . . . . . . E  D
 | 
|---|
| 109 |  . . . . . . . S $P(FBX,U,7)=$P(FBX,U,7)+1 ; not covered by 75th count
 | 
|---|
| 110 |  . . . . . . . S $P(FBX,U,8)=$P(FBX,U,8)+$P(FBY0,U,2) ; claimed amount
 | 
|---|
| 111 |  . . . . . ; save counts and totals for the CPT-MODIFIERS combination
 | 
|---|
| 112 |  . . . . . S ^TMP($J,FBCPTM)=FBX
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 | PRINT ; report data
 | 
|---|
| 115 |  S (FBQUIT,FBPG)=0 D NOW^%DTC S Y=% D DD^%DT S FBDTR=Y
 | 
|---|
| 116 |  S FBO=$S(IOM>129:43,1:0) ; column offset if room to display more detail
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 |  ; build page header text in FBHT( based on selection criteria
 | 
|---|
| 119 |  K FBHT
 | 
|---|
| 120 |  S FBHT(1)="  for Payments with Finalized Dates from "
 | 
|---|
| 121 |  S FBHT(1)=FBHT(1)_$$FMTE^XLFDT(BEGDATE)_" to "_$$FMTE^XLFDT(ENDDATE)
 | 
|---|
| 122 |  I FBRCPT="A" S FBHT(2)="  and all CPT Codes"
 | 
|---|
| 123 |  E  D
 | 
|---|
| 124 |  . S FBL=2,FBHT(FBL)="  and CPT Codes: "
 | 
|---|
| 125 |  . S (FBC,FBI)=0 F  S FBI=$O(FBRCPT(FBI)) Q:'FBI  D
 | 
|---|
| 126 |  . . I $L(FBHT(FBL))+$S(FBRCPT="I":2,1:10)+$L(FBRCPT(FBI))>75 D
 | 
|---|
| 127 |  . . . I FBC S FBHT(FBL)=FBHT(FBL)_","
 | 
|---|
| 128 |  . . . S FBL=FBL+1,FBC=0,FBHT(FBL)="                 "
 | 
|---|
| 129 |  . . S FBHT(FBL)=FBHT(FBL)_$S(FBC:", ",1:"")
 | 
|---|
| 130 |  . . I FBRCPT="I" S FBHT(FBL)=FBHT(FBL)_FBRCPT(FBI)
 | 
|---|
| 131 |  . . I FBRCPT="R" S FBHT(FBL)=FBHT(FBL)_"from "_$P(FBRCPT(FBI),U)_" to "_$P(FBRCPT(FBI),U,2)
 | 
|---|
| 132 |  . . S FBC=FBC+1 ; count of codes or ranges on current line (FBL)
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 |  D HD
 | 
|---|
| 135 |  I '$D(^TMP($J)) W !!,"  No payments found that match criteria. ",!
 | 
|---|
| 136 |  ;
 | 
|---|
| 137 |  S FBT="" ; initialize report totals 
 | 
|---|
| 138 |  ; loop thru CPT-MODIFIER(S)
 | 
|---|
| 139 |  S FBCPTM="" F  S FBCPTM=$O(^TMP($J,FBCPTM)) Q:FBCPTM=""  D  Q:FBQUIT
 | 
|---|
| 140 |  . S FBX=$G(^TMP($J,FBCPTM))
 | 
|---|
| 141 |  . I $Y+6>IOSL D HD Q:FBQUIT
 | 
|---|
| 142 |  . ;
 | 
|---|
| 143 |  . ; compute estimated savings
 | 
|---|
| 144 |  . S FBSAV=$P(FBX,U,6)+$P(FBX,U,8)-$P(FBX,U,4)
 | 
|---|
| 145 |  . ;
 | 
|---|
| 146 |  . ; print detail line
 | 
|---|
| 147 |  . W !,$E($P(FBCPTM,",",1,4),2,99) W:$P(FBCPTM,",",5)]"" "," W ?18,"|"
 | 
|---|
| 148 |  . W ?20,$J($P(FBX,U,1),5),?26,$J($FN($P(FBX,U,2),",",2),13),?40,"|"
 | 
|---|
| 149 |  . W ?42,$J($P(FBX,U,3),5),?48,$J($FN($P(FBX,U,4),",",2),13),?62,"|"
 | 
|---|
| 150 |  . ; if room display additional detail
 | 
|---|
| 151 |  . I FBO D
 | 
|---|
| 152 |  . . W ?64,$J($P(FBX,U,5),5),?70,$J($FN($P(FBX,U,6),",",2),13)
 | 
|---|
| 153 |  . . W ?85,$J($P(FBX,U,7),5),?91,$J($FN($P(FBX,U,8),",",2),13)
 | 
|---|
| 154 |  . . W ?105,"|"
 | 
|---|
| 155 |  . W ?63+FBO,$J($FN(FBSAV,",P",2),15),?78+FBO,"|"
 | 
|---|
| 156 |  . ; if more than 4 modifiers then display them on subsequent lines
 | 
|---|
| 157 |  . F FBI=1:1 Q:$P(FBCPTM,",",(FBI*4)+1)=""  D
 | 
|---|
| 158 |  . . W !,?5,"-",$P(FBCPTM,",",(FBI*4)+1,(FBI*4)+4) ; next set of mods
 | 
|---|
| 159 |  . . W:$P(FBCPTM,",",(FBI*4)+5)]"" "," ; additional line will be needed
 | 
|---|
| 160 |  . . W ?18,"|",?40,"|",?62,"|" W:FBO ?105,"|" W ?78+FBO,"|"
 | 
|---|
| 161 |  . ;
 | 
|---|
| 162 |  . ; add to report totals
 | 
|---|
| 163 |  . F FBI=1:1:8 S $P(FBT,U,FBI)=$P(FBT,U,FBI)+$P(FBX,U,FBI)
 | 
|---|
| 164 |  . S $P(FBT,U,9)=$P(FBT,U,9)+FBSAV
 | 
|---|
| 165 |  ;
 | 
|---|
| 166 |  I FBQUIT W !!,"REPORT STOPPED AT USER REQUEST"
 | 
|---|
| 167 |  E  D  ; report totals
 | 
|---|
| 168 |  . D DL
 | 
|---|
| 169 |  . W !,"REPORT TOTALS ",?18,"|"
 | 
|---|
| 170 |  . W ?20,$J($P(FBT,U,1),5),?26,$J($FN($P(FBT,U,2),",",2),13),?40,"|"
 | 
|---|
| 171 |  . W ?42,$J($P(FBT,U,3),5),?48,$J($FN($P(FBT,U,4),",",2),13),?62,"|"
 | 
|---|
| 172 |  . I FBO D
 | 
|---|
| 173 |  . . W ?64,$J($P(FBT,U,5),5),?70,$J($FN($P(FBT,U,6),",",2),13)
 | 
|---|
| 174 |  . . W ?85,$J($P(FBT,U,7),5),?91,$J($FN($P(FBT,U,8),",",2),13)
 | 
|---|
| 175 |  . . W ?105,"|"
 | 
|---|
| 176 |  . W ?63+FBO,$J($FN($P(FBT,U,9),",P",2),15),?78+FBO,"|"
 | 
|---|
| 177 |  I 'FBQUIT,$E(IOST,1,2)="C-" S DIR(0)="E" D ^DIR K DIR
 | 
|---|
| 178 |  D ^%ZISC
 | 
|---|
| 179 |  ;
 | 
|---|
| 180 | EXIT ;
 | 
|---|
| 181 |  I $D(ZTQUEUED) S ZTREQ="@"
 | 
|---|
| 182 |  K ^TMP($J)
 | 
|---|
| 183 |  K BEGDATE,ENDDATE,FBRCPT
 | 
|---|
| 184 |  K FBAMT,FBC,FBCPT,FBCPTM,FBDFN,FBDT,FBDTR,FBFND,FBHT,FBI,FBK
 | 
|---|
| 185 |  K FBL,FBMODL,FBO,FBPG,FBPOP,FBQUIT,FBRCPT,FBSAV,FBT,FBV,FBX,FBY0,FBY2
 | 
|---|
| 186 |  K DIC,DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
 | 
|---|
| 187 |  Q
 | 
|---|
| 188 |  ;
 | 
|---|
| 189 | HD ; page header
 | 
|---|
| 190 |  I $D(ZTQUEUED),$$S^%ZTLOAD S ZTSTOP=1,FBQUIT=1 Q
 | 
|---|
| 191 |  I $E(IOST,1,2)="C-",FBPG S DIR(0)="E" D ^DIR K DIR I 'Y S FBQUIT=1 Q
 | 
|---|
| 192 |  I $E(IOST,1,2)="C-"!FBPG W @IOF
 | 
|---|
| 193 |  S FBPG=FBPG+1
 | 
|---|
| 194 |  W !,"COST/SAVINGS FROM RBRVS FEE SCHEDULE",?49,FBDTR,?72,"page ",FBPG
 | 
|---|
| 195 |  S FBI=0 F  S FBI=$O(FBHT(FBI)) Q:'FBI  W !,FBHT(FBI)
 | 
|---|
| 196 |  ;
 | 
|---|
| 197 |  W !!,"CPT CODE-",?18,"|",?20,"Total Occurrences ",?40,"|"
 | 
|---|
| 198 |  W ?42,"Payments at RBRVS",?62,"|"
 | 
|---|
| 199 |  W:FBO ?64,"Estimated Payments if RBRVS was not used",?105,"|"
 | 
|---|
| 200 |  W ?64+FBO,"Est. Savings",?78+FBO,"|"
 | 
|---|
| 201 |  ;
 | 
|---|
| 202 |  I FBO D
 | 
|---|
| 203 |  . W !,?18,"|",?40,"|",?62,"|"
 | 
|---|
| 204 |  . W ?64,"75th Percentile",?85,"Usual & Customary*"
 | 
|---|
| 205 |  . W ?105,"|",?78+FBO,"|"
 | 
|---|
| 206 |  ;
 | 
|---|
| 207 |  W !,"  Modifier(s)",?18,"|",?20,"count   $ amount",?40,"|"
 | 
|---|
| 208 |  W ?42,"count   $ amount",?62,"|"
 | 
|---|
| 209 |  W:FBO ?64,"count   $ amount",?85,"count   $ amount",?105,"|"
 | 
|---|
| 210 |  W ?64+FBO,"from RBRVS",?78+FBO,"|"
 | 
|---|
| 211 |  ;
 | 
|---|
| 212 | DL ; write dashed line
 | 
|---|
| 213 |  W !,"------------------",?18,"|",?20,"----- -------------",?40,"|"
 | 
|---|
| 214 |  W ?42,"----- -------------",?62,"|"
 | 
|---|
| 215 |  W:FBO ?64,"----- -------------",?85,"----- -------------",?105,"|"
 | 
|---|
| 216 |  W ?64+FBO,"-------------",?78+FBO,"|"
 | 
|---|
| 217 |  Q
 | 
|---|
| 218 |  ;
 | 
|---|
| 219 |  ;FBAAPCS
 | 
|---|