[613] | 1 | BPSRPT1 ;BHAM ISC/BEE - ECME REPORTS ;14-FEB-05
|
---|
| 2 | ;;1.0;E CLAIMS MGMT ENGINE;**1,5**;JUN 2004;Build 45
|
---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
| 4 | Q
|
---|
| 5 | ;
|
---|
| 6 | ; ECME Report Compile Routine - Looping/Filtering Routine
|
---|
| 7 | ;
|
---|
| 8 | ; Input Variables:
|
---|
| 9 | ; BPRTYPE - Type of Report (1-7)
|
---|
| 10 | ; BPGLTMP - Temporary storage global
|
---|
| 11 | ; BPPHARM/BPPHARM(ptr) - Set to 0 for all pharmacies, if set to 1 array
|
---|
| 12 | ; of internal pointers of selected pharmacies
|
---|
| 13 | ; BPSUMDET - (1) Summary or (0) Detail format
|
---|
| 14 | ; BPINSINF - Set to 0 for all insurances or insurance co name
|
---|
| 15 | ; BPMWC - 1-ALL,2-Mail,3-Window,4-CMOP Prescriptions
|
---|
| 16 | ; BPRTBCK - 1-ALL,2-RealTime,3-Backbill Claim Submission
|
---|
| 17 | ; BPRLNRL - 1-ALL,2-RELEASED,3-NOT RELEASED
|
---|
| 18 | ; BPDRUG - DRUG to report on (ptr to #50)
|
---|
| 19 | ; BPDRGCL - DRUG CLASS to report on (0 for ALL)
|
---|
| 20 | ; BPBEGDT - Beginning Date
|
---|
| 21 | ; BPENDDT - Ending Date
|
---|
| 22 | ; BPCCRSN - Set to 0 for all closed claim reasons or ptr to #356.8
|
---|
| 23 | ; BPAUTREV - 0-ALL,1-Auto Reversed
|
---|
| 24 | ; BPACREJ - 0-ALL,1-REJECTED,2-ACCEPTED
|
---|
| 25 | ;
|
---|
| 26 | COLLECT(BPGLTMP) N BP02,BP57,BP59,BPENDDT1,BPLDT02,BPLDT57,X,Y,OK,BPIX
|
---|
| 27 | ;
|
---|
| 28 | ;Check Variables
|
---|
| 29 | S OK=1
|
---|
| 30 | S:'$G(BPBEGDT) BPBEGDT=0
|
---|
| 31 | S:'$G(BPENDDT) BPENDDT=9999999
|
---|
| 32 | S BPENDDT=BPENDDT+0.9
|
---|
| 33 | I $G(BPRTYPE)=""!($G(BPGLTMP)="")!($G(BPPHARM)="")!($G(BPSUMDET)="")!($G(BPINSINF)="")!($G(BPMWC)="")!($G(BPRTBCK)="") S OK=-1 G EXIT
|
---|
| 34 | ;
|
---|
| 35 | ;Loop through BPS CLAIMS
|
---|
| 36 | ;
|
---|
| 37 | ;First look for fill/refill cross reference
|
---|
| 38 | ;Loop through Date of Service Index in BPS CLAIMS file and find link to
|
---|
| 39 | ;claim in BPS TRANSACTION. Process earliest Date of Service entry found in
|
---|
| 40 | ;BPS TRANSACTION
|
---|
| 41 | ;
|
---|
| 42 | ;Choose Index to Loop through (different for Closed Claims)
|
---|
| 43 | S BPIX="AF" S:BPRTYPE=7 BPIX="AG"
|
---|
| 44 | ;
|
---|
| 45 | S BPLDT02=$S(BPIX="AF":$$FM2YMD(BPBEGDT-0.00001),1:BPBEGDT) S:BPLDT02="" BPLDT02=0
|
---|
| 46 | S BPENDDT1=$S(BPIX="AF":$$FM2YMD(BPENDDT),1:BPENDDT_".9999999999") S:BPENDDT1="" BPENDDT1=99999999
|
---|
| 47 | F S BPLDT02=+$O(^BPSC(BPIX,BPLDT02)) Q:BPLDT02=0!(BPLDT02>BPENDDT1) D
|
---|
| 48 | . S BP02=0 F S BP02=$O(^BPSC(BPIX,BPLDT02,BP02)) Q:+BP02=0 D
|
---|
| 49 | . . S BP59=+$O(^BPST("AE",BP02,0))
|
---|
| 50 | . . Q:BP59=0
|
---|
| 51 | . . I $D(@BPGLTMP@("FILE59",BP59)) Q
|
---|
| 52 | . . S @BPGLTMP@("FILE59",BP59)=BPLDT02_"^02"
|
---|
| 53 | . . D PROCESS(BP59)
|
---|
| 54 | ;
|
---|
| 55 | ;#9002313.59 has only one entry per claim with, which has a date
|
---|
| 56 | ; of the latest update for the claim
|
---|
| 57 | ;#9002313.57 has more than one entries per claim and keep all
|
---|
| 58 | ; changes made the claim
|
---|
| 59 | ;so we have to go thru #9002313.57 to find the earliest date
|
---|
| 60 | ;related to the claim to check it against BPBEGDT
|
---|
| 61 | S BPLDT57=BPBEGDT-0.00001
|
---|
| 62 | F S BPLDT57=+$O(^BPSTL("AH",BPLDT57)) Q:BPLDT57=0!(BPLDT57>BPENDDT) D
|
---|
| 63 | . S BP57=0 F S BP57=$O(^BPSTL("AH",BPLDT57,BP57)) Q:+BP57=0 D
|
---|
| 64 | . . S BP59=+$G(^BPSTL(BP57,0))
|
---|
| 65 | . . I $D(@BPGLTMP@("FILE59",BP59)) Q
|
---|
| 66 | . . S @BPGLTMP@("FILE59",BP59)=BPLDT57_"^57"
|
---|
| 67 | . . D PROCESS(BP59)
|
---|
| 68 | ;
|
---|
| 69 | ;Remove Portion of Scratch Global
|
---|
| 70 | EXIT K @BPGLTMP@("FILE59")
|
---|
| 71 | Q OK
|
---|
| 72 | ;
|
---|
| 73 | ;Convert FB date to YYYYMMDD
|
---|
| 74 | FM2YMD(BPFMDT) N Y,Y1
|
---|
| 75 | S Y=$E(BPFMDT,2,3),Y1=$E(BPFMDT,1,1) S Y=$S(Y1=3:"20"_Y,Y1=2:"19"_Y,1:"")
|
---|
| 76 | Q:Y Y_$E(BPFMDT,4,7)
|
---|
| 77 | Q ""
|
---|
| 78 | ;
|
---|
| 79 | ;Process each Entry
|
---|
| 80 | ;
|
---|
| 81 | PROCESS(BP59) N BPBCK,BPDFN,BPREF,BPPAYBL,BPPLAN,BPREJ,BPRLSDT,BPRX,BPRXDRG,BPSTATUS
|
---|
| 82 | ;
|
---|
| 83 | ;Get ABSBRXI - ptr to #52
|
---|
| 84 | S BPRX=+$P($G(^BPST(BP59,1)),U,11)
|
---|
| 85 | ;
|
---|
| 86 | ;Get ABSBRXR - Prescription Number IEN
|
---|
| 87 | S BPREF=+$P($G(^BPST(BP59,1)),U)
|
---|
| 88 | ;
|
---|
| 89 | ;Get PATIENT - ptr to #2
|
---|
| 90 | S BPDFN=+$P($G(^BPST(BP59,0)),U,6)
|
---|
| 91 | ;
|
---|
| 92 | ;Check for correct BPS Pharmacy (DIVISION)
|
---|
| 93 | I $G(BPPHARM)=1,$$CHKPHRM(BP59)=0 G XPROC
|
---|
| 94 | ;
|
---|
| 95 | ;Check for Display 1-ALL,2-RELEASED,3-NOT RELEASED
|
---|
| 96 | S BPRLSDT=$$RELEASED(BPRX,BPREF)
|
---|
| 97 | I BPRLNRL'=1 I ((BPRLNRL=2)&(BPRLSDT=0))!((BPRLNRL=3)&(BPRLSDT)) G XPROC
|
---|
| 98 | ;
|
---|
| 99 | ;Get Status
|
---|
| 100 | S BPSTATUS=$$STATUS^BPSRPT6(BPRX,BPREF)
|
---|
| 101 | ;
|
---|
| 102 | ;if REVERSAL
|
---|
| 103 | I BPRTYPE=4,BPSTATUS'["REVERSAL" G XPROC ; exclude non-reversed
|
---|
| 104 | ;
|
---|
| 105 | ;if PAYABLE
|
---|
| 106 | S BPPAYBL=BPSTATUS["PAYABLE"
|
---|
| 107 | I BPRTYPE=1,'BPPAYBL G XPROC ; exclude non-payable
|
---|
| 108 | I BPRTYPE=1,BPSTATUS["REVERSAL" G XPROC ; reversed
|
---|
| 109 | ;
|
---|
| 110 | ;if REJECTED
|
---|
| 111 | S BPREJ=BPSTATUS["REJECTED"
|
---|
| 112 | I BPRTYPE=2,BPSTATUS["REVERSAL" G XPROC ; exclude rejected reversals
|
---|
| 113 | I BPRTYPE=2,'BPREJ G XPROC ; exclude non-rejected
|
---|
| 114 | I BPRTYPE=2,$$CLSCLM(BP59) G XPROC ;exclude closed claims
|
---|
| 115 | ;
|
---|
| 116 | ;if SUBMITTED NOT RELEASED exclude released ones
|
---|
| 117 | I BPRTYPE=3,BPRLSDT'=0 G XPROC
|
---|
| 118 | I BPRTYPE=3,'BPPAYBL G XPROC ; exclude non-payable
|
---|
| 119 | ;
|
---|
| 120 | ;Auto Reverse Check
|
---|
| 121 | I BPRTYPE=4,BPAUTREV,'$$AUTOREV(BP59) G XPROC
|
---|
| 122 | ;
|
---|
| 123 | ;if CLOSED
|
---|
| 124 | I BPRTYPE=7,'$$CLSCLM(BP59) G XPROC ;exclude open claims
|
---|
| 125 | I BPRTYPE=7,BPSTATUS'["REJECTED" G XPROC ;exclude non-rejected closed claims
|
---|
| 126 | ;
|
---|
| 127 | ;if Recent Transactions, exclude closed claims
|
---|
| 128 | I BPRTYPE=5,$$CLSCLM(BP59) G XPROC
|
---|
| 129 | ;
|
---|
| 130 | ;If Totals by Date, include only rejects and payables
|
---|
| 131 | I BPRTYPE=6,BPSTATUS'["REJECTED",BPSTATUS'["PAYABLE" G XPROC ; Reversed
|
---|
| 132 | ;
|
---|
| 133 | ;Realtime/Backbill Check
|
---|
| 134 | S BPBCK=$$RTBCK(BP59)
|
---|
| 135 | I BPRTBCK'=1 I ((BPRTBCK=2)&(BPBCK=0))!((BPRTBCK=3)&(BPBCK)) G XPROC
|
---|
| 136 | ;
|
---|
| 137 | ;Check for MAIL/WINDOW/CMOP/ALL
|
---|
| 138 | I BPMWC'="A",$$MWC^BPSRPT6(BPRX,BPREF)'=BPMWC G XPROC
|
---|
| 139 | ;
|
---|
| 140 | ;Check for selected insurance
|
---|
| 141 | S BPPLAN=$P($$INSNAM^BPSRPT6(BP59),U,2)
|
---|
| 142 | I BPINSINF'=0,BPINSINF'=BPPLAN G XPROC
|
---|
| 143 | ;
|
---|
| 144 | ;Check for selected drug
|
---|
| 145 | S BPRXDRG=$$GETDRUG^BPSRPT6(BPRX)
|
---|
| 146 | I BPRXDRG=0 G XPROC
|
---|
| 147 | I BPDRUG,BPDRUG'=BPRXDRG G XPROC
|
---|
| 148 | ;
|
---|
| 149 | ;Check for selected drug classes
|
---|
| 150 | I BPDRGCL'=0,BPDRGCL'=$$DRGCLNAM^BPSRPT6($$GETDRGCL^BPSRPT6(BPRXDRG),99) G XPROC
|
---|
| 151 | ;
|
---|
| 152 | ;Check for selected Close Reason
|
---|
| 153 | I BPCCRSN,BPCCRSN'=$P($$CLRSN^BPSRPT7(BP59),U) G XPROC
|
---|
| 154 | ;
|
---|
| 155 | ;Check for Accepted/Rejected
|
---|
| 156 | I BPACREJ=1,BPSTATUS'["REJECTED" G XPROC
|
---|
| 157 | I BPACREJ=2,BPSTATUS'["ACCEPTED" G XPROC
|
---|
| 158 | ;
|
---|
| 159 | ;Check for Specific Reject Code
|
---|
| 160 | I BPREJCD'=0,'$$CKREJ(BP59,BPREJCD) G XPROC
|
---|
| 161 | ;
|
---|
| 162 | ;Save Entry for Report
|
---|
| 163 | D SETTMP^BPSRPT2(BPGLTMP,BPDFN,BPRX,BPREF,BP59,BPBEGDT,BPENDDT,.BPPHARM,BPSUMDET,BPPLAN,BPRLSDT,BPPAYBL,BPREJ,BPRXDRG,$P(BPSTATUS,U))
|
---|
| 164 | ;
|
---|
| 165 | XPROC Q
|
---|
| 166 | ;
|
---|
| 167 | ;Check if selected BPS PHARMACY
|
---|
| 168 | ;
|
---|
| 169 | ; Defined Variable: BPPHARM(ptr) - List of BPS Pharmacies to Report on
|
---|
| 170 | ; Input Variable: BP59 - Lookup to BPS TRANSACTION (#59)
|
---|
| 171 | ;
|
---|
| 172 | ; Returned Value -> 0 = Entry not in list of selected pharmacies
|
---|
| 173 | ; 1 = Entry is in list of selected pharmacies
|
---|
| 174 | CHKPHRM(BP59) N PHARM
|
---|
| 175 | S PHARM=+$P($G(^BPST(BP59,1)),"^",7)
|
---|
| 176 | S PHARM=$S($D(BPPHARM(PHARM)):1,1:0)
|
---|
| 177 | Q PHARM
|
---|
| 178 | ;
|
---|
| 179 | ;Determine whether claim is Released or Not Released
|
---|
| 180 | ;
|
---|
| 181 | ; Input Variables: BPRX - ptr to PRESCRIPTION (#52)
|
---|
| 182 | ; BPREF - refill # (0-No Refills,1-1st Refill, 2-2nd, ...)
|
---|
| 183 | ;
|
---|
| 184 | ; Return Value -> 0 = Not Released
|
---|
| 185 | ; released date = Released
|
---|
| 186 | ;
|
---|
| 187 | RELEASED(BPRX,BPREF) N RDT
|
---|
| 188 | ;
|
---|
| 189 | I BPREF=0 S RDT=$$RXRELDT^BPSRPT6(BPRX)\1
|
---|
| 190 | I BPREF'=0 S RDT=$$REFRELDT^BPSRPT6(BPRX,BPREF)\1
|
---|
| 191 | Q RDT
|
---|
| 192 | ;
|
---|
| 193 | ;Determine if claim was Auto Reversed
|
---|
| 194 | ;
|
---|
| 195 | ; Input Variable: BP59 - Lookup to BPS TRANSACTION (#59)
|
---|
| 196 | ; Return Value -> 1 = Auto Reversed
|
---|
| 197 | ; 0 = Not Auto Reversed
|
---|
| 198 | ;
|
---|
| 199 | AUTOREV(BP59) N AR,BP02
|
---|
| 200 | S BP02=+$P($G(^BPST(BP59,0)),U,4)
|
---|
| 201 | S AR=+$P($G(^BPSC(BP02,0)),U,7)
|
---|
| 202 | Q AR
|
---|
| 203 | ;
|
---|
| 204 | ;Determine if claim was closed
|
---|
| 205 | ;
|
---|
| 206 | ; Input Variable: BP59 - Lookup to BPS TRANSACTION (#59)
|
---|
| 207 | ; Return Value -> 1 = Closed
|
---|
| 208 | ; 0 = Not Closed
|
---|
| 209 | ;
|
---|
| 210 | CLSCLM(BP59) N BP02,CL
|
---|
| 211 | S BP02=+$P($G(^BPST(BP59,0)),U,4)
|
---|
| 212 | S CL=+$G(^BPSC(BP02,900))
|
---|
| 213 | Q CL
|
---|
| 214 | ;
|
---|
| 215 | ;Determine whether claim is Realtime or Backbilled
|
---|
| 216 | ;
|
---|
| 217 | ; Input Variable: BP59 - Lookup to BPS TRANSACTION (#59)
|
---|
| 218 | ; Return Value -> 1 = Backbilled
|
---|
| 219 | ; 0 = Realtime
|
---|
| 220 | RTBCK(BP59) N BB
|
---|
| 221 | S BB=$P($G(^BPST(BP59,12)),U)
|
---|
| 222 | S BB=$S(BB="BB":0,1:1)
|
---|
| 223 | Q BB
|
---|
| 224 | ;
|
---|
| 225 | ;Screen Pause 1
|
---|
| 226 | ;
|
---|
| 227 | ; Return variable - BPQ = 0 Continue
|
---|
| 228 | ; 2 Quit
|
---|
| 229 | PAUSE N X
|
---|
| 230 | U IO(0) W !!,"Press RETURN to continue, '^' to exit:"
|
---|
| 231 | R X:$G(DTIME) S:'$T X="^" S:X["^" BPQ=2
|
---|
| 232 | U IO
|
---|
| 233 | Q
|
---|
| 234 | ;
|
---|
| 235 | ;Screen Pause 2
|
---|
| 236 | ;
|
---|
| 237 | ; Return variable - BPQ = 0 Continue
|
---|
| 238 | ; 2 Quit
|
---|
| 239 | PAUSE2 N X
|
---|
| 240 | U IO(0) W !!,"Press RETURN to continue:"
|
---|
| 241 | R X:$G(DTIME) S:'$T X="^" S:X["^" BPQ=2
|
---|
| 242 | U IO
|
---|
| 243 | Q
|
---|
| 244 | ;
|
---|
| 245 | ;Get ECME#
|
---|
| 246 | ;
|
---|
| 247 | ; Input Variable: BP59 - Lookup to BPS TRANSACTION (#59)
|
---|
| 248 | ; Returned value -> Last 7 digits of ECME#
|
---|
| 249 | ;
|
---|
| 250 | ECMENUM(BP59) N BPY1,BPY2
|
---|
| 251 | S BPY1=(BP59\1),BPY2=$E(BPY1,$L(BPY1)-6,99) ;last 7 digits
|
---|
| 252 | Q BPY2
|
---|
| 253 | ;
|
---|
| 254 | ;Convert FM date or date.time to displayable (mm/dd/yy HH:MM) format
|
---|
| 255 | ;
|
---|
| 256 | DATTIM(X) N DATE,BPT,BPM,BPH,BPAP
|
---|
| 257 | S DATE=$S(X:$E(X,4,5)_"/"_$E(X,6,7)_"/"_$E(X,2,3),1:"")
|
---|
| 258 | S BPT=$P(X,".",2) S:$L(BPT)<4 BPT=BPT_$E("0000",1,4-$L(BPT))
|
---|
| 259 | S BPH=$E(BPT,1,2),BPM=$E(BPT,3,4)
|
---|
| 260 | S BPAP="AM" I BPH>12 S BPH=BPH-12,BPAP="PM" S:$L(BPH)<2 BPH="0"_BPH
|
---|
| 261 | I BPT S:'BPH BPH=12 S DATE=DATE_" "_BPH_":"_BPM_BPAP
|
---|
| 262 | Q $G(DATE)
|
---|
| 263 | ;
|
---|
| 264 | ;Display RT-Realtime,BB-Backbill, or " "
|
---|
| 265 | ;
|
---|
| 266 | RTBCKNAM(BPINDEX) Q $S(BPINDEX=1:"RT",BPINDEX=0:"BB",1:" ")
|
---|
| 267 | ;
|
---|
| 268 | ;See for Specific Reject Code
|
---|
| 269 | ;
|
---|
| 270 | CKREJ(BP59,BPREJCD) N FREJ,I,REJ,X
|
---|
| 271 | S FREJ=0
|
---|
| 272 | S X=$$REJTEXT^BPSRPT2(BP59,.REJ)
|
---|
| 273 | S X="" F S X=$O(REJ(X)) Q:X="" D Q:FREJ=1
|
---|
| 274 | .S REJ=$P($G(REJ(X)),":") Q:REJ=""
|
---|
| 275 | .S I="" F S I=$O(^BPSF(9002313.93,"B",REJ,I)) Q:I="" I I=BPREJCD S FREJ=1
|
---|
| 276 | Q FREJ
|
---|