| 1 | IBARXEU1 ;AAS/ALB - RX EXEMPTION UTILITY ROUTINE (CONT.) ; 3/27/07 3:10pm
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**26,112,74,275,367**;21-MAR-94;Build 11
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | STATUS(DFN,IBDT) ; -- Determine medication copayment exemption status
 | 
|---|
| 6 |  ; -- requests data from MAS
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  ;    returns :        = exemption reason (pointer to 354.2) ^ date
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  N X,Y
 | 
|---|
| 11 |  I $G(IBDT)="" S IBDT=DT
 | 
|---|
| 12 |  S X=$$AUTOST(DFN,IBDT)
 | 
|---|
| 13 |  I X'="" G STATUSQ
 | 
|---|
| 14 |  S X=$$INCST(DFN,IBDT)
 | 
|---|
| 15 | STATUSQ Q X
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 | AUTOST(DFN,IBDT) ; -- Determine automatically exempt patients.
 | 
|---|
| 18 |  ;    input :     dfn  =  patient file pointer
 | 
|---|
| 19 |  ;               ibdt  =  internal form of effective date
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  ;    returns :        =  exemption reason (pointer to 354.2) ^ date
 | 
|---|
| 22 |  ;                        null if no autostatus
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 |  N IBEXREA,IBEXMT,I
 | 
|---|
| 25 |  S (IBEXREA,IBEXMT)=""
 | 
|---|
| 26 |  I $G(IBDT)="" S IBDT=DT
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 |  ; -- ask mas if in receipt of pension/a&a/hb, etc.
 | 
|---|
| 29 |  ;    the automatic determinations
 | 
|---|
| 30 |  ;    returns:
 | 
|---|
| 31 |  ; sc>50% ^ rec a&a ^ rec hb ^ rec pen ^ n/a ^ non-vet ^ ^ POW ^ Unempl. 
 | 
|---|
| 32 |  ;   1         1        1         1                1        1      1
 | 
|---|
| 33 |  ;    pieces =1 if true
 | 
|---|
| 34 |  S IBEXMT=$$AUTOINFO^DGMTCOU1(DFN) I IBEXMT="" G AUTOSTQ
 | 
