| 1 | IBCEP2 ;ALB/TMP - EDI UTILITIES for provider ID ;13-DEC-99
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**137,181,232,280,320,349**;21-MAR-94;Build 46
 | 
|---|
| 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  ; DBIA for access to fields 53.2,54.1,54.2 in file 200: 224
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | GETID(IBIFN,IBTYPE,IBPROV,IBSEQ,IBT,IBT1,IBFUNC) ; Extract IBTYPE id for the bill
 | 
|---|
| 7 |  ; IBIFN = bill ien (file 399)
 | 
|---|
| 8 |  ; IBTYPE = 2:PERFORMING PROVIDER ID (1 and 3 deleted)
 | 
|---|
| 9 |  ; IBSEQ = numeric COB sequence of the insurance on bill
 | 
|---|
| 10 |  ; IBFUNC = 1:REFERRING;2:OPERATING;3:RENDERING;4:ATTENDING;5:SUPERVISING;9:OTHER;
 | 
|---|
| 11 |  ; Returns IBT = ien of the provider id type^ien of entry^file # for id
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 |  S IBT=0
 | 
|---|
| 14 |  Q:IBTYPE'=2 ""
 | 
|---|
| 15 |  N IBID,IBPTYP
 | 
|---|
| 16 |  S IBID=$$IDFIND(IBIFN,"",IBPROV,IBSEQ,1,.IBT,$G(IBFUNC))
 | 
|---|
| 17 |  I IBID="" S IBT=""
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  Q IBID
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 | IDFIND(IBIFN,IBPTYP,IBPROV,IBSEQ,IBPERF,IBT,IBFUNC) ;Loop thru source levels
 | 
|---|
| 22 |  ;   (if id definition allows) to find correct ID
 | 
|---|
| 23 |  ; IBIFN = bill ien (file 399)
 | 
|---|
| 24 |  ; IBPTYP = ien of the provider id type in file 355.97 or if null,
 | 
|---|
| 25 |  ;          the default performing provider ID type for the ins co. in
 | 
|---|
| 26 |  ;          COB sequence IBSEQ will be calculated
 | 
|---|
| 27 |  ; IBPROV = (variable pointer syntax) provider on bill IBIFN
 | 
|---|
| 28 |  ; IBSEQ = numeric COB sequence of the bill
 | 
|---|
| 29 |  ; IBPERF = 1 if the performing provider id is needed
 | 
|---|
| 30 |  ; IBFUNC = 1:REFERRING;2:OPERATING;3:RENDERING;4:ATTENDING;5:SUPERVISING;9:OTHER;
 | 
|---|
| 31 |  ; Returns IBT = ptr to file 355.97^entry #^file #
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 |  S IBT=+$G(IBPTYP)
 | 
|---|
| 34 |  Q:'$G(IBPERF)!'$G(IBPROV) ""
 | 
|---|
| 35 |  N IBSPEC,IBINS,IBINS4,IBSRC,IBUP,IBID,IBALT,IBPROF,Z
 | 
|---|
| 36 |  I $G(IBSEQ)="" S IBSEQ=+$$COBN^IBCEF(IBIFN) ; Default to current COB seq
 | 
|---|
| 37 |  S IBINS=+$P($G(^DGCR(399,IBIFN,"I"_IBSEQ)),U),IBINS4=$G(^DIC(36,+IBINS,4))
 | 
|---|
| 38 |  S IBPROF=($$FT^IBCEF(IBIFN)=2) S:'IBPROF IBPROF=2
 | 
|---|
| 39 |  ; form type is CMS-1500 (prof)=1, UB-04 (inst)=2
 | 
|---|
| 40 |  I $G(IBPTYP)="",$G(IBFUNC)=1,IBPROF=1 S (IBT,IBPTYP)=+$P(IBINS4,U,4) ; Referring Default ID on CMS-1500
 | 
