| [613] | 1 | IBCEP3 ;ALB/TMP - EDI UTILITIES for provider ID ;25-SEP-00
 | 
|---|
 | 2 |  ;;2.0;INTEGRATED BILLING;**137,207,232,280,349**;21-MAR-94;Build 46
 | 
|---|
 | 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
 | 4 |  ;
 | 
|---|
 | 5 | CUNEED(IBIFN,IBSEQ,IBPTYP,IBRET,IBEMC) ; Determine if care unit needed for
 | 
|---|
 | 6 |  ; provider type and insurance company(s) on bill
 | 
|---|
 | 7 |  ; IBIFN = ien of bill (file 399)
 | 
|---|
 | 8 |  ; IBSEQ = specific COB sequence to check or null for check all
 | 
|---|
 | 9 |  ; IBPTYP = the ien of the provider id type in file 355.97 or if null,
 | 
|---|
 | 10 |  ;          the default performing provider ID type for the ins co's.
 | 
|---|
 | 11 |  ; IBRET = flag to return insurance ien (0) or file 355.97 ien (1)
 | 
|---|
 | 12 |  ; IBEMC = no longer used
 | 
|---|
 | 13 |  ;
 | 
|---|
 | 14 |  ; Function returns care unit needed flag (0=not needed, 1=needed) ^
 | 
|---|
 | 15 |  ; AND   if IBSEQ="": primary ins or 355.97 ien if care unit needed ^
 | 
|---|
 | 16 |  ;                    secondary ins or 355.97 ien if care unit needed ^
 | 
|---|
 | 17 |  ;                    tertiary ins or 355.97 ien if care unit needed
 | 
|---|
 | 18 |  ;                    (these would be '^' pieces 2,3,4)
 | 
|---|
 | 19 |  ;       if IBSEQ   : IBSEQ seq ins or 355.97 ien if care unit needed
 | 
|---|
 | 20 |  ;                    (this would be '^' piece 2)
 | 
|---|
 | 21 |  ;
 | 
|---|
 | 22 |  Q:$G(IBEMC) 0
 | 
|---|
 | 23 |  N Q,Z,Z0,Z4,IB,IBCTYP,IBFTYP,IBQ,IBRX,IBPT
 | 
|---|
 | 24 |  S (IBRX,IB)=0
 | 
|---|
 | 25 |  S IBFTYP=$$FT^IBCEF(IBIFN),IBCTYP=$$INPAT^IBCEF(IBIFN,1)
 | 
|---|
 | 26 |  S IBFTYP=$S(IBFTYP=3:1,1:2) S:IBCTYP'=1 IBCTYP=2
 | 
|---|
 | 27 |  I IBCTYP=2 S IBRX=$$ISRX^IBCEF1(IBIFN) ; Outpatient pharmacy
 | 
|---|
 | 28 |  S IBPT=$G(IBPTYP)
 | 
|---|
 | 29 |  ;
 | 
|---|
 | 30 |  S (Z,IBQ)=0
 | 
|---|
 | 31 |  F  D  Q:IBQ
 | 
|---|
 | 32 |  . I $G(IBSEQ) S Z=IBSEQ,IBQ=1 ; Only once for specific COB sequence
 | 
|---|
 | 33 |  . I '$G(IBSEQ) S Z=Z+1,IBPTYP=IBPT I Z>3 S IBQ=1 Q  ; Up to 3 times - all ins
 | 
|---|
 | 34 |  . S Z0=$$INSSEQ^IBCEP1(IBIFN,Z),Z4=$G(^DIC(36,+Z0,4))
 | 
|---|
 | 35 |  . I '$G(IBPTYP) S IBPTYP=+Z4
 | 
|---|
 | 36 |  . I 'Z0!'IBPTYP S:'Z0 IBQ=1 Q
 | 
|---|
 | 37 |  . S Q=+$$CAREUN(Z0,IBPTYP,IBFTYP,IBCTYP,IBRX)
 | 
|---|
 | 38 |  . I Q S $P(IB,U,$S($G(IBSEQ):Z+1,1:2))=$S($G(IBRET):Q,1:Z0)
 | 
|---|
 | 39 |  ;
 | 
