1 | IBNCPRR ;DALOI/AAT - Prescription Report for 3rd Party Billing cross check ;07/21/04
|
---|
2 | ;;2.0;INTEGRATED BILLING;**276,347**;21-MAR-94;Build 24
|
---|
3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | EN ;
|
---|
6 | N IBQ,IBSITE,IBWMC,IBENB,IBBDT,IBEDT,IBINS,IBSDE,IBSCR
|
---|
7 | S IBQ=0 ; quit flag
|
---|
8 | ; Prompts to the user:
|
---|
9 | D DIV Q:IBQ ; Division
|
---|
10 | D WMC Q:IBQ ; W/M/C criteria
|
---|
11 | D ENB Q:IBQ ; ECME/NON-ECME/BOTH criteria
|
---|
12 | D DATE Q:IBQ ; From-To date range
|
---|
13 | D INS Q:IBQ ; Insurance company
|
---|
14 | D SDE Q:IBQ ; Summary/Detailed/Excel criteria
|
---|
15 | D DEVICE Q:IBQ
|
---|
16 | D RUN
|
---|
17 | I IBQ'=2 D PAUSE2
|
---|
18 | Q
|
---|
19 | ;
|
---|
20 | DIV N DIC,DIRUT
|
---|
21 | W ! S DIC("A")="Division: ",DIC=59,DIC(0)="AEQM" D DIC^PSODI(59,.DIC,) S IBSITE=+Y K Y
|
---|
22 | I $D(DIRUT) S IBQ=1 Q
|
---|
23 | I IBSITE'>0 S IBQ=1 Q
|
---|
24 | I $G(PSODIY) K PSODIY
|
---|
25 | Q
|
---|
26 | ;
|
---|
27 | WMC N DIR,DIRUT,Y
|
---|
28 | W ! S DIR("B")="CMOP",DIR("A")="(W)INDOW/(M)AIL/(C)MOP: "
|
---|
29 | S DIR(0)="SA^W:WINDOW;M:MAIL;C:CMOP" D ^DIR
|
---|
30 | I $D(DIRUT) S IBQ=1 Q
|
---|
31 | S IBWMC=Y
|
---|
32 | Q
|
---|
33 | ;
|
---|
34 | ENB N DIR,DIRUT,Y
|
---|
35 | W ! S DIR("B")="ECME BILLABLE",DIR("A")="(E)CME Billable/(N)on-ECME Billable/(B)OTH: "
|
---|
36 | S DIR(0)="SA^E:ECME BILLABLE;N:NON-ECME BILLABLE;B:BOTH" D ^DIR
|
---|
37 | I $D(DIRUT) S IBQ=1 Q
|
---|
38 | S IBENB=Y
|
---|
39 | Q
|
---|
40 | ;
|
---|
41 | DATE ;
|
---|
42 | N %DT,Y
|
---|
43 | S (IBBDT,IBEDT)=DT
|
---|
44 | S %DT="AEX"
|
---|
45 | S %DT("A")="FROM RELEASE DATE: ",%DT("B")="TODAY"
|
---|
46 | W ! D ^%DT K %DT
|
---|
47 | I Y<0 S IBQ=1 Q
|
---|
48 | S IBBDT=+Y
|
---|
49 | S %DT="AEX"
|
---|
50 | S %DT("A")="TO RELEASE DATE: ",%DT("B")="TODAY" ;$$DAT2^IBOUTL(IBBDT)
|
---|
51 | D ^%DT K %DT
|
---|
52 | I Y<0 S IBQ=1 Q
|
---|
53 | S IBEDT=+Y
|
---|
54 | Q
|
---|
55 | ;
|
---|
56 | INS N DIR,DIC,DIRUT,Y
|
---|
57 | W ! S DIR("B")="ALL",DIR("A")="(S)INGLE Insurance Company /(A)LL Insurance Companies: "
|
---|
58 | S DIR(0)="SA^S:SINGLE INSURANCE COMPANY;A:ALL" D ^DIR
|
---|
59 | I $D(DIRUT) S IBQ=1 Q
|
---|
60 | I Y="A" S IBINS=0 Q
|
---|
61 | ;
|
---|
62 | S DIC(0)="AEQM",DIC=36
|
---|
63 | W ! D ^DIC
|
---|
64 | I $D(DIRUT) S IBQ=1 Q
|
---|
65 | I Y'>0 S IBQ=1 Q
|
---|
66 | S IBINS=+Y
|
---|
67 | Q
|
---|
68 | ;
|
---|
69 | SDE N DIR,DIRUT
|
---|
70 | S DIR("B")="SUMMARY",DIR("A")="(S)UMMARY/(D)ETAILED/(E)XCEL: "
|
---|
71 | S DIR(0)="SA^S:SUMMARY;D:DETAILED;E:EXCEL"
|
---|
72 | W ! D ^DIR
|
---|
73 | I $D(DIRUT) S IBQ=1 Q
|
---|
74 | S IBSDE=Y
|
---|
75 | Q
|
---|
76 | ;
|
---|
77 | DEVICE ;
|
---|
78 | N %ZIS,ZTSK,ZTRTN,ZTIO,ZTDESC,POP,ZTSAVE
|
---|
79 | S %ZIS="QM"
|
---|
80 | W ! D ^%ZIS
|
---|
81 | I POP S IBQ=1 Q
|
---|
82 | S IBSCR=$S($E($G(IOST),1,2)="C-":1,1:0)
|
---|
83 | ;
|
---|
84 | I $D(IO("Q")) D S IBQ=1
|
---|
85 | . S ZTRTN="RUN^IBNCPRR"
|
---|
86 | . S ZTIO=ION
|
---|
87 | . S ZTSAVE("IB*")=""
|
---|
88 | . S ZTDESC="IB ECME CMOP REPORT"
|
---|
89 | . D ^%ZTLOAD
|
---|
90 | . W !,$S($D(ZTSK):"REQUEST QUEUED TASK="_ZTSK,1:"REQUEST CANCELLED")
|
---|
91 | . D HOME^%ZIS
|
---|
92 | U IO
|
---|
93 | Q
|
---|
94 | ;
|
---|
95 | RUN ;
|
---|
96 | N IBPAGE,REF
|
---|
97 | S REF=$NA(^TMP($J,"IBNCPRR"))
|
---|
98 | K @REF
|
---|
99 | S IBPAGE=0
|
---|
100 | D COLLECT ; Collect the data in ^TMP
|
---|
101 | U IO
|
---|
102 | D REPORT
|
---|
103 | I 'IBSCR W !,@IOF
|
---|
104 | D ^%ZISC
|
---|
105 | K @REF
|
---|
106 | Q
|
---|
107 | ;
|
---|
108 | REPORT ;
|
---|
109 | N IBDT,IBRX,IBFL,IBPN,DFN,IBD
|
---|
110 | D HDR
|
---|
111 | I '$D(@REF) W !,"No data meet the criteria."
|
---|
112 | S IBDT="" F S IBDT=$O(@REF@(IBDT)) Q:IBDT="" D Q:IBQ
|
---|
113 | . S IBPN="" F S IBPN=$O(@REF@(IBDT,IBPN)) Q:IBPN="" D Q:IBQ
|
---|
114 | .. S IBRX="" F S IBRX=$O(@REF@(IBDT,IBPN,IBRX)) Q:IBRX="" D Q:IBQ
|
---|
115 | ... S IBFL="" F S IBFL=$O(@REF@(IBDT,IBPN,IBRX,IBFL)) Q:IBFL="" D Q:IBQ
|
---|
116 | .... S IBD=$G(@REF@(IBDT,IBPN,IBRX,IBFL)) Q:IBD=""
|
---|
117 | .... I IBSDE="S" D WRLINE Q
|
---|
118 | .... I IBSDE="D" D WRLINE2 Q
|
---|
119 | .... I IBSDE="E" D WRLINE3 Q
|
---|
120 | ;
|
---|
121 | Q
|
---|
122 | ;
|
---|
123 | WRLINE ; Write the summary report line
|
---|
124 | D CHKP Q:IBQ
|
---|
125 | W !,$$DAT3^IBOUTL(IBDT)," ",?12,$E(IBPN,1,23)," "
|
---|
126 | W ?36,$E($$FILE^IBRXUTL(IBRX,.01),1,11)," ",?48,IBFL
|
---|
127 | W ?51,$P(IBD,U,3)," " ; ECME number
|
---|
128 | W ?59,$P($G(^DGCR(399,+$P(IBD,U,4),0)),U)," " ; Bill #
|
---|
129 | W ?67,$E($P($G(^DIC(36,+$P(IBD,U,5),0)),U),1,13) ; Insurance
|
---|
130 | Q
|
---|
131 | ;
|
---|
132 | WRLINE2 ; Write the detailed report line
|
---|
133 | N IBRXARR
|
---|
134 | D CHKP Q:IBQ
|
---|
135 | W !,$$DAT^IBNCPRR1(IBDT)," ",?10,$E(IBPN,1,18)," "
|
---|
136 | W ?29,$$SSN4^IBNCPRR1(+IBD)
|
---|
137 | W ?34,$E($$FILE^IBRXUTL(IBRX,.01),1,10)," "
|
---|
138 | W ?45,IBFL," "
|
---|
139 | W ?49,$$DAT^IBNCPRR1($P(IBD,U,2))," "
|
---|
140 | N DRGIFN,DRUGNM,SEQNUM
|
---|
141 | S DRGIFN=$$FILE^IBRXUTL(IBRX,6) D ZERO^IBRXUTL(DRGIFN) S DRUGNM=^TMP($J,"IBDRUG",DRGIFN,.01)
|
---|
142 | K ^TMP($J,"IBDRUG")
|
---|
143 | W ?60,$E(DRUGNM,1,20)
|
---|
144 | ; ECME#/Rx Status/Copay
|
---|
145 | D CHKP Q:IBQ
|
---|
146 | W !?5,"ECME#: ",$P(IBD,U,3),", Rx Status: ",$$FILE^IBRXUTL(IBRX,100,"E"),", Rx Copay: ",$$COPAY^IBNCPRR1(IBRX,IBFL)
|
---|
147 | ; Bill Number/Insurance/Group
|
---|
148 | I $P(IBD,U,4) D CHKP Q:IBQ D
|
---|
149 | . W !?5,"Bill#: ",$P($G(^DGCR(399,+$P(IBD,U,4),0)),U)
|
---|
150 | . W ", Insurance: ",$E($P($G(^DIC(36,+$P(IBD,U,5),0)),U),1,20)
|
---|
151 | . ;W ", Group Ins.Plan: ?"
|
---|
152 | ; CMOP Transactions
|
---|
153 | I IBWMC="C" D Q:IBQ
|
---|
154 | . N IBCMOP,IBZ,IBANY
|
---|
155 | . S IBANY=0
|
---|
156 | . S IBCMOP=0
|
---|
157 | . S DFN=$$FILE^IBRXUTL(IBRX,2)
|
---|
158 | . D RX^PSO52API(DFN,"IBRX",IBRX,,"C",,)
|
---|
159 | . F S IBCMOP=$O(^TMP($J,"IBRX",DFN,IBRX,"C",IBCMOP)) Q:'IBCMOP D Q:IBQ
|
---|
160 | .. S IBZ=$O(^TMP($J,"IBRX",DFN,IBRX,"C",IBCMOP,0)) Q:IBZ=""
|
---|
161 | .. I +$P(^TMP($J,"IBRX",DFN,IBRX,"C",IBCMOP,2),"^",1)'=IBFL Q ; different refill
|
---|
162 | .. D CHKP Q:IBQ
|
---|
163 | .. N DR,DA,DIQ,DIC
|
---|
164 | .. S DR=400,DR(52.01)="1"
|
---|
165 | .. S DA=IBRX,DA(52.01)=IBCMOP
|
---|
166 | .. S DIQ="IBRXARR",DIQ(0)="E"
|
---|
167 | .. D DIQ^PSODI(52,52,.DR,.DA,.DIQ) S SEQNUM=$G(IBRXARR(52.01,DA(52.01),DR(52.01),DIQ(0)))
|
---|
168 | .. W !?5,"CMOP SEQUENCE# ",SEQNUM
|
---|
169 | .. W ", STATUS: ",$P(^TMP($J,"IBRX",DFN,IBRX,"C",IBCMOP,3),"^",2)
|
---|
170 | .. W ", NDC: ",$P(^TMP($J,"IBRX",DFN,IBRX,"C",IBCMOP,4),"^",1) S IBANY=1
|
---|
171 | .K ^TMP($J,"IBRX")
|
---|
172 | . I 'IBANY D CHKP Q:IBQ W !?5,"NO CMOP TRANSACTIONS FOUND"
|
---|
173 | ;
|
---|
174 | ; Write activity log
|
---|
175 | N IBACT,IBFROM,IBTO,IBTMP
|
---|
176 | S IBFROM=IBDT,IBTO=$$NXTREFDT^IBNCPRR1(IBRX,IBFL)
|
---|
177 | I IBTO<IBFROM S IBTO=IBFROM
|
---|
178 | S DFN=$$FILE^IBRXUTL(IBRX,2),LIST="IBTMPARR",NODE="A"
|
---|
179 | D RX^PSO52API(DFN,LIST,IBRX,,NODE,,) Q:$P(^TMP($J,LIST,DFN,IBRX,"A",.01),"^",1)<0
|
---|
180 | S IBTMP=0
|
---|
181 | F S IBTMP=$O(^TMP($J,LIST,DFN,IBRX,"A",IBTMP)) Q:IBTMP="" D Q:IBQ
|
---|
182 | . N IBZ,IBTXT
|
---|
183 | . I $P(^TMP($J,LIST,DFN,IBRX,"A",IBTMP,.02),"^",1)'="B",$P(^TMP($J,LIST,DFN,IBRX,"A",IBTMP,.02),"^",1)'="M" Q
|
---|
184 | . S IBZ=$P(^TMP($J,LIST,DFN,IBRX,"A",IBTMP,.01),"^",1)
|
---|
185 | . I IBZ<IBFROM Q
|
---|
186 | . I IBZ>IBTO Q
|
---|
187 | . D CHKP Q:IBQ
|
---|
188 | . S IBTXT=$P(^TMP($J,LIST,DFN,IBRX,"A",IBTMP,.05),"^",1)
|
---|
189 | . S:$TR(IBTXT," ")="" IBTXT=$$EXTERNAL^DILFD(52.3,.02,,$P(IBZ,U,2))
|
---|
190 | . W !?5,$$DATTIM^IBNCPRR1(+IBZ),?21,$E(IBTXT,1,59)
|
---|
191 | K ^TMP($J,LIST)
|
---|
192 | D CHKP Q:IBQ
|
---|
193 | W !?5,"-------------------------------"
|
---|
194 | Q
|
---|
195 | ;
|
---|
196 | WRLINE3 ; Write the Excel report line
|
---|
197 | W !,$$DAT^IBNCPRR1(IBDT),U,$E(IBPN,1,23),U
|
---|
198 | W $E($$FILE^IBRXUTL(IBRX,.01),1,11),U,IBFL,U
|
---|
199 | W $$DAT^IBNCPRR1($P(IBD,U,2)),U
|
---|
200 | W $P(IBD,U,3),U ; ECME number
|
---|
201 | W $P($G(^DGCR(399,+$P(IBD,U,4),0)),U),U ; Bill #
|
---|
202 | W $E($P($G(^DIC(36,+$P(IBD,U,5),0)),U),1,13) ; Insurance
|
---|
203 | Q
|
---|
204 | ;
|
---|
205 | HDR ;
|
---|
206 | N LIST,IBSNAME
|
---|
207 | S LIST="HDRLIST"
|
---|
208 | S IBSNAME=""
|
---|
209 | D PSS^PSO59(IBSITE,,LIST)
|
---|
210 | I $G(^TMP($J,LIST,IBSITE,0))>0 S IBSNAME=^TMP($J,LIST,IBSITE,.01)
|
---|
211 | K ^TMP($J,LIST)
|
---|
212 | S IBPAGE=IBPAGE+1
|
---|
213 | W @IOF,?10,"IB THIRD PARTY BILLING PHARMACY CROSS-CHECK REPORT for "_IBSNAME,!
|
---|
214 | W ?10,$S(IBWMC="C":"CMOP",IBWMC="M":"MAIL",1:"WINDOW")," PRESCRIPTIONS" W ", ",$S(IBSDE="S":"SUMMARY",1:"DETAILED")
|
---|
215 | W !?10,"Released ",$$DAT3^IBOUTL(IBBDT)_" to "_$$DAT3^IBOUTL(IBEDT),?70,"Page: "_IBPAGE
|
---|
216 | I IBSDE="S" D
|
---|
217 | . W !!,"Rel.Date Patient Name Rx No Fill# ECME# Bill Insurance"
|
---|
218 | I IBSDE="D" D
|
---|
219 | . W !!,"Rel.Date Patient Name SSN Rx No Fill# Fil.Date Drug"
|
---|
220 | I IBSDE="E" D
|
---|
221 | . W !!,"Rel.Date^Patient Name^SSN^Rx No^Fill#^Fil.Date^ECME#^Bill"
|
---|
222 | I IBSDE'="E" D ULINE("=")
|
---|
223 | Q
|
---|
224 | ;
|
---|
225 | ;
|
---|
226 | COLLECT ;
|
---|
227 | N IBDT,IBRX,IBFL,IBP,DFN,IBRXINS,IBZ,IBRXN,IBFLDT,IBPN,IBECN,IBECMBIL,IBRXSITE,IBBIL,IBFILD,LIST,CNT
|
---|
228 | S IBDT=IBBDT-.0001
|
---|
229 | ; Released Prescriptions/Refills
|
---|
230 | S LIST="IBRXARR"
|
---|
231 | D EXTRACT^PSO52EX(IBBDT,IBEDT,LIST)
|
---|
232 | S DTE=0,CNT=0
|
---|
233 | F S DTE=$O(^TMP($J,LIST,"AL",DTE)) Q:'DTE D
|
---|
234 | .S IBRX="" F S IBRX=$O(^TMP($J,LIST,"AL",DTE,IBRX)) Q:'IBRX D
|
---|
235 | ..S IBFIL="" F S IBFIL=$O(^TMP($J,LIST,"AL",DTE,IBRX,IBFIL)) Q:IBFIL="" D
|
---|
236 | ...S DFN=$$FILE^IBRXUTL(IBRX,2) ;Patient
|
---|
237 | ...S IBZ=$$RXZERO^IBRXUTL(DFN,IBRX)
|
---|
238 | ...S IBPN=$$FILE^IBRXUTL(IBRX,2,"E")
|
---|
239 | ...S IBRXSITE=$$FILE^IBRXUTL(IBRX,20)
|
---|
240 | ...I IBSITE'=IBRXSITE Q
|
---|
241 | ...I IBFIL=0 S IBFLDT=$$FILE^IBRXUTL(IBRX,22)
|
---|
242 | ...I IBFIL>0 S IBFLDT=$$SUBFILE^IBRXUTL(IBRX,IBFL,52,.01)
|
---|
243 | ...S:'IBFLDT IBFLDT=IBDT
|
---|
244 | ... S IBBIL=$$BILL^IBNCPBB(IBRXN,IBFLDT) ; IB Bill
|
---|
245 | ... S IBRXINS=$$BILLINS^IBNCPRR1(IBBIL)
|
---|
246 | ... I 'IBRXINS S IBRXINS=$$RXINS^IBNCPRR1(IBRX,IBFL)
|
---|
247 | ... S IBECMBIL=$$ECMEBIL^IBNCPDPU(DFN,IBFLDT) ; ECME Billable?
|
---|
248 | ... ; Apply filters:
|
---|
249 | ... I IBENB="E",'IBECMBIL Q
|
---|
250 | ... I IBENB="N",IBECMBIL Q
|
---|
251 | ... I IBINS,IBRXINS'=IBINS Q
|
---|
252 | ... ; Mail/Window/CMOP
|
---|
253 | ... I IBWMC'=$$RXWMC(IBRX) Q
|
---|
254 | ... S IBECN=$S(IBECMBIL:$$ECMENO^IBNCPRR1(IBRX),1:"")
|
---|
255 | ... S @REF@($P(IBDT,"."),IBPN,IBRX,IBFL)=DFN_U_IBFLDT_U_IBECN_U_IBBIL_U_IBRXINS
|
---|
256 | K ^TMP($J,LIST)
|
---|
257 | ;
|
---|
258 | ;;Partial Prescriptions
|
---|
259 | ;S IBRXN=0
|
---|
260 | ;S IBDT=IBBDT-.001 F S IBDT=$O(^PSRX("ADP",IBDT)) Q:'IBDT!($P(IBDT,".")>IBEDT) D
|
---|
261 | ;. F S IBRX=$O(^PSRX("ADP",IBDT,IBRX)) Q:'IBRX D
|
---|
262 | ;.. S IBP=0 F S IBP=$O(^PSRX("ADP",IBDT,IBRX,IBP)) Q:'IBP D
|
---|
263 | ;... I $G(^PSRX(IBRX,0))="" Q
|
---|
264 | ;... S IBPAR=1 D REF
|
---|
265 | Q
|
---|
266 | ;
|
---|
267 | ;
|
---|
268 | RXWMC(IBRX) ;WMC
|
---|
269 | N IBZ,IBWM,DFN
|
---|
270 | S DFN=$$FILE^IBRXUTL(IBRX,2),NODE="C",LIST="IBCMOP"
|
---|
271 | D RX^PSO52API(DFN,LIST,IBRX,,NODE,,)
|
---|
272 | I ^TMP($J,LIST,DFN,IBRX,"C",0)'=-1 Q "C"
|
---|
273 | S IBZ=$$RXZERO^IBRXUTL($$FILE^IBRXUTL(IBRX,2),IBRX)
|
---|
274 | S IBWM=$P(IBZ,U,11)
|
---|
275 | I IBWM="" S IBWM="W" ;default
|
---|
276 | K ^TMP($J,LIST)
|
---|
277 | Q IBWM
|
---|
278 | ;
|
---|
279 | CHKP ;Check for EOP
|
---|
280 | I $Y>(IOSL-4) D:IBSCR PAUSE Q:IBQ D HDR
|
---|
281 | Q
|
---|
282 | ;
|
---|
283 | PAUSE ;
|
---|
284 | N X U IO(0) W !!,"Press RETURN to continue, '^' to exit:" R X:DTIME S:'$T X="^" S:X["^" IBQ=2
|
---|
285 | U IO
|
---|
286 | Q
|
---|
287 | ;
|
---|
288 | PAUSE2 ;
|
---|
289 | N X U IO(0) W !!,"Press RETURN to continue:" R X:DTIME S:'$T X="^" S:X["^" IBQ=2
|
---|
290 | U IO
|
---|
291 | Q
|
---|
292 | ;
|
---|
293 | ULINE(X) ;line
|
---|
294 | D CHKP Q:IBQ
|
---|
295 | N I W ! F I=1:1:80 W $G(X,"-")
|
---|
296 | Q
|
---|
297 | ;
|
---|
298 | RXSTAT(IBDFN,IBRX) ;
|
---|
299 | N IBS
|
---|
300 | ;instead of: S IBS=$P($G(^PSRX(IBRX,"STA")),U)
|
---|
301 | S IBS=$$RXSTATUS(IBDFN,IBRX)
|
---|
302 | Q $$EXTERNAL^DILFD(52,100,,IBS)
|
---|
303 | ;
|
---|
304 | RXSTATUS(IBDFN,IBRX) ;
|
---|
305 | N X
|
---|
306 | K ^TMP($J,"IBNCPDP52")
|
---|
307 | D RX^PSO52API(IBDFN,"IBNCPDP52",IBRX,"","ST")
|
---|
308 | S X=+$G(^TMP($J,"IBNCPDP52",IBDFN,IBRX,100))
|
---|
309 | K ^TMP($J,"IBNCPDP52")
|
---|
310 | Q X
|
---|
311 | ;
|
---|