1 | IBCIUT6 ;DSI/ESG - MAILMAN UTILITIES ;22-JUN-2001
|
---|
2 | ;;2.0;INTEGRATED BILLING;**161**;21-MAR-94
|
---|
3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | Q
|
---|
6 | ;
|
---|
7 | CAT(IBIFN,IBCIFRM,IBCITO,IBCIGRP,GRPONLY) ; MailMan message sending
|
---|
8 | ; This procedure is called when the user is assigning a bill to
|
---|
9 | ; another user.
|
---|
10 | ;
|
---|
11 | ; Input variables
|
---|
12 | ; IBIFN - IEN of claim
|
---|
13 | ; IBCIFRM - DUZ of person assigning the claim
|
---|
14 | ; IBCITO - DUZ of person being assigned the claim
|
---|
15 | ; IBCIGRP - IEN of the Mail Group to receive this msg
|
---|
16 | ; (optional - default is "")
|
---|
17 | ; GRPONLY - 1/0 flag indicating if the Mail Group is the only
|
---|
18 | ; entity to receive the mail message.
|
---|
19 | ; (optional - default is 0)
|
---|
20 | ;
|
---|
21 | NEW ERRDATA,ERRLVL,IBCIASI,IBCIASN,IBCIBII,IBCIBIL,IBCIBIR,IBCICAR
|
---|
22 | NEW IBCICLNO,IBCICLNP,IBCICNM,IBCICOD,IBCIDAT,IBCIDOB,IBCIDPT,IBCIEVEN
|
---|
23 | NEW IBCIEVV,IBCIFRM1,IBCIINS,IBCINAM,IBCIPAD,IBCIPRV,IBCIPTI,IBCISER
|
---|
24 | NEW IBCISEX,IBCISRR,IBCISSN,IBCITO1,L1,L2,L3,LINENO,MNEMONIC,PREVLINE
|
---|
25 | NEW SEP,TEXT,VALMHDR,XMDUN,XMDUZ,XMZ,XMMG,XMSUB,XMTEXT,XMY
|
---|
26 | ;
|
---|
27 | S IBCIGRP=$G(IBCIGRP,"")
|
---|
28 | S GRPONLY=$G(GRPONLY,0)
|
---|
29 | I IBCIGRP S IBCIGRP=$P($G(^XMB(3.8,IBCIGRP,0)),U,1) ; Mail Group name
|
---|
30 | S IBCICLNP=$P(^DGCR(399,IBIFN,0),U,1)
|
---|
31 | S IBCIFRM1=$P(^VA(200,IBCIFRM,0),U,1)
|
---|
32 | S IBCITO1=$P(^VA(200,IBCITO,0),U,1)
|
---|
33 | S XMDUZ=IBCIFRM
|
---|
34 | S XMSUB="ClaimsManager Claim "_IBCICLNP_" Assigned to "_IBCITO1
|
---|
35 | ;
|
---|
36 | S L1=1
|
---|
37 | S TEXT(L1)=$J(IBCICLNP_" has been assigned to: ",32)_IBCITO1,L1=L1+1
|
---|
38 | S TEXT(L1)=$J("by: ",32)_IBCIFRM1,L1=L1+1
|
---|
39 | S TEXT(L1)=" ",L1=L1+1
|
---|
40 | ;
|
---|
41 | ; If comments exist, then display them here
|
---|
42 | ;
|
---|
43 | I $P($G(^IBA(351.9,IBIFN,2,0)),U,4) D
|
---|
44 | . S TEXT(L1)=$$CMTINFO^IBCIUT5(IBIFN),L1=L1+1
|
---|
45 | . S TEXT(L1)=" ",L1=L1+1
|
---|
46 | . S L2=0
|
---|
47 | . F S L2=$O(^IBA(351.9,IBIFN,2,L2)) Q:'L2 D
|
---|
48 | .. S TEXT(L1)=^IBA(351.9,IBIFN,2,L2,0),L1=L1+1
|
---|
49 | .. Q
|
---|
50 | . S TEXT(L1)=" ",L1=L1+1
|
---|
51 | . S TEXT(L1)=" ",L1=L1+1
|
---|
52 | . Q
|
---|
53 | ;
|
---|
54 | ; Now get and display the patient and claim data
|
---|
55 | ;
|
---|
56 | D GDATA^IBCIWK,HDR^IBCIMG
|
---|
57 | S $P(SEP,"-",80)="" ; 79 dashes
|
---|
58 | S TEXT(L1)=$E(SEP,1,24)_" Patient and Claim Information "
|
---|
59 | S TEXT(L1)=TEXT(L1)_$E(SEP,1,24),L1=L1+1
|
---|
60 | S TEXT(L1)=VALMHDR(1),L1=L1+1
|
---|
61 | S TEXT(L1)=VALMHDR(2),L1=L1+1
|
---|
62 | S TEXT(L1)=VALMHDR(3),L1=L1+1
|
---|
63 | S TEXT(L1)=SEP,L1=L1+1
|
---|
64 | S TEXT(L1)=" ",L1=L1+1
|
---|
65 | S TEXT(L1)=$J("ClaimsManager Errors and Line Item Data",59),L1=L1+1
|
---|
66 | S TEXT(L1)=" ",L1=L1+1
|
---|
67 | ;
|
---|
68 | ; Display a message if there are no errors in the file
|
---|
69 | I '$P($G(^IBA(351.9,IBIFN,1,0)),U,4) D
|
---|
70 | . S TEXT(L1)=$J("*** No ClaimsManager Errors to Report ***",60),L1=L1+1
|
---|
71 | . S TEXT(L1)=" ",L1=L1+1
|
---|
72 | . Q
|
---|
73 | ;
|
---|
74 | ; Loop through the CM errors and get and display the data
|
---|
75 | S L2=0
|
---|
76 | S PREVLINE=-9999999
|
---|
77 | F S L2=$O(^IBA(351.9,IBIFN,1,L2)) Q:'L2 D
|
---|
78 | . S ERRDATA=$G(^IBA(351.9,IBIFN,1,L2,0))
|
---|
79 | . S LINENO=+$P(ERRDATA,U,2)
|
---|
80 | . I LINENO'=PREVLINE D LINEDATA(IBIFN,LINENO) S PREVLINE=LINENO
|
---|
81 | . S MNEMONIC=$P(ERRDATA,U,1)
|
---|
82 | . S ERRLVL="Error Level: "_$P(ERRDATA,"~",2)
|
---|
83 | . S TEXT(L1)="("_L2_") ClaimsManager Error: "_MNEMONIC
|
---|
84 | . S TEXT(L1)=(TEXT(L1)_$J(ERRLVL,78-$L(TEXT(L1)))),L1=L1+1
|
---|
85 | . S L3=0
|
---|
86 | . F S L3=$O(^IBA(351.9,IBIFN,1,L2,1,L3)) Q:'L3 D
|
---|
87 | .. S TEXT(L1)=" "_$G(^IBA(351.9,IBIFN,1,L2,1,L3,0)),L1=L1+1
|
---|
88 | .. Q
|
---|
89 | . S TEXT(L1)=" ",L1=L1+1
|
---|
90 | . Q
|
---|
91 | ;
|
---|
92 | ; Now time to do the MailMan stuff
|
---|
93 | S XMTEXT="TEXT(" ; msg text
|
---|
94 | I 'GRPONLY S XMY("I:"_IBCITO)="" ; info only msg to recipient
|
---|
95 | I 'GRPONLY S XMY("I:"_IBCIFRM)="" ; info only msg to sender
|
---|
96 | I IBCIGRP'="" S XMY("I:G."_IBCIGRP)="" ; info only msg to group
|
---|
97 | D ^XMD
|
---|
98 | ;
|
---|
99 | ; look at the IB site parameter file to see if we should send
|
---|
100 | ; priority or normal MailMan messages
|
---|
101 | I '$G(XMZ) G CATX ; no msg created
|
---|
102 | I $P($G(^IBE(350.9,1,50)),U,7)="N" G CATX ; normal messages
|
---|
103 | S $P(^XMB(3.9,XMZ,0),U,7)="P" ; priority messages
|
---|
104 | CATX ;
|
---|
105 | Q
|
---|
106 | ;
|
---|
107 | ;
|
---|
108 | LINEDATA(IBIFN,LINE) ; Get and display the line item info
|
---|
109 | NEW BEGDATE,CHRG,COLHDR,CPT,DXCODE,DXSTRING,ENDDATE,KILLTMP
|
---|
110 | NEW LNA,LNB,MOD,MODS,MOD2,POS,SEQ,TOS,UNIT,X,X1,X2,X3,X4,Y
|
---|
111 | ;
|
---|
112 | ; Conditionally build the 3,4,5 nodes. Use this flag to indicate
|
---|
113 | ; whether or not to kill these nodes when we're done.
|
---|
114 | S KILLTMP=0
|
---|
115 | I '$P($G(^IBA(351.9,IBIFN,3)),U,1) S KILLTMP=1 D UPDT^IBCIADD1
|
---|
116 | S COLHDR="----------BEG DATE----END DATE----POS---TOS--CPT------"
|
---|
117 | S COLHDR=COLHDR_"MOD-------CHARGE-----UNIT"
|
---|
118 | S LNA=$G(^IBA(351.9,IBIFN,5,LINE,0))
|
---|
119 | S LNB=$G(^IBA(351.9,IBIFN,5,LINE,2))
|
---|
120 | S BEGDATE=$P(LNA,U,6)
|
---|
121 | S BEGDATE=$E(BEGDATE,5,6)_"/"_$E(BEGDATE,7,8)_"/"_$E(BEGDATE,1,4)
|
---|
122 | S ENDDATE=$P(LNA,U,7)
|
---|
123 | S ENDDATE=$E(ENDDATE,5,6)_"/"_$E(ENDDATE,7,8)_"/"_$E(ENDDATE,1,4)
|
---|
124 | S POS=$P(LNA,U,8)
|
---|
125 | S TOS=$P(LNB,U,11)
|
---|
126 | S CPT=$P(LNA,U,9)
|
---|
127 | S MODS=$TR($P($G(^IBA(351.9,IBIFN,5,LINE,3)),U,1),",")
|
---|
128 | S MOD=$E(MODS,1,6),MOD2=$E(MODS,7,999)
|
---|
129 | S CHRG=$FN($P(LNA,U,11),"",2)
|
---|
130 | S UNIT=$P(LNB,U,12)
|
---|
131 | ;
|
---|
132 | ; Get the diagnosis information for this line
|
---|
133 | KILL ^TMP("DISPLAY",$J)
|
---|
134 | S DXSTRING=""
|
---|
135 | D DIAG^IBCIUT1(IBIFN)
|
---|
136 | S SEQ=0
|
---|
137 | F S SEQ=$O(^TMP("DISPLAY",$J,IBIFN,"ICD",LINE,SEQ)) Q:'SEQ D
|
---|
138 | . S DXCODE=^TMP("DISPLAY",$J,IBIFN,"ICD",LINE,SEQ)
|
---|
139 | . I DXSTRING="" S DXSTRING=DXCODE
|
---|
140 | . E S DXSTRING=DXSTRING_" / "_DXCODE
|
---|
141 | . Q
|
---|
142 | KILL ^TMP("DISPLAY",$J)
|
---|
143 | ;
|
---|
144 | ; Now build the text strings for the line item data
|
---|
145 | S TEXT(L1)=COLHDR,L1=L1+1
|
---|
146 | S TEXT(L1)=" Line: "
|
---|
147 | S X=LINE,X1=3,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
148 | S X=BEGDATE,X1=12,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
149 | S X=ENDDATE,X1=12,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
150 | S X=POS,X1=6,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
151 | S X=TOS,X1=5,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
152 | S X=CPT,X1=9,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
153 | S X=MOD,X1=6,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
154 | S X=CHRG,X1=10,X2="R" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
155 | S TEXT(L1)=TEXT(L1)_" "
|
---|
156 | S X=UNIT,X1=3,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
157 | S L1=L1+1
|
---|
158 | S TEXT(L1)=" Dx's: "
|
---|
159 | I $L(DXSTRING)<46,MOD2'="" D
|
---|
160 | . S X=DXSTRING,X1=47,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
161 | . S X=MOD2,X1=8,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
162 | . Q
|
---|
163 | E S TEXT(L1)=TEXT(L1)_DXSTRING
|
---|
164 | S L1=L1+1
|
---|
165 | ;
|
---|
166 | LINDATX ;
|
---|
167 | I KILLTMP D DELTI^IBCIUT4
|
---|
168 | Q
|
---|
169 | ;
|
---|
170 | TOP(IBIFN) ; This utility returns the type of plan for the current payer
|
---|
171 | ; sequenced insurance company. This is currently used for the
|
---|
172 | ; ClaimsManager UserDefined field #4.
|
---|
173 | ; The data in this field is the actual type of plan defined on VistA.
|
---|
174 | N IBCITOP,GRPPLAN,IBCISEQ,INSSEQ,TOPIEN
|
---|
175 | S IBCITOP=""
|
---|
176 | S IBCISEQ=$$COBN^IBCEF(IBIFN)
|
---|
177 | S INSSEQ="I"_IBCISEQ
|
---|
178 | S GRPPLAN=$P($G(^DGCR(399,IBIFN,INSSEQ)),U,18)
|
---|
179 | I GRPPLAN="" G TOPX
|
---|
180 | S TOPIEN=$P($G(^IBA(355.3,GRPPLAN,0)),U,9)
|
---|
181 | I TOPIEN="" G TOPX
|
---|
182 | S IBCITOP=$P($G(^IBE(355.1,TOPIEN,0)),U,2)
|
---|
183 | TOPX ;
|
---|
184 | Q IBCITOP
|
---|
185 | ;
|
---|
186 | CLRCMQ(MSG) ;
|
---|
187 | ; This procedure will try to clear out the CM result queue by opening
|
---|
188 | ; and using every available port and just reading in any and all
|
---|
189 | ; data CM is wanting to send.
|
---|
190 | ;
|
---|
191 | ; Input: MSG is either 0 or 1 which will determine if status messages
|
---|
192 | ; and/or error messages are displayed on the screen.
|
---|
193 | ; MSG=0 silent mode
|
---|
194 | ; MSG=1 display on screen mode
|
---|
195 | ;
|
---|
196 | ; Output: None (either it will work or it won't)
|
---|
197 | ;
|
---|
198 | NEW IBCIIP,PORTS,IBCISOCK,JTOT,POP,J,TRASH,SET,IBCIMT
|
---|
199 | NEW X,Y,DTOUT,DUOUT,DIRUT,DIROUT
|
---|
200 | S MSG=$G(MSG,1)
|
---|
201 | S IBCIMT=$$ENV^IBCIUT5
|
---|
202 | I 'MSG,IBCIMT="T" G CLRX ; don't allow silent mode from TEST acct
|
---|
203 | ;
|
---|
204 | ; If a site isn't using the interface, then display message and exit
|
---|
205 | I '$$CK0^IBCIUT1(),MSG D G CLRX
|
---|
206 | . U IO(0)
|
---|
207 | . W !!!?5,"The ClaimsManager product is not being used."
|
---|
208 | . W !!?5,"This option is not available.",!!
|
---|
209 | . S DIR(0)="E" D ^DIR K DIR
|
---|
210 | . Q
|
---|
211 | ;
|
---|
212 | I MSG D I 'Y G CLRX
|
---|
213 | . U IO(0)
|
---|
214 | . W @IOF
|
---|
215 | . W !?20,"Clear ClaimsManager Results Queue",!
|
---|
216 | . W !?2,"This option attempts to clear out the ClaimsManager Results Queue so"
|
---|
217 | . W !?2,"ClaimsManager can get back in sync with VistA. If this process doesn't"
|
---|
218 | . W !?2,"correct the problems, then Ingenix should be called (800-765-6818)."
|
---|
219 | . W !
|
---|
220 | . I IBCIMT="T" D
|
---|
221 | .. W !?2,"Please note that you're doing this from the TEST account. This may be"
|
---|
222 | .. W !?2,"risky if there are Production users using ClaimsManager."
|
---|
223 | .. W !
|
---|
224 | .. Q
|
---|
225 | . S DIR(0)="Y"
|
---|
226 | . S DIR("A")="OK to proceed"
|
---|
227 | . S DIR("B")="YES"
|
---|
228 | . DO ^DIR K DIR
|
---|
229 | . Q
|
---|
230 | ;
|
---|
231 | L +^IBCITCP:15 E W:MSG !!,"Couldn't Lock all Ports" G CLRX
|
---|
232 | S IBCIIP=$P($G(^IBE(350.9,1,50)),U,5)
|
---|
233 | I IBCIIP="" W:MSG !!,"No IP address" G CLRX
|
---|
234 | M PORTS=^IBE(350.9,1,50.06,"B")
|
---|
235 | I '$D(PORTS) W:MSG !!,"No Ports defined" G CLRX
|
---|
236 | S SET=0
|
---|
237 | AGAIN ;
|
---|
238 | S SET=SET+1
|
---|
239 | W:MSG !!,"Set ",SET
|
---|
240 | S IBCISOCK="",JTOT=0
|
---|
241 | F S IBCISOCK=$O(PORTS(IBCISOCK)) Q:IBCISOCK="" D
|
---|
242 | . W:MSG !?1,"Port# ",IBCISOCK
|
---|
243 | . D CALL^%ZISTCP(IBCIIP,IBCISOCK,1)
|
---|
244 | . I POP W:MSG ?16,"FAILURE: Couldn't open port!!" Q
|
---|
245 | . F J=0:1 R TRASH#1:1 Q:'$T Q:$A(TRASH)=3 Q:TRASH=""
|
---|
246 | . S JTOT=JTOT+J
|
---|
247 | . W $C(1,6,3),!
|
---|
248 | . D CLOSE^%ZISTCP
|
---|
249 | . I 'MSG Q
|
---|
250 | . U IO(0)
|
---|
251 | . W ?15,$J(J,5)," characters read"
|
---|
252 | . W ?40,"ACK sent to CM"
|
---|
253 | . W ?58,"Port Closed"
|
---|
254 | . Q
|
---|
255 | W:MSG !,"Results of Set ",SET,": "
|
---|
256 | I JTOT W:MSG "Data was detected. Repeating the process." H 1 G AGAIN
|
---|
257 | W:MSG "No data found. Process is complete.",!!
|
---|
258 | CLRX ;
|
---|
259 | L -^IBCITCP
|
---|
260 | Q
|
---|
261 | ;
|
---|