1 | IBCNS2 ;ALB/AAS - INSURANCE POLICY CALLS FROM FILE 399 DD ;22-JULY-91
|
---|
2 | ;;2.0;INTEGRATED BILLING;**28,43,80,51,137,155**;21-MAR-94
|
---|
3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | Q
|
---|
6 | DD(IBX,IBDA,LEVEL) ; - called from input transform for field 111,112,113
|
---|
7 | ; -- input ibx = x from input transform
|
---|
8 | ; ibda = internal entry in 399
|
---|
9 | ; level = 1=primary, 2=secondary, 3=tertiary
|
---|
10 | ; -- output returns x=internal entry in 2.3121 (ins. Mult.) if valid
|
---|
11 | ;
|
---|
12 | N DFN,ACTIVE,INSDT
|
---|
13 | D VAR
|
---|
14 | S X=$$SEL(IBX,DFN,INSDT,ACTIVE)
|
---|
15 | I +X<1 K X
|
---|
16 | DDQ Q
|
---|
17 | ;
|
---|
18 | VAR S DFN=$P(^DGCR(399,IBDA,0),"^",2),ACTIVE=1,INSDT=$S(+$G(^DGCR(399,IBDA,"U")):+$G(^("U")),1:DT)
|
---|
19 | Q
|
---|
20 | ;
|
---|
21 | SEL(IBX,DFN,INSDT,ACTIVE) ; -- Select insurance policy
|
---|
22 | ; -- Input IBX = x from input transform
|
---|
23 | ; DFN = patient
|
---|
24 | ; INSDT = (optional) Active date of ins. (default = dt)
|
---|
25 | ; ACTIVE = (optional) 1 if want active (default)
|
---|
26 | ; = 2 if want all ins returned
|
---|
27 | ;
|
---|
28 | ; -- Output = pointer to 36 ^ pointer to 2.3121 ^ pointer to 355.3
|
---|
29 | ;
|
---|
30 | N I,J,Y,DA,DE,DQ,DR,DIC,DIE,DIR,DIV,IBSEL,IBDD,IBD
|
---|
31 | S IBSEL=1,Y=""
|
---|
32 | I '$G(ACTIVE) S ACTIVE=1
|
---|
33 | S:'$G(INSDT) INSDT=DT
|
---|
34 | I '$G(DFN) G SELQ
|
---|
35 | D BLD
|
---|
36 | ;
|
---|
37 | ; -- call DIC to choose from list
|
---|
38 | S X=IBX
|
---|
39 | S DIC="^DPT("_DFN_",.312,",DIC(0)="EQMN"
|
---|
40 | S DIC("S")="I $D(IBDD(+Y))" ; add not other selection
|
---|
41 | S DIC("W")="W $P(^DIC(36,+^(0),0),U)_"" Group: ""_$$GRP^IBCNS($P(^DPT(DFN,.312,+Y,0),U,18))"
|
---|
42 | D ^DIC
|
---|
43 | SELQ Q +Y
|
---|
44 | ;
|
---|
45 | BLD K IBD,IBDD
|
---|
46 | S (IBDD,IBCDFN)=0 F S IBCDFN=$O(^DPT(DFN,.312,IBCDFN)) Q:'IBCDFN I $D(^DPT(DFN,.312,IBCDFN,0)) D CHK(IBCDFN,ACTIVE,INSDT)
|
---|
47 | Q
|
---|
48 | ;
|
---|
49 | CHK(IBCDFN,ACTIVE,INSDT) ; -- see if active
|
---|
50 | N X,X1
|
---|
51 | S X=$G(^DPT(DFN,.312,IBCDFN,0))
|
---|
52 | S IBDD(IBCDFN)=+X_"^"_IBCDFN_"^"_$P(X,"^",18)
|
---|
53 | I ACTIVE=2 G CHKQ
|
---|
54 | S X1=$G(^DIC(36,+X,0)) I X1="" G CQ ;ins co entry doesn't exist
|
---|
55 | I $P(X,"^",8) G:INSDT<$P(X,"^",8) CQ ;effective date later than care
|
---|
56 | I $P(X,"^",4) G:INSDT>$P(X,"^",4) CQ ;care after expiration date
|
---|
57 | I $P($G(^IBA(355.3,+$P(X,"^",18),0)),"^",11) G CQ ;plan is inactive
|
---|
58 | G:$P(X1,"^",5) CQ ; ;ins company inactive
|
---|
59 | ;G:$P(X1,"^",2)="N" CQ ; ;ins company will not reimburse
|
---|
60 | G CHKQ
|
---|
61 | CQ K IBDD(IBCDFN)
|
---|
62 | CHKQ S:$D(IBDD(IBCDFN)) IBDD=IBDD+1,IBD(IBDD)=IBCDFN
|
---|
63 | Q
|
---|
64 | ;
|
---|
65 | ;
|
---|
66 | DDHELP(IBDA,LEVEL) ; -- Executable help
|
---|
67 | ; -- write out list to choose from
|
---|
68 | N DFN,ACTIVE,INSDT,I,IBINS
|
---|
69 | D VAR,BLD
|
---|
70 | ;
|
---|
71 | I $G(IBDD)=0 W !,"No Insurance Policies to Select From" G DDHQ
|
---|
72 | ;
|
---|
73 | I '$D(IOM) D HOME^%ZIS
|
---|
74 | N IBDTIN
|
---|
75 | S IBDTIN=$G(INSDT)
|
---|
76 | W ! D HDR^IBCNS
|
---|
77 | S I=0 F S I=$O(IBD(I)) Q:'I D
|
---|
78 | .S IBINS=$G(^DPT(DFN,.312,$G(IBD(I)),0))
|
---|
79 | .D D1^IBCNS
|
---|
80 | DDHQ Q
|
---|
81 | ;
|
---|
82 | TRANS(IBDA,Y) ; -- output transform
|
---|
83 | N DFN,ACTIVE,INSDT
|
---|
84 | D VAR
|
---|
85 | S Y=$P($G(^DIC(36,+$P($G(^DPT(DFN,.312,+$G(Y),0)),U),0)),U)
|
---|
86 | Q Y
|
---|
87 | ;
|
---|
88 | INSCO(IBDA,IBCDFN) ; -- return pointer value of 36 from pt. file
|
---|
89 | N DFN,ACTIVE,INSDT
|
---|
90 | D VAR
|
---|
91 | S Y=+$G(^DPT(DFN,.312,IBCDFN,0))
|
---|
92 | Q Y_$S(Y>0:"^"_$P($G(^DIC(36,+Y,0)),"^"),1:"")
|
---|
93 | ;
|
---|
94 | IX(DA,XREF) ; -- create i1, aic xrefs for fields 112, 113, 114
|
---|
95 | ;
|
---|
96 | S ^DGCR(399,DA,XREF)=$$ZND^IBCNS1($P($G(^DGCR(399,DA,0)),"^",2),X)
|
---|
97 | S ^DGCR(399,DA,"AIC",+$G(^DPT($P($G(^DGCR(399,DA,0)),"^",2),.312,+X,0)))=""
|
---|
98 | Q
|
---|
99 | ;
|
---|
100 | KIX(DA,XREF) ; -- kill logic for above xref
|
---|
101 | K ^DGCR(399,DA,XREF)
|
---|
102 | K ^DGCR(399,DA,"AIC",+$G(^DPT($P($G(^DGCR(399,DA,0)),"^",2),.312,+X,0)))
|
---|
103 | Q
|
---|
104 | ;
|
---|
105 | BPP(IBDA,IBMCR) ; Find Bill Payer Policy based on Payer Sequence and the P/S/T payers assigned to the bill,Ins Co must reimburse
|
---|
106 | ; IBMCR = flag that says include MEDICARE WNR
|
---|
107 | ; returns - Bill Payer Policy (ifn of policy entry in patient file)
|
---|
108 | ; - null if either no Payer Sequence or there is no policy defined for the payer sequence
|
---|
109 | ; or the policy defined by the payer sequence Will Not Reimburse and is not MEDICARE
|
---|
110 | ;
|
---|
111 | N IBI,IBX,IBY,IBP,IBC,IBM0 S IBX="",(IBP,IBC)=0
|
---|
112 | S IBMCR=+$G(IBMCR)
|
---|
113 | S IBY=$$COBN^IBCEF(+IBDA) I IBY S IBY=IBY+11
|
---|
114 | I IBY S IBM0=$G(^DGCR(399,+IBDA,"M")),IBP=$P(IBM0,U,IBY)
|
---|
115 | I IBP S IBY=IBY-11,(IBI,IBY)=$P(IBM0,U,IBY) I +IBY S IBC=$P($G(^DIC(36,+IBY,0)),U,2)
|
---|
116 | I IBP,IBI,$S(IBC'="N":1,'IBMCR:0,1:$$MCRWNR^IBEFUNC(+IBY)) S IBX=IBP
|
---|
117 | Q IBX
|
---|