| 1 | IBBFAPI ;OAK/ELZ - FOR OTHER PACKAGES TO QUERY INSURANCE INFO ;19-AUG-2004
|
---|
| 2 | ;;2.0;INTEGRATED BILLING;**267,297,249,317,361**;21-MAR-94;Build 9
|
---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
| 4 | ;
|
---|
| 5 | ; -- see IBBDOC for API documentation
|
---|
| 6 | ; no applications should call here directly
|
---|
| 7 | INSUR(DFN,IBDT,IBSTAT,IBR,IBFLDS) ; Return Patient Insurance Information
|
---|
| 8 | ;
|
---|
| 9 | N ERROR,ERRORT,FCNT,IBPLN,ICNT,INSP,N,N1,NOK,PASS,PASS1,X,%
|
---|
| 10 | K ERRORT D ERRORLD
|
---|
| 11 | S NOK=-1
|
---|
| 12 | S DFN=$G(DFN)
|
---|
| 13 | S IBSTAT=$G(IBSTAT)
|
---|
| 14 | S IBDT=$P($G(IBDT),".")
|
---|
| 15 | S IBFLDS=$G(IBFLDS)
|
---|
| 16 | I IBDT,IBSTAT["A" S ERROR=107 D ERROR Q NOK
|
---|
| 17 | S (ERROR,PASS)=0 K IBR
|
---|
| 18 | I 'DFN S ERROR=102 D ERROR Q NOK
|
---|
| 19 | I '$D(^DPT(DFN)) S ERROR=106 D ERROR Q NOK
|
---|
| 20 | I IBDT]"",IBDT'?7N S ERROR=104 D ERROR Q NOK
|
---|
| 21 | I +IBDT=0 D NOW^%DTC S IBDT=$P(%,".",1)
|
---|
| 22 | I IBSTAT]"" N Y F X=1:1:$L(IBSTAT) S Y=$E(IBSTAT,X) I '$F("^A^R^P^O^I^B^",(U_Y_U)) S ERROR=105 D ERROR Q
|
---|
| 23 | I ERROR=105 Q NOK
|
---|
| 24 | I IBFLDS]"",IBFLDS'="*" N Y F X=1:1:$L(IBFLDS,",") D
|
---|
| 25 | . S Y=$P(IBFLDS,",",X)
|
---|
| 26 | . I Y'?1N.N S ERROR=103
|
---|
| 27 | . I Y?1N.N,(Y<1)!(Y>21) S ERROR=103
|
---|
| 28 | I ERROR=103 D ERROR Q NOK
|
---|
| 29 | K IBR
|
---|
| 30 | ; set buffer file flag
|
---|
| 31 | S (X,IBR("BUFFER"))=0 F S X=$O(^IBA(355.33,"C",DFN,X)) Q:'X S IBR("BUFFER")=IBR("BUFFER")+1
|
---|
| 32 | S (ICNT,N)=0 F S N=$O(^DPT(DFN,.312,N)) Q:'N I $D(^(N,0)) D
|
---|
| 33 | . S X=^DPT(DFN,.312,N,0)
|
---|
| 34 | . N X1
|
---|
| 35 | . S X1=$G(^DIC(36,+X,0)) I X1="" Q ; no insurance company entry
|
---|
| 36 | . S INSP=$P(X,U,1),IBPLN=$P(X,U,18)
|
---|
| 37 | . I IBSTAT'["R",$P(X1,U,2)="N" Q ; does not reimburse
|
---|
| 38 | . I IBSTAT'["B",$$INDEM^IBCNS1(X) Q ; indemnity policy
|
---|
| 39 | . S PASS1=0
|
---|
| 40 | . I IBSTAT'["A" D
|
---|
| 41 | . . I $P(X,U,8),IBDT<$P(X,U,8) S PASS1=1 Q ;effective after care date
|
---|
| 42 | . . I $P(X,U,4),IBDT>$P(X,U,4) S PASS1=1 Q ;terminated before care date
|
---|
| 43 | . . I $P($G(^IBA(355.3,+$P(X,U,18),0)),U,11) S PASS1=1 Q ;inactive plan
|
---|
| 44 | . . I $P(X1,U,5) S PASS1=1 Q ; inactive insurance company
|
---|
| 45 | . Q:PASS1
|
---|
| 46 | . S ICNT=ICNT+1
|
---|
| 47 | . S FCNT=$S(IBFLDS="*":22,1:$L(IBFLDS,",")) ; number of fields to pull
|
---|
| 48 | . S IBR("IBBAPI","INSUR",ICNT)=""
|
---|
| 49 | . I IBFLDS'="" F N1=1:1:FCNT D
|
---|
| 50 | . . N RET,RETVAL
|
---|
| 51 | . . S RET=$S(IBFLDS="*":N1,1:$P(IBFLDS,",",N1)),RETVAL="" I RET?1N.N,RET>0,RET<23 D @RET S IBR("IBBAPI","INSUR",ICNT,RET)=RETVAL
|
---|
| 52 | . I IBSTAT["P"!(IBSTAT["O")!(IBSTAT["I") D I PASS1=0 K IBR("IBBAPI","INSUR",ICNT) S ICNT=ICNT-1
|
---|
| 53 | . . S PASS1=0 Q:IBPLN=""
|
---|
| 54 | . . I IBSTAT["P",+$$PLCOV(IBPLN,IBDT,"PHARMACY")>0 S PASS1=1
|
---|
| 55 | . . I IBSTAT["O",+$$PLCOV(IBPLN,IBDT,"OUTPATIENT")>0 S PASS1=1
|
---|
| 56 | . . I IBSTAT["I",+$$PLCOV(IBPLN,IBDT,"INPATIENT")>0 S PASS1=1
|
---|
| 57 | I $D(IBR("IBBAPI","INSUR")),$O(IBR("IBBAPI","INSUR",0))'="ERROR" S PASS=1 F X=1:1 Q:'$D(IBR("IBBAPI","INSUR",X)) K:'$O(IBR("IBBAPI","INSUR",X,"")) IBR("IBBAPI","INSUR",X)
|
---|
| 58 | Q PASS
|
---|
| 59 | ERRORLD ; load error array
|
---|
| 60 | F X=1:1:9 S ERRORT(X+100)=$P($T(ERRORLD1+X),";;",2)
|
---|
| 61 | Q
|
---|
| 62 | ;
|
---|
| 63 | ERRORLD1 ; error messages
|
---|
| 64 | ;;DATABASE IS UNAVAILABLE
|
---|
| 65 | ;;PATIENT ID IS REQUIRED
|
---|
| 66 | ;;INVALID FIELD LIST
|
---|
| 67 | ;;INVALID EFFECTIVE DATE
|
---|
| 68 | ;;INVALID INSURANCE STATUS FILTER
|
---|
| 69 | ;;INVALID PATIENT ID
|
---|
| 70 | ;;INVALID COMBINATION, YOU CANNOT USE ""A"" WITH A DATE
|
---|
| 71 | ;;DATA SOURCE IS NOT DEFINED
|
---|
| 72 | ;;NO DATA ELEMENTS TO STORE
|
---|
| 73 | ;;
|
---|
| 74 | ERROR ;
|
---|
| 75 | K IBR S IBR("IBBAPI","INSUR","ERROR",ERROR)=ERRORT(ERROR)
|
---|
| 76 | Q
|
---|
| 77 | ;
|
---|
| 78 | 1 ; Ins. Comp. name
|
---|
| 79 | S RETVAL=$$GET1^DIQ(2.312,N_","_DFN_",",.01,"I")_U_$$GET1^DIQ(2.312,N_","_DFN_",",.01)
|
---|
| 80 | Q
|
---|
| 81 | 2 ; Ins. Comp. Street Address Line 1
|
---|
| 82 | S RETVAL=$$GET1^DIQ(36,INSP_",",.111)
|
---|
| 83 | Q
|
---|
| 84 | 3 ; Ins. Comp. City
|
---|
| 85 | S RETVAL=$$GET1^DIQ(36,INSP_",",.114)
|
---|
| 86 | Q
|
---|
| 87 | 4 ; Ins. Comp. State
|
---|
| 88 | S RETVAL=$$GET1^DIQ(36,INSP_",",.115,"I") S:RETVAL RETVAL=RETVAL_U_$$GET1^DIQ(36,INSP_",",.115)
|
---|
| 89 | Q
|
---|
| 90 | 5 ; Ins. Comp. Zip
|
---|
| 91 | S RETVAL=$$GET1^DIQ(36,INSP_",",.116)
|
---|
| 92 | Q
|
---|
| 93 | 6 ; Ins. Comp. Phone
|
---|
| 94 | S RETVAL=$$GET1^DIQ(36,INSP_",",.131)
|
---|
| 95 | Q
|
---|
| 96 | 7 ; Coordination of Benefits
|
---|
| 97 | S RETVAL=$$GET1^DIQ(2.312,N_","_DFN_",",.2,"I")_U_$$GET1^DIQ(2.312,N_","_DFN_",",.2)
|
---|
| 98 | I RETVAL="^" S RETVAL=""
|
---|
| 99 | Q
|
---|
| 100 | 8 ; Policy Name
|
---|
| 101 | S RETVAL=$$GET1^DIQ(2.312,N_","_DFN_",",.18,"I") S:RETVAL RETVAL=RETVAL_U_$$GET1^DIQ(355.3,RETVAL,.03)
|
---|
| 102 | Q
|
---|
| 103 | 9 ; Policy Reimbursable?
|
---|
| 104 | S RETVAL=$$GET1^DIQ(36,INSP_",",1,"I")
|
---|
| 105 | S RETVAL=$S(RETVAL="Y":"1^YES",RETVAL="*":"1^YES",RETVAL="**":"1^YES",RETVAL="":"1^YES",1:"0^NO")
|
---|
| 106 | Q
|
---|
| 107 | 10 ; Policy Effective Date
|
---|
| 108 | S RETVAL=$$GET1^DIQ(2.312,N_","_DFN_",",8,"I")
|
---|
| 109 | Q
|
---|
| 110 | 11 ; Policy Expiration Date
|
---|
| 111 | S RETVAL=$$GET1^DIQ(2.312,N_","_DFN_",",3,"I")
|
---|
| 112 | Q
|
---|
| 113 | 12 ; Subscriber Relationship
|
---|
| 114 | S RETVAL=$$GET1^DIQ(2.312,N_","_DFN_",",16,"I")
|
---|
| 115 | S RETVAL=$S(RETVAL="01":"P^PATIENT",RETVAL="02":"S^SPOUSE",RETVAL:"O^OTHER",1:"")
|
---|
| 116 | Q
|
---|
| 117 | 13 ; Subscriber Name
|
---|
| 118 | S RETVAL=$$GET1^DIQ(2.312,N_","_DFN_",",17)
|
---|
| 119 | Q
|
---|
| 120 | 14 ; Subscriber ID
|
---|
| 121 | S RETVAL=$$GET1^DIQ(2.312,N_","_DFN_",",1)
|
---|
| 122 | Q
|
---|
| 123 | 15 ; Pharmacy Coverage?
|
---|
| 124 | N IBCOV
|
---|
| 125 | S IBCOV=$$PLCOV(IBPLN,IBDT,"PHARMACY")
|
---|
| 126 | S RETVAL=$S(+IBCOV=0:"0^NO",1:"1^YES")
|
---|
| 127 | Q
|
---|
| 128 | 16 ; Outpatient Coverage?
|
---|
| 129 | N IBCOV
|
---|
| 130 | S IBCOV=$$PLCOV(IBPLN,IBDT,"OUTPATIENT")
|
---|
| 131 | S RETVAL=$S(+IBCOV=0:"0^NO",1:"1^YES")
|
---|
| 132 | Q
|
---|
| 133 | 17 ; Inpatient Coverage?
|
---|
| 134 | N IBCOV
|
---|
| 135 | S IBCOV=$$PLCOV(IBPLN,IBDT,"INPATIENT")
|
---|
| 136 | S RETVAL=$S(+IBCOV=0:"0^NO",1:"1^YES")
|
---|
| 137 | Q
|
---|
| 138 | 18 ; Group Number
|
---|
| 139 | S RETVAL=$$GET1^DIQ(355.3,$$GET1^DIQ(2.312,N_","_DFN_",",.18,"I")_",",.04)
|
---|
| 140 | Q
|
---|
| 141 | ;
|
---|
| 142 | 19 ; Patient Relationship to Subscriber
|
---|
| 143 | S RETVAL=$$GET1^DIQ(2.312,N_","_DFN_",",16,"I") S:RETVAL RETVAL=RETVAL_U_$$GET1^DIQ(2.312,N_","_DFN_",",16)
|
---|
| 144 | Q
|
---|
| 145 | ;
|
---|
| 146 | 20 ; VA Advantage and Tricare plan
|
---|
| 147 | S RETVAL=0 ; VA Advantage to be determined at a later date
|
---|
| 148 | N PLN,TYP1,TYP2,RETVAL1
|
---|
| 149 | S PLN=$$GET1^DIQ(2.312,N_","_DFN_",",.18,"I")
|
---|
| 150 | S TYP1=$$GET1^DIQ(355.3,PLN_",",.09,"I")
|
---|
| 151 | S TYP2=$$GET1^DIQ(355.1,TYP1_",",.03,"I")
|
---|
| 152 | S RETVAL1=$S(TYP2=7:1,1:0) ; determine if Tricare plan
|
---|
| 153 | S RETVAL=RETVAL_U_RETVAL1
|
---|
| 154 | Q
|
---|
| 155 | ;
|
---|
| 156 | 21 ; Plan Type
|
---|
| 157 | N PLN,TYP1
|
---|
| 158 | S PLN=$$GET1^DIQ(2.312,N_","_DFN_",",.18,"I")
|
---|
| 159 | S TYP1=$$GET1^DIQ(355.3,PLN_",",.09,"I")
|
---|
| 160 | S RETVAL=$S(TYP1:TYP1_U_$$GET1^DIQ(355.1,TYP1_",",.01,"I"),1:"")
|
---|
| 161 | Q
|
---|
| 162 | ;
|
---|
| 163 | 22 ; Subscriber Sex
|
---|
| 164 | D 12
|
---|
| 165 | I $E(RETVAL)="P" S RETVAL=$$GET1^DIQ(2,DFN_",",.02,"I") S:$L(RETVAL) RETVAL=RETVAL_U_$$GET1^DIQ(2,DFN_",",.02)
|
---|
| 166 | E S RETVAL=$$GET1^DIQ(2.312,N_","_DFN_",",3.12,"I") S:$L(RETVAL) RETVAL=RETVAL_U_$$GET1^DIQ(2.312,N_","_DFN_",",3.12)
|
---|
| 167 | Q
|
---|
| 168 | ;
|
---|
| 169 | PLCOV(IBPL,IBVDT,IBCAT) ; Determine if a specific plan covers a category of coverage as of a date
|
---|
| 170 | ; IBPL - pointer to file 355.3 group insurance plan (req)
|
---|
| 171 | ; IBVDT - fileman format visit date (req)
|
---|
| 172 | ; IBCAT - pointer to file 355.31 limitation of coverage category (req)
|
---|
| 173 | N CATLIM,X,Y
|
---|
| 174 | I '$G(IBPL)!('$G(IBVDT))!('$L($G(IBCAT))) Q 0
|
---|
| 175 | S X=0
|
---|
| 176 | S IBCAT=$O(^IBE(355.31,"B",IBCAT,"")) G:IBCAT="" PLCOVQ
|
---|
| 177 | S CATLIM=$O(^IBA(355.32,"APCD",IBPL,IBCAT,+$O(^IBA(355.32,"APCD",IBPL,IBCAT,-(IBVDT+1))),""))
|
---|
| 178 | S X=$S(CATLIM="":1,1:+$P($G(^IBA(355.32,CATLIM,0)),U,4))
|
---|
| 179 | PLCOVQ Q X
|
---|
| 180 | ;
|
---|