| 1 | IBCNADD ;ALB/AAS - ADDRESS RETRIEVAL ENGINE FOR FILE 399 ; 29-AUG-93 | 
|---|
| 2 | ;;2.0;INTEGRATED BILLING;**52,80,377**;21-MAR-94;Build 23 | 
|---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | ADD(DA,IBCOB) ; -- Retrieve correct billing address for a bill, mailing address of Bill Payer | 
|---|
| 6 | ;    assumes that new policy field points to valid ins. policy | 
|---|
| 7 | ;    DA = ien to file 399 | 
|---|
| 8 | ;    IBCOB = payer sequence PST or 123 (optional) | 
|---|
| 9 | ; | 
|---|
| 10 | N X,Y,I,J,IB01,IB02,IBTYP,DFN,IBCNS,IBCDFN,IBCNT,IBAGAIN,IBFND,IBBILLTY,IBCHRGTY | 
|---|
| 11 | S IB02="" | 
|---|
| 12 | S DFN=$P($G(^DGCR(399,DA,0)),"^",2) | 
|---|
| 13 | S IBBILLTY=$P($G(^DGCR(399,DA,0)),"^",5),IBCHRGTY=$P($$CHGTYPE^IBCU(DA),"^;",1) | 
|---|
| 14 | ; | 
|---|
| 15 | S IBCNS=+$P($G(^DGCR(399,DA,"MP")),U,1) | 
|---|
| 16 | S IBCDFN=$P($G(^DGCR(399,DA,"MP")),U,2) | 
|---|
| 17 | ; | 
|---|
| 18 | ; If a specific payer sequence was passed in, get the ins. company and the policy ptr | 
|---|
| 19 | ; No address returned for Medicare | 
|---|
| 20 | I $G(IBCOB)'="" D  I $$MCRWNR^IBEFUNC(IBCNS) G MAINQ | 
|---|
| 21 | . S IBCOB=$TR(IBCOB,"PST","123") | 
|---|
| 22 | . S IBCNS=+$P($G(^DGCR(399,DA,"I"_IBCOB)),U,1) | 
|---|
| 23 | . S IBCDFN=+$P($G(^DGCR(399,DA,"M")),U,IBCOB+11) | 
|---|
| 24 | . Q | 
|---|
| 25 | ; | 
|---|
| 26 | I 'IBCNS G MAINQ | 
|---|
| 27 | I IBCDFN S IBCNS=+$G(^DPT(+DFN,.312,+IBCDFN,0)) | 
|---|
| 28 | I '$D(^DIC(36,+IBCNS,0)) G MAINQ | 
|---|
| 29 | ; | 
|---|
| 30 | ; -- if send bill to employer and state is filled in use this | 
|---|
| 31 | I +$G(^DPT(DFN,.312,+IBCDFN,2)),+$P(^(2),"^",6) S IB02=$P(^(2),"^",2,99) G MAINQ | 
|---|
| 32 | ; | 
|---|
| 33 | MAIN ; -- determine address for company for type bill | 
|---|
| 34 | ; | 
|---|
| 35 | ; -- get main address | 
|---|
| 36 | S IB02=$S($D(^DIC(36,+IBCNS,.11)):^(.11),1:"") | 
|---|
| 37 | S IBCNT=$G(IBCNT)+1 | 
|---|
| 38 | ; | 
|---|
| 39 | ; -- if process the same co. more than once you are in an infinite loop | 
|---|
| 40 | I $D(IBCNT(IBCNS)) G MAINQ ;already processed this company  use main add | 
|---|
| 41 | S IBCNT(IBCNS)="" | 
|---|
| 42 | ; | 
|---|
| 43 | ; -- type of charges:   Rx charges - if ins company has an rx address use it, otherwise use opt address | 
|---|
| 44 | I IBCHRGTY=3 S IBTYP="R" D @IBTYP G:$D(IBFND) MAINQ I $D(IBAGAIN) K IBAGAIN G MAIN | 
|---|
| 45 | ; | 
|---|
| 46 | ; -- type of bill:   inpatient<3, outpatient>2 | 
|---|
| 47 | S IBTYP=$S(IBBILLTY<3:"I",1:"O") | 
|---|
| 48 | D @IBTYP I $D(IBAGAIN) K IBAGAIN G MAIN | 
|---|
| 49 | ; | 
|---|
| 50 | ; -- return address | 
|---|
| 51 | MAINQ Q IB02 | 
|---|
| 52 | ; | 
|---|
| 53 | I ; -- see if there is an inpatient address | 
|---|
| 54 | ; -- use if state is there | 
|---|
| 55 | I $P($G(^DIC(36,+IBCNS,.12)),"^",5) S IB02=$P($G(^(.12)),"^",1,6) | 
|---|
| 56 | ; | 
|---|
| 57 | ; -- if other company processes claims start again | 
|---|
| 58 | I $P($G(^DIC(36,+IBCNS,.12)),"^",7) S IBCNS=$P($G(^DIC(36,+IBCNS,.12)),"^",7) S IBAGAIN=1 | 
|---|
| 59 | Q | 
|---|
| 60 | ; | 
|---|
| 61 | O ; -- see if there is an outpatient address | 
|---|
| 62 | ; -- use if state is there | 
|---|
| 63 | I $P($G(^DIC(36,+IBCNS,.16)),"^",5) S IB02=$P($G(^(.16)),"^",1,6) | 
|---|
| 64 | ; | 
|---|
| 65 | ; -- if other company processes claims start again | 
|---|
| 66 | I $P($G(^DIC(36,+IBCNS,.16)),"^",7) S IBCNS=$P($G(^DIC(36,+IBCNS,.16)),"^",7) S IBAGAIN=1 | 
|---|
| 67 | Q | 
|---|
| 68 | ; | 
|---|
| 69 | R ; -- see if there is an Rx address | 
|---|
| 70 | ; -- use if state is there | 
|---|
| 71 | I $P($G(^DIC(36,+IBCNS,.18)),"^",5) S IB02=$P($G(^(.18)),"^",1,6) S IBFND=1 | 
|---|
| 72 | ; | 
|---|
| 73 | ; -- if other company processes claims start again | 
|---|
| 74 | I $P($G(^DIC(36,+IBCNS,.18)),"^",7) S IBCNS=$P($G(^DIC(36,+IBCNS,.18)),"^",7) S IBAGAIN=1 K IBFND | 
|---|
| 75 | Q | 
|---|