| [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 # | 
|---|