1 | BPSBCKJ ;BHAM ISC/AAT - BPS NIGHTLY BACKGROUND JOB ;02/27/2005
|
---|
2 | ;;1.0;E CLAIMS MGMT ENGINE;**1,2,5**;JUN 2004;Build 45
|
---|
3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | Q
|
---|
6 | ;
|
---|
7 | EN ; The ECME NIGHTLY PROCESS
|
---|
8 | ;
|
---|
9 | ; The list of nightly actions
|
---|
10 | D AUTOREV ; Auto-Reversals (normal and inpatient)
|
---|
11 | D MAIN^BPSOSK ; Purge BPS LOG
|
---|
12 | D TASKMAN^BPSJAREG ; Do automatic registration.
|
---|
13 | Q
|
---|
14 | ;
|
---|
15 | AUTOREV ; The Auto-Reverse Procedure
|
---|
16 | N BDT,BTRAN,BPHARM,BTRAN0,BTRAN1,BTRAN4,BDAYS,BRX,BFIL,BDATE,BNOW,BCLAIM,BRES,BREV,BTEST,REF,BCNT,BTX,X,X1,X2
|
---|
17 | ;
|
---|
18 | S BTEST=0 ; Debugging flag 1 - TEST, 0 - LIVE
|
---|
19 | S BCNT=0 ; Count reversals
|
---|
20 | ;
|
---|
21 | S REF=$NA(^TMP($J,"BPSBCKJ")) K @REF
|
---|
22 | ;
|
---|
23 | S (X1,BNOW)=$$DT^XLFDT()
|
---|
24 | ;
|
---|
25 | ;Define number of days to look back - Auto Reverse days can be from 0-31
|
---|
26 | ;To make sure every claim is caught, moving back 45 days
|
---|
27 | S X2=-45 D C^%DTC S BDT=X
|
---|
28 | ;
|
---|
29 | ;Loop through 'LAST UPDATE' 'AH' index
|
---|
30 | F S BDT=$O(^BPST("AH",BDT)) Q:'BDT S BTRAN=0 F S BTRAN=$O(^BPST("AH",BDT,BTRAN)) Q:'BTRAN D
|
---|
31 | . W:BTEST !,"TRAN=",BTRAN," ",?20
|
---|
32 | . S BTRAN0=$G(^BPST(BTRAN,0)),BTRAN1=$G(^(1)),BTRAN4=$G(^(4))
|
---|
33 | . I BTRAN0=""!(BTRAN1="") W:BTEST "ZERO OR ONE NODE MISSING" Q
|
---|
34 | . I '$$PAID^BPSOSQ4(BTRAN) W:BTEST "NOT PAID" Q ; Not paid
|
---|
35 | . S BPHARM=$P(BTRAN1,U,7) I 'BPHARM W:BTEST "NO BPS PHARM" Q ; BPS PHARMACY
|
---|
36 | . W:BTEST "BPHARM=",$P($G(^BPS(9002313.56,BPHARM,0)),U,1)," "
|
---|
37 | . ;
|
---|
38 | . ;Handle 'Inpatient' Auto-Reversals
|
---|
39 | . S BREV=$$REVINP(BNOW,BTRAN,BTRAN0,BTRAN1,BPHARM) Q:BREV
|
---|
40 | . ;
|
---|
41 | . ;Handle Regular Auto-Reversals
|
---|
42 | . S BDAYS=+$P($G(^BPS(9002313.56,BPHARM,0)),U,9)
|
---|
43 | . I 'BDAYS W:BTEST "AUTO-REV DISABLED" Q ;disabled
|
---|
44 | . I $P(BTRAN4,U,1) Q ;Reversal claim exist
|
---|
45 | . S BCLAIM=$P(BTRAN0,U,4) I 'BCLAIM W:BTEST "NO BCLAIM" Q
|
---|
46 | . I $P($G(^BPSC(BCLAIM,0)),U,7) W:BTEST "AUTO-REVERSE FLAG" Q
|
---|
47 | . S BDATE=$P($G(^BPSC(BCLAIM,0)),U,5)
|
---|
48 | . I 'BDATE S BDATE=$P($G(^BPSC(BCLAIM,0)),U,6)
|
---|
49 | . S BDATE=$P(BDATE,".")
|
---|
50 | . I 'BDATE="" W:BTEST "NO DATE" Q
|
---|
51 | . W:BTEST "DATE=",BDATE," "
|
---|
52 | . I $$FMDIFF^XLFDT(BNOW,BDATE,1)'>BDAYS W:BTEST "TOO EARLY" Q
|
---|
53 | . S BRX=$P(BTRAN1,U,11) I 'BRX W:BTEST "NO RX" Q
|
---|
54 | . S BFIL=$P(BTRAN1,U,1)
|
---|
55 | . I $$RELDATE(BRX,BFIL) W:BTEST " RELEASED" Q ;released
|
---|
56 | . S BRES=$$REVERSE(BRX,BFIL,BCLAIM,1)
|
---|
57 | . W:BTEST " *REV CLM=",BCLAIM," STAT=",BRES
|
---|
58 | . I BRES=0!(BRES=4) D
|
---|
59 | .. S (BCNT,@REF@(BRES))=$G(@REF@(BRES))+1
|
---|
60 | .. S @REF@(BRES,BCNT)=BTRAN_U_BCLAIM_U_BRX_U_BFIL_U_BPHARM
|
---|
61 | . ; Any notifications to IB?
|
---|
62 | D BULL(REF) ; Send the bulletin
|
---|
63 | K @REF
|
---|
64 | Q
|
---|
65 | ;
|
---|
66 | ;Auto-Reverse Claims for Current Inpatients
|
---|
67 | ;
|
---|
68 | ;20050810;BEE;Phase III - CR11
|
---|
69 | ;
|
---|
70 | REVINP(BNOW,BTRAN,BTRAN0,BTRAN1,BPHARM) ;
|
---|
71 | N BRX,BFIL,BCLAIM,BDATE,BRES,DFN,VAIP
|
---|
72 | ;
|
---|
73 | ;Only process Window fills
|
---|
74 | S BRX=+$P(BTRAN1,U,11) I BRX=0 Q 0
|
---|
75 | S BFIL=+$P(BTRAN1,U)
|
---|
76 | I $$MWC^BPSRPT6(BRX,BFIL)'="W" Q 0
|
---|
77 | ;
|
---|
78 | ;Check for Fill date - Must be equal to T-5
|
---|
79 | S BCLAIM=$P(BTRAN0,U,4) I 'BCLAIM Q 0
|
---|
80 | S BDATE=$$FILDATE(BRX,BFIL)
|
---|
81 | S BDATE=$P(BDATE,".")
|
---|
82 | I 'BDATE="" Q 0
|
---|
83 | I $$FMDIFF^XLFDT(BNOW,BDATE,1)'=5 Q 0
|
---|
84 | ;
|
---|
85 | ;Check for current Inpatient
|
---|
86 | S DFN=+$P(BTRAN0,U,6) I DFN=0 Q 0
|
---|
87 | D IN5^VADPT
|
---|
88 | I $G(VAIP(3))="" Q 0
|
---|
89 | ;
|
---|
90 | ;Auto-Reverse Claim
|
---|
91 | S BRES=$$REVERSE(BRX,BFIL,BCLAIM,2)
|
---|
92 | W:BTEST " *REV CLM=",BCLAIM," STAT=",BRES
|
---|
93 | I BRES=0!(BRES=4) D
|
---|
94 | . S (BCNT,@REF@(BRES))=$G(@REF@(BRES))+1
|
---|
95 | . S @REF@(BRES,BCNT)=BTRAN_U_BCLAIM_U_BRX_U_BFIL_U_BPHARM
|
---|
96 | Q 1
|
---|
97 | ;
|
---|
98 | RELDATE(BRX,BFIL) ;Get the Released Date
|
---|
99 | I BFIL Q $$RXSUBF1^BPSUTIL1(BRX,52,52.1,+BFIL,17,"I")
|
---|
100 | Q $$RXAPI1^BPSUTIL1(BRX,31,"I")
|
---|
101 | ;
|
---|
102 | FILDATE(BRX,BFIL) ;Get the Fill Date
|
---|
103 | I BFIL Q $$RXSUBF1^BPSUTIL1(BRX,52,52.1,+BFIL,.01,"I")
|
---|
104 | Q $$RXAPI1^BPSUTIL1(BRX,22,"I")
|
---|
105 | ;
|
---|
106 | REVERSE(BRX,BFIL,BCLAIM,BTYPE) ;Auto-Reverse the claim
|
---|
107 | ;PUBLIC BTEST
|
---|
108 | N BDOS,BRES,BDAT,BMES,BRSN
|
---|
109 | I $G(BTEST) Q 0 ; Test mode
|
---|
110 | ;
|
---|
111 | ; Get Date of Service and set reversal reason
|
---|
112 | S BDOS=$$DOSDATE^BPSSCRRS(BRX,BFIL)
|
---|
113 | S BRSN=$S(BTYPE=2:"CURRENT INPATIENT",1:"PRESCRIPTION NOT RELEASED")
|
---|
114 | ;
|
---|
115 | ; Call ECME to process reversal
|
---|
116 | S BRES=$$EN^BPSNCPDP(BRX,BFIL,BDOS,"AREV","",BRSN,"")
|
---|
117 | ;
|
---|
118 | ; If successful, log message to the Prescription Activity Log
|
---|
119 | ; and set the auto-reversal flag
|
---|
120 | S BRES=+BRES,BMES="Submitted to ECME: AUTO REVERSAL JOB"
|
---|
121 | I BRES=0 D
|
---|
122 | . D ECMEACT^PSOBPSU1(BRX,BFIL,BMES,.5)
|
---|
123 | . S BDAT(9002313.02,BCLAIM_",",.07)=BTYPE D FILE^DIE("","BDAT")
|
---|
124 | Q BRES
|
---|
125 | ;
|
---|
126 | ;
|
---|
127 | BULL(REF) ;Bulletin to the OPECC
|
---|
128 | ;PUBLIC BTEST,DUZ,DT
|
---|
129 | N XMSUB,XMY,XMTEXT,XMDUZ,BLNUM
|
---|
130 | ;
|
---|
131 | S BLNUM=0,BCNT=+$G(@REF@(0))
|
---|
132 | S XMSUB="ECME AUTO-REVERSAL PROCESS"
|
---|
133 | 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()
|
---|
134 | D T("The ECME Nightly Process submitted auto-reversals for the following e-Pharmacy")
|
---|
135 | D T("prescriptions.")
|
---|
136 | D T()
|
---|
137 | D T("TOTAL CLAIMS SUBMITTED FOR AUTO-REVERSALS: "_BCNT)
|
---|
138 | D T()
|
---|
139 | I BCNT D T("Claims Submitted for Auto-Reversals on "_$$DAT(DT)_":") D ARLIST(0,REF)
|
---|
140 | D T()
|
---|
141 | S BCNT=+$G(@REF@(4))
|
---|
142 | I BCNT'=0 D
|
---|
143 | . D T()
|
---|
144 | . D T("The ECME Nightly Process attempted to auto-reverse the following claims but")
|
---|
145 | . D T("could not because the previous request was IN PROGRESS. Please verify that")
|
---|
146 | . D T("the previous request is not stranded.")
|
---|
147 | . D T()
|
---|
148 | . D T("Total number of claims that could not be auto-reversed: "_BCNT)
|
---|
149 | . D T()
|
---|
150 | . D T("Claims not auto-reversed on "_$$DAT(DT)_":")
|
---|
151 | . D ARLIST(4,REF)
|
---|
152 | . D T()
|
---|
153 | ;
|
---|
154 | S XMDUZ="BPS PACKAGE",XMTEXT="BTX("
|
---|
155 | S XMY("G.BPS OPECC")=""
|
---|
156 | I $G(DUZ)'<1 S XMY(DUZ)=""
|
---|
157 | D ^XMD
|
---|
158 | Q
|
---|
159 | ;
|
---|
160 | T(BTXT) ; Add text to the message
|
---|
161 | ;PUBLIC BLNUM,BTEST
|
---|
162 | S BLNUM=BLNUM+1,BTX(BLNUM)=$G(BTXT," ")
|
---|
163 | I $G(BTEST) W !,$G(BTXT)
|
---|
164 | Q
|
---|
165 | ;
|
---|
166 | ARLIST(BRES,REF) ;Auto-Rev List
|
---|
167 | N I,TXT,BCLAIM,BTRAN,Y,BRX,BFIL,BFDATE,BPHARM,BRXN,BPHARMN,BPAT,BPSTAT
|
---|
168 | D T()
|
---|
169 | D T(" # RX FILL STATUS FILL DATE PATIENT BPS PHARMACY")
|
---|
170 | D T("------------------------------------------------------------------------------")
|
---|
171 | S I=0 F S I=$O(@REF@(BRES,I)) Q:'I D
|
---|
172 | . S Y=@REF@(BRES,I)
|
---|
173 | . S BTRAN=$P(Y,U)
|
---|
174 | . S BCLAIM=$P(Y,U,2)
|
---|
175 | . S BRX=$P(Y,U,3),BRXN=$$RXAPI1^BPSUTIL1(BRX,.01,"I")
|
---|
176 | . S BPAT=$P($G(^DPT(+$$RXAPI1^BPSUTIL1(BRX,2,"I"),0)),U)
|
---|
177 | . S BFIL=$P(Y,U,4)
|
---|
178 | . S BPHARM=$P(Y,U,5),BPHARMN=$P($G(^BPS(9002313.56,BPHARM,0)),U)
|
---|
179 | . S BFDATE=$$FILDATE(BRX,BFIL)
|
---|
180 | . S BPSTAT=$$MWC^BPSRPT6(BRX,BFIL)_"/"_$S($$RELDATE(BRX,BFIL)]"":"RL",1:"NR")
|
---|
181 | . S TXT=$J(I,3)_" "_$$J(BRXN,10)_" "_$$J(BFIL,2)_" "_$J(BPSTAT,4)_" "_$$J($$DAT(BFDATE),11)_$$J(BPAT,25)_" "_$J($E(BPHARMN,1,15),15)
|
---|
182 | . D T(TXT)
|
---|
183 | D T("------------------------------------------------------------------------------")
|
---|
184 | Q
|
---|
185 | ;
|
---|
186 | J(TXT,LEN) ;Left justify
|
---|
187 | Q TXT_$J("",LEN-$L(TXT))
|
---|
188 | ;
|
---|
189 | DAT(X,Y) ; Convert FM date to displayable (mm/dd/yy) format.
|
---|
190 | ; -- optional output of time, if $g(y)
|
---|
191 | N DATE,T
|
---|
192 | S DATE=$S(X:$E(X,4,5)_"/"_$E(X,6,7)_"/"_$E(X,2,3),1:"")
|
---|
193 | 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")
|
---|
194 | Q DATE
|
---|