| 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
 | 
|---|