1 | IBCEF74 ;WOIFO/SS - FORMATTER/EXTRACT BILL FUNCTIONS ;31-JUL-03
|
---|
2 | ;;2.0;INTEGRATED BILLING;**232,280,155,290,291,320,358,343,374**;21-MAR-94;Build 16
|
---|
3 | ;; Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | SORT(IBPRNUM,IBPRTYP,IB399,IBSRC,IBDST,IBN,IBEXC,IBSEQ,IBLIMIT) ;
|
---|
6 | D SORT^IBCEF77($G(IBPRNUM),$G(IBPRTYP),$G(IB399),.IBSRC,.IBDST,$G(IBN),$G(IBEXC),$G(IBSEQ),$G(IBLIMIT))
|
---|
7 | Q
|
---|
8 | ;
|
---|
9 | ;-- PROVINF --
|
---|
10 | ;Create array with prov info
|
---|
11 | ;Input:
|
---|
12 | ; IB399 - ien #399
|
---|
13 | ; IBPRNUM - 1=prim ins, 2= sec, 3 -tert
|
---|
14 | ; IBRES - for results
|
---|
15 | ; IBSORT - to sort OTHER INSURANCE data
|
---|
16 | ; if PROVINF is called for "C" mode of PROVIDER subroutine then
|
---|
17 | ; IBSORT can be any (say 1)
|
---|
18 | ; if PROVINF is called for "O" mode then can be more than set of data
|
---|
19 | ; - need to sort array to use it (like IBXDATA(1) and IBXDATA(2))
|
---|
20 | ; for mode "O" it should be 1 or 2 (see PROVIDER section)
|
---|
21 | ;IBINSTP - "C" -current ins, "O"-other
|
---|
22 | ;Output:
|
---|
23 | ; IBRES(PRNUM,PRTYPE,SEQ#)=PROV^INSUR^IDTYPE^ID^FORMTYP^CARETYP
|
---|
24 | ; where:(see PROVIDER)
|
---|
25 | PROVINF(IB399,IBPRNUM,IBRES,IBSORT,IBINSTP) ;
|
---|
26 | I $G(IB399)="" Q
|
---|
27 | I +$G(IBSORT)=0 S IBSORT=$G(IBPRNUM)
|
---|
28 | N IBPRTYP,IBINSCO,IBPROV,IBFRMTYP,IBCARE,IB35591,IBN,IBCURR,IBEXC,IBALLSSN,IBSSNIEN,IBLIMIT
|
---|
29 | S IBN=0
|
---|
30 | D F^IBCEF("N-ALL ATT/RENDERING PROV SSN","IBALLSSN",,IB399)
|
---|
31 | S Q=0 F S Q=$O(^IBE(355.97,Q)) Q:'Q I $P($G(^(Q,0)),U,3)="SY" S IBSSNIEN=Q Q
|
---|
32 | S IBINSCO=+$P($G(^DGCR(399,IB399,"M")),"^",IBPRNUM)
|
---|
33 | S IBFRMTYP=$$FT^IBCEF(IB399),IBFRMTYP=$S(IBFRMTYP=2:2,IBFRMTYP=3:1,1:0)
|
---|
34 | S IBCARE=$S($$ISRX^IBCEF1(IB399):3,1:0) ;if an Rx refill bill
|
---|
35 | S:IBCARE=0 IBCARE=$$INPAT^IBCEF(IB399,1) S:'IBCARE IBCARE=2 ;1-inp,2-out
|
---|
36 | S IBLIMIT=$S($G(IBINSTP)="C":5,1:3) ; Limits on secondary IDs
|
---|
37 | F IBPRTYP=1:1:9 D
|
---|
38 | . N Z,IB355OV
|
---|
39 | . S IBPROV=$$PROVPTR^IBCEF7(IB399,IBPRTYP)
|
---|
40 | . Q:+IBPROV=0
|
---|
41 | . ;don't create anything if form type not CMS-1500 or UB
|
---|
42 | . Q:IBFRMTYP=0
|
---|
43 | . N IBRETARR S IBRETARR=0
|
---|
44 | . D PRACT^IBCEF71(IBINSCO,IBFRMTYP,IBCARE,IBPROV,.IBRETARR,IBPRTYP,$G(IBINSTP))
|
---|
45 | . S IB355OV="",IBEXC=""
|
---|
46 | . S Z=$O(^DGCR(399,IB399,"PRV","B",IBPRTYP,0))
|
---|
47 | . I Z S Z=$G(^DGCR(399,IB399,"PRV",Z,0)) D
|
---|
48 | .. I $P(Z,U,IBPRNUM+4)'="",$P(Z,U,IBPRNUM+11)'="" S IB355OV=$P(Z,U,IBPRNUM+4)_U_$P(Z,U,IBPRNUM+11)
|
---|
49 | . S IBCURR=$$COB^IBCEF(IB399)
|
---|
50 | . S IBN=0,IB35591=$$CH35591^IBCEF72(IBINSCO,IBFRMTYP,IBCARE)
|
---|
51 | . I $G(IBINSTP)="C",$G(IBPRNUM)=1,"34"[$G(IBPRTYP),"P"[$G(IBCURR),$G(IBFRMTYP)=2,$$MCRONBIL^IBEFUNC(IB399) S IB355OV=$$MCR24K^IBCEU3(IB399)_"^12"
|
---|
52 | . I $G(IBINSTP)="O","34"[$G(IBPRTYP),"ST"[$G(IBCURR),$G(IBFRMTYP)=2,$$MCRONBIL^IBEFUNC(IB399) S IB355OV=$$MCR24K^IBCEU3(IB399)_"^12" ;Calculate MEDICARE (WNR) specific provider qualifier and ID for CMS-1500 secondary claims
|
---|
53 | . I $P(IB355OV,U,2) D
|
---|
54 | .. I $$CHCKSEC^IBCEF73(IBFRMTYP,IBPRTYP,$G(IBINSTP),$P($G(^IBE(355.97,+$P(IB355OV,U,2),0)),U,3)) D
|
---|
55 | ... S IBEXC=$P(IB355OV,U,2),IBN=IBN+1,IBRES(IBSORT,IBPRTYP,IBN)="OVERRIDE^"_IBINSCO_U_$P($G(^IBE(355.97,+IBEXC,0)),U,3)_U_$P(IB355OV,U)_"^^^^^"_+IBEXC
|
---|
56 | . I IB35591'="",IBEXC'=$P(IB35591,U,3) S:$$CHCKSEC^IBCEF73(IBFRMTYP,IBPRTYP,$G(IBINSTP),$P(IB35591,"^")) IBN=IBN+1,IBRES(IBSORT,IBPRTYP,IBN)="DEFAULT^"_IBINSCO_"^"_IB35591_"^^",$P(IBRES(IBSORT,IBPRTYP,IBN),U,9)=$P(IB35591,U,3)
|
---|
57 | . D SORT(IBSORT,IBPRTYP,IB399,.IBRETARR,.IBRES,IBN,IBEXC,IBPRNUM,IBLIMIT)
|
---|
58 | . S IBRES(IBSORT,IBPRTYP)=IBPROV
|
---|
59 | S IBRES(IBSORT)=$S(IBPRNUM=3:"T",IBPRNUM=2:"S",1:"P")
|
---|
60 | Q
|
---|
61 | ;
|
---|
62 | SECIDCK(IBIFN,IBSEQ,IBTYP,IBIFN1) ; Function returns 1 if ID type ptr in
|
---|
63 | ; IBTYP is valid X12 code for the claim/prov function (IBPROVF)
|
---|
64 | ; as a sec id
|
---|
65 | ; IBSEQ = COB seq being checked
|
---|
66 | ; IBIFN1 = entry # in PRV multiple being checked
|
---|
67 | ; Called from input transform of fields .12-.14, subfile 399.0222
|
---|
68 | I $G(IBIFN)="" Q
|
---|
69 | N IBOK,IBFRM,IBCOBN,IBX12,IBPROVF
|
---|
70 | S IBPROVF=+$G(^DGCR(399,IBIFN,"PRV",IBIFN1,0))
|
---|
71 | S IBFRM=$$FT^IBCEF(IBIFN),IBFRM=$S(IBFRM=3:1,1:2) ; Form type
|
---|
72 | S IBCOBN=$$COBN^IBCEF(IBIFN) S:'IBCOBN IBCOBN=1 ; Current COB seq
|
---|
73 | S IBX12=$P($G(^IBE(355.97,+IBTYP,0)),U,3) ; X12 code for prov id typ
|
---|
74 | Q $$CHSEC^IBCEF73(IBFRM,IBPROVF,$S(IBSEQ=IBCOBN:"C",1:"O"),IBX12)
|
---|
75 | ;
|
---|
76 | DEFID(IBIFN,IBPRV) ;
|
---|
77 | ; IBIFN = ien of bill
|
---|
78 | ; IBPRV = ien of entry subfile 399.0222
|
---|
79 | ; Function returns default ids: prim id def^sec id def^tert id def
|
---|
80 | ; SSN cannot be the default ID
|
---|
81 | I $G(IBIFN)="" Q ""
|
---|
82 | N Z,Z1,ID,IBZ,IBINS,IBINS4,IBUB
|
---|
83 | S IBZ=""
|
---|
84 | S IBUB=($$FT^IBCEF(IBIFN)=3)
|
---|
85 | D F^IBCEF("N-ALL ATT/REND PROV SSN/EI","IBZ","",IBIFN)
|
---|
86 | S Z=$G(^DGCR(399,IBIFN,"PRV",IBPRV,0)),ID=$P(Z,U,5,7)
|
---|
87 | F Z1=1:1:3 I $P(ID,U,Z1)="" D
|
---|
88 | . Q:'$G(^DGCR(399,IBIFN,"I"_Z1)) S IBINS=+^("I"_Z1)
|
---|
89 | . S $P(ID,U,Z1)=$$GETID^IBCEP2(IBIFN,2,$P(Z,U,2),Z1)
|
---|
90 | . ; Set default if null
|
---|
91 | . I $P(ID,U,Z1)="" S $P(ID,U,Z1)="VAD000"
|
---|
92 | Q ID
|
---|
93 | ;
|
---|
94 | DISPID(IBXIEN) ; Display list of all prov and fac ids that will
|
---|
95 | ; extract for this bill if transmitted electronically
|
---|
96 | I $G(IBXIEN)="" Q
|
---|
97 | N IBID,IBID1,IBZ,IBCT,IBFRM,IBCOBN,IBATT,IBQUIT,IBTYP,DIR,IBIFN,X,Y,Z,Z0,Z1
|
---|
98 | N IBNPI,IBNONPI
|
---|
99 | S IBIFN=IBXIEN
|
---|
100 | S IBFRM=$$FT^IBCEF(IBIFN),IBCOBN=$$COBN^IBCEF(IBIFN),IBATT=$S(IBFRM=2:3,1:4)
|
---|
101 | W @IOF
|
---|
102 | W !,"If this bill is transmitted electronically, the following IDs will be sent:"
|
---|
103 | ; Returns all prov sec ids to be transmitted in indicated segments
|
---|
104 | S Z=+$G(^DGCR(399,IBIFN,"I1")) I Z W !," Primary Ins Co: ",$$EXTERNAL^DILFD(399,101,"",Z) I IBCOBN=1 W ?54,"<<<Current Ins"
|
---|
105 | S Z=+$G(^DGCR(399,IBIFN,"I2")) I Z W !,"Secondary Ins Co: ",$$EXTERNAL^DILFD(399,101,"",Z) I IBCOBN=2 W ?54,"<<<Current Ins"
|
---|
106 | S Z=+$G(^DGCR(399,IBIFN,"I3")) I Z W !," Tertiary Ins Co: ",$$EXTERNAL^DILFD(399,101,"",Z) I IBCOBN=3 W ?54,"<<<Current Ins"
|
---|
107 | W !!,"Provider IDs: (VistA Records OP1,OP2,OP4,OP8,OP9,OPR2,OPR3,OPR4,OPR5,OPR8):"
|
---|
108 | F Z=1:1:3 I $G(^DGCR(399,IBIFN,"I"_Z)) D PROVINF(IBIFN,Z,.IBID,"",$S(IBCOBN=Z:"C",1:"O"))
|
---|
109 | S Z=0 F S Z=$O(IBID(Z)) Q:'Z S Z0=0 F S Z0=$O(IBID(Z,Z0)) Q:'Z0 S IBID1(Z0,Z)="",Z1=0 F S Z1=$O(IBID(Z,Z0,Z1)) Q:'Z1 I $P(IBID(Z,Z0,Z1),U,9) S IBID1(Z0,Z,Z1)=IBID(Z,Z0,Z1)
|
---|
110 | ; PRXM/KJH - Add NPI to display for patch 343.
|
---|
111 | S IBNPI=$$PROVNPI^IBCEF73A(IBIFN,.IBNONPI)
|
---|
112 | S Z=+$O(^DGCR(399,IBIFN,"PRV","B",IBATT,0))
|
---|
113 | I Z S Z=$P($G(^DGCR(399,IBIFN,"PRV",Z,0)),U,2)
|
---|
114 | W !,?5,"ATTENDING/RENDERING: ",$$EXTERNAL^DILFD(399.0222,.02,"",Z)
|
---|
115 | D F^IBCEF("N-ALL ATT/REND PROV SSN/EI","IBZ","",IBIFN)
|
---|
116 | W !,?8,"NPI: ",?40,$S($P(IBNPI,U,IBATT)'="":$P(IBNPI,U,IBATT),1:"***MISSING***")
|
---|
117 | W !,?8,"SSN: ",?40,$S($P(IBZ,U,IBATT)'="":$P(IBZ,U,IBATT),1:"***MISSING***")
|
---|
118 | I $O(IBID1(IBATT,0)) W !,?8,"Secondary IDs"
|
---|
119 | S IBQUIT=0
|
---|
120 | ;
|
---|
121 | ; Attending/Rendering (4/3) secondary IDs
|
---|
122 | S Z0=0 F S Z0=$O(IBID1(IBATT,Z0)) Q:'Z0!IBQUIT K IBTYP S Z1=0 F S Z1=$O(IBID1(IBATT,Z0,Z1)) Q:'Z1 D Q:IBQUIT
|
---|
123 | . Q:$D(IBTYP(+$P(IBID1(IBATT,Z0,Z1),U,9))) ;1st of each type transmits
|
---|
124 | . I ($Y+5)>IOSL S IBQUIT=$$NOMORE() Q:IBQUIT
|
---|
125 | . S IBTYP(+$P(IBID1(IBATT,Z0,Z1),U,9))=""
|
---|
126 | . W !,?8,"(",$E("PST",Z0),") ",$$EXTERNAL^DILFD(36,4.01,"",$P(IBID1(IBATT,Z0,Z1),U,9)),?40,$P(IBID1(IBATT,Z0,Z1),U,4)
|
---|
127 | . Q
|
---|
128 | I IBQUIT G DISPIDX
|
---|
129 | ;
|
---|
130 | ; Referring(1), Operating(2), Supervising(5), Other(9) secondary IDs
|
---|
131 | ; PRXM/KJH - Patch 343. Modified first loop so it will always display provider and NPI and conditionally display other data.
|
---|
132 | ; S Z=0 F S Z=$O(IBID1(Z)) Q:'Z I Z<3!(Z>4) D Q:IBQUIT
|
---|
133 | S Z=0 F S Z=$O(^DGCR(399,IBIFN,"PRV","B",Z)) Q:'Z I Z<3!(Z>4) D Q:IBQUIT
|
---|
134 | . N Q
|
---|
135 | . S Q=+$O(^DGCR(399,IBIFN,"PRV","B",Z,0))
|
---|
136 | . W !!,?5,$$EXTERNAL^DILFD(399.0222,.01,"",Z),": "_$$EXTERNAL^DILFD(399.0222,.02,"",$P($G(^DGCR(399,IBIFN,"PRV",Q,0)),U,2))
|
---|
137 | . W !,?8,"NPI: ",?40,$S($P(IBNPI,U,Z)'="":$P(IBNPI,U,Z),1:"***MISSING***")
|
---|
138 | . S Z0=0 F S Z0=$O(IBID1(Z,Z0)) Q:'Z0!IBQUIT K IBTYP S Z1=0 F S Z1=$O(IBID1(Z,Z0,Z1)) Q:'Z1!IBQUIT D
|
---|
139 | .. Q:$D(IBTYP(+$P(IBID1(Z,Z0,Z1),U,9))) ; 1st of each type transmits
|
---|
140 | .. I ($Y+5)>IOSL S IBQUIT=$$NOMORE() Q:IBQUIT
|
---|
141 | .. S IBTYP(+$P(IBID1(Z,Z0,Z1),U,9))=""
|
---|
142 | .. W !,?8,"(",$E("PST",Z0),") ",$$EXTERNAL^DILFD(36,4.01,"",$P(IBID1(Z,Z0,Z1),U,9)),?40,$P(IBID1(Z,Z0,Z1),U,4)
|
---|
143 | .. Q
|
---|
144 | . Q
|
---|
145 | I IBQUIT G DISPIDX
|
---|
146 | ;
|
---|
147 | ; IB*2*320 - display additional IDs for ?ID
|
---|
148 | D EN^IBCEF74A(IBIFN,.IBQUIT)
|
---|
149 | ;
|
---|
150 | DISPIDX ;
|
---|
151 | I '$G(IBQUIT) S DIR(0)="EA",DIR("A")="Press RETURN to continue " W ! D ^DIR K DIR
|
---|
152 | Q
|
---|
153 | ;
|
---|
154 | NOMORE() ;
|
---|
155 | S DIR(0)="EA",DIR("A")="Press RETURN for more IDs or '^' to exit: " W ! D ^DIR
|
---|
156 | W @IOF
|
---|
157 | Q (Y'=1)
|
---|
158 | ;
|
---|
159 | DEFSEC(IBIFN,IBARR) ; Returns array in IBARR for default prov sec ids for ien IBIFN
|
---|
160 | ; IBARR if passed by ref is returned IBARR(prov function,COBN)=def id
|
---|
161 | I $G(IBIFN)=""
|
---|
162 | N IBCAR,IBCOBN,IBPC,IBINS,IBARRX,Q,Z,Z0,ZINS,X
|
---|
163 | K IBARR
|
---|
164 | S ZINS="",IBCOBN=$$COBN^IBCEF(IBIFN),IBPC=$S($$FT^IBCEF(IBIFN)=3:2,1:1)
|
---|
165 | S IBCAR=$$INPAT^IBCEF(IBIFN,1),IBCAR=$S('IBCAR:2,1:1)
|
---|
166 | F Z=1:1:3 S ZINS=ZINS_+$G(^DGCR(399,IBIFN,"I"_Z))_U
|
---|
167 | F Z=1:1:3 I $P(ZINS,U,Z),'$P($G(^DIC(36,+$P(ZINS,U,Z),4)),U,IBPC) S $P(ZINS,U,Z)=""
|
---|
168 | S Z=0 F S Z=$O(^DGCR(399,IBIFN,"PRV",Z)) Q:'Z S Z0=$G(^(Z,0)) D
|
---|
169 | . F Q=1:1:3 D
|
---|
170 | .. I $P(Z0,U,Q+4)'="" S IBARR(+Z0,Q)=$P(Z0,U,Q+4) Q ; Override
|
---|
171 | .. S IBINS=$P(ZINS,U,Q)
|
---|
172 | .. Q:'IBINS
|
---|
173 | .. S X=$$IDFIND^IBCEP2(IBIFN,"",$P(Z0,U,2),Q,1)
|
---|
174 | .. I X'="" S IBARR(+Z0,Q)=X
|
---|
175 | Q
|
---|
176 | ;
|
---|