|---|
 | 40 |  I $TR(IB,"^0") S $P(IB,U)=1
 | 
|---|
 | 41 |  Q IB
 | 
|---|
 | 42 |  ;
 | 
|---|
 | 43 | CAREUN(IBINS,IBPTYP,IBFTYP,IBCTYP,IBRX) ; Find ien (file 355.96) for care
 | 
|---|
 | 44 |  ; unit for the combination of ins co, prov type, form type and
 | 
|---|
 | 45 |  ; care type
 | 
|---|
 | 46 |  ; IBINS = ien of ins co (file 36)
 | 
|---|
 | 47 |  ; IBPTYP = ien of provider id type (file 355.97)
 | 
|---|
 | 48 |  ; IBFTYP = form type (1=UB,2=1500)
 | 
|---|
 | 49 |  ; IBCTYP = care type (1=inpat,2=outpat)
 | 
|---|
 | 50 |  ; IBRX = 1 if outpat/Rx bill
 | 
|---|
 | 51 |  ;
 | 
|---|
 | 52 |  N IB
 | 
|---|
 | 53 |  S IB=""
 | 
|---|
 | 54 |  ;
 | 
|---|
 | 55 |  I $G(IBRX) D
 | 
|---|
 | 56 |  . N T
 | 
|---|
 | 57 |  . S T=$O(^IBA(355.96,"AD",IBINS,IBFTYP,3,IBPTYP,0))
 | 
|---|
 | 58 |  . I 'T S T=$O(^IBA(355.96,"AD",IBINS,0,3,IBPTYP,0))
 | 
|---|
 | 59 |  . I T S IB=T
 | 
|---|
 | 60 |  ;
 | 
|---|
 | 61 |  I 'IB D  ; Find from most specific to least specific
 | 
|---|
 | 62 |  . I $O(^IBA(355.96,"AD",IBINS,IBFTYP,IBCTYP,IBPTYP,0)) S IB=+$O(^(0)) Q
 | 
|---|
 | 63 |  . I $O(^IBA(355.96,"AD",IBINS,IBFTYP,0,IBPTYP,0)) S IB=+$O(^(0)) Q
 | 
|---|
 | 64 |  . I $O(^IBA(355.96,"AD",IBINS,0,IBCTYP,IBPTYP,0)) S IB=+$O(^(0)) Q
 | 
|---|
 | 65 |  . I $O(^IBA(355.96,"AD",IBINS,0,0,IBPTYP,0)) S IB=+$O(^(0)) Q
 | 
|---|
 | 66 |  ;
 | 
|---|
 | 67 |  Q IB
 | 
|---|
 | 68 |  ;
 | 
|---|
 | 69 | DISP(IBINS,IBTYPE) ; Return the name of the type of care unit needed
 | 
|---|
 | 70 |  ; IBINS = ien of ins co (file 36)
 | 
|---|
 | 71 |  ; IBTYPE = 2:PERFORMING PROVIDER ID
 | 
|---|
 | 72 |  I $G(IBTYPE)'=2 Q ""
 | 
|---|
 | 73 |  Q $P($G(^DIC(36,+IBINS,4)),U,9)
 | 
|---|
 | 74 |  ;
 | 
|---|
 | 75 | DELID(IBIFN,IBSEQ,IBX) ; Delete all provider data specific to an ins co
 | 
|---|
 | 76 |  ; represented by the COB sequence IBSEQ for bill IBIFN
 | 
|---|
 | 77 |  ; IBX = 1 if called from care unit prompt - don't delete value
 | 
|---|
 | 78 |  N IBZ,IBDR,X,Y,Z0,Z1
 | 
|---|
 | 79 |  S IBZ=0
 | 
|---|
 | 80 |  Q:'$G(IBSEQ)!($G(IBSEQ)>3)
 | 
|---|
 | 81 |  F  S IBZ=$O(^DGCR(399,IBIFN,"PRV",IBZ)) Q:'IBZ  S Z0=$G(^(IBZ,0)),Z1=$G(^(1)) D
 | 
|---|
 | 82 |  . ; Delete provider id's
 | 
|---|
 | 83 |  . I $P(Z0,U,4+IBSEQ)'="" S IBDR(399.0222,IBZ_","_IBIFN_",",(4+IBSEQ/100))="@"
 | 