|---|
| 41 |  I $G(IBPTYP)="" S (IBT,IBPTYP)=+$P(IBINS4,U,IBPROF) ; Def to perf prv typ for form
 | 
|---|
| 42 |  I 'IBPTYP Q ""  ; No default id type
 | 
|---|
| 43 |  S IBSPEC=$G(^IBE(355.97,IBPTYP,1)),IBSRC=$P($G(^IBE(355.97,+IBPTYP,0)),U,2),IBSRC=$S('IBSRC:5,1:IBSRC),IBUP=1
 | 
|---|
| 44 |  S IBALT=0
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 |  F  D  Q:'IBUP!($G(IBID)'="")  S IBSRC=IBSRC-1 Q:'IBSRC
 | 
|---|
| 47 |  . ;
 | 
|---|
| 48 |  . I IBSRC=1,$TR($P(IBSPEC,U,1,3),"^0")'="" D  Q  ; Indiv prov default
 | 
|---|
| 49 |  .. N IBSTATE
 | 
|---|
| 50 |  .. I $P(IBSPEC,U,2) D  Q  ; Federal DEA # from field 53.2 file 200
 | 
|---|
| 51 |  ... S IBID=$P($G(^VA(200,+IBPROV,"PS")),U,2) ; DBIA224
 | 
|---|
| 52 |  ... S $P(IBT,U,2,3)=(IBPROV_U_200)
 | 
|---|
| 53 |  .. S IBSTATE=+$$CAREST^IBCEP2A(IBIFN)
 | 
|---|
| 54 |  .. I $P(IBSPEC,U) D  Q  ; State issued DEA # needed
 | 
|---|
| 55 |  ... Q:'IBSTATE
 | 
|---|
| 56 |  ... ; Extract the state issuing DEA # from field 54.2 file 200
 | 
|---|
| 57 |  ... S Z=+$O(^VA(200,+IBPROV,"PS2","B",IBSTATE,0)),IBID=$P($G(^VA(200,+IBPROV,"PS2",Z,0)),U,2) ; DBIA224
 | 
|---|
| 58 |  ... S $P(IBT,U,2,3)=(+IBPROV_";"_Z_U_200)
 | 
|---|
| 59 |  .. I $P(IBSPEC,U,3) D  Q  ; State license # needed
 | 
|---|
| 60 |  ... Q:'IBSTATE
 | 
|---|
| 61 |  ... ; Extract the state license # from field 54.1 file 200
 | 
