BPSRPT2 ;BHAM ISC/BEE - ECME REPORTS ;14-FEB-05
;;1.0;E CLAIMS MGMT ENGINE;**1,3,5,28**;JUN 2004;Build 22
;;Per VA Directive 6402, this routine should not be modified.
;
Q
;
;Save One Report Entry
;
; Input variables -> See BPSRPT0 for description
; BPTMPGL,BPDFN,BPRX,BPREF,BP59,BPENDDT,BPPHARM,BPSUMDET,BPGRPLAN,BPRLDT,BPPAYBL,BPREJFL,BPRXDRG
;
SETTMP(BPTMPGL,BPDFN,BPRX,BPREF,BP59,BPBEGDT,BPENDDT,BPPHARM,BPSUMDET,BPGRPLAN,BPRLDT,BPPAYBL,BPREJFL,BPRXDRG,BPSTATUS,BPDUPST,BPDUPPAY) ;
N BPCLSDT,BPDATA,BPDIV,BPFILDT,BPISSDT,BPSMSG,BPSREJ,BPREST,BPSRWR,BPTDTTM,BPTRDT
;
;Check for bad data
I BPREF,$$IFREFILL^BPSRPT6(BPRX,BPREF)=0 G EXIT
;
;Retrieve Close Date
S BPCLSDT=$P($$CLOSEDT(BP59),".")
;
;If NO refills
I BPREF=0 D
. S BPFILDT=$$RXFILDT^BPSRPT6(BPRX)
. S BPISSDT=$$RXISSDT^BPSRPT6(BPRX)
;
;If Refills
I BPREF>0 D
. S BPFILDT=$$REFFILDT^BPSRPT6(BPRX,BPREF)
. S BPISSDT=$$REFISSDT^BPSRPT6(BPRX,BPREF)
;
;Get Transaction Date/Transaction Date and Time
S BPTRDT=$$TRANDT(BP59,0)
S BPTDTTM=$$TRANDT(BP59,1)
;
;Get Result, Message, Reject Information, and BPS Pharmacy
S BPREST=$$RESULT(BP59,.BPSRWR)
S BPSMSG=$$MSG(BPSRWR,.BPSMSG,BP59)
S BPSREJ=$S(BPREJFL=0:"",1:$$REJECT(BPREST,.BPSREJ,BP59))
S BPDIV=+$P($G(^BPST(BP59,1)),"^",7)
;
;Set up data node
S BPDATA=BPRLDT_U_BPTRDT_U_BP59_U_BPRX_U_BPREF_U_BPREST_U_BPSTATUS_U_BPFILDT_U_BPISSDT_U_U_U
S BPDATA=BPDATA_BPPAYBL_U_BPREJFL_U_BPRXDRG_U_BPSRWR_U_BPDUPST_U_BPDUPPAY
;
;For Totals by Date - No Insurance Sort
I BPRTYPE=6 S BPGRPLAN="~"
;
;Sort by transaction date
I BPRTYPE'=7 D:$$CHKDT(+$G(BPTRDT),BPBEGDT,BPENDDT)
. ;
. ;For Recent Transactions tack on Txn date and Time to Ins
. I BPRTYPE=5 S BPGRPLAN=-BPTDTTM_"^"_BPGRPLAN
. S @BPTMPGL@(BPDIV,BPGRPLAN,BPDFN,BPTRDT,BPRX,BPREF)=BPDATA
;
;Sort by close date
I BPRTYPE=7 D:$$CHKDT(+$G(BPCLSDT),BPBEGDT,BPENDDT)
. S @BPTMPGL@(BPDIV,BPGRPLAN,BPDFN,BPCLSDT,BPRX,BPREF)=BPDATA
;
EXIT Q
;
;Get Transaction date and Time
;
; Input Variables -> BP59 - ptr to BPS TRANSACTION
; TIME - 1 - Return DT.TM, 0 - DT
; Returned Value -> Transaction or Transaction Date.Time
;
TRANDT(BP59,TIME) N X
S X=$P($G(^BPST(BP59,0)),U,8)
Q $S(TIME=0:X\1,1:X)
;
;Determine the Claim Close Date
;
; Input Variable -> BP59 = ptr to BPS TRANSACTIONS
; Returned Value -> CL = Claim Close Date and Time
;
CLOSEDT(BP59) N CL,BP02
S BP02=+$P($G(^BPST(BP59,0)),U,4)
S CL=+$P($G(^BPSC(BP02,900)),U,2)
Q CL
;
;Get Result
;
RESULT(BP59,RWR) N X
I BP59 S RWR=$$CATEG^BPSOSUC(BP59)
E S RWR=""
I RWR?1"E ".E D
. S X=RWR
. I X="E PAYABLE" S X=4
. E I X="E CAPTURED" S X=3
. E I X="E DUPLICATE" S X=2
. E I X="E REJECTED" S X=1
. E I X="E REVERSAL ACCEPTED" S X=11
. E I X="E REVERSAL REJECTED" S X=12
. E S X=0
E I RWR="PAPER" S X=9
E I RWR="PAPER REVERSAL" S X=19
E S X=15
Q X
;
;Message
;
MSG(RWR,MSGTEXT,BP59) N BPRET
S BPRET=0
; If the claim has any message text, store it
I RWR?1"E ".E D
. S X=$$MESSAG59(BP59,1)
. I X]"" S MSGTEXT(1)=X
. S X=$$MESSAG59(BP59,2)
. I X]"" S MSGTEXT(2)=X
. I $D(MSGTEXT) S MSGTEXT="MSGTEXT"
. S BPRET=1
Q BPRET
;
;Reject Text
;
; Output Variable -> BPSRTEXT,BPRET
;
REJECT(RWR,BPSRTEXT,BP59) N BPRET,BPSRESP,BPSECME,BPSPOS
S BPRET=0
; If it's a rejected claim, build the rejection text
I RWR="E REJECTED"!(RWR="E REVERSAL REJECTED") D
. D RESP59(BP59,.BPSRESP,.BPSECME) ; set BPSRESP,BPSECME pointers
. D REJTEXT^BPSOS03(BPSRESP,BPSPOS,.BPSRTEXT)
. ; word processing text goes into FDA(FILE,IENS,FIELD,n)=text
. S BPSRTEXT=$S($D(BPSRTEXT):"REJTEXT",1:"")
. S:$D(BPSRTEXT) BPRET=1
Q BPRET
;
;Messages
;
MESSAG59(BP59,N) N MSG,BPSRESP,BPSPOS
I 'BP59 S MSG="" G XMSG59
D RESP59(59,.BPSRESP,.BPSPOS) I 'BPSRESP!'BPSPOS S MSG="" G XMSG59
I '$D(N) S N=0
I N=1 S MSG=$$MESSAGE^BPSOS03(BPSRESP,BPSPOS,1) I 1
I N=2 S MSG=$$MESSAGE^BPSOS03(BPSRESP,BPSPOS,2) I 1
E S MSG=$$MESSAGE^BPSOS03(BPSRESP,BPSPOS)
XMSG59 Q MSG
;
;Responds
RESP59(BP59,BPSRESP,BPSPOS) ;EP - caller should N BPSRESP,BPSPOS
;Input: BP59
;Output:
; BPSRESP,BPSPOS by reference
I $G(^BPST(BP59,4)) D ; reversal
. S BPSRESP=$P($G(^BPST(BP59,4)),U,2)
. S BPSPOS=1
E D
. S BPSRESP=$P($G(^BPST(BP59,0)),U,5)
. S BPSPOS=$P($G(^BPST(BP59,0)),U,9)
Q
;
;Check and compare dates
CHKDT(BPTSTDT,BPBEGDT,BPENDDT) ;
I BPTSTDT=0 Q 0
I BPTSTDT'<BPBEGDT,BPTSTDT'>BPENDDT Q 1
Q 0
;
;Populate passed in Array
;
REJTEXT(BP59,ARR) N BBX,BPSRESP,BPSPOS,A,I,X,R
S BBX=$G(^BPST(BP59,0))
S BPSRESP=$P(BBX,U,5)
S BPSPOS=$P(BBX,U,9)
S (A,I)=0
I BPSRESP&BPSPOS D
. K ARR
. F S A=$O(^BPSR(BPSRESP,1000,BPSPOS,511,A)) Q:'A D
. . S R=$P(^BPSR(BPSRESP,1000,BPSPOS,511,A,0),U)
. . Q:R=""
. . N S S S=$O(^BPSF(9002313.93,"B",R,0))
. . I S S X=$TR($G(^BPSF(9002313.93,S,0)),U,":")
. . E S X=R_" unrecognized reject code"
. . S I=I+1,ARR(I)=X
. . K S
Q I
;
;Get Claim ID
CLAIMID(BP59) N BP02
S BP02=+$P($G(^BPST(BP59,0)),U,4)
Q $P($G(^BPSC(BP02,0)),U)
;
;Determine $Ins Paid
;
INSPAID(BP59) N X,RESP,POSITION
S X=$G(^BPST(BP59,0))
S RESP=$P(X,U,5)
S POSITION=$P(X,U,9)
Q $S(RESP&POSITION:$$INSPAID1^BPSOS03(RESP,POSITION),1:0)
;
;Get the Cardholder ID
CRDHLDID(BP59) N BP02
S BP02=+$P($G(^BPST(BP59,0)),U,4)
Q $P($G(^BPSC(BP02,300)),U,2)
;
GRPID(BP59) ;sent by IB in RX^IBNCPDP
N BP02
S BP02=+$P($G(^BPST(BP59,0)),U,4)
Q $P($G(^BPSC(BP02,300)),U)
;
;Get the PATIENT PAY AMOUNT (#505) from file #9002313.0301
;
;Input: BPSRESP -BPS RESPONSE file IEN
; BPSPOS - POSITION IN CLAIM (#14) in file #9002313.59
;Output: BPPPAMT - PATIENT PAY AMOUNT
;
GETPPAY(BPSRESP,BPSPOS) ;
N BPPPAMT
;(#505) PATIENT PAY AMOUNT
S BPPPAMT=$$GET1^DIQ(9002313.0301,BPSPOS_","_BPSRESP_",",505,"I")
; Convert a Signed Numeric Field to a Decimal Value
; '000021G' will be converted to '2.17' and Nulls will be converted to '0.00'
S BPPPAMT=$$DFF2EXT^BPSECFM(BPPPAMT)
Q BPPPAMT
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HBPSRPT2 6125 printed Sep 02, 2024@18:38:02 Page 2
BPSRPT2 ;BHAM ISC/BEE - ECME REPORTS ;14-FEB-05
+1 ;;1.0;E CLAIMS MGMT ENGINE;**1,3,5,28**;JUN 2004;Build 22
+2 ;;Per VA Directive 6402, this routine should not be modified.
+3 ;
+4 QUIT
+5 ;
+6 ;Save One Report Entry
+7 ;
+8 ; Input variables -> See BPSRPT0 for description
+9 ; BPTMPGL,BPDFN,BPRX,BPREF,BP59,BPENDDT,BPPHARM,BPSUMDET,BPGRPLAN,BPRLDT,BPPAYBL,BPREJFL,BPRXDRG
+10 ;
SETTMP(BPTMPGL,BPDFN,BPRX,BPREF,BP59,BPBEGDT,BPENDDT,BPPHARM,BPSUMDET,BPGRPLAN,BPRLDT,BPPAYBL,BPREJFL,BPRXDRG,BPSTATUS,BPDUPST,BPDUPPAY) ;
+1 NEW BPCLSDT,BPDATA,BPDIV,BPFILDT,BPISSDT,BPSMSG,BPSREJ,BPREST,BPSRWR,BPTDTTM,BPTRDT
+2 ;
+3 ;Check for bad data
+4 IF BPREF
IF $$IFREFILL^BPSRPT6(BPRX,BPREF)=0
GOTO EXIT
+5 ;
+6 ;Retrieve Close Date
+7 SET BPCLSDT=$PIECE($$CLOSEDT(BP59),".")
+8 ;
+9 ;If NO refills
+10 IF BPREF=0
Begin DoDot:1
+11 SET BPFILDT=$$RXFILDT^BPSRPT6(BPRX)
+12 SET BPISSDT=$$RXISSDT^BPSRPT6(BPRX)
End DoDot:1
+13 ;
+14 ;If Refills
+15 IF BPREF>0
Begin DoDot:1
+16 SET BPFILDT=$$REFFILDT^BPSRPT6(BPRX,BPREF)
+17 SET BPISSDT=$$REFISSDT^BPSRPT6(BPRX,BPREF)
End DoDot:1
+18 ;
+19 ;Get Transaction Date/Transaction Date and Time
+20 SET BPTRDT=$$TRANDT(BP59,0)
+21 SET BPTDTTM=$$TRANDT(BP59,1)
+22 ;
+23 ;Get Result, Message, Reject Information, and BPS Pharmacy
+24 SET BPREST=$$RESULT(BP59,.BPSRWR)
+25 SET BPSMSG=$$MSG(BPSRWR,.BPSMSG,BP59)
+26 SET BPSREJ=$SELECT(BPREJFL=0:"",1:$$REJECT(BPREST,.BPSREJ,BP59))
+27 SET BPDIV=+$PIECE($GET(^BPST(BP59,1)),"^",7)
+28 ;
+29 ;Set up data node
+30 SET BPDATA=BPRLDT_U_BPTRDT_U_BP59_U_BPRX_U_BPREF_U_BPREST_U_BPSTATUS_U_BPFILDT_U_BPISSDT_U_U_U
+31 SET BPDATA=BPDATA_BPPAYBL_U_BPREJFL_U_BPRXDRG_U_BPSRWR_U_BPDUPST_U_BPDUPPAY
+32 ;
+33 ;For Totals by Date - No Insurance Sort
+34 IF BPRTYPE=6
SET BPGRPLAN="~"
+35 ;
+36 ;Sort by transaction date
+37 IF BPRTYPE'=7
if $$CHKDT(+$GET(BPTRDT),BPBEGDT,BPENDDT)
Begin DoDot:1
+38 ;
+39 ;For Recent Transactions tack on Txn date and Time to Ins
+40 IF BPRTYPE=5
SET BPGRPLAN=-BPTDTTM_"^"_BPGRPLAN
+41 SET @BPTMPGL@(BPDIV,BPGRPLAN,BPDFN,BPTRDT,BPRX,BPREF)=BPDATA
End DoDot:1
+42 ;
+43 ;Sort by close date
+44 IF BPRTYPE=7
if $$CHKDT(+$GET(BPCLSDT),BPBEGDT,BPENDDT)
Begin DoDot:1
+45 SET @BPTMPGL@(BPDIV,BPGRPLAN,BPDFN,BPCLSDT,BPRX,BPREF)=BPDATA
End DoDot:1
+46 ;
EXIT QUIT
+1 ;
+2 ;Get Transaction date and Time
+3 ;
+4 ; Input Variables -> BP59 - ptr to BPS TRANSACTION
+5 ; TIME - 1 - Return DT.TM, 0 - DT
+6 ; Returned Value -> Transaction or Transaction Date.Time
+7 ;
TRANDT(BP59,TIME) NEW X
+1 SET X=$PIECE($GET(^BPST(BP59,0)),U,8)
+2 QUIT $SELECT(TIME=0:X\1,1:X)
+3 ;
+4 ;Determine the Claim Close Date
+5 ;
+6 ; Input Variable -> BP59 = ptr to BPS TRANSACTIONS
+7 ; Returned Value -> CL = Claim Close Date and Time
+8 ;
CLOSEDT(BP59) NEW CL,BP02
+1 SET BP02=+$PIECE($GET(^BPST(BP59,0)),U,4)
+2 SET CL=+$PIECE($GET(^BPSC(BP02,900)),U,2)
+3 QUIT CL
+4 ;
+5 ;Get Result
+6 ;
RESULT(BP59,RWR) NEW X
+1 IF BP59
SET RWR=$$CATEG^BPSOSUC(BP59)
+2 IF '$TEST
SET RWR=""
+3 IF RWR?1"E ".E
Begin DoDot:1
+4 SET X=RWR
+5 IF X="E PAYABLE"
SET X=4
+6 IF '$TEST
IF X="E CAPTURED"
SET X=3
+7 IF '$TEST
IF X="E DUPLICATE"
SET X=2
+8 IF '$TEST
IF X="E REJECTED"
SET X=1
+9 IF '$TEST
IF X="E REVERSAL ACCEPTED"
SET X=11
+10 IF '$TEST
IF X="E REVERSAL REJECTED"
SET X=12
+11 IF '$TEST
SET X=0
End DoDot:1
+12 IF '$TEST
IF RWR="PAPER"
SET X=9
+13 IF '$TEST
IF RWR="PAPER REVERSAL"
SET X=19
+14 IF '$TEST
SET X=15
+15 QUIT X
+16 ;
+17 ;Message
+18 ;
MSG(RWR,MSGTEXT,BP59) NEW BPRET
+1 SET BPRET=0
+2 ; If the claim has any message text, store it
+3 IF RWR?1"E ".E
Begin DoDot:1
+4 SET X=$$MESSAG59(BP59,1)
+5 IF X]""
SET MSGTEXT(1)=X
+6 SET X=$$MESSAG59(BP59,2)
+7 IF X]""
SET MSGTEXT(2)=X
+8 IF $DATA(MSGTEXT)
SET MSGTEXT="MSGTEXT"
+9 SET BPRET=1
End DoDot:1
+10 QUIT BPRET
+11 ;
+12 ;Reject Text
+13 ;
+14 ; Output Variable -> BPSRTEXT,BPRET
+15 ;
REJECT(RWR,BPSRTEXT,BP59) NEW BPRET,BPSRESP,BPSECME,BPSPOS
+1 SET BPRET=0
+2 ; If it's a rejected claim, build the rejection text
+3 IF RWR="E REJECTED"!(RWR="E REVERSAL REJECTED")
Begin DoDot:1
+4 ; set BPSRESP,BPSECME pointers
DO RESP59(BP59,.BPSRESP,.BPSECME)
+5 DO REJTEXT^BPSOS03(BPSRESP,BPSPOS,.BPSRTEXT)
+6 ; word processing text goes into FDA(FILE,IENS,FIELD,n)=text
+7 SET BPSRTEXT=$SELECT($DATA(BPSRTEXT):"REJTEXT",1:"")
+8 if $DATA(BPSRTEXT)
SET BPRET=1
End DoDot:1
+9 QUIT BPRET
+10 ;
+11 ;Messages
+12 ;
MESSAG59(BP59,N) NEW MSG,BPSRESP,BPSPOS
+1 IF 'BP59
SET MSG=""
GOTO XMSG59
+2 DO RESP59(59,.BPSRESP,.BPSPOS)
IF 'BPSRESP!'BPSPOS
SET MSG=""
GOTO XMSG59
+3 IF '$DATA(N)
SET N=0
+4 IF N=1
SET MSG=$$MESSAGE^BPSOS03(BPSRESP,BPSPOS,1)
IF 1
+5 IF N=2
SET MSG=$$MESSAGE^BPSOS03(BPSRESP,BPSPOS,2)
IF 1
+6 IF '$TEST
SET MSG=$$MESSAGE^BPSOS03(BPSRESP,BPSPOS)
XMSG59 QUIT MSG
+1 ;
+2 ;Responds
RESP59(BP59,BPSRESP,BPSPOS) ;EP - caller should N BPSRESP,BPSPOS
+1 ;Input: BP59
+2 ;Output:
+3 ; BPSRESP,BPSPOS by reference
+4 ; reversal
IF $GET(^BPST(BP59,4))
Begin DoDot:1
+5 SET BPSRESP=$PIECE($GET(^BPST(BP59,4)),U,2)
+6 SET BPSPOS=1
End DoDot:1
+7 IF '$TEST
Begin DoDot:1
+8 SET BPSRESP=$PIECE($GET(^BPST(BP59,0)),U,5)
+9 SET BPSPOS=$PIECE($GET(^BPST(BP59,0)),U,9)
End DoDot:1
+10 QUIT
+11 ;
+12 ;Check and compare dates
CHKDT(BPTSTDT,BPBEGDT,BPENDDT) ;
+1 IF BPTSTDT=0
QUIT 0
+2 IF BPTSTDT'<BPBEGDT
IF BPTSTDT'>BPENDDT
QUIT 1
+3 QUIT 0
+4 ;
+5 ;Populate passed in Array
+6 ;
REJTEXT(BP59,ARR) NEW BBX,BPSRESP,BPSPOS,A,I,X,R
+1 SET BBX=$GET(^BPST(BP59,0))
+2 SET BPSRESP=$PIECE(BBX,U,5)
+3 SET BPSPOS=$PIECE(BBX,U,9)
+4 SET (A,I)=0
+5 IF BPSRESP&BPSPOS
Begin DoDot:1
+6 KILL ARR
+7 FOR
SET A=$ORDER(^BPSR(BPSRESP,1000,BPSPOS,511,A))
if 'A
QUIT
Begin DoDot:2
+8 SET R=$PIECE(^BPSR(BPSRESP,1000,BPSPOS,511,A,0),U)
+9 if R=""
QUIT
+10 NEW S
SET S=$ORDER(^BPSF(9002313.93,"B",R,0))
+11 IF S
SET X=$TRANSLATE($GET(^BPSF(9002313.93,S,0)),U,":")
+12 IF '$TEST
SET X=R_" unrecognized reject code"
+13 SET I=I+1
SET ARR(I)=X
+14 KILL S
End DoDot:2
End DoDot:1
+15 QUIT I
+16 ;
+17 ;Get Claim ID
CLAIMID(BP59) NEW BP02
+1 SET BP02=+$PIECE($GET(^BPST(BP59,0)),U,4)
+2 QUIT $PIECE($GET(^BPSC(BP02,0)),U)
+3 ;
+4 ;Determine $Ins Paid
+5 ;
INSPAID(BP59) NEW X,RESP,POSITION
+1 SET X=$GET(^BPST(BP59,0))
+2 SET RESP=$PIECE(X,U,5)
+3 SET POSITION=$PIECE(X,U,9)
+4 QUIT $SELECT(RESP&POSITION:$$INSPAID1^BPSOS03(RESP,POSITION),1:0)
+5 ;
+6 ;Get the Cardholder ID
CRDHLDID(BP59) NEW BP02
+1 SET BP02=+$PIECE($GET(^BPST(BP59,0)),U,4)
+2 QUIT $PIECE($GET(^BPSC(BP02,300)),U,2)
+3 ;
GRPID(BP59) ;sent by IB in RX^IBNCPDP
+1 NEW BP02
+2 SET BP02=+$PIECE($GET(^BPST(BP59,0)),U,4)
+3 QUIT $PIECE($GET(^BPSC(BP02,300)),U)
+4 ;
+5 ;Get the PATIENT PAY AMOUNT (#505) from file #9002313.0301
+6 ;
+7 ;Input: BPSRESP -BPS RESPONSE file IEN
+8 ; BPSPOS - POSITION IN CLAIM (#14) in file #9002313.59
+9 ;Output: BPPPAMT - PATIENT PAY AMOUNT
+10 ;
GETPPAY(BPSRESP,BPSPOS) ;
+1 NEW BPPPAMT
+2 ;(#505) PATIENT PAY AMOUNT
+3 SET BPPPAMT=$$GET1^DIQ(9002313.0301,BPSPOS_","_BPSRESP_",",505,"I")
+4 ; Convert a Signed Numeric Field to a Decimal Value
+5 ; '000021G' will be converted to '2.17' and Nulls will be converted to '0.00'
+6 SET BPPPAMT=$$DFF2EXT^BPSECFM(BPPPAMT)
+7 QUIT BPPPAMT