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))
|
---|