|---|
| 35 |  I IBEXMT[1 F I=1,2,3,4,6,8,9 I $P(IBEXMT,"^",I)=1 S IBEXREA=I*10 Q  ;lookup code is piece position time 10
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 | AUTOSTQ I IBEXREA="" Q IBEXREA
 | 
|---|
| 38 |  Q $O(^IBE(354.2,"ACODE",+IBEXREA,0))_"^"_IBDT
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 | INCST(DFN,IBDT) ; -- return medication copayment exemption reason/date
 | 
|---|
| 42 |  ; -- ask mas for income data
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 |  ;    returns :  = exemption reason (pointer to 354.2) ^ date
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 |  N IBDATA,X,DGMT,CLN,CONV
 | 
|---|
| 47 |  S IBDATA=$G(^DGMT(408.31,+$$LST^DGMTCOU1(DFN,IBDT,3),0)) ;get any test
 | 
|---|
| 48 |  I $$PLUS^IBARXEU0(+IBDATA)<IBDT S X=$O(^IBE(354.2,"ACODE",210,0))_"^"_IBDT G INCSTQ ; means test too old -no data
 | 
|---|
| 49 |  I $P(IBDATA,U,23)=2 D  G:CONV INCSTQ ;skip Edb conv. tests
 | 
|---|
| 50 |  .;Loop through the MT comments, Check for EDB converted test
 | 
|---|
| 51 |  .;No comments to check
 | 
|---|
| 52 |  .S (CLN,CONV)=0,DGMT=$$LST^DGMTCOU1(DFN,IBDT,3)
 | 
|---|
| 53 |  .F  S CLN=$O(^DGMT(408.31,+DGMT,"C",CLN)) Q:'CLN!(CONV)  D
 | 
|---|
| 54 |  ..;If most recent test is a converted test use current info from IBA(354
 | 
|---|
| 55 |  ..I $G(^DGMT(408.31,+DGMT,"C",CLN,0))["Z06 MT via Edb" S CONV=1,X=$P($G(^IBA(354,DFN,0)),"^",5)_"^"_$P($G(^IBA(354,DFN,0)),"^",3)
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 |  I $$NETW^IBARXEU1 S X=$$MTCOMP^IBARXEU5($$INCDT(IBDATA),IBDATA)
 | 
|---|
| 58 |  I '$$NETW^IBARXEU1 S X=$$INCDT(IBDATA),X=$P(X,"^",3)_"^"_$P(X,"^",2)
 | 
|---|
| 59 | INCSTQ Q X
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 | INCDT(IBDATA) ; -- calcualtes copay exemption status based on income
 | 
|---|
| 62 |  ; and net worth
 | 
|---|
| 63 |  ;    input  := zeroth node from 408.31
 | 
|---|
| 64 |  ;    output := 1 = exempt    ^date of test^ exemption reason 
 | 
|---|
| 65 |  ;              2 = non-exempt^...
 | 
|---|
| 66 |  ;              3 = pending adjudication (if active)^...
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 |  N X,IBDT,IBINCOM,IBEXREA,IBDEPEN,IBNETW,IBTABLE,IBLEVEL,IBTHRES
 | 
|---|
| 69 |  I '$D(DFN) N DFN S DFN=$P(IBDATA,"^",2)
 | 
|---|
| 70 |  S IBEXREA=""
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  ; -- if test incomplete, no longer required, no longer applicable, or
 | 
|---|
| 73 |  ;    required set to no income data 
 | 
|---|
| 74 |  ;    autoexempt test should be done first before getting to here
 | 
|---|
| 75 |  S X=$P(IBDATA,"^",3) I X=1!(X=3)!(X=10)!(X=9)!($P(IBDATA,"^",14)) S IBEXREA=$S($P(IBDATA,"^",14):110,1:210) G NO
 | 
|---|
| 76 |  ;
 | 
|---|
| 77 |  S IBDT=+IBDATA
 | 
|---|
| 78 |  S IBINCOM=$P(IBDATA,"^",4)-$P(IBDATA,"^",15) I IBINCOM<0 S IBINCOM=0
 | 
|---|
| 79 |  S IBDEPEN=$P(IBDATA,"^",18),IBNETW=$P(IBDATA,"^",5)
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 |  ; -- get A&A income level
 | 
|---|
| 82 |  ;S IBLEVEL=$$THRES(IBDT,2,IBDEPEN)
 | 
|---|
| 83 |  S IBLEVEL=$$THRES(IBDT,$S($E(IBDT,1,5)'<29612:1,1:2),IBDEPEN)
 | 
|---|
| 84 |  I $P(IBLEVEL,"^",3) S IBPRIOR=$P(IBLEVEL,"^",3)
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  S IBEXREA=120 ; low income
 | 
|---|
| 87 |  I IBINCOM>+IBLEVEL S IBEXREA=110 G NO ;high income not exempt
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 |  I '$$NETW G NO
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 |  ; -- get networth threshold amount
 | 
|---|
| 92 |  S IBTHRES=+$$THRES(IBDT,4,0)
 | 
|---|
| 93 |  ; -- low income check for net worth
 | 
|---|
| 94 |  S IBEXREA=$S((IBINCOM+IBNETW)>IBTHRES:130,1:120)
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 | NO ; -- not enough information
 | 
|---|
| 97 |  I IBEXREA="" S IBEXREA=210
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 |  I $$NETW S Y=$S(IBEXREA=110:2,IBEXREA=120:1,IBEXREA=130:3,1:2)
 | 
|---|
| 100 |  I '$$NETW S Y=$S(IBEXREA=120:1,1:2)
 | 
|---|
| 101 |  ;
 | 
|---|
| 102 | INCDTQ Q Y_"^"_+IBDATA_"^"_$O(^IBE(354.2,"ACODE",+IBEXREA,0))
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 | THRES(DATE,TYPE,DEPEND) ; -- return threshold amount 
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 |  ; -- if date is less than 12/1/92 will use 12/1 92 rates
 | 
|---|
| 107 |  ;     date =: fileman format of effective date
 | 
|---|
| 108 |  ;     type =: 2= pension plus A&A   1992 thru 1995
 | 
|---|
| 109 |  ;     type =: 1= basic pension 1996 to present
 | 
|---|
| 110 |  ;     depend =: number of dependents
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 |  ; -- returns rate^effective date^prior year
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 |  I DATE<2921201 S DATE=2921201 ; use threshold rates from 12/1/92
 | 
|---|
| 115 |  N IBTABLE,IBLEVEL,IBPRIOR
 | 
|---|
| 116 |  S IBLEVEL=""
 | 
|---|
| 117 |  ; -- get entry to determine income amounts
 | 
|---|
| 118 |  S IBTABLE=$G(^IBE(354.3,+$O(^(+$O(^IBE(354.3,"AIVDT",TYPE,-(DATE+.000001))),0)),0))
 | 
|---|
| 119 |  G:IBTABLE="" THRESQ
 | 
|---|
| 120 |  I TYPE=4 S DEPEND=0
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 |  ; --see if rate is for prior year
 | 
|---|
| 123 |  S IBPRIOR="" I $$PLUS^IBARXEU0(+IBTABLE)<DATE S IBPRIOR=+IBTABLE
 | 
|---|
| 124 |  ;
 | 
|---|
| 125 |  ; -- rates begin in piece 3 for veteran alone, piece 4 for 1 dependent..
 | 
|---|
| 126 |  S IBLEVEL=$S(DEPEND<9:$P(IBTABLE,"^",DEPEND+3),1:"")
 | 
|---|
| 127 |  I IBLEVEL="" S IBLEVEL=$P(IBTABLE,"^",4)+((DEPEND-1)*$P(IBTABLE,"^",12))
 | 
|---|
| 128 | THRESQ Q IBLEVEL_"^"_+IBTABLE_"^"_IBPRIOR
 | 
|---|
| 129 |  ;
 | 
|---|
| 130 | NETW() ; -- use networth in determining copay exemptions - specs keep changing
 | 
|---|
| 131 |  ;    returns 1 if should use networth in exemption determination
 | 
|---|
| 132 |  ;    returns 0 if should not use networth in exemption
 | 
|---|
| 133 |  Q 0
 | 
|---|