1 | IBCE837A ;ALB/TMP - OUTPUT FOR 837 TRANSMISSION - CONTINUED ;8/6/03 10:50am
|
---|
2 | ;;2.0;INTEGRATED BILLING;**137,191,211,232,296,377**;21-MAR-94;Build 23
|
---|
3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | UPD(MSGNUM,BATCH,CNT,BILLS,DESC,IBBTYP,IBINS) ; Upd current batch + bills w/new status
|
---|
6 | ;MSGNUM = mail msg # for batch
|
---|
7 | ;BATCH = batch #
|
---|
8 | ;CNT = # of bills in batch
|
---|
9 | ;BILLS = array BILLS(bill ien in 364) in batch
|
---|
10 | ;DESC = 1-80 character description of batch
|
---|
11 | ;IBBTYP = X-Y where X = P for professional or I for institution
|
---|
12 | ; Y = 1 for test or 0 for live transmission
|
---|
13 | ; or 2 for live claim resubmitted as test
|
---|
14 | ;IBINS = ien of single insurance company for the batch (optional)
|
---|
15 | ;
|
---|
16 | N DIC,DIE,DR,DA,IBBATCH,IBIFN,IBIEN,IBYY,IBTXTEST,IBMRA
|
---|
17 | S IBBATCH=$O(^IBA(364.1,"B",+BATCH,"")) Q:'IBBATCH
|
---|
18 | S IBTXTEST=+$P(IBBTYP,"-",2)
|
---|
19 | I '$P($G(^IBE(350.9,1,8)),U,7) S IBINS=""
|
---|
20 | ;
|
---|
21 | S DIE="^IBA(364.1,",DA=IBBATCH,DR=".02////P;.03///"_CNT_";.04///"_MSGNUM_";.05///0;.07////1;.08///^S X="""_DESC_""""_$S($G(IBINS):";.12////"_IBINS,1:"")
|
---|
22 | ;
|
---|
23 | I '$P($G(^TMP("IBRESUBMIT",$J)),U,3) S DR=DR_";1.01///NOW;1.02///.5"
|
---|
24 | I $P($G(^TMP("IBRESUBMIT",$J)),U,2) S DR=DR_";.15////"_$P(^($J),U,2)
|
---|
25 | ;
|
---|
26 | S DR=DR_";.14////"_$S('IBTXTEST:0,1:1)_";.06////"_$S($E(IBBTYP)="P":2,1:3) D ^DIE ; Update batch
|
---|
27 | ;
|
---|
28 | I IBTXTEST=2 D ADDTXM^IBCEPTM(.BILLS,IBBATCH,$$NOW^XLFDT()) Q
|
---|
29 | I IBTXTEST'=2 S IBIEN=0 F S IBIEN=$O(BILLS(IBIEN)) Q:'IBIEN D ;Update each bill
|
---|
30 | .S DA=IBIEN,DIE="^IBA(364,",DR=".02////"_IBBATCH_";.03///P;.04///NOW" D ^DIE
|
---|
31 | .S IBIFN=+$G(^IBA(364,IBIEN,0))
|
---|
32 | . ;
|
---|
33 | . ; If this claim has just been retransmitted, set the .06 field for the previous transmission entry
|
---|
34 | . N PRVTXI,PRVTXD
|
---|
35 | . S PRVTXI=$O(^IBA(364,"B",IBIFN,IBIEN),-1) ; previous transmission for this claim
|
---|
36 | . I PRVTXI D
|
---|
37 | .. S PRVTXD=$G(^IBA(364,PRVTXI,0))
|
---|
38 | .. I '$F(".R.E.","."_$P(PRVTXD,U,3)_".") Q ; prev trans must have status of "R" or "E"
|
---|
39 | .. I $P(PRVTXD,U,7,8)'=$P($G(^IBA(364,IBIEN,0)),U,7,8) Q ; test bill and COB must be the same
|
---|
40 | .. S DA=PRVTXI,DIE=364,DR=".06///"_IBBATCH D ^DIE ; update the resubmit batch number
|
---|
41 | .. Q
|
---|
42 | . ;
|
---|
43 | .Q:$D(^TMP("IBRESUBMIT",$J))!($P($G(^DGCR(399,IBIFN,0)),U,13)=4)!(+$$TXMT^IBCEF4(IBIEN)=2)
|
---|
44 | .S IBMRA=$$NEEDMRA^IBEFUNC(IBIFN)
|
---|
45 | .I IBMRA="C",$P($G(^DGCR(399,IBIFN,0)),U,13)=2 S IBMRA=1
|
---|
46 | .I IBIFN D
|
---|
47 | ..S (DIC,DIE)="^DGCR(399,",DA=$P($G(^IBA(364,IBIEN,0)),U),DR="[IB STATUS]",IBYY=$S('IBMRA:"@91",1:"@911") D:DA ^DIE
|
---|
48 | ..D BSTAT^IBCDC(IBIFN) ; remove from AB list
|
---|
49 | Q
|
---|
50 | ;
|
---|
51 | PRE ; Run before processing a bill entry
|
---|
52 | K IBXSAVE,IBXERR,^UTILITY("VAPA",$J),^TMP("IBXSAVE",$J),^TMP($J),^TMP("DIERR",$J)
|
---|
53 | Q
|
---|
54 | ;
|
---|
55 | POST ; Run after processing a bill entry for cleanup
|
---|
56 | N Q
|
---|
57 | I $G(IBXERR)'="" D
|
---|
58 | .S ^TMP("IBXERR",$J,IBXIEN)=IBXERR K ^TMP("IBXDATA",$J)
|
---|
59 | .K ^TMP("IBHDR1",$J)
|
---|
60 | .I $D(^TMP("IBRESUBMIT",$J)),'$G(^TMP("IBEDI_TEST_BATCH",$J)) D ;Set not resub flag for non-test bill
|
---|
61 | ..N Z,Z0
|
---|
62 | ..S Z0=$P($G(^TMP("IBRESUBMIT",$J)),U) Q:Z0=""
|
---|
63 | ..S Z=$O(^IBA(364,"ABABI",+$O(^IBA(364.1,"B",Z0,"")),IBXIEN,""))
|
---|
64 | ..I Z S ^TMP("IBNOT",$J,Z)=IBXIEN
|
---|
65 | K IBXSAVE,IBXNOREQ,^TMP("IBXSAVE",$J),^TMP($J)
|
---|
66 | S Q="VA" F S Q=$O(^UTILITY(Q)) Q:$E(Q,1,2)'="VA" I $D(^(Q,$J)) K ^UTILITY(Q,$J)
|
---|
67 | D CLEAN^DILF
|
---|
68 | Q
|
---|
69 | ;
|
---|
70 | MAILIT(IBQUEUE,IBBILL,IBCTM,IBDUZ,IBDESC,IBBTYP,IBINS) ; Send mail msg, update bills
|
---|
71 | ;IBQUEUE = mail queue name to send 837 transactions to
|
---|
72 | ;IBBILL = array of ien's in file 364 of bills in batch - IBBILL(IEN)=""
|
---|
73 | ;IBCTM = # of bills in batch, returned reset to 0
|
---|
74 | ;IBDUZ = ien of user 'running' extract (if any)
|
---|
75 | ;IBDESC = description of batch
|
---|
76 | ;IBBTYP = X-Y where X = P for professional or I for institution
|
---|
77 | ; Y = 1 or 2 for test or 0 for live transmission
|
---|
78 | ;IBINS = ien of insurance company if only one/batch option (optional)
|
---|
79 | ;
|
---|
80 | N DIK,DA,XMTO,XMZ,XMBODY,XMDUZ,XMSUBJ,IBBDA,IBBNO
|
---|
81 | ;
|
---|
82 | S IBBNO=+$P($G(^TMP("IBHDR",$J)),U),IBBDA=$O(^IBA(364.1,"B",IBBNO,""))
|
---|
83 | I '$P($G(^IBE(350.9,1,8)),U,7) S IBINS=""
|
---|
84 | ;
|
---|
85 | I IBCTM D
|
---|
86 | . I +$G(^TMP("IBEDI_TEST_BATCH",$J)) S IBQUEUE="MCT"
|
---|
87 | . I IBQUEUE'="",IBQUEUE'["@" S XMTO("XXX@Q-"_IBQUEUE_".VA.GOV")=""
|
---|
88 | . I IBQUEUE["@" S XMTO(IBQUEUE)=""
|
---|
89 | . S XMDUZ=$G(IBDUZ),XMBODY="^TMP(""IBXMSG"","_$J_")",XMSUBJ=$S($P(IBBTYP,U,2):"** TEST"_$S($P(IBBTYP,U,2)=2:"/RESUB OF LIVE",1:""),1:"")_" CLAIM BATCH: "_$S(IBQUEUE'["@":IBQUEUE,1:$P(IBQUEUE,"@"))_"/"_IBBNO
|
---|
90 | . K XMZ
|
---|
91 | . D SENDMSG^XMXAPI(XMDUZ,XMSUBJ,XMBODY,.XMTO,,.XMZ)
|
---|
92 | . I $G(XMZ) D
|
---|
93 | .. D UPD(XMZ,$P($G(^TMP("IBHDR",$J)),U),IBCTM,.IBBILL,IBDESC,IBBTYP,IBINS) ;Update batch/bills
|
---|
94 | .. S ^TMP("IBCE-BATCH",$J,IBBNO)=IBBDA_U_IBCTM_U_$P($G(^TMP("IBRESUBMIT",$J)),U)
|
---|
95 | MAILQ S IBCTM=0
|
---|
96 | D CHKBTCH(+$G(^TMP("IBHDR",$J)))
|
---|
97 | K ^TMP("IBHDR",$J),^TMP("IBHDR1",$J),^TMP("IBXMSG",$J),IBBILL
|
---|
98 | Q
|
---|
99 | ;
|
---|
100 | CHKNEW(IBQ,IBBILL,IBCTM,IBDESC,IBBTYP,IBINS,IBSITE,IBSIZE) ;
|
---|
101 | ; Determine if ok to send msg
|
---|
102 | ; Check for one insurance per batch if IBINS defined
|
---|
103 | ; Returns IBSIZE, IBCTM, IBBILL (pass by reference)
|
---|
104 | ;
|
---|
105 | ; IBQ = data queue name
|
---|
106 | ; IBBILL = the 'list' of bill #'s in the batch
|
---|
107 | ; IBCTM = the # of claims output so far to the batch
|
---|
108 | ; IBDESC = the batch description text
|
---|
109 | ; IBBTYP = X-Y where X = P for professional or I for institution
|
---|
110 | ; Y = 1 for test or 0 for live transmission
|
---|
111 | ; IBINS = the ien of the single insurance co. for the batch (optional)
|
---|
112 | ; IBSITE = the '8' node of file 350.9 (IB PARAMETERS)
|
---|
113 | ; IBSIZE = the 'running' size of the output message
|
---|
114 | ;
|
---|
115 | Q:$S($G(IBINS)="":0,1:'$P(IBSITE,U,7))
|
---|
116 | ;
|
---|
117 | ; New batch needed
|
---|
118 | I IBCTM D MAILIT(IBQ,.IBBILL,.IBCTM,"",IBDESC,IBBTYP,IBINS) S IBSIZE=0
|
---|
119 | Q
|
---|
120 | ;
|
---|
121 | ERRMSG(XMBODY) ; Send bulletin for error message
|
---|
122 | N XMTO,XMSUBJ
|
---|
123 | S XMTO("I:G.IB EDI")="",XMSUBJ="EDI 837 TRANSMISSION ERRORS"
|
---|
124 | ;
|
---|
125 | D SENDMSG^XMXAPI(,XMSUBJ,XMBODY,.XMTO)
|
---|
126 | D ALERT("One or more EDI bills were not transmitted. Check your mail for details","G.IB EDI")
|
---|
127 | Q
|
---|
128 | ;
|
---|
129 | CLEANUP ; Cleans up bill transmission environment
|
---|
130 | ;
|
---|
131 | N IBTEST
|
---|
132 | S IBTEST=+$G(^TMP("IBEDI_TEST_BATCH",$J))
|
---|
133 | L -^IBA(364,0)
|
---|
134 | I $D(^TMP("IBRESUBMIT",$J,"IBXERR"))!$D(^TMP("IBONE",$J,"IBXERR"))!$D(^TMP("IBSELX",$J,"IBXERR")) D ;Error message to mail group
|
---|
135 | . N XMTO,XMBODY,XMDUZ,XMSUBJ,XMZ,IBFUNC
|
---|
136 | . S IBFUNC=$S($D(^TMP("IBRESUBMIT",$J,"IBXERR")):$S('IBTEST:1,1:4),$D(^TMP("IBONE",$J,"IBXERR")):2,1:3)
|
---|
137 | . Q:'IBFUNC
|
---|
138 | . S XMTO("I:G.IB EDI")="",XMDUZ="",XMBODY="^TMP("""_$S(IBFUNC=1!(IBFUNC=4):"IBRESUBMIT",1:"IBONE")_""","_$J_",""IBXERR"")"
|
---|
139 | . S XMSUBJ="EDI 837 B"_$P("ATCH^ILL^ILL(s)^ILL(s)",U,IBFUNC)_" NOT "_$S($G(^TMP("IBONE",$J)):"RE",1:"")_"SUBMITTED"_$S('IBTEST:"",1:" AS TEST CLAIMS")
|
---|
140 | . D SENDMSG^XMXAPI(XMDUZ,XMSUBJ,XMBODY,.XMTO,,.XMZ)
|
---|
141 | . K ^TMP("IBRESUBMIT",$J),^TMP("IBONE",$J)
|
---|
142 | ;
|
---|
143 | I $D(^TMP("IBRESUBMIT",$J)),'IBTEST D RESUBUP^IBCEM02 ;Upd resubmtd batch bills
|
---|
144 | I '$D(^TMP("IBSELX",$J)) K ^TMP("IBCE-BATCH",$J)
|
---|
145 | K ^TMP("IBXERR",$J),IBXERR
|
---|
146 | I 'IBTEST D CHKBTCH(+$G(^TMP("IBHDR",$J)))
|
---|
147 | CLEANP ; Entrypoint for extract data disply
|
---|
148 | K ^TMP("IBTXMT",$J),^TMP("IBXINS",$J)
|
---|
149 | K ^TMP("IBRESUBMIT",$J),^TMP("IBRESUB",$J),^TMP("IBNOT",$J),^TMP("IBONE",$J),^TMP("IBHDR",$J),^TMP("IBTX",$J),^TMP("IBEDI_TEST_BATCH",$J)
|
---|
150 | K ^UTILITY("VADM",$J)
|
---|
151 | D CLEAN^DILF
|
---|
152 | K ZTREQ S ZTREQ="@"
|
---|
153 | Q
|
---|
154 | ;
|
---|
155 | ALERT(XQAMSG,IBGRP) ; Send alert message
|
---|
156 | N XQA
|
---|
157 | S XQA(IBGRP)=""
|
---|
158 | D SETUP^XQALERT
|
---|
159 | Q
|
---|
160 | CHKBTCH(IBBNO) ; Delete batch whose batch # is IBBNO if no entries in file 364
|
---|
161 | ; and not a resubmitted batch
|
---|
162 | N IBZ,DA,DIK
|
---|
163 | S IBZ=+$O(^IBA(364.1,"B",+IBBNO,""))
|
---|
164 | I IBZ,'$O(^IBA(364,"C",IBZ,0)),'$P($G(^IBA(364.1,IBZ,0)),U,14) S DA=IBZ,DIK="^IBA(364.1," D ^DIK
|
---|
165 | Q
|
---|
166 | ;
|
---|
167 | TESTLIM(IBINS) ; Check for test bill limit per day has been reached
|
---|
168 | N IB3,DA,DIK
|
---|
169 | S IB3=$G(^DIC(36,IBINS,3))
|
---|
170 | I $P(IB3,U,5)'=DT S $P(IB3,U,7)=0
|
---|
171 | I ($P(IB3,U,7)+$G(^TMP("IBICT",$J,IBINS))+1)>$P(IB3,U,6) D Q
|
---|
172 | . S IBINS="" ;max # hit
|
---|
173 | . S DA=IBX,DIK="^IBA(364," D ^DIK
|
---|
174 | S ^TMP("IBICT",$J,IBINS)=$G(^TMP("IBICT",$J,IBINS))+1
|
---|
175 | Q
|
---|
176 | ;
|
---|
177 | SETVAR(IBXIEN,IBINS,IB0,IBSEC,IBNID,IB837R,IBDIV) ;
|
---|
178 | ; Set up variables needed for subscripts in sort global
|
---|
179 | ; ejk added IBSEC logic for patch 296
|
---|
180 | ; IBSEC=1 if primary bill, 2 if 2nd/non-MRA, 3 if 2nd/MRA
|
---|
181 | S IBSEC=$S($$COBN^IBCEF(IBXIEN)=1:1,'$$MRASEC^IBCEF4(IBXIEN):2,1:3)
|
---|
182 | S IBNID=$$PAYERID^IBCEF2(IBXIEN)
|
---|
183 | S IB837R=$$RECVR^IBCEF2(IBXIEN)
|
---|
184 | S IBDIV=$P($S($P(IB0,U,22):$$SITE^VASITE(DT,$P(IB0,U,22)),1:$$SITE^VASITE()),U,3)
|
---|
185 | I IBNID'="","RPIHS"[$E(IBNID),$E(IBNID,2,$L(IBNID))="PRNT" S IBNID=IBNID_"*"_IBINS
|
---|
186 | I IBNID="" S IBNID="*"_IBINS
|
---|
187 | S $P(IBNID,"*",3)=$S($P(IB0,U,22):$P(IB0,U,22),1:"")
|
---|
188 | Q
|
---|
189 | ;
|
---|