1 | BPS01P5A ;BHAM ISC/BEE - Post-Install for BPS*1*5 (cont) ;13-DEC-06
|
---|
2 | ;;1.0;E CLAIMS MGMT ENGINE;**5**;JUN 2004;Build 4;WorldVistA 30-Jan-08
|
---|
3 | ;Modified from FOIA VISTA,
|
---|
4 | ;Copyright 2008 WorldVistA. Licensed under the terms of the GNU
|
---|
5 | ;General Public License See attached copy of the License.
|
---|
6 | ;
|
---|
7 | ;This program is free software; you can redistribute it and/or modify
|
---|
8 | ;it under the terms of the GNU General Public License as published by
|
---|
9 | ;the Free Software Foundation; either version 2 of the License, or
|
---|
10 | ;(at your option) any later version.
|
---|
11 | ;
|
---|
12 | ;This program is distributed in the hope that it will be useful,
|
---|
13 | ;but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
14 | ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
15 | ;GNU General Public License for more details.
|
---|
16 | ;
|
---|
17 | ;You should have received a copy of the GNU General Public License along
|
---|
18 | ;with this program; if not, write to the Free Software Foundation, Inc.,
|
---|
19 | ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
---|
20 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
21 | ;
|
---|
22 | Q
|
---|
23 | ;
|
---|
24 | ; Called by the BPS*1.0*5 Post-Install routine BPS01P5.
|
---|
25 | ;
|
---|
26 | ; This routine will convert or delete the invalid usage of globals
|
---|
27 | ; ^BPSECX and ^BPSECP
|
---|
28 | ; It will also delete several ECME files that are now obsolete
|
---|
29 | ;
|
---|
30 | ; ^BPSECX cleanup - Here are the nodes and what should be done
|
---|
31 | ; "BPSOSRX" is the processing queue - Convert to XTMP and delete
|
---|
32 | ; "R" is the BPS Report Master database (obsolete) and will be
|
---|
33 | ; deleted by BPSO1P5
|
---|
34 | ; "S" is the BPS Statistics database and should not be deleted
|
---|
35 | ; "POS", "BPSOSQ3", and $J were for HL7 packet creation. They
|
---|
36 | ; do not need to be converted and can just be killed.
|
---|
37 | ;
|
---|
38 | ;
|
---|
39 | ; ^BPSECP cleanup - Here are the nodes and what should be done
|
---|
40 | ; "CHECKTIM" - Used for queuing BPSOSQ1. This is no longer
|
---|
41 | ; needed and can just be killed.
|
---|
42 | ; "LOG" - Convert to BPS Log file and then delete.
|
---|
43 | ;
|
---|
44 | EN ;
|
---|
45 | ; Remove XTMP global used for logging errors
|
---|
46 | K ^XTMP("BPS01P5A")
|
---|
47 | ;
|
---|
48 | ; First convert ^BPSECP("BPSOSRX") into XTMP and delete it
|
---|
49 | M ^XTMP("BPS-PROC")=^BPSECP("BPSOSRX")
|
---|
50 | K ^BPSECP("BPSOSRX")
|
---|
51 | ; If the global has been created but the zero node is missing, set it
|
---|
52 | I $D(^XTMP("BPS-PROC")),'$D(^XTMP("BPS-PROC",0)) D
|
---|
53 | . N X,X1,X2
|
---|
54 | . S X1=DT,X2=30 D C^%DTC
|
---|
55 | . S ^XTMP("BPS-PROC",0)=X_U_DT_U_"ECME PROCESSING QUEUE"
|
---|
56 | ;
|
---|
57 | ; Second, kill off unneeded ^BPSECX nodes
|
---|
58 | ; Note that we need to loop because of the $J nodes.
|
---|
59 | N SUB
|
---|
60 | S SUB=""
|
---|
61 | F S SUB=$O(^BPSECX(SUB)) Q:SUB="" I SUB'="S",SUB'="RPT" K ^BPSECX(SUB)
|
---|
62 | ;
|
---|
63 | ; Third, kill ^BPSECP("CHECKTIM")
|
---|
64 | K ^BPSECP("CHECKTIM")
|
---|
65 | ;
|
---|
66 | ; Fourth, convert ^BPSECP("LOG")
|
---|
67 | ; Note that we are only converting the transaction log (pattern match .N1"."5N)
|
---|
68 | ; and purge logs (type=5). Other communication logs are being deleted.
|
---|
69 | N SLOT,TXTIEN,PURGE,LOGIEN,PDT
|
---|
70 | N TXTIEN,TM,TMP,TXT,TXT1,TXT2,PDTM
|
---|
71 | S SLOT=""
|
---|
72 | F S SLOT=$O(^BPSECP("LOG",SLOT)) Q:SLOT="" D
|
---|
73 | . ; Set PURGE equal to whether the SLOT if a Purge Log
|
---|
74 | . S PURGE=$P(SLOT,".",2)=5
|
---|
75 | . ; If not transaction log or purge log, delete it and go on
|
---|
76 | . I SLOT'?.N1"."5N,'PURGE K ^BPSECP("LOG",SLOT) Q
|
---|
77 | . ; Create/find LOG IEN
|
---|
78 | . S LOGIEN=$$LOG(SLOT)
|
---|
79 | . I LOGIEN=-1 Q
|
---|
80 | . S PDT="",PDTM=""
|
---|
81 | . I PURGE S PDT=$P(SLOT,".",1)
|
---|
82 | . S TXTIEN=0 F S TXTIEN=$O(^BPSECP("LOG",SLOT,TXTIEN)) Q:TXTIEN="" D
|
---|
83 | .. ; Get data
|
---|
84 | .. S X=$G(^BPSECP("LOG",SLOT,TXTIEN))
|
---|
85 | .. S TM=$P($$HTFM^XLFDT(+$H_","_$P(X,U,1)),".",2),TXT=$P(X,U,2),TXT1=$$UP(TXT)
|
---|
86 | .. ; If it is a transaction log, get the purge date
|
---|
87 | .. I 'PURGE D
|
---|
88 | ... I TXT1["BEFORE SUBMIT OF CLAIM" S TMP=$P($P(TXT1," - ",2)," BEFORE",1) I TMP?1"30"5N S PDT=TMP
|
---|
89 | ... I TXT1["BEFORE SUBMIT OF REVERSAL" S TMP=$P($P(TXT1," - ",2)," BEFORE",1) I TMP?1"30"5N S PDT=TMP
|
---|
90 | ... I TXT1["START OF CLAIM" S X=$P($P(TXT1,"START OF CLAIM - ",2),"@"),PDT=$$CDT(X,PDT)
|
---|
91 | ... I TXT1["LOG TIME STAMP" D
|
---|
92 | .... S X=$P(TXT1,"LOG TIME STAMP",2)
|
---|
93 | .... I $E(X,1)=" " S X=$E(X,2,999)
|
---|
94 | .... S X=$P($P(X," ",1,2),"@",1),PDT=$$CDT(X,PDT)
|
---|
95 | ... S TXT2=","_$E(TXT1,1,3)_","
|
---|
96 | ... I ",JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC,"[TXT2 S X=$P($P(TXT1," ",1,2),"@",1),PDT=$$CDT(X,PDT)
|
---|
97 | .. I PDT="" S ^XTMP("BPS01P5A",1,SLOT,TXTIEN)=TXT Q
|
---|
98 | .. S PDTM=PDT_"."_TM
|
---|
99 | .. D FILE1(LOGIEN,TXTIEN,PDTM,TXT)
|
---|
100 | . I PDTM="" S PDTM=$$NOW^XLFDT(),^XTMP("BPS01P5A",2,SLOT)=PDTM
|
---|
101 | . D FILE2(LOGIEN,PDTM)
|
---|
102 | . K ^BPSECP("LOG",SLOT)
|
---|
103 | ;
|
---|
104 | ; If XTMP("BPS01P5A") global created, add top node with purge date
|
---|
105 | I $D(^XTMP("BPS01P5A")) D
|
---|
106 | . N X,X1,X2
|
---|
107 | . S X1=DT,X2=60 D C^%DTC
|
---|
108 | . S ^XTMP("BPS01P5A",0)=X_U_DT_U_"BPS Log Conversion"
|
---|
109 | ;
|
---|
110 | ; Kill the top node of ^BPSECP if that is all there is left
|
---|
111 | I $D(^BPSECP("LOG"))=1 K ^BPSECP("LOG")
|
---|
112 | Q
|
---|
113 | ;
|
---|
114 | LOG(X) ; Create or find slot in BPS LOG
|
---|
115 | N DIC,DLAYGO,Y
|
---|
116 | S DIC=9002313.12,DIC(0)="LBO",DLAYGO=DIC
|
---|
117 | D ^DIC
|
---|
118 | I Y=-1 S ^XTMP("BPS01P5A",3,X)=Y
|
---|
119 | Q +Y
|
---|
120 | ;
|
---|
121 | FILE1(LOGIEN,TXTIEN,PDTM,TXT) ; Create multiple entry
|
---|
122 | N FN,FDA,MSG
|
---|
123 | S FN=9002313.1201
|
---|
124 | S FDA(FN,"+1,"_LOGIEN_",",.01)=PDTM
|
---|
125 | S FDA(FN,"+1,"_LOGIEN_",",1)=$TR($E(TXT,1,200),"^","~")
|
---|
126 | D UPDATE^DIE("","FDA","","MSG")
|
---|
127 | I $D(MSG) S ^XTMP("BPS01P5A",4,LOGIEN,TXTIEN)=PDTM_U_TXT M ^XTMP("BPS01P5A",4,LOGIEN,"MSG")=MSG
|
---|
128 | Q
|
---|
129 | ;
|
---|
130 | FILE2(LOGIEN,PDTM) ; Update LAST UPDATE field with the last date
|
---|
131 | N FDA,MSG,FN
|
---|
132 | S FN=9002313.12
|
---|
133 | S FDA(FN,LOGIEN_",",.02)=PDTM
|
---|
134 | D FILE^DIE("","FDA","MSG")
|
---|
135 | I $D(MSG) S ^XTMP("BPS01P5A",5,LOGIEN)=PDTM M ^XTMP("BPS01P5A",5,LOGIEN,"MSG")=MSG
|
---|
136 | Q
|
---|
137 | ;
|
---|
138 | CDT(X,PDT) ; Convert external date to internal
|
---|
139 | ; If date evaluates to -Y, use default date (PDT)
|
---|
140 | N %DT,Y
|
---|
141 | S %DT="" D ^%DT
|
---|
142 | I Y=-1 S Y=PDT
|
---|
143 | Q Y
|
---|
144 | ;
|
---|
145 | UP(X) ; Convert text to uppercase
|
---|
146 | Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
---|
147 | ;
|
---|
148 | ;DELETE OBSOLETE FILES
|
---|
149 | ; For BPSCOMB and BPSEI, we need to delete each node manually
|
---|
150 | ; to prevent global protection errors.
|
---|
151 | ;
|
---|
152 | DEL N DIU,X
|
---|
153 | ;
|
---|
154 | ;Turn global protection off (SACC Exemption has been granted to use $ZU)
|
---|
155 | I $P(^%ZOSF("OS"),"^",2)=3 S X=$ZU(68,28,0)
|
---|
156 | ;
|
---|
157 | ;Remove BPS COMBINED INSURANCE (#9002313.1), which uses an unsubscripted global
|
---|
158 | ;reference to store the data
|
---|
159 | S DIU="^BPSCOMB(",DIU(0)="DS" D EN^DIU2
|
---|
160 | ;
|
---|
161 | ;Remove BPS INSURER (#9002313.4), which uses an unsubscripted global reference to store
|
---|
162 | ;the data
|
---|
163 | S DIU="^BPSEI(",DIU(0)="DS" D EN^DIU2
|
---|
164 | ;
|
---|
165 | ;Turn global protection back on
|
---|
166 | I $P(^%ZOSF("OS"),"^",2)=3 S X=$ZU(68,28,1)
|
---|
167 | ;
|
---|
168 | ;BPS DATA INPUT (#9002313.51)
|
---|
169 | S DIU="^BPS(9002313.51,",DIU(0)="DS" D EN^DIU2
|
---|
170 | ;
|
---|
171 | ;BPS ORIGIN OF INPUT (#9002313.516)
|
---|
172 | S DIU="^BPS(9002313.516,",DIU(0)="DS" D EN^DIU2
|
---|
173 | ;
|
---|
174 | ;BPS DIALOUT (#9002313.55)
|
---|
175 | S DIU="^BPS(9002313.55,",DIU(0)="DS" D EN^DIU2
|
---|
176 | ;
|
---|
177 | ;BPS INPUT USER PREF (#9002313.515)
|
---|
178 | S DIU="^BPS(9002313.515,",DIU(0)="DS" D EN^DIU2
|
---|
179 | ;
|
---|
180 | ;BPS INSURANCE RULES (#9002313.94)
|
---|
181 | S DIU="^BPSF(9002313.94,",DIU(0)="DS" D EN^DIU2
|
---|
182 | ;
|
---|
183 | ;BPS PRICING TABLES (#9002313.53)
|
---|
184 | S DIU="^BPS(9002313.53,",DIU(0)="DS" D EN^DIU2
|
---|
185 | ;
|
---|
186 | ;BPS REPORT MASTER (#9002313.61)
|
---|
187 | S DIU="^BPSECX(""RPT"",",DIU(0)="DS" D EN^DIU2
|
---|
188 | ;
|
---|
189 | ;BPS TRANSLATE (#9002313.81)
|
---|
190 | S DIU="^BPSF(9002313.81,",DIU(0)="DS" D EN^DIU2
|
---|
191 | ;
|
---|
192 | K DIU,X
|
---|
193 | ;
|
---|
194 | Q
|
---|
195 | ;
|
---|
196 | ;BPS SETUP (#9002313.99)
|
---|
197 | 99 N IEN
|
---|
198 | ;
|
---|
199 | S IEN=0 F S IEN=$O(^BPS(9002313.99,IEN)) Q:'IEN D
|
---|
200 | .;
|
---|
201 | .;'2' Node
|
---|
202 | .K ^BPS(9002313.99,IEN,2)
|
---|
203 | .;
|
---|
204 | .;'BPSOS6*' Node
|
---|
205 | .K ^BPS(9002313.99,IEN,"BPSOS6*")
|
---|
206 | .;
|
---|
207 | .;'BPSOSM1' Node
|
---|
208 | .K ^BPS(9002313.99,IEN,"BPSOSM1")
|
---|
209 | .;
|
---|
210 | .;'BPSOSR1' Node
|
---|
211 | .K ^BPS(9002313.99,IEN,"BPSOSR1")
|
---|
212 | .;
|
---|
213 | .;'BPSOSX' Node
|
---|
214 | .K ^BPS(9002313.99,IEN,"BPSOSX")
|
---|
215 | .;
|
---|
216 | .;'A/R INTERFACE' Node
|
---|
217 | .K ^BPS(9002313.99,IEN,"A/R INTERFACE")
|
---|
218 | .;
|
---|
219 | .;'BILLING' Node
|
---|
220 | .K ^BPS(9002313.99,IEN,"BILLING")
|
---|
221 | .;
|
---|
222 | .;'BILLING - NEW' Node
|
---|
223 | .K ^BPS(9002313.99,IEN,"BILLING - NEW")
|
---|
224 | .;
|
---|
225 | .;'BILLING LOG FILE' Node
|
---|
226 | .K ^BPS(9002313.99,IEN,"BILLING LOG FILE")
|
---|
227 | .;
|
---|
228 | .;'CREATING A/R' Node
|
---|
229 | .K ^BPS(9002313.99,IEN,"CREATING A/R")
|
---|
230 | .;
|
---|
231 | .;'DIAL-OUT DEFAULT' Node
|
---|
232 | .K ^BPS(9002313.99,IEN,"DIAL-OUT DEFAULT")
|
---|
233 | .;
|
---|
234 | .;'EOB-SCREEN' Node
|
---|
235 | .K ^BPS(9002313.99,IEN,"EOB-SCREEN")
|
---|
236 | .;
|
---|
237 | .;'FORMS - NCPDP' Node
|
---|
238 | .K ^BPS(9002313.99,IEN,"FORMS - NCPDP")
|
---|
239 | .;
|
---|
240 | .;'FORMS - PREBILL' Node
|
---|
241 | .K ^BPS(9002313.99,IEN,"FORMS - PREBILL")
|
---|
242 | .;
|
---|
243 | .;'INPUT' Node
|
---|
244 | .K ^BPS(9002313.99,IEN,"INPUT")
|
---|
245 | .;
|
---|
246 | .;'INS' Node
|
---|
247 | .K ^BPS(9002313.99,IEN,"INS")
|
---|
248 | .;
|
---|
249 | .;'INS BASE SCORES'
|
---|
250 | .K ^BPS(9002313.99,IEN,"INS BASE SCORES")
|
---|
251 | .;
|
---|
252 | .;'INS RULES' Node
|
---|
253 | .K ^BPS(9002313.99,IEN,"INS RULES")
|
---|
254 | .;
|
---|
255 | .;'NULL FILE' Node
|
---|
256 | .K ^BPS(9002313.99,IEN,"NULL FILE")
|
---|
257 | .;
|
---|
258 | .;'OUTSIDE LINE' Node
|
---|
259 | .K ^BPS(9002313.99,IEN,"OUTSIDE LINE")
|
---|
260 | .;
|
---|
261 | .;'POSTAGE' Node
|
---|
262 | .K ^BPS(9002313.99,IEN,"POSTAGE")
|
---|
263 | .;
|
---|
264 | .;'RX A/R TYPE' Node
|
---|
265 | .K ^BPS(9002313.99,IEN,"RX A/R TYPE")
|
---|
266 | .;
|
---|
267 | .;'RECEIPT' Node
|
---|
268 | .K ^BPS(9002313.99,IEN,"RECEIPT")
|
---|
269 | .;
|
---|
270 | .;'SPECIAL' Node
|
---|
271 | .K ^BPS(9002313.99,IEN,"SPECIAL")
|
---|
272 | .;
|
---|
273 | .;'STARTUP' Node
|
---|
274 | .K ^BPS(9002313.99,IEN,"STARTUP")
|
---|
275 | .;
|
---|
276 | .;'UNBILLABLE NDC #' Node
|
---|
277 | .K ^BPS(9002313.99,IEN,"UNBILLABLE NDC #")
|
---|
278 | .;
|
---|
279 | .;'UNBILLABLE DRUG NAME' Node
|
---|
280 | .K ^BPS(9002313.99,IEN,"UNBILLABLE DRUG NAME")
|
---|
281 | .;
|
---|
282 | .;'UNBILLABLE OTC' Node
|
---|
283 | .K ^BPS(9002313.99,IEN,"UNBILLABLE OTC")
|
---|
284 | .;
|
---|
285 | .;'WRITEOFF-SCREEN' Node
|
---|
286 | .K ^BPS(9002313.99,IEN,"WRITEOFF-SCREEN")
|
---|
287 | .;
|
---|
288 | .;'WRITEOFF-SCREEN ARTYPE' Node
|
---|
289 | .K ^BPS(9002313.99,IEN,"WRITEOFF-SCREEN ARTYPE")
|
---|
290 | .;
|
---|
291 | .;'WRITEOFF-SCREEN BATCH' Node
|
---|
292 | .K ^BPS(9002313.99,IEN,"WRITEOFF-SCREEN BATCH")
|
---|
293 | .;
|
---|
294 | .;'WRITEOFF-SCREEN CLINIC' Node
|
---|
295 | .K ^BPS(9002313.99,IEN,"WRITEOFF-SCREEN CLINIC")
|
---|
296 | .;
|
---|
297 | .;'WRITEOFF-SCREEN DIAG' Node
|
---|
298 | .K ^BPS(9002313.99,IEN,"WRITEOFF-SCREEN DIAG")
|
---|
299 | .;
|
---|
300 | .;'WRITEOFF-SCREEN INSURER' Node
|
---|
301 | .K ^BPS(9002313.99,IEN,"WRITEOFF-SCREEN INSURER")
|
---|
302 | .;
|
---|
303 | .;'WINNOW' Node
|
---|
304 | .N X
|
---|
305 | .S X=$P($G(^BPS(9002313.99,IEN,"WINNOW")),U)
|
---|
306 | .I X'=0,X'=1 S X=$P($G(^BPS(9002313.99,IEN,"WINNOW TESTING")),U),X=$S(X=1:1,1:0)
|
---|
307 | .S ^BPS(9002313.99,IEN,"WINNOW")=X_"^^365"
|
---|
308 | .K X
|
---|
309 | .;
|
---|
310 | .;'WINNOW TESTING' Node
|
---|
311 | .K ^BPS(9002313.99,IEN,"WINNOW TESTING")
|
---|
312 | .;
|
---|
313 | .;'WINNOW LOG' Node
|
---|
314 | .K ^BPS(9002313.99,IEN,"WINNOW LOG")
|
---|
315 | .;
|
---|
316 | .;'WORKERS COMP' Node
|
---|
317 | .K ^BPS(9002313.99,IEN,"WORKERS COMP")
|
---|
318 | .;
|
---|
319 | .;'WRITE OFF INSURER' Node
|
---|
320 | .K ^BPS(9002313.99,IEN,"WRITE OFF INSURER")
|
---|
321 | .;
|
---|
322 | .;'WRITE OFF SELF PAY' Node
|
---|
323 | .K ^BPS(9002313.99,IEN,"WRITE OFF SELF PAY")
|
---|
324 | .;
|
---|
325 | .;'NCPDP51' Node
|
---|
326 | .K ^BPS(9002313.99,IEN,"NCPDP51")
|
---|
327 | .;
|
---|
328 | .;'WINNOW LOGS' Node
|
---|
329 | .K ^BPS(9002313.99,IEN,"WINNOW LOGS")
|
---|
330 | ;
|
---|
331 | K IEN
|
---|
332 | ;
|
---|
333 | Q
|
---|