1 | IBARXEU3 ;ALB/AAS - RX COPAY EXEMPTION PROCESS AR CANCELS ; 8-JAN-93
|
---|
2 | ;;Version 2.0 ; INTEGRATED BILLING ;**16,34**; 21-MAR-94
|
---|
3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | CANCEL ; Cancel Rx copay charges when veteran becomes exempt.
|
---|
6 | ; Required variable input:
|
---|
7 | ; DFN -- Pointer to the patient in file #2
|
---|
8 | ; IBSTAT -- patient is non-exempt (0) or exempt (1)
|
---|
9 | ; IBEVTA -- Zeroth node in #354.1 of CURRENT exemption
|
---|
10 | ; IBEVTP -- Zeroth node in #354.1 of PRIOR exemption
|
---|
11 | ;
|
---|
12 | N IBDT,IBEDT,IBCODA,IBCODP,IBSITE,IBAFY,IBATYP,IBCHRG,IBXX
|
---|
13 | N IBCRES,IBERR,IBFAC,IBIL,IBL,IBLAST,IBLDT,IBN,IBND,IBNN,IBNOW,IBFOUND
|
---|
14 | N IBPARNT,IBPARNT1,IBSEQNO,IBUNIT,IBVLAST,IBCODVL,IBANVD,IBFIL
|
---|
15 | ;
|
---|
16 | ; - veteran must be currently exempt,
|
---|
17 | I 'IBSTAT G CANCELQ
|
---|
18 | ;
|
---|
19 | ; - due to income < pension,
|
---|
20 | S IBCODP=$$ACODE^IBARXEU0(IBEVTP),IBCODA=$$ACODE^IBARXEU0(IBEVTA)
|
---|
21 | G:IBCODA'=120 CANCELQ
|
---|
22 | ;
|
---|
23 | ; - when s/he was previously non-exempt, due to no income data,
|
---|
24 | I $S(IBCODP="":0,IBCODP=210:0,1:1) G CANCELQ
|
---|
25 | ;
|
---|
26 | ; - after having been exempt due to income < pension.
|
---|
27 | S IBVLAST=$$LST^IBARXEU0(DFN,+IBEVTP-.01),IBCODVL=$$ACODE^IBARXEU0(IBVLAST)
|
---|
28 | G:IBCODVL'=120 CANCELQ
|
---|
29 | ;
|
---|
30 | ; - calculate 'anniversary date' from original exemption
|
---|
31 | S IBANVD=$$PLUS^IBARXEU0(+IBVLAST)
|
---|
32 | ;
|
---|
33 | ; - 'filing' date of new exemption must be within 90 days of this date
|
---|
34 | S IBFIL=$P($G(^DGMT(408.31,+$$LST^DGMTCOU1(DFN,+IBEVTA,3),0)),"^",7)
|
---|
35 | I $$FMDIFF^XLFDT(IBFIL,IBANVD)>90 G CANCELQ
|
---|
36 | ;
|
---|
37 | ; - set start date for cancelling at beginning of non-exempt period.
|
---|
38 | ; - end date: today (if the new exemption is the most current), or
|
---|
39 | ; the end of the exemption just started (day before
|
---|
40 | ; the most current exemption)
|
---|
41 | S IBBDT=+IBEVTA I IBEVTP,+IBEVTP<+IBEVTA S IBBDT=+IBEVTP
|
---|
42 | S:IBBDT<$$STDATE^IBARXEU IBBDT=$$STDATE^IBARXEU
|
---|
43 | S IBXX=$$LST^IBARXEU0(DFN)
|
---|
44 | S IBEDT=$S(+IBXX=+IBEVTA:DT,1:$$FMADD^XLFDT(+IBXX,-1))
|
---|
45 | ;
|
---|
46 | ; - move the start date up past the last cancellation end date
|
---|
47 | S X=-$O(^IBA(354.1,"ACAN",DFN,""))
|
---|
48 | I X'<IBBDT S IBBDT=X
|
---|
49 | ;
|
---|
50 | ; - quit if the start date slipped ahead of the end date
|
---|
51 | I IBEDT<IBBDT G CANCELQ
|
---|
52 | ;
|
---|
53 | ; - quit if there are no charges to cancel
|
---|
54 | S X=$O(^IB("APTDT",DFN,(IBBDT-.01))) I 'X!(X>(IBEDT+.9)) G CANCELQ
|
---|
55 | ;
|
---|
56 | ; - cancel the charges in billing
|
---|
57 | S Y=1 D ARPARM^IBAUTL I Y<0 G CANCELQ
|
---|
58 | ;
|
---|
59 | S IBDATE=IBBDT-.0001,IBFOUND=0
|
---|
60 | F S IBDATE=$O(^IB("APTDT",DFN,IBDATE)) Q:'IBDATE!((IBEDT+.9)<IBDATE) D
|
---|
61 | .S IBNN=0 F S IBNN=$O(^IB("APTDT",DFN,IBDATE,IBNN)) Q:'IBNN D BILL
|
---|
62 | ;
|
---|
63 | ; - cancel bills in AR, if at least one charge was cancelled
|
---|
64 | I IBFOUND S IBARCAN=1 D ARCAN^IBARXEU4(DFN,IBSTAT,IBBDT,IBEDT)
|
---|
65 | ;
|
---|
66 | CANCELQ Q
|
---|
67 | ;
|
---|
68 | BILL ; -- process cancelling one bill
|
---|
69 | S X=$G(^IB(IBNN,0)) Q:X=""
|
---|
70 | Q:+$P(X,"^",4)'=52 ;quit if not pharmacy co-pay
|
---|
71 | ;
|
---|
72 | ; -- find parent
|
---|
73 | S IBPARNT=$P(X,"^",9)
|
---|
74 | ;
|
---|
75 | S IBPARDT=$P($G(^IB(IBPARNT,1)),"^",2) ; get date of parent charge
|
---|
76 | I $S(IBPARDT="":1,IBPARDT<IBBDT:1,IBPARDT>(IBEDT+.9):1,1:0) Q ; ignore charges started before or after date range
|
---|
77 | ;
|
---|
78 | ; -- get most recent ibaction
|
---|
79 | S IBPARNT1=IBPARNT F S IBPARNT1=$P($G(^IB(IBPARNT,0)),"^",9) Q:IBPARNT1=IBPARNT S IBPARNT=IBPARNT1 ;gets parent of parents
|
---|
80 | S IBLAST=$$LAST^IBECEAU(IBPARNT)
|
---|
81 | ;
|
---|
82 | Q:$P(^IBE(350.1,$P(^IB(IBLAST,0),"^",3),0),"^",5)=2 ;quit if already cancelled
|
---|
83 | ;
|
---|
84 | S IBCRES=$O(^IBE(350.3,"B","RX COPAY INCOME EXEMPTION",0)) ; get cancellation reason
|
---|
85 | ;
|
---|
86 | D CANRX
|
---|
87 | Q
|
---|
88 | ;
|
---|
89 | CANRX ; -- do actual cancellation without calling ar
|
---|
90 | ; input : iblast := last entry for parnt
|
---|
91 | ; ibparnt := parent charge
|
---|
92 | ; ibnd := ^(0) node of iblast
|
---|
93 | ;
|
---|
94 | I $D(^IB(IBLAST,0)),$P(^IBE(350.1,$P(^IB(IBLAST,0),"^",3),0),"^",5)=2 G CANRXQ ;already cancelled
|
---|
95 | S IBND=$G(^IB(+IBLAST,0)),IBDUZ=DUZ
|
---|
96 | ;
|
---|
97 | S IBATYP=$P(^IBE(350.1,+$P($G(^IB(IBPARNT,0)),"^",3),0),"^",6) ;cancellation action type for parent
|
---|
98 | I '$D(^IBE(350.1,+IBATYP,0)) G CANRXQ
|
---|
99 | S IBSEQNO=$P(^IBE(350.1,+IBATYP,0),"^",5) I 'IBSEQNO G CANRXQ
|
---|
100 | S IBIL=$P($G(^IB(IBPARNT,0)),"^",11)
|
---|
101 | S IBUNIT=$S($P(IBND,"^",6):$P(IBND,"^",6),$D(^IB(IBPARNT,0)):$P(^(0),"^",6),1:0) I IBUNIT<1 G CANRXQ
|
---|
102 | S IBCHRG=$S($P(IBND,"^",7):$P(IBND,"^",7),$D(^IB(IBPARNT,0)):$P(^(0),"^",7),1:0) I IBCHRG<1 G CANRXQ
|
---|
103 | ;
|
---|
104 | D ADD^IBAUTL I +Y<1 G CANRXQ
|
---|
105 | S $P(^IB(IBN,1),"^",1)=IBDUZ,$P(^IB(IBN,0),"^",2,13)=DFN_"^"_IBATYP_"^"_$P(IBND,"^",4)_"^11^"_IBUNIT_"^"_IBCHRG_"^"_$P(IBND,"^",8)_"^"_IBPARNT_"^"_IBCRES_"^"_IBIL_"^^"_IBFAC
|
---|
106 | K ^IB("AC",1,IBN)
|
---|
107 | S DA=IBN,DIK="^IB(" D IX^DIK
|
---|
108 | S IBFOUND=1
|
---|
109 | ;
|
---|
110 | ; -- update parent to cancelled
|
---|
111 | ; note: parent status=10, cancellation due to exemption reason only
|
---|
112 | ; on charge cancelled so reports work right.
|
---|
113 | S DIE="^IB(",DA=IBPARNT,DR=".05////10;.1////"_IBCRES D ^DIE K DIE,DA,DR
|
---|
114 | CANRXQ Q
|
---|