Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: BPSBCKJ

BPSBCKJ.m

Go to the documentation of this file.
  1. BPSBCKJ ;BHAM ISC/AAT - BPS NIGHTLY BACKGROUND JOB ;02/27/2005
  1. ;;1.0;E CLAIMS MGMT ENGINE;**1,2,5,7,8,22**;JUN 2004;Build 28
  1. ;;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. Q
  1. ;
  1. EN ; The ECME NIGHTLY PROCESS
  1. ;
  1. ; The list of nightly actions
  1. D AUTOREV ; Auto-Reversals (normal and inpatient)
  1. D MAIN^BPSOSK ; Purge BPS LOG
  1. D TASKMAN^BPSJAREG ; Do automatic registration.
  1. Q
  1. ;
  1. AUTOREV ; The Auto-Reverse Procedure
  1. N BDT,BTRAN,BPHARM,BTRAN0,BTRAN1,BTRAN4,BDAYS,BRX,BFIL,BDATE,BNOW,BCLAIM,BRES,BREV,BTEST,REF,BCNT,BTX,X,X1,X2
  1. N BTRAN9,BELIG,BDRUG
  1. ;
  1. S BTEST=0 ; Debugging flag 1 - TEST, 0 - LIVE
  1. S BCNT=0 ; Count reversals
  1. ;
  1. S REF=$NA(^TMP($J,"BPSBCKJ")) K @REF
  1. ;
  1. S (X1,BNOW)=$$DT^XLFDT()
  1. ;
  1. ;Define number of days to look back - Auto Reverse days can be from 0-31
  1. ;To make sure every claim is caught, moving back 45 days
  1. S X2=-45 D C^%DTC S BDT=X
  1. ;
  1. ;Loop through 'LAST UPDATE' 'AH' index
  1. F S BDT=$O(^BPST("AH",BDT)) Q:'BDT S BTRAN=0 F S BTRAN=$O(^BPST("AH",BDT,BTRAN)) Q:'BTRAN D
  1. . W:BTEST !,"TRAN=",BTRAN," ",?20
  1. . S BTRAN0=$G(^BPST(BTRAN,0)),BTRAN1=$G(^(1)),BTRAN4=$G(^(4)),BTRAN9=$G(^(9))
  1. . I BTRAN0=""!(BTRAN1="") W:BTEST "ZERO OR ONE NODE MISSING" Q
  1. . I '$$PAID^BPSOSQ4(BTRAN) W:BTEST "NOT PAID" Q ; Not paid
  1. . S BPHARM=$P(BTRAN1,U,7) I 'BPHARM W:BTEST "NO BPS PHARM" Q ; BPS PHARMACY
  1. . W:BTEST "BPHARM=",$P($G(^BPS(9002313.56,BPHARM,0)),U,1)," "
  1. . ;
  1. . ;Handle 'Inpatient' Auto-Reversals
  1. . S BREV=$$REVINP(BNOW,BTRAN,BTRAN0,BTRAN1,BPHARM,BTRAN9) Q:BREV
  1. . ;
  1. . ;Handle Regular Auto-Reversals
  1. . S BDAYS=+$P($G(^BPS(9002313.56,BPHARM,0)),U,9)
  1. . I 'BDAYS W:BTEST "AUTO-REV DISABLED" Q ;disabled
  1. . I $P(BTRAN4,U,1) Q ;Reversal claim exist
  1. . S BCLAIM=$P(BTRAN0,U,4) I 'BCLAIM W:BTEST "NO BCLAIM" Q
  1. . I $P($G(^BPSC(BCLAIM,0)),U,7) W:BTEST "AUTO-REVERSE FLAG" Q
  1. . S BDATE=$P($G(^BPSC(BCLAIM,0)),U,5)
  1. . I 'BDATE S BDATE=$P($G(^BPSC(BCLAIM,0)),U,6)
  1. . S BDATE=$P(BDATE,".")
  1. . I 'BDATE="" W:BTEST "NO DATE" Q
  1. . W:BTEST "DATE=",BDATE," "
  1. . I $$FMDIFF^XLFDT(BNOW,BDATE,1)'>BDAYS W:BTEST "TOO EARLY" Q
  1. . S BRX=$P(BTRAN1,U,11) I 'BRX W:BTEST "NO RX" Q
  1. . S BFIL=$P(BTRAN1,U,1)
  1. . I $$RELDATE(BRX,BFIL) W:BTEST " RELEASED" Q ;released
  1. . S BELIG=$P(BTRAN9,U,4) I BELIG="" W:BTEST "NO ELIGIBILITY" Q
  1. . S BDRUG=$$RXAPI1^BPSUTIL1(BRX,6,"E") I BDRUG="" W:BTEST "NO DRUG" Q
  1. . S BRES=$$REVERSE(BRX,BFIL,BCLAIM,1)
  1. . W:BTEST " *REV CLM=",BCLAIM," STAT=",BRES
  1. . I BRES=0!(BRES=4) D
  1. .. S (BCNT,@REF@(BRES))=$G(@REF@(BRES))+1
  1. .. S @REF@(BRES,BCNT)=BTRAN_U_BCLAIM_U_BRX_U_BFIL_U_BPHARM_U_BELIG_U_BDRUG
  1. . ; Any notifications to IB?
  1. D BULL(REF) ; Send the bulletin
  1. K @REF
  1. Q
  1. ;
  1. ;Auto-Reverse Claims for Current Inpatients
  1. ;
  1. ;20050810;BEE;Phase III - CR11
  1. ;
  1. REVINP(BNOW,BTRAN,BTRAN0,BTRAN1,BPHARM,BTRAN9) ;
  1. N BRX,BFIL,BCLAIM,BDATE,BDRUG,BELIG,BRES,DFN,VAIP
  1. ;
  1. ;Only process Window fills
  1. S BRX=+$P(BTRAN1,U,11) I BRX=0 Q 0
  1. S BFIL=+$P(BTRAN1,U)
  1. I $$MWC^BPSRPT6(BRX,BFIL)'="W" Q 0
  1. ;
  1. ;Check for Fill date - Must be equal to T-5
  1. S BCLAIM=$P(BTRAN0,U,4) I 'BCLAIM Q 0
  1. S BDATE=$$FILDATE(BRX,BFIL)
  1. S BDATE=$P(BDATE,".")
  1. I 'BDATE="" Q 0
  1. I $$FMDIFF^XLFDT(BNOW,BDATE,1)'=5 Q 0
  1. ;
  1. ;Check for current Inpatient
  1. S DFN=+$P(BTRAN0,U,6) I DFN=0 Q 0
  1. D IN5^VADPT
  1. I $G(VAIP(3))="" Q 0
  1. ;
  1. S BELIG=$P(BTRAN9,U,4)
  1. S BDRUG=$$RXAPI1^BPSUTIL1(BRX,6,"E")
  1. ;
  1. ;Auto-Reverse Claim
  1. S BRES=$$REVERSE(BRX,BFIL,BCLAIM,2)
  1. W:BTEST " *REV CLM=",BCLAIM," STAT=",BRES
  1. I BRES=0!(BRES=4) D
  1. . S (BCNT,@REF@(BRES))=$G(@REF@(BRES))+1
  1. . S @REF@(BRES,BCNT)=BTRAN_U_BCLAIM_U_BRX_U_BFIL_U_BPHARM_U_BELIG_U_BDRUG
  1. Q 1
  1. ;
  1. RELDATE(BRX,BFIL) ;Get the Released Date
  1. I BFIL Q $$RXSUBF1^BPSUTIL1(BRX,52,52.1,+BFIL,17,"I")
  1. Q $$RXAPI1^BPSUTIL1(BRX,31,"I")
  1. ;
  1. FILDATE(BRX,BFIL) ;Get the Fill Date
  1. I BFIL Q $$RXSUBF1^BPSUTIL1(BRX,52,52.1,+BFIL,.01,"I")
  1. Q $$RXAPI1^BPSUTIL1(BRX,22,"I")
  1. ;
  1. REVERSE(BRX,BFIL,BCLAIM,BTYPE) ;Auto-Reverse the claim
  1. ;PUBLIC BTEST
  1. N BDOS,BRES,BDAT,BMES,BRSN,BPSCOB,BP59
  1. I $G(BTEST) Q 0 ; Test mode
  1. ;
  1. ; Get Date of Service and set reversal reason
  1. S BDOS=$$DOSDATE^BPSSCRRS(BRX,BFIL)
  1. S BRSN=$S(BTYPE=2:"CURRENT INPATIENT",1:"PRESCRIPTION NOT RELEASED")
  1. ;
  1. S BP59=$$CLAIM59^BPSUTIL2(BCLAIM) ;get the BPS TRANSACTION IEN for the claim
  1. S BPSCOB=$$COB59^BPSUTIL2(BP59) ;get COB for the BPS TRANSACTION IEN
  1. ;
  1. ; Call ECME to process reversal
  1. S BRES=$$EN^BPSNCPDP(BRX,BFIL,BDOS,"AREV","",BRSN,"",,,,BPSCOB)
  1. ;
  1. ; If successful, log message to the Prescription Activity Log
  1. ; and set the auto-reversal flag
  1. S BRES=+BRES,BMES="ECME: AUTO REVERSAL JOB-"_$S(BPSCOB=1:"p",BPSCOB=2:"s",1:"")_$$INSNAME^BPSSCRU6(BP59)
  1. I BRES=0 D
  1. . D ECMEACT^PSOBPSU1(BRX,BFIL,BMES,.5)
  1. . S BDAT(9002313.02,BCLAIM_",",.07)=BTYPE D FILE^DIE("","BDAT")
  1. Q BRES
  1. ;
  1. ;
  1. BULL(REF) ;Bulletin to the OPECC
  1. ;PUBLIC BTEST,DUZ,DT
  1. N XMSUB,XMY,XMTEXT,XMDUZ,BLNUM
  1. ;
  1. I BCNT<1,'$G(BTEST),(+$G(@REF@(4)))=0 Q
  1. S BLNUM=0,BCNT=+$G(@REF@(0))
  1. S XMSUB="ECME AUTO-REVERSAL PROCESS"
  1. I $G(BTEST) D T("*** P L E A S E D I S R E G A R D T H I S E M A I L ***"),T(),T("NOT ACTUALLY REVERSED - THIS IS A TEST"),T()
  1. D T("The ECME Nightly Process submitted auto-reversals for the following e-Pharmacy")
  1. D T("prescriptions.")
  1. D T()
  1. D T("TOTAL CLAIMS SUBMITTED FOR AUTO-REVERSALS: "_BCNT)
  1. D T()
  1. D T("Claims Submitted for Auto-Reversals on "_$$DAT(DT)_":") D ARLIST(0,REF)
  1. D T()
  1. S BCNT=+$G(@REF@(4))
  1. I BCNT'=0 D
  1. . D T()
  1. . D T("The ECME Nightly Process attempted to auto-reverse the following claims but")
  1. . D T("could not because the previous request was IN PROGRESS. Please verify that")
  1. . D T("the previous request is not stranded.")
  1. . D T()
  1. . D T("Total number of claims that could not be auto-reversed: "_BCNT)
  1. . D T()
  1. . D T("Claims not auto-reversed on "_$$DAT(DT)_":")
  1. . D ARLIST(4,REF)
  1. . D T()
  1. ;
  1. S XMDUZ="BPS PACKAGE",XMTEXT="BTX("
  1. S XMY("G.BPS OPECC")=""
  1. I $G(DUZ)'<1 S XMY(DUZ)=""
  1. D ^XMD
  1. Q
  1. ;
  1. T(BTXT) ; Add text to the message
  1. ;PUBLIC BLNUM,BTEST
  1. S BLNUM=BLNUM+1,BTX(BLNUM)=$G(BTXT," ")
  1. I $G(BTEST) W !,$G(BTXT)
  1. Q
  1. ;
  1. ARLIST(BRES,REF) ;Auto-Rev List
  1. N I,TXT,BCLAIM,BTRAN,Y,BRX,BFIL,BFDATE,BPHARM,BRXN,BPHARMN,BPAT,BPSTAT,BELIG,BDRUG
  1. D T()
  1. D T(" # RX/FILL STATUS DATE ELIG PATIENT BPS PHARM DRUG NAME")
  1. D T("------------------------------------------------------------------------------")
  1. S I=0 F S I=$O(@REF@(BRES,I)) Q:'I D
  1. . S Y=@REF@(BRES,I)
  1. . S BTRAN=$P(Y,U)
  1. . S BCLAIM=$P(Y,U,2)
  1. . S BRX=$P(Y,U,3),BRXN=$$RXAPI1^BPSUTIL1(BRX,.01,"I")
  1. . S BPAT=$P($G(^DPT(+$$RXAPI1^BPSUTIL1(BRX,2,"I"),0)),U)
  1. . S BFIL=$P(Y,U,4)
  1. . S BPHARM=$P(Y,U,5),BPHARMN=$P($G(^BPS(9002313.56,BPHARM,0)),U)
  1. . S BELIG=$P(Y,U,6)
  1. . S BDRUG=$P(Y,U,7)
  1. . S BFDATE=$$FILDATE(BRX,BFIL)
  1. . S BPSTAT=$$MWC^BPSRPT6(BRX,BFIL)_"/"_$S($$RELDATE(BRX,BFIL)]"":"RL",1:"NR")
  1. . S TXT=$J(I,3)_" "_$$J((BRXN_"/"_BFIL),13)_" "_$J(BPSTAT,4)_" "_$$J($$DAT(BFDATE),10)
  1. . S TXT=TXT_$J(BELIG,1)_" "_$$J($E(BPAT,1,18),18)_" "_$J($E(BPHARMN,1,3),3)
  1. . S TXT=TXT_" "_$$J($E(BDRUG,1,18),18)
  1. . D T(TXT)
  1. D T("------------------------------------------------------------------------------")
  1. Q
  1. ;
  1. J(TXT,LEN) ;Left justify
  1. Q TXT_$J("",LEN-$L(TXT))
  1. ;
  1. DAT(X,Y) ; Convert FM date to displayable (mm/dd/yy) format.
  1. ; -- optional output of time, if $g(y)
  1. N DATE,T
  1. S DATE=$S(X:$E(X,4,5)_"/"_$E(X,6,7)_"/"_$E(X,2,3),1:"")
  1. I $G(Y) S T="."_$E($P(X,".",2)_"000000",1,7) I T>0 S DATE=DATE_" "_$S($E(T,2,3)>12:$E(T,2,3)-12,$E(T,2,3)="00":"00",1:+$E(T,2,3))_":"_$E(T,4,5)_$S($E(T,2,5)>1200:" pm",1:" am")
  1. Q DATE