1 | IBNCPBB ;DALOI/AAT - ECME BACKBILLING ;24-JUN-2003
|
---|
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 | ;
|
---|
6 | Q
|
---|
7 | EN ;[IB GENERATE ECME RX BILLS] entry
|
---|
8 | N IBMOD1,IBMOD3,IBPAT,IBRX,IBBDT,IBEDT,IBSEL,IBREF,IBPAUSE
|
---|
9 | S IBREF=$NA(^TMP($J,"IBNCPBB"))
|
---|
10 | S IBPAUSE=1
|
---|
11 | K @IBREF D
|
---|
12 | . N IBEXIT
|
---|
13 | . S IBEXIT=0
|
---|
14 | . D MODE I IBEXIT Q
|
---|
15 | . I IBMOD1="P" D SELECT I IBEXIT Q
|
---|
16 | . I IBMOD1="R" D SELECT2 I IBEXIT Q
|
---|
17 | . D CONFIRM I IBEXIT Q
|
---|
18 | . D PROCESS I IBEXIT Q
|
---|
19 | I IBPAUSE W ! D PAUSE()
|
---|
20 | K @IBREF
|
---|
21 | Q
|
---|
22 | ;
|
---|
23 | CT(IBTRN) ;CT ENTRY
|
---|
24 | N IBZ,IBRX,IBRXN,IBFL,IBEXIT,IBPAT,IBRDT,IBFDT,IBRES,IBBIL,IBBN,IBQ,IBSCRES
|
---|
25 | S IBQ=0
|
---|
26 | D FULL^VALM1
|
---|
27 | W !!,"This option sends electronic Pharmacy Claims to the Payer"
|
---|
28 | S VALMBCK="R"
|
---|
29 | S IBZ=$G(^IBT(356,IBTRN,0)) Q:IBZ=""
|
---|
30 | S IBRX=$P(IBZ,U,8),IBFL=$P(IBZ,U,10)
|
---|
31 | I 'IBRX D Q
|
---|
32 | . W !!,"This is not a Pharmacy Claims Tracking record",*7,!
|
---|
33 | . D PAUSE("Cannot submit to ECME")
|
---|
34 | ;
|
---|
35 | ;Release date:
|
---|
36 | I IBFL=0 S IBRDT=$$FILE^IBRXUTL(IBRX,31)
|
---|
37 | E S IBRDT=$$SUBFILE^IBRXUTL(IBRX,IBFL,52,17)
|
---|
38 | I 'IBRDT D Q
|
---|
39 | . W !!,"The Prescription is not released.",!
|
---|
40 | . D PAUSE("Cannot submit to ECME")
|
---|
41 | ;
|
---|
42 | S IBPAT=$P(IBZ,U,2)
|
---|
43 | I $$SC($P(IBZ,U,19)) D Q:IBQ
|
---|
44 | . N DIR,DIE,DA,DR,Y
|
---|
45 | . W !!,"The Rx is marked 'non-billable' in CT: ",$P($G(^IBE(356.8,+$P(IBZ,U,19),0)),U)
|
---|
46 | . W !,"If you continue, the NON-BILLABLE REASON will be deleted.",!
|
---|
47 | . S DIR(0)="Y",DIR("A")="Are you sure you want to bill this episode"
|
---|
48 | . S DIR("B")="NO"
|
---|
49 | . S DIR("?")="If you want to bill this Rx, enter 'Yes' - otherwise, enter 'No'"
|
---|
50 | . W ! D ^DIR K DIR
|
---|
51 | . I 'Y S IBQ=1 Q
|
---|
52 | . S DIE="^IBT(356,",DA=IBTRN,DR=".19///@" D ^DIE ;clean NB reason
|
---|
53 | . S IBSCRES(IBRX,IBFL)=1 ; sc resolved flag
|
---|
54 | ;
|
---|
55 | S IBZ=$G(^IBT(356,IBTRN,0)) ; refresh
|
---|
56 | I $P(IBZ,U,19) D Q
|
---|
57 | . W !!,"The Prescription is marked 'non-billable' in Claims Tracking",*7
|
---|
58 | . W !,"Reason non-billable: ",$P($G(^IBE(356.8,+$P(IBZ,U,19),0),"Unknown"),U),!
|
---|
59 | . D PAUSE("Cannot submit to ECME")
|
---|
60 | ; Fill/Refill Date:
|
---|
61 | S IBFDT=$S('IBFL:$$FILE^IBRXUTL(IBRX,22),1:$$SUBFILE^IBRXUTL(IBRX,IBFL,52,.01))
|
---|
62 | ; Is the patient billable at the released date?
|
---|
63 | S IBRES=$$ECMEBIL^IBNCPDPU(IBPAT,IBFDT)
|
---|
64 | I 'IBRES D Q
|
---|
65 | . W !!,"The patient is not ECME Billable at the ",$S(IBFL:"re",1:""),"fill date."
|
---|
66 | . W !,"Reason: ",$P(IBRES,U,2,255),!
|
---|
67 | . D PAUSE("Cannot submit to ECME")
|
---|
68 | ;
|
---|
69 | S IBRXN=$$FILE^IBRXUTL(IBRX,.01)
|
---|
70 | S IBBIL=$$BILL(IBRXN,IBRDT)
|
---|
71 | I IBBIL,'$P($G(^DGCR(399,IBBIL,"S")),U,16) D Q
|
---|
72 | . W !!,"Rx# ",IBRXN," was previously billed."
|
---|
73 | . W !,"Please manually cancel the bill# ",$P($G(^DGCR(399,IBBIL,0)),U)," before submitting claim to ECME.",!
|
---|
74 | . D PAUSE("Cannot submit to ECME")
|
---|
75 | I IBBIL W !,"The bill# ",$P($G(^DGCR(399,IBBIL,0)),U)," has been cancelled.",!
|
---|
76 | ;
|
---|
77 | D CONFRX(IBRXN) Q:$G(IBEXIT)
|
---|
78 | ;
|
---|
79 | W !!,"Submitting Rx# ",IBRXN W:IBFL ", Refill# ",IBFL W " ..."
|
---|
80 | S IBRES=$$SUBMIT^IBNCPDPU(IBRX,IBFL) W !," ",$S(+IBRES=0:"S",1:"Not s")_"ent through ECME."
|
---|
81 | I +IBRES'=0 W !," *** ECME returned status: ",$$STAT(IBRES),!
|
---|
82 | I +IBRES=0 W !!,"The Rx have been submitted to ECME for electronic billing",!
|
---|
83 | D PAUSE()
|
---|
84 | Q
|
---|
85 | ;
|
---|
86 | MODE ;
|
---|
87 | ; IBMOD1: "P"-Single Patient, "R"-Single Rx
|
---|
88 | ; IBMOD3 (if IBMOD1="P"): "U"-Unbilled, "A"-All Rx
|
---|
89 | ; IBPAT (if IBMOD1="P"): Patient's DFN
|
---|
90 | ; IBBDT,IBEDT (if IBMOD1="P"): From/To dates inclusive
|
---|
91 | N DIR,DIC,DIRUT,DUOUT,Y,PSOFILE
|
---|
92 | S (IBMOD1,IBMOD3)=""
|
---|
93 | S DIR(0)="S^P:SINGLE (P)ATIENT;R:SINGLE (R)X"
|
---|
94 | S DIR("A")="SINGLE (P)ATIENT, SINGLE (R)X"
|
---|
95 | S DIR("B")="P"
|
---|
96 | D ^DIR K DIR I $D(DIRUT) S IBEXIT=1,IBPAUSE=0 Q
|
---|
97 | S IBMOD1=Y
|
---|
98 | ; Enter Rx
|
---|
99 | I IBMOD1="R" W ! S PSOFILE=52,DIC="^PSRX(",DIC(0)="AEQMN" D DIC^PSODI(PSOFILE,.DIC) S:$D(DUOUT) IBEXIT=1 S IBRX=$S(Y>0:+Y,1:0) S:'IBRX IBEXIT=1,IBPAUSE=0
|
---|
100 | K PSODIY
|
---|
101 | I IBMOD1="R" Q
|
---|
102 | ;
|
---|
103 | I IBMOD1'="P" W !,"???" S IBEXIT=1 Q ; Invalid mode
|
---|
104 | ;Enter Patient
|
---|
105 | S DIC="^DPT(",DIC(0)="AEQMN" D ^DIC S:$D(DUOUT) IBEXIT=1 S IBPAT=$S(Y>0:+Y,1:0) S:'IBPAT IBEXIT=1,IBPAUSE=0
|
---|
106 | Q:IBEXIT
|
---|
107 | I '$$ECMEBIL^IBNCPDPU(IBPAT,DT) W *7,!!,"Warning! The patient is currently not ECME billable!"
|
---|
108 | ;
|
---|
109 | D DATE I IBEXIT S IBPAUSE=0 Q
|
---|
110 | ;
|
---|
111 | S DIR(0)="S^U:UNBILLED;A:ALL RX"
|
---|
112 | S DIR("A")="(U)NBILLED, (A)LL RX"
|
---|
113 | S DIR("B")="U"
|
---|
114 | D ^DIR K DIR I $D(DIRUT) S IBEXIT=1,IBPAUSE=0 Q
|
---|
115 | S IBMOD3=Y
|
---|
116 | Q
|
---|
117 | ;
|
---|
118 | ;begin/end date
|
---|
119 | DATE ;
|
---|
120 | N Y,%DT
|
---|
121 | S (IBBDT,IBEDT)=DT
|
---|
122 | W !
|
---|
123 | S %DT="AEX"
|
---|
124 | S %DT("A")="START WITH DATE: ",%DT("B")="TODAY"
|
---|
125 | D ^%DT K %DT
|
---|
126 | I Y'>0 S IBEXIT=1 Q
|
---|
127 | S IBBDT=+Y
|
---|
128 | S %DT="AEX"
|
---|
129 | S %DT("A")="GO TO DATE: ",%DT("B")="TODAY" ;$$DAT2^IBOUTL(IBBDT)
|
---|
130 | D ^%DT K %DT
|
---|
131 | I Y'>0 S IBEXIT=1 Q
|
---|
132 | S IBEDT=+Y
|
---|
133 | Q
|
---|
134 | ;
|
---|
135 | SELECT ;Select from patient's list
|
---|
136 | ; (IBPAT,IBBDT,IBEDT,IBMOD3)
|
---|
137 | N IBD,IBRX,IBZ,IBDATA,IBCNT,Y,PDFN,LIST,LIST2,NODE,RXNUMEXT,LIST,IBDATE,CNT1,CNT2,RFNUM
|
---|
138 | S CNT1=0,CNT2=0,IBCNT=0
|
---|
139 | S LIST="IBRXSELARR"
|
---|
140 | S NODE=2
|
---|
141 | D RX^PSO52API(IBPAT,LIST,,,NODE,,)
|
---|
142 | S RXNUMEXT=0 F S RXNUMEXT=$O(^TMP($J,LIST,"B",RXNUMEXT)) Q:'RXNUMEXT D
|
---|
143 | . S IBRX=0 F S IBRX=$O(^TMP($J,LIST,"B",RXNUMEXT,IBRX)) Q:'IBRX D
|
---|
144 | .. S IBDATE=$P(^TMP($J,LIST,IBPAT,IBRX,31),"^",1)
|
---|
145 | .. I (IBDATE>IBBDT)&(IBDATE<IBEDT) D
|
---|
146 | ... S IBZ=$$RXZERO^IBRXUTL(IBPAT,IBRX) Q:IBZ=""
|
---|
147 | ... I $P(IBZ,U,2)'=IBPAT Q
|
---|
148 | ... I '$$FILE^IBRXUTL(IBRX,31) Q ; not released
|
---|
149 | ... S IBDATA=$$RXDATA(IBRX,0)
|
---|
150 | ... I ('$P(IBDATA,U,6))!(IBMOD3="A") S IBCNT=IBCNT+1,@IBREF@(IBCNT)=IBDATA
|
---|
151 | ... S LIST2="IBCPBBRF"
|
---|
152 | ... S NODE="R"
|
---|
153 | ... D RX^PSO52API(IBPAT,LIST2,IBRX,,NODE,,)
|
---|
154 | ... S RFNUM=0 F S RFNUM=$O(^TMP($J,LIST2,IBPAT,IBRX,"RF",RFNUM)) Q:RFNUM'>0 D:$$SUBFILE^IBRXUTL(IBRX,RFNUM,52,17)
|
---|
155 | .... S IBDATA=$$RXDATA(IBRX,RFNUM)
|
---|
156 | .... I $P(IBDATA,U,6),IBMOD3'="A" Q ; unbilled only
|
---|
157 | .... S IBCNT=IBCNT+1,@IBREF@(IBCNT)=IBDATA
|
---|
158 | ... K ^TMP($J,LIST2)
|
---|
159 | K ^TMP($J,LIST)
|
---|
160 | D MKCHOICE
|
---|
161 | Q
|
---|
162 | SELECT2 ;Select from Rx list
|
---|
163 | ; (IBRX)
|
---|
164 | N IBCNT,Y,PDFN,RIFN,LST
|
---|
165 | S RIFN=0
|
---|
166 | W ! S IBPAUSE=1
|
---|
167 | S PDFN=$$FILE^IBRXUTL(IBRX,2)
|
---|
168 | S LST="SEL2LST"
|
---|
169 | I $$RXZERO^IBRXUTL(PDFN,IBRX)="" W !,"The Rx does not exist. Please try again." S IBEXIT=1 Q
|
---|
170 | I $$FILE^IBRXUTL(IBRX,31)="" W !,"The Rx has not been released. Please try again." S IBEXIT=1 Q
|
---|
171 | S IBCNT=1,@IBREF@(IBCNT)=$$RXDATA(IBRX,0)
|
---|
172 | D RX^PSO52API(PDFN,LST,IBRX,,"R",,)
|
---|
173 | S RIFN=0 F S RIFN=$O(^TMP($J,LST,PDFN,IBRX,"RF",RIFN)) Q:RIFN'>0 D:$$SUBFILE^IBRXUTL(IBRX,RIFN,52,17)
|
---|
174 | .S IBCNT=IBCNT+1,@IBREF@(IBCNT)=$$RXDATA(IBRX,RIFN)
|
---|
175 | K ^TMP($J,LST)
|
---|
176 | D MKCHOICE
|
---|
177 | Q
|
---|
178 | ;
|
---|
179 | MKCHOICE ;
|
---|
180 | N Y
|
---|
181 | W !
|
---|
182 | S Y=0 F S Y=$O(@IBREF@(Y)) Q:'Y D DISP(Y)
|
---|
183 | ;
|
---|
184 | I $O(@IBREF@(0))="" S IBEXIT=1 W !!," No Rxs meet the entered criteria. Please try again." Q
|
---|
185 | I $O(@IBREF@(""),-1)=1 S IBSEL(1)="" Q ; one item only
|
---|
186 | F W !!,"Enter Line Item(s) to submit to ECME or (A)LL :" R IBSEL:DTIME S:'$T IBEXIT=1 Q:IBEXIT Q:IBSEL'["?" D
|
---|
187 | . W !?10,"Enter number(s) or item range(s) separated by comma."
|
---|
188 | . W !?10,"Example: 1,3,7-11"
|
---|
189 | Q:IBEXIT
|
---|
190 | I IBSEL'="",$TR(IBSEL,"al","AL")=$E("ALL",1,$L(IBSEL)),$L(IBSEL)<3 W $E("ALL",$L(IBSEL)+1,3) S IBSEL="ALL"
|
---|
191 | I IBSEL="" S IBEXIT=1 W " Nothing selected" Q
|
---|
192 | I IBSEL="^" S IBEXIT=1 W " Cancelled" Q
|
---|
193 | ;Collect the required into the IBSEL(i) local array
|
---|
194 | D PARSE(.IBSEL)
|
---|
195 | I $O(IBSEL(0))="" S IBEXIT=1 W !!,"No item(s) match the selection." Q
|
---|
196 | Q
|
---|
197 | ;
|
---|
198 | CONFIRM ;
|
---|
199 | N DIR,Y
|
---|
200 | W !
|
---|
201 | S DIR(0)="Y",DIR("B")="NO",DIR("A")="Submit the selected RX(s) to ECME for electronic billing"
|
---|
202 | D ^DIR I Y'=1 S IBEXIT=1
|
---|
203 | Q
|
---|
204 | ;
|
---|
205 | CONFRX(IBRX) ;
|
---|
206 | N DIR,Y
|
---|
207 | W !
|
---|
208 | S DIR(0)="Y",DIR("B")="NO",DIR("A")="Submit the Rx# "_IBRX_" to ECME for electronic billing"
|
---|
209 | D ^DIR I Y'=1 S IBEXIT=1
|
---|
210 | Q
|
---|
211 | ;
|
---|
212 | STAT(X) ;
|
---|
213 | I +X<6 Q $P(X,"^",2)
|
---|
214 | Q "Unknown Status"
|
---|
215 | ;
|
---|
216 | PROCESS ;
|
---|
217 | N RES,IBY,IBD,IBRX,IBFIL,IBERR,IBBIL
|
---|
218 | S IBERR=0
|
---|
219 | S IBY=0 F S IBY=$O(IBSEL(IBY)) Q:'IBY D
|
---|
220 | . S IBD=$G(@IBREF@(IBY)) Q:IBD=""
|
---|
221 | . S IBRX=$P(IBD,U),IBFIL=+$P(IBD,U,3),IBBIL=$P(IBD,U,6)
|
---|
222 | . W !,"Submitting Rx# ",$P(IBD,U,2) W:IBFIL "Refill# ",IBFIL W:'IBFIL " (original fill)" W " ..."
|
---|
223 | . I IBBIL,'$P($G(^DGCR(399,IBBIL,"S")),U,16) D S IBERR=IBERR+1 Q
|
---|
224 | .. W !," *** Rx# ",$P(IBD,U,2)," was previously billed."
|
---|
225 | .. W !," Please cancel the Bill No ",$P($G(^DGCR(399,IBBIL,0)),U)," before submitting the claim"
|
---|
226 | . S RES=$$SUBMIT^IBNCPDPU(IBRX,IBFIL) W " ",$S(+RES=0:"Sent through ECME",1:"Not sent")
|
---|
227 | . I +RES'=0 W !?5,"*** ECME returned status: ",$$STAT(RES) S IBERR=IBERR+1
|
---|
228 | I 'IBERR W !!,"The selected Rx(s) have been submitted to ECME",!,"for electronic billing"
|
---|
229 | Q
|
---|
230 | ;
|
---|
231 | BILL(IBRXN,IBDT) ;Bill IEN (if any) or null
|
---|
232 | N RES,X,IBZ
|
---|
233 | S IBDT=$P(IBDT,".")
|
---|
234 | S RES=""
|
---|
235 | S X="" F S X=$O(^IBA(362.4,"B",IBRXN,X),-1) Q:X="" D:X Q:RES
|
---|
236 | . S IBZ=$G(^IBA(362.4,X,0))
|
---|
237 | . I $P($P(IBZ,U,3),".")=IBDT,$P(IBZ,U,2) S RES=+$P(IBZ,U,2)
|
---|
238 | Q RES
|
---|
239 | ;
|
---|
240 | ;
|
---|
241 | RXDATA(IBRX,IBFIL) ;
|
---|
242 | ;RxIEN^Rx#^Fill#^RelDate^DrugIEN^BillIEN
|
---|
243 | N IBRXN,IBDT,IBDRUG,IBBIL,DATRET
|
---|
244 | S IBRXN=$$FILE^IBRXUTL(IBRX,.01)
|
---|
245 | I IBFIL=0 S IBDT=$$FILE^IBRXUTL(IBRX,22)
|
---|
246 | E S IBDT=$$SUBFILE^IBRXUTL(IBRX,IBFIL,52,.01)
|
---|
247 | S IBDT=$P(IBDT,".")
|
---|
248 | S IBDRUG=$$FILE^IBRXUTL(IBRX,6)
|
---|
249 | S IBBIL=$$BILL(IBRXN,IBDT)
|
---|
250 | S DATRET=IBRX_"^"_IBRXN_"^"_IBFIL_"^"_IBDT_"^"_IBDRUG_"^"_IBBIL
|
---|
251 | Q DATRET
|
---|
252 | ;
|
---|
253 | DISP(IBITEM) ;
|
---|
254 | N IBD,IBBILN,IBDRUG,IBBIL
|
---|
255 | S IBD=$G(@IBREF@(IBITEM)) Q:IBD=""
|
---|
256 | W !,IBITEM," ",?4,$P(IBD,U,2)," ",?15,$P(IBD,U,3)," ",?20,$$DAT2^IBOUTL($P(IBD,U,4))," "
|
---|
257 | W ?32,$E($$DRUG^IBRXUTL1(+$P(IBD,U,5)),1,30)
|
---|
258 | S IBBIL=$P(IBD,U,6)
|
---|
259 | I IBBIL W ?64,$P($G(^DGCR(399,+IBBIL,0)),U) I $P($G(^DGCR(399,IBBIL,"S")),U,16) W "(canc)"
|
---|
260 | Q
|
---|
261 | ;
|
---|
262 | PARSE(X) ;
|
---|
263 | N I,J,N
|
---|
264 | S X=$TR(X," ")
|
---|
265 | S X=$TR(X,";",",")
|
---|
266 | I $TR(IBSEL,"al","AL")="ALL" D Q
|
---|
267 | . F I=1:1 Q:'$D(@IBREF@(I)) S IBSEL(I)=""
|
---|
268 | F I=1:1:$L(X,",") S N=$P(X,",",I) D:N'=""
|
---|
269 | . I N'["-" D:N Q
|
---|
270 | . . I $D(@IBREF@(N)) S X(N)=""
|
---|
271 | . ; Processing range
|
---|
272 | . N N1,N2
|
---|
273 | . S N1=+$P(N,"-",1),N2=+$P(N,"-",2)
|
---|
274 | . F J=N1:$S(N2<N1:-1,1:1):N2 I $D(@IBREF@(J)) S X(J)=""
|
---|
275 | Q
|
---|
276 | ;
|
---|
277 | PAUSE(MESSAGE) ;
|
---|
278 | W !
|
---|
279 | I $G(MESSAGE)'="" W MESSAGE,". "
|
---|
280 | W "Press RETURN to continue: "
|
---|
281 | R %:DTIME
|
---|
282 | Q
|
---|
283 | ;
|
---|
284 | SC(IEN) ;Service connected
|
---|
285 | N IBT
|
---|
286 | I 'IEN Q 0
|
---|
287 | S IBT=$P($G(^IBE(356.8,IEN,0)),U)
|
---|
288 | I IBT="NEEDS SC DETERMINATION" Q 1
|
---|
289 | I IBT="OTHER" Q 1
|
---|
290 | ;
|
---|
291 | Q 0
|
---|