|---|
| 62 |  ... I IBPROV["VA(200" S Z=+$O(^VA(200,+IBPROV,"PS1","B",IBSTATE,0)),IBID=$P($G(^VA(200,+IBPROV,"PS1",Z,0)),U,2),$P(IBT,U,2,3)=(+IBPROV_";"_IBSTATE_U_200) ; DBIA224
 | 
|---|
| 63 |  ... I IBPROV["IBA(355.93" S IBID=$P($G(^IBA(355.93,+IBPROV,0)),U,12),$P(IBT,U,2,3)=(+IBPROV_U_355.93)
 | 
|---|
| 64 |  . ;
 | 
|---|
| 65 |  . I IBSRC=2,$P(IBSPEC,U,4) D  Q  ; FACILITY FED TAX ID #
 | 
|---|
| 66 |  .. N IBXDATA
 | 
|---|
| 67 |  .. D F^IBCEF("N-FEDERAL TAX ID",,,IBIFN)
 | 
|---|
| 68 |  .. S IBID=IBXDATA,$P(IBT,U,2,3)=(U_350.9)
 | 
|---|
| 69 |  . ;
 | 
|---|
| 70 |  . I IBSRC=1 S IBID=$$SRC1(IBIFN,"*ALL*",IBPTYP,IBPROV,.IBT) Q
 | 
|---|
| 71 |  . ;
 | 
|---|
| 72 |  . I IBSRC=2 S IBID=$$SRC2(IBPTYP,.IBT) Q
 | 
|---|
| 73 |  . ;
 | 
|---|
| 74 |  . I IBSRC=3 S IBID=$$SRC3(IBIFN,IBINS,IBPTYP,.IBT) Q
 | 
|---|
| 75 |  . ; 
 | 
|---|
| 76 |  . I IBSRC=4 S IBID=$$SRC4(IBIFN,IBINS,IBPTYP,IBPROV,.IBT) Q
 | 
|---|
| 77 |  . ;
 | 
|---|
| 78 |  . I IBSRC=5 S IBID=$$SRC5(IBIFN,IBINS,IBPTYP,IBSEQ,.IBT,$G(IBFUNC)) Q
 | 
|---|
| 79 |  . ;
 | 
|---|
| 80 |  . I IBSRC=6 S IBID=$$SRC6(IBIFN,IBINS,IBPTYP,IBPROV,IBSEQ,.IBT) Q
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 |  Q $G(IBID)
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 | GETALL(IBTYPE,IBIFN,IBPROV,IBPID) ; Extract all performing prov id's for a
 | 
|---|
| 85 |  ; provider (IBPROV - vp format) on bill IBIFN
 | 
|---|
| 86 |  ; IBTYPE = type of ID to return (see GETID above)
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 |  ; Returns array IBPID(COB SEQ #)=id (pass by reference) AND
 | 
|---|
| 89 |  ;   IBPID(COB SEQ #,1)=ien of id type (ptr to 355.97)
 | 
|---|
| 90 |  ;   IBPID = current insurance co's id
 | 
|---|
| 91 |  ;
 | 
|---|
| 92 |  N Z,COB,Z1,IBT
 | 
|---|
| 93 |  S COB=$$COBN^IBCEF(IBIFN)
 | 
|---|
| 94 |  F Z=1:1:3 Q:'$D(^DGCR(399,IBIFN,"I"_Z))  S IBPID(Z)=$$GETID(IBTYPE,IBIFN,IBPROV,Z,.IBT),IBPID(Z,1)=IBT I Z=COB S Z1=IBPID(Z)
 | 
|---|
| 95 |  Q $G(Z1)
 | 
|---|
| 96 |  ;
 | 
|---|
| 97 | SRC1(IBIFN,IBINS,IBPTYP,IBPROV,IBT) ; Licensing/gov't issued # - provider specific
 | 
|---|
| 98 |  ; Parameter definitions for SRC1, SRC3, SRC4, SRC5, SRC6:
 | 
|---|
| 99 |  ;   IBIFN = ien of bill (file 399)
 | 
|---|
| 100 |  ;   IBINS = ien of insurance co (file 36) or *ALL* for all insurance
 | 
|---|
| 101 |  ;           (always *ALL* for SRC1)
 | 
|---|
| 102 |  ;   IBPTYP = ien of the provider id type in file 355.97
 | 
|---|
| 103 |  ;   IBPROV = (variable pointer syntax) provider on bill IBIFN
 | 
|---|
| 104 |  ;   IBT = returned as type ien^file ien^file #
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 |  N IBID,IB,IBRX,IBIDSV
 | 
|---|
| 107 |  S IBID="",IB=0,IBRX=$$ISRX^IBCEF1(IBIFN),IBIDSV=""
 | 
|---|
| 108 |  I $G(IBPROV) F  S IB=$O(^IBA(355.9,"AD",IBPTYP,IBPROV,IBINS,IB)) Q:'IB  D  Q:IBID'=""
 | 
|---|
| 109 |  . S IBID=$$UNIQ1(IBIFN,IBINS,IBPTYP,IBPROV,"",IB)
 | 
|---|
| 110 |  . I IBRX,$P($G(^IBA(355.9,IB,0)),U,5)'=3 S:IBIDSV="" IBIDSV=IBID S IBID="" ; Save 1st 'match' if no rx specific id
 | 
|---|
| 111 |  I IBID="",IBIDSV'="" S IBID=IBIDSV
 | 
|---|
| 112 |  Q IBID
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 | SRC2(IB35597,IBT) ; Facility default - all providers
 | 
|---|
| 115 |  ; IB35597 = ien of the provider id type entry in file 355.97
 | 
|---|
| 116 |  ; IBT = returned as type ien^file ien^file #
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 |  S $P(IBT,U,2,3)=(+IB35597_U_355.97)
 | 
|---|
| 119 |  Q $P($G(^IBE(355.97,+IB35597,0)),U,4)
 | 
|---|
| 120 |  ;
 | 
|---|
| 121 | SRC3(IBIFN,IBINS,IBPTYP,IBT) ; Ins co/all providers
 | 
|---|
| 122 |  ; See SRC1 for parameter definitions
 | 
|---|
| 123 |  N IB,IBID,IBRX,IBIDSV
 | 
|---|
| 124 |  S IBID="",IB=0,IBRX=$$ISRX^IBCEF1(IBIFN),IBIDSV=""
 | 
|---|
| 125 |  F  S IB=$O(^IBA(355.91,"AC",IBINS,IBPTYP,"*N/A*",IB)) Q:'IB  D  Q:IBID'=""
 | 
|---|
| 126 |  . S IBID=$$UNIQ2(IBIFN,IBINS,IBPTYP,"",IB,.IBT)
 | 
|---|
| 127 |  . I IBRX,$P($G(^IBA(355.91,IB,0)),U,5)'=3 S:IBIDSV="" IBIDSV=IBID S IBID="" ; Save 1st 'match' if no rx specific id
 | 
|---|
| 128 |  I IBID="",IBIDSV'="" S IBID=IBIDSV
 | 
|---|
| 129 |  Q IBID
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 | SRC4(IBIFN,IBINS,IBPTYP,IBPROV,IBT) ;  Insurance co/individual provider
 | 
|---|
| 132 |  ; See SRC1 for parameter definitions
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 |  N IBID,IB,IBRX,IBIDSV
 | 
|---|
| 135 |  S IBID="",IB=0,IBRX=$$ISRX^IBCEF1(IBIFN),IBIDSV=""
 | 
|---|
| 136 |  I $G(IBPROV) F  S IB=$O(^IBA(355.9,"AD",IBPTYP,IBPROV,IBINS,IB)) Q:'IB  D  Q:IBID'=""
 | 
|---|
| 137 |  . S IBID=$$UNIQ1(IBIFN,IBINS,IBPTYP,IBPROV,"",IB,.IBT)
 | 
|---|
| 138 |  . I IBRX,$P($G(^IBA(355.9,IB,0)),U,5)'=3 S:IBIDSV="" IBIDSV=IBID S IBID="" ; Save 1st 'match' if no rx specific id
 | 
|---|
| 139 |  I IBID="",IBIDSV'="" S IBID=IBIDSV
 | 
|---|
| 140 |  Q IBID
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 | SRC5(IBIFN,IBINS,IBPTYP,IBSEQ,IBT,IBFUNC) ; Ins co/all providers/care unit
 | 
|---|
| 143 |  ; See SRC1 for missing parameter definitions
 | 
|---|
| 144 |  ; IBSEQ = the numeric COB sequence of the insurance on the bill
 | 
|---|
| 145 |  ;
 | 
|---|
| 146 |  N IBP,IBUNIT,IBID,IB,Z,IBIDSV,IBRX
 | 
|---|
| 147 |  S IBID="",Z=0,IBRX=$$ISRX^IBCEF1(IBIFN),IBIDSV=""
 | 
|---|
| 148 |  S IBP=+$O(^DGCR(399,IBIFN,"PRV","B",$S($G(IBFUNC)=1:1,$$FT^IBCEF(IBIFN)=3:4,1:3),0)),IBUNIT=$P($G(^DGCR(399,IBIFN,"PRV",IBP,0)),U,8+IBSEQ)
 | 
|---|
| 149 |  I IBUNIT'="" F  S Z=$O(^IBA(355.96,"AC",IBINS,IBPTYP,Z)) Q:'Z  D  Q:IBID'=""
 | 
|---|
| 150 |  . S IB=0 F  S IB=$O(^IBA(355.91,"ACARE",Z,IB)) Q:'IB  D  Q:IBID'=""
 | 
|---|
| 151 |  .. S IBID=$$UNIQ2(IBIFN,IBINS,IBPTYP,IBUNIT,IB,.IBT)
 | 
|---|
| 152 |  .. I IBRX,$P($G(^IBA(355.91,IB,0)),U,5)'=3 S:IBIDSV="" IBIDSV=IBID S IBID="" ; Save 1st 'match' if no rx specific id
 | 
|---|
| 153 |  I IBID="",IBIDSV'="" S IBID=IBIDSV
 | 
|---|
| 154 |  Q IBID
 | 
|---|
| 155 |  ;
 | 
|---|
| 156 | SRC6(IBIFN,IBINS,IBPTYP,IBPROV,IBSEQ,IBT) ; Ins co/ind provider/care unit
 | 
|---|
| 157 |  ; See SRC1 for missing parameter definitions
 | 
|---|
| 158 |  ; IBSEQ = the numeric COB sequence of the insurance on the bill
 | 
|---|
| 159 |  ;
 | 
|---|
| 160 |  N IBUNIT,IBP,IBID,IB
 | 
|---|
| 161 |  S IBID="",IB=0
 | 
|---|
| 162 |  S IBP=+$O(^DGCR(399,"PRV","B",$S($$FT^IBCEF(IBIFN)=3:3,1:4),0)),IBUNIT=$P($G(^DGCR(399,IBIFN,"PRV",IBP,0)),U,8+IBSEQ)
 | 
|---|
| 163 |  I $G(IBPROV),IBUNIT'="" F  S IB=$O(^IBA(355.9,"AD",IBPTYP,IBPROV,IBINS,IB)) Q:'IB  D  Q:IBID'=""
 | 
|---|
| 164 |  . S IBID=$$UNIQ1(IBIFN,IBINS,IBPTYP,IBPROV,IBUNIT,IB,.IBT)
 | 
|---|
| 165 |  Q IBID
 | 
|---|
| 166 |  ;
 | 
|---|
| 167 | UNIQ1(IBIFN,IBINS,IBPTYP,IBPROV,IBUNIT,IBCU,IBT) ; Match most-least specific
 | 
|---|
| 168 |  ; *** SEE PARAMETER DEFINITIONS IN IBCEP3 ***
 | 
|---|
| 169 |  ;
 | 
|---|
| 170 |  ; Start in file 355.9 (Specific Provider)
 | 
|---|
| 171 |  ;   IBPROV = (variable pointer syntax) provider on bill IBIFN
 | 
|---|
| 172 |  ;
 | 
|---|
| 173 |  Q $$UNIQ1^IBCEP2A($G(IBIFN),$G(IBINS),$G(IBPTYP),$G(IBPROV),$G(IBUNIT),$G(IBCU),$G(IBT))
 | 
|---|
| 174 |  ;
 | 
|---|
| 175 | UNIQ2(IBIFN,IBINS,IBPTYP,IBUNIT,IBCU,IBT) ; Match on most-least specific
 | 
|---|
| 176 |  ; *** SEE PARAMETER DEFINITIONS IN IBCEP3 ***
 | 
|---|
| 177 |  ;
 | 
|---|
| 178 |  ; Start in file 355.91 (Specific Insurance)
 | 
|---|
| 179 |  ;
 | 
|---|
| 180 |  Q $$UNIQ2^IBCEP2A($G(IBIFN),$G(IBINS),$G(IBPTYP),$G(IBUNIT),$G(IBCU),$G(IBT))
 | 
|---|