|---|
 | 84 |  . ; Delete provider id types
 | 
|---|
 | 85 |  . I $P(Z0,U,11+IBSEQ)'="" S IBDR(399.0222,IBZ_","_IBIFN_",",(11+IBSEQ/100))="@"
 | 
|---|
 | 86 |  . I $D(IBDR) D FILE^DIE(,"IBDR")
 | 
|---|
 | 87 |  Q
 | 
|---|
 | 88 |  ;
 | 
|---|
 | 89 | SETID(IBIFN,IBSEQ) ; Default provider id for bill IBIFN and ins co for COB
 | 
|---|
 | 90 |  ; sequence IBSEQ
 | 
|---|
 | 91 |  N IBZ,X,Y,IBDR,IBT
 | 
|---|
 | 92 |  S IBZ=0
 | 
|---|
 | 93 |  Q  ; No longer used as of patch 232
 | 
|---|
 | 94 |  ;Q:'$G(IBSEQ)!($G(IBSEQ)>3)
 | 
|---|
 | 95 |  ;F  S IBZ=$O(^DGCR(399,IBIFN,"PRV",IBZ)) Q:'IBZ  S Z0=$G(^(IBZ,0)),Z1=$G(^(1)) D
 | 
|---|
 | 96 |  ;. ; Update provider id's if no care unit is needed
 | 
|---|
 | 97 |  ;. I $P(Z0,U,2)'="" D
 | 
|---|
 | 98 |  ;.. S Z=$$GETID^IBCEP2(IBIFN,2,$P(Z0,U,2),IBSEQ,.IBT)
 | 
|---|
 | 99 |  ;.. I Z'="",IBT S IBDR(399.0222,IBZ_","_IBIFN_",",(4+IBSEQ/100))=Z,IBDR(399.0222,IBZ_","_IBIFN_",",(11+IBSEQ/100))=+IBT
 | 
|---|
 | 100 |  ;. I $D(IBDR) D FILE^DIE(,"IBDR")
 | 
|---|
 | 101 |  Q
 | 
|---|
 | 102 |  ;
 | 
|---|
 | 103 | ALLID(IBIFN,IBFLD,IBFUNC) ; If form type or care type (I/O/RX) changes,
 | 
|---|
 | 104 |  ; determine new provider id values if possible and update them
 | 
|---|
 | 105 |  ; this includes primary, secondary, tertiary id's
 | 
|---|
 | 106 |  ; IBIFN = ien of claim (file 399)
 | 
|---|
 | 107 |  ; IBFLD = ien of the field being changed when this call is made
 | 
|---|
 | 108 |  ;         (.19 = form type   .25 = care type)
 | 
|---|
 | 109 |  ; IBFUNC = 1 to add,  2 to delete
 | 
|---|
 | 110 |  N Z,Z0,IBC,IBDR,IBT
 | 
|---|
 | 111 |  S Z=0
 | 
|---|
 | 112 |  F  S Z=$O(^DGCR(399,IBIFN,"PRV",Z)) Q:'Z  S Z0=$G(^(Z,0)) D
 | 
|---|
 | 113 |  . F IBC=5:1:7 I $S(IBFUNC=2:$P(Z0,U,IBC)'="",1:1) S IBDR(399.0222,IBC_","_IBIFN_",",(IBC/100))=$S(IBFUNC=2:"@",1:$$GETID^IBCEP2(IBIFN,2,$P(Z0,U,2),IBC-4,.IBT))
 | 
|---|
 | 114 |  I $D(IBDR) D FILE^DIE(,"IBDR")
 | 
|---|
 | 115 |  Q
 | 
|---|
 | 116 |  ;
 | 
|---|
 | 117 | CUMNT ; Add/edit care unit
 | 
|---|
 | 118 |  N D,DIE,DIC,DIK,DIR,DA,X,Y,IB,IBINS,IBF,IBCT,IBOK,IBPTYP,IBOLD,IBY,IBINS1,IBPTYP1,DUOUT,DTOUT
 | 
|---|
 | 119 | INS F  D  Q:Y'>0
 | 
|---|
 | 120 |  . S DIC="^DIC(36,",DIC(0)="AEMQ" D ^DIC K DIC
 | 
|---|
 | 121 |  . I $D(DUOUT)!$D(DTOUT) S Y=-1 Q
 | 
|---|
 | 122 |  . I Y'>0 S DIR(0)="EA",DIR("A")="Insurance Co is required - press enter to continue: " D ^DIR K DIR Q
 | 
|---|
 | 123 |  . S IBINS=+Y,IBF="A",IBINS1=$P(Y,U,2)
 | 
|---|
 | 124 |  I $O(^IBA(355.96,"D",IBINS,""))'="" D
 | 
|---|
 | 125 |  . W ! S DIR("A")="(A)dd or (E)dit entries?: ",DIR("B")="Add",DIR(0)="SA^A:Add;E:Edit" D ^DIR W ! K DIR
 | 
|---|
 | 126 |  . S IBF=Y
 | 
|---|
 | 127 |  Q:$G(IBF)=""!("AE"'[$G(IBF))
 | 
|---|
 | 128 |  ;
 | 
|---|
 | 129 |  I IBINS>0 D
 | 
|---|
 | 130 |  . I IBF="A" D NEW^IBCEP4A(1)
 | 
|---|
 | 131 |  . I IBF="E" D CHANGE^IBCEP4A(1)
 | 
|---|
 | 132 |  ;
 | 
|---|
 | 133 |  Q
 | 
|---|
 | 134 |  ;
 | 
|---|
 | 135 | DUP(IBDA,IBOLD,IBFUNC) ; Check if the combination of ins co, prov type, care
 | 
|---|
 | 136 |  ; type and form already exists in file 355.96
 | 
|---|
 | 137 |  ; IBDA = ien of entry in file 355.96
 | 
|---|
 | 138 |  ; IBOLD = the 0-node before changes were made - used to reset the fields
 | 
|---|
 | 139 |  N DUP,IB0,DR,X,Y,DIK,DIE,DA
 | 
|---|
 | 140 |  S IB0=$G(^IBA(355.96,IBDA,0)),DUP=0
 | 
|---|
 | 141 |  ;
 | 
|---|
 | 142 |  I $O(^IBA(355.96,"AUNIQ",+$P(IB0,U,3),+IB0,+$P(IB0,U,4),+$P(IB0,U,5),+$P(IB0,U,6),0))'=IBDA!($O(^IBA(355.96,"AUNIQ",+$P(IB0,U,3),+IB0,+$P(IB0,U,4),+$P(IB0,U,5),+$P(IB0,U,6),""),-1)'=IBDA) D
 | 
|---|
 | 143 |  . S DUP=1
 | 
|---|
 | 144 |  . I IBFUNC="E" D
 | 
|---|
 | 145 |  .. S DR=";.01///"_$P(IBOLD,U)_";.03///"_$S($P(IBOLD,U,3)'="":"/"_$P(IBOLD,U,3),1:"@")_";.04///"_$S($P(IBOLD,U,4)'="":"/"_$P(IBOLD,U,4),1:"@")
 | 
|---|
 | 146 |  .. S DR=DR_";05///"_$S($P(IBOLD,U,5)'="":"/"_$P(IBOLD,U,5),1:"@")_";.06///"_$S($P(IBOLD,U,6)'="":"/"_$P(IBOLD,U,6),1:"@")
 | 
|---|
 | 147 |  .. S DA=IBDA,DIE="^IBA(355.96," D ^DIE
 | 
|---|
 | 148 |  . I IBFUNC="A" D
 | 
|---|
 | 149 |  .. S DA=IBDA,DIK="^IBA(355.96," D ^DIK
 | 
|---|
 | 150 |  Q DUP
 | 
|---|
 | 151 |  ;
 | 
|---|
 | 152 | PROFID(IBIFN,IBSEQ,IBID) ; Return id and type of rendering provider id
 | 
|---|
 | 153 |  ; used for insurance co at COB seq IBSEQ for bill ien IBIFN
 | 
|---|
 | 154 |  ; RETURN VALUES:
 | 
|---|
 | 155 |  ; piece 1:
 | 
|---|
 | 156 |  ;  1 = FEDERAL TAX ID
 | 
|---|
 | 157 |  ;  2 = INSURANCE CO SPECIFIC ID
 | 
|---|
 | 158 |  ;  3 = NETWORK ID
 | 
|---|
 | 159 |  ; "" = not a CMS-1500 bill or no id found
 | 
|---|
 | 160 |  ; piece 2:
 | 
|---|
 | 161 |  ;  the id #
 | 
|---|
 | 162 |  N IBTYP,IBXDATA,IBZ
 | 
|---|
 | 163 |  S:'$G(IBSEQ) IBSEQ=+$$COBN^IBCEF(IBXIEN)
 | 
|---|
 | 164 |  S IBTYP=""_U_$G(IBID)
 | 
|---|
 | 165 |  G:$$FT^IBCEF(IBIFN)'=2 PROFIDQ
 | 
|---|
 | 166 |  I '$D(IBID) D F^IBCEF("N-ALL ATT/RENDERING PROV ID","IBZ",,IBIFN) S IBID=$$NOPUNCT^IBCEF($P(IBZ,U,IBSEQ+1))
 | 
|---|
 | 167 |  G:IBID="" PROFIDQ
 | 
|---|
 | 168 |  S IBTYP=$S($$NOPUNCT^IBCEF(IBID)=$$NOPUNCT^IBCEF($P($G(^IBE(350.9,1,1)),U,5)):1,$$NETWRK(IBIFN,IBID,IBSEQ):3,1:2)
 | 
|---|
 | 169 |  S IBTYP=IBTYP_U_IBID
 | 
|---|
 | 170 |  ;
 | 
|---|
 | 171 | PROFIDQ Q IBTYP
 | 
|---|
 | 172 |  ;
 | 
|---|
 | 173 | NETWRK(IBIFN,IBID,IBSEQ) ; Determine if ID number IBID is the same as the
 | 
|---|
 | 174 |  ; network id for the insurance co
 | 
|---|
 | 175 |  ;  IBIFN = bill ien (file 399)
 | 
|---|
 | 176 |  ;  IBSEQ = COB seq # of bill
 | 
|---|
 | 177 |  ;   Returns 1 if network ID match is found for bill IBIFN, COB seq IBSEQ
 | 
|---|
 | 178 |  N IBINS,IBNET
 | 
|---|
 | 179 |  S IBNET=0
 | 
|---|
 | 180 |  Q IBNET
 | 
|---|
 | 181 |  ; This section needs work *********
 | 
|---|
 | 182 |  I '$G(IBSEQ) S IBSEQ=+$$COBN^IBCEF(IBXIEN)
 | 
|---|
 | 183 |  S IBINS=+$G(^DGCR(399,IBIFN,"I"_IBSEQ))
 | 
|---|
 | 184 |  I $P($G(^IBE(355.97,+$$PPTYP^IBCEP0(IBINS),1)),U,6) D
 | 
|---|
 | 185 |  . ; performing provider id type is a network id type
 | 
|---|
 | 186 |  . I $$NOPUNCT^IBCEF($G(IBID))=$$NOPUNCT^IBCEF($$GETID^IBCEP2(IBIFN,3,$$PERFPRV^IBCEP2A(IBIFN),IBSEQ)) S IBNET=1
 | 
|---|
 | 187 |  Q IBNET
 | 
|---|
 | 188 |  ;
 | 
|---|
 | 189 |  ;
 | 
|---|
 | 190 |  ; Parameter definitions for UNIQ1 and UNIQ2 in IBCEP2
 | 
|---|
 | 191 |  ;   IBIFN = ien of bill (file 399)
 | 
|---|
 | 192 |  ;   IBINS = ien of insurance co (file 36) or *ALL* for all insurance
 | 
|---|
 | 193 |  ;   IBPTYP = the ien of the provider id type in file 355.97
 | 
|---|
 | 194 |  ;   IBUNIT = the value of the specific care unit to use for a match
 | 
|---|
 | 195 |  ;            or *N/A* if none needed
 | 
|---|
 | 196 |  ;   IBCU = the ien of the entry being matched in start file
 | 
|---|
 | 197 |  ;   IBT = the second and third pieces are set to the entry ien^file #
 | 
|---|