| 1 | IBCEF21 ;ALB/TMP - FORMATTER SPECIFIC BILL FUNCTIONS CONTINUED ;06-FEB-96 | 
|---|
| 2 | ;;2.0;INTEGRATED BILLING;**51,296,371,389**;21-MAR-94;Build 6 | 
|---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | COID(IBIFN) ; Claim office ID | 
|---|
| 6 | N IBCOID,IBCOID1,IBIN | 
|---|
| 7 | S IBIN=$$CURR^IBCEF2(IBIFN),IBCOID1="",IBCOID=$P($$ADDRESS^IBCNSC0(IBIN,.11,5),U,11) | 
|---|
| 8 | ; | 
|---|
| 9 | I IBIN D | 
|---|
| 10 | . I $D(^IBA(364.2,"C",IBIFN)) S IBCOID1=$P($$ADDRESS^IBCNSC0(IBIN,.18,5),U,11) Q  ;Rx | 
|---|
| 11 | . I $P($G(^DGCR(399,IBIFN,0)),U,5)<3 S IBCOID1=$P($$ADDRESS^IBCNSC0(IBIN,.12,5),U,11) Q  ;Inpt | 
|---|
| 12 | . I $P($G(^DGCR(399,IBIFN,0)),U,5)'<3 S IBCOID1=$P($$ADDRESS^IBCNSC0(IBIN,.16,5),U,11) Q  ;Outpt | 
|---|
| 13 | ; | 
|---|
| 14 | Q $S(IBCOID1'="":IBCOID1,1:IBCOID) | 
|---|
| 15 | ; | 
|---|
| 16 | ESGHPST(IBIFN,COB) ; return insureds employment status if the bill policy defined by COB is an Employer Sponsored Group Health Plan | 
|---|
| 17 | ; ESGHP FLAG (2.312,2.1) ^ the employment status (2.312,2.11) | 
|---|
| 18 | ; | 
|---|
| 19 | N PPOL,DFN,X,Y S Y="" | 
|---|
| 20 | S PPOL=$$PPOL^IBCEF2($G(IBIFN),$G(COB)),DFN=$P($G(^DGCR(399,+$G(IBIFN),0)),U,2) | 
|---|
| 21 | I +PPOL,+DFN S X=$G(^DPT(DFN,.312,+PPOL,2)) S Y=+$P(X,U,10)_U_$P(X,U,11) | 
|---|
| 22 | Q Y | 
|---|
| 23 | ; | 
|---|
| 24 | ESGHPNL(IBIFN,COB) ; return employer name and location if the bill policy defined by COB is an Employer Sponsored Group Health Plan | 
|---|
| 25 | ; ESGHP FLAG (2.312,2.1) ^ employer name (2.312,2.015) ^ employer city (2.312,2.05) | 
|---|
| 26 | ;                        ^ employer state abbr (2.312,2.06) ^ employer state ifn  (2.312,2.06) | 
|---|
| 27 | ; | 
|---|
| 28 | N PPOL,DFN,X,Y S Y="" | 
|---|
| 29 | S PPOL=$$PPOL^IBCEF2($G(IBIFN),$G(COB)),DFN=$P($G(^DGCR(399,+$G(IBIFN),0)),U,2) | 
|---|
| 30 | I +PPOL,+DFN S X=$G(^DPT(DFN,.312,+PPOL,2)) S Y=+$P(X,U,10)_U_$P(X,U,9)_U_$P(X,U,5)_U_$P($G(^DIC(5,+$P(X,U,6),0)),U,2)_U_$P(X,U,6) | 
|---|
| 31 | Q Y | 
|---|
| 32 | ; | 
|---|
| 33 | REMARKS(IBIFN) ; Compile array of bill remarks | 
|---|
| 34 | ;IBIFN = bill ien | 
|---|
| 35 | N Z,Z0,Z1,IBARRAY,IBSM | 
|---|
| 36 | S Z=0 | 
|---|
| 37 | ;S:$P($G(^DGCR(399,IBIFN,"U1")),U,2) Z=Z+1,Z0=$P(^("U1"),U,2),IBXDATA(Z)="OFFSET AMOUNT: "_"$"_+$P(Z0,".")_"."_$E($P(Z0,".",2)_"00",1,2) | 
|---|
| 38 | S:$P($G(^DGCR(399,IBIFN,"U1")),U,8)'="" Z=Z+1,IBXDATA(Z)=$P(^("U1"),U,8) ;Bill comment on bill | 
|---|
| 39 | S Z0=$G(^DGCR(399,IBIFN,0)),Z1=$G(^DGCR(399.3,+$P(Z0,U,7),0)) | 
|---|
| 40 | D SET^IBCSC5B(IBIFN,.IBARRAY) | 
|---|
| 41 | I $P($G(IBARRAY),U,2) D  ;Prosthetics | 
|---|
| 42 | . S Z0=0 F  S Z0=$O(IBARRAY(Z0)) Q:Z0=""  S Z1=0 F  S Z1=$O(IBARRAY(Z0,Z1)) Q:'Z1  S Z=Z+1,IBXDATA(Z)="Prosthetic: "_$E($$PINB^IBCSC5B(+IBARRAY(Z0,Z1)),1,39)_" "_$E(Z0,4,5)_"/"_$E(Z0,6,7)_"/"_$E(Z0,1,2) | 
|---|
| 43 | Q | 
|---|
| 44 | ; | 
|---|
| 45 | CREM(IBIFN) ; Compile array of bill remarks common to every bill | 
|---|
| 46 | ;IBIFN = bill ien | 
|---|
| 47 | N Z | 
|---|
| 48 | S Z=0 | 
|---|
| 49 | S:$P($G(^IBE(350.9,1,1)),U,4)'="" Z=Z+1,IBXDATA(Z)=$P(^(1),U,4) ;Site specific 'every bill' comment | 
|---|
| 50 | Q | 
|---|
| 51 | ; | 
|---|
| 52 | ADMDT(IBIFN,NOOUTCK) ; Calculate admission/start of care date/time | 
|---|
| 53 | ; IBIFN = bill ien | 
|---|
| 54 | ; NOOUTCK = flag that will: | 
|---|
| 55 | ;          (1) no check for inpt episode overlap for outpt | 
|---|
| 56 | ;          (0 or null) performs check for inpt episode overlap for outpt | 
|---|
| 57 | ; | 
|---|
| 58 | ; Returns IBXDATA = fileman date format | 
|---|
| 59 | N Z,Z0,Z1 | 
|---|
| 60 | S Z=$G(^DGCR(399,IBIFN,0)),Z1=$P($G(^("U")),U,20),Z0=$$INPAT^IBCEF(IBIFN,1) | 
|---|
| 61 | S IBXDATA=$S(Z0&$P(Z,U,8):$P($G(^DGPT(+$P(Z,U,8),0)),U,2),1:"") | 
|---|
| 62 | S:'IBXDATA IBXDATA=$P(Z,U,3)_$S(Z0&(Z1<25):"."_$E("0",$L(Z1))_Z1,1:"") | 
|---|
| 63 | ; Check to see if outpt episode (date in event date) overlaps inpt | 
|---|
| 64 | ;  episode - use admit date if it does | 
|---|
| 65 | I 'Z0,IBXDATA,'$G(NOOUTCK) D | 
|---|
| 66 | . N VAINDT,VAIN,DFN | 
|---|
| 67 | . S VAINDT=IBXDATA,DFN=$P($G(^DGCR(399,IBIFN,0)),U) | 
|---|
| 68 | . D INP^VADPT S IBXDATA=+VAIN(7) S:'IBXDATA IBXDATA="" | 
|---|
| 69 | I 'IBXDATA,'Z0 S IBXDATA=$$SERVDT^IBCEF(IBIFN,,2) | 
|---|
| 70 | Q | 
|---|
| 71 | ; | 
|---|
| 72 | DISDT(IBIFN) ; Calculate discharge date | 
|---|
| 73 | ; IBIFN = bill ien | 
|---|
| 74 | N Z,Z0 | 
|---|
| 75 | S Z=$$INPAT^IBCEF(IBIFN,1),Z0=$G(^DGCR(399,IBIFN,0)) | 
|---|
| 76 | I Z S IBXDATA=+$G(^DGPT(+$P(Z0,U,8),70)) S:'IBXDATA IBXDATA=$P(Z0,U,16) | 
|---|
| 77 | I 'Z N VAINDT,VAIN,DFN S DFN=$P($G(^DGCR(399,IBIFN,0)),U,2) D INP^VADPT I VAIN(1) S IBXDATA=+$G(^DGPM(+$P($G(^DGPM(+VAIN(1),0)),U,17),0)) | 
|---|
| 78 | Q | 
|---|
| 79 | ; | 
|---|
| 80 | INSSECID(IBIFN,TYPE,SEQ) ; Extract subscriber and patient prim/sec ID's | 
|---|
| 81 | ; IBIFN required | 
|---|
| 82 | ; TYPE is either "PAT" or "SUB" to indicate we need to extract either | 
|---|
| 83 | ;          patient or subscriber ID information.  Default="SUB". | 
|---|
| 84 | ; SEQ is the insurance sequence# (1,2,3).  Default is current ins seq#. | 
|---|
| 85 | ; | 
|---|
| 86 | ; Output: | 
|---|
| 87 | ; Function returns an 8-piece string as follows. | 
|---|
| 88 | ;   [1] primary qualifier | 
|---|
| 89 | ;   [2] primary ID | 
|---|
| 90 | ;   [3] secondary qual(1) | 
|---|
| 91 | ;   [4] secondary ID(1) | 
|---|
| 92 | ;   [5] secondary qual(2) | 
|---|
| 93 | ;   [6] secondary ID(2) | 
|---|
| 94 | ;   [7] secondary qual(3) | 
|---|
| 95 | ;   [8] secondary ID(3) | 
|---|
| 96 | ; | 
|---|
| 97 | NEW DATA,DFN,POL,IB0,IB5,REL | 
|---|
| 98 | S DATA="" | 
|---|
| 99 | S IBIFN=+$G(IBIFN) I 'IBIFN G INSSX | 
|---|
| 100 | I $G(TYPE)="" S TYPE="SUB"               ; default type of ID's to get | 
|---|
| 101 | I '$F(".PAT.SUB.","."_TYPE_".") G INSSX | 
|---|
| 102 | I '$G(SEQ) S SEQ=$$COBN^IBCEF(IBIFN)     ; default current ins seq# | 
|---|
| 103 | I '$F(".1.2.3.","."_SEQ_".") G INSSX | 
|---|
| 104 | S DFN=+$P($G(^DGCR(399,IBIFN,0)),U,2) I 'DFN G INSSX | 
|---|
| 105 | S POL=+$P($G(^DGCR(399,IBIFN,"M")),U,SEQ+11) I 'POL G INSSX | 
|---|
| 106 | S IB0=$G(^DPT(DFN,.312,POL,0)) I IB0="" G INSSX | 
|---|
| 107 | S IB5=$G(^DPT(DFN,.312,POL,5)) | 
|---|
| 108 | S REL=+$P(IB0,U,16)                      ; pat rel to insured | 
|---|
| 109 | S $P(DATA,U,1)="MI" | 
|---|
| 110 | S $P(DATA,U,2)=$P(IB0,U,2)               ; subscriber primary ID | 
|---|
| 111 | S $P(DATA,U,3,8)=$P(IB5,U,2,7)           ; subscriber secondary data | 
|---|
| 112 | I TYPE="PAT",REL'=1 D | 
|---|
| 113 | . S $P(DATA,U,2)=$P(IB5,U,1)             ; patient primary ID | 
|---|
| 114 | . S $P(DATA,U,3,8)=$P(IB5,U,8,13)        ; patient secondary data | 
|---|
| 115 | . Q | 
|---|
| 116 | ; | 
|---|
| 117 | S DATA=$$SCRUB(DATA)     ; scrub the data | 
|---|
| 118 | INSSX ; | 
|---|
| 119 | Q DATA | 
|---|
| 120 | ; | 
|---|
| 121 | SCRUB(DATA) ; Scrub the 8-piece string gathered above | 
|---|
| 122 | NEW PCE | 
|---|
| 123 | ; | 
|---|
| 124 | ; make sure you can't have an ID without a qualifier or a qualifier | 
|---|
| 125 | ; without an ID.  Check all 4 pairs. | 
|---|
| 126 | F PCE=1,3,5,7 D | 
|---|
| 127 | . I $P(DATA,U,PCE)'="",$P(DATA,U,PCE+1)'="" Q | 
|---|
| 128 | . S ($P(DATA,U,PCE),$P(DATA,U,PCE+1))="" | 
|---|
| 129 | . Q | 
|---|
| 130 | ; | 
|---|
| 131 | ; fill in secondary gaps.  If Set1 and Set2 are blank, but Set3 exists | 
|---|
| 132 | ; then move Set3 to Set1 and delete Set3. | 
|---|
| 133 | I $P(DATA,U,3)="",$P(DATA,U,5)="",$P(DATA,U,7)'="" D | 
|---|
| 134 | . S $P(DATA,U,3)=$P(DATA,U,7),$P(DATA,U,4)=$P(DATA,U,8) | 
|---|
| 135 | . S ($P(DATA,U,7),$P(DATA,U,8))="" | 
|---|
| 136 | . Q | 
|---|
| 137 | ; | 
|---|
| 138 | ; fill in secondary gaps more generically. | 
|---|
| 139 | ; If Set(n) is blank, but Set(n+1) exists, then move it up. | 
|---|
| 140 | F PCE=3,5 D | 
|---|
| 141 | . I $P(DATA,U,PCE)="",$P(DATA,U,PCE+2)'="" D | 
|---|
| 142 | .. S $P(DATA,U,PCE)=$P(DATA,U,PCE+2) | 
|---|
| 143 | .. S $P(DATA,U,PCE+1)=$P(DATA,U,PCE+3) | 
|---|
| 144 | .. S ($P(DATA,U,PCE+2),$P(DATA,U,PCE+3))="" | 
|---|
| 145 | .. Q | 
|---|
| 146 | . Q | 
|---|
| 147 | ; | 
|---|
| 148 | Q DATA | 
|---|
| 149 | ; | 
|---|