| 1 | IBCNS ;ALB/AAS - IS INSURANCE ACTIVE ; 22-JULY-91 | 
|---|
| 2 | ;;2.0;INTEGRATED BILLING;**28,43,80,82,133**;21-MAR-94 | 
|---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | ;MAP TO DGCRNS | 
|---|
| 6 | ; | 
|---|
| 7 | ;Input   -  DFN       = patient | 
|---|
| 8 | ;        -  IBINDT  = (optional) date to check ins active for or today if not defined | 
|---|
| 9 | ;        -  IBOUTP  = (optional) 1 if want active insurance returned in IBDD(insurance company)=node in patient file | 
|---|
| 10 | ;        -            = 2 if want all ins returned | 
|---|
| 11 | ; | 
|---|
| 12 | ;Output  -  IBINS   = 1 if has active ins., 0 if no active ins. | 
|---|
| 13 | ;        -  IBDD()  = internal node in patient file of valid ins. | 
|---|
| 14 | ;        -  IBDDI() = internal node in patient file of invalid ins. | 
|---|
| 15 | ; | 
|---|
| 16 | % N J,X S IBINS=0 K IBDD,IBDDI | 
|---|
| 17 | S J=0 F  S J=$O(^DPT(DFN,.312,J)) Q:'J  I $D(^DPT(DFN,.312,J,0)) S X=^(0) D CHK | 
|---|
| 18 | Q | 
|---|
| 19 | ; | 
|---|
| 20 | CHK ; | 
|---|
| 21 | ;Input   -  IBI  = entry in insurance multiple | 
|---|
| 22 | ; | 
|---|
| 23 | S Z=$S($D(IBINDT):IBINDT,1:DT),Z1=$S($D(IBOUTP):IBOUTP,1:0) | 
|---|
| 24 | G:'$D(^DIC(36,+X,0)) CHKQ S X1=^(0) ;insurance company entry doesn't exist | 
|---|
| 25 | I $P(X,"^",8) G:Z<$P(X,"^",8) CHKQ ;effective date later than care | 
|---|
| 26 | I $P(X,"^",4) G:Z>$P(X,"^",4) CHKQ ;care after expiration date | 
|---|
| 27 | I $P($G(^IBA(355.3,+$P(X,"^",18),0)),"^",11) G CHKQ ;plan is inactive | 
|---|
| 28 | G:$P(X1,"^",5) CHKQ ;insurance company inactive | 
|---|
| 29 | I '$G(IBWNR) G:$P(X1,"^",2)="N" CHKQ ;insurance company will not reimburse | 
|---|
| 30 | S IBINS=1 I Z1 D | 
|---|
| 31 | .S IBDD(+X)=X | 
|---|
| 32 | .Q:'$P(IBDD(+X),"^",18) | 
|---|
| 33 | .S Y=$G(^IBA(355.3,+$P(IBDD(+X),"^",18),0)) | 
|---|
| 34 | .I $P(Y,"^",4)'="" S $P(IBDD(+X),"^",3)=$P(Y,"^",4) ; move group number | 
|---|
| 35 | .I $P(Y,"^",3)'="" S $P(IBDD(+X),"^",15)=$P(Y,"^",3) ; move group name | 
|---|
| 36 | CHKQ I Z1=2&('$D(IBDD(+X))) D | 
|---|
| 37 | .S IBDDI(+X)=X | 
|---|
| 38 | .Q:'$P(IBDDI(+X),"^",18) | 
|---|
| 39 | .S Y=$G(^IBA(355.3,+$P(IBDDI(+X),"^",18),0)) | 
|---|
| 40 | .I $P(Y,"^",4)'="" S $P(IBDDI(+X),"^",3)=$P(Y,"^",4) ; move group number | 
|---|
| 41 | .I $P(Y,"^",3)'="" S $P(IBDDI(+X),"^",15)=$P(Y,"^",3) ; move group name | 
|---|
| 42 | K X,X1,Z,Z1,Y Q | 
|---|
| 43 | ; | 
|---|
| 44 | DD ;  - called from input transform and x-refs for field 101,102,103 | 
|---|
| 45 | ;  - input requires da=internal entry number in 399 | 
|---|
| 46 | ;  - outputs IBdd(ins co.) array | 
|---|
| 47 | ; patch 80 - Companies that Will Not Reimburse should be included so they can be added to the bill | 
|---|
| 48 | N DFN,IBWNR S DFN=$P(^DGCR(399,DA,0),"^",2),IBOUTP=1,IBINDT=$S(+$G(^DGCR(399,DA,"U")):+$G(^("U")),1:DT),IBWNR=1 | 
|---|
| 49 | D % | 
|---|
| 50 | DDQ K IBOUTP,IBINDT Q | 
|---|
| 51 | ; | 
|---|
| 52 | ; | 
|---|
| 53 | DISP ;  -Display all insurance company information | 
|---|
| 54 | ;  -input DFN | 
|---|
| 55 | ; | 
|---|
| 56 | N IBDTIN | 
|---|
| 57 | DISPDT ; Entrypoint if IBDTIN is to be used to display coverage | 
|---|
| 58 | Q:'$D(DFN)  D:'$D(IOF) HOME^%ZIS | 
|---|
| 59 | N X,IBINS,IBX | 
|---|
| 60 | D ALL^IBCNS1(DFN,"IBINS") | 
|---|
| 61 | ; | 
|---|
| 62 | D HDR | 
|---|
| 63 | I '$D(IBINS) W !,"    No Insurance Information" G DISPQ | 
|---|
| 64 | ; | 
|---|
| 65 | S X=0 F  S X=$O(IBINS(X)) Q:'X  S IBINS=IBINS(X,0) D D1 I +$G(IBCOVEXT) D D2EXT ; display | 
|---|
| 66 | ; | 
|---|
| 67 | DISPQ W ! S X=+$G(^IBA(354,DFN,60)) I +X W !,?16,"*** Verification of No Coverage ",$$FMTE^XLFDT(X)," ***" | 
|---|
| 68 | I $$BUFFER^IBCNBU1(DFN) W !,?17,"***  Patient has Insurance Buffer entries  ***" | 
|---|
| 69 | Q | 
|---|
| 70 | ; | 
|---|
| 71 | OLDISP ;  -Display all insurance company information | 
|---|
| 72 | ;  -input DFN | 
|---|
| 73 | ; | 
|---|
| 74 | Q:'$D(DFN)  D:'$D(IOF) HOME^%ZIS | 
|---|
| 75 | ; | 
|---|
| 76 | S IBOUTP=2 D IBCNS | 
|---|
| 77 | ; | 
|---|
| 78 | N IBDTIN | 
|---|
| 79 | D HDR | 
|---|
| 80 | I '$D(IBDD),'$D(IBDDI) W !,"    No Insurance Information" G DISPQ | 
|---|
| 81 | ; | 
|---|
| 82 | S X="" F  S X=$O(IBDD(X)) Q:X=""  S IBINS=IBDD(X) D D1 ;active insurance | 
|---|
| 83 | S X="" F  S X=$O(IBDDI(X)) Q:X=""  S IBINS=IBDDI(X) D D1 ;inactive ins | 
|---|
| 84 | ; | 
|---|
| 85 | OLDISPQ K IBDD,IBDDI,IBX | 
|---|
| 86 | Q | 
|---|
| 87 | ; | 
|---|
| 88 | HDR ; -- print standard header | 
|---|
| 89 | D HDR1("=",IOM-$S($G(IBDTIN):1,1:4)) | 
|---|
| 90 | Q | 
|---|
| 91 | ; | 
|---|
| 92 | HDR1(CHAR,LENG) ; -- print header, specify character | 
|---|
| 93 | N OFF | 
|---|
| 94 | S OFF=$S($G(IBDTIN):0,1:2) | 
|---|
| 95 | W !?(1+OFF),"Insurance",?(13+OFF),"COB",?(17+OFF),"Subscriber ID",?(35+OFF),"Group",?(47+OFF),"Holder",?(55+OFF),"Effect"_$S('OFF:"",1:"i")_"ve",?(65+OFF+$S('OFF:0,1:1)),"Expires" W:'OFF ?75,"Only" | 
|---|
| 96 | I $G(CHAR)'="",LENG S X="",$P(X,CHAR,LENG)="" W !?(1+OFF),X | 
|---|
| 97 | Q | 
|---|
| 98 | ; | 
|---|
| 99 | D1 ; If IBDTIN is defined, this date is used for displaying insurance | 
|---|
| 100 | ; coverage if plan does not provide not full coverage for all categories | 
|---|
| 101 | N X,Y,Z,CAT,OFF Q:'$D(IBINS) | 
|---|
| 102 | S OFF=$S($G(IBDTIN):0,1:2) | 
|---|
| 103 | W !?(1+OFF),$S($D(^DIC(36,+IBINS,0)):$E($P(^(0),"^",1),1,10),1:"UNKNOWN") | 
|---|
| 104 | S X=$P(IBINS,U,20) I X'="" S X=$S(X=1:"p",X=2:"s",X=3:"t",1:"") | 
|---|
| 105 | W ?(14+OFF),X | 
|---|
| 106 | W ?(17+OFF),$E($P(IBINS,"^",2),1,16) | 
|---|
| 107 | ;W ?40,$E($S($P(IBINS,"^",15)'="":$P(IBINS,"^",15),1:$P(IBINS,"^",3)),1,10) | 
|---|
| 108 | W ?(35+OFF),$E($$GRP($P(IBINS,"^",18)),1,10) | 
|---|
| 109 | S X=$P(IBINS,"^",6) W ?(47+OFF),$S(X="v":"SELF",X="s":"SPOUSE",1:"OTHER") | 
|---|
| 110 | W ?(55+OFF),$$DAT1^IBOUTL($P(IBINS,"^",8)),?(65+OFF+$S(OFF:1,1:0)),$$DAT1^IBOUTL($P(IBINS,"^",4)) | 
|---|
| 111 | I 'OFF D | 
|---|
| 112 | .I $P($G(^DIC(36,+IBINS,0)),U,2)="N" W ?75,"*WNR*" Q | 
|---|
| 113 | .S X="" F CAT="INPATIENT","OUTPATIENT","PHARMACY","MENTAL HEALTH","DENTAL" D | 
|---|
| 114 | .. S Y=$$PLCOV^IBCNSU3(+$P(IBINS,"^",18),$G(IBDTIN),+$O(^IBE(355.31,"B",CAT,""))) | 
|---|
| 115 | .. I +Y S Z=$S(CAT="PHARMACY":"R",1:$E(CAT)) S:Y>1 Z=$C($A(Z)+32) S X=X_Z | 
|---|
| 116 | .S:X="" X="no CV" I X'?5U W ?75,X | 
|---|
| 117 | Q | 
|---|
| 118 | ; | 
|---|
| 119 | GRP(IBCPOL) ; -- return group name/group policy | 
|---|
| 120 | ;     input:   IBCPOL = pointer to entry in 355.3 | 
|---|
| 121 | ;    output:   group name or group number, if both group NUMBER | 
|---|
| 122 | ;              if neither 'Individual PLAN' | 
|---|
| 123 | ; | 
|---|
| 124 | N X,Y S X="" | 
|---|
| 125 | S X=$G(^IBA(355.3,+$G(IBCPOL),0)) | 
|---|
| 126 | S Y=$S($P(X,"^",4)'="":$P(X,"^",4),1:$P(X,"^",3)) | 
|---|
| 127 | I $P(X,"^",10) S Y="Ind. Plan "_Y | 
|---|
| 128 | GRPQ Q Y | 
|---|
| 129 | ; | 
|---|
| 130 | D2EXT ; display Conditional Coverage Comments and Riders (DFN,IBINS,X required) | 
|---|
| 131 | N Y,CAT,IBX,IBY,IBZ,ARR,IBCDFN S IBCDFN=X,IBZ=0 N X | 
|---|
| 132 | F CAT="INPATIENT","OUTPATIENT","PHARMACY","MENTAL HEALTH","DENTAL" D | 
|---|
| 133 | . S Y=$$PLCOV^IBCNSU3(+$P(IBINS,"^",18),$G(IBDTIN),+$O(^IBE(355.31,"B",CAT,"")),.ARR) | 
|---|
| 134 | . S IBY=CAT_" Conditional: " | 
|---|
| 135 | . I +Y>1 S IBX=0 F  S IBX=$O(ARR(IBX)) Q:'IBX  W !,?17,IBY,?47,ARR(IBX) S IBY="",IBZ=1 | 
|---|
| 136 | ; | 
|---|
| 137 | K ARR D RIDERS^IBCNSU3(DFN,IBCDFN,.ARR) | 
|---|
| 138 | S IBY="Policy Riders: " S IBX=0 F  S IBX=$O(ARR(IBX)) Q:'IBX  W !,?17,IBY,?35,ARR(IBX) S IBY="",IBZ=1 | 
|---|
| 139 | I +IBZ W ! | 
|---|
| 140 | Q | 
|---|