1 | IBARXEU ;AAS/ALB - RX EXEMPTION UTILITY ROUTINE ;2-NOV-92
|
---|
2 | ;;2.0;INTEGRATED BILLING;**20,222,293**;21-MAR-94;Build 1
|
---|
3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | ;
|
---|
6 | RXST(DFN,IBDT) ; -- Check rx income exemption status of patient
|
---|
7 | ;
|
---|
8 | ; input = : dfn = patient file pointer
|
---|
9 | ; ibdt = date to check for (optional) default is today
|
---|
10 | ;
|
---|
11 | ; returns : -1 if no data ^text^reason code^reason text^date of test
|
---|
12 | ; 0 if non exempt
|
---|
13 | ; 1 if exempt
|
---|
14 | ;
|
---|
15 | N X,Y,Z,IBX,IBON
|
---|
16 | ;
|
---|
17 | S IBON=$$ON^IBARXEU0 I IBON<1 Q IBON
|
---|
18 | ;
|
---|
19 | S IBX=""
|
---|
20 | I '$G(IBDT) S IBDT=DT
|
---|
21 | I IBDT>DT S IBDT=DT ; no future dates
|
---|
22 | ;
|
---|
23 | ; -- date before legislations
|
---|
24 | I IBDT<$$STDATE S IBX="0^NON-EXEMPT^^Date is Prior to Legislation^" G RXSTQ ; nobody exempt prior to legislation
|
---|
25 | ;
|
---|
26 | ; -- if no data on patient quit
|
---|
27 | S X=$G(^IBA(354,DFN,0))
|
---|
28 | I X=""!('$D(^IBA(354.1,"AP",DFN))) S IBX="-1^UNKNOWN^^Medication Copayment Exemption status never determined" G RXSTQ ; no data return -1
|
---|
29 | ;
|
---|
30 | ; -- use current status if ibdt not less than current test and
|
---|
31 | ; not greater than current test date +365
|
---|
32 | I IBDT'<$P(X,U,3),IBDT'>$$PLUS^IBARXEU0($P(X,U,3)) S IBX=$$IBX^IBARXEU0(DFN,IBDT) G RXSTQ
|
---|
33 | ;
|
---|
34 | ; -- if ibdt not less than current date but greater than
|
---|
35 | ; current test +365 is into future
|
---|
36 | I IBDT'<$P(X,U,3),IBDT>$$PLUS^IBARXEU0($P(X,U,3)) D
|
---|
37 | .S Y=$$LST^IBARXEU0(DFN,IBDT)
|
---|
38 | .;
|
---|
39 | .; -- see if patient was SC>50, can't be updated so don't say previous
|
---|
40 | .I $L($$ACODE^IBARXEU0(Y))<3 S IBX=+$P(X,U,4)_U_$$TEXT^IBARXEU0($P(X,U,4))_U_$$ACODE^IBARXEU0(Y)_U_$$REASON^IBARXEU0(X)_U_$P(X,U,3) Q
|
---|
41 | .;
|
---|
42 | .S IBX=+$P(X,U,4)_U_"Previously "_$$TEXT^IBARXEU0($P(X,U,4))_U_$$ACODE^IBARXEU0(Y)_U_"Requires new exemption. Previously "_$$REASON^IBARXEU0(X)_U_$P(X,U,3)
|
---|
43 | ;
|
---|
44 | ; -- if ibdt less than current date need old exemption data
|
---|
45 | I IBDT<$P(X,U,3) D G RXSTQ
|
---|
46 | .;
|
---|
47 | .; -- find status of prior test
|
---|
48 | .S Y=$$LST^IBARXEU0(DFN,IBDT)
|
---|
49 | .;
|
---|
50 | .; -- no previous data
|
---|
51 | .I Y="" D Q
|
---|
52 | ..S IBX="-1^UNKNOWN^^No data for date requested."
|
---|
53 | ..Q
|
---|
54 | .;
|
---|
55 | .S Z=$G(^IBA(354,DFN,0)),Z=$P(Z,U,5)_U_$P(Z,U,3) ; get status & date
|
---|
56 | .;
|
---|
57 | .; -- if old exemption is current for copay date
|
---|
58 | .I IBDT'>$$PLUS^IBARXEU0(+Y) D Q
|
---|
59 | ..S X=$G(^IBE(354.2,+$P(Y,U,5),0)) ; exemption reason node
|
---|
60 | ..S IBX=+$P(X,U,4)_U_$$TEXT^IBARXEU0($P(X,U,4))_U_$$ACODE^IBARXEU0(Y)_U_$$REASON^IBARXEU0(X)_U_$P(X,U,3)
|
---|
61 | ..Q
|
---|
62 | .;
|
---|
63 | .; -- if ibdt is greater than old exemption + 365
|
---|
64 | .; report previous
|
---|
65 | .I IBDT>$$PLUS^IBARXEU0(+Y) D Q
|
---|
66 | ..S X=$G(^IBE(354.2,+$P(Y,U,5),0)) ;exemption reason node
|
---|
67 | ..;
|
---|
68 | ..; -- see if patient was SC>50, can't be updated so don't say previous
|
---|
69 | ..I $L($$ACODE^IBARXEU0(Y))<3 S IBX=+$P(X,U,4)_U_$$TEXT^IBARXEU0($P(X,U,4))_U_$$ACODE^IBARXEU0(Y)_U_$$REASON^IBARXEU0(X)_U_$P(X,U,3) Q
|
---|
70 | ..;
|
---|
71 | ..S IBX=+$P(X,U,4)_U_"Previously "_$$TEXT^IBARXEU0($P(X,U,4))_U_$$ACODE^IBARXEU0(Y)_U_"Requires new exemption. Previously "_$$REASON^IBARXEU0(X)_U_$P(X,U,3)
|
---|
72 | ..Q
|
---|
73 | .Q
|
---|
74 | ;
|
---|
75 | RXSTQ Q IBX
|
---|
76 | ;
|
---|
77 | DISP(DFN,IBDT,NO,NULL) ; -- formats text to display
|
---|
78 | ; -- input = dfn
|
---|
79 | ; ibdt = date to check for
|
---|
80 | ; no = number of lines to print (1, 2, or 3)
|
---|
81 | ; null = if zero print unknown, if non-zero quit
|
---|
82 | ;
|
---|
83 | I '$G(IBDT) S IBDT=DT
|
---|
84 | I '$D(NULL) S NULL=1
|
---|
85 | I IBDT>DT S IBDT=DT ; no future dates
|
---|
86 | I '$G(NO) S NO=3
|
---|
87 | S X=$$RXST(DFN,IBDT)
|
---|
88 | S IBON=$$ON^IBARXEU0 I IBON<1 S X=IBON
|
---|
89 | I X<0&(NULL) G DISPQ
|
---|
90 | W !,"Medication Copayment Exemption Status: ",$P(X,U,2) G:NO<2 DISPQ
|
---|
91 | W !,$P(X,U,4) G:NO<3 DISPQ
|
---|
92 | I $P(X,U,5) W !,"Last Rx Copay Exemption date: " S Y=$P(X,U,5) D DT^DIQ
|
---|
93 | DISPQ Q
|
---|
94 | ;
|
---|
95 | STDATE() ; -- legislative start date for income exemption
|
---|
96 | Q 2921030
|
---|
97 | ;
|
---|
98 | ;
|
---|
99 | ACTIVE(IBZ) ; -- SCREEN for active field of billing exemptions file
|
---|
100 | ; only one entry per effective date can be active
|
---|
101 | ;
|
---|
102 | N IBX,IBY,T
|
---|
103 | S T=0
|
---|
104 | S IBZ=$S(IBZ=1:IBZ,$E(IBZ)="A":1,1:0)
|
---|
105 | I 'IBZ S T=1 G ACTIVEQ
|
---|
106 | S IBX=$G(^IBA(354.1,DA,0))
|
---|
107 | S IBY=$O(^IBA(354.1,"AIVDT",+$P(IBX,U,3),+$P(IBX,U,2),-$P(IBX,U),0))
|
---|
108 | I 'IBY!(IBY=DA) S T=1
|
---|
109 | W:$D(IBTALK) !!,"Another entry is already Active, You must inactivate it first",!!
|
---|
110 | ACTIVEQ Q T
|
---|