1 | IBAUTL6 ;AAS/ALB-RX EXEMPTION UTILITY ROUTINE (CONT.);2-NOV-92
|
---|
2 | ;;2.0;INTEGRATED BILLING;**34,195**;21-MAR-94
|
---|
3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | ADDP ; -- Add patient to file 354
|
---|
6 | ; -- Input : dfn = entry in patient file
|
---|
7 | ; returns : ibadd = 0 if not added, 1 if added
|
---|
8 | ;
|
---|
9 | N DINUM,DLAYGO,X
|
---|
10 | I '$D(DT) D DT^DICRW
|
---|
11 | S IBWHER=11,IBEXERR=""
|
---|
12 | S IBADD=0
|
---|
13 | I $S('$D(DFN):1,'$D(^IBA(354)):1,$D(^IBA(354,DFN)):1,1:0) G ADDPQ
|
---|
14 | K DO,DD,DIC,DR,DA,DIE S DIC="^IBA(354,",DIC(0)="L",DLAYGO=354
|
---|
15 | L +^IBA(354,DFN):15 I $T,'$D(^IBA(354,DFN)) S (DINUM,X)=DFN D FILE^DICN I +Y>0 S IBADD=1
|
---|
16 | I IBADD'=1 S IBEXERR=9
|
---|
17 | L -^IBA(354,DFN)
|
---|
18 | ;
|
---|
19 | ADDPQ K DO,DD,DIC,DR,DIE,DA
|
---|
20 | Q
|
---|
21 | ;
|
---|
22 | ADDEX(IBEXREA,IBDT,IBHOW,IBTYPE,IBOLDAUT) ; -- add entry to 354.1 and update
|
---|
23 | ; -- this will become the active entry for this effective date
|
---|
24 | ; other entries for this effective date should be cancelled
|
---|
25 | ; prior to making this call
|
---|
26 | ;
|
---|
27 | ; -- input dfn = pt ien (required)
|
---|
28 | ; ibexrea = pointer to exemption reason file (required)
|
---|
29 | ; ibdt = internal form of effective date (required)
|
---|
30 | ; ibhow = 1=system added, 2=user override (optional) default =1
|
---|
31 | ; ibtype = type of exemption (optional) default =1 (copay)
|
---|
32 | ; iboldaut = date (optional) if defined is the date of a previous exemption status (automatic) that needs to be inactivated
|
---|
33 | ;
|
---|
34 | ; -- returns ibadde = ibexrea^ibdt or null if not added
|
---|
35 | ; iberr = error if occurs else null
|
---|
36 | ;
|
---|
37 | L +^IBA(354,DFN):30 I '$T S IBEXERR=1 W:$D(IBTALK)&('$D(ZTQUEUED)) !,"ENTRY LOCKED" G ADDEXQ
|
---|
38 | A1 I '$D(^IBA(354,DFN,0)) D ADDP G ADDEXQ:$G(IBEXERR)
|
---|
39 | ;
|
---|
40 | N IBDGMTA,IBDGMTP,IBDGMTF
|
---|
41 | I $D(DGMTA) S IBDGMTA=$G(DGMTA),IBDGMTP=$G(DGMTP),IBDGMTF=$G(DGMTINF)
|
---|
42 | N X,X1,X2,Y,IBCNT,DGMTA,DGMTP,DGMTINF
|
---|
43 | I $D(IBDGMTA) S DGMTA=$G(IBDGMTA),DGMTP=$G(IBDGMTP),DGMTINF=$G(IBDGMTF)
|
---|
44 | S IBWHER=12,IBEXERR="",IBADDE=""
|
---|
45 | ;
|
---|
46 | ; - one last quick check
|
---|
47 | I IBDT'?7N S IBEXERR=3 G ADDEXQ
|
---|
48 | I DUZ,$G(^VA(200,+DUZ,0))="" S IBEXERR=8 G ADDEXQ
|
---|
49 | ; if DUZ=0, it will be considered as .5 (POSTMASTER) by the input template [IB NEW EXEMPTION]
|
---|
50 | ;
|
---|
51 | D BEFORE^IBARXEVT ;get prior exemption
|
---|
52 | ;
|
---|
53 | N IBSTAT,IBEXDA
|
---|
54 | S IBSTAT=$P($G(^IBE(354.2,+IBEXREA,0)),"^",4)
|
---|
55 | S IBHOW=$S('$D(IBHOW):1,IBHOW="":1,IBHOW>2:1,IBHOW<1:1,1:IBHOW)
|
---|
56 | S IBTYPE=$S('$D(IBTYPE):1,IBTYPE="":1,1:IBTYPE)
|
---|
57 | ;I '$D(IBACTION) S IBACTION="ADD"
|
---|
58 | ;
|
---|
59 | ; -- inactivate a current autoexempt of no longer autoexempt
|
---|
60 | I $G(IBOLDAUT)?7N D INACT^IBAUTL7(IBOLDAUT) ;I '$D(ZTQUEUED),$D(IBTALK) W !,"Inactivating current non-income based exemption for patient"
|
---|
61 | ;
|
---|
62 | ; -- if forcing a new entry to correct problems
|
---|
63 | I $G(IBFORCE)?7N D INACT^IBAUTL7(IBFORCE)
|
---|
64 | ;
|
---|
65 | ; -- check for duplicate entry
|
---|
66 | I $G(IBOLDAUT)'?7N,$G(IBFORCE)'?7N,$$DUPL() W:'$D(ZTQUEUED)&($D(IBTALK)) !,"Exemption Attempting to Add is a duplicate, nothing added!",! G ADDEXQ
|
---|
67 | ;
|
---|
68 | ; -- inactivate previous active entries
|
---|
69 | D INACT^IBAUTL7(IBDT) I $G(IBEXERR) G ADDEXQ
|
---|
70 | ;
|
---|
71 | ; -- if no income data from conversion set date = start date
|
---|
72 | I $D(IBCONVER),$P($G(^IBE(354.2,+IBEXREA,0)),"^",5)=210 S IBDT=$$STDATE^IBARXEU
|
---|
73 | ;
|
---|
74 | ; -- add entry
|
---|
75 | S DIC="^IBA(354.1,",DIC(0)="L",X=IBDT K DO,DD D FILE^DICN
|
---|
76 | S (IBEXDA,DA)=+Y I Y<1 W:'$D(ZTQUEUED)&($D(IBTALK)) !,"Can't add entry to exemption file" S IBEXERR=4 G ADDEXQ
|
---|
77 | ;
|
---|
78 | ; -- edit new entry
|
---|
79 | S DIE="^IBA(354.1,",DR="[IB NEW EXEMPTION]" ; use compiled template
|
---|
80 | ;
|
---|
81 | ;DR=".02////"_DFN_";.03////"_IBTYPE_";.04////"_IBSTAT_";.05////"_IBEXREA_";.06////"_IBHOW_";.07////"_DUZ_";.08///NOW;.1////1;.11////"_$G(IBASIG)
|
---|
82 | ;
|
---|
83 | D ^DIE K DIC,DIE,DA,DR
|
---|
84 | I $D(Y) S IBEXERR=5 G ADDEXQ
|
---|
85 | S IBADDE=IBEXREA_"^"_IBDT
|
---|
86 | ;
|
---|
87 | ; --if effective date is in last 365 days make current
|
---|
88 | I IBDT>$$MINUS^IBARXEU0(DT) D CURREX^IBAUTL7(IBSTAT,IBDT) I $G(IBEXERR) G ADDEXQ
|
---|
89 | ;
|
---|
90 | I '$D(ZTQUEUED),$G(IBADDE),$D(IBTALK) W !!,"Medication Copayment Exemption Status Updated: ",$P(^IBE(354.2,+IBADDE,0),"^")," ",$$DAT1^IBOUTL($P(IBADDE,"^",2))
|
---|
91 | ; -- setup and call event driver
|
---|
92 | I '$D(IBCONVER) D ;if not from conversion do following
|
---|
93 | .D AFTER^IBARXEVT
|
---|
94 | .S IBEVT=$$RXST^IBARXEU(DFN,$S(IBDT<$$STDATE^IBARXEU:$$STDATE^IBARXEU,1:IBDT))
|
---|
95 | .D ^IBARXEVT
|
---|
96 | .I IBSTAT D CANCEL^IBARXEU3 ;exempt patient cancel old charges
|
---|
97 | .D ^IBARXEB ; process bulletins and alerts
|
---|
98 | ;
|
---|
99 | ADDEXQ ;
|
---|
100 | L -^IBA(354,DFN)
|
---|
101 | I $G(IBEXERR) D ^IBAERR
|
---|
102 | K DO,DD,DIC,DIE,DA,DR,IBEVT,IBEVTP,IBEVTA,IBASIG,IBARCAN
|
---|
103 | Q
|
---|
104 | ;
|
---|
105 | DUPL() ; -- see if entry is a duplicate
|
---|
106 | N X,Y
|
---|
107 | S X=0
|
---|
108 | S Y=$$LST^IBARXEU0(DFN,IBDT)
|
---|
109 | I IBDT=+Y,+IBEXREA=+$P(Y,"^",5),IBTYPE=$P(Y,"^",3) S X=1
|
---|
110 | Q X
|
---|