BPSOPR2 ;ALB/PHH - OPECC Productivity Report Compiler ;9/21/2015
;;1.0;E CLAIMS MGMT ENGINE;**20**;JUN 2004;Build 27
;;Per VA Directive 6402, this routine should not be modified.
;
Q
;
COMPILE ; Entry point for the compile to build the scratch global
; This may be a background task if the job is queued.
;
D FIND
D SORT
D BUILD
;
D PRINT^BPSOPR3 ; print report
D ^%ZISC ; close the device
K @BPGLTMP ; kill scratch
I $D(ZTQUEUED) S ZTREQ="@" ; purge the task
Q
;
BUILD ; Build report
N BPSSHDR,BPSIDX,S1,S2,BPSRXFC,DATA,BPSDIV,BPSTRDT,BPSUSER,BPSLINE
;
D SUBINIT(.BPSSHDR)
;
S BPSIDX=1
;
; Export the report to Excel
I BPEXCEL D
.; Data is as follows:
.; DIVISION^USER^CURRENT STATUS^#TRANS IN DT RANGE^#TRANS TOTAL^ELIG^RX#^REF^ECME#^COB^DOS^TRANS DATE^PAID AMT
.;
.S S1=""
.F S S1=$O(@BPGLTMP@("SORT",S1)) Q:S1="" D
..S S2=0
..F S S2=$O(@BPGLTMP@("SORT",S1,S2)) Q:'S2 D
...S BPSRXFC=""
...F S BPSRXFC=$O(@BPGLTMP@("SORT",S1,S2,BPSRXFC)) Q:BPSRXFC="" D
....S DATA=@BPGLTMP@("SORT",S1,S2,BPSRXFC)
....S BPSDIV=$P(DATA,U,9),BPSTRDT=$P(DATA,U,11),BPSUSER=$P(DATA,U,10)
....S BPSLINE=BPSDIV_"^"
....S BPSLINE=BPSLINE_BPSUSER_"^"
....S BPSLINE=BPSLINE_$P(DATA,U)_"^"
....S BPSLINE=BPSLINE_+$P($G(@BPGLTMP@("DATA",BPSRXFC,BPSDIV,BPSUSER)),"^",13)_"^"
....S BPSLINE=BPSLINE_+$P($G(@BPGLTMP@("DATA",BPSRXFC,BPSDIV)),"^")_"^"
....S BPSLINE=BPSLINE_$S($P(DATA,U,2)="V":"VET",$P(DATA,U,2)="T":"TRI",$P(DATA,U,2)="C":"CVA",1:"")_"^"
....S BPSLINE=BPSLINE_$P(DATA,U,3)_"^"
....S BPSLINE=BPSLINE_$P(DATA,U,4)_"^"
....S BPSLINE=BPSLINE_$P(DATA,U,7)_"^"
....S BPSLINE=BPSLINE_$S($P(DATA,U,8)=1:"P",$P(DATA,U,8)=2:"S",$P(DATA,U,8)=3:"T",1:"")_"^"
....S BPSLINE=BPSLINE_$P(DATA,U,5)_"^"
....S BPSLINE=BPSLINE_$$DATTIM^BPSRPT1((BPSTRDT\1))_"^"
....I $P(DATA,U)'="NON-BILLABLE" D
.....S BPSLINE=BPSLINE_$S($P(DATA,U,6)="":"0.00",1:$P(DATA,U,6))
....S @BPGLTMP@("REPORT",BPSIDX)=BPSLINE,BPSIDX=BPSIDX+1
;
I 'BPEXCEL D
.S S1=""
.F S S1=$O(@BPGLTMP@("SORT",S1)) Q:S1="" D
..S BPSLINE=$S(BPSSORD=1:"USER NAME: "_S1,1:"DIVISION: "_S1)
..S @BPGLTMP@("REPORT",BPSIDX)=BPSLINE,BPSIDX=BPSIDX+1
..S BPSLINE=""
..D ADDCHAR^BPSOPR3(.BPSLINE,"-",129)
..S @BPGLTMP@("REPORT",BPSIDX)=BPSLINE,BPSIDX=BPSIDX+1
..S S2=0
..F S S2=$O(@BPGLTMP@("SORT",S1,S2)) Q:'S2 D
...S BPSRXFC=""
...F S BPSRXFC=$O(@BPGLTMP@("SORT",S1,S2,BPSRXFC)) Q:BPSRXFC="" D
....S DATA=@BPGLTMP@("SORT",S1,S2,BPSRXFC)
....S BPSDIV=$P(DATA,U,9),BPSTRDT=$P(DATA,U,11),BPSUSER=$P(DATA,U,10)
....;
....; Print details
....I BPSUMDET=0 D
.....S BPSLINE=$E(BPSUSER,1,15)
.....D ADDCHAR^BPSOPR3(.BPSLINE," ",17-$L(BPSLINE))
.....S BPSLINE=BPSLINE_$E($P(DATA,U),1,19)
.....D ADDCHAR^BPSOPR3(.BPSLINE," ",37-$L(BPSLINE))
.....D ADDCHAR^BPSOPR3(.BPSLINE," ",4-$L(+$P($G(@BPGLTMP@("DATA",BPSRXFC,BPSDIV,BPSUSER)),"^",13)))
.....S BPSLINE=BPSLINE_+$P($G(@BPGLTMP@("DATA",BPSRXFC,BPSDIV,BPSUSER)),"^",13)
.....D ADDCHAR^BPSOPR3(.BPSLINE," ",6-$L(+$P($G(@BPGLTMP@("DATA",BPSRXFC,BPSDIV)),"^")))
.....S BPSLINE=BPSLINE_+$P($G(@BPGLTMP@("DATA",BPSRXFC,BPSDIV)),"^")
.....D ADDCHAR^BPSOPR3(.BPSLINE," ",7)
.....S BPSLINE=BPSLINE_$S($P(DATA,U,2)="V":"VET",$P(DATA,U,2)="T":"TRI",$P(DATA,U,2)="C":"CVA",1:" ")
.....D ADDCHAR^BPSOPR3(.BPSLINE," ",2)
.....S BPSLINE=BPSLINE_$P(DATA,U,3)
.....D ADDCHAR^BPSOPR3(.BPSLINE," ",71-$L(BPSLINE))
.....S BPSLINE=BPSLINE_$P(DATA,U,4)_"/"
.....S BPSLINE=BPSLINE_$P(DATA,U,7)_" "
.....D ADDCHAR^BPSOPR3(.BPSLINE," ",12-$L($P(DATA,U,7)))
.....S BPSLINE=BPSLINE_$S($P(DATA,U,8)=1:"P",$P(DATA,U,8)=2:"S",$P(DATA,U,8)=3:"T",1:" ")
.....D ADDCHAR^BPSOPR3(.BPSLINE," ",3)
.....S BPSLINE=BPSLINE_$P(DATA,U,5)_" "
.....D ADDCHAR^BPSOPR3(.BPSLINE," ",9-$L($P(DATA,U,5)))
.....S BPSLINE=BPSLINE_$$DATTIM^BPSRPT1((BPSTRDT\1))_" "
.....I $P(DATA,U)'="NON-BILLABLE" D
......D ADDCHAR^BPSOPR3(.BPSLINE," ",15-$L($S($P(DATA,U,6)="":"0.00",1:$P(DATA,U,6))))
......S BPSLINE=BPSLINE_$S($P(DATA,U,6)="":"0.00",1:$P(DATA,U,6))
.....S @BPGLTMP@("REPORT",BPSIDX)=BPSLINE,BPSIDX=BPSIDX+1
..;
..; Print subtotals
..D PRTSGHDR(.BPSSHDR,.BPSIDX,S1)
..I BPSSORD=0 D PRTSGTOT(.BPSIDX,S1)
..I BPSSORD=1 D PRTSGTOT(.BPSIDX,"",S1)
..S DATA=""
..D ADDCHAR^BPSOPR3(.DATA," ",129)
..S @BPGLTMP@("REPORT",BPSIDX)=DATA,BPSIDX=BPSIDX+1
..S DATA=""
..D ADDCHAR^BPSOPR3(.DATA," ",129)
..S @BPGLTMP@("REPORT",BPSIDX)=DATA,BPSIDX=BPSIDX+1
..S DATA=""
..D ADDCHAR^BPSOPR3(.DATA,"-",129)
..S @BPGLTMP@("REPORT",BPSIDX)=DATA,BPSIDX=BPSIDX+1
.;
.I '$D(@BPGLTMP@("REPORT"))!(BPSIDX=1) Q
.S DATA=""
.D ADDCHAR^BPSOPR3(.DATA,"-",129)
.I @BPGLTMP@("REPORT",BPSIDX-1)=DATA D
..K @BPGLTMP@("REPORT",BPSIDX-1) S BPSIDX=BPSIDX-1
..K @BPGLTMP@("REPORT",BPSIDX-1) S BPSIDX=BPSIDX-1
..K @BPGLTMP@("REPORT",BPSIDX-1) S BPSIDX=BPSIDX-1
.;
.; Print summary
.D PRTSGHDR(.BPSSHDR,.BPSIDX)
.D PRTSGTOT(.BPSIDX)
;
I '$D(@BPGLTMP@("REPORT"))!(BPSIDX=1) D
.S @BPGLTMP@("REPORT",BPSIDX)="No data available for date range."
Q
;
PRTSGTOT(BPSIDX,BPSDIV,BPSUSER) ; Print grand/subtotals
N X,BPSUSRNM,BPSDIV1
;
Q:BPSIDX=""
S BPSDIV=$G(BPSDIV,"")
S BPSUSER=$G(BPSUSER,"")
;
I BPSUSER="",BPUSER=1 D
.S X=0
.F S X=$O(BPUSER(X)) Q:'X S BPSUSRNM($P(BPUSER(X),U,2))=""
.;
.S BPSUSER=""
.F S BPSUSER=$O(BPSUSRNM(BPSUSER)) Q:BPSUSER="" D
..D PRTUTOT(.BPSIDX,BPSDIV,BPSUSER)
;
I BPSUSER="",BPUSER=0 D
.S BPSDIV1=""
.F S BPSDIV1=$O(@BPGLTMP@("USRTOT",BPSDIV1)) Q:BPSDIV1="" D
..S BPSUSER=""
..F S BPSUSER=$O(@BPGLTMP@("USRTOT",BPSDIV1,BPSUSER)) Q:BPSUSER="" D
...S BPSUSRNM(BPSUSER)=""
.;
.S BPSUSER=""
.F S BPSUSER=$O(BPSUSRNM(BPSUSER)) Q:BPSUSER="" D
..D PRTUTOT(.BPSIDX,BPSDIV,BPSUSER)
;
I BPSUSER'="" D
.D PRTUTOT(.BPSIDX,BPSDIV,BPSUSER)
Q
;
PRTUTOT(BPSIDX,BPSDIV,BPSUSER) ; Print user totals
N BPSPYNR,BPSPYREJ,BPSTAMT,BPSTTRN,BPSDIV1,BPSLINE
;
Q:BPSIDX=""
S BPSDIV=$G(BPSDIV,"")
Q:BPSUSER=""
;
S (BPSPYNR,BPSPYREJ,BPSTAMT,BPSTTRN)=0
I BPSDIV'="" D
.S BPSPYNR=+$P($G(@BPGLTMP@("USRTOT",BPSDIV,BPSUSER)),"^",2)
.S BPSPYREJ=+$P($G(@BPGLTMP@("USRTOT",BPSDIV,BPSUSER)),"^",3)
.S BPSTAMT=+$P($G(@BPGLTMP@("USRTOT",BPSDIV,BPSUSER)),"^")
I BPSDIV="" D
.S BPSDIV1=""
.F S BPSDIV1=$O(@BPGLTMP@("USRTOT",BPSDIV1)) Q:BPSDIV1="" D
..Q:'$D(@BPGLTMP@("USRTOT",BPSDIV1,BPSUSER))
..S BPSPYNR=BPSPYNR+$P($G(@BPGLTMP@("USRTOT",BPSDIV1,BPSUSER)),"^",2)
..S BPSPYREJ=BPSPYREJ+$P($G(@BPGLTMP@("USRTOT",BPSDIV1,BPSUSER)),"^",3)
..S BPSTAMT=BPSTAMT+(+$P($G(@BPGLTMP@("USRTOT",BPSDIV1,BPSUSER)),"^"))
S BPSTTRN=$$TOTTRN(BPSDIV,BPSUSER)
;
S BPSLINE=$E(BPSUSER,1,15)
D ADDCHAR^BPSOPR3(.BPSLINE," ",17-$L(BPSLINE))
S BPSLINE=BPSLINE_BPSPYREJ
D ADDCHAR^BPSOPR3(.BPSLINE," ",41-$L(BPSLINE))
S BPSLINE=BPSLINE_BPSPYNR
D ADDCHAR^BPSOPR3(.BPSLINE," ",69-$L(BPSLINE))
D ADDCHAR^BPSOPR3(.BPSLINE," ",5-$L(BPSTTRN))
S BPSLINE=BPSLINE_BPSTTRN
D ADDCHAR^BPSOPR3(.BPSLINE," ",89-$L(BPSLINE))
S BPSTAMT=$J(BPSTAMT,7,2)
D ADDCHAR^BPSOPR3(.BPSLINE," ",15-$L(BPSTAMT))
S BPSLINE=BPSLINE_BPSTAMT
;
I BPSDIV'="",'$D(@BPGLTMP@("USRTOT",BPSDIV,BPSUSER)) Q
S @BPGLTMP@("REPORT",BPSIDX)=BPSLINE,BPSIDX=BPSIDX+1
Q
;
TOTTRN(BPSDIV,BPSUSER) ; Get total transactions for a user
N BPSCNT,BPSTRDT,BPSRXFC,BPSDIV1
;
S BPSDIV=$G(BPSDIV,"")
Q:BPSUSER=""
;
S BPSCNT=0
I BPSDIV'="" D
.S BPSRXFC=""
.F S BPSRXFC=$O(@BPGLTMP@("DATA",BPSRXFC)) Q:BPSRXFC="" D
..S BPSCNT=BPSCNT+(+$P($G(@BPGLTMP@("DATA",BPSRXFC,BPSDIV,BPSUSER)),"^",13))
I BPSDIV="" D
.S BPSRXFC=""
.F S BPSRXFC=$O(@BPGLTMP@("DATA",BPSRXFC)) Q:BPSRXFC="" D
..S BPSDIV1=""
..F S BPSDIV1=$O(@BPGLTMP@("DATA",BPSRXFC,BPSDIV1)) Q:BPSDIV1="" D
...Q:'$D(@BPGLTMP@("DATA",BPSRXFC,BPSDIV1,BPSUSER))
...S BPSCNT=BPSCNT+(+$P($G(@BPGLTMP@("DATA",BPSRXFC,BPSDIV1,BPSUSER)),"^",13))
Q BPSCNT
;
PRTSGHDR(BPSSHDR,BPSIDX,BPSSGHTX) ; Print subtotals/grand header
N BPSLINE,BPSCNT
;
S BPSSGHTX=$G(BPSSGHTX,"")
S BPSSHDR(2)=$S(BPSSGHTX="":"GRAND TOTAL",1:"SUBTOTALS FOR "_BPSSGHTX)
;
F BPSCNT=1:1:4 D
.S BPSLINE=BPSSHDR(BPSCNT)
.S @BPGLTMP@("REPORT",BPSIDX)=BPSLINE,BPSIDX=BPSIDX+1
Q
;
SUBINIT(BPSSHDR) ; Set up subtotals header
S BPSSHDR(1)=""
S BPSSHDR(3)=" REJECTED AND NOT REJECTED AND PAYABLE"
S BPSSHDR(4)="USER RESOLVED TO PAYABLE (POSSIBLE BACK-BILL) TRANS IN DT RANGE AMOUNT PAID"
Q
;
FIND ; Find records
N BPLDT57,BP57
K @BPGLTMP
;
I 'BPEXCEL,'$D(ZTQUEUED) U 0 W !!,"Compiling OPECC Productivity Report. Please wait ... ",! U IO
;
; Check Variables
S:'$G(BPBEGDT) BPBEGDT=0
S:'$G(BPENDDT) BPENDDT=9999999
S BPENDDT=BPENDDT+0.9
;
; Loop through BPS LOG OF TRANSACTIONS file #9002313.57
S BPLDT57=BPBEGDT-0.00001
F S BPLDT57=+$O(^BPSTL("AH",BPLDT57)) Q:BPLDT57=0!(BPLDT57>BPENDDT) D
.S BP57=0
.F S BP57=$O(^BPSTL("AH",BPLDT57,BP57)) Q:'BP57 D PROCESS^BPSOPR3(BP57)
Q
;
CALCREJ(BPSDIV,BPSUSER,BPRX,BPREF,BPSCOB) ; Calculate reject counts
; Returns 1 if reject found, otherwise returns 0
N BP57,BPSRCNT
;
S (BP57,BPSRCNT)=0
F S BP57=$O(^BPSTL("AEC",BPRX,BP57)) Q:'BP57!(BPSRCNT) D
.I BPSUSER'=$P($G(^VA(200,+$P($G(^BPSTL(BP57,0)),U,10),0)),U) Q
.I BPSDIV'=$P($G(^BPS(9002313.56,+$P($G(^BPSTL(BP57,1)),U,7),0)),U) Q
.I BPREF'=+$P($G(^BPSTL(BP57,1)),U) Q
.I BPSCOB'=$P($G(^BPSTL(BP57,0)),U,14) Q
.I $G(^BPSTL(BP57,2))'["Rejected" Q
.S BPSRCNT=1
Q BPSRCNT
;
; Returns ECME number from 9002313.02 as:
; 7 or 12 digits of the prescription IEN file 52
; or 12 spaces
N BPST0,PC,PF,BPST4,PR,X
;
S BPST0=$G(^BPSTL(BP57,0)),PC=$P(BPST0,U,4),PF=$P(BPST0,U,9)
S BPST4=$G(^BPSTL(BP57,4)),PR=$P(BPST4,U,1)
I PR]"" S PC=PR ;This is a reversal
I PC=""!(PF="") Q $$FORMAT^BPSSCRU2("",12," ",1)
S X=$P($G(^BPSC(PC,400,PF,400)),U,2)
I X="" Q $$FORMAT^BPSSCRU2(X,12," ",1)
Q $E(X,3,14)
;
GETRXFCI(BPSDIV,BPRX,BPREF,BPSCOB) ; Get general RXFC info
; Returns: paid amount ^ total transactions ^ IEN of 57 ^ transaction
; type of last matching BP57 found
;
N BPRETVAL,BP57,BPSPAMT,BPSTOTTN,BPSEC,BPSTRTYP
;
S BPRETVAL="0^0^0^",(BP57,BPSPAMT,BPSTOTTN)=0,(BPSEC,BPSTRTYP)=""
F S BP57=$O(^BPSTL("AEC",BPRX,BP57)) Q:'BP57 D
.Q:BPSDIV'=$P($G(^BPS(9002313.56,+$P($G(^BPSTL(BP57,1)),U,7),0)),U)
.Q:BPREF'=+$P($G(^BPSTL(BP57,1)),U)
.Q:BPSCOB'=$P($G(^BPSTL(BP57,0)),U,14)
.Q:$P($G(^BPSTL(BP57,0)),U,15)="E"
.I '$F(".BB.ERES.ERWV.ERNB.EREV.P2.P2S.","."_$P($G(^BPSTL(BP57,12)),U,1)_".") Q
.Q:$P($G(^BPSTL(BP57,0)),U,8)=""
.S BPSEC=$P($G(^BPSTL(BP57,9)),U,4)
.Q:BPSEC=""
.I BPELIG=1,'$D(BPELIG(BPSEC)) Q
.S BPSPAMT=$$TOTAMNT^BPSSCRLG(+$P($G(^BPSTL(BP57,0)),U,5))
.S BPSTOTTN=BPSTOTTN+1
.S BPSTRTYP=$P($G(^BPSTL(BP57,0)),U,15)
.S BPRETVAL=BPSPAMT_"^"_BPSTOTTN_"^"_BP57_"^"_BPSTRTYP
Q BPRETVAL
;
SORT ; Sort report based on divison or user
N BPSRXFC,BPSDIV,BPSUSER,DATA,S1,S2,S3
;
S BPSRXFC=""
F S BPSRXFC=$O(@BPGLTMP@("DATA",BPSRXFC)) Q:BPSRXFC="" D
.S BPSDIV=""
.F S BPSDIV=$O(@BPGLTMP@("DATA",BPSRXFC,BPSDIV)) Q:BPSDIV="" D
..S BPSUSER=""
..F S BPSUSER=$O(@BPGLTMP@("DATA",BPSRXFC,BPSDIV,BPSUSER)) Q:BPSUSER="" D
...S DATA=@BPGLTMP@("DATA",BPSRXFC,BPSDIV,BPSUSER)
...S S1=$S(BPSSORD=1:$P(DATA,"^",10),1:$P(DATA,"^",9))
...S S2=$P(DATA,"^",11)
...S S3=BPSRXFC
...S @BPGLTMP@("SORT",S1,S2,S3)=DATA
Q
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HBPSOPR2 11570 printed Oct 16, 2024@17:52:13 Page 2
BPSOPR2 ;ALB/PHH - OPECC Productivity Report Compiler ;9/21/2015
+1 ;;1.0;E CLAIMS MGMT ENGINE;**20**;JUN 2004;Build 27
+2 ;;Per VA Directive 6402, this routine should not be modified.
+3 ;
+4 QUIT
+5 ;
COMPILE ; Entry point for the compile to build the scratch global
+1 ; This may be a background task if the job is queued.
+2 ;
+3 DO FIND
+4 DO SORT
+5 DO BUILD
+6 ;
+7 ; print report
DO PRINT^BPSOPR3
+8 ; close the device
DO ^%ZISC
+9 ; kill scratch
KILL @BPGLTMP
+10 ; purge the task
IF $DATA(ZTQUEUED)
SET ZTREQ="@"
+11 QUIT
+12 ;
BUILD ; Build report
+1 NEW BPSSHDR,BPSIDX,S1,S2,BPSRXFC,DATA,BPSDIV,BPSTRDT,BPSUSER,BPSLINE
+2 ;
+3 DO SUBINIT(.BPSSHDR)
+4 ;
+5 SET BPSIDX=1
+6 ;
+7 ; Export the report to Excel
+8 IF BPEXCEL
Begin DoDot:1
+9 ; Data is as follows:
+10 ; DIVISION^USER^CURRENT STATUS^#TRANS IN DT RANGE^#TRANS TOTAL^ELIG^RX#^REF^ECME#^COB^DOS^TRANS DATE^PAID AMT
+11 ;
+12 SET S1=""
+13 FOR
SET S1=$ORDER(@BPGLTMP@("SORT",S1))
if S1=""
QUIT
Begin DoDot:2
+14 SET S2=0
+15 FOR
SET S2=$ORDER(@BPGLTMP@("SORT",S1,S2))
if 'S2
QUIT
Begin DoDot:3
+16 SET BPSRXFC=""
+17 FOR
SET BPSRXFC=$ORDER(@BPGLTMP@("SORT",S1,S2,BPSRXFC))
if BPSRXFC=""
QUIT
Begin DoDot:4
+18 SET DATA=@BPGLTMP@("SORT",S1,S2,BPSRXFC)
+19 SET BPSDIV=$PIECE(DATA,U,9)
SET BPSTRDT=$PIECE(DATA,U,11)
SET BPSUSER=$PIECE(DATA,U,10)
+20 SET BPSLINE=BPSDIV_"^"
+21 SET BPSLINE=BPSLINE_BPSUSER_"^"
+22 SET BPSLINE=BPSLINE_$PIECE(DATA,U)_"^"
+23 SET BPSLINE=BPSLINE_+$PIECE($GET(@BPGLTMP@("DATA",BPSRXFC,BPSDIV,BPSUSER)),"^",13)_"^"
+24 SET BPSLINE=BPSLINE_+$PIECE($GET(@BPGLTMP@("DATA",BPSRXFC,BPSDIV)),"^")_"^"
+25 SET BPSLINE=BPSLINE_$SELECT($PIECE(DATA,U,2)="V":"VET",$PIECE(DATA,U,2)="T":"TRI",$PIECE(DATA,U,2)="C":"CVA",1:"")_"^"
+26 SET BPSLINE=BPSLINE_$PIECE(DATA,U,3)_"^"
+27 SET BPSLINE=BPSLINE_$PIECE(DATA,U,4)_"^"
+28 SET BPSLINE=BPSLINE_$PIECE(DATA,U,7)_"^"
+29 SET BPSLINE=BPSLINE_$SELECT($PIECE(DATA,U,8)=1:"P",$PIECE(DATA,U,8)=2:"S",$PIECE(DATA,U,8)=3:"T",1:"")_"^"
+30 SET BPSLINE=BPSLINE_$PIECE(DATA,U,5)_"^"
+31 SET BPSLINE=BPSLINE_$$DATTIM^BPSRPT1((BPSTRDT\1))_"^"
+32 IF $PIECE(DATA,U)'="NON-BILLABLE"
Begin DoDot:5
+33 SET BPSLINE=BPSLINE_$SELECT($PIECE(DATA,U,6)="":"0.00",1:$PIECE(DATA,U,6))
End DoDot:5
+34 SET @BPGLTMP@("REPORT",BPSIDX)=BPSLINE
SET BPSIDX=BPSIDX+1
End DoDot:4
End DoDot:3
End DoDot:2
End DoDot:1
+35 ;
+36 IF 'BPEXCEL
Begin DoDot:1
+37 SET S1=""
+38 FOR
SET S1=$ORDER(@BPGLTMP@("SORT",S1))
if S1=""
QUIT
Begin DoDot:2
+39 SET BPSLINE=$SELECT(BPSSORD=1:"USER NAME: "_S1,1:"DIVISION: "_S1)
+40 SET @BPGLTMP@("REPORT",BPSIDX)=BPSLINE
SET BPSIDX=BPSIDX+1
+41 SET BPSLINE=""
+42 DO ADDCHAR^BPSOPR3(.BPSLINE,"-",129)
+43 SET @BPGLTMP@("REPORT",BPSIDX)=BPSLINE
SET BPSIDX=BPSIDX+1
+44 SET S2=0
+45 FOR
SET S2=$ORDER(@BPGLTMP@("SORT",S1,S2))
if 'S2
QUIT
Begin DoDot:3
+46 SET BPSRXFC=""
+47 FOR
SET BPSRXFC=$ORDER(@BPGLTMP@("SORT",S1,S2,BPSRXFC))
if BPSRXFC=""
QUIT
Begin DoDot:4
+48 SET DATA=@BPGLTMP@("SORT",S1,S2,BPSRXFC)
+49 SET BPSDIV=$PIECE(DATA,U,9)
SET BPSTRDT=$PIECE(DATA,U,11)
SET BPSUSER=$PIECE(DATA,U,10)
+50 ;
+51 ; Print details
+52 IF BPSUMDET=0
Begin DoDot:5
+53 SET BPSLINE=$EXTRACT(BPSUSER,1,15)
+54 DO ADDCHAR^BPSOPR3(.BPSLINE," ",17-$LENGTH(BPSLINE))
+55 SET BPSLINE=BPSLINE_$EXTRACT($PIECE(DATA,U),1,19)
+56 DO ADDCHAR^BPSOPR3(.BPSLINE," ",37-$LENGTH(BPSLINE))
+57 DO ADDCHAR^BPSOPR3(.BPSLINE," ",4-$LENGTH(+$PIECE($GET(@BPGLTMP@("DATA",BPSRXFC,BPSDIV,BPSUSER)),"^",13)))
+58 SET BPSLINE=BPSLINE_+$PIECE($GET(@BPGLTMP@("DATA",BPSRXFC,BPSDIV,BPSUSER)),"^",13)
+59 DO ADDCHAR^BPSOPR3(.BPSLINE," ",6-$LENGTH(+$PIECE($GET(@BPGLTMP@("DATA",BPSRXFC,BPSDIV)),"^")))
+60 SET BPSLINE=BPSLINE_+$PIECE($GET(@BPGLTMP@("DATA",BPSRXFC,BPSDIV)),"^")
+61 DO ADDCHAR^BPSOPR3(.BPSLINE," ",7)
+62 SET BPSLINE=BPSLINE_$SELECT($PIECE(DATA,U,2)="V":"VET",$PIECE(DATA,U,2)="T":"TRI",$PIECE(DATA,U,2)="C":"CVA",1:" ")
+63 DO ADDCHAR^BPSOPR3(.BPSLINE," ",2)
+64 SET BPSLINE=BPSLINE_$PIECE(DATA,U,3)
+65 DO ADDCHAR^BPSOPR3(.BPSLINE," ",71-$LENGTH(BPSLINE))
+66 SET BPSLINE=BPSLINE_$PIECE(DATA,U,4)_"/"
+67 SET BPSLINE=BPSLINE_$PIECE(DATA,U,7)_" "
+68 DO ADDCHAR^BPSOPR3(.BPSLINE," ",12-$LENGTH($PIECE(DATA,U,7)))
+69 SET BPSLINE=BPSLINE_$SELECT($PIECE(DATA,U,8)=1:"P",$PIECE(DATA,U,8)=2:"S",$PIECE(DATA,U,8)=3:"T",1:" ")
+70 DO ADDCHAR^BPSOPR3(.BPSLINE," ",3)
+71 SET BPSLINE=BPSLINE_$PIECE(DATA,U,5)_" "
+72 DO ADDCHAR^BPSOPR3(.BPSLINE," ",9-$LENGTH($PIECE(DATA,U,5)))
+73 SET BPSLINE=BPSLINE_$$DATTIM^BPSRPT1((BPSTRDT\1))_" "
+74 IF $PIECE(DATA,U)'="NON-BILLABLE"
Begin DoDot:6
+75 DO ADDCHAR^BPSOPR3(.BPSLINE," ",15-$LENGTH($SELECT($PIECE(DATA,U,6)="":"0.00",1:$PIECE(DATA,U,6))))
+76 SET BPSLINE=BPSLINE_$SELECT($PIECE(DATA,U,6)="":"0.00",1:$PIECE(DATA,U,6))
End DoDot:6
+77 SET @BPGLTMP@("REPORT",BPSIDX)=BPSLINE
SET BPSIDX=BPSIDX+1
End DoDot:5
End DoDot:4
End DoDot:3
+78 ;
+79 ; Print subtotals
+80 DO PRTSGHDR(.BPSSHDR,.BPSIDX,S1)
+81 IF BPSSORD=0
DO PRTSGTOT(.BPSIDX,S1)
+82 IF BPSSORD=1
DO PRTSGTOT(.BPSIDX,"",S1)
+83 SET DATA=""
+84 DO ADDCHAR^BPSOPR3(.DATA," ",129)
+85 SET @BPGLTMP@("REPORT",BPSIDX)=DATA
SET BPSIDX=BPSIDX+1
+86 SET DATA=""
+87 DO ADDCHAR^BPSOPR3(.DATA," ",129)
+88 SET @BPGLTMP@("REPORT",BPSIDX)=DATA
SET BPSIDX=BPSIDX+1
+89 SET DATA=""
+90 DO ADDCHAR^BPSOPR3(.DATA,"-",129)
+91 SET @BPGLTMP@("REPORT",BPSIDX)=DATA
SET BPSIDX=BPSIDX+1
End DoDot:2
+92 ;
+93 IF '$DATA(@BPGLTMP@("REPORT"))!(BPSIDX=1)
QUIT
+94 SET DATA=""
+95 DO ADDCHAR^BPSOPR3(.DATA,"-",129)
+96 IF @BPGLTMP@("REPORT",BPSIDX-1)=DATA
Begin DoDot:2
+97 KILL @BPGLTMP@("REPORT",BPSIDX-1)
SET BPSIDX=BPSIDX-1
+98 KILL @BPGLTMP@("REPORT",BPSIDX-1)
SET BPSIDX=BPSIDX-1
+99 KILL @BPGLTMP@("REPORT",BPSIDX-1)
SET BPSIDX=BPSIDX-1
End DoDot:2
+100 ;
+101 ; Print summary
+102 DO PRTSGHDR(.BPSSHDR,.BPSIDX)
+103 DO PRTSGTOT(.BPSIDX)
End DoDot:1
+104 ;
+105 IF '$DATA(@BPGLTMP@("REPORT"))!(BPSIDX=1)
Begin DoDot:1
+106 SET @BPGLTMP@("REPORT",BPSIDX)="No data available for date range."
End DoDot:1
+107 QUIT
+108 ;
PRTSGTOT(BPSIDX,BPSDIV,BPSUSER) ; Print grand/subtotals
+1 NEW X,BPSUSRNM,BPSDIV1
+2 ;
+3 if BPSIDX=""
QUIT
+4 SET BPSDIV=$GET(BPSDIV,"")
+5 SET BPSUSER=$GET(BPSUSER,"")
+6 ;
+7 IF BPSUSER=""
IF BPUSER=1
Begin DoDot:1
+8 SET X=0
+9 FOR
SET X=$ORDER(BPUSER(X))
if 'X
QUIT
SET BPSUSRNM($PIECE(BPUSER(X),U,2))=""
+10 ;
+11 SET BPSUSER=""
+12 FOR
SET BPSUSER=$ORDER(BPSUSRNM(BPSUSER))
if BPSUSER=""
QUIT
Begin DoDot:2
+13 DO PRTUTOT(.BPSIDX,BPSDIV,BPSUSER)
End DoDot:2
End DoDot:1
+14 ;
+15 IF BPSUSER=""
IF BPUSER=0
Begin DoDot:1
+16 SET BPSDIV1=""
+17 FOR
SET BPSDIV1=$ORDER(@BPGLTMP@("USRTOT",BPSDIV1))
if BPSDIV1=""
QUIT
Begin DoDot:2
+18 SET BPSUSER=""
+19 FOR
SET BPSUSER=$ORDER(@BPGLTMP@("USRTOT",BPSDIV1,BPSUSER))
if BPSUSER=""
QUIT
Begin DoDot:3
+20 SET BPSUSRNM(BPSUSER)=""
End DoDot:3
End DoDot:2
+21 ;
+22 SET BPSUSER=""
+23 FOR
SET BPSUSER=$ORDER(BPSUSRNM(BPSUSER))
if BPSUSER=""
QUIT
Begin DoDot:2
+24 DO PRTUTOT(.BPSIDX,BPSDIV,BPSUSER)
End DoDot:2
End DoDot:1
+25 ;
+26 IF BPSUSER'=""
Begin DoDot:1
+27 DO PRTUTOT(.BPSIDX,BPSDIV,BPSUSER)
End DoDot:1
+28 QUIT
+29 ;
PRTUTOT(BPSIDX,BPSDIV,BPSUSER) ; Print user totals
+1 NEW BPSPYNR,BPSPYREJ,BPSTAMT,BPSTTRN,BPSDIV1,BPSLINE
+2 ;
+3 if BPSIDX=""
QUIT
+4 SET BPSDIV=$GET(BPSDIV,"")
+5 if BPSUSER=""
QUIT
+6 ;
+7 SET (BPSPYNR,BPSPYREJ,BPSTAMT,BPSTTRN)=0
+8 IF BPSDIV'=""
Begin DoDot:1
+9 SET BPSPYNR=+$PIECE($GET(@BPGLTMP@("USRTOT",BPSDIV,BPSUSER)),"^",2)
+10 SET BPSPYREJ=+$PIECE($GET(@BPGLTMP@("USRTOT",BPSDIV,BPSUSER)),"^",3)
+11 SET BPSTAMT=+$PIECE($GET(@BPGLTMP@("USRTOT",BPSDIV,BPSUSER)),"^")
End DoDot:1
+12 IF BPSDIV=""
Begin DoDot:1
+13 SET BPSDIV1=""
+14 FOR
SET BPSDIV1=$ORDER(@BPGLTMP@("USRTOT",BPSDIV1))
if BPSDIV1=""
QUIT
Begin DoDot:2
+15 if '$DATA(@BPGLTMP@("USRTOT",BPSDIV1,BPSUSER))
QUIT
+16 SET BPSPYNR=BPSPYNR+$PIECE($GET(@BPGLTMP@("USRTOT",BPSDIV1,BPSUSER)),"^",2)
+17 SET BPSPYREJ=BPSPYREJ+$PIECE($GET(@BPGLTMP@("USRTOT",BPSDIV1,BPSUSER)),"^",3)
+18 SET BPSTAMT=BPSTAMT+(+$PIECE($GET(@BPGLTMP@("USRTOT",BPSDIV1,BPSUSER)),"^"))
End DoDot:2
End DoDot:1
+19 SET BPSTTRN=$$TOTTRN(BPSDIV,BPSUSER)
+20 ;
+21 SET BPSLINE=$EXTRACT(BPSUSER,1,15)
+22 DO ADDCHAR^BPSOPR3(.BPSLINE," ",17-$LENGTH(BPSLINE))
+23 SET BPSLINE=BPSLINE_BPSPYREJ
+24 DO ADDCHAR^BPSOPR3(.BPSLINE," ",41-$LENGTH(BPSLINE))
+25 SET BPSLINE=BPSLINE_BPSPYNR
+26 DO ADDCHAR^BPSOPR3(.BPSLINE," ",69-$LENGTH(BPSLINE))
+27 DO ADDCHAR^BPSOPR3(.BPSLINE," ",5-$LENGTH(BPSTTRN))
+28 SET BPSLINE=BPSLINE_BPSTTRN
+29 DO ADDCHAR^BPSOPR3(.BPSLINE," ",89-$LENGTH(BPSLINE))
+30 SET BPSTAMT=$JUSTIFY(BPSTAMT,7,2)
+31 DO ADDCHAR^BPSOPR3(.BPSLINE," ",15-$LENGTH(BPSTAMT))
+32 SET BPSLINE=BPSLINE_BPSTAMT
+33 ;
+34 IF BPSDIV'=""
IF '$DATA(@BPGLTMP@("USRTOT",BPSDIV,BPSUSER))
QUIT
+35 SET @BPGLTMP@("REPORT",BPSIDX)=BPSLINE
SET BPSIDX=BPSIDX+1
+36 QUIT
+37 ;
TOTTRN(BPSDIV,BPSUSER) ; Get total transactions for a user
+1 NEW BPSCNT,BPSTRDT,BPSRXFC,BPSDIV1
+2 ;
+3 SET BPSDIV=$GET(BPSDIV,"")
+4 if BPSUSER=""
QUIT
+5 ;
+6 SET BPSCNT=0
+7 IF BPSDIV'=""
Begin DoDot:1
+8 SET BPSRXFC=""
+9 FOR
SET BPSRXFC=$ORDER(@BPGLTMP@("DATA",BPSRXFC))
if BPSRXFC=""
QUIT
Begin DoDot:2
+10 SET BPSCNT=BPSCNT+(+$PIECE($GET(@BPGLTMP@("DATA",BPSRXFC,BPSDIV,BPSUSER)),"^",13))
End DoDot:2
End DoDot:1
+11 IF BPSDIV=""
Begin DoDot:1
+12 SET BPSRXFC=""
+13 FOR
SET BPSRXFC=$ORDER(@BPGLTMP@("DATA",BPSRXFC))
if BPSRXFC=""
QUIT
Begin DoDot:2
+14 SET BPSDIV1=""
+15 FOR
SET BPSDIV1=$ORDER(@BPGLTMP@("DATA",BPSRXFC,BPSDIV1))
if BPSDIV1=""
QUIT
Begin DoDot:3
+16 if '$DATA(@BPGLTMP@("DATA",BPSRXFC,BPSDIV1,BPSUSER))
QUIT
+17 SET BPSCNT=BPSCNT+(+$PIECE($GET(@BPGLTMP@("DATA",BPSRXFC,BPSDIV1,BPSUSER)),"^",13))
End DoDot:3
End DoDot:2
End DoDot:1
+18 QUIT BPSCNT
+19 ;
PRTSGHDR(BPSSHDR,BPSIDX,BPSSGHTX) ; Print subtotals/grand header
+1 NEW BPSLINE,BPSCNT
+2 ;
+3 SET BPSSGHTX=$GET(BPSSGHTX,"")
+4 SET BPSSHDR(2)=$SELECT(BPSSGHTX="":"GRAND TOTAL",1:"SUBTOTALS FOR "_BPSSGHTX)
+5 ;
+6 FOR BPSCNT=1:1:4
Begin DoDot:1
+7 SET BPSLINE=BPSSHDR(BPSCNT)
+8 SET @BPGLTMP@("REPORT",BPSIDX)=BPSLINE
SET BPSIDX=BPSIDX+1
End DoDot:1
+9 QUIT
+10 ;
SUBINIT(BPSSHDR) ; Set up subtotals header
+1 SET BPSSHDR(1)=""
+2 SET BPSSHDR(3)=" REJECTED AND NOT REJECTED AND PAYABLE"
+3 SET BPSSHDR(4)="USER RESOLVED TO PAYABLE (POSSIBLE BACK-BILL) TRANS IN DT RANGE AMOUNT PAID"
+4 QUIT
+5 ;
FIND ; Find records
+1 NEW BPLDT57,BP57
+2 KILL @BPGLTMP
+3 ;
+4 IF 'BPEXCEL
IF '$DATA(ZTQUEUED)
USE 0
WRITE !!,"Compiling OPECC Productivity Report. Please wait ... ",!
USE IO
+5 ;
+6 ; Check Variables
+7 if '$GET(BPBEGDT)
SET BPBEGDT=0
+8 if '$GET(BPENDDT)
SET BPENDDT=9999999
+9 SET BPENDDT=BPENDDT+0.9
+10 ;
+11 ; Loop through BPS LOG OF TRANSACTIONS file #9002313.57
+12 SET BPLDT57=BPBEGDT-0.00001
+13 FOR
SET BPLDT57=+$ORDER(^BPSTL("AH",BPLDT57))
if BPLDT57=0!(BPLDT57>BPENDDT)
QUIT
Begin DoDot:1
+14 SET BP57=0
+15 FOR
SET BP57=$ORDER(^BPSTL("AH",BPLDT57,BP57))
if 'BP57
QUIT
DO PROCESS^BPSOPR3(BP57)
End DoDot:1
+16 QUIT
+17 ;
CALCREJ(BPSDIV,BPSUSER,BPRX,BPREF,BPSCOB) ; Calculate reject counts
+1 ; Returns 1 if reject found, otherwise returns 0
+2 NEW BP57,BPSRCNT
+3 ;
+4 SET (BP57,BPSRCNT)=0
+5 FOR
SET BP57=$ORDER(^BPSTL("AEC",BPRX,BP57))
if 'BP57!(BPSRCNT)
QUIT
Begin DoDot:1
+6 IF BPSUSER'=$PIECE($GET(^VA(200,+$PIECE($GET(^BPSTL(BP57,0)),U,10),0)),U)
QUIT
+7 IF BPSDIV'=$PIECE($GET(^BPS(9002313.56,+$PIECE($GET(^BPSTL(BP57,1)),U,7),0)),U)
QUIT
+8 IF BPREF'=+$PIECE($GET(^BPSTL(BP57,1)),U)
QUIT
+9 IF BPSCOB'=$PIECE($GET(^BPSTL(BP57,0)),U,14)
QUIT
+10 IF $GET(^BPSTL(BP57,2))'["Rejected"
QUIT
+11 SET BPSRCNT=1
End DoDot:1
+12 QUIT BPSRCNT
+13 ;
+1 ; Returns ECME number from 9002313.02 as:
+2 ; 7 or 12 digits of the prescription IEN file 52
+3 ; or 12 spaces
+4 NEW BPST0,PC,PF,BPST4,PR,X
+5 ;
+6 SET BPST0=$GET(^BPSTL(BP57,0))
SET PC=$PIECE(BPST0,U,4)
SET PF=$PIECE(BPST0,U,9)
+7 SET BPST4=$GET(^BPSTL(BP57,4))
SET PR=$PIECE(BPST4,U,1)
+8 ;This is a reversal
IF PR]""
SET PC=PR
+9 IF PC=""!(PF="")
QUIT $$FORMAT^BPSSCRU2("",12," ",1)
+10 SET X=$PIECE($GET(^BPSC(PC,400,PF,400)),U,2)
+11 IF X=""
QUIT $$FORMAT^BPSSCRU2(X,12," ",1)
+12 QUIT $EXTRACT(X,3,14)
+13 ;
GETRXFCI(BPSDIV,BPRX,BPREF,BPSCOB) ; Get general RXFC info
+1 ; Returns: paid amount ^ total transactions ^ IEN of 57 ^ transaction
+2 ; type of last matching BP57 found
+3 ;
+4 NEW BPRETVAL,BP57,BPSPAMT,BPSTOTTN,BPSEC,BPSTRTYP
+5 ;
+6 SET BPRETVAL="0^0^0^"
SET (BP57,BPSPAMT,BPSTOTTN)=0
SET (BPSEC,BPSTRTYP)=""
+7 FOR
SET BP57=$ORDER(^BPSTL("AEC",BPRX,BP57))
if 'BP57
QUIT
Begin DoDot:1
+8 if BPSDIV'=$PIECE($GET(^BPS(9002313.56,+$PIECE($GET(^BPSTL(BP57,1)),U,7),0)),U)
QUIT
+9 if BPREF'=+$PIECE($GET(^BPSTL(BP57,1)),U)
QUIT
+10 if BPSCOB'=$PIECE($GET(^BPSTL(BP57,0)),U,14)
QUIT
+11 if $PIECE($GET(^BPSTL(BP57,0)),U,15)="E"
QUIT
+12 IF '$FIND(".BB.ERES.ERWV.ERNB.EREV.P2.P2S.","."_$PIECE($GET(^BPSTL(BP57,12)),U,1)_".")
QUIT
+13 if $PIECE($GET(^BPSTL(BP57,0)),U,8)=""
QUIT
+14 SET BPSEC=$PIECE($GET(^BPSTL(BP57,9)),U,4)
+15 if BPSEC=""
QUIT
+16 IF BPELIG=1
IF '$DATA(BPELIG(BPSEC))
QUIT
+17 SET BPSPAMT=$$TOTAMNT^BPSSCRLG(+$PIECE($GET(^BPSTL(BP57,0)),U,5))
+18 SET BPSTOTTN=BPSTOTTN+1
+19 SET BPSTRTYP=$PIECE($GET(^BPSTL(BP57,0)),U,15)
+20 SET BPRETVAL=BPSPAMT_"^"_BPSTOTTN_"^"_BP57_"^"_BPSTRTYP
End DoDot:1
+21 QUIT BPRETVAL
+22 ;
SORT ; Sort report based on divison or user
+1 NEW BPSRXFC,BPSDIV,BPSUSER,DATA,S1,S2,S3
+2 ;
+3 SET BPSRXFC=""
+4 FOR
SET BPSRXFC=$ORDER(@BPGLTMP@("DATA",BPSRXFC))
if BPSRXFC=""
QUIT
Begin DoDot:1
+5 SET BPSDIV=""
+6 FOR
SET BPSDIV=$ORDER(@BPGLTMP@("DATA",BPSRXFC,BPSDIV))
if BPSDIV=""
QUIT
Begin DoDot:2
+7 SET BPSUSER=""
+8 FOR
SET BPSUSER=$ORDER(@BPGLTMP@("DATA",BPSRXFC,BPSDIV,BPSUSER))
if BPSUSER=""
QUIT
Begin DoDot:3
+9 SET DATA=@BPGLTMP@("DATA",BPSRXFC,BPSDIV,BPSUSER)
+10 SET S1=$SELECT(BPSSORD=1:$PIECE(DATA,"^",10),1:$PIECE(DATA,"^",9))
+11 SET S2=$PIECE(DATA,"^",11)
+12 SET S3=BPSRXFC
+13 SET @BPGLTMP@("SORT",S1,S2,S3)=DATA
End DoDot:3
End DoDot:2
End DoDot:1
+14 QUIT
+15 ;