Merge lp:~joel-sher/openvista-gtm-integration/bug385379 into lp:openvista-gtm-integration

Proposed by JSHER
Status: Merged
Merged at revision: not available
Proposed branch: lp:~joel-sher/openvista-gtm-integration/bug385379
Merge into: lp:openvista-gtm-integration
Diff against target: None lines
To merge this branch: bzr merge lp:~joel-sher/openvista-gtm-integration/bug385379
Reviewer Review Type Date Requested Status
Jon Tai Approve
Review via email: mp+7562@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Jon Tai (jontai) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'kids/MSC_GTM_INTEG_4.KID'
2--- kids/MSC_GTM_INTEG_4.KID 1970-01-01 00:00:00 +0000
3+++ kids/MSC_GTM_INTEG_4.KID 2009-06-17 16:16:33 +0000
4@@ -0,0 +1,11860 @@
5+KIDS Distribution saved on Jun 11, 2009@07:53:11
6+VERSION 4 GTM, REMOVE POSTINIT
7+**KIDS**:MSC GTM INTEGRATION*1.0*4^
8+
9+**INSTALL NAME**
10+MSC GTM INTEGRATION*1.0*4
11+"BLD",7026,0)
12+MSC GTM INTEGRATION*1.0*4^^0^3090611^y
13+"BLD",7026,1,0)
14+^^1^1^3090611^
15+"BLD",7026,1,1,0)
16+SYSTEM STATUS AND JOBEXAM FOR GT.M
17+"BLD",7026,4,0)
18+^9.64PA^^
19+"BLD",7026,6.3)
20+40
21+"BLD",7026,"INIT")
22+
23+"BLD",7026,"KRN",0)
24+^9.67PA^8989.52^19
25+"BLD",7026,"KRN",.4,0)
26+.4
27+"BLD",7026,"KRN",.401,0)
28+.401
29+"BLD",7026,"KRN",.402,0)
30+.402
31+"BLD",7026,"KRN",.403,0)
32+.403
33+"BLD",7026,"KRN",.403,"NM",0)
34+^9.68A^2^2
35+"BLD",7026,"KRN",.403,"NM",1,0)
36+MSCZJOBEXAM FILE #3.081^3.081^0
37+"BLD",7026,"KRN",.403,"NM",2,0)
38+MSCZLOCK FILE #3.081^3.081^0
39+"BLD",7026,"KRN",.403,"NM","B","MSCZJOBEXAM FILE #3.081",1)
40+
41+"BLD",7026,"KRN",.403,"NM","B","MSCZLOCK FILE #3.081",2)
42+
43+"BLD",7026,"KRN",.5,0)
44+.5
45+"BLD",7026,"KRN",.84,0)
46+.84
47+"BLD",7026,"KRN",3.6,0)
48+3.6
49+"BLD",7026,"KRN",3.8,0)
50+3.8
51+"BLD",7026,"KRN",9.2,0)
52+9.2
53+"BLD",7026,"KRN",9.2,"NM",0)
54+^9.68A^^
55+"BLD",7026,"KRN",9.8,0)
56+9.8
57+"BLD",7026,"KRN",9.8,"NM",0)
58+^9.68A^49^41
59+"BLD",7026,"KRN",9.8,"NM",1,0)
60+MSCZJOB^^0^B11312416
61+"BLD",7026,"KRN",9.8,"NM",4,0)
62+MSCZJOBU^^0^B2386063
63+"BLD",7026,"KRN",9.8,"NM",5,0)
64+ZIS4GTM^^0^B18512871
65+"BLD",7026,"KRN",9.8,"NM",7,0)
66+XTER1A^^0^B29100251
67+"BLD",7026,"KRN",9.8,"NM",8,0)
68+ZUGTM^^0^B9857255
69+"BLD",7026,"KRN",9.8,"NM",11,0)
70+ZCD^^0^B16830436
71+"BLD",7026,"KRN",9.8,"NM",13,0)
72+ZOSV2GTM^^0^B6700455
73+"BLD",7026,"KRN",9.8,"NM",14,0)
74+ZOSFGUX^^0^B22118461
75+"BLD",7026,"KRN",9.8,"NM",15,0)
76+ZISHGUX^^0^B36911880
77+"BLD",7026,"KRN",9.8,"NM",16,0)
78+HLCSTCP1^^0^B29662559
79+"BLD",7026,"KRN",9.8,"NM",17,0)
80+HLCSTCP^^0^B32434118
81+"BLD",7026,"KRN",9.8,"NM",18,0)
82+HLCSLNCH^^0^B37355917
83+"BLD",7026,"KRN",9.8,"NM",19,0)
84+XOBVLL^^0^B18012967
85+"BLD",7026,"KRN",9.8,"NM",20,0)
86+XOBVRH^^0^B13028891
87+"BLD",7026,"KRN",9.8,"NM",21,0)
88+XOBVSKT^^0^B19755798
89+"BLD",7026,"KRN",9.8,"NM",22,0)
90+XOBVTCPL^^0^B13502099
91+"BLD",7026,"KRN",9.8,"NM",23,0)
92+XWBTCPM^^0^B56922128
93+"BLD",7026,"KRN",9.8,"NM",24,0)
94+ZTMGRSET^^0^B54537333
95+"BLD",7026,"KRN",9.8,"NM",25,0)
96+ZISTCPS^^0^B18299533
97+"BLD",7026,"KRN",9.8,"NM",26,0)
98+XPDR^^0^B52133395
99+"BLD",7026,"KRN",9.8,"NM",27,0)
100+ZISFGUX^^1^
101+"BLD",7026,"KRN",9.8,"NM",28,0)
102+ZTER^^0^B39678986
103+"BLD",7026,"KRN",9.8,"NM",29,0)
104+ZSTARTGUX^^0^B140233
105+"BLD",7026,"KRN",9.8,"NM",31,0)
106+MSCXUS3A^^0^B8005003
107+"BLD",7026,"KRN",9.8,"NM",32,0)
108+RORHL7A^^0^B35660209
109+"BLD",7026,"KRN",9.8,"NM",33,0)
110+ZOSVGUX^^0^B1197142
111+"BLD",7026,"KRN",9.8,"NM",34,0)
112+DGMSTAPI^^0^B48539163
113+"BLD",7026,"KRN",9.8,"NM",35,0)
114+GMRCA2^^0^B10634
115+"BLD",7026,"KRN",9.8,"NM",36,0)
116+MAGDMEDL^^0^B3132920
117+"BLD",7026,"KRN",9.8,"NM",37,0)
118+PRCSEA^^0^B66865498
119+"BLD",7026,"KRN",9.8,"NM",38,0)
120+PSBOMH1^^0^B71152392
121+"BLD",7026,"KRN",9.8,"NM",39,0)
122+PSBRPC2^^0^B44967923
123+"BLD",7026,"KRN",9.8,"NM",40,0)
124+PXRMTMED^^0^B9970277
125+"BLD",7026,"KRN",9.8,"NM",41,0)
126+VALMW3^^0^B21033865
127+"BLD",7026,"KRN",9.8,"NM",42,0)
128+XQALSUR1^^0^B29675685
129+"BLD",7026,"KRN",9.8,"NM",43,0)
130+XUMF5AU^^0^B76801793
131+"BLD",7026,"KRN",9.8,"NM",44,0)
132+ZSTOPGUX^^0^B148072
133+"BLD",7026,"KRN",9.8,"NM",46,0)
134+MSCZJOBS^^0^B3252583
135+"BLD",7026,"KRN",9.8,"NM",47,0)
136+ZOSVONT^^0^B23474671
137+"BLD",7026,"KRN",9.8,"NM",48,0)
138+ZISFGTM^^0^B9317180
139+"BLD",7026,"KRN",9.8,"NM",49,0)
140+ZSSGUX^^0^B47435
141+"BLD",7026,"KRN",9.8,"NM","B","DGMSTAPI",34)
142+
143+"BLD",7026,"KRN",9.8,"NM","B","GMRCA2",35)
144+
145+"BLD",7026,"KRN",9.8,"NM","B","HLCSLNCH",18)
146+
147+"BLD",7026,"KRN",9.8,"NM","B","HLCSTCP",17)
148+
149+"BLD",7026,"KRN",9.8,"NM","B","HLCSTCP1",16)
150+
151+"BLD",7026,"KRN",9.8,"NM","B","MAGDMEDL",36)
152+
153+"BLD",7026,"KRN",9.8,"NM","B","MSCXUS3A",31)
154+
155+"BLD",7026,"KRN",9.8,"NM","B","MSCZJOB",1)
156+
157+"BLD",7026,"KRN",9.8,"NM","B","MSCZJOBS",46)
158+
159+"BLD",7026,"KRN",9.8,"NM","B","MSCZJOBU",4)
160+
161+"BLD",7026,"KRN",9.8,"NM","B","PRCSEA",37)
162+
163+"BLD",7026,"KRN",9.8,"NM","B","PSBOMH1",38)
164+
165+"BLD",7026,"KRN",9.8,"NM","B","PSBRPC2",39)
166+
167+"BLD",7026,"KRN",9.8,"NM","B","PXRMTMED",40)
168+
169+"BLD",7026,"KRN",9.8,"NM","B","RORHL7A",32)
170+
171+"BLD",7026,"KRN",9.8,"NM","B","VALMW3",41)
172+
173+"BLD",7026,"KRN",9.8,"NM","B","XOBVLL",19)
174+
175+"BLD",7026,"KRN",9.8,"NM","B","XOBVRH",20)
176+
177+"BLD",7026,"KRN",9.8,"NM","B","XOBVSKT",21)
178+
179+"BLD",7026,"KRN",9.8,"NM","B","XOBVTCPL",22)
180+
181+"BLD",7026,"KRN",9.8,"NM","B","XPDR",26)
182+
183+"BLD",7026,"KRN",9.8,"NM","B","XQALSUR1",42)
184+
185+"BLD",7026,"KRN",9.8,"NM","B","XTER1A",7)
186+
187+"BLD",7026,"KRN",9.8,"NM","B","XUMF5AU",43)
188+
189+"BLD",7026,"KRN",9.8,"NM","B","XWBTCPM",23)
190+
191+"BLD",7026,"KRN",9.8,"NM","B","ZCD",11)
192+
193+"BLD",7026,"KRN",9.8,"NM","B","ZIS4GTM",5)
194+
195+"BLD",7026,"KRN",9.8,"NM","B","ZISFGTM",48)
196+
197+"BLD",7026,"KRN",9.8,"NM","B","ZISFGUX",27)
198+
199+"BLD",7026,"KRN",9.8,"NM","B","ZISHGUX",15)
200+
201+"BLD",7026,"KRN",9.8,"NM","B","ZISTCPS",25)
202+
203+"BLD",7026,"KRN",9.8,"NM","B","ZOSFGUX",14)
204+
205+"BLD",7026,"KRN",9.8,"NM","B","ZOSV2GTM",13)
206+
207+"BLD",7026,"KRN",9.8,"NM","B","ZOSVGUX",33)
208+
209+"BLD",7026,"KRN",9.8,"NM","B","ZOSVONT",47)
210+
211+"BLD",7026,"KRN",9.8,"NM","B","ZSSGUX",49)
212+
213+"BLD",7026,"KRN",9.8,"NM","B","ZSTARTGUX",29)
214+
215+"BLD",7026,"KRN",9.8,"NM","B","ZSTOPGUX",44)
216+
217+"BLD",7026,"KRN",9.8,"NM","B","ZTER",28)
218+
219+"BLD",7026,"KRN",9.8,"NM","B","ZTMGRSET",24)
220+
221+"BLD",7026,"KRN",9.8,"NM","B","ZUGTM",8)
222+
223+"BLD",7026,"KRN",19,0)
224+19
225+"BLD",7026,"KRN",19,"NM",0)
226+^9.68A^2^2
227+"BLD",7026,"KRN",19,"NM",1,0)
228+MSCZJOB^^0
229+"BLD",7026,"KRN",19,"NM",2,0)
230+MSCZLOCK^^0
231+"BLD",7026,"KRN",19,"NM","B","MSCZJOB",1)
232+
233+"BLD",7026,"KRN",19,"NM","B","MSCZLOCK",2)
234+
235+"BLD",7026,"KRN",19.1,0)
236+19.1
237+"BLD",7026,"KRN",101,0)
238+101
239+"BLD",7026,"KRN",409.61,0)
240+409.61
241+"BLD",7026,"KRN",771,0)
242+771
243+"BLD",7026,"KRN",870,0)
244+870
245+"BLD",7026,"KRN",8989.51,0)
246+8989.51
247+"BLD",7026,"KRN",8989.52,0)
248+8989.52
249+"BLD",7026,"KRN",8994,0)
250+8994
251+"BLD",7026,"KRN","B",.4,.4)
252+
253+"BLD",7026,"KRN","B",.401,.401)
254+
255+"BLD",7026,"KRN","B",.402,.402)
256+
257+"BLD",7026,"KRN","B",.403,.403)
258+
259+"BLD",7026,"KRN","B",.5,.5)
260+
261+"BLD",7026,"KRN","B",.84,.84)
262+
263+"BLD",7026,"KRN","B",3.6,3.6)
264+
265+"BLD",7026,"KRN","B",3.8,3.8)
266+
267+"BLD",7026,"KRN","B",9.2,9.2)
268+
269+"BLD",7026,"KRN","B",9.8,9.8)
270+
271+"BLD",7026,"KRN","B",19,19)
272+
273+"BLD",7026,"KRN","B",19.1,19.1)
274+
275+"BLD",7026,"KRN","B",101,101)
276+
277+"BLD",7026,"KRN","B",409.61,409.61)
278+
279+"BLD",7026,"KRN","B",771,771)
280+
281+"BLD",7026,"KRN","B",870,870)
282+
283+"BLD",7026,"KRN","B",8989.51,8989.51)
284+
285+"BLD",7026,"KRN","B",8989.52,8989.52)
286+
287+"BLD",7026,"KRN","B",8994,8994)
288+
289+"BLD",7026,"MSC")
290+/home/jsher/MSC_GTM_INTEG_4.KID
291+"BLD",7026,"MSCOM")
292+VERSION 4 GTM, REMOVE POSTINIT
293+"BLD",7026,"PRE")
294+MSCGUX53
295+"BLD",7026,"QUES",0)
296+^9.62^^
297+"KRN",.403,121,-1)
298+0^1
299+"KRN",.403,121,0)
300+MSCZJOBEXAM^ ^@^^3070530.1755^^^3.081^0^1^1
301+"KRN",.403,121,12)
302+
303+"KRN",.403,121,21)
304+
305+"KRN",.403,121,40,0)
306+^.4031I^3^3
307+"KRN",.403,121,40,1,0)
308+1^^1,1^^^1^17,80
309+"KRN",.403,121,40,1,1)
310+Page 1
311+"KRN",.403,121,40,1,40,0)
312+^.4032IP^433^2
313+"KRN",.403,121,40,1,40,432,0)
314+MSCZJOBEXAM^4^3,2^e
315+"KRN",.403,121,40,1,40,432,2)
316+13^^u^^1
317+"KRN",.403,121,40,1,40,432,"COMP MUL")
318+D COMPMUL^MSCZJOB
319+"KRN",.403,121,40,1,40,432,"COMP MUL PTR")
320+
321+"KRN",.403,121,40,1,40,433,0)
322+MSCZJOBEXAM HDR^1^1,2^d
323+"KRN",.403,121,40,2,0)
324+2^^1,1^^^1^18,79
325+"KRN",.403,121,40,2,1)
326+Page 2
327+"KRN",.403,121,40,2,40,0)
328+^.4032IP^437^3
329+"KRN",.403,121,40,2,40,434,0)
330+MSCZJOBEXAM 2^1^1,1^e
331+"KRN",.403,121,40,2,40,435,0)
332+MSCZJOBVARS^3^8,3^e
333+"KRN",.403,121,40,2,40,435,2)
334+9^^f^^1
335+"KRN",.403,121,40,2,40,435,"COMP MUL")
336+D COMPVARS^MSCZJOB
337+"KRN",.403,121,40,2,40,437,0)
338+MSCZJOBSTACK^4^3,3^e
339+"KRN",.403,121,40,2,40,437,2)
340+3^
341+"KRN",.403,121,40,2,40,437,"COMP MUL")
342+D COMPSTK^MSCZJOB
343+"KRN",.403,121,40,3,0)
344+3^^4,4^^^1^15,70
345+"KRN",.403,121,40,3,1)
346+Page 3
347+"KRN",.403,121,40,3,40,0)
348+^.4032IP^436^1
349+"KRN",.403,121,40,3,40,436,0)
350+MSCZJOBLOCKS^1^2,3^e
351+"KRN",.403,121,40,3,40,436,2)
352+6^
353+"KRN",.403,121,40,3,40,436,"COMP MUL")
354+D COMPLKS^MSCZJOB
355+"KRN",.403,121,21400)
356+1
357+"KRN",.403,122,-1)
358+0^2
359+"KRN",.403,122,0)
360+MSCZLOCK^ ^@^^3070530.1755^^^3.081^0^1^1
361+"KRN",.403,122,40,0)
362+^.4031I^1^1
363+"KRN",.403,122,40,1,0)
364+1^^1,1^^^0^17,80
365+"KRN",.403,122,40,1,1)
366+Page 1
367+"KRN",.403,122,40,1,40,0)
368+^.4032IP^439^2
369+"KRN",.403,122,40,1,40,438,0)
370+MSCZLOCKEXAM^4^3,2^e
371+"KRN",.403,122,40,1,40,438,2)
372+13^^u^^1
373+"KRN",.403,122,40,1,40,438,"COMP MUL")
374+D COMPLK^MSCZJOB
375+"KRN",.403,122,40,1,40,439,0)
376+MSCZJOBLOCK HDR^1^1,1^d
377+"KRN",.404,432,0)
378+MSCZJOBEXAM^3.081
379+"KRN",.404,432,40,0)
380+^.4044I^5^5
381+"KRN",.404,432,40,1,0)
382+1^^2^^JOB NUMBER
383+"KRN",.404,432,40,1,2)
384+1,2^6
385+"KRN",.404,432,40,1,3)
386+!M
387+"KRN",.404,432,40,1,3.1)
388+S Y=$$JOB^MSCZJOB(D0) S:Y=$J Y=Y_"*"
389+"KRN",.404,432,40,1,4)
390+^^^2
391+"KRN",.404,432,40,1,10)
392+S DDSSTACK=2,MSCJOBD0=D0,MSCJOBID=$P(MSCZJOB(D0),U)
393+"KRN",.404,432,40,1,20)
394+F
395+"KRN",.404,432,40,2,0)
396+2^^2^^DEVICE
397+"KRN",.404,432,40,2,2)
398+1,9^23
399+"KRN",.404,432,40,2,3)
400+!M
401+"KRN",.404,432,40,2,3.1)
402+S Y=$$DEV^MSCZJOB(D0)
403+"KRN",.404,432,40,2,4)
404+^^^1
405+"KRN",.404,432,40,2,20)
406+F
407+"KRN",.404,432,40,3,0)
408+4^^2^^NAMESPACE
409+"KRN",.404,432,40,3,2)
410+1,48^11
411+"KRN",.404,432,40,3,3)
412+!M
413+"KRN",.404,432,40,3,3.1)
414+S Y=$$NSP^MSCZJOB(D0)
415+"KRN",.404,432,40,3,4)
416+^^^1
417+"KRN",.404,432,40,3,20)
418+F
419+"KRN",.404,432,40,4,0)
420+5^^2^^ROUTINE
421+"KRN",.404,432,40,4,2)
422+1,60^18
423+"KRN",.404,432,40,4,3)
424+!M
425+"KRN",.404,432,40,4,3.1)
426+S Y=$$ROUTINE^MSCZJOB(D0)
427+"KRN",.404,432,40,4,4)
428+^^^1
429+"KRN",.404,432,40,4,20)
430+F^U
431+"KRN",.404,432,40,5,0)
432+3^^2^^USER
433+"KRN",.404,432,40,5,2)
434+1,33^14
435+"KRN",.404,432,40,5,3)
436+!M
437+"KRN",.404,432,40,5,3.1)
438+S Y=$$USER^MSCZJOB(D0)
439+"KRN",.404,432,40,5,4)
440+^^^1
441+"KRN",.404,432,40,5,20)
442+F
443+"KRN",.404,433,0)
444+MSCZJOBEXAM HDR^3.081^
445+"KRN",.404,433,40,0)
446+^.4044I^2^2
447+"KRN",.404,433,40,1,0)
448+1^Process Device User Namespace Routine ^1
449+"KRN",.404,433,40,1,2)
450+^^2,1
451+"KRN",.404,433,40,2,0)
452+2^!M^1
453+"KRN",.404,433,40,2,.1)
454+S Y=$$GET1^DIQ(8989.3,1,.01)
455+"KRN",.404,433,40,2,2)
456+^^1,28
457+"KRN",.404,434,0)
458+MSCZJOBEXAM 2^3.081
459+"KRN",.404,434,40,0)
460+^.4044I^7^7
461+"KRN",.404,434,40,1,0)
462+1^Job^2^^JOB NUMBER
463+"KRN",.404,434,40,1,2)
464+2,8^6^2,3
465+"KRN",.404,434,40,1,3)
466+!M
467+"KRN",.404,434,40,1,3.1)
468+S Y=$$JOB^MSCZJOB(MSCJOBD0)
469+"KRN",.404,434,40,1,20)
470+N
471+"KRN",.404,434,40,2,0)
472+2^NSpace^2^^NAMESPACE
473+"KRN",.404,434,40,2,2)
474+2,24^11^2,16
475+"KRN",.404,434,40,2,3)
476+!M
477+"KRN",.404,434,40,2,3.1)
478+S Y=$$NSP^MSCZJOB(MSCJOBD0)
479+"KRN",.404,434,40,2,4)
480+^^^2
481+"KRN",.404,434,40,2,20)
482+F
483+"KRN",.404,434,40,3,0)
484+3^Routine^2
485+"KRN",.404,434,40,3,2)
486+2,46^16^2,37
487+"KRN",.404,434,40,3,3)
488+!M
489+"KRN",.404,434,40,3,3.1)
490+S Y=$$ROUTINE^MSCZJOB(MSCJOBD0)
491+"KRN",.404,434,40,3,4)
492+^^^2
493+"KRN",.404,434,40,3,20)
494+F^U
495+"KRN",.404,434,40,4,0)
496+4^^2^^USER
497+"KRN",.404,434,40,4,2)
498+2,63^14
499+"KRN",.404,434,40,4,3)
500+!M
501+"KRN",.404,434,40,4,3.1)
502+S Y=$$USER^MSCZJOB(MSCJOBD0)
503+"KRN",.404,434,40,4,4)
504+^^^2
505+"KRN",.404,434,40,4,20)
506+F
507+"KRN",.404,434,40,5,0)
508+5^Device^2^^DEVICE
509+"KRN",.404,434,40,5,2)
510+3,24^38^3,16
511+"KRN",.404,434,40,5,3)
512+!M
513+"KRN",.404,434,40,5,3.1)
514+S Y=$$DEV^MSCZJOB(MSCJOBD0)
515+"KRN",.404,434,40,5,4)
516+^^^1
517+"KRN",.404,434,40,5,20)
518+F^U
519+"KRN",.404,434,40,6,0)
520+4.4^LOCKs^2^^LOCKS
521+"KRN",.404,434,40,6,2)
522+3,10^3^3,3
523+"KRN",.404,434,40,6,3)
524+!M
525+"KRN",.404,434,40,6,3.1)
526+S Y=$$LOCKS^MSCZJOB
527+"KRN",.404,434,40,6,10)
528+S DDSSTACK=3
529+"KRN",.404,434,40,6,20)
530+N
531+"KRN",.404,434,40,7,0)
532+6^KILL JOB?^2^^KILL
533+"KRN",.404,434,40,7,2)
534+3,74^3^3,63
535+"KRN",.404,434,40,7,13)
536+N X,Y I DDSEXT="YES" D KILL^MSCZJOB(MSCJOBID)
537+"KRN",.404,434,40,7,20)
538+Y
539+"KRN",.404,435,0)
540+MSCZJOBVARS^3.081
541+"KRN",.404,435,40,0)
542+^.4044I^3^3
543+"KRN",.404,435,40,1,0)
544+1^^2^^VARIABLE NAME
545+"KRN",.404,435,40,1,2)
546+1,1^24
547+"KRN",.404,435,40,1,3)
548+!M
549+"KRN",.404,435,40,1,3.1)
550+S Y=$P(@MSC@(MSCJOBID,"V",D0),"=")
551+"KRN",.404,435,40,1,4)
552+^^^2
553+"KRN",.404,435,40,1,20)
554+F
555+"KRN",.404,435,40,2,0)
556+2^^2^^VALUE OF VARIABLE
557+"KRN",.404,435,40,2,2)
558+1,28^48
559+"KRN",.404,435,40,2,3)
560+!M
561+"KRN",.404,435,40,2,3.1)
562+S Y=$P(@MSC@(MSCJOBID,"V",D0),"=",2,999)
563+"KRN",.404,435,40,2,4)
564+^^^2
565+"KRN",.404,435,40,2,20)
566+F^U
567+"KRN",.404,435,40,3,0)
568+1.5^=^1
569+"KRN",.404,435,40,3,2)
570+^^1,26
571+"KRN",.404,436,0)
572+MSCZJOBLOCKS^3.081^
573+"KRN",.404,436,40,0)
574+^.4044I^2^2
575+"KRN",.404,436,40,1,0)
576+1^^2^^LOCKS
577+"KRN",.404,436,40,1,2)
578+2,1^47
579+"KRN",.404,436,40,1,3)
580+!M
581+"KRN",.404,436,40,1,3.1)
582+S Y=@MSC@(MSCJOBID,"L",D0)
583+"KRN",.404,436,40,1,4)
584+^^^2
585+"KRN",.404,436,40,1,20)
586+F^U
587+"KRN",.404,436,40,2,0)
588+2^UNLOCK?^2^^UNLOCK
589+"KRN",.404,436,40,2,2)
590+2,58^3^2,49^1
591+"KRN",.404,436,40,2,13)
592+I DDSEXT="YES" D UNLOCK^MSCZJOB(D0)
593+"KRN",.404,436,40,2,20)
594+Y
595+"KRN",.404,437,0)
596+MSCZJOBSTACK^3.081
597+"KRN",.404,437,40,0)
598+^.4044I^1^1
599+"KRN",.404,437,40,1,0)
600+1^^2^^STACK
601+"KRN",.404,437,40,1,2)
602+2,1^75
603+"KRN",.404,437,40,1,3)
604+!M
605+"KRN",.404,437,40,1,3.1)
606+S Y=$$STACK^MSCZJOB(D0)
607+"KRN",.404,437,40,1,4)
608+^^^2
609+"KRN",.404,437,40,1,20)
610+F^U
611+"KRN",.404,438,0)
612+MSCZLOCKEXAM^3.081
613+"KRN",.404,438,40,0)
614+^.4044I^5^5
615+"KRN",.404,438,40,1,0)
616+1^^2^^JOB NUMBER
617+"KRN",.404,438,40,1,2)
618+1,2^6
619+"KRN",.404,438,40,1,3)
620+!M
621+"KRN",.404,438,40,1,3.1)
622+S Y=$P($G(MSCZLK(D0)),U,5) S:Y=$J Y=Y_"*"
623+"KRN",.404,438,40,1,4)
624+^^^2
625+"KRN",.404,438,40,1,10)
626+S DDSSTACK=2,MSCJOBD0=D0,MSCJOBID=$P(MSCZJOB(D0),U)
627+"KRN",.404,438,40,1,20)
628+F
629+"KRN",.404,438,40,2,0)
630+2^^2^^LOCK
631+"KRN",.404,438,40,2,2)
632+1,9^23
633+"KRN",.404,438,40,2,3)
634+!M
635+"KRN",.404,438,40,2,3.1)
636+S Y=$TR($P($G(MSCZLK(D0)),U),"~")
637+"KRN",.404,438,40,2,4)
638+^^^1
639+"KRN",.404,438,40,2,20)
640+F
641+"KRN",.404,438,40,3,0)
642+4^^2^^ROUTINE
643+"KRN",.404,438,40,3,2)
644+1,48^25
645+"KRN",.404,438,40,3,3)
646+!M
647+"KRN",.404,438,40,3,3.1)
648+S Y=$TR($P($G(MSCZLK(D0)),U,3),$C(126),U)
649+"KRN",.404,438,40,3,4)
650+^^^1
651+"KRN",.404,438,40,3,20)
652+F^U
653+"KRN",.404,438,40,4,0)
654+5^^2^^UNLOCK
655+"KRN",.404,438,40,4,2)
656+1,76^3
657+"KRN",.404,438,40,4,3)
658+!M
659+"KRN",.404,438,40,4,4)
660+^^^0
661+"KRN",.404,438,40,4,13)
662+I DDSEXT="YES" D UNL^MSCZJOB(D0)
663+"KRN",.404,438,40,4,20)
664+Y^U
665+"KRN",.404,438,40,5,0)
666+3^^2^^USER
667+"KRN",.404,438,40,5,2)
668+1,33^14
669+"KRN",.404,438,40,5,3)
670+!M
671+"KRN",.404,438,40,5,3.1)
672+S Y=$P($G(MSCZLK(D0)),U,2)
673+"KRN",.404,438,40,5,4)
674+^^^1
675+"KRN",.404,438,40,5,20)
676+F
677+"KRN",.404,439,0)
678+MSCZJOBLOCK HDR^3.081
679+"KRN",.404,439,40,0)
680+^.4044I^2^2
681+"KRN",.404,439,40,1,0)
682+1^Process Lock User Routine Unlock^1
683+"KRN",.404,439,40,1,2)
684+^^2,1
685+"KRN",.404,439,40,2,0)
686+2^!M^1
687+"KRN",.404,439,40,2,.1)
688+S Y=$$GET1^DIQ(8989.3,1,.01)
689+"KRN",.404,439,40,2,2)
690+^^1,28
691+"KRN",19,14339,-1)
692+0^1
693+"KRN",19,14339,0)
694+MSCZJOB^JOB EXAMINE^^R^^^^^^^^
695+"KRN",19,14339,1,0)
696+^^1^1^3070623^
697+"KRN",19,14339,1,1,0)
698+DESIGNED FOR GT.M
699+"KRN",19,14339,25)
700+MSCZJOB
701+"KRN",19,14339,"U")
702+JOB EXAMINE
703+"KRN",19,14340,-1)
704+0^2
705+"KRN",19,14340,0)
706+MSCZLOCK^LOCK EXAMINE^^R^^^^^^^^
707+"KRN",19,14340,1,0)
708+^^1^1^3070623^
709+"KRN",19,14340,1,1,0)
710+DESIGNED FOR GT.M
711+"KRN",19,14340,25)
712+LOCK^MSCZJOB
713+"KRN",19,14340,"U")
714+LOCK EXAMINE
715+"MBREQ")
716+0
717+"ORD",0,9.8)
718+9.8;;1;RTNF^XPDTA;RTNE^XPDTA
719+"ORD",0,9.8,0)
720+ROUTINE
721+"ORD",8,.403)
722+.403;8;;;EDEOUT^DIFROMSO(.403,DA,"",XPDA);FPRE^DIFROMSI(.403,"",XPDA);EPRE^DIFROMSI(.403,DA,$E("N",$G(XPDNEW)),XPDA,"",OLDA);;EPOST^DIFROMSI(.403,DA,"",XPDA);DEL^DIFROMSK(.403,"",%)
723+"ORD",8,.403,0)
724+FORM
725+"ORD",18,19)
726+19;18;;;OPT^XPDTA;OPTF1^XPDIA;OPTE1^XPDIA;OPTF2^XPDIA;;OPTDEL^XPDIA
727+"ORD",18,19,0)
728+OPTION
729+"PRE")
730+MSCGUX53
731+"QUES","XPF1",0)
732+Y
733+"QUES","XPF1","??")
734+^D REP^XPDH
735+"QUES","XPF1","A")
736+Shall I write over your |FLAG| File
737+"QUES","XPF1","B")
738+YES
739+"QUES","XPF1","M")
740+D XPF1^XPDIQ
741+"QUES","XPF2",0)
742+Y
743+"QUES","XPF2","??")
744+^D DTA^XPDH
745+"QUES","XPF2","A")
746+Want my data |FLAG| yours
747+"QUES","XPF2","B")
748+YES
749+"QUES","XPF2","M")
750+D XPF2^XPDIQ
751+"QUES","XPI1",0)
752+YO
753+"QUES","XPI1","??")
754+^D INHIBIT^XPDH
755+"QUES","XPI1","A")
756+Want KIDS to INHIBIT LOGONs during the install
757+"QUES","XPI1","B")
758+NO
759+"QUES","XPI1","M")
760+D XPI1^XPDIQ
761+"QUES","XPM1",0)
762+PO^VA(200,:EM
763+"QUES","XPM1","??")
764+^D MG^XPDH
765+"QUES","XPM1","A")
766+Enter the Coordinator for Mail Group '|FLAG|'
767+"QUES","XPM1","B")
768+
769+"QUES","XPM1","M")
770+D XPM1^XPDIQ
771+"QUES","XPO1",0)
772+Y
773+"QUES","XPO1","??")
774+^D MENU^XPDH
775+"QUES","XPO1","A")
776+Want KIDS to Rebuild Menu Trees Upon Completion of Install
777+"QUES","XPO1","B")
778+NO
779+"QUES","XPO1","M")
780+D XPO1^XPDIQ
781+"QUES","XPZ1",0)
782+Y
783+"QUES","XPZ1","??")
784+^D OPT^XPDH
785+"QUES","XPZ1","A")
786+Want to DISABLE Scheduled Options, Menu Options, and Protocols
787+"QUES","XPZ1","B")
788+NO
789+"QUES","XPZ1","M")
790+D XPZ1^XPDIQ
791+"QUES","XPZ2",0)
792+Y
793+"QUES","XPZ2","??")
794+^D RTN^XPDH
795+"QUES","XPZ2","A")
796+Want to MOVE routines to other CPUs
797+"QUES","XPZ2","B")
798+NO
799+"QUES","XPZ2","M")
800+D XPZ2^XPDIQ
801+"RTN")
802+42
803+"RTN","DGMSTAPI")
804+0^34^B48539163
805+"RTN","DGMSTAPI",1,0)
806+DGMSTAPI ;ALB/SCK,MSC/JDA - API's for Military Sexual Trauma ;29APR2009
807+"RTN","DGMSTAPI",2,0)
808+ ;;5.3;Registration;**195,243,308,353,379,443,700,JDA**;Aug 13, 1993
809+"RTN","DGMSTAPI",3,0)
810+ Q
811+"RTN","DGMSTAPI",4,0)
812+ ;
813+"RTN","DGMSTAPI",5,0)
814+GETSTAT(DFN,DGDATE) ; Retrieves the current MST status for a patient
815+"RTN","DGMSTAPI",6,0)
816+ ;
817+"RTN","DGMSTAPI",7,0)
818+ ; Input
819+"RTN","DGMSTAPI",8,0)
820+ ; DFN - IEN of patient in the PATIENT File (#2)
821+"RTN","DGMSTAPI",9,0)
822+ ; DGDATE - Date for status lookup [OPTIONAL]
823+"RTN","DGMSTAPI",10,0)
824+ ;
825+"RTN","DGMSTAPI",11,0)
826+ ; Output
827+"RTN","DGMSTAPI",12,0)
828+ ; DGMST - Format will depend on result of lookup
829+"RTN","DGMSTAPI",13,0)
830+ ;
831+"RTN","DGMSTAPI",14,0)
832+ ; If an entry is found then:
833+"RTN","DGMSTAPI",15,0)
834+ ; DGMST returns a 7 piece data string, caret(^)-delimited:
835+"RTN","DGMSTAPI",16,0)
836+ ; $P(1) = IEN of entry in MST HISTORY File (#29.11)
837+"RTN","DGMSTAPI",17,0)
838+ ; $P(2) = Internal value of MST Status ("Y,N,D,U")
839+"RTN","DGMSTAPI",18,0)
840+ ; $P(3) = Date of status change
841+"RTN","DGMSTAPI",19,0)
842+ ; $P(4) = IEN of provider making determination, file (#200)
843+"RTN","DGMSTAPI",20,0)
844+ ; $P(5) = IEN of user who entered status, file (#200)
845+"RTN","DGMSTAPI",21,0)
846+ ; $P(6) = External format of MST Status
847+"RTN","DGMSTAPI",22,0)
848+ ; $P(7) = IEN pointer of the INSTITUTION file (#4)
849+"RTN","DGMSTAPI",23,0)
850+ ;
851+"RTN","DGMSTAPI",24,0)
852+ ; If no MST History is found, then:
853+"RTN","DGMSTAPI",25,0)
854+ ; DGMST = 0^U
855+"RTN","DGMSTAPI",26,0)
856+ ; "U" = (Unknown)
857+"RTN","DGMSTAPI",27,0)
858+ ; If an error occured in the GETS^DIQ lookup, then:
859+"RTN","DGMSTAPI",28,0)
860+ ; DGMST = -1^^Error Code IEN
861+"RTN","DGMSTAPI",29,0)
862+ ; (returned by GETS^DIQ call)
863+"RTN","DGMSTAPI",30,0)
864+ ;
865+"RTN","DGMSTAPI",31,0)
866+ ; Get most recent MST status entry for the patient from file using
867+"RTN","DGMSTAPI",32,0)
868+ ; reverse $Order on the "APDT" x-ref.
869+"RTN","DGMSTAPI",33,0)
870+ ;
871+"RTN","DGMSTAPI",34,0)
872+ N DGMST,DGIEN,DGFDA,DGMSG
873+"RTN","DGMSTAPI",35,0)
874+ S DFN=$G(DFN)
875+"RTN","DGMSTAPI",36,0)
876+ I '+DFN!('$D(^DPT(DFN,0))) D G STATQ
877+"RTN","DGMSTAPI",37,0)
878+ . S DGMST="-1"
879+"RTN","DGMSTAPI",38,0)
880+ I '$D(^DGMS(29.11,"APDT",DFN)) D G STATQ
881+"RTN","DGMSTAPI",39,0)
882+ .S DGMST="0^U"
883+"RTN","DGMSTAPI",40,0)
884+ S DGDATE=$S(+$G(DGDATE)>0:DGDATE,1:$$NOW^XLFDT)
885+"RTN","DGMSTAPI",41,0)
886+ I '$D(^DGMS(29.11,"APDT",DFN,DGDATE)) S DGDATE=$$DATE(DFN,DGDATE)
887+"RTN","DGMSTAPI",42,0)
888+ I '+DGDATE D G STATQ
889+"RTN","DGMSTAPI",43,0)
890+ . S DGMST="0^U"
891+"RTN","DGMSTAPI",44,0)
892+ S DGIEN=""
893+"RTN","DGMSTAPI",45,0)
894+ S DGIEN=+$O(^DGMS(29.11,"APDT",DFN,DGDATE,DGIEN),-1)
895+"RTN","DGMSTAPI",46,0)
896+ ;
897+"RTN","DGMSTAPI",47,0)
898+ ; Check for valid ien, if entry missing, return Unknown
899+"RTN","DGMSTAPI",48,0)
900+ I +DGIEN'>0 D G STATQ
901+"RTN","DGMSTAPI",49,0)
902+ . S DGMST="0^U"
903+"RTN","DGMSTAPI",50,0)
904+ ;
905+"RTN","DGMSTAPI",51,0)
906+ ; Retrieve data
907+"RTN","DGMSTAPI",52,0)
908+ D GETS^DIQ(29.11,+DGIEN_",","*","IE","DGFDA","DGMSG")
909+"RTN","DGMSTAPI",53,0)
910+ ; check for errors
911+"RTN","DGMSTAPI",54,0)
912+ I $D(DGMSG) D G STATQ
913+"RTN","DGMSTAPI",55,0)
914+ .S DGMST="-1^^"_$G(DGMSG("DIERR",1))
915+"RTN","DGMSTAPI",56,0)
916+ ;
917+"RTN","DGMSTAPI",57,0)
918+ S DGMST=DGIEN_U_$G(DGFDA(29.11,+DGIEN_",",3,"I"))_U_$G(DGFDA(29.11,+DGIEN_",",.01,"I"))_U_$G(DGFDA(29.11,+DGIEN_",",4,"I"))_U_$G(DGFDA(29.11,+DGIEN_",",5,"I"))
919+"RTN","DGMSTAPI",58,0)
920+ S DGMST=DGMST_U_$G(DGFDA(29.11,+DGIEN_",",3,"E"))
921+"RTN","DGMSTAPI",59,0)
922+ S DGMST=DGMST_U_$S($G(DGFDA(29.11,+DGIEN_",",6,"I"))]"":$G(DGFDA(29.11,+DGIEN_",",6,"I")),1:$$SITE)
923+"RTN","DGMSTAPI",60,0)
924+ ;
925+"RTN","DGMSTAPI",61,0)
926+STATQ Q $G(DGMST)
927+"RTN","DGMSTAPI",62,0)
928+ ;
929+"RTN","DGMSTAPI",63,0)
930+NEWSTAT(DFN,DGSTAT,DGDATE,DGPROV,DGSITE,DGXMIT) ; MST HISTORY (#29.11) filer
931+"RTN","DGMSTAPI",64,0)
932+ ; Callpoint to create a new MST HISTORY FILE (#29.11) entry.
933+"RTN","DGMSTAPI",65,0)
934+ ; Will also queue HL7 message for HEC database updates.
935+"RTN","DGMSTAPI",66,0)
936+ ;
937+"RTN","DGMSTAPI",67,0)
938+ ; Input
939+"RTN","DGMSTAPI",68,0)
940+ ; DFN - Patients DFN
941+"RTN","DGMSTAPI",69,0)
942+ ; DGSTAT - MST Status code, "Y,N,D,U"
943+"RTN","DGMSTAPI",70,0)
944+ ; DGDATE - Date of MST status change [default=NOW]
945+"RTN","DGMSTAPI",71,0)
946+ ; DGPROV - IEN of Provider making determination, file (#200)
947+"RTN","DGMSTAPI",72,0)
948+ ; DGSITE - IEN pointer of the INSTITUTION file (#4)
949+"RTN","DGMSTAPI",73,0)
950+ ; DGXMIT - HL7 transmit flag [OPTIONAL]
951+"RTN","DGMSTAPI",74,0)
952+ ; 0=don't queue a message
953+"RTN","DGMSTAPI",75,0)
954+ ; 1=queue a message [default])
955+"RTN","DGMSTAPI",76,0)
956+ ;
957+"RTN","DGMSTAPI",77,0)
958+ ; Output
959+"RTN","DGMSTAPI",78,0)
960+ ; DGRSLT - Returns IEN of file (#29.11) entry if successful
961+"RTN","DGMSTAPI",79,0)
962+ ;
963+"RTN","DGMSTAPI",80,0)
964+ ; If no patient was defined, then:
965+"RTN","DGMSTAPI",81,0)
966+ ; DGRSLT = -1^No patient defined
967+"RTN","DGMSTAPI",82,0)
968+ ;
969+"RTN","DGMSTAPI",83,0)
970+ ; If an error occured in the GETS^DIQ lookup, then:
971+"RTN","DGMSTAPI",84,0)
972+ ; DGMST = -1^^Error Code IEN
973+"RTN","DGMSTAPI",85,0)
974+ ; (returned by GETS^DIQ call)
975+"RTN","DGMSTAPI",86,0)
976+ ;
977+"RTN","DGMSTAPI",87,0)
978+ N DGFDA,DGMSG,DGERR,DGRSLT,MSTIEN
979+"RTN","DGMSTAPI",88,0)
980+ S DFN=$G(DFN)
981+"RTN","DGMSTAPI",89,0)
982+ I DFN']""!('$D(^DPT(DFN,0))) D G NEWQ
983+"RTN","DGMSTAPI",90,0)
984+ . S DGRSLT="-1^No patient defined"
985+"RTN","DGMSTAPI",91,0)
986+ ;
987+"RTN","DGMSTAPI",92,0)
988+ S DGSTAT=$S($G(DGSTAT)]"":DGSTAT,1:"U")
989+"RTN","DGMSTAPI",93,0)
990+ S DGDATE=$G(DGDATE)
991+"RTN","DGMSTAPI",94,0)
992+ S DGPROV=$G(DGPROV)
993+"RTN","DGMSTAPI",95,0)
994+ S DGSITE=$G(DGSITE)
995+"RTN","DGMSTAPI",96,0)
996+ S DGXMIT=$S($G(DGXMIT)=0:DGXMIT,1:1)
997+"RTN","DGMSTAPI",97,0)
998+ S DGDATE=$S(+DGDATE>0:DGDATE,1:$$NOW^XLFDT)
999+"RTN","DGMSTAPI",98,0)
1000+ S DGSITE=$S(+DGSITE>0:DGSITE,1:$$SITE)
1001+"RTN","DGMSTAPI",99,0)
1002+ ;
1003+"RTN","DGMSTAPI",100,0)
1004+ I '$$CHANGE(DFN,DGSTAT,DGDATE) D G NEWQ
1005+"RTN","DGMSTAPI",101,0)
1006+ . S DGRSLT="0"
1007+"RTN","DGMSTAPI",102,0)
1008+ ;
1009+"RTN","DGMSTAPI",103,0)
1010+ I '$$VALID(DFN,DGSTAT,DGDATE,DGPROV,DGSITE,.DGERR) D G NEWQ
1011+"RTN","DGMSTAPI",104,0)
1012+ . S DGRSLT="-1^"_DGERR
1013+"RTN","DGMSTAPI",105,0)
1014+ ;
1015+"RTN","DGMSTAPI",106,0)
1016+ S DGFDA(1,29.11,"+1,",.01)=DGDATE
1017+"RTN","DGMSTAPI",107,0)
1018+ S DGFDA(1,29.11,"+1,",2)=DFN
1019+"RTN","DGMSTAPI",108,0)
1020+ S DGFDA(1,29.11,"+1,",3)=DGSTAT
1021+"RTN","DGMSTAPI",109,0)
1022+ S DGFDA(1,29.11,"+1,",4)=DGPROV
1023+"RTN","DGMSTAPI",110,0)
1024+ S DGFDA(1,29.11,"+1,",5)=DUZ
1025+"RTN","DGMSTAPI",111,0)
1026+ S DGFDA(1,29.11,"+1,",6)=DGSITE
1027+"RTN","DGMSTAPI",112,0)
1028+ ;
1029+"RTN","DGMSTAPI",113,0)
1030+ D UPDATE^DIE("","DGFDA(1)","MSTIEN","DGERR")
1031+"RTN","DGMSTAPI",114,0)
1032+ I $D(DGERR) D G NEWQ
1033+"RTN","DGMSTAPI",115,0)
1034+ . S DGRSLT="-1^"_$G(DGERR("DIERR",1))
1035+"RTN","DGMSTAPI",116,0)
1036+ ;
1037+"RTN","DGMSTAPI",117,0)
1038+ S DGRSLT=+MSTIEN(1)
1039+"RTN","DGMSTAPI",118,0)
1040+ ;
1041+"RTN","DGMSTAPI",119,0)
1042+ ; Callpoint to queue an entry that will trigger a HEC
1043+"RTN","DGMSTAPI",120,0)
1044+ ; Enrollment Full Data Transmission (ORF/ORU~ZO7) HL7 message.
1045+"RTN","DGMSTAPI",121,0)
1046+ ; The HL7 message will contain the following three MST data elments
1047+"RTN","DGMSTAPI",122,0)
1048+ ; as part of the VA-Specific Eligibility ZEL segment:
1049+"RTN","DGMSTAPI",123,0)
1050+ ; (23) - MST STATUS
1051+"RTN","DGMSTAPI",124,0)
1052+ ; (24) - DATE MST STATUS CHANGED
1053+"RTN","DGMSTAPI",125,0)
1054+ ; (25) - SITE DETERMINING MST STATUS
1055+"RTN","DGMSTAPI",126,0)
1056+ ;
1057+"RTN","DGMSTAPI",127,0)
1058+ I DGXMIT D
1059+"RTN","DGMSTAPI",128,0)
1060+ . D SEND^DGMSTL1(DFN,"Z07")
1061+"RTN","DGMSTAPI",129,0)
1062+ ;
1063+"RTN","DGMSTAPI",130,0)
1064+NEWQ Q $G(DGRSLT)
1065+"RTN","DGMSTAPI",131,0)
1066+ ;
1067+"RTN","DGMSTAPI",132,0)
1068+DELMST(MSTIEN) ; Deletes the MST HISTORY File (#29.11) entry passed in.
1069+"RTN","DGMSTAPI",133,0)
1070+ ; This call is not to be used except from inside the DG MST List
1071+"RTN","DGMSTAPI",134,0)
1072+ ; Manager interface.
1073+"RTN","DGMSTAPI",135,0)
1074+ ;
1075+"RTN","DGMSTAPI",136,0)
1076+ ; Input
1077+"RTN","DGMSTAPI",137,0)
1078+ ; MSTIEN - IEN of the entry in the MST HISTORY File (#29.11)
1079+"RTN","DGMSTAPI",138,0)
1080+ ;
1081+"RTN","DGMSTAPI",139,0)
1082+ ; Output
1083+"RTN","DGMSTAPI",140,0)
1084+ ; If no IEN passed in, return -1
1085+"RTN","DGMSTAPI",141,0)
1086+ ; otherwise return 1
1087+"RTN","DGMSTAPI",142,0)
1088+ ;
1089+"RTN","DGMSTAPI",143,0)
1090+ Q:'$G(MSTIEN) "-1^No entry to delete"
1091+"RTN","DGMSTAPI",144,0)
1092+ ;
1093+"RTN","DGMSTAPI",145,0)
1094+ N DA,XD
1095+"RTN","DGMSTAPI",146,0)
1096+ S DA=+$G(MSTIEN)
1097+"RTN","DGMSTAPI",147,0)
1098+ S DIK="^DGMS(29.11,"
1099+"RTN","DGMSTAPI",148,0)
1100+ D ^DIK K DIK
1101+"RTN","DGMSTAPI",149,0)
1102+ Q 1
1103+"RTN","DGMSTAPI",150,0)
1104+ ;
1105+"RTN","DGMSTAPI",151,0)
1106+NAME(DA) ; Returns name from the VA NEW PERSON File using DIQ call
1107+"RTN","DGMSTAPI",152,0)
1108+ ;
1109+"RTN","DGMSTAPI",153,0)
1110+ N DGNAME,DGPROV,DIQ,DR,DIC
1111+"RTN","DGMSTAPI",154,0)
1112+ I $G(DA)="" G NAMEQ
1113+"RTN","DGMSTAPI",155,0)
1114+ S DIC=200,DR=".01",DIQ="DGPROV"
1115+"RTN","DGMSTAPI",156,0)
1116+ D EN^DIQ1
1117+"RTN","DGMSTAPI",157,0)
1118+ S DGNAME=$G(DGPROV(200,DA,.01))
1119+"RTN","DGMSTAPI",158,0)
1120+NAMEQ Q $G(DGNAME)
1121+"RTN","DGMSTAPI",159,0)
1122+ ;
1123+"RTN","DGMSTAPI",160,0)
1124+CHANGE(DFN,DGSTAT,DGDATE) ;Did the Status OR Date change?
1125+"RTN","DGMSTAPI",161,0)
1126+ ; Input
1127+"RTN","DGMSTAPI",162,0)
1128+ ; DFN - Patients DFN
1129+"RTN","DGMSTAPI",163,0)
1130+ ; DGSTAT - MST Status code, "Y,N,D,U"
1131+"RTN","DGMSTAPI",164,0)
1132+ ; DGDATE - Date of MST Status Change (FM format)
1133+"RTN","DGMSTAPI",165,0)
1134+ ;
1135+"RTN","DGMSTAPI",166,0)
1136+ ; Output
1137+"RTN","DGMSTAPI",167,0)
1138+ ; Returns 0 if no status change
1139+"RTN","DGMSTAPI",168,0)
1140+ ; 1 if status changed
1141+"RTN","DGMSTAPI",169,0)
1142+ ;
1143+"RTN","DGMSTAPI",170,0)
1144+ N DGCHG,DGMST
1145+"RTN","DGMSTAPI",171,0)
1146+ S DGCHG=0
1147+"RTN","DGMSTAPI",172,0)
1148+ I +$G(DFN)'>0!('$D(^DPT(DFN,0))) G CHNGQ
1149+"RTN","DGMSTAPI",173,0)
1150+ S DGSTAT=$G(DGSTAT)
1151+"RTN","DGMSTAPI",174,0)
1152+ I DGSTAT'?1A!("YNDU"'[DGSTAT) G CHNGQ
1153+"RTN","DGMSTAPI",175,0)
1154+ S DGDATE=$G(DGDATE)
1155+"RTN","DGMSTAPI",176,0)
1156+ I DGDATE="" G CHNGQ
1157+"RTN","DGMSTAPI",177,0)
1158+ S DGMST=$$GETSTAT(DFN),DGMST=$G(DGMST)
1159+"RTN","DGMSTAPI",178,0)
1160+ I +DGMST<1!($P(DGMST,U,2)'=$G(DGSTAT))!($P(DGMST,U,3)'=$G(DGDATE)) S DGCHG=1
1161+"RTN","DGMSTAPI",179,0)
1162+CHNGQ Q DGCHG
1163+"RTN","DGMSTAPI",180,0)
1164+ ;
1165+"RTN","DGMSTAPI",181,0)
1166+SITE(DGSITE) ;Convert a station number into a pointer to the
1167+"RTN","DGMSTAPI",182,0)
1168+ ; INSTITUTION file (#4). If called with a null parameter then
1169+"RTN","DGMSTAPI",183,0)
1170+ ; the pointer to the INSTITUTION file (#4) of the primary site
1171+"RTN","DGMSTAPI",184,0)
1172+ ; will be returned.
1173+"RTN","DGMSTAPI",185,0)
1174+ ;
1175+"RTN","DGMSTAPI",186,0)
1176+ ; Input
1177+"RTN","DGMSTAPI",187,0)
1178+ ; DGSITE - Station number (optional)
1179+"RTN","DGMSTAPI",188,0)
1180+ ;
1181+"RTN","DGMSTAPI",189,0)
1182+ ; Output
1183+"RTN","DGMSTAPI",190,0)
1184+ ; Return Site IEN to INSTITUTION file (#4)
1185+"RTN","DGMSTAPI",191,0)
1186+ ;
1187+"RTN","DGMSTAPI",192,0)
1188+ S DGSITE=$G(DGSITE)
1189+"RTN","DGMSTAPI",193,0)
1190+ I DGSITE]"",$D(^DIC(4,"D",DGSITE)) D
1191+"RTN","DGMSTAPI",194,0)
1192+ . S DGSITE=$O(^DIC(4,"D",DGSITE,0))
1193+"RTN","DGMSTAPI",195,0)
1194+ E D
1195+"RTN","DGMSTAPI",196,0)
1196+ . S DGSITE=$P($$SITE^VASITE,U)
1197+"RTN","DGMSTAPI",197,0)
1198+ I +DGSITE'>0 S DGSITE=""
1199+"RTN","DGMSTAPI",198,0)
1200+ Q DGSITE
1201+"RTN","DGMSTAPI",199,0)
1202+ ;
1203+"RTN","DGMSTAPI",200,0)
1204+DATE(DFN,DGDT) ;Determine 'current' MST date
1205+"RTN","DGMSTAPI",201,0)
1206+ ;
1207+"RTN","DGMSTAPI",202,0)
1208+ ; Input
1209+"RTN","DGMSTAPI",203,0)
1210+ ; DFN - Patient's DFN
1211+"RTN","DGMSTAPI",204,0)
1212+ ; DGDT - FileMan format date
1213+"RTN","DGMSTAPI",205,0)
1214+ ;
1215+"RTN","DGMSTAPI",206,0)
1216+ ; Output
1217+"RTN","DGMSTAPI",207,0)
1218+ ; Return MST effective date
1219+"RTN","DGMSTAPI",208,0)
1220+ ;
1221+"RTN","DGMSTAPI",209,0)
1222+ N DGMSTDT
1223+"RTN","DGMSTAPI",210,0)
1224+ S DFN=$G(DFN)
1225+"RTN","DGMSTAPI",211,0)
1226+ I '+DFN D G DATEQ
1227+"RTN","DGMSTAPI",212,0)
1228+ . S DGMSTDT=""
1229+"RTN","DGMSTAPI",213,0)
1230+ S DGDT=$S(+$G(DGDT)>0:DGDT,1:$$NOW^XLFDT)
1231+"RTN","DGMSTAPI",214,0)
1232+ I $P(DGDT,".",2)="" S DGDT=DGDT_".999999"
1233+"RTN","DGMSTAPI",215,0)
1234+ S DGMSTDT=$O(^DGMS(29.11,"APDT",DFN,DGDT),-1)
1235+"RTN","DGMSTAPI",216,0)
1236+DATEQ Q DGMSTDT
1237+"RTN","DGMSTAPI",217,0)
1238+ ;
1239+"RTN","DGMSTAPI",218,0)
1240+VALID(DFN,DGSTAT,DGDATE,DGPROV,DGSITE,DGERR) ;Validate fields before filing
1241+"RTN","DGMSTAPI",219,0)
1242+ ; Input:
1243+"RTN","DGMSTAPI",220,0)
1244+ ; DFN - [REQUIRED] - ien of Patient
1245+"RTN","DGMSTAPI",221,0)
1246+ ; DGSTAT - [REQUIRED] - MST Status code, "Y,N,D,U"
1247+"RTN","DGMSTAPI",222,0)
1248+ ; DGDATE - [REQUIRED] - Date of MST status change[FileMan Internal]
1249+"RTN","DGMSTAPI",223,0)
1250+ ; DGPROV - [optional] - IEN of Provider making determination
1251+"RTN","DGMSTAPI",224,0)
1252+ ; DGSITE - [optional] - IEN pointer of the INSTITUTION file
1253+"RTN","DGMSTAPI",225,0)
1254+ ; DGERR - [optional] - error parameter passed by reference
1255+"RTN","DGMSTAPI",226,0)
1256+ ; Output:
1257+"RTN","DGMSTAPI",227,0)
1258+ ; Function Value - Returns 1 - if validation checks passed
1259+"RTN","DGMSTAPI",228,0)
1260+ ; 0 - if validation checks failed
1261+"RTN","DGMSTAPI",229,0)
1262+ ; DGERR - an error message if validation checks fail
1263+"RTN","DGMSTAPI",230,0)
1264+ ; init variables
1265+"RTN","DGMSTAPI",231,0)
1266+ N I,DGFILE,DGFLD,DGMSG,DGSTR,DGVAL,DGVAR,DGX,VALID
1267+"RTN","DGMSTAPI",232,0)
1268+ S DGFILE=29.11,VALID=1,DGMSG=" IS REQUIRED"
1269+"RTN","DGMSTAPI",233,0)
1270+ ; Quit DO block if invalid condition found
1271+"RTN","DGMSTAPI",234,0)
1272+ ; Check for [REQUIRED] fields
1273+"RTN","DGMSTAPI",235,0)
1274+ D
1275+"RTN","DGMSTAPI",236,0)
1276+ . I DFN="" D MSG(DGFILE,2,DGMSG,.DGERR) Q ;pat ien
1277+"RTN","DGMSTAPI",237,0)
1278+ . I DGSTAT="" D MSG(DGFILE,3,DGMSG,.DGERR) Q ;mst status code
1279+"RTN","DGMSTAPI",238,0)
1280+ . I DGDATE="" D MSG(DGFILE,.01,DGMSG,.DGERR) Q ;dt chg status
1281+"RTN","DGMSTAPI",239,0)
1282+ .;
1283+"RTN","DGMSTAPI",240,0)
1284+ .; Check for valid FIELD values
1285+"RTN","DGMSTAPI",241,0)
1286+ . S DGMSG=" IS NOT VALID"
1287+"RTN","DGMSTAPI",242,0)
1288+ .; need to strip off the 'seconds' to pass the CHK^DIE() call...
1289+"RTN","DGMSTAPI",243,0)
1290+ . I DGDATE["." N DGSECS S DGSECS=$E($P(DGDATE,".",2),5,6) I DGSECS'="" I DGSECS<0!(DGSECS>60) D MSG(DGFILE,.01,DGMSG,.DGERR) Q
1291+"RTN","DGMSTAPI",244,0)
1292+ . N DGDATEX S DGDATEX=DGDATE
1293+"RTN","DGMSTAPI",245,0)
1294+ . I DGDATEX["." S DGDATEX=$P(DGDATEX,".")_"."_$E($P(DGDATEX,".",2),1,4)
1295+"RTN","DGMSTAPI",246,0)
1296+ . I $E($P(DGDATEX,".",2),1,4)="0000" S DGDATEX=$P(DGDATEX,".")_".1"
1297+"RTN","DGMSTAPI",247,0)
1298+ . S DGSTR=".01;DGDATEX^2;DFN^3;DGSTAT^4;DGPROV^5;DUZ^6;DGSITE"
1299+"RTN","DGMSTAPI",248,0)
1300+ .;
1301+"RTN","DGMSTAPI",249,0)
1302+ . F I=1:1:$L(DGSTR,U) S DGX=$P(DGSTR,U,I) Q:DGX="" D Q:'VALID
1303+"RTN","DGMSTAPI",250,0)
1304+ .. S DGFLD=$P(DGX,";"),DGVAR=$P(DGX,";",2),DGVAL=@DGVAR
1305+"RTN","DGMSTAPI",251,0)
1306+ .. Q:DGVAL=""
1307+"RTN","DGMSTAPI",252,0)
1308+ .. S VALID=$$TESTVAL(DGFILE,DGFLD,DGVAL)
1309+"RTN","DGMSTAPI",253,0)
1310+ .. D:'VALID MSG(DGFILE,DGFLD,DGMSG,.DGERR)
1311+"RTN","DGMSTAPI",254,0)
1312+ Q VALID
1313+"RTN","DGMSTAPI",255,0)
1314+ ;
1315+"RTN","DGMSTAPI",256,0)
1316+MSG(DGFIL,DGFLD,DGMSG,DGERR) ; error message setup
1317+"RTN","DGMSTAPI",257,0)
1318+ ; Input:
1319+"RTN","DGMSTAPI",258,0)
1320+ ; DGFIL - file number
1321+"RTN","DGMSTAPI",259,0)
1322+ ; DGFLD - field number of file
1323+"RTN","DGMSTAPI",260,0)
1324+ ; DGMSG - message type verbiage - " IS REQUIRED" or " IS NOT VALID"
1325+"RTN","DGMSTAPI",261,0)
1326+ ; DGERR - error parameter passed by reference
1327+"RTN","DGMSTAPI",262,0)
1328+ ; Output:
1329+"RTN","DGMSTAPI",263,0)
1330+ ; DGERR - error message
1331+"RTN","DGMSTAPI",264,0)
1332+ S DGERR=$$GET1^DID(DGFIL,DGFLD,,"LABEL")_DGMSG
1333+"RTN","DGMSTAPI",265,0)
1334+ Q
1335+"RTN","DGMSTAPI",266,0)
1336+ ;
1337+"RTN","DGMSTAPI",267,0)
1338+TESTVAL(DGFIL,DGFLD,DGVAL) ; Determine if a field value is valid.
1339+"RTN","DGMSTAPI",268,0)
1340+ ; Input:
1341+"RTN","DGMSTAPI",269,0)
1342+ ; DGFIL - file number
1343+"RTN","DGMSTAPI",270,0)
1344+ ; DGFLD - field number of file
1345+"RTN","DGMSTAPI",271,0)
1346+ ; DGVAL - field value to be validated
1347+"RTN","DGMSTAPI",272,0)
1348+ ; Output:
1349+"RTN","DGMSTAPI",273,0)
1350+ ; Function value: Returns 1 if field is valid
1351+"RTN","DGMSTAPI",274,0)
1352+ ; 0 if validation fails
1353+"RTN","DGMSTAPI",275,0)
1354+ N DGVALEX,DGRSLT,VALID
1355+"RTN","DGMSTAPI",276,0)
1356+ S VALID=1
1357+"RTN","DGMSTAPI",277,0)
1358+ I DGVAL'="" D
1359+"RTN","DGMSTAPI",278,0)
1360+ . S DGVALEX=$$EXTERNAL^DILFD(DGFIL,DGFLD,"F",DGVAL)
1361+"RTN","DGMSTAPI",279,0)
1362+ . I DGVALEX="" S VALID=0 Q ; no external value, not valid
1363+"RTN","DGMSTAPI",280,0)
1364+ . I $$GET1^DID(DGFIL,DGFLD,"","TYPE")'="POINTER" D
1365+"RTN","DGMSTAPI",281,0)
1366+ .. D CHK^DIE(DGFIL,DGFLD,,DGVALEX,.DGRSLT) I DGRSLT="^" S VALID=0
1367+"RTN","DGMSTAPI",282,0)
1368+ Q VALID
1369+"RTN","GMRCA2")
1370+0^35^B10634
1371+"RTN","GMRCA2",1,0)
1372+GMRCA2 ;SLC/KCM,DLT,MSC/JDA - Select prompt for processing actions ;27APR2009
1373+"RTN","GMRCA2",2,0)
1374+ ;;3.0;CONSULT/REQUEST TRACKING;**1,4,MSC**;DEC 27, 1997
1375+"RTN","GMRCA2",3,0)
1376+SELECT(GMRCO) ; Select the consult to process
1377+"RTN","GMRCA2",4,0)
1378+ ;This utility checks the GMRCO variable against the selection list
1379+"RTN","GMRCA2",5,0)
1380+ ; Input variable used:
1381+"RTN","GMRCA2",6,0)
1382+ ; BLK, LNCT, GMRCO
1383+"RTN","GMRCA2",7,0)
1384+ ; GMRC("NMBR")
1385+"RTN","GMRCA2",8,0)
1386+ ; Output variables returned:
1387+"RTN","GMRCA2",9,0)
1388+ ; GMRCQUT=1 if no consult was selected
1389+"RTN","GMRCA2",10,0)
1390+ ; GMRCQUT is not defined on return when selection made
1391+"RTN","GMRCA2",11,0)
1392+ ; GMRCO= consult selected from list
1393+"RTN","GMRCA2",12,0)
1394+START
1395+"RTN","GMRCA2",13,0)
1396+ K GMRCQUT,GMRCSEL
1397+"RTN","GMRCA2",14,0)
1398+ N GMRCAGN
1399+"RTN","GMRCA2",15,0)
1400+ I '$L($G(GMRCO)) D Q:$D(GMRCQUT) G:$D(GMRCAGN) START
1401+"RTN","GMRCA2",16,0)
1402+ .;use the highlighted number if defined
1403+"RTN","GMRCA2",17,0)
1404+ .I $D(GMRC("NMBR")) S GMRCSEL=GMRC("NMBR")
1405+"RTN","GMRCA2",18,0)
1406+ .I '$D(GMRCSEL),$D(LNCT),LNCT=1 S GMRCSEL=LNCT
1407+"RTN","GMRCA2",19,0)
1408+ .I $S('+$G(GMRCSEL):1,+GMRCSEL<1:1,+GMRCSEL>BLK:1,GMRCSEL="":1,1:0) K GMRCSEL D:+$G(GMRC("NMBR")) AGAIN^GMRCSLMV(GMRC("NMBR")) K GMRC("NMBR")
1409+"RTN","GMRCA2",20,0)
1410+ .I '+$G(GMRCSEL) D SEL I $S($D(DTOUT):1,$D(DIROUT):1,$D(GMRCQUT):1,'+GMRCSEL:1,1:0) K GMRCSEL S GMRCQUT=1 Q
1411+"RTN","GMRCA2",21,0)
1412+ .I $S(+GMRCSEL<1:1,GMRCSEL>BLK:1,1:0) W !,"Select a consult listed in the number range 1 to "_BLK S GMRCAGN=1 Q
1413+"RTN","GMRCA2",22,0)
1414+ .S GMRCO=$O(^TMP("GMRCR",$J,"CS","AD",GMRCSEL,GMRCSEL,0))
1415+"RTN","GMRCA2",23,0)
1416+ .I '+GMRCO D
1417+"RTN","GMRCA2",24,0)
1418+ .. S GMRCQUT=1
1419+"RTN","GMRCA2",25,0)
1420+ .. W !,$C(7),"Select a consult by entering its listed number between 1 and "_LNCT_"."
1421+"RTN","GMRCA2",26,0)
1422+ .. K GMRCO,GMRCSEL
1423+"RTN","GMRCA2",27,0)
1424+ . Q
1425+"RTN","GMRCA2",28,0)
1426+ Q
1427+"RTN","GMRCA2",29,0)
1428+ ;
1429+"RTN","GMRCA2",30,0)
1430+SEL ;Select order number(s) exit: GMRCSEL
1431+"RTN","GMRCA2",31,0)
1432+ I $D(GMRC("NMBR")) S GMRCSEL=GMRC("NMBR") Q
1433+"RTN","GMRCA2",32,0)
1434+ I '$D(^TMP("GMRCR",$J,"CS","AD")) W !,"No orders to select.",! S GMRCQUT=1,GMRCSEL="" Q
1435+"RTN","GMRCA2",33,0)
1436+ I '$O(^TMP("GMRCR",$J,"CS","AD")),BLK=1 S GMRCSEL=BLK Q
1437+"RTN","GMRCA2",34,0)
1438+ S GMRCSEL="" W !,"CHOOSE No. 1-",BLK,": " R X:DTIME S:X="^^" DIROUT=1 I '$T!(X["^") S (DTOUT,GMRCQUT)=1 Q
1439+"RTN","GMRCA2",35,0)
1440+ I X["?" D SELHELP G SEL
1441+"RTN","GMRCA2",36,0)
1442+ I X="" S GMRCQUT=1 Q
1443+"RTN","GMRCA2",37,0)
1444+ I X'?.3N W $C(7)," ?? Enter the number from the far left of the list." G SEL
1445+"RTN","GMRCA2",38,0)
1446+ I $S(X>BLK:1,X<1:1,1:0) D SELHELP G SEL
1447+"RTN","GMRCA2",39,0)
1448+ S GMRCSEL=X
1449+"RTN","GMRCA2",40,0)
1450+ Q
1451+"RTN","GMRCA2",41,0)
1452+SELHELP ;Help to select a valid entry
1453+"RTN","GMRCA2",42,0)
1454+ W !,"Select a request by typing the number from the left column and pressing <ENTER>.",!
1455+"RTN","GMRCA2",43,0)
1456+ Q
1457+"RTN","GMRCA2",44,0)
1458+UP ;Convert lower to upper case entry: X exit: X
1459+"RTN","GMRCA2",45,0)
1460+ F %=1:1:$L(X) I $E(X,%)?1L S X=$E(X,1,%-1)_$C($A(X,%)-32)_$E(X,%+1,99)
1461+"RTN","GMRCA2",46,0)
1462+ Q
1463+"RTN","HLCSLNCH")
1464+0^18^B37355917
1465+"RTN","HLCSLNCH",1,0)
1466+HLCSLNCH ;ALB/MTC/JC MSC/JDA - START AND STOP THE LLP ;13APR2009
1467+"RTN","HLCSLNCH",2,0)
1468+ ;;1.6;HEALTH LEVEL SEVEN;**6,19,43,49,57,75,84,109,MSC**;Oct 13, 1995
1469+"RTN","HLCSLNCH",3,0)
1470+ ;
1471+"RTN","HLCSLNCH",4,0)
1472+ ;This program is callable from a menu
1473+"RTN","HLCSLNCH",5,0)
1474+ ;It allows the user to Start and Stop the Lower Layer
1475+"RTN","HLCSLNCH",6,0)
1476+ ;Protocol in the Background or in the foreground
1477+"RTN","HLCSLNCH",7,0)
1478+ ;
1479+"RTN","HLCSLNCH",8,0)
1480+ ;Required or Optional INPUT PARAMETERS
1481+"RTN","HLCSLNCH",9,0)
1482+ ; None
1483+"RTN","HLCSLNCH",10,0)
1484+ ;
1485+"RTN","HLCSLNCH",11,0)
1486+ ;
1487+"RTN","HLCSLNCH",12,0)
1488+ ;Output variables
1489+"RTN","HLCSLNCH",13,0)
1490+ ; HLDP=IEN of Logical Link in file #870
1491+"RTN","HLCSLNCH",14,0)
1492+ ;(optional)HLTRACE=if SET it launches the LLP in the Foreground
1493+"RTN","HLCSLNCH",15,0)
1494+ ;(optional) ZTSK=if defined LLP was launched in the
1495+"RTN","HLCSLNCH",16,0)
1496+ ;background
1497+"RTN","HLCSLNCH",17,0)
1498+ ;
1499+"RTN","HLCSLNCH",18,0)
1500+ ;
1501+"RTN","HLCSLNCH",19,0)
1502+START ; Start up the lower level protocol
1503+"RTN","HLCSLNCH",20,0)
1504+ N DIC,DIRUT,DTOUT,DUOUT,HLDP,HLDAPP,HLJ,HLQUIT,HLTRACE
1505+"RTN","HLCSLNCH",21,0)
1506+ N HLPARM0,HLPARM4,HLTYPTR,HLBGR,X,Y,ZTCPU,ZTSK,ZTRTN,ZTDESC
1507+"RTN","HLCSLNCH",22,0)
1508+ W !!,"This option is used to launch the lower level protocol for the"
1509+"RTN","HLCSLNCH",23,0)
1510+ W !,"appropriate device. Please select the node with which you want"
1511+"RTN","HLCSLNCH",24,0)
1512+ W !,"to communicate",!
1513+"RTN","HLCSLNCH",25,0)
1514+ S DIC="^HLCS(870,",DIC(0)="QEAMZ" D ^DIC G:Y<0 STARTQ
1515+"RTN","HLCSLNCH",26,0)
1516+ S HLDP=+Y,HLDAPP=Y(0,0),HLTYPTR=+$P(Y(0),U,3),HLPARM0=Y(0)
1517+"RTN","HLCSLNCH",27,0)
1518+ ;-- check if parameter have been setup
1519+"RTN","HLCSLNCH",28,0)
1520+ ;-- check for LLP type
1521+"RTN","HLCSLNCH",29,0)
1522+ I 'HLTYPTR W !,$C(7),"A Lower Layer Protocol must be selected before start-up can occur." G STARTQ
1523+"RTN","HLCSLNCH",30,0)
1524+ ;-- get TCP information
1525+"RTN","HLCSLNCH",31,0)
1526+ S HLPARM4=$G(^HLCS(870,HLDP,400))
1527+"RTN","HLCSLNCH",32,0)
1528+ ;-- get routine (background job for LLP)
1529+"RTN","HLCSLNCH",33,0)
1530+ S HLBGR=$G(^HLCS(869.1,HLTYPTR,100))
1531+"RTN","HLCSLNCH",34,0)
1532+ ;-- get environment check routine (HLQUIT should be defined in fails)
1533+"RTN","HLCSLNCH",35,0)
1534+ S HLENV=$G(^HLCS(869.1,HLTYPTR,200))
1535+"RTN","HLCSLNCH",36,0)
1536+ ;
1537+"RTN","HLCSLNCH",37,0)
1538+ I HLBGR="" W !,$C(7),"No routine has been specified for this LLP." G STARTQ
1539+"RTN","HLCSLNCH",38,0)
1540+ ;
1541+"RTN","HLCSLNCH",39,0)
1542+ ;-- execute environment check routine if HLQUIT is defined then terminate
1543+"RTN","HLCSLNCH",40,0)
1544+ I HLENV'="" X HLENV G:$D(HLQUIT) STARTQ
1545+"RTN","HLCSLNCH",41,0)
1546+ ;Multi-Servers, only enable the link if not OpenM
1547+"RTN","HLCSLNCH",42,0)
1548+ I $P(HLPARM4,U,3)="M",$$NOTMULTI D G STARTQ
1549+"RTN","HLCSLNCH",43,0)
1550+ . W !,$C(7),"This LLP is a multi-threaded server. It is controlled by external service, i.e. TCPIP/UCX. You must use the external service to start this LLP."
1551+"RTN","HLCSLNCH",44,0)
1552+ . Q
1553+"RTN","HLCSLNCH",45,0)
1554+ ;
1555+"RTN","HLCSLNCH",46,0)
1556+ I $P(HLPARM0,U,10) W !,$C(7),"The LLP was last started on ",$$DAT2^HLUTIL1($P(HLPARM0,U,10)),"." G STP1:$P(HLPARM0,U,5)'="Error"
1557+"RTN","HLCSLNCH",47,0)
1558+ I $P(HLPARM0,U,11) W !,"The LLP was last shutdown on ",$$DAT2^HLUTIL1($P(HLPARM0,U,11)),"."
1559+"RTN","HLCSLNCH",48,0)
1560+ I $P(HLPARM0,U,5)'="Error",'($P(HLPARM4,U,3)="C"&("N"[$P(HLPARM4,U,4))),$P(HLPARM0,U,10)]""&($P(HLPARM0,U,11)=""),$P(HLPARM0,U,12) W !,"The LLP appears to be online already !"
1561+"RTN","HLCSLNCH",49,0)
1562+ I $$TASK^HLUTIL1($P(HLPARM0,U,12)) D G STARTQ
1563+"RTN","HLCSLNCH",50,0)
1564+ . W !,$C(7),"NOTE: The lower level protocol for this application is already running."
1565+"RTN","HLCSLNCH",51,0)
1566+ I $P(HLPARM4,U,3)="C"&("N"[$P(HLPARM4,U,4)) D G STARTQ
1567+"RTN","HLCSLNCH",52,0)
1568+ .;4=status 9=Time Started, 10=Time Stopped, 11=Task Number
1569+"RTN","HLCSLNCH",53,0)
1570+ .;14=Shutdown LLP, 3=Device Type, 18=Gross Errors
1571+"RTN","HLCSLNCH",54,0)
1572+ .N HLJ,X
1573+"RTN","HLCSLNCH",55,0)
1574+ .I $P(HLPARM0,U,15)=0 W !,"This LLP is already enabled!" Q
1575+"RTN","HLCSLNCH",56,0)
1576+ .L +^HLCS(870,HLDP,0):2
1577+"RTN","HLCSLNCH",57,0)
1578+ .E W !,$C(7),"Unable to enable this LLP !" Q
1579+"RTN","HLCSLNCH",58,0)
1580+ .S X="HLJ(870,"""_HLDP_","")"
1581+"RTN","HLCSLNCH",59,0)
1582+ .S @X@(4)="Enabled",@X@(9)=$$NOW^XLFDT,@X@(14)=0
1583+"RTN","HLCSLNCH",60,0)
1584+ .D FILE^HLDIE("","HLJ","","START","HLCSLNCH") ;HL*1.6*109
1585+"RTN","HLCSLNCH",61,0)
1586+ .L -^HLCS(870,HLDP,0)
1587+"RTN","HLCSLNCH",62,0)
1588+ .W !,"This LLP has been enabled!"
1589+"RTN","HLCSLNCH",63,0)
1590+ .Q
1591+"RTN","HLCSLNCH",64,0)
1592+ I $P(HLPARM4,U,6),$D(^%ZIS(14.7,+$P(HLPARM4,U,6),0)) S ZTCPU=$P(^(0),U) W !,"This LLP will start on node ",ZTCPU," if it is run in the Background.",!
1593+"RTN","HLCSLNCH",65,0)
1594+ ;
1595+"RTN","HLCSLNCH",66,0)
1596+ W ! S DIR(0)="SM^F:FOREGROUND;B:BACKGROUND;Q:QUIT"
1597+"RTN","HLCSLNCH",67,0)
1598+ S DIR("A")="Method for running the receiver"
1599+"RTN","HLCSLNCH",68,0)
1600+ S DIR("B")="B"
1601+"RTN","HLCSLNCH",69,0)
1602+ S DIR("?",1)="Enter F for Foreground (and trace)"
1603+"RTN","HLCSLNCH",70,0)
1604+ S DIR("?",2)=" B for Background (normal) or"
1605+"RTN","HLCSLNCH",71,0)
1606+ S DIR("?")=" Q to quit without starting the receiver"
1607+"RTN","HLCSLNCH",72,0)
1608+ D ^DIR K DIR
1609+"RTN","HLCSLNCH",73,0)
1610+ Q:(Y=U)!(Y="Q")
1611+"RTN","HLCSLNCH",74,0)
1612+ ;
1613+"RTN","HLCSLNCH",75,0)
1614+ S HLX=$G(^HLCS(870,HLDP,0))
1615+"RTN","HLCSLNCH",76,0)
1616+ ;-- foreground
1617+"RTN","HLCSLNCH",77,0)
1618+ I Y="F" S HLTRACE=1 D G STARTQ
1619+"RTN","HLCSLNCH",78,0)
1620+ . X HLBGR
1621+"RTN","HLCSLNCH",79,0)
1622+ ;-- background
1623+"RTN","HLCSLNCH",80,0)
1624+ I Y="B" D G STARTQ
1625+"RTN","HLCSLNCH",81,0)
1626+ . S ZTRTN=$P(HLBGR," ",2),HLTRACE="",ZTIO="",ZTDTH=$H
1627+"RTN","HLCSLNCH",82,0)
1628+ . S ZTDESC=HLDAPP_" Low Level Protocol",ZTSAVE("HLDP")=""
1629+"RTN","HLCSLNCH",83,0)
1630+ . D ^%ZTLOAD
1631+"RTN","HLCSLNCH",84,0)
1632+ . W !,$S($D(ZTSK):"Job was queued as "_ZTSK_".",1:"Unable to queue job.")
1633+"RTN","HLCSLNCH",85,0)
1634+ ;
1635+"RTN","HLCSLNCH",86,0)
1636+ Q
1637+"RTN","HLCSLNCH",87,0)
1638+ ;
1639+"RTN","HLCSLNCH",88,0)
1640+ ;
1641+"RTN","HLCSLNCH",89,0)
1642+STARTQ ;
1643+"RTN","HLCSLNCH",90,0)
1644+ I $G(POP) W !,?5,"-Unable to Open the Device !",!,!,?6,"Check that Port is Logged Out, and that the",!,?6,"Lower Level Protocol is not Already Running."
1645+"RTN","HLCSLNCH",91,0)
1646+ Q
1647+"RTN","HLCSLNCH",92,0)
1648+ ;
1649+"RTN","HLCSLNCH",93,0)
1650+STOP ; Shut down a lower level protocol..
1651+"RTN","HLCSLNCH",94,0)
1652+ N DIC,DIRUT,DTOUT,DUOUT,HLDP,HLDAPP,HLJ,HLPARM0,HLPARM4,X,Y
1653+"RTN","HLCSLNCH",95,0)
1654+ W !!,"This option is used to shut down the lower level protocol for the"
1655+"RTN","HLCSLNCH",96,0)
1656+ W !,"appropriate device. Please select the link which you would"
1657+"RTN","HLCSLNCH",97,0)
1658+ W !,"like to shutdown.",!
1659+"RTN","HLCSLNCH",98,0)
1660+ S DIC="^HLCS(870,",DIC(0)="QEAMZ" D ^DIC K DIC Q:Y<0
1661+"RTN","HLCSLNCH",99,0)
1662+ S HLDP=+Y,HLDAPP=Y(0,0),HLPARM0=Y(0),HLPARM4=$G(^HLCS(870,HLDP,400))
1663+"RTN","HLCSLNCH",100,0)
1664+ I $P(HLPARM4,U,3)="M",$$NOTMULTI D Q
1665+"RTN","HLCSLNCH",101,0)
1666+ . W !,$C(7),"This LLP is a multi-threaded server. It is controlled by external service, i.e. UCX. You must use the external service to disable this LLP."
1667+"RTN","HLCSLNCH",102,0)
1668+ . Q
1669+"RTN","HLCSLNCH",103,0)
1670+ ;
1671+"RTN","HLCSLNCH",104,0)
1672+ I $P(HLPARM0,U,15) W !,$C(7),"The lower level protocol is already ",$P(HLPARM0,U,5),"." Q
1673+"RTN","HLCSLNCH",105,0)
1674+ I $P(HLPARM0,U,10) W !,$C(7),"The lower level protocol was started on ",$$DAT2^HLUTIL1($P(HLPARM0,U,10)),"."
1675+"RTN","HLCSLNCH",106,0)
1676+STP1 ;
1677+"RTN","HLCSLNCH",107,0)
1678+ W ! S DIR(0)="Y",DIR("A")="Okay to shut down this job" D ^DIR K DIR
1679+"RTN","HLCSLNCH",108,0)
1680+ I 'Y!($D(DIRUT))!($D(DUOUT)) W !!,"The job will not be shut down." Q
1681+"RTN","HLCSLNCH",109,0)
1682+S ;
1683+"RTN","HLCSLNCH",110,0)
1684+ F L +^HLCS(870,HLDP,0):2 Q:$T
1685+"RTN","HLCSLNCH",111,0)
1686+ ;4=status,10=Time Stopped,9=Time Started,11=Task Number,3=Device Type,14=shutdown
1687+"RTN","HLCSLNCH",112,0)
1688+ S X="HLJ(870,"""_HLDP_","")",@X@(4)="Halting",@X@(10)=$$NOW^XLFDT,(@X@(11),@X@(9))="@",@X@(14)=1
1689+"RTN","HLCSLNCH",113,0)
1690+ I $P(HLPARM4,U,3)="C"&("N"[$P(HLPARM4,U,4)),'$P(HLPARM0,U,12) S @X@(4)="Shutdown"
1691+"RTN","HLCSLNCH",114,0)
1692+ D FILE^HLDIE("","HLJ","","STOP","HLCSLNCH") ; HL*1.6*109
1693+"RTN","HLCSLNCH",115,0)
1694+ I ^%ZOSF("OS")["OpenM",(($P(HLPARM4,U,3)="M"&($$OS^%ZOSV'["VMS"))!($P(HLPARM4,U,3)="S")) D
1695+"RTN","HLCSLNCH",116,0)
1696+ . ;pass task number to stop listener
1697+"RTN","HLCSLNCH",117,0)
1698+ . S:$P(HLPARM0,U,12) X=$$ASKSTOP^%ZTLOAD(+$P(HLPARM0,U,12))
1699+"RTN","HLCSLNCH",118,0)
1700+ . D CALL^%ZISTCP($P(HLPARM4,U),$P(HLPARM4,U,2),10)
1701+"RTN","HLCSLNCH",119,0)
1702+ . I POP D HOME^%ZIS U IO W !,"Unable to shutdown logical link!!!",$C(7),$C(7) Q
1703+"RTN","HLCSLNCH",120,0)
1704+ . U IO W "**STOP**"
1705+"RTN","HLCSLNCH",121,0)
1706+ . W !
1707+"RTN","HLCSLNCH",122,0)
1708+ . D CLOSE^%ZISTCP
1709+"RTN","HLCSLNCH",123,0)
1710+ L -^HLCS(870,HLDP,0)
1711+"RTN","HLCSLNCH",124,0)
1712+ W !,"The job for the "_HLDAPP_" Lower Level Protocol will be shut down."
1713+"RTN","HLCSLNCH",125,0)
1714+ Q
1715+"RTN","HLCSLNCH",126,0)
1716+ ;
1717+"RTN","HLCSLNCH",127,0)
1718+NOTMULTI() ; Returns 1 if implementation can't run multithreaded listener
1719+"RTN","HLCSLNCH",128,0)
1720+ Q:^%ZOSF("OS")["GT.M" 0
1721+"RTN","HLCSLNCH",129,0)
1722+ Q $S(^%ZOSF("OS")'["OpenM":1,1:$$OS^%ZOSV["VMS")
1723+"RTN","HLCSLNCH",130,0)
1724+STOPQ Q
1725+"RTN","HLCSTCP")
1726+0^17^B32434118
1727+"RTN","HLCSTCP",1,0)
1728+HLCSTCP ;SFIRMFO/TNV-ALB/JFP,PKE MSC/JDA - (TCP/IP) MLLP ;13APR2009
1729+"RTN","HLCSTCP",2,0)
1730+ ;;1.6;HEALTH LEVEL SEVEN;**19,43,49,57,58,64,84,109,MSC**;Oct 13, 1995
1731+"RTN","HLCSTCP",3,0)
1732+ ;
1733+"RTN","HLCSTCP",4,0)
1734+ ; This is an implementation of the HL7 Minimal Lower Layer Protocol
1735+"RTN","HLCSTCP",5,0)
1736+ ;
1737+"RTN","HLCSTCP",6,0)
1738+ ;taskman entry/startup option, HLDP defined in menu entry,
1739+"RTN","HLCSTCP",7,0)
1740+ Q:'$D(HLDP)
1741+"RTN","HLCSTCP",8,0)
1742+ N HLCSOUT,HLDBACK,HLDBSIZE,HLDREAD,HLDRETR,HLRETRA,HLDWAIT,HLOS,HLTCPADD,HLTCPCS,HLTCPLNK,HLTCPORT,HLTCPRET,HLCSFAIL
1743+"RTN","HLCSTCP",9,0)
1744+ ;HLCSOUT= 1-error
1745+"RTN","HLCSTCP",10,0)
1746+ I '$$INIT D EXITS("Init Error") Q
1747+"RTN","HLCSTCP",11,0)
1748+ ; Start the client
1749+"RTN","HLCSTCP",12,0)
1750+ I $G(HLTCPCS)="C" D Q
1751+"RTN","HLCSTCP",13,0)
1752+ . ; identify process for ^%SY
1753+"RTN","HLCSTCP",14,0)
1754+ . D SETNM^%ZOSV($E("HLClnt:"_HLDP,1,15))
1755+"RTN","HLCSTCP",15,0)
1756+ . D ST1
1757+"RTN","HLCSTCP",16,0)
1758+ . F D ^HLCSTCP2 Q:$$STOP!$G(HLCSOUT)
1759+"RTN","HLCSTCP",17,0)
1760+ . I $G(HLCSOUT)=1 D MON("Error") H 1 Q
1761+"RTN","HLCSTCP",18,0)
1762+ . I $G(HLCSOUT)=2 D EXITS("Inactive") Q
1763+"RTN","HLCSTCP",19,0)
1764+ . D EXITS("Shutdown")
1765+"RTN","HLCSTCP",20,0)
1766+ ;
1767+"RTN","HLCSTCP",21,0)
1768+ ; identify process for ^%SY
1769+"RTN","HLCSTCP",22,0)
1770+ D SETNM^%ZOSV($E("HLSrv:"_HLDP,1,15))
1771+"RTN","HLCSTCP",23,0)
1772+ ;HLCSFAIL=1 port failed to open
1773+"RTN","HLCSTCP",24,0)
1774+ S HLCSFAIL=1
1775+"RTN","HLCSTCP",25,0)
1776+ ;single threaded listener
1777+"RTN","HLCSTCP",26,0)
1778+ I $G(HLTCPCS)="S" D Q
1779+"RTN","HLCSTCP",27,0)
1780+ . D ST1,MON("Listen"),LISTEN^%ZISTCP(HLTCPORT,"SERVER^HLCSTCP("""_HLDP_""")","S ZISQUIT=$$STOP^HLCSTCP()")
1781+"RTN","HLCSTCP",28,0)
1782+ . ;couldn't open listener port
1783+"RTN","HLCSTCP",29,0)
1784+ . I HLCSFAIL D EXITS("Openfail") Q
1785+"RTN","HLCSTCP",30,0)
1786+ ;
1787+"RTN","HLCSTCP",31,0)
1788+ ;multi-threaded listener (OpenM or GT.M)
1789+"RTN","HLCSTCP",32,0)
1790+ I $G(HLTCPCS)="M",(^%ZOSF("OS")["OpenM")!(^%ZOSF("OS")["GT.M") D Q
1791+"RTN","HLCSTCP",33,0)
1792+ . D ST1,MON("Listen"),LISTEN^%ZISTCPS(HLTCPORT,"SERVERS^HLCSTCP("""_HLDP_""")")
1793+"RTN","HLCSTCP",34,0)
1794+ Q
1795+"RTN","HLCSTCP",35,0)
1796+ ;
1797+"RTN","HLCSTCP",36,0)
1798+SERVER(HLDP) ; single server using Taskman
1799+"RTN","HLCSTCP",37,0)
1800+ S HLCSFAIL=0
1801+"RTN","HLCSTCP",38,0)
1802+ I '$$INIT D EXITS("Init error") Q
1803+"RTN","HLCSTCP",39,0)
1804+ D ^HLCSTCP1
1805+"RTN","HLCSTCP",40,0)
1806+ I $$STOP D CLOSE^%ZISTCP,EXITS("Shutdown") S IO("C")="" Q
1807+"RTN","HLCSTCP",41,0)
1808+ Q:$G(HLCSOUT)=1
1809+"RTN","HLCSTCP",42,0)
1810+ D MON("Idle")
1811+"RTN","HLCSTCP",43,0)
1812+ Q
1813+"RTN","HLCSTCP",44,0)
1814+ ;
1815+"RTN","HLCSTCP",45,0)
1816+SERVERS(HLDP) ; Multi-threaded server using Taskman
1817+"RTN","HLCSTCP",46,0)
1818+ I '$$INIT D EXITS("Init error") Q
1819+"RTN","HLCSTCP",47,0)
1820+ G LISTEN
1821+"RTN","HLCSTCP",48,0)
1822+ ;
1823+"RTN","HLCSTCP",49,0)
1824+ ;multiple process servers, called from an external utility
1825+"RTN","HLCSTCP",50,0)
1826+MSM ;MSM entry point, called from User-Defined Services
1827+"RTN","HLCSTCP",51,0)
1828+ ;HLDP=ien in the HL LOWER LEVEL PROTOCOL PARAMETER file for the
1829+"RTN","HLCSTCP",52,0)
1830+ ;HL7 Multi-Threaded SERVER
1831+"RTN","HLCSTCP",53,0)
1832+ S (IO,IO(0))=$P
1833+"RTN","HLCSTCP",54,0)
1834+ G LISTEN
1835+"RTN","HLCSTCP",55,0)
1836+ ;
1837+"RTN","HLCSTCP",56,0)
1838+CACHEVMS(%) ;Cache'/VMS tcpip/ucx entry point, called from HLSEVEN.COM file,
1839+"RTN","HLCSTCP",57,0)
1840+ ;listener, % = HLDP
1841+"RTN","HLCSTCP",58,0)
1842+ I $G(%)="" D ^%ZTER Q
1843+"RTN","HLCSTCP",59,0)
1844+ S (IO,IO(0))="SYS$NET",HLDP=%
1845+"RTN","HLCSTCP",60,0)
1846+ ; **Cache'/VMS specific code**
1847+"RTN","HLCSTCP",61,0)
1848+ O IO::5 E D MON("Openfail") Q
1849+"RTN","HLCSTCP",62,0)
1850+ X "U IO:(::""-M"")" ;Packet mode like DSM
1851+"RTN","HLCSTCP",63,0)
1852+ D LISTEN C IO Q
1853+"RTN","HLCSTCP",64,0)
1854+ ;
1855+"RTN","HLCSTCP",65,0)
1856+EN ;vms ucx entry point, called from HLSEVEN.COM file,
1857+"RTN","HLCSTCP",66,0)
1858+ ;listener, % = device^HLDP
1859+"RTN","HLCSTCP",67,0)
1860+ I $G(%)="" D ^%ZTER Q
1861+"RTN","HLCSTCP",68,0)
1862+ S (IO,IO(0))="SYS$NET",HLDP=$P(%,"^",2)
1863+"RTN","HLCSTCP",69,0)
1864+ ; **VMS specific code, need to share device**
1865+"RTN","HLCSTCP",70,0)
1866+ X "O IO:(TCPDEV):60" E D MON("Openfail") Q
1867+"RTN","HLCSTCP",71,0)
1868+LISTEN ;
1869+"RTN","HLCSTCP",72,0)
1870+ N HLLSTN,HLCSOUT,HLDBACK,HLDBSIZE,HLDREAD,HLDRETR,HLRETRA,HLDWAIT,HLOS,HLTCPADD,HLTCPCS,HLTCPLNK,HLTCPORT,HLTCPRET,HLCSFAIL
1871+"RTN","HLCSTCP",73,0)
1872+ I '$$INIT D ^%ZTER Q
1873+"RTN","HLCSTCP",74,0)
1874+ ; identify process for ^%SY
1875+"RTN","HLCSTCP",75,0)
1876+ D SETNM^%ZOSV($E("HLSrv:"_HLDP,1,15))
1877+"RTN","HLCSTCP",76,0)
1878+ ;HLLSTN used to identify a listener to tag MON
1879+"RTN","HLCSTCP",77,0)
1880+ S HLLSTN=1
1881+"RTN","HLCSTCP",78,0)
1882+ ;increment job count, run server
1883+"RTN","HLCSTCP",79,0)
1884+ D UPDT(1),^HLCSTCP1,EXITM
1885+"RTN","HLCSTCP",80,0)
1886+ Q
1887+"RTN","HLCSTCP",81,0)
1888+ ;
1889+"RTN","HLCSTCP",82,0)
1890+DCOPEN(HLDP) ;open direct connect - called from HLMA2
1891+"RTN","HLCSTCP",83,0)
1892+ Q:'$$INIT 0
1893+"RTN","HLCSTCP",84,0)
1894+ Q:HLTCPADD=""!(HLTCPORT="") 0
1895+"RTN","HLCSTCP",85,0)
1896+ Q:'$$OPEN^HLCSTCP2 0
1897+"RTN","HLCSTCP",86,0)
1898+ Q 1
1899+"RTN","HLCSTCP",87,0)
1900+ ;
1901+"RTN","HLCSTCP",88,0)
1902+INIT() ; Initialize Variables
1903+"RTN","HLCSTCP",89,0)
1904+ ; HLDP should be set to the IEN or name of Logical Link, file 870
1905+"RTN","HLCSTCP",90,0)
1906+ S HLOS=$P($G(^%ZOSF("OS")),"^")
1907+"RTN","HLCSTCP",91,0)
1908+ N DA,DIQUIET,DR,TMP,X,Y
1909+"RTN","HLCSTCP",92,0)
1910+ S DIQUIET=1
1911+"RTN","HLCSTCP",93,0)
1912+ D DT^DICRW
1913+"RTN","HLCSTCP",94,0)
1914+ I 'HLDP S HLDP=$O(^HLCS(870,"B",HLDP,0)) I 'HLDP Q 0
1915+"RTN","HLCSTCP",95,0)
1916+ S DA=HLDP
1917+"RTN","HLCSTCP",96,0)
1918+ S DR="200.02;200.021;200.03;200.04;200.05;200.09;400.01;400.02;400.03;400.04;400.05"
1919+"RTN","HLCSTCP",97,0)
1920+ D GETS^DIQ(870,DA,DR,"IN","TMP","TMP")
1921+"RTN","HLCSTCP",98,0)
1922+ ;
1923+"RTN","HLCSTCP",99,0)
1924+ I $D(TMP("DIERR")) QUIT 0
1925+"RTN","HLCSTCP",100,0)
1926+ ; -- re-transmit attempts
1927+"RTN","HLCSTCP",101,0)
1928+ S HLDRETR=+$G(TMP(870,DA_",",200.02,"I"))
1929+"RTN","HLCSTCP",102,0)
1930+ ; -- exceed re-transmit action
1931+"RTN","HLCSTCP",103,0)
1932+ S HLRETRA=$G(TMP(870,DA_",",200.021,"I"))
1933+"RTN","HLCSTCP",104,0)
1934+ ; -- block size
1935+"RTN","HLCSTCP",105,0)
1936+ S HLDBSIZE=+$G(TMP(870,DA_",",200.03,"I"))
1937+"RTN","HLCSTCP",106,0)
1938+ ; -- read timeout
1939+"RTN","HLCSTCP",107,0)
1940+ S HLDREAD=+$G(TMP(870,DA_",",200.04,"I"))
1941+"RTN","HLCSTCP",108,0)
1942+ ; -- ack timeout
1943+"RTN","HLCSTCP",109,0)
1944+ S HLDBACK=+$G(TMP(870,DA_",",200.05,"I"))
1945+"RTN","HLCSTCP",110,0)
1946+ ; -- uni-directional wait
1947+"RTN","HLCSTCP",111,0)
1948+ S HLDWAIT=$G(TMP(870,DA_",",200.09,"I"))
1949+"RTN","HLCSTCP",112,0)
1950+ ; -- tcp address
1951+"RTN","HLCSTCP",113,0)
1952+ S HLTCPADD=$G(TMP(870,DA_",",400.01,"I"))
1953+"RTN","HLCSTCP",114,0)
1954+ ; -- tcp port
1955+"RTN","HLCSTCP",115,0)
1956+ S HLTCPORT=$G(TMP(870,DA_",",400.02,"I"))
1957+"RTN","HLCSTCP",116,0)
1958+ ; -- tcp/ip service type
1959+"RTN","HLCSTCP",117,0)
1960+ S HLTCPCS=$G(TMP(870,DA_",",400.03,"I"))
1961+"RTN","HLCSTCP",118,0)
1962+ ; -- link persistence
1963+"RTN","HLCSTCP",119,0)
1964+ S HLTCPLNK=$G(TMP(870,DA_",",400.04,"I"))
1965+"RTN","HLCSTCP",120,0)
1966+ ; -- retention
1967+"RTN","HLCSTCP",121,0)
1968+ S HLTCPRET=$G(TMP(870,DA_",",400.05,"I"))
1969+"RTN","HLCSTCP",122,0)
1970+ ;
1971+"RTN","HLCSTCP",123,0)
1972+ ; -- set defaults in case something's not set
1973+"RTN","HLCSTCP",124,0)
1974+ S:HLDREAD=0 HLDREAD=10
1975+"RTN","HLCSTCP",125,0)
1976+ S:HLDBACK=0 HLDBACK=60
1977+"RTN","HLCSTCP",126,0)
1978+ S:HLDBSIZE=0 HLDBSIZE=245
1979+"RTN","HLCSTCP",127,0)
1980+ S:HLDRETR=0 HLDRETR=5
1981+"RTN","HLCSTCP",128,0)
1982+ S:HLTCPRET="" X=$P($$PARAM^HLCS2,U,12),HLTCPRET=$S(X:X,1:15)
1983+"RTN","HLCSTCP",129,0)
1984+ ;
1985+"RTN","HLCSTCP",130,0)
1986+ Q 1
1987+"RTN","HLCSTCP",131,0)
1988+ ;
1989+"RTN","HLCSTCP",132,0)
1990+ST1 ;record startup in 870 for single server
1991+"RTN","HLCSTCP",133,0)
1992+ ;4=status 9=Time Started, 10=Time Stopped, 11=Task Number
1993+"RTN","HLCSTCP",134,0)
1994+ ;14=Shutdown LLP, 3=LLP Online, 18=Gross Errors
1995+"RTN","HLCSTCP",135,0)
1996+ N HLJ,X
1997+"RTN","HLCSTCP",136,0)
1998+ F L +^HLCS(870,HLDP,0):2 Q:$T
1999+"RTN","HLCSTCP",137,0)
2000+ S X="HLJ(870,"""_HLDP_","")"
2001+"RTN","HLCSTCP",138,0)
2002+ S @X@(4)="Init",(@X@(10),@X@(18))="@",@X@(14)=0
2003+"RTN","HLCSTCP",139,0)
2004+ I HLTCPCS["C" S @X@(3)=$S(HLTCPLNK["Y":"PC",1:"NC")
2005+"RTN","HLCSTCP",140,0)
2006+ E S @X@(3)=$S(HLTCPCS["S":"SS",HLTCPCS["M":"MS",1:"")
2007+"RTN","HLCSTCP",141,0)
2008+ I @X@(3)'="NC" S @X@(9)=$$NOW^XLFDT
2009+"RTN","HLCSTCP",142,0)
2010+ S:$G(ZTSK) @X@(11)=ZTSK
2011+"RTN","HLCSTCP",143,0)
2012+ D FILE^HLDIE("","HLJ","","ST1","HLCSTCP") ;HL*1.6*109
2013+"RTN","HLCSTCP",144,0)
2014+ L -^HLCS(870,HLDP,0)
2015+"RTN","HLCSTCP",145,0)
2016+ Q
2017+"RTN","HLCSTCP",146,0)
2018+ ;
2019+"RTN","HLCSTCP",147,0)
2020+MON(Y) ;Display current state & check for shutdown
2021+"RTN","HLCSTCP",148,0)
2022+ ;don't display for multiple server
2023+"RTN","HLCSTCP",149,0)
2024+ Q:$G(HLLSTN)
2025+"RTN","HLCSTCP",150,0)
2026+ F L +^HLCS(870,HLDP,0):2 Q:$T
2027+"RTN","HLCSTCP",151,0)
2028+ S $P(^HLCS(870,HLDP,0),U,5)=Y
2029+"RTN","HLCSTCP",152,0)
2030+ L -^HLCS(870,HLDP,0)
2031+"RTN","HLCSTCP",153,0)
2032+ Q:'$D(HLTRACE)
2033+"RTN","HLCSTCP",154,0)
2034+ N X U IO(0)
2035+"RTN","HLCSTCP",155,0)
2036+ W !,"IN State: ",Y
2037+"RTN","HLCSTCP",156,0)
2038+ I '$$STOP D
2039+"RTN","HLCSTCP",157,0)
2040+ . R !,"Type Q to Quit: ",X#1:1
2041+"RTN","HLCSTCP",158,0)
2042+ . I $L(X),"Qq"[X S $P(^HLCS(870,HLDP,0),U,15)=1
2043+"RTN","HLCSTCP",159,0)
2044+ U IO
2045+"RTN","HLCSTCP",160,0)
2046+ Q
2047+"RTN","HLCSTCP",161,0)
2048+UPDT(Y) ;update job count for multiple servers,X=1 increment
2049+"RTN","HLCSTCP",162,0)
2050+ N HLJ,X
2051+"RTN","HLCSTCP",163,0)
2052+ F L +^HLCS(870,HLDP,0):2 Q:$T
2053+"RTN","HLCSTCP",164,0)
2054+ S X=+$P(^HLCS(870,HLDP,0),U,5),$P(^(0),U,5)=$S(Y:X+1,1:X-1)_" server"
2055+"RTN","HLCSTCP",165,0)
2056+ ;if incrementing, set the Device Type field to Multi-Server
2057+"RTN","HLCSTCP",166,0)
2058+ I X S HLJ(870,HLDP_",",3)="MS" D FILE^HLDIE("","HLJ","","UPDT","HLCSTCP") ;HL*1.6*109
2059+"RTN","HLCSTCP",167,0)
2060+ L -^HLCS(870,HLDP,0)
2061+"RTN","HLCSTCP",168,0)
2062+ Q
2063+"RTN","HLCSTCP",169,0)
2064+STOP() ;stop flag set
2065+"RTN","HLCSTCP",170,0)
2066+ N X
2067+"RTN","HLCSTCP",171,0)
2068+ F L +^HLCS(870,HLDP,0):2 Q:$T
2069+"RTN","HLCSTCP",172,0)
2070+ S X=+$P(^HLCS(870,HLDP,0),U,15)
2071+"RTN","HLCSTCP",173,0)
2072+ L -^HLCS(870,HLDP,0)
2073+"RTN","HLCSTCP",174,0)
2074+ Q X
2075+"RTN","HLCSTCP",175,0)
2076+ ;
2077+"RTN","HLCSTCP",176,0)
2078+LLCNT(DP,Y,Z) ;update Logical Link counters
2079+"RTN","HLCSTCP",177,0)
2080+ ;DP=ien of Logical Link in file 870
2081+"RTN","HLCSTCP",178,0)
2082+ ;Y: 1=msg rec, 2=msg proc, 3=msg to send, 4=msg sent
2083+"RTN","HLCSTCP",179,0)
2084+ ;Z: ""=add to counter, 1=subtract from counter
2085+"RTN","HLCSTCP",180,0)
2086+ Q:'$D(^HLCS(870,+$G(DP),0))!('$G(Y))
2087+"RTN","HLCSTCP",181,0)
2088+ N P,X
2089+"RTN","HLCSTCP",182,0)
2090+ S P=$S(Y<3:"IN",1:"OUT")_" QUEUE "_$S(Y#2:"BACK",1:"FRONT")_" POINTER"
2091+"RTN","HLCSTCP",183,0)
2092+ F L +^HLCS(870,DP,P):2 Q:$T
2093+"RTN","HLCSTCP",184,0)
2094+ S X=+$G(^HLCS(870,DP,P)),^(P)=X+$S($G(Z):-1,1:1)
2095+"RTN","HLCSTCP",185,0)
2096+ L -^HLCS(870,DP,P)
2097+"RTN","HLCSTCP",186,0)
2098+ Q
2099+"RTN","HLCSTCP",187,0)
2100+SDFLD ; set Shutdown? field to yes
2101+"RTN","HLCSTCP",188,0)
2102+ Q:'$G(HLDP)
2103+"RTN","HLCSTCP",189,0)
2104+ N HLJ,X
2105+"RTN","HLCSTCP",190,0)
2106+ F L +^HLCS(870,HLDP,0):2 Q:$T
2107+"RTN","HLCSTCP",191,0)
2108+ ;14=Shutdown LLP?
2109+"RTN","HLCSTCP",192,0)
2110+ S HLJ(870,HLDP_",",14)=1
2111+"RTN","HLCSTCP",193,0)
2112+ D FILE^HLDIE("","HLJ","","SDFLD","HLCSTCP") ;HL*1.6*109
2113+"RTN","HLCSTCP",194,0)
2114+ L -^HLCS(870,HLDP,0)
2115+"RTN","HLCSTCP",195,0)
2116+ Q
2117+"RTN","HLCSTCP",196,0)
2118+ ;
2119+"RTN","HLCSTCP",197,0)
2120+EXITS(Y) ; Single service shutdown and cleans up
2121+"RTN","HLCSTCP",198,0)
2122+ N HLJ,X
2123+"RTN","HLCSTCP",199,0)
2124+ F L +^HLCS(870,HLDP,0):2 Q:$T
2125+"RTN","HLCSTCP",200,0)
2126+ ;4=status,10=Time Stopped,9=Time Started,11=Task Number
2127+"RTN","HLCSTCP",201,0)
2128+ S X="HLJ(870,"""_HLDP_","")"
2129+"RTN","HLCSTCP",202,0)
2130+ S @X@(4)=Y,@X@(11)="@"
2131+"RTN","HLCSTCP",203,0)
2132+ S:$G(HLCSOUT)'=2 @X@(10)=$$NOW^XLFDT,@X@(9)="@"
2133+"RTN","HLCSTCP",204,0)
2134+ D FILE^HLDIE("","HLJ","","EXITS","HLCSTCP") ; HL*1.6*109
2135+"RTN","HLCSTCP",205,0)
2136+ L -^HLCS(870,HLDP,0)
2137+"RTN","HLCSTCP",206,0)
2138+ I $D(ZTQUEUED) S ZTREQ="@"
2139+"RTN","HLCSTCP",207,0)
2140+ Q
2141+"RTN","HLCSTCP",208,0)
2142+ ;
2143+"RTN","HLCSTCP",209,0)
2144+EXITM ;Multiple service shutdown and clean up
2145+"RTN","HLCSTCP",210,0)
2146+ D UPDT(0)
2147+"RTN","HLCSTCP",211,0)
2148+ I $D(ZTQUEUED) S ZTREQ="@"
2149+"RTN","HLCSTCP",212,0)
2150+ Q
2151+"RTN","HLCSTCP1")
2152+0^16^B29662559
2153+"RTN","HLCSTCP1",1,0)
2154+HLCSTCP1 ;SFIRMFO/RSD MSC/JDA - BI-DIRECTIONAL TCP ;13APR2009
2155+"RTN","HLCSTCP1",2,0)
2156+ ;;1.6;HEALTH LEVEL SEVEN;**19,43,57,64,71,MSC**;JUL 17,1995
2157+"RTN","HLCSTCP1",3,0)
2158+ ;Receiver
2159+"RTN","HLCSTCP1",4,0)
2160+ ;connection is initiated by sender and listener accepts connection
2161+"RTN","HLCSTCP1",5,0)
2162+ ;and calls this routine
2163+"RTN","HLCSTCP1",6,0)
2164+ ;
2165+"RTN","HLCSTCP1",7,0)
2166+ N $ETRAP,$ESTACK S $ETRAP="D ERROR^HLCSTCP1"
2167+"RTN","HLCSTCP1",8,0)
2168+ N HLMIEN,HLASTMSG
2169+"RTN","HLCSTCP1",9,0)
2170+ D MON^HLCSTCP("Open")
2171+"RTN","HLCSTCP1",10,0)
2172+ K ^TMP("HLCSTCP",$J,0)
2173+"RTN","HLCSTCP1",11,0)
2174+ S HLMIEN=0,HLASTMSG=""
2175+"RTN","HLCSTCP1",12,0)
2176+ F D Q:$$STOP^HLCSTCP I 'HLMIEN D MON^HLCSTCP("Idle") H 3
2177+"RTN","HLCSTCP1",13,0)
2178+ . S HLMIEN=$$READ
2179+"RTN","HLCSTCP1",14,0)
2180+ . Q:'HLMIEN
2181+"RTN","HLCSTCP1",15,0)
2182+ . D PROCESS
2183+"RTN","HLCSTCP1",16,0)
2184+ Q
2185+"RTN","HLCSTCP1",17,0)
2186+ ;
2187+"RTN","HLCSTCP1",18,0)
2188+PROCESS ;check message and reply
2189+"RTN","HLCSTCP1",19,0)
2190+ ;HLDP=LL in 870, update monitor, received msg.
2191+"RTN","HLCSTCP1",20,0)
2192+ N HLTCP,HLTCPI,HLTCPO
2193+"RTN","HLCSTCP1",21,0)
2194+ S HLTCP="",HLTCPO=HLDP,HLTCPI=+HLMIEN
2195+"RTN","HLCSTCP1",22,0)
2196+ ;update monitor, msg. received
2197+"RTN","HLCSTCP1",23,0)
2198+ D LLCNT^HLCSTCP(HLDP,1)
2199+"RTN","HLCSTCP1",24,0)
2200+ D NEW^HLTP3(HLMIEN)
2201+"RTN","HLCSTCP1",25,0)
2202+ ;update monitor, msg. processed
2203+"RTN","HLCSTCP1",26,0)
2204+ D LLCNT^HLCSTCP(HLDP,2)
2205+"RTN","HLCSTCP1",27,0)
2206+ Q
2207+"RTN","HLCSTCP1",28,0)
2208+ ;
2209+"RTN","HLCSTCP1",29,0)
2210+READ() ;read 1 message, returns ien in 773^ien in 772 for message
2211+"RTN","HLCSTCP1",30,0)
2212+ D MON^HLCSTCP("Reading")
2213+"RTN","HLCSTCP1",31,0)
2214+ N HLDB,HLDT,HLDEND,HLACKWT,HLDSTRT,HLHDR,HLIND1,HLINE,HLMSG,HLRDOUT,HLRS,HLX,X
2215+"RTN","HLCSTCP1",32,0)
2216+ ;HLDSTRT=start char., HLDEND=end char., HLRS=record seperator
2217+"RTN","HLCSTCP1",33,0)
2218+ S HLDSTRT=$C(11),HLDEND=$C(28),HLRS=$C(13)
2219+"RTN","HLCSTCP1",34,0)
2220+ ;HLRDOUT=exit read loop, HLINE=line count, HLIND1=ien 773^ien 772
2221+"RTN","HLCSTCP1",35,0)
2222+ ;HLHDR=have a header, ^TMP(...)=excess from last read, HLACKWT=wait for ack
2223+"RTN","HLCSTCP1",36,0)
2224+ S (HLRDOUT,HLINE,HLIND1,HLHDR)=0,HLX=$G(^TMP("HLCSTCP",$J,0)),HLACKWT=HLDBACK
2225+"RTN","HLCSTCP1",37,0)
2226+ K ^TMP("HLCSTCP",$J,0)
2227+"RTN","HLCSTCP1",38,0)
2228+ F D RDBLK Q:HLRDOUT
2229+"RTN","HLCSTCP1",39,0)
2230+ ;save any excess for next time
2231+"RTN","HLCSTCP1",40,0)
2232+ S:$L(HLX) ^TMP("HLCSTCP",$J,0)=HLX
2233+"RTN","HLCSTCP1",41,0)
2234+ I +HLIND1,'$P(HLIND1,U,3) D DELMSG(HLIND1) S HLIND1=0
2235+"RTN","HLCSTCP1",42,0)
2236+ Q HLIND1
2237+"RTN","HLCSTCP1",43,0)
2238+ ;
2239+"RTN","HLCSTCP1",44,0)
2240+RDBLK S HLDB=HLDBSIZE-$L(HLX)
2241+"RTN","HLCSTCP1",45,0)
2242+ U IO D:$D ERROR R X#HLDB:HLDREAD ; MSC/JDA added check against $d
2243+"RTN","HLCSTCP1",46,0)
2244+ ; timedout or error, check ack timeout, clean up
2245+"RTN","HLCSTCP1",47,0)
2246+ I '$T,X="",HLX="" S HLACKWT=HLACKWT-HLDREAD D:HLACKWT<0&'HLHDR CLEAN Q
2247+"RTN","HLCSTCP1",48,0)
2248+ ;data stream: <sb>dddd<cr><eb><cr>
2249+"RTN","HLCSTCP1",49,0)
2250+ ;add incoming line to what wasn't processed in last read
2251+"RTN","HLCSTCP1",50,0)
2252+ S HLX=$G(HLX)_X
2253+"RTN","HLCSTCP1",51,0)
2254+ ; look for segment= <CR>
2255+"RTN","HLCSTCP1",52,0)
2256+ F Q:HLX'[HLRS D Q:HLRDOUT
2257+"RTN","HLCSTCP1",53,0)
2258+ . ; Get the first piece, save the rest of the line
2259+"RTN","HLCSTCP1",54,0)
2260+ . S HLINE=HLINE+1,HLMSG(HLINE,0)=$P(HLX,HLRS),HLX=$P(HLX,HLRS,2,999)
2261+"RTN","HLCSTCP1",55,0)
2262+ . ; check for start block, Quit if no ien
2263+"RTN","HLCSTCP1",56,0)
2264+ . I HLMSG(HLINE,0)[HLDSTRT!HLHDR D Q
2265+"RTN","HLCSTCP1",57,0)
2266+ .. D:HLMSG(HLINE,0)[HLDSTRT
2267+"RTN","HLCSTCP1",58,0)
2268+ ... S X=$L(HLMSG(HLINE,0),HLDSTRT)
2269+"RTN","HLCSTCP1",59,0)
2270+ ... S:X>2 HLMSG(HLINE,0)=HLDSTRT_$P(HLMSG(HLINE,0),HLDSTRT,X)
2271+"RTN","HLCSTCP1",60,0)
2272+ ... S HLMSG(HLINE,0)=$P(HLMSG(HLINE,0),HLDSTRT,2)
2273+"RTN","HLCSTCP1",61,0)
2274+ ... D RESET:(HLINE>1)
2275+"RTN","HLCSTCP1",62,0)
2276+ .. ;ping message
2277+"RTN","HLCSTCP1",63,0)
2278+ .. I $E(HLMSG(1,0),1,9)="MSH^PING^" D PING Q
2279+"RTN","HLCSTCP1",64,0)
2280+ .. ; get next ien to store
2281+"RTN","HLCSTCP1",65,0)
2282+ .. D MIEN
2283+"RTN","HLCSTCP1",66,0)
2284+ .. K HLMSG
2285+"RTN","HLCSTCP1",67,0)
2286+ .. S (HLINE,HLHDR)=0
2287+"RTN","HLCSTCP1",68,0)
2288+ . ; check for end block; HLMSG(HLINE) = <eb><cr>
2289+"RTN","HLCSTCP1",69,0)
2290+ . I HLMSG(HLINE,0)[HLDEND D
2291+"RTN","HLCSTCP1",70,0)
2292+ .. ;no msg. ien
2293+"RTN","HLCSTCP1",71,0)
2294+ .. Q:'HLIND1
2295+"RTN","HLCSTCP1",72,0)
2296+ .. ; Kill just the last line
2297+"RTN","HLCSTCP1",73,0)
2298+ .. K HLMSG(HLINE,0) S HLINE=HLINE-1
2299+"RTN","HLCSTCP1",74,0)
2300+ .. ; move into 772
2301+"RTN","HLCSTCP1",75,0)
2302+ .. D SAVE(.HLMSG,"^HL(772,"_+$P(HLIND1,U,2)_",""IN"")")
2303+"RTN","HLCSTCP1",76,0)
2304+ .. ;mark that end block has been received
2305+"RTN","HLCSTCP1",77,0)
2306+ .. ;HLIND1=ien in 773^ien in 772^1 if end block was received
2307+"RTN","HLCSTCP1",78,0)
2308+ .. S $P(HLIND1,U,3)=1
2309+"RTN","HLCSTCP1",79,0)
2310+ .. ;reset variables for next message
2311+"RTN","HLCSTCP1",80,0)
2312+ .. D CLEAN
2313+"RTN","HLCSTCP1",81,0)
2314+ . ;add blank line for carriage return
2315+"RTN","HLCSTCP1",82,0)
2316+ . I HLINE'=0,HLMSG(HLINE,0)]"" S HLINE=HLINE+1,HLMSG(HLINE,0)=""
2317+"RTN","HLCSTCP1",83,0)
2318+ Q:HLRDOUT
2319+"RTN","HLCSTCP1",84,0)
2320+ ;If the line is long and no <CR> move it into the array.
2321+"RTN","HLCSTCP1",85,0)
2322+ I ($L(HLX)=HLDBSIZE),(HLX'[HLRS),(HLX'[HLDEND),(HLX'[HLDSTRT) D Q
2323+"RTN","HLCSTCP1",86,0)
2324+ . S HLINE=HLINE+1,HLMSG(HLINE,0)=HLX,HLX=""
2325+"RTN","HLCSTCP1",87,0)
2326+ ;have start block but no record seperator
2327+"RTN","HLCSTCP1",88,0)
2328+ I HLX[HLDSTRT D Q
2329+"RTN","HLCSTCP1",89,0)
2330+ . ;check for more than 1 start block
2331+"RTN","HLCSTCP1",90,0)
2332+ . S X=$L(HLX,HLDSTRT) S:X>2 HLX=HLDSTRT_$P(HLX,HLDSTRT,X)
2333+"RTN","HLCSTCP1",91,0)
2334+ . S:$L($P(HLX,HLDSTRT,2))>8 HLINE=HLINE+1,HLMSG(HLINE,0)=$P(HLX,HLDSTRT,2),HLX="",HLHDR=1
2335+"RTN","HLCSTCP1",92,0)
2336+ . D RESET:(HLHDR&(HLINE>1))
2337+"RTN","HLCSTCP1",93,0)
2338+ ;if no ien, then we don't have start block, reset
2339+"RTN","HLCSTCP1",94,0)
2340+ I 'HLIND1 D CLEAN Q
2341+"RTN","HLCSTCP1",95,0)
2342+ ; big message-merge from local to global every 100 lines
2343+"RTN","HLCSTCP1",96,0)
2344+ I (HLINE-$O(HLMSG(0)))>100 D
2345+"RTN","HLCSTCP1",97,0)
2346+ . M ^HL(772,+$P(HLIND1,U,2),"IN")=HLMSG
2347+"RTN","HLCSTCP1",98,0)
2348+ . ; reset working array
2349+"RTN","HLCSTCP1",99,0)
2350+ . K HLMSG
2351+"RTN","HLCSTCP1",100,0)
2352+ Q
2353+"RTN","HLCSTCP1",101,0)
2354+ ;
2355+"RTN","HLCSTCP1",102,0)
2356+SAVE(SRC,DEST) ;save into global & set top node
2357+"RTN","HLCSTCP1",103,0)
2358+ ;SRC=source array (passed by ref.), DEST=destination global
2359+"RTN","HLCSTCP1",104,0)
2360+ M @DEST=SRC
2361+"RTN","HLCSTCP1",105,0)
2362+ S @DEST@(0)="^^"_HLINE_"^"_HLINE_"^"_DT_"^"
2363+"RTN","HLCSTCP1",106,0)
2364+ Q
2365+"RTN","HLCSTCP1",107,0)
2366+ ;
2367+"RTN","HLCSTCP1",108,0)
2368+DELMSG(HLMAMT) ;delete message from Message Administration/Message Text files.
2369+"RTN","HLCSTCP1",109,0)
2370+ N DIK,DA
2371+"RTN","HLCSTCP1",110,0)
2372+ S DA=+HLMAMT,DIK="^HLMA("
2373+"RTN","HLCSTCP1",111,0)
2374+ D ^DIK
2375+"RTN","HLCSTCP1",112,0)
2376+ S DA=$P(HLMAMT,U,2),DIK="^HL(772,"
2377+"RTN","HLCSTCP1",113,0)
2378+ D ^DIK
2379+"RTN","HLCSTCP1",114,0)
2380+ Q
2381+"RTN","HLCSTCP1",115,0)
2382+MIEN ; sets HLIND1=ien in 773^ien in 772 for message
2383+"RTN","HLCSTCP1",116,0)
2384+ N HLMID,X
2385+"RTN","HLCSTCP1",117,0)
2386+ I HLIND1 D
2387+"RTN","HLCSTCP1",118,0)
2388+ . S:'$G(^HLMA(+HLIND1,0)) HLIND1=0
2389+"RTN","HLCSTCP1",119,0)
2390+ . S:'$G(^HL(772,+$P(HLIND1,U,2),0)) HLIND1=0
2391+"RTN","HLCSTCP1",120,0)
2392+ ;msg. id is 10th of MSH & 11th for BSH or FSH
2393+"RTN","HLCSTCP1",121,0)
2394+ S X=10+($E(HLMSG(1,0),1,3)'="MSH"),HLMID=$$PMSH(.HLMSG,X)
2395+"RTN","HLCSTCP1",122,0)
2396+ ;if HLIND1 is set, kill old message, use HLIND1 for new
2397+"RTN","HLCSTCP1",123,0)
2398+ ;message, it means we never got end block for 1st msg.
2399+"RTN","HLCSTCP1",124,0)
2400+ I HLIND1 D Q
2401+"RTN","HLCSTCP1",125,0)
2402+ . ;get pointer to 772, kill header
2403+"RTN","HLCSTCP1",126,0)
2404+ . K ^HLMA(+HLIND1,"MSH")
2405+"RTN","HLCSTCP1",127,0)
2406+ . I $D(^HL(772,+$P(HLIND1,U,2),"IN")) K ^("IN")
2407+"RTN","HLCSTCP1",128,0)
2408+ . S X=$$MAID^HLTF(+HLIND1,HLMID)
2409+"RTN","HLCSTCP1",129,0)
2410+ . D SAVE(.HLMSG,"^HLMA("_+HLIND1_",""MSH"")")
2411+"RTN","HLCSTCP1",130,0)
2412+ . S:$P(HLIND1,U,3) $P(HLIND1,U,3)=""
2413+"RTN","HLCSTCP1",131,0)
2414+ D TCP^HLTF(.HLMID,.X,.HLDT)
2415+"RTN","HLCSTCP1",132,0)
2416+ I 'X D Q
2417+"RTN","HLCSTCP1",133,0)
2418+ . ;error - record and reset array
2419+"RTN","HLCSTCP1",134,0)
2420+ . ;killing HLLSTN will allow MON^HLCSTCP to work with multi-server
2421+"RTN","HLCSTCP1",135,0)
2422+ . D CLEAN K HLLSTN
2423+"RTN","HLCSTCP1",136,0)
2424+ . ;error 100=LLP Could not Enqueue the Message, reset array
2425+"RTN","HLCSTCP1",137,0)
2426+ . D MONITOR^HLCSDR2(100,19,HLDP),MON^HLCSTCP("ERROR") H 30
2427+"RTN","HLCSTCP1",138,0)
2428+ ;HLIND1=ien in 773^ien in 772
2429+"RTN","HLCSTCP1",139,0)
2430+ S HLIND1=X_U_+$G(^HLMA(X,0))
2431+"RTN","HLCSTCP1",140,0)
2432+ ;save MSH into 773
2433+"RTN","HLCSTCP1",141,0)
2434+ D SAVE(.HLMSG,"^HLMA("_+HLIND1_",""MSH"")")
2435+"RTN","HLCSTCP1",142,0)
2436+ Q
2437+"RTN","HLCSTCP1",143,0)
2438+ ;
2439+"RTN","HLCSTCP1",144,0)
2440+PMSH(MSH,P) ;get piece P from MSH array (passed by ref.)
2441+"RTN","HLCSTCP1",145,0)
2442+ N FS,I,L,L1,L2,X,Y
2443+"RTN","HLCSTCP1",146,0)
2444+ S FS=$E(MSH(1,0),4),(L2,Y)=0,X=""
2445+"RTN","HLCSTCP1",147,0)
2446+ F I=1:1 S L1=$L($G(MSH(I,0)),FS),L=L1+Y-1 D Q:$L(X)!'$D(MSH(I,0))
2447+"RTN","HLCSTCP1",148,0)
2448+ . S:L1=1 L=L+1
2449+"RTN","HLCSTCP1",149,0)
2450+ . S:P'>L X=$P($G(MSH(I-1,0)),FS,P-L2)_$P($G(MSH(I,0)),FS,(P-Y))
2451+"RTN","HLCSTCP1",150,0)
2452+ . S L2=Y,Y=L
2453+"RTN","HLCSTCP1",151,0)
2454+ Q X
2455+"RTN","HLCSTCP1",152,0)
2456+ ;
2457+"RTN","HLCSTCP1",153,0)
2458+PING ;process PING message
2459+"RTN","HLCSTCP1",154,0)
2460+ S X=HLMSG(1,0)
2461+"RTN","HLCSTCP1",155,0)
2462+ I X[HLDEND U IO W X,!
2463+"RTN","HLCSTCP1",156,0)
2464+CLEAN ;reset var. for next message
2465+"RTN","HLCSTCP1",157,0)
2466+ K HLMSG
2467+"RTN","HLCSTCP1",158,0)
2468+ S HLINE=0,HLRDOUT=1
2469+"RTN","HLCSTCP1",159,0)
2470+ Q
2471+"RTN","HLCSTCP1",160,0)
2472+ ;
2473+"RTN","HLCSTCP1",161,0)
2474+ERROR ; Error trap for disconnect error and return back to the read loop.
2475+"RTN","HLCSTCP1",162,0)
2476+ S $ETRAP="D UNWIND^%ZTER"
2477+"RTN","HLCSTCP1",163,0)
2478+ I $$EC^%ZOSV["READ"!($$EC^%ZOSV["NOTOPEN")!($$EC^%ZOSV["DEVNOTOPN") D UNWIND^%ZTER Q
2479+"RTN","HLCSTCP1",164,0)
2480+ I $$EC^%ZOSV["WRITE" D CC("Wr-err") D UNWIND^%ZTER Q
2481+"RTN","HLCSTCP1",165,0)
2482+ S HLCSOUT=1 D ^%ZTER,CC("Error")
2483+"RTN","HLCSTCP1",166,0)
2484+ D UNWIND^%ZTER
2485+"RTN","HLCSTCP1",167,0)
2486+ Q
2487+"RTN","HLCSTCP1",168,0)
2488+ ;
2489+"RTN","HLCSTCP1",169,0)
2490+CC(X) ;cleanup and close
2491+"RTN","HLCSTCP1",170,0)
2492+ D MON^HLCSTCP(X)
2493+"RTN","HLCSTCP1",171,0)
2494+ H 2
2495+"RTN","HLCSTCP1",172,0)
2496+ Q
2497+"RTN","HLCSTCP1",173,0)
2498+RESET ;reset info as a result of no end block
2499+"RTN","HLCSTCP1",174,0)
2500+ N %
2501+"RTN","HLCSTCP1",175,0)
2502+ S HLMSG(1,0)=HLMSG(HLINE,0)
2503+"RTN","HLCSTCP1",176,0)
2504+ F %=2:1:HLINE K HLMSG(%,0)
2505+"RTN","HLCSTCP1",177,0)
2506+ S HLINE=1
2507+"RTN","HLCSTCP1",178,0)
2508+ Q
2509+"RTN","MAGDMEDL")
2510+0^36^B3132920
2511+"RTN","MAGDMEDL",1,0)
2512+MAGDMEDL ;WOIFO/LB,MSC/JDA - Routine to look up entries in the Medicine files ;27APR2009
2513+"RTN","MAGDMEDL",2,0)
2514+ ;;3.0;IMAGING;**MSC**;Mar 01, 2002
2515+"RTN","MAGDMEDL",3,0)
2516+ ;; +---------------------------------------------------------------+
2517+"RTN","MAGDMEDL",4,0)
2518+ ;; | Property of the US Government. |
2519+"RTN","MAGDMEDL",5,0)
2520+ ;; | No permission to copy or redistribute this software is given. |
2521+"RTN","MAGDMEDL",6,0)
2522+ ;; | Use of unreleased versions of this software requires the user |
2523+"RTN","MAGDMEDL",7,0)
2524+ ;; | to execute a written test agreement with the VistA Imaging |
2525+"RTN","MAGDMEDL",8,0)
2526+ ;; | Development Office of the Department of Veterans Affairs, |
2527+"RTN","MAGDMEDL",9,0)
2528+ ;; | telephone (301) 734-0100. |
2529+"RTN","MAGDMEDL",10,0)
2530+ ;; | |
2531+"RTN","MAGDMEDL",11,0)
2532+ ;; | The Food and Drug Administration classifies this software as |
2533+"RTN","MAGDMEDL",12,0)
2534+ ;; | a medical device. As such, it may not be changed in any way. |
2535+"RTN","MAGDMEDL",13,0)
2536+ ;; | Modifications to this software may result in an adulterated |
2537+"RTN","MAGDMEDL",14,0)
2538+ ;; | medical device under 21CFR820, the use of which is considered |
2539+"RTN","MAGDMEDL",15,0)
2540+ ;; | to be a violation of US Federal Statutes. |
2541+"RTN","MAGDMEDL",16,0)
2542+ ;; +---------------------------------------------------------------+
2543+"RTN","MAGDMEDL",17,0)
2544+ ;;
2545+"RTN","MAGDMEDL",18,0)
2546+ Q
2547+"RTN","MAGDMEDL",19,0)
2548+SELECT(ITEM,ARRAY) ;
2549+"RTN","MAGDMEDL",20,0)
2550+ ;
2551+"RTN","MAGDMEDL",21,0)
2552+SELECT2
2553+"RTN","MAGDMEDL",22,0)
2554+ N CNT,DIR,DIROUT,DIRUT,ENTRY
2555+"RTN","MAGDMEDL",23,0)
2556+ S CNT=+ARRAY
2557+"RTN","MAGDMEDL",24,0)
2558+ I 'CNT Q 0
2559+"RTN","MAGDMEDL",25,0)
2560+ S DIR(0)="NO^1:"_CNT,DIR("A")="Select a Medicine Procedure"
2561+"RTN","MAGDMEDL",26,0)
2562+ S DIR("T")=600 D ^DIR
2563+"RTN","MAGDMEDL",27,0)
2564+ I $D(DIRUT)!($D(DIROUT)) Q 0
2565+"RTN","MAGDMEDL",28,0)
2566+ S ENTRY=+Y
2567+"RTN","MAGDMEDL",29,0)
2568+ I '$D(ARRAY(ENTRY)) D G SELECT2
2569+"RTN","MAGDMEDL",30,0)
2570+ . W !,"Please select an entry or use '^' to exit"
2571+"RTN","MAGDMEDL",31,0)
2572+ W !,"You have selected ",$P(ARRAY(ENTRY),"^"),"."
2573+"RTN","MAGDMEDL",32,0)
2574+ Q $P(ARRAY(ENTRY),"^",2)
2575+"RTN","MAGDMEDL",33,0)
2576+ ;
2577+"RTN","MAGDMEDL",34,0)
2578+LOOP(ARRAY,MAGPAT,SUB,CASEDT) ;
2579+"RTN","MAGDMEDL",35,0)
2580+ ; MAGPAT = patient's dfn
2581+"RTN","MAGDMEDL",36,0)
2582+ ; SUB = Medicine specialty
2583+"RTN","MAGDMEDL",37,0)
2584+ ; CASEDT = case date
2585+"RTN","MAGDMEDL",38,0)
2586+ ; array(0)= 1 or 0 ^ # entries found ^ message text
2587+"RTN","MAGDMEDL",39,0)
2588+ ; array(#)= formatted out dislay without delimeters
2589+"RTN","MAGDMEDL",40,0)
2590+ ; array(#,1) = internal stored values
2591+"RTN","MAGDMEDL",41,0)
2592+ ; Variable MAGDIMG
2593+"RTN","MAGDMEDL",42,0)
2594+ S ARRAY(0)="0^^No entries found"
2595+"RTN","MAGDMEDL",43,0)
2596+ Q:'MAGPAT
2597+"RTN","MAGDMEDL",44,0)
2598+ Q:'$D(MAGMC)#10 ;Array should be available.
2599+"RTN","MAGDMEDL",45,0)
2600+ N BEG,CDT,CNT,DATA,DIOCM,EN,END,IMG,IMAGEPTR,MAGDIMG,PATIENT,PATNME,PRCNM,SSN,THEDT,X1,X2,X
2601+"RTN","MAGDMEDL",46,0)
2602+ N IEN,II,IOUT,MAGMC,MEDFILE
2603+"RTN","MAGDMEDL",47,0)
2604+ Q:'$$FIND1^DIC(2,,"A",MAGPAT,"","")
2605+"RTN","MAGDMEDL",48,0)
2606+ S PATNME=$P(^DPT(MAGPAT,0),"^"),SSN=$P(^(0),"^",9)
2607+"RTN","MAGDMEDL",49,0)
2608+ S PATIENT=PATNME_" "_SSN
2609+"RTN","MAGDMEDL",50,0)
2610+ I 'CASEDT S CASEDT=DT
2611+"RTN","MAGDMEDL",51,0)
2612+ S X1=CASEDT,X2=-3 D C^%DTC S BEG=X
2613+"RTN","MAGDMEDL",52,0)
2614+ S END=CASEDT+.9999
2615+"RTN","MAGDMEDL",53,0)
2616+ S CNT=0,CDT=BEG-.001
2617+"RTN","MAGDMEDL",54,0)
2618+ F S CDT=$O(MAGMC(MAGPAT,SUB,CDT)) Q:'CDT!(CDT>END) D
2619+"RTN","MAGDMEDL",55,0)
2620+ . S EN=0 F S EN=$O(MAGMC(MAGPAT,SUB,CDT,EN)) Q:'EN D
2621+"RTN","MAGDMEDL",56,0)
2622+ . . S DATA=MAGMC(MAGPAT,SUB,CDT,EN)
2623+"RTN","MAGDMEDL",57,0)
2624+ . . S PRCNM=$P(DATA,"^",2),PRC=SUB
2625+"RTN","MAGDMEDL",58,0)
2626+ . . S THEDT=$P(DATA,"^"),IEN=$P(DATA,"^",5)
2627+"RTN","MAGDMEDL",59,0)
2628+ . . I $D(MAGMC(MAGPAT,SUB,CDT,EN,2005)) S (IOUT,II)=0 D
2629+"RTN","MAGDMEDL",60,0)
2630+ . . . F S II=$O(MAGMC(MAGPAT,SUB,CDT,EN,2005,II)) Q:'II!IOUT D
2631+"RTN","MAGDMEDL",61,0)
2632+ . . . . S IMAGEPTR=MAGMC(MAGPAT,SUB,CDT,EN,2005,II)
2633+"RTN","MAGDMEDL",62,0)
2634+ . . . . I '$D(^MAG(2005,IMAGEPTR)) S IMAGEPTR="" Q
2635+"RTN","MAGDMEDL",63,0)
2636+ . . . . I '$D(^MAG(2005,IMAGEPTR,"PACS")) S IMAGEPTR="",IOUT=1
2637+"RTN","MAGDMEDL",64,0)
2638+ . . S MEDFILE=$P(DATA,"^",4),MEDFILE=$P(MEDFILE,"MCAR(",2)
2639+"RTN","MAGDMEDL",65,0)
2640+ . . S DICOM="" D DICOMID^MAGDMEDI(.DICOM,MEDFILE,IEN,PRC,MAGPAT)
2641+"RTN","MAGDMEDL",66,0)
2642+ . . I DICOM'="" D
2643+"RTN","MAGDMEDL",67,0)
2644+ . . . S DICOM=$P(DICOM,":",2)
2645+"RTN","MAGDMEDL",68,0)
2646+ . . . S CNT=CNT+1
2647+"RTN","MAGDMEDL",69,0)
2648+ . . . S ARRAY(CNT)=DICOM_" "_PRCNM_", "_THEDT_" "_PATIENT
2649+"RTN","MAGDMEDL",70,0)
2650+ . . . S ARRAY(CNT,1)=DICOM_"^"_PATNME_"^"_SSN_"^"_EN_"^"_PRCNM_"^"_PRC_"^"_$G(IMAGEPTR)_"^"_MEDFILE
2651+"RTN","MAGDMEDL",71,0)
2652+ I CNT S ARRAY(0)="1^"_CNT_"^Medicine file entries for "_PATIENT
2653+"RTN","MAGDMEDL",72,0)
2654+ Q
2655+"RTN","MAGDMEDL",73,0)
2656+DISPLAY(ARRAY) ;
2657+"RTN","MAGDMEDL",74,0)
2658+ ; Call routine needs to pass array in the following sequence
2659+"RTN","MAGDMEDL",75,0)
2660+ ; ARRAY(0)= 1 or 0 ^ #entries ^ message
2661+"RTN","MAGDMEDL",76,0)
2662+ ; ARRAY(#)= Formatted output to be displayed.
2663+"RTN","MAGDMEDL",77,0)
2664+ ; Will set the RES variable for selected entry.
2665+"RTN","MAGDMEDL",78,0)
2666+ I '$D(ARRAY(0)) Q 0
2667+"RTN","MAGDMEDL",79,0)
2668+ ; If only one entry return the subscript variable.
2669+"RTN","MAGDMEDL",80,0)
2670+ I $P(ARRAY(0),"^",2)=1 Q 1
2671+"RTN","MAGDMEDL",81,0)
2672+ I $P(ARRAY(0),"^")'=1 Q 0
2673+"RTN","MAGDMEDL",82,0)
2674+ N ENTRY,ITEM,ITEMS,MSG,OUT,OUTPUT,RES
2675+"RTN","MAGDMEDL",83,0)
2676+ S RES=0,MSG=$P(ARRAY(0),"^",3)
2677+"RTN","MAGDMEDL",84,0)
2678+ S IOF="#,$C(27,91,72,27,91,74,8,8,8,8)",IO=0,IOSL=24,POP=0
2679+"RTN","MAGDMEDL",85,0)
2680+ D HEAD
2681+"RTN","MAGDMEDL",86,0)
2682+ S (ENTRY,OUT)=0,ITEMS=$P(ARRAY(0),"^",2)
2683+"RTN","MAGDMEDL",87,0)
2684+ F S ENTRY=$O(ARRAY(ENTRY)) Q:'ENTRY!OUT D
2685+"RTN","MAGDMEDL",88,0)
2686+ . S OUTPUT=$G(ARRAY(ENTRY))
2687+"RTN","MAGDMEDL",89,0)
2688+ . D:$Y+3>IOSL HEAD D LINE
2689+"RTN","MAGDMEDL",90,0)
2690+ . D:$Y+3>IOSL ASKQ
2691+"RTN","MAGDMEDL",91,0)
2692+ I 'OUT D ASKQ S RES=ITEM
2693+"RTN","MAGDMEDL",92,0)
2694+ Q RES
2695+"RTN","MAGDMEDL",93,0)
2696+HEAD ;
2697+"RTN","MAGDMEDL",94,0)
2698+ W:$Y+3>IOSL @IOF W !,MSG
2699+"RTN","MAGDMEDL",95,0)
2700+ Q
2701+"RTN","MAGDMEDL",96,0)
2702+LINE ;
2703+"RTN","MAGDMEDL",97,0)
2704+ W !,ENTRY,".) "_OUTPUT
2705+"RTN","MAGDMEDL",98,0)
2706+ Q
2707+"RTN","MAGDMEDL",99,0)
2708+ASKQ ;
2709+"RTN","MAGDMEDL",100,0)
2710+ N X,Y,DIR
2711+"RTN","MAGDMEDL",101,0)
2712+ S DIR(0)="L^1:"_$S('ENTRY:ITEMS,1:ENTRY)
2713+"RTN","MAGDMEDL",102,0)
2714+ S DIR("T")=600,DIR("A")="Select an entry: " D ^DIR
2715+"RTN","MAGDMEDL",103,0)
2716+ S ITEM=+Y
2717+"RTN","MAGDMEDL",104,0)
2718+ Q:$D(DIRUT)!($D(DIROUT))
2719+"RTN","MAGDMEDL",105,0)
2720+ Q:'ITEM
2721+"RTN","MAGDMEDL",106,0)
2722+ I '$D(ARRAY(ITEM)) W !,"Please select an entry or '^' to exit" G ASKQ
2723+"RTN","MAGDMEDL",107,0)
2724+ W !,"You have selected ",$P($G(ARRAY(ITEM)),"^")
2725+"RTN","MAGDMEDL",108,0)
2726+ S OUT=1
2727+"RTN","MAGDMEDL",109,0)
2728+ Q
2729+"RTN","MAGDMEDL",110,0)
2730+ASKMORE() ;
2731+"RTN","MAGDMEDL",111,0)
2732+ N DIR,DATE,X,XX,Y
2733+"RTN","MAGDMEDL",112,0)
2734+ Q:'$D(MAGPAT)
2735+"RTN","MAGDMEDL",113,0)
2736+ Q:'$D(SUB)
2737+"RTN","MAGDMEDL",114,0)
2738+ S DIR(0)="Y",DIR("B")="NO"
2739+"RTN","MAGDMEDL",115,0)
2740+ S DIR("A")="Search further"
2741+"RTN","MAGDMEDL",116,0)
2742+ D ^DIR K DIR
2743+"RTN","MAGDMEDL",117,0)
2744+ I 'Y Q 0
2745+"RTN","MAGDMEDL",118,0)
2746+ W !,"Search will include 3 days prior to the day specified."
2747+"RTN","MAGDMEDL",119,0)
2748+ S DIR(0)="D^::EXP" D ^DIR
2749+"RTN","MAGDMEDL",120,0)
2750+ ; Y2K compliance all calls to %DT must have either past or future date
2751+"RTN","MAGDMEDL",121,0)
2752+ I 'Y Q 0
2753+"RTN","MAGDMEDL",122,0)
2754+ S DATE=Y
2755+"RTN","MAGDMEDL",123,0)
2756+ D LOOP(.XX,MAGPAT,SUB,DATE)
2757+"RTN","MAGDMEDL",124,0)
2758+ I $D(XX(0)),$P(XX(0),"^")=0 D Q 0
2759+"RTN","MAGDMEDL",125,0)
2760+ . W "No entries found."
2761+"RTN","MAGDMEDL",126,0)
2762+ Q 1
2763+"RTN","MSCGUX53")
2764+0^^B360592
2765+"RTN","MSCGUX53",1,0)
2766+MSCGUX53 ;MSC/JDS - ENVIRONMENT CHECK ; ; 29 Apr 2009 1:47 PM
2767+"RTN","MSCGUX53",2,0)
2768+ ;;**MSC**;
2769+"RTN","MSCGUX53",3,0)
2770+ I $G(^%ZOSF("OS"))'["GT.M" Q ;Not GTM
2771+"RTN","MSCGUX53",4,0)
2772+ I $P($ZV,"V",2)<5.3 D MESS^XPDUL("GT.M version must be 5.3 or Greater") S XPDABORT=2
2773+"RTN","MSCGUX53",5,0)
2774+
2775+"RTN","MSCGUX53",6,0)
2776+
2777+"RTN","MSCGUX53",7,0)
2778+
2779+"RTN","MSCXUS3A")
2780+0^31^B8005003
2781+"RTN","MSCXUS3A",1,0)
2782+MSCXUS3A ;SF-ISC/STAFF MSC/JDS - CHANGE UCI'S ;30APR2009
2783+"RTN","MSCXUS3A",2,0)
2784+ ;;8.0;KERNEL;**13,282,MSC**;Jul 10, 1995
2785+"RTN","MSCXUS3A",3,0)
2786+ Q
2787+"RTN","MSCXUS3A",4,0)
2788+ ;PICK A UCI TO SWITCH TO
2789+"RTN","MSCXUS3A",5,0)
2790+SWITCH ;Allow users that have the UCI fIeld In there NP fIle to swItch UCI's.
2791+"RTN","MSCXUS3A",6,0)
2792+ W !!,"Switch UCI's optIon.",!
2793+"RTN","MSCXUS3A",7,0)
2794+ ;I $$PROGMODE^%ZOSV() W !,$C(7),"No switching UCI's In Programmer Mode." Q
2795+"RTN","MSCXUS3A",8,0)
2796+ N DIR,X,Y,PGM,%UCI,DEF,L,USERNAME
2797+"RTN","MSCXUS3A",9,0)
2798+ S DEF="ZU" ;DEF is default routine to swItch to.
2799+"RTN","MSCXUS3A",10,0)
2800+UCI Q:'$G(DUZ) S USERNAME=$P($G(^VA(200,DUZ,0)),U) Q:USERNAME=""
2801+"RTN","MSCXUS3A",11,0)
2802+ S DIR(0)="S^"_$$NSP(USERNAME) I DIR(0)'[";" W "YOU AREN'T A USER IN ANY OTHER NAMESPACE" Q
2803+"RTN","MSCXUS3A",12,0)
2804+ S DIR("A")="Select NAMESPACE"
2805+"RTN","MSCXUS3A",13,0)
2806+ D ^DIR K DIR I $D(DUOUT)!$D(DTOUT)!(U[X) Q
2807+"RTN","MSCXUS3A",14,0)
2808+SAME I X="" Q ;Didn't select anythIng.
2809+"RTN","MSCXUS3A",15,0)
2810+ ;D PM
2811+"RTN","MSCXUS3A",16,0)
2812+ S (X,%UCI)=Y(0) X ^%ZOSF("UCICHECK") I 0[Y G BAD
2813+"RTN","MSCXUS3A",17,0)
2814+ K XQY0 S Y=$O(^[%UCI]VA(200,"B",USERNAME,0))
2815+"RTN","MSCXUS3A",18,0)
2816+ I Y S DIR=$P($G(^[%UCI]VA(200,Y,201)),U)
2817+"RTN","MSCXUS3A",19,0)
2818+ I DIR,$P($G(^[%UCI]DIC(19,DIR,0)),U,4)="M" S DUZ=Y,XQY=DIR,(DEF,PGM)="%MSCXUCI" G NXT
2819+"RTN","MSCXUS3A",20,0)
2820+BAD W !,"UCI not found!" D SHOW G UCI
2821+"RTN","MSCXUS3A",21,0)
2822+ ;
2823+"RTN","MSCXUS3A",22,0)
2824+NXT ;Here we go.
2825+"RTN","MSCXUS3A",23,0)
2826+ D C^XUSCLEAN K ^XUTL("XQ",$J),^XUTL($J),^TMP($J),^UTILITY($J)
2827+"RTN","MSCXUS3A",24,0)
2828+ K DA G GO^%MSCXUCI
2829+"RTN","MSCXUS3A",25,0)
2830+ ;
2831+"RTN","MSCXUS3A",26,0)
2832+ ;
2833+"RTN","MSCXUS3A",27,0)
2834+SHOW W ! S I=0,UC="",X=$S($D(^VA(200,DUZ,201)):+^(201),1:0)
2835+"RTN","MSCXUS3A",28,0)
2836+ W !,"Enter ^ to return to your current menu, or select from:"
2837+"RTN","MSCXUS3A",29,0)
2838+ F I=0:0 S I=$O(^VA(200,DUZ,.2,I)) Q:I'>0 D
2839+"RTN","MSCXUS3A",30,0)
2840+ . W !,?5 S UC=$G(^VA(200,DUZ,.2,I,0)),X=$P(UC,U,1),UC=$P(UC,U,2,99)
2841+"RTN","MSCXUS3A",31,0)
2842+ . I UC'[":" W I
2843+"RTN","MSCXUS3A",32,0)
2844+ . D PM W ?10,X X ^%ZOSF("UCICHECK") I 0[Y W " -- Not currently a valId UCI!",$C(7) Q
2845+"RTN","MSCXUS3A",33,0)
2846+ . W:UC]"" ":"_UC
2847+"RTN","MSCXUS3A",34,0)
2848+ . Q
2849+"RTN","MSCXUS3A",35,0)
2850+ Q
2851+"RTN","MSCXUS3A",36,0)
2852+ ;
2853+"RTN","MSCXUS3A",37,0)
2854+PM I X="PROD"!(X="MGR") S X=^%ZOSF(X)
2855+"RTN","MSCXUS3A",38,0)
2856+ Q
2857+"RTN","MSCXUS3A",39,0)
2858+ ;
2859+"RTN","MSCXUS3A",40,0)
2860+ ;
2861+"RTN","MSCXUS3A",41,0)
2862+ ;
2863+"RTN","MSCXUS3A",42,0)
2864+NSP(USERNAME) ;LIST OTHER NAMESPACES WHERE THIS USER IS
2865+"RTN","MSCXUS3A",43,0)
2866+ N X,L,I,Y
2867+"RTN","MSCXUS3A",44,0)
2868+ X ^%ZOSF("UCI") S Y=$P(Y,",") I ^%ZOSF("OS")["GT.M" G GTMNSP
2869+"RTN","MSCXUS3A",45,0)
2870+ f I=1:1:$zu(90,0) s L($zu(90,2,0,I))="" ;***CACHE-SPECIFIC FROM %NSP
2871+"RTN","MSCXUS3A",46,0)
2872+ S (I,L,X)="" F S I=$O(L(I)) Q:I="" I I'=Y D ;NOT THE CURRENT ONE
2873+"RTN","MSCXUS3A",47,0)
2874+ .N DUZ S DUZ=$O(^[I]VA(200,"B",USERNAME,0)) Q:'DUZ
2875+"RTN","MSCXUS3A",48,0)
2876+ .I $P($G(^[I]VA(200,DUZ,0)),U,3)=""!'$G(^(201)) Q ;THEY MUST HAVE ACCESS CODE AND PRIMARY MENU OPTION OVER THERE
2877+"RTN","MSCXUS3A",49,0)
2878+ .S L=L+1,X=X_L_":"_I_";"
2879+"RTN","MSCXUS3A",50,0)
2880+ Q X
2881+"RTN","MSCXUS3A",51,0)
2882+GTMNSP ;
2883+"RTN","MSCXUS3A",52,0)
2884+ N CURRENT S CURRENT=Y
2885+"RTN","MSCXUS3A",53,0)
2886+ D LIST^ZCD()
2887+"RTN","MSCXUS3A",54,0)
2888+ S (I,L,X)="" F S I=$O(Y(I)) Q:'I S A=Y(I) I A'=CURRENT D ;NOT THE CURRENT ONE
2889+"RTN","MSCXUS3A",55,0)
2890+ .S A=$P($ZG,"/"_$$CURRENT^ZCD_"/")_"/"_A_"/"_$P($ZG,"/"_$$CURRENT^ZCD_"/",2)
2891+"RTN","MSCXUS3A",56,0)
2892+ .N DUZ S DUZ=$O(^[A]VA(200,"B",USERNAME,0)) Q:'DUZ
2893+"RTN","MSCXUS3A",57,0)
2894+ .I $P($G(^[A]VA(200,DUZ,0)),U,3)=""!'$G(^(201)) Q ;THEY MUST HAVE ACCESS CODE AND PRIMARY MENU OPTION OVER THERE
2895+"RTN","MSCXUS3A",58,0)
2896+ .S L=L+1,X=X_L_":"_A_";"
2897+"RTN","MSCXUS3A",59,0)
2898+ Q X
2899+"RTN","MSCZJOB")
2900+0^1^B11312416
2901+"RTN","MSCZJOB",1,0)
2902+MSCZJOB ;GFT,JDS/MSC;1 MAY 2009
2903+"RTN","MSCZJOB",2,0)
2904+ ;;8.0;KERNEL;**MSC**
2905+"RTN","MSCZJOB",3,0)
2906+ W !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2907+"RTN","MSCZJOB",4,0)
2908+ N MSC
2909+"RTN","MSCZJOB",5,0)
2910+DDS ;
2911+"RTN","MSCZJOB",6,0)
2912+ S DDSFILE=3.081,DR="[MSCZJOBEXAM]",DDSPARM="S"
2913+"RTN","MSCZJOB",7,0)
2914+ D ^DDS Q
2915+"RTN","MSCZJOB",8,0)
2916+ ;
2917+"RTN","MSCZJOB",9,0)
2918+UNLOCK(D0) ;FROM FIELD 2, PAGE 3: UNLOCK THE LOCK
2919+"RTN","MSCZJOB",10,0)
2920+ N X,R S R=$G(@MSC@(MSCJOBID,"L",D0)) I R'["^" Q ;CAN'T SEE IT
2921+"RTN","MSCZJOB",11,0)
2922+ S R=$P(R," ",2),X="L "_R D ^DIM Q:'$D(X)
2923+"RTN","MSCZJOB",12,0)
2924+ D UNLOCK^MSCZJOBU(R)
2925+"RTN","MSCZJOB",13,0)
2926+ Q
2927+"RTN","MSCZJOB",14,0)
2928+ ;
2929+"RTN","MSCZJOB",15,0)
2930+KILL(J) ;FROM FIELD
2931+"RTN","MSCZJOB",16,0)
2932+ D KILL^MSCZJOBU(J)
2933+"RTN","MSCZJOB",17,0)
2934+ Q
2935+"RTN","MSCZJOB",18,0)
2936+ ;
2937+"RTN","MSCZJOB",19,0)
2938+COMPMUL ;COMPUTED MULTIPLE FOR MSCZJOBEXAM BLOCK
2939+"RTN","MSCZJOB",20,0)
2940+ N X,D0,J
2941+"RTN","MSCZJOB",21,0)
2942+ S MSC="^TMP(""MSCZJOB"")" D POLL
2943+"RTN","MSCZJOB",22,0)
2944+ F D0=0:0 S D0=$O(MSCZJOB(D0)) Q:'D0 D
2945+"RTN","MSCZJOB",23,0)
2946+ .S MSCZJOB(D0)=MSCZJOB(D0)_U_$$DEV(D0)_U_$$USER(D0)_U_$$NSP(D0)_U_U_U_U_U_$$ROUTINE(D0)
2947+"RTN","MSCZJOB",24,0)
2948+ .S X=MSCZJOB(D0) X DICMX
2949+"RTN","MSCZJOB",25,0)
2950+ Q
2951+"RTN","MSCZJOB",26,0)
2952+JOB(D0) Q $P(MSCZJOB(D0),U) ;***
2953+"RTN","MSCZJOB",27,0)
2954+DEV(D0) Q $$FIND(D0,"I","$PRINCIPAL")
2955+"RTN","MSCZJOB",28,0)
2956+NSP(D0) N N D Q N
2957+"RTN","MSCZJOB",29,0)
2958+ .N L,P S N=$$FIND(D0,"I","$ZGBLDIR"),L=$L(N,"/") I L<2 Q
2959+"RTN","MSCZJOB",30,0)
2960+ .F L=L-1:-1:2 S P=$P(N,"/",L) I P'[".",P'["globals" Q
2961+"RTN","MSCZJOB",31,0)
2962+ .S P=1 I $P(N,"/")="" S P=2
2963+"RTN","MSCZJOB",32,0)
2964+ .S N=$P(N,"/",P,L)
2965+"RTN","MSCZJOB",33,0)
2966+USER(D0) Q $P($G(^VA(200,+$$FIND(D0,"V","DUZ"),0)),U)
2967+"RTN","MSCZJOB",34,0)
2968+ROUTINE(D0) Q $$FIND(D0,"V","%ZPOS")
2969+"RTN","MSCZJOB",35,0)
2970+ ;
2971+"RTN","MSCZJOB",36,0)
2972+FIND(D0,ARR,KEY) N I,J,X S X="",J=+MSCZJOB(D0)
2973+"RTN","MSCZJOB",37,0)
2974+ F I=0:0 S I=$O(@MSC@(J,ARR,I)) Q:'I I $P(^(I),KEY_"=")="" S X=$TR($P(^(I),"=",2),"""") Q
2975+"RTN","MSCZJOB",38,0)
2976+ Q X
2977+"RTN","MSCZJOB",39,0)
2978+ ;
2979+"RTN","MSCZJOB",40,0)
2980+COMPSTK ;COMPUTED MULTIPLE FOR MSCZJOBSTACK BLOCK
2981+"RTN","MSCZJOB",41,0)
2982+ S MSC="^TMP(""MSCZJOB"")" K @MSC@(MSCJOBID) D POLL1
2983+"RTN","MSCZJOB",42,0)
2984+ N D0,J S J=MSCJOBID
2985+"RTN","MSCZJOB",43,0)
2986+ F D0=1:1:$O(@MSC@(J,"S",""),-1) S X="" X DICMX
2987+"RTN","MSCZJOB",44,0)
2988+ Q
2989+"RTN","MSCZJOB",45,0)
2990+ ;
2991+"RTN","MSCZJOB",46,0)
2992+STACK(D0) N X S X=$G(@MSC@(MSCJOBID,"S",D0))
2993+"RTN","MSCZJOB",47,0)
2994+ Q X
2995+"RTN","MSCZJOB",48,0)
2996+ ;
2997+"RTN","MSCZJOB",49,0)
2998+COMPVARS ;COMPUTED MULTIPLE FOR MSCZJOBVARS BLOCK
2999+"RTN","MSCZJOB",50,0)
3000+ S MSC="^TMP(""MSCZJOB"")" K @MSC@(MSCJOBID) D POLL1
3001+"RTN","MSCZJOB",51,0)
3002+ N D0,J S J=MSCJOBID
3003+"RTN","MSCZJOB",52,0)
3004+ F D0=1:1:$O(@MSC@(J,"V",""),-1) S X="" X DICMX
3005+"RTN","MSCZJOB",53,0)
3006+ Q
3007+"RTN","MSCZJOB",54,0)
3008+ ;
3009+"RTN","MSCZJOB",55,0)
3010+COMPLKS ;COMPUTED MULTIPLE FOR MSCZJOBLOCKS BLOCK
3011+"RTN","MSCZJOB",56,0)
3012+ S MSC="^TMP(""MSCZJOB"")" D POLL1
3013+"RTN","MSCZJOB",57,0)
3014+ N D0
3015+"RTN","MSCZJOB",58,0)
3016+ F D0=1:1:$$LOCKS S X="" X DICMX
3017+"RTN","MSCZJOB",59,0)
3018+ Q
3019+"RTN","MSCZJOB",60,0)
3020+ ;
3021+"RTN","MSCZJOB",61,0)
3022+LOCKS() Q +$O(@MSC@(MSCJOBID,"L",""),-1)
3023+"RTN","MSCZJOB",62,0)
3024+ ;
3025+"RTN","MSCZJOB",63,0)
3026+POLL K MSCZJOB ;D HLP^DDSUTL(" POLLING JOBS.....")
3027+"RTN","MSCZJOB",64,0)
3028+ I $G(^%ZOSF("OS"))["GT.M" D
3029+"RTN","MSCZJOB",65,0)
3030+ .K @MSC
3031+"RTN","MSCZJOB",66,0)
3032+ .D INTRPT^MSCZJOBU("*") ;SETS UP ^TMP
3033+"RTN","MSCZJOB",67,0)
3034+ .N MSCA,I D PIDS^MSCZJOBU(.MSCA)
3035+"RTN","MSCZJOB",68,0)
3036+ .S MSCA="" F I=1:1 S MSCA=$O(MSCA(MSCA)) Q:'MSCA S MSCZJOB(I)=MSCA ;SETS UP LOCAL ARRAY
3037+"RTN","MSCZJOB",69,0)
3038+ .H 1 ;WAIT FOR POLLING
3039+"RTN","MSCZJOB",70,0)
3040+ D TEST
3041+"RTN","MSCZJOB",71,0)
3042+ Q
3043+"RTN","MSCZJOB",72,0)
3044+ ;
3045+"RTN","MSCZJOB",73,0)
3046+POLL1 Q:'$G(MSCJOBID)
3047+"RTN","MSCZJOB",74,0)
3048+ I $G(^%ZOSF("OS"))["GT.M" D
3049+"RTN","MSCZJOB",75,0)
3050+ .K @MSC@(MSCJOBID)
3051+"RTN","MSCZJOB",76,0)
3052+ .D INTRPT^MSCZJOBU(MSCJOBID) ;SETS UP ^TMP(MSCZJOB)
3053+"RTN","MSCZJOB",77,0)
3054+ .H 1 ;WAIT FOR POLLING
3055+"RTN","MSCZJOB",78,0)
3056+ D TEST
3057+"RTN","MSCZJOB",79,0)
3058+ Q
3059+"RTN","MSCZJOB",80,0)
3060+ ;
3061+"RTN","MSCZJOB",81,0)
3062+TEST Q
3063+"RTN","MSCZJOB",82,0)
3064+COMPLK ;COMPUTED MULTIPLE FOR MSCZLOCK BLOCK
3065+"RTN","MSCZJOB",83,0)
3066+ N X,D0,J
3067+"RTN","MSCZJOB",84,0)
3068+ S MSC="^TMP(""MSCZJOB"")" D POLL S D0=0
3069+"RTN","MSCZJOB",85,0)
3070+ F K=0:0 S K=$O(MSCZJOB(K)) Q:'K D
3071+"RTN","MSCZJOB",86,0)
3072+ .F J=0:0 S J=$O(^TMP("MSCZJOB",MSCZJOB(K),"L",J)) Q:'J S A=$TR(^(J),U,"~") D
3073+"RTN","MSCZJOB",87,0)
3074+ ..S D0=D0+1,MSCZLK(D0)=$P(A,"LOCK ",2,9)_U_$$USER(K)_U_$TR($$ROUTINE(K),U,"~")_"^^"_MSCZJOB(K)
3075+"RTN","MSCZJOB",88,0)
3076+ ..S X=MSCZLK(D0) X DICMX
3077+"RTN","MSCZJOB",89,0)
3078+ Q
3079+"RTN","MSCZJOB",90,0)
3080+LOCK ;
3081+"RTN","MSCZJOB",91,0)
3082+ S DDSFILE=3.081,DR="[MSCZLOCK]",DDSPARM="S"
3083+"RTN","MSCZJOB",92,0)
3084+ D ^DDS Q
3085+"RTN","MSCZJOB",93,0)
3086+UNL(D0) ;FROM FIELD 2, PAGE 3: UNLOCK THE LOCK
3087+"RTN","MSCZJOB",94,0)
3088+ N X,R S R=$P($G(MSCZLK(D0)),U),P=$P($G(MSCZLK(D0)),U,5) ;I R'["^" Q ;CAN'T SEE IT
3089+"RTN","MSCZJOB",95,0)
3090+ S R=$P(R,"~",2),R="^"_$S(R'["(":$P(R," "),1:$P(R,")")_")"),X="L "_R D ^DIM Q:'$D(X) ;GOOD SYNTAX?
3091+"RTN","MSCZJOB",96,0)
3092+ D UNLOCK^MSCZJOBU(R)
3093+"RTN","MSCZJOBS")
3094+0^46^B3252583
3095+"RTN","MSCZJOBS",1,0)
3096+MSCZJOBS ;JKT/MSC - OpenVista System status ;27MAY2009
3097+"RTN","MSCZJOBS",2,0)
3098+ ;;8.0;KERNEL;**MSC**
3099+"RTN","MSCZJOBS",3,0)
3100+ ;
3101+"RTN","MSCZJOBS",4,0)
3102+ALL D SS() Q
3103+"RTN","MSCZJOBS",5,0)
3104+THIS D SS(1) Q
3105+"RTN","MSCZJOBS",6,0)
3106+ ;
3107+"RTN","MSCZJOBS",7,0)
3108+SS(THIS) ;Print GT.M mumps processes
3109+"RTN","MSCZJOBS",8,0)
3110+ ; If THIS is true, only print processes associated with the current
3111+"RTN","MSCZJOBS",9,0)
3112+ ; OpenVista instance
3113+"RTN","MSCZJOBS",10,0)
3114+ ;
3115+"RTN","MSCZJOBS",11,0)
3116+ Q:$G(^%ZOSF("OS"))'["GT.M"
3117+"RTN","MSCZJOBS",12,0)
3118+ ;
3119+"RTN","MSCZJOBS",13,0)
3120+ D INTRPT^MSCZJOBU("*") H .5
3121+"RTN","MSCZJOBS",14,0)
3122+ ;
3123+"RTN","MSCZJOBS",15,0)
3124+ N DATETIME S DATETIME=$$HTE^XLFDT($H)
3125+"RTN","MSCZJOBS",16,0)
3126+ W #!,?22,"OpenVista System Status"
3127+"RTN","MSCZJOBS",17,0)
3128+ W !,?(34-($L(DATETIME)/2)\1),DATETIME
3129+"RTN","MSCZJOBS",18,0)
3130+ W !!,?1,"Process",?12,"Device",?30,"Instance",?42,"Routine",?56,"User"
3131+"RTN","MSCZJOBS",19,0)
3132+ ;
3133+"RTN","MSCZJOBS",20,0)
3134+ N PID S PID=""
3135+"RTN","MSCZJOBS",21,0)
3136+ D PIDS^MSCZJOBU(.PID)
3137+"RTN","MSCZJOBS",22,0)
3138+ F S PID=$O(PID(PID)) Q:PID="" D
3139+"RTN","MSCZJOBS",23,0)
3140+ . I $G(THIS) Q:$$INSTANCE(PID)'=$$CURRENT^ZCD()
3141+"RTN","MSCZJOBS",24,0)
3142+ . W !,$$PID(PID)
3143+"RTN","MSCZJOBS",25,0)
3144+ . W ?12,$$DEVICE(PID)
3145+"RTN","MSCZJOBS",26,0)
3146+ . W ?30,$$INSTANCE(PID)
3147+"RTN","MSCZJOBS",27,0)
3148+ . W ?42,$$ROUTINE(PID)
3149+"RTN","MSCZJOBS",28,0)
3150+ . W ?56,$$USER(PID)
3151+"RTN","MSCZJOBS",29,0)
3152+ ;
3153+"RTN","MSCZJOBS",30,0)
3154+ W !! ZSY "uptime"
3155+"RTN","MSCZJOBS",31,0)
3156+ Q
3157+"RTN","MSCZJOBS",32,0)
3158+ ;
3159+"RTN","MSCZJOBS",33,0)
3160+PID(PID) ;Return process ID formatted for display
3161+"RTN","MSCZJOBS",34,0)
3162+ Q $J(PID,8)_$S($J=PID:"*",1:"")
3163+"RTN","MSCZJOBS",35,0)
3164+ ;
3165+"RTN","MSCZJOBS",36,0)
3166+DEVICE(PID) ;Return device
3167+"RTN","MSCZJOBS",37,0)
3168+ Q $$FIND("^TMP(""MSCZJOB"")",PID,"I","$PRINCIPAL")
3169+"RTN","MSCZJOBS",38,0)
3170+ ;
3171+"RTN","MSCZJOBS",39,0)
3172+INSTANCE(PID) ;Return name of OpenVista instance
3173+"RTN","MSCZJOBS",40,0)
3174+ N ZG S ZG=$$FIND("^TMP(""MSCZJOB"")",PID,"I","$ZGBLDIR")
3175+"RTN","MSCZJOBS",41,0)
3176+ Q $P(ZG,"/",$L(ZG,"/")-2)
3177+"RTN","MSCZJOBS",42,0)
3178+ ;
3179+"RTN","MSCZJOBS",43,0)
3180+ROUTINE(PID) ;Return routine
3181+"RTN","MSCZJOBS",44,0)
3182+ Q $P($$FIND("^TMP(""MSCZJOB"")",PID,"V","%ZPOS"),"^",2)
3183+"RTN","MSCZJOBS",45,0)
3184+ ;
3185+"RTN","MSCZJOBS",46,0)
3186+USER(PID) ;Return OpenVista user
3187+"RTN","MSCZJOBS",47,0)
3188+ N DUZ S DUZ=+$$FIND("^TMP(""MSCZJOB"")",PID,"V","DUZ")
3189+"RTN","MSCZJOBS",48,0)
3190+ ; FIXME: this code is looking up the name of the person in *this*
3191+"RTN","MSCZJOBS",49,0)
3192+ ; instance, which assumes that ^VA(200) is the same across databases
3193+"RTN","MSCZJOBS",50,0)
3194+ Q $P($G(^VA(200,DUZ,0)),"^")
3195+"RTN","MSCZJOBS",51,0)
3196+ ;
3197+"RTN","MSCZJOBS",52,0)
3198+FIND(NODE,PID,ARR,KEY) ;Return the value of a key in one of the ZSHOW arrays
3199+"RTN","MSCZJOBS",53,0)
3200+ N I,X S I="",X=""
3201+"RTN","MSCZJOBS",54,0)
3202+ F S I=$O(@NODE@(PID,ARR,I)) Q:'I I $P(^(I),KEY_"=")="" S X=$TR($P(^(I),"=",2),"""") Q
3203+"RTN","MSCZJOBS",55,0)
3204+ Q X
3205+"RTN","MSCZJOBU")
3206+0^4^B2386063
3207+"RTN","MSCZJOBU",1,0)
3208+MSCZJOBU ;RHL,JDS,JKT/MSC;20MAY2009
3209+"RTN","MSCZJOBU",2,0)
3210+ ;;8.0;KERNEL;**MSC**
3211+"RTN","MSCZJOBU",3,0)
3212+ ;
3213+"RTN","MSCZJOBU",4,0)
3214+ ; JOB EXAM UTILITIES FOR GT.M
3215+"RTN","MSCZJOBU",5,0)
3216+ Q
3217+"RTN","MSCZJOBU",6,0)
3218+PIDS(XARY) ; GET ARRAY OF ALL MUMPS PROCESS
3219+"RTN","MSCZJOBU",7,0)
3220+ ; XARY PASSED BY REFERENCE
3221+"RTN","MSCZJOBU",8,0)
3222+ ; RETURNS XARY(PID)=""
3223+"RTN","MSCZJOBU",9,0)
3224+ ; NOTE: Unix PID=$J for all mumps processes.
3225+"RTN","MSCZJOBU",10,0)
3226+ ;
3227+"RTN","MSCZJOBU",11,0)
3228+ N DEV
3229+"RTN","MSCZJOBU",12,0)
3230+ S DEV="psdev"
3231+"RTN","MSCZJOBU",13,0)
3232+ OPEN DEV:(COMM="ps -o pid= -C mumps")::"PIPE" U DEV
3233+"RTN","MSCZJOBU",14,0)
3234+ ;
3235+"RTN","MSCZJOBU",15,0)
3236+ N %I S %I=$I
3237+"RTN","MSCZJOBU",16,0)
3238+ N %J ; $JOB
3239+"RTN","MSCZJOBU",17,0)
3240+ F U DEV R %J U %I Q:%J="" D
3241+"RTN","MSCZJOBU",18,0)
3242+ . F Q:$E(%J,1)'=" " S %J=$E(%J,2,999) ; strip leading spaces
3243+"RTN","MSCZJOBU",19,0)
3244+ . S XARY(%J)=""
3245+"RTN","MSCZJOBU",20,0)
3246+ ;
3247+"RTN","MSCZJOBU",21,0)
3248+ C DEV
3249+"RTN","MSCZJOBU",22,0)
3250+ Q
3251+"RTN","MSCZJOBU",23,0)
3252+ ;
3253+"RTN","MSCZJOBU",24,0)
3254+INTRPT(PID) ; SEND mupip intrpt to process with PID
3255+"RTN","MSCZJOBU",25,0)
3256+ ; WHICH CAUSES THE $ZINTERRUPT CODE TO BE EXECUTED.
3257+"RTN","MSCZJOBU",26,0)
3258+ ; PID PASSED BY VALUE
3259+"RTN","MSCZJOBU",27,0)
3260+ ; PID CAN BE A SINGLE PID, I.E. $J
3261+"RTN","MSCZJOBU",28,0)
3262+ ; PID CAN BE A "*" WHICH SENDS AN INTERRUPT TO ALL MUMPS PROCESSES
3263+"RTN","MSCZJOBU",29,0)
3264+ ;
3265+"RTN","MSCZJOBU",30,0)
3266+ Q:$G(PID)'?1N.N&($G(PID)'="*")
3267+"RTN","MSCZJOBU",31,0)
3268+ ;
3269+"RTN","MSCZJOBU",32,0)
3270+ N CMD,DEV
3271+"RTN","MSCZJOBU",33,0)
3272+ S CMD="gtmsignal -q "_$S(PID="*":"-a",1:PID)
3273+"RTN","MSCZJOBU",34,0)
3274+ S DEV="gtmsignaldev"
3275+"RTN","MSCZJOBU",35,0)
3276+ OPEN DEV:(COMM=CMD)::"PIPE" U DEV C DEV
3277+"RTN","MSCZJOBU",36,0)
3278+ Q
3279+"RTN","MSCZJOBU",37,0)
3280+ ;
3281+"RTN","MSCZJOBU",38,0)
3282+KILL(PID) ; Send mupip stop to process with PID
3283+"RTN","MSCZJOBU",39,0)
3284+ ; PID PASSED BY VALUE
3285+"RTN","MSCZJOBU",40,0)
3286+ ; PID CAN BE A SINGLE PID, I.E. $J
3287+"RTN","MSCZJOBU",41,0)
3288+ ;
3289+"RTN","MSCZJOBU",42,0)
3290+ Q:$G(PID)'?1N.N
3291+"RTN","MSCZJOBU",43,0)
3292+ ;
3293+"RTN","MSCZJOBU",44,0)
3294+ N DEV
3295+"RTN","MSCZJOBU",45,0)
3296+ S DEV="gtmsignaldev"
3297+"RTN","MSCZJOBU",46,0)
3298+ OPEN DEV:(COMM="gtmsignal -q -s "_PID)::"PIPE" U DEV C DEV
3299+"RTN","MSCZJOBU",47,0)
3300+ Q
3301+"RTN","MSCZJOBU",48,0)
3302+ ;
3303+"RTN","MSCZJOBU",49,0)
3304+UNLOCK(NODE) ; Use lke to remove lock on NODE.
3305+"RTN","MSCZJOBU",50,0)
3306+ N CMD,DEV
3307+"RTN","MSCZJOBU",51,0)
3308+ S CMD="lke clear -lock="""_NODE_""" -nointeractive -output=/dev/null"
3309+"RTN","MSCZJOBU",52,0)
3310+ S DEV="lkedev"
3311+"RTN","MSCZJOBU",53,0)
3312+ OPEN DEV:(COMM=CMD)::"PIPE" U DEV C DEV
3313+"RTN","MSCZJOBU",54,0)
3314+ Q
3315+"RTN","PRCSEA")
3316+0^37^B66865498
3317+"RTN","PRCSEA",1,0)
3318+PRCSEA ;WISC/SAW/DXH/BM/SC/DAP,MSC/JDA - CONTROL POINT ACTIVITY EDITS ;27APR2009
3319+"RTN","PRCSEA",2,0)
3320+V ;;5.1;IFCAP;**81,MSC**;Oct 20, 2000
3321+"RTN","PRCSEA",3,0)
3322+ ;Per VHA Directive 10-93-142, this routine should not be modified.
3323+"RTN","PRCSEA",4,0)
3324+ ;
3325+"RTN","PRCSEA",5,0)
3326+ ;PRC*5.1*81 BMM 3/23/05 when a 2237 is canceled, in CT1, add code
3327+"RTN","PRCSEA",6,0)
3328+ ;to update Audit file (#414.02), and send update message to
3329+"RTN","PRCSEA",7,0)
3330+ ;DynaMed thru a call to rtn PRCVTCA.
3331+"RTN","PRCSEA",8,0)
3332+ ;
3333+"RTN","PRCSEA",9,0)
3334+ENRS ;ENTER REQ
3335+"RTN","PRCSEA",10,0)
3336+ S PRCSK=1,X3="H"
3337+"RTN","PRCSEA",11,0)
3338+ D EN1F^PRCSUT(1) ; ask site,FY,QRTR,CP & set up PRC array, PRCSIP variable ; prc*5*197
3339+"RTN","PRCSEA",12,0)
3340+ G W2:'$D(PRC("SITE")),EXIT:Y<0 ; unauthorized user or '^' entered
3341+"RTN","PRCSEA",13,0)
3342+ D W6 ; display help on transaction# format
3343+"RTN","PRCSEA",14,0)
3344+ENRS0 S DLAYGO=410,DIC="^PRCS(410,",DIC(0)="AELQ",D="H"
3345+"RTN","PRCSEA",15,0)
3346+ S DIC("A")="Select TRANSACTION: "
3347+"RTN","PRCSEA",16,0)
3348+ S DIC("S")="I '^(0),$P(^(0),U,3)'="""",$D(^PRCS(410,""H"",$P(^(0),U,3),+Y)),^(+Y)=DUZ!(^(+Y)="""")" ; only requests authored by user or unauthored will display on partial match
3349+"RTN","PRCSEA",17,0)
3350+ D ^PRCSDIC ; lookup & preliminary validity checking
3351+"RTN","PRCSEA",18,0)
3352+ K DLAYGO,DIC("A"),DIC("S")
3353+"RTN","PRCSEA",19,0)
3354+ G:Y<0 EXIT
3355+"RTN","PRCSEA",20,0)
3356+ I $P(Y,U,3)'=1 W $C(7)," Must be a new entry." G ENRS0
3357+"RTN","PRCSEA",21,0)
3358+ ;*81 Check site parameter to see if issue books are allowed
3359+"RTN","PRCSEA",22,0)
3360+ D CKPRM^PRCSEB
3361+"RTN","PRCSEA",23,0)
3362+ W !!,PRCVY,!
3363+"RTN","PRCSEA",24,0)
3364+ S (PDA,T1,DA)=+Y
3365+"RTN","PRCSEA",25,0)
3366+ L +^PRCS(410,DA):1 I $T=0 W !,"File is being accessed...try a different transaction number or try later" G ENRS0
3367+"RTN","PRCSEA",26,0)
3368+ S T(2)=$P(Y,U,2)
3369+"RTN","PRCSEA",27,0)
3370+ D EN2A^PRCSUT3 ; saves CP,sta,substa,txn name,user,BBFY,RB stat,acct data in new txn (nodes 0,3,6,11 of file 410)
3371+"RTN","PRCSEA",28,0)
3372+ S $P(^PRCS(410,DA,14),"^")=DUZ ; originator (entered by)
3373+"RTN","PRCSEA",29,0)
3374+ S $P(^PRCS(410,DA,7),"^")=DUZ,$P(^PRCS(410,DA,7),"^",2)=$P($G(^VA(200,DUZ,20)),"^",3) ; requestor default
3375+"RTN","PRCSEA",30,0)
3376+ I $G(PRCSIP) S $P(^PRCS(410,DA,0),"^",6)=PRCSIP,^PRCS(410,"AO",PRCSIP,DA)="" ; PRCSIP was set up in PRCSUT & is inventory distribution point
3377+"RTN","PRCSEA",31,0)
3378+ S PRCS="" ; set PRCS=1 if CP is automated, i.e. it uses IFCAP to send requests to A&MM
3379+"RTN","PRCSEA",32,0)
3380+ I $D(^PRC(420,PRC("SITE"),1,+PRC("CP"),0)) S:$P(^(0),"^",11)="Y" PRCS=1
3381+"RTN","PRCSEA",33,0)
3382+TYPE ;
3383+"RTN","PRCSEA",34,0)
3384+ W !!,"This transaction is assigned temporary transaction number: ",T(2)
3385+"RTN","PRCSEA",35,0)
3386+ S DIC("A")="FORM TYPE: ",DIC="^PRCS(410.5,",DIC(0)="AEQZ"
3387+"RTN","PRCSEA",36,0)
3388+ S DIC("S")=PRCVX ; only allow selection of 2237's
3389+"RTN","PRCSEA",37,0)
3390+ D ^DIC
3391+"RTN","PRCSEA",38,0)
3392+ S DA=PDA
3393+"RTN","PRCSEA",39,0)
3394+ ;if user didn't enter a form type, go ask whether to backout and act
3395+"RTN","PRCSEA",40,0)
3396+ ;accordingly: go let them re-enter a form type or exit
3397+"RTN","PRCSEA",41,0)
3398+ I Y<0 G:'$$BACKOUT(T(2),DA) TYPE L -^PRCS(420,DA) G EXIT
3399+"RTN","PRCSEA",42,0)
3400+ ;
3401+"RTN","PRCSEA",43,0)
3402+ I Y<2 W "??" G TYPE
3403+"RTN","PRCSEA",44,0)
3404+ K PRCVX,PRCVY
3405+"RTN","PRCSEA",45,0)
3406+ S $P(^PRCS(410,DA,0),"^",4)=+Y,X=+Y ; form type
3407+"RTN","PRCSEA",46,0)
3408+ ; if CP is not automated (file 420), user's response will be overwritten with non-recuring (type 2). Although user's selection is changed 'behind the scenes',
3409+"RTN","PRCSEA",47,0)
3410+ ; the scenario is unlikely to occur because full implementation of IFCAP was made mandatory and sites are now automated.
3411+"RTN","PRCSEA",48,0)
3412+ S:'PRCS&(X>2) $P(^PRCS(410,DA,0),"^",4)=2,X=2
3413+"RTN","PRCSEA",49,0)
3414+ K PRCSERR ; flag denoting item info is missing
3415+"RTN","PRCSEA",50,0)
3416+ S DIC(0)="AEMQ",(DIC,DIE)="^PRCS(410,"
3417+"RTN","PRCSEA",51,0)
3418+ S (PRCSDR,DR)="["_$S(X=2:"PRCSEN2237S",X=3:"PRCSENPRS",X=4:"PRCSENR&NRS",1:"PRCSENIBS")_"]"
3419+"RTN","PRCSEA",52,0)
3420+EN1 K DTOUT,DUOUT,Y
3421+"RTN","PRCSEA",53,0)
3422+ D ^DIE
3423+"RTN","PRCSEA",54,0)
3424+ S DA=PDA
3425+"RTN","PRCSEA",55,0)
3426+ I $D(Y)!($D(DTOUT)) D DOR L -^PRCS(410,DA) G EXIT
3427+"RTN","PRCSEA",56,0)
3428+ D RL^PRCSUT1 ; sets up 'IT' & '10' nodes
3429+"RTN","PRCSEA",57,0)
3430+ D ^PRCSCK I $D(PRCSERR),PRCSERR G EN1 ; missing required field ('item')
3431+"RTN","PRCSEA",58,0)
3432+ D DOR ; populate date of request field if it is nil
3433+"RTN","PRCSEA",59,0)
3434+ L -^PRCS(410,DA)
3435+"RTN","PRCSEA",60,0)
3436+ S T="enter" D W5 G EXIT:%'=1
3437+"RTN","PRCSEA",61,0)
3438+ W !! K PRCS("SUB")
3439+"RTN","PRCSEA",62,0)
3440+ G ENRS
3441+"RTN","PRCSEA",63,0)
3442+ ;
3443+"RTN","PRCSEA",64,0)
3444+EDRS ;EDIT REQ
3445+"RTN","PRCSEA",65,0)
3446+ ; following line commented out by PRC*5*140 - user responses not used to limit selection of txn and sometimes resulted in bad info being set into the selected txn
3447+"RTN","PRCSEA",66,0)
3448+ ; S PRCSK=1 D EN1F^PRCSUT(1) G W2:'$D(PRC("SITE")),EXIT:Y<0 ; ask sta,FY,QRTR,CP ; prc*5*197
3449+"RTN","PRCSEA",67,0)
3450+ ; if the above line is reactivated, programmer should note that the transaction selected may not be of the same FY,QRTR,sta, subst, and CP specified by the user
3451+"RTN","PRCSEA",68,0)
3452+ D W6 ; format doc for txn#
3453+"RTN","PRCSEA",69,0)
3454+ S X3="H" S DIC="^PRCS(410,",DIC(0)="AEQ",D="H"
3455+"RTN","PRCSEA",70,0)
3456+ S DIC("A")="Select TRANSACTION: "
3457+"RTN","PRCSEA",71,0)
3458+ S DIC("S")="I '^(0),$P(^(0),U,3)'="""",$P(^(0),U,4)'=1,^PRCS(410,""H"",$P(^(0),U,3),+Y)=DUZ!(^(+Y)="""")" ; request must be authored by user or unauthored & cannot be a 1358
3459+"RTN","PRCSEA",72,0)
3460+ D ^PRCSDIC G EXIT:Y<0 K DIC("A"),DIC("S")
3461+"RTN","PRCSEA",73,0)
3462+ S (PDA,DA,T1)=+Y
3463+"RTN","PRCSEA",74,0)
3464+ L +^PRCS(410,DA):1 I $T=0 W !,"File is being accessed...please try later" G EDRS
3465+"RTN","PRCSEA",75,0)
3466+ ; following line commented out in PRC*5*140 - PRCSUT3 needs PRC("SST") or MYY to do something, neither exists in this option
3467+"RTN","PRCSEA",76,0)
3468+ ; D EN2B^PRCSUT3
3469+"RTN","PRCSEA",77,0)
3470+ S PRC("SITE")=+$P(^PRCS(410,PDA,0),"^",5)
3471+"RTN","PRCSEA",78,0)
3472+ S PRC("CP")=$P(^PRCS(410,PDA,3),"^")
3473+"RTN","PRCSEA",79,0)
3474+ I $P(^PRCS(410,PDA,0),"^",6)="" D ; prc*5*197
3475+"RTN","PRCSEA",80,0)
3476+ . N PRCSIP D IP^PRCSUT
3477+"RTN","PRCSEA",81,0)
3478+ . I $D(PRCSIP) S $P(^PRC(410,DA,0),U,6)=PRCSIP
3479+"RTN","PRCSEA",82,0)
3480+ S X=+$P(^PRCS(410,DA,0),"^",4) I X<1 D FORM
3481+"RTN","PRCSEA",83,0)
3482+ ;*81 Check site parameter to see if Issue Books are allowed
3483+"RTN","PRCSEA",84,0)
3484+ D CKPRM
3485+"RTN","PRCSEA",85,0)
3486+ I PRCVD=1 S PRCVZ=1
3487+"RTN","PRCSEA",86,0)
3488+ I PRCVD'=1 S PRCVZ=0
3489+"RTN","PRCSEA",87,0)
3490+ W !,"The form type for this transaction is ",$P($G(^PRCS(410.5,X,0)),"^"),!
3491+"RTN","PRCSEA",88,0)
3492+ I PRCVZ=1,X=5 W !,"All Supply Warehouse requests must be processed in the new Inventory System.",!!,"Please cancel this IFCAP issue book order." S T="edit" D W5 G:%'=1 EXIT W !! K PRCS("SUB") G EDRS
3493+"RTN","PRCSEA",89,0)
3494+ ;
3495+"RTN","PRCSEA",90,0)
3496+ S DIC(0)="AEMQ",(DIC,DIE)="^PRCS(410,"
3497+"RTN","PRCSEA",91,0)
3498+ ;P182--Modified next 3 lines to use new templates if supply fund FCP
3499+"RTN","PRCSEA",92,0)
3500+ S (DR,PRCSDR)="["_$S(X=1:"PRCE NEW 1358S",X=2:"PRCSEN2237S",X=3:"PRCSENPRS",X=4:"PRCSENR&NRS",1:"PRCSENIBS")_"]"
3501+"RTN","PRCSEA",93,0)
3502+ED1 K DTOUT,DUOUT,Y
3503+"RTN","PRCSEA",94,0)
3504+ D ^DIE
3505+"RTN","PRCSEA",95,0)
3506+ S DA=PDA
3507+"RTN","PRCSEA",96,0)
3508+ I $D(Y)!($D(DTOUT)) L -^PRCS(410,DA) G EXIT
3509+"RTN","PRCSEA",97,0)
3510+ D RL^PRCSUT1
3511+"RTN","PRCSEA",98,0)
3512+ D ^PRCSCK I $D(PRCSERR),PRCSERR G ED1
3513+"RTN","PRCSEA",99,0)
3514+ K PRCSERR S $P(^PRCS(410,DA,14),"^")=DUZ
3515+"RTN","PRCSEA",100,0)
3516+ L -^PRCS(410,DA)
3517+"RTN","PRCSEA",101,0)
3518+ S T="edit" D W5 G EXIT:%'=1
3519+"RTN","PRCSEA",102,0)
3520+ W !! K PRCS("SUB")
3521+"RTN","PRCSEA",103,0)
3522+ G EDRS
3523+"RTN","PRCSEA",104,0)
3524+ ;
3525+"RTN","PRCSEA",105,0)
3526+CT ;CANCEL A (PERMANENT) TRANS
3527+"RTN","PRCSEA",106,0)
3528+ D EN3^PRCSUT
3529+"RTN","PRCSEA",107,0)
3530+ G W2:'$D(PRC("SITE")),EXIT:Y<0
3531+"RTN","PRCSEA",108,0)
3532+ S DIC="^PRCS(410,",DIC(0)="AEMQ"
3533+"RTN","PRCSEA",109,0)
3534+ ;S DIC("S")="I $P(^(0),""^"",4)=.5!($S('$D(^(7)):1,1:$P(^(7),""^"",6)="""")) I +^(0)>0,$D(^(3)),+^(3)=+PRC(""CP""),$P(^(0),""^"",5)=PRC(""SITE"") I $D(^PRC(420,""A"",DUZ,PRC(""SITE""),+PRC(""CP""),1))!($D(^(2)))"
3535+"RTN","PRCSEA",110,0)
3536+ S DIC("S")="I $P(^(0),U,2)=""O""!($P(^(0),U,2)=""A""&($P(^(0),U,4)=1)),$S('$D(^(7)):1,1:$P(^(7),""^"",6)=""""),$D(^(3)),+^(3)=+PRC(""CP""),$P(^(0),U,5)=PRC(""SITE"") I $D(^PRC(420,""A"",DUZ,PRC(""SITE""),+PRC(""CP""),1))!($D(^(2)))"
3537+"RTN","PRCSEA",111,0)
3538+ S DIC("A")="Select TRANSACTION: "
3539+"RTN","PRCSEA",112,0)
3540+ D ^PRCSDIC G EXIT:Y<0 K DIC("S"),DIC("A")
3541+"RTN","PRCSEA",113,0)
3542+CT1 W !,"Cancel this transaction" S %=2 D YN^DICN G CT1:%=0,EXIT:%'=1
3543+"RTN","PRCSEA",114,0)
3544+ S DA=+Y
3545+"RTN","PRCSEA",115,0)
3546+ L +^PRCS(410,DA):1 I $T=0 W !,"File is being accessed...please try later" G CT
3547+"RTN","PRCSEA",116,0)
3548+ S T=$P(^PRCS(410,DA,0),"^"),$P(^(11),"^",3)="",$P(^(0),"^",2)="CA",$P(^(5),"^")=0,$P(^(6),"^")=0
3549+"RTN","PRCSEA",117,0)
3550+ K ^PRCS(410,"F",+T_"-"_+PRC("CP")_"-"_$P(T,"-",5),DA),^PRCS(410,"F1",$P(T,"-",5)_"-"_+T_"-"_+PRC("CP"),DA),^PRCS(410,"AQ",1,DA)
3551+"RTN","PRCSEA",118,0)
3552+ K ZX
3553+"RTN","PRCSEA",119,0)
3554+ I $D(^PRCS(410,DA,4)) S ZX=^(4),X=$P(ZX,"^",8) F I=1,3,6,8 S $P(ZX,"^",I)=0
3555+"RTN","PRCSEA",120,0)
3556+ I $D(ZX) S ^PRCS(410,DA,4)=ZX K ZX
3557+"RTN","PRCSEA",121,0)
3558+ I $D(^PRCS(410,DA,12,0)) S N=0 F I=0:0 S N=$O(^PRCS(410,DA,12,N)) Q:N'>0 S X=$P(^(N,0),"^",2) I X S DA(1)=DA,DA=N D TRANK^PRCSEZZ S DA=DA(1)
3559+"RTN","PRCSEA",122,0)
3560+ D ERS410^PRC0G(DA_"^C")
3561+"RTN","PRCSEA",123,0)
3562+ W !,"Enter comments for this cancellation",!
3563+"RTN","PRCSEA",124,0)
3564+ S DIE=DIC,DR=60
3565+"RTN","PRCSEA",125,0)
3566+ D ^DIE
3567+"RTN","PRCSEA",126,0)
3568+ ;PRC*5.1*81 if DM trx, update Audit file and send msg to DM
3569+"RTN","PRCSEA",127,0)
3570+ D EN^PRCVTCA(DA)
3571+"RTN","PRCSEA",128,0)
3572+ L -^PRCS(410,DA)
3573+"RTN","PRCSEA",129,0)
3574+ I $D(^PRC(443,DA,0)) S DIK="^PRC(443," D ^DIK K DIK
3575+"RTN","PRCSEA",130,0)
3576+ S T="cancel" D W4 G EXIT:%'=1
3577+"RTN","PRCSEA",131,0)
3578+ W !! G CT
3579+"RTN","PRCSEA",132,0)
3580+ ;
3581+"RTN","PRCSEA",133,0)
3582+DT ;DELETE A (TEMPORARY) TRANS
3583+"RTN","PRCSEA",134,0)
3584+ S X3="H"
3585+"RTN","PRCSEA",135,0)
3586+ D W6 ; format doc for txn#
3587+"RTN","PRCSEA",136,0)
3588+ S DIC="^PRCS(410,",DIC(0)="AEQ",DIC("A")="Select TRANSACTION: ",D="H"
3589+"RTN","PRCSEA",137,0)
3590+ S DIC("S")="S W=$P(^(0),""^"",5),W(1)=+^(3) I '^(0),$P(^(0),""^"",3)'="""",^PRCS(410,""H"",$P(^(0),""^"",3),+Y)=DUZ!(^(+Y)="""")!($D(^PRC(420,""A"",DUZ,W,W(1),1)))!($D(^(2)))"
3591+"RTN","PRCSEA",138,0)
3592+ D ^PRCSDIC G EXIT:Y<0
3593+"RTN","PRCSEA",139,0)
3594+ K DIC("S"),DIC("A")
3595+"RTN","PRCSEA",140,0)
3596+ S DA=+Y
3597+"RTN","PRCSEA",141,0)
3598+ L +^PRCS(410,DA):5 I $T=0 W !,"File is being accessed...please try later" G DT
3599+"RTN","PRCSEA",142,0)
3600+DT1 W !,"Delete this transaction" S %=2 D YN^DICN G DT1:%=0,EXIT:%'=1
3601+"RTN","PRCSEA",143,0)
3602+ ;The following line was commented out in patch 182; should NOT manually
3603+"RTN","PRCSEA",144,0)
3604+ ;change or reset last assigned IEN # in node zero.
3605+"RTN","PRCSEA",145,0)
3606+ ;S PRCSDA=$P(^PRCS(410,0),U,3),DIK=DIC
3607+"RTN","PRCSEA",146,0)
3608+ S DIK=DIC
3609+"RTN","PRCSEA",147,0)
3610+ W !,"Okay....."
3611+"RTN","PRCSEA",148,0)
3612+ D ^DIK K DIK
3613+"RTN","PRCSEA",149,0)
3614+ L -^PRCS(410,DA)
3615+"RTN","PRCSEA",150,0)
3616+ ;The following line was commented out in patch 182; should NOT manually
3617+"RTN","PRCSEA",151,0)
3618+ ;change or reset last assigned IEN # in node zero.
3619+"RTN","PRCSEA",152,0)
3620+ ;S $P(^PRCS(410,0),U,3)=PRCSDA
3621+"RTN","PRCSEA",153,0)
3622+ K PRCSDA
3623+"RTN","PRCSEA",154,0)
3624+ W "It's deleted"
3625+"RTN","PRCSEA",155,0)
3626+ S T="delete" D W4 G EXIT:%'=1
3627+"RTN","PRCSEA",156,0)
3628+ W !! G DT
3629+"RTN","PRCSEA",157,0)
3630+ ;
3631+"RTN","PRCSEA",158,0)
3632+ ;
3633+"RTN","PRCSEA",159,0)
3634+DOR ; Date of Request
3635+"RTN","PRCSEA",160,0)
3636+ I $D(^PRCS(410,DA,1)),$P(^PRCS(410,DA,1),"^")'="" Q
3637+"RTN","PRCSEA",161,0)
3638+ S %DT="X",X="T" D ^%DT S $P(^PRCS(410,DA,1),"^")=Y
3639+"RTN","PRCSEA",162,0)
3640+ Q
3641+"RTN","PRCSEA",163,0)
3642+FORM ;*81 Allow user to change txn to a valid form and check site parameter to see if issue books are allowed
3643+"RTN","PRCSEA",164,0)
3644+ D CKPRM
3645+"RTN","PRCSEA",165,0)
3646+ I PRCVD=1 S PRCVX1="I Y>1&(Y<5)",PRCVY1="The Issue Book and NO FORM type are not valid in this option."
3647+"RTN","PRCSEA",166,0)
3648+ I PRCVD'=1 S PRCVX1="I Y>1",PRCVY1="The NO FORM type is not valid in this option."
3649+"RTN","PRCSEA",167,0)
3650+ W !,PRCVY1,!
3651+"RTN","PRCSEA",168,0)
3652+ W !,"Please enter another form type",!
3653+"RTN","PRCSEA",169,0)
3654+ S PRCSDAA=DA,DIC="^PRCS(410.5,",DIC("A")="FORM TYPE: ",DIC(0)="AEQZ"
3655+"RTN","PRCSEA",170,0)
3656+ S DIC("S")=PRCVX1
3657+"RTN","PRCSEA",171,0)
3658+ D ^DIC
3659+"RTN","PRCSEA",172,0)
3660+ S:Y=-1 Y=2
3661+"RTN","PRCSEA",173,0)
3662+ S DA=PRCSDAA,$P(^PRCS(410,DA,0),"^",4)=+Y,X=+Y
3663+"RTN","PRCSEA",174,0)
3664+ K DIC,PRCVX1,PRCVY1,PRCVD
3665+"RTN","PRCSEA",175,0)
3666+ Q
3667+"RTN","PRCSEA",176,0)
3668+ ;
3669+"RTN","PRCSEA",177,0)
3670+ ;Allow user the option of re entering a form type. If they decline,
3671+"RTN","PRCSEA",178,0)
3672+ ;kill off the transaction and return 1; else return 0
3673+"RTN","PRCSEA",179,0)
3674+BACKOUT(TRNNAME,TRNDA) ;
3675+"RTN","PRCSEA",180,0)
3676+ N DIK,Y,%,DA
3677+"RTN","PRCSEA",181,0)
3678+ F D Q:%'=0
3679+"RTN","PRCSEA",182,0)
3680+ . W !!,"WARNING: WITHOUT A FORM TYPE, TRANSACTION """,TRNNAME,""" WILL BE DELETED!",$C(7)
3681+"RTN","PRCSEA",183,0)
3682+ . W !,"Are you sure you want to delete this transaction" S %=2 D YN^DICN
3683+"RTN","PRCSEA",184,0)
3684+ . Q
3685+"RTN","PRCSEA",185,0)
3686+ I %=2 Q 0
3687+"RTN","PRCSEA",186,0)
3688+ S DIK="^PRCS(410,",DA=TRNDA
3689+"RTN","PRCSEA",187,0)
3690+ D ^DIK
3691+"RTN","PRCSEA",188,0)
3692+ Q 1
3693+"RTN","PRCSEA",189,0)
3694+ ;
3695+"RTN","PRCSEA",190,0)
3696+W2 W !!,"You are not an authorized control point user.",!,"Contact control point official" R X:5 G EXIT
3697+"RTN","PRCSEA",191,0)
3698+W3 Q ; can this subroutine be deleted? commented out in patch PRC*5*140
3699+"RTN","PRCSEA",192,0)
3700+ W !!,"This transaction is assigned temporary transaction number: ",X Q
3701+"RTN","PRCSEA",193,0)
3702+W4 W !!,"Would you like to ",T," another transaction" S %=2 D YN^DICN G W4:%=0 Q
3703+"RTN","PRCSEA",194,0)
3704+W5 W !!,"Would you like to ",T," another request" S %=1 D YN^DICN G W5:%=0 Q
3705+"RTN","PRCSEA",195,0)
3706+W6 W !!,"For the transaction number, use an uppercase alpha as the first character,",!," and then 2-15 alphanumerics, as in 'ADP1'.",! Q
3707+"RTN","PRCSEA",196,0)
3708+ ;*81 Site parameter pull
3709+"RTN","PRCSEA",197,0)
3710+CKPRM S PRCVD=$$GET^XPAR("SYS","PRCV COTS INVENTORY",1,"Q")
3711+"RTN","PRCSEA",198,0)
3712+ Q
3713+"RTN","PRCSEA",199,0)
3714+ ;
3715+"RTN","PRCSEA",200,0)
3716+EXIT K %,C,D,DA,DIC,DIE,DR,PRCS,PDA,PRCSL,T,X,Y,Z,T1,X3,TYPE,PRCVZ
3717+"RTN","PRCSEA",201,0)
3718+ I $D(PRCSERR) K PRCSERR
3719+"RTN","PRCSEA",202,0)
3720+ Q
3721+"RTN","PSBOMH1")
3722+0^38^B71152392
3723+"RTN","PSBOMH1",1,0)
3724+PSBOMH1 ;BIRMINGHAM/EFC,MSC/JDA - MAH ;27APR2009
3725+"RTN","PSBOMH1",2,0)
3726+ ;;3.0;BAR CODE MED ADMIN;**6,3,9,11,26,MSC**;Mar 2004
3727+"RTN","PSBOMH1",3,0)
3728+ ;
3729+"RTN","PSBOMH1",4,0)
3730+ ; Reference/IA
3731+"RTN","PSBOMH1",5,0)
3732+ ; ^DILF/2054
3733+"RTN","PSBOMH1",6,0)
3734+ ; File 200/10060
3735+"RTN","PSBOMH1",7,0)
3736+ ;
3737+"RTN","PSBOMH1",8,0)
3738+EN ;
3739+"RTN","PSBOMH1",9,0)
3740+ ; Load administrations
3741+"RTN","PSBOMH1",10,0)
3742+ S (PSBORD,PSBIEN,PSBR1,PSBADIEN,PSBABR)="",PSBDT=PSBSTRT
3743+"RTN","PSBOMH1",11,0)
3744+ K PSBTSA
3745+"RTN","PSBOMH1",12,0)
3746+ F S PSBDT=$O(^PSB(53.79,"AADT",DFN,PSBDT)) Q:'PSBDT!(PSBDT>PSBSTOP) D
3747+"RTN","PSBOMH1",13,0)
3748+ .F S PSBIEN=$O(^PSB(53.79,"AADT",DFN,PSBDT,PSBIEN)) Q:'PSBIEN Q:'$D(^PSB(53.79,PSBIEN)) L +^PSB(53.79,PSBIEN):3 I $P(^PSB(53.79,PSBIEN,0),U,9)]"" D L -^PSB(53.79,PSBIEN)
3749+"RTN","PSBOMH1",14,0)
3750+ ..Q:'$P($G(^PSB(53.79,PSBIEN,0)),U,6) ; Bad IEN -no evnt dt
3751+"RTN","PSBOMH1",15,0)
3752+ ..Q:$P(^PSB(53.79,PSBIEN,0),U,9)="N" ;NGiven
3753+"RTN","PSBOMH1",16,0)
3754+ ..S PSBORD=$P($G(^PSB(53.79,PSBIEN,.1)),U,1)
3755+"RTN","PSBOMH1",17,0)
3756+ ..; Continuous
3757+"RTN","PSBOMH1",18,0)
3758+ ..D:$P($G(^PSB(53.79,PSBIEN,.1)),U,2)="C"
3759+"RTN","PSBOMH1",19,0)
3760+ ...S X=PSBDT D H^%DTC S PSBWEEK=PSBAR(%H) D CLEAN^PSBVT,PSJ1^PSBVT($P(^PSB(53.79,PSBIEN,0),U,1),$P(^PSB(53.79,PSBIEN,.1),U,1))
3761+"RTN","PSBOMH1",20,0)
3762+ ...I $P(^PSB(53.79,PSBIEN,0),U,6)'=PSBDT,'$$IVPTAB^PSBVDLU3(PSBOTYP,PSBIVT,PSBISYR,PSBCHEMT,PSBMR) D D CLEAN^PSBVT Q ;chck IV audit
3763+"RTN","PSBOMH1",21,0)
3764+ ....S PSBSIEN=PSBIEN
3765+"RTN","PSBOMH1",22,0)
3766+ ....I $P(^PSB(53.79,PSBIEN,0),"^",10)]"" D BAGDTL^PSBRPC2(.PSBAUD,$P(^PSB(53.79,PSBIEN,0),U,10),$P(^PSB(53.79,PSBIEN,.1),U,1))
3767+"RTN","PSBOMH1",23,0)
3768+ ....S PSBIEN=PSBSIEN K PSBSIEN
3769+"RTN","PSBOMH1",24,0)
3770+ ....S X=0 F S X=$O(PSBAUD(X)) Q:X="" I $P(PSBAUD(X),U,3)="" K PSBAUD(X)
3771+"RTN","PSBOMH1",25,0)
3772+ ....S X=0 F S X=$O(PSBAUD(X)) Q:X="" Q:$P(PSBAUD(X),U,1)=PSBDT
3773+"RTN","PSBOMH1",26,0)
3774+ ....I X="" K PSBAUD Q
3775+"RTN","PSBOMH1",27,0)
3776+ ....I '$D(PSBAUD(X)) K PSBAUD Q
3777+"RTN","PSBOMH1",28,0)
3778+ ....S PSBS=$P(PSBAUD(X),U,3)
3779+"RTN","PSBOMH1",29,0)
3780+ ....I PSBS="GIVEN",$P($G(PSBAUD(X-1)),U,3)="NOT GIVEN" Q
3781+"RTN","PSBOMH1",30,0)
3782+ ....I PSBS="NOT GIVEN" Q
3783+"RTN","PSBOMH1",31,0)
3784+ ....S PSBS=$S(PSBS="INFUSING":"I",PSBS="GIVEN":"G",PSBS="COMPLETED":"C",PSBS="HELD":"H",PSBS="REFUSED":"R",PSBS="REMOVED":"RM",PSBS="STOPPED":"S",PSBS["MISSING":"M",1:"NOACTION")
3785+"RTN","PSBOMH1",32,0)
3786+ ....D PSBSTIV^PSBOMH2
3787+"RTN","PSBOMH1",33,0)
3788+ ....S X=PSBDT_U_$P(PSBAUD(X),U,2)_U_PSBS_U_PSBIEN
3789+"RTN","PSBOMH1",34,0)
3790+ ....S Y=$O(^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,""),-1)+1
3791+"RTN","PSBOMH1",35,0)
3792+ ....S ^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,Y)=X
3793+"RTN","PSBOMH1",36,0)
3794+ ....S ^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,0)=Y
3795+"RTN","PSBOMH1",37,0)
3796+ ....D PSBOUT($P((X),"^",1),$P((X),"^",2))
3797+"RTN","PSBOMH1",38,0)
3798+ ....K PSBAUD
3799+"RTN","PSBOMH1",39,0)
3800+ ...S PSBINIT=$$GET1^DIQ(53.79,PSBIEN_",","ACTION BY:INITIAL")
3801+"RTN","PSBOMH1",40,0)
3802+ ...S PSBNAME=$$GET1^DIQ(53.79,PSBIEN_",","ACTION BY:NAME")
3803+"RTN","PSBOMH1",41,0)
3804+ ...I PSBINIT="" S PSBINIT=99
3805+"RTN","PSBOMH1",42,0)
3806+ ...;get instrc info - audt log
3807+"RTN","PSBOMH1",43,0)
3808+ ...I $D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D
3809+"RTN","PSBOMH1",44,0)
3810+ ....D INSTR^PSBOMH
3811+"RTN","PSBOMH1",45,0)
3812+ ....S ^TMP("PSB",$J,"LEGEND",PSBINIT,PSBNAME)=""
3813+"RTN","PSBOMH1",46,0)
3814+ ...I PSBINIT[99 S PSBINIT=""
3815+"RTN","PSBOMH1",47,0)
3816+ ...I $P(^PSB(53.79,PSBIEN,0),U,9)="G",PSBDT=$P(^PSB(53.79,PSBIEN,0),U,6) D PSBCK1^PSBOMH2("A")
3817+"RTN","PSBOMH1",48,0)
3818+ ...I $P(^PSB(53.79,PSBIEN,0),U,9)'="G",PSBDT=$P(^PSB(53.79,PSBIEN,0),U,6) D PSBCK1^PSBOMH2("B")
3819+"RTN","PSBOMH1",49,0)
3820+ ...I PSBDT'=$P(^PSB(53.79,PSBIEN,0),U,6),$P(^PSB(53.79,PSBIEN,0),U,9)="RM" D
3821+"RTN","PSBOMH1",50,0)
3822+ ....D DDAUD
3823+"RTN","PSBOMH1",51,0)
3824+ ....S I="" F S I=$O(PSBTAR(I),-1) Q:I="" I $P(PSBTAR(I),U,1)=PSBDT D
3825+"RTN","PSBOMH1",52,0)
3826+ .....S PSBS=$P(PSBTAR(I),U,3)
3827+"RTN","PSBOMH1",53,0)
3828+ .....I PSBS="GIVEN",$P($G(PSBTAR(I-1)),U,3)="NOT GIVEN" Q ; canceled - not given
3829+"RTN","PSBOMH1",54,0)
3830+ .....I PSBS="NOT GIVEN" Q
3831+"RTN","PSBOMH1",55,0)
3832+ .....S PSBS=$S(PSBS="INFUSING":"I",PSBS="GIVEN":"G",PSBS="COMPLETED":"C",PSBS="HELD":"H",PSBS="REFUSED":"R",PSBS="REMOVED":"RM",PSBS="STOPPED":"S",PSBS["MISSING":"M",1:"NO ACTION")
3833+"RTN","PSBOMH1",56,0)
3834+ .....D PSBCTAR^PSBOMH2
3835+"RTN","PSBOMH1",57,0)
3836+ .....S X=$P(PSBTAR(I),U,1,2)_U_PSBS_U_PSBIEN
3837+"RTN","PSBOMH1",58,0)
3838+ ...S Y=$O(^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,""),-1)+1
3839+"RTN","PSBOMH1",59,0)
3840+ ...S ^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,Y)=X
3841+"RTN","PSBOMH1",60,0)
3842+ ...S ^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,0)=Y
3843+"RTN","PSBOMH1",61,0)
3844+ ...D PSBOUT($P((X),"^",1),$P((X),"^",2))
3845+"RTN","PSBOMH1",62,0)
3846+ ...Q
3847+"RTN","PSBOMH1",63,0)
3848+ ..; 1-Time On Call or PRN
3849+"RTN","PSBOMH1",64,0)
3850+ ..D:$P($G(^PSB(53.79,PSBIEN,.1)),U,2)'="C"
3851+"RTN","PSBOMH1",65,0)
3852+ ...I PSBDT'=$$GET1^DIQ(53.79,PSBIEN_",",.06,"I") Q
3853+"RTN","PSBOMH1",66,0)
3854+ ...S PSBINIT=$$GET1^DIQ(53.79,PSBIEN_",","ACTION BY:INITIAL")
3855+"RTN","PSBOMH1",67,0)
3856+ ...S PSBNAME=$$GET1^DIQ(53.79,PSBIEN_",","ACTION BY:NAME")
3857+"RTN","PSBOMH1",68,0)
3858+ ...I PSBINIT="" S PSBINIT=99
3859+"RTN","PSBOMH1",69,0)
3860+ ...S (PSBXA,PSBM)=1,(PSBZ,PSBT,PSBFLG)=""
3861+"RTN","PSBOMH1",70,0)
3862+ ...I $$GET1^DIQ(53.79,PSBIEN_",",.09)="REMOVED" D
3863+"RTN","PSBOMH1",71,0)
3864+ ....F I=1:1 S PSBXA=$O(^PSB(53.79,PSBIEN,.9,PSBXA)) Q:PSBXA="" I PSBXA?1.3N S PSBZ=PSBZ+1,PSBT(PSBZ)=^PSB(53.79,PSBIEN,.9,PSBXA,0)
3865+"RTN","PSBOMH1",72,0)
3866+ ....F S=1:1 Q:PSBM<1 S PSBM=PSBZ-S I (PSBM>0) I (PSBT(PSBM)["GIVEN") S PSBFLG="1" S PRELINE1=$P(PSBT(PSBM),"'",2)_" "_$$GET1^DIQ(53.79,PSBIEN_",",.04)_" "_$E($P(PSBT(PSBM),"'",4),1,3) Q
3867+"RTN","PSBOMH1",73,0)
3868+ ...I $D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D
3869+"RTN","PSBOMH1",74,0)
3870+ ....D INSTR^PSBOMH
3871+"RTN","PSBOMH1",75,0)
3872+ ....S ^TMP("PSB",$J,"LEGEND",PSBINIT,PSBNAME)=""
3873+"RTN","PSBOMH1",76,0)
3874+ ...I '$D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D PSBOUT(PSBDT,PSBINIT)
3875+"RTN","PSBOMH1",77,0)
3876+ ...S PSBLINE1=$$GET1^DIQ(53.79,PSBIEN_",",.09)_" "_$$GET1^DIQ(53.79,PSBIEN_",",.06)_" "_PSBINIT_" "_$$GET1^DIQ(53.79,PSBIEN_",",.21),PSBLINE2=""
3877+"RTN","PSBOMH1",78,0)
3878+ ...I PSBINIT[99 S PSBINIT=""
3879+"RTN","PSBOMH1",79,0)
3880+ ...D:$P($G(^PSB(53.79,PSBIEN,.1)),U,2)="P"
3881+"RTN","PSBOMH1",80,0)
3882+ ....I $P($G(^PSB(53.79,PSBIEN,.2)),U,2)="" S PSBLINE2=" Results: <No PRN Results On File>"
3883+"RTN","PSBOMH1",81,0)
3884+ ....E D
3885+"RTN","PSBOMH1",82,0)
3886+ .....S PSBINIT=$$GET1^DIQ(53.79,PSBIEN_",","PRN EFFECTIVENESS ENTERED BY:INITIAL")
3887+"RTN","PSBOMH1",83,0)
3888+ .....S PSBNAME=$$GET1^DIQ(53.79,PSBIEN_",","PRN EFFECTIVENESS ENTERED BY:NAME")
3889+"RTN","PSBOMH1",84,0)
3890+ .....I PSBINIT="" S PSBINIT=99
3891+"RTN","PSBOMH1",85,0)
3892+ .....I $D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D
3893+"RTN","PSBOMH1",86,0)
3894+ ......S PSBINIT=PSBINIT_"*",PSBNAME=PSBNAME_"/"_$P(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."),0),U,3)_" "_$$GET1^DIQ(53.79,PSBIEN_",",.24)
3895+"RTN","PSBOMH1",87,0)
3896+ ......S ^TMP("PSB",$J,"LEGEND",PSBINIT,PSBNAME)=""
3897+"RTN","PSBOMH1",88,0)
3898+ .....I '$D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D
3899+"RTN","PSBOMH1",89,0)
3900+ ......D:$D(^PSB(53.79,PSBIEN,.9,0))
3901+"RTN","PSBOMH1",90,0)
3902+ .......S (PSBXA2,PSBFG)=0,PSBEFFDT=$P(^PSB(53.79,PSBIEN,.2),U,4) F S PSBXA2=$O(^PSB(53.79,PSBIEN,.9,PSBXA2)) Q:+PSBXA2'>0 D Q:PSBFG=1
3903+"RTN","PSBOMH1",91,0)
3904+ ........D:($P(^PSB(53.79,PSBIEN,.9,PSBXA2,0),U)=PSBEFFDT)&($P(^PSB(53.79,PSBIEN,.9,PSBXA2,0),U,3)["Instruct")&($P(^PSB(53.79,PSBIEN,.2),U,3)=$P(^PSB(53.79,PSBIEN,.9,PSBXA2,0),U,2))
3905+"RTN","PSBOMH1",92,0)
3906+ .........S PSBINIT=PSBINIT_"*",PSBNAME=PSBNAME_"/"_$P(^PSB(53.79,PSBIEN,.9,PSBXA2,0),U,3)_" "_$$GET1^DIQ(53.79,PSBIEN_",",.24)
3907+"RTN","PSBOMH1",93,0)
3908+ .........S ^TMP("PSB",$J,"LEGEND",PSBINIT,PSBNAME)="",PSBFG=1
3909+"RTN","PSBOMH1",94,0)
3910+ .....S PSBLINE2=" Results: "_$$GET1^DIQ(53.79,PSBIEN_",",.22)
3911+"RTN","PSBOMH1",95,0)
3912+ .....S PSBRTXTW=" Entered By "_PSBINIT_" on "_$$GET1^DIQ(53.79,PSBIEN_",",.24)
3913+"RTN","PSBOMH1",96,0)
3914+ .....I PSBINIT[99 S PSBINIT=""
3915+"RTN","PSBOMH1",97,0)
3916+ ...S X=PSBDT D H^%DTC F PSBWEEK=PSBAR(%H):-7 Q:$D(^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",0))!('$D(PSBAR(PSBWEEK)))
3917+"RTN","PSBOMH1",98,0)
3918+ ...S X=$O(^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",""),-1)+1
3919+"RTN","PSBOMH1",99,0)
3920+ ...I PSBFLG="1" S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X)=PRELINE1
3921+"RTN","PSBOMH1",100,0)
3922+ ...S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+1)=PSBLINE1
3923+"RTN","PSBOMH1",101,0)
3924+ ...I $G(PSBLINE2)]"" D
3925+"RTN","PSBOMH1",102,0)
3926+ ....I $L(PSBLINE2)<90 S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+2)=PSBLINE2 S:$$GET1^DIQ(53.79,PSBIEN_",",.24)'="" ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+3)=" "_PSBRTXTW
3927+"RTN","PSBOMH1",103,0)
3928+ ....I $L(PSBLINE2)>90 D
3929+"RTN","PSBOMH1",104,0)
3930+ .....S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+2)=$E(PSBLINE2,1,90)
3931+"RTN","PSBOMH1",105,0)
3932+ .....S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+3)=" "_$E(PSBLINE2,91,161)
3933+"RTN","PSBOMH1",106,0)
3934+ .....I $L(PSBLINE2)'>161 S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+4)=" "_PSBRTXTW
3935+"RTN","PSBOMH1",107,0)
3936+ .....I $L(PSBLINE2)>161 S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+4)=" "_$E(PSBLINE2,162,200),^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+5)=" "_PSBRTXTW
3937+"RTN","PSBOMH1",108,0)
3938+ Q
3939+"RTN","PSBOMH1",109,0)
3940+ ;
3941+"RTN","PSBOMH1",110,0)
3942+DDAUD ; audits for dispen drugs
3943+"RTN","PSBOMH1",111,0)
3944+ ;
3945+"RTN","PSBOMH1",112,0)
3946+ M PSBMLA=^PSB(53.79,PSBIEN)
3947+"RTN","PSBOMH1",113,0)
3948+ S PSBGA="" I $D(PSBMLA(.9,0)) D
3949+"RTN","PSBOMH1",114,0)
3950+ .F PSBX=1:1 Q:'$D(PSBMLA(.9,PSBX)) I ((PSBMLA(.9,PSBX,0)["ACTION STATUS")!(PSBMLA(.9,PSBX,0)["ADMINISTRATION STATUS")) D Q
3951+"RTN","PSBOMH1",115,0)
3952+ ..I $D(PSBMLA(.9,PSBX-2,0)) D DT^DILF("ENPST",$P(PSBMLA(.9,PSBX-2,0),"'",2),.PSBDATE)
3953+"RTN","PSBOMH1",116,0)
3954+ ..I '$D(PSBMLA(.9,PSBX-2,0)) S PSBDATE=$P(^PSB(53.79,PSBIEN,0),U,6)
3955+"RTN","PSBOMH1",117,0)
3956+ ..S PSBTMP(10000000-PSBDATE,"B")=PSBDATE_U_$$INITIAL^PSBRPC2($P(PSBMLA(0),U,5))_U_$P(PSBMLA(.9,PSBX,0),"'",2)
3957+"RTN","PSBOMH1",118,0)
3958+ ..S PSBGA=1
3959+"RTN","PSBOMH1",119,0)
3960+ .F PSBX=1:1 Q:'$D(PSBMLA(.9,PSBX)) I ((PSBMLA(.9,PSBX,0)["ACTION STATUS")!(PSBMLA(.9,PSBX,0)["ADMINISTRATION STATUS")) D
3961+"RTN","PSBOMH1",120,0)
3962+ ..S PSBTMP(10000000-$P(PSBMLA(.9,PSBX,0),U,1),"B")=$P(PSBMLA(.9,PSBX,0),U,1)_U_$$INITIAL^PSBRPC2($P(PSBMLA(.9,PSBX,0),U,2))_U_$P($P(PSBMLA(.9,PSBX,0),U,3),"'",2)
3963+"RTN","PSBOMH1",121,0)
3964+ ..S PSBGA=1
3965+"RTN","PSBOMH1",122,0)
3966+ I PSBGA'=1 S PSBTMP(10000000-$P(PSBMLA(0),U,6),"A")=$P(PSBMLA(0),U,6)_U_$$INITIAL^PSBRPC2($P(PSBMLA(0),U,7))
3967+"RTN","PSBOMH1",123,0)
3968+ S PSBQRY="PSBTMP",PSBCNT=1 F S PSBPQRY=PSBQRY S PSBQRY=$Q(@PSBQRY) Q:PSBQRY="" D ; does comment go with action
3969+"RTN","PSBOMH1",124,0)
3970+ .I PSBPQRY="PSBTMP" S PSBTAR(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1 Q ; no prev action
3971+"RTN","PSBOMH1",125,0)
3972+ .I $QS(PSBPQRY,2)="C" S PSBTAR(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1 Q ; prev line = comment
3973+"RTN","PSBOMH1",126,0)
3974+ .I $QS(PSBQRY,2)="C",$E($P(@PSBPQRY,U,1),1,12)=$E($P(@PSBQRY,U,1),1,12),$P(@PSBPQRY,U,2)=$P(@PSBQRY,U,2) D Q
3975+"RTN","PSBOMH1",127,0)
3976+ ..S X=$P(@PSBQRY,U,4) S:X[":" X=$P(X,":",2) S $P(PSBTAR(PSBCNT-1),U,4)=X Q
3977+"RTN","PSBOMH1",128,0)
3978+ .S PSBTAR(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1
3979+"RTN","PSBOMH1",129,0)
3980+ Q
3981+"RTN","PSBOMH1",130,0)
3982+ ;
3983+"RTN","PSBOMH1",131,0)
3984+PSBOUT(PSBTET,PSBOT1) ;
3985+"RTN","PSBOMH1",132,0)
3986+ I '$D(^PSB(53.79,PSBIEN,.9,0)) D PSBENT^PSBOMH2(PSBOT1)
3987+"RTN","PSBOMH1",133,0)
3988+ S PSBIDA="" I $P(^PSB(53.79,PSBIEN,0),U,6)=PSBTET S PSBIDA=$P(^PSB(53.79,PSBIEN,0),U,7),PSBOT1=$P(^VA(200,PSBIDA,0),"^",2),PSBNAME=$P(^VA(200,PSBIDA,0),"^",1)
3989+"RTN","PSBOMH1",134,0)
3990+ S PSBXA1=0
3991+"RTN","PSBOMH1",135,0)
3992+ F S PSBXA1=$O(^PSB(53.79,PSBIEN,.9,PSBXA1)) Q:+PSBXA1'>0 I PSBXA1'=0 D Q:$G(PSBOT1)["*"
3993+"RTN","PSBOMH1",136,0)
3994+ .I $L(PSBXA1)<4 D
3995+"RTN","PSBOMH1",137,0)
3996+ ..I $P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",1)=PSBTET D
3997+"RTN","PSBOMH1",138,0)
3998+ ...S:$G(PSBIDA)="" PSBIDA=$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",2),PSBOT1=$P(^VA(200,PSBIDA,0),"^",2),PSBNAME=$P(^VA(200,PSBIDA,0),"^",1)
3999+"RTN","PSBOMH1",139,0)
4000+ ...I (PSBIDA=$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",2)),$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",3)["Instruct" D
4001+"RTN","PSBOMH1",140,0)
4002+ ....S INSDD=$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",1),Y=INSDD D DD^%DT S INSDD=Y
4003+"RTN","PSBOMH1",141,0)
4004+ ....S PSBOT1=PSBOT1_"*",PSBNAME=PSBNAME_"/"_$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),U,3)_" "_INSDD
4005+"RTN","PSBOMH1",142,0)
4006+ I $G(PSBIDA)="",$P(^PSB(53.79,PSBIEN,0),U,4)=PSBTET D
4007+"RTN","PSBOMH1",143,0)
4008+ .S PSBIDA=$P(^PSB(53.79,PSBIEN,0),U,5),PSBOT1=$P(^VA(200,PSBIDA,0),"^",2),PSBNAME=$P(^VA(200,PSBIDA,0),"^",1)
4009+"RTN","PSBOMH1",144,0)
4010+ I $G(PSBNAME)="" D
4011+"RTN","PSBOMH1",145,0)
4012+ . S PSBIDA=$P(^PSB(53.79,PSBIEN,0),U,5),PSBOT1=$P(^VA(200,PSBIDA,0),"^",2),PSBNAME=$P(^VA(200,PSBIDA,0),"^",1)
4013+"RTN","PSBOMH1",146,0)
4014+ I $G(PSBOT1)]""&($G(PSBNAME)]"") S ^TMP("PSB",$J,"LEGEND",PSBOT1,PSBNAME)="" ;MSC
4015+"RTN","PSBOMH1",147,0)
4016+ Q
4017+"RTN","PSBOMH1",148,0)
4018+ ;
4019+"RTN","PSBRPC2")
4020+0^39^B44967923
4021+"RTN","PSBRPC2",1,0)
4022+PSBRPC2 ;BIRMINGHAM/EFC,MSC/JDA - BCMA RPC BROKER CALLS ;27APR2009
4023+"RTN","PSBRPC2",2,0)
4024+ ;;3.0;BAR CODE MED ADMIN;**6,3,16,MSC**;Mar 2004
4025+"RTN","PSBRPC2",3,0)
4026+ ;
4027+"RTN","PSBRPC2",4,0)
4028+ ; Reference/IA
4029+"RTN","PSBRPC2",5,0)
4030+ ; File 50/221
4031+"RTN","PSBRPC2",6,0)
4032+ ; File 52.6/436
4033+"RTN","PSBRPC2",7,0)
4034+ ; File 52.7/437
4035+"RTN","PSBRPC2",8,0)
4036+ ; File 200/10060
4037+"RTN","PSBRPC2",9,0)
4038+ ;
4039+"RTN","PSBRPC2",10,0)
4040+GETOHIST(RESULTS,DFN,PSBORD) ;
4041+"RTN","PSBRPC2",11,0)
4042+ S RESULTS=$NAME(^TMP("PSB",$J)),PSB=0
4043+"RTN","PSBRPC2",12,0)
4044+ S ^TMP("PSB",$J,0)=1,^TMP("PSB",$J,1)="-1^No History On File"
4045+"RTN","PSBRPC2",13,0)
4046+ D NOW^%DTC S PSBNOW=$P(%,".",1),PSBNOWZ=%
4047+"RTN","PSBRPC2",14,0)
4048+ D EN^PSBPOIV(DFN,PSBORD)
4049+"RTN","PSBRPC2",15,0)
4050+ S PSBUID=DFN_"V"_99999 F S PSBUID=$O(^TMP("PSBAR",$J,PSBUID),-1) Q:PSBUID="" D
4051+"RTN","PSBRPC2",16,0)
4052+ .S PSBUIDS=^TMP("PSBAR",$J,PSBUID)
4053+"RTN","PSBRPC2",17,0)
4054+ .I ((PSBOSTS="D")!(PSBOSTS="E")),$P(PSBUIDS,U,2)'="I",$P(PSBUIDS,U,2)'="S" Q ; only want the infusing bag on a dc'ed order
4055+"RTN","PSBRPC2",18,0)
4056+ .I (PSBOSTS="A"),(PSBOSP<PSBNOWZ),$P(PSBUIDS,U,2)'="I",$P(PSBUIDS,U,2)'="S" S PSBOSTS="E" Q ; only want the infusing bag on an expired order
4057+"RTN","PSBRPC2",19,0)
4058+ .I $P(PSBUIDS,U,2)'="" D Q ; get orders from med log (53.79)
4059+"RTN","PSBRPC2",20,0)
4060+ ..S PSBMLOR=$P(PSBUIDS,U,4),PSBIEN=$O(^PSB(53.79,"AUID",DFN,PSBMLOR,PSBUID,""))
4061+"RTN","PSBRPC2",21,0)
4062+ ..S PSBLADT=$P(^PSB(53.79,PSBIEN,0),U,6)
4063+"RTN","PSBRPC2",22,0)
4064+ ..S PSBLASTS=$P(^PSB(53.79,PSBIEN,0),U,9)
4065+"RTN","PSBRPC2",23,0)
4066+ ..I PSBLASTS="M",$P(PSBUIDS,U,8)'="" Q
4067+"RTN","PSBRPC2",24,0)
4068+ ..S PSBINJS=$P(^PSB(53.79,PSBIEN,.1),U,6)
4069+"RTN","PSBRPC2",25,0)
4070+ ..S PSB=PSB+1,^TMP("PSB",$J,PSB)=PSBORD_U_PSBUID_U_PSBIEN_U_PSBLADT_U_PSBLASTS_U_PSBINJS
4071+"RTN","PSBRPC2",26,0)
4072+ ..F PSBL=1:1 Q:'$D(^PSB(53.79,PSBIEN,.6,PSBL,0)) S PSB=PSB+1,^TMP("PSB",$J,PSB)="ADD^"_^PSB(53.79,PSBIEN,.6,PSBL,0)
4073+"RTN","PSBRPC2",27,0)
4074+ ..F PSBL=1:1 Q:'$D(^PSB(53.79,PSBIEN,.7,PSBL,0)) S PSB=PSB+1,^TMP("PSB",$J,PSB)="SOL^"_^PSB(53.79,PSBIEN,.7,PSBL,0)
4075+"RTN","PSBRPC2",28,0)
4076+ ..S PSB=PSB+1,^TMP("PSB",$J,PSB)="END"
4077+"RTN","PSBRPC2",29,0)
4078+ .I $P(PSBUIDS,U,1)="I" Q ; IV parameters say bag is invalid
4079+"RTN","PSBRPC2",30,0)
4080+ .I $P(PSBUIDS,U,8)'="",$P(PSBUIDS,U,2)'="I",$P(PSBUIDS,U,2)'="S" Q ; label has been reprinted/distroyed etc. - bag is not infusing or stopped
4081+"RTN","PSBRPC2",31,0)
4082+ .S PSB=PSB+1,^TMP("PSB",$J,PSB)=$P(PSBUIDS,U,5)_U_PSBUID_U_U_PSBNOW_U_"A"
4083+"RTN","PSBRPC2",32,0)
4084+ .S PSBUIDP=$P(PSBUIDS,U,10,999)
4085+"RTN","PSBRPC2",33,0)
4086+ .F Y=3:1 S PSBMEDTY=$P(PSBUIDP,U,Y) Q:PSBMEDTY="" D
4087+"RTN","PSBRPC2",34,0)
4088+ ..D CLEAN^PSBVT,PSJ1^PSBVT(DFN,$P(PSBUIDS,U,5))
4089+"RTN","PSBRPC2",35,0)
4090+ ..I $P(PSBMEDTY,";",1)="ADD" F Z=1:1 S PSBAD=$G(PSBADA(Z)) Q:PSBAD="" I $P(PSBADA(Z),U,2)=$P(PSBMEDTY,";",2) S PSB=PSB+1,^TMP("PSB",$J,PSB)=PSBADA(Z) Q
4091+"RTN","PSBRPC2",36,0)
4092+ ..I $P(PSBMEDTY,";",1)="SOL" F Z=1:1 S PSBSOL=$G(PSBSOLA(Z)) Q:PSBSOL="" I $P(PSBSOLA(Z),U,2)=$P(PSBMEDTY,";",2) S PSB=PSB+1,^TMP("PSB",$J,PSB)=PSBSOLA(Z) Q
4093+"RTN","PSBRPC2",37,0)
4094+ .D CLEAN^PSBVT,PSJ1^PSBVT(DFN,PSBORD)
4095+"RTN","PSBRPC2",38,0)
4096+ .S PSB=PSB+1,^TMP("PSB",$J,PSB)="END"
4097+"RTN","PSBRPC2",39,0)
4098+ F II=1:1 S I=$P(PSBONXS,U,II) Q:I="" D ; get ward stocks
4099+"RTN","PSBRPC2",40,0)
4100+ .S PSBUID="" F S PSBUID=$O(^PSB(53.79,"AUID",DFN,I,PSBUID)) Q:PSBUID="" D
4101+"RTN","PSBRPC2",41,0)
4102+ ..I PSBUID'["WS" Q ; not a ward stock
4103+"RTN","PSBRPC2",42,0)
4104+ ..S PSBIEN=$O(^PSB(53.79,"AUID",DFN,I,PSBUID,""))
4105+"RTN","PSBRPC2",43,0)
4106+ ..S PSBLADT=$P(^PSB(53.79,PSBIEN,0),U,6)
4107+"RTN","PSBRPC2",44,0)
4108+ ..S PSBLASTS=$P(^PSB(53.79,PSBIEN,0),U,9)
4109+"RTN","PSBRPC2",45,0)
4110+ ..I PSBOSTS="D",PSBLASTS'="I",PSBLASTS'="S" Q ; want "not completed" on DC'ed orders
4111+"RTN","PSBRPC2",46,0)
4112+ ..I (PSBOSTS="A"),(PSBOSP<PSBNOWZ),PSBLASTS'="I",PSBLASTS'="S" Q
4113+"RTN","PSBRPC2",47,0)
4114+ ..S PSBINJS=$P(^PSB(53.79,PSBIEN,.1),U,6)
4115+"RTN","PSBRPC2",48,0)
4116+ ..S PSB=PSB+1,^TMP("PSB",$J,PSB)=PSBORD_U_PSBUID_U_PSBIEN_U_PSBLADT_U_PSBLASTS_U_PSBINJS
4117+"RTN","PSBRPC2",49,0)
4118+ ..F PSBL=1:1 Q:'$D(^PSB(53.79,PSBIEN,.6,PSBL,0)) S PSB=PSB+1,^TMP("PSB",$J,PSB)="ADD^"_^PSB(53.79,PSBIEN,.6,PSBL,0)
4119+"RTN","PSBRPC2",50,0)
4120+ ..F PSBL=1:1 Q:'$D(^PSB(53.79,PSBIEN,.7,PSBL,0)) S PSB=PSB+1,^TMP("PSB",$J,PSB)="SOL^"_^PSB(53.79,PSBIEN,.7,PSBL,0)
4121+"RTN","PSBRPC2",51,0)
4122+ ..S PSB=PSB+1,^TMP("PSB",$J,PSB)="END"
4123+"RTN","PSBRPC2",52,0)
4124+ S ^TMP("PSB",$J,0)=PSB
4125+"RTN","PSBRPC2",53,0)
4126+ K ^TMP("PSBAR",$J)
4127+"RTN","PSBRPC2",54,0)
4128+ Q
4129+"RTN","PSBRPC2",55,0)
4130+ ;
4131+"RTN","PSBRPC2",56,0)
4132+BAGDTL(RESULTS,PSBUID,PSBORD) ; bag detail
4133+"RTN","PSBRPC2",57,0)
4134+ I '$G(DFN)!PSBUID S DFN=+PSBUID ;**GFT/MSC
4135+"RTN","PSBRPC2",58,0)
4136+ S (PSBIEN,X)="" F S X=$O(^PSB(53.79,"AUID",DFN,X)) Q:X="" S:$D(^PSB(53.79,"AUID",DFN,X,PSBUID)) PSBIEN=$O(^PSB(53.79,"AUID",DFN,X,PSBUID,"")) Q:PSBIEN]""
4137+"RTN","PSBRPC2",59,0)
4138+ I PSBIEN'>0 S RESULTS(0)=1,RESULTS(1)="-1^No History On File" Q
4139+"RTN","PSBRPC2",60,0)
4140+ M PSBMLA=^PSB(53.79,PSBIEN)
4141+"RTN","PSBRPC2",61,0)
4142+ S X=$P(^PSB(53.79,PSBIEN,0),U,9)
4143+"RTN","PSBRPC2",62,0)
4144+ S PSBLAC=$S(X="I":"INFUSING",X="G":"GIVEN",X="C":"COMPLETE",X="H":"HELD",X="R":"REFUSED",X="RM":"REMOVED",X="S":"STOPPED",X="M":"MISSING",1:"NO ACTION")
4145+"RTN","PSBRPC2",63,0)
4146+ ; comments
4147+"RTN","PSBRPC2",64,0)
4148+ S PSBX="0" F S PSBX=$O(PSBMLA(.3,PSBX)) Q:PSBX="" S PSBTMP(10000000-$P(PSBMLA(.3,PSBX,0),U,3),"C")=$P(PSBMLA(.3,PSBX,0),U,3)_U_$$INITIAL($P(PSBMLA(.3,PSBX,0),U,2))_U_U_$P(PSBMLA(.3,PSBX,0),U,1)
4149+"RTN","PSBRPC2",65,0)
4150+ ; audit
4151+"RTN","PSBRPC2",66,0)
4152+ S PSBGA="" I $D(PSBMLA(.9,0)) D
4153+"RTN","PSBRPC2",67,0)
4154+ .S PSBX="0" F S PSBX=$O(PSBMLA(.9,PSBX)) Q:PSBX="" I ((PSBMLA(.9,PSBX,0)["ACTION STATUS")!(PSBMLA(.9,PSBX,0)["ADMINISTRATION STATUS")) D Q
4155+"RTN","PSBRPC2",68,0)
4156+ ..S PSBDATE=$P(PSBMLA(0),U,4) I (PSBX-2)>0 D DT^DILF("ENPST",$P(PSBMLA(.9,PSBX-2,0),"'",2),.PSBDATE)
4157+"RTN","PSBRPC2",69,0)
4158+ ..S PSBTMP(10000000-PSBDATE,"B")=PSBDATE_U_$$INITIAL($P(PSBMLA(0),U,5))_U_$P(PSBMLA(.9,PSBX,0),"'",2)
4159+"RTN","PSBRPC2",70,0)
4160+ ..S PSBGA=1
4161+"RTN","PSBRPC2",71,0)
4162+ .S PSBX="0" F S PSBX=$O(PSBMLA(.9,PSBX)) Q:PSBX="" I ((PSBMLA(.9,PSBX,0)["ACTION STATUS")!(PSBMLA(.9,PSBX,0)["ADMINISTRATION STATUS")) D
4163+"RTN","PSBRPC2",72,0)
4164+ ..S PSBTMP(10000000-$P(PSBMLA(.9,PSBX,0),U,1),"B")=$P(PSBMLA(.9,PSBX,0),U,1)_U_$$INITIAL($P(PSBMLA(.9,PSBX,0),U,2))_U_$P($P(PSBMLA(.9,PSBX,0),U,3),"'",2)
4165+"RTN","PSBRPC2",73,0)
4166+ ..S PSBGA=1
4167+"RTN","PSBRPC2",74,0)
4168+ I PSBGA'=1 S PSBTMP(10000000-$P(PSBMLA(0),U,6),"A")=$P(PSBMLA(0),U,6)_U_$$INITIAL($P(PSBMLA(0),U,7))_U_PSBLAC
4169+"RTN","PSBRPC2",75,0)
4170+ S PSBQRY="PSBTMP",PSBCNT=1 F S PSBPQRY=PSBQRY S PSBQRY=$Q(@PSBQRY) Q:PSBQRY="" D ; does comment go with action
4171+"RTN","PSBRPC2",76,0)
4172+ .I PSBPQRY="PSBTMP" S RESULTS(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1 Q ; no previous action
4173+"RTN","PSBRPC2",77,0)
4174+ .I $QS(PSBPQRY,2)="C" S RESULTS(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1 Q ; previous line is a comment
4175+"RTN","PSBRPC2",78,0)
4176+ .I $QS(PSBQRY,2)="C",$E($P(@PSBPQRY,U,1),1,12)=$E($P(@PSBQRY,U,1),1,12),$P(@PSBPQRY,U,2)=$P(@PSBQRY,U,2) S X=$P(@PSBQRY,U,4),$P(RESULTS(PSBCNT-1),U,4)=X Q
4177+"RTN","PSBRPC2",79,0)
4178+ .S RESULTS(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1
4179+"RTN","PSBRPC2",80,0)
4180+ S RESULTS(0)=PSBCNT-1
4181+"RTN","PSBRPC2",81,0)
4182+ K PSBMLA,PSBIEN,PSBTMP,PSBQRY
4183+"RTN","PSBRPC2",82,0)
4184+ Q
4185+"RTN","PSBRPC2",83,0)
4186+ ;
4187+"RTN","PSBRPC2",84,0)
4188+INITIAL(PSBDUZ) ;
4189+"RTN","PSBRPC2",85,0)
4190+ Q $$GET1^DIQ(200,PSBDUZ,"INITIAL")
4191+"RTN","PSBRPC2",86,0)
4192+SCANMED(RESULTS,PSBDIEN,PSBTAB) ; Lookup Medication
4193+"RTN","PSBRPC2",87,0)
4194+ ;
4195+"RTN","PSBRPC2",88,0)
4196+ ; RPC: PSB SCANMED
4197+"RTN","PSBRPC2",89,0)
4198+ ;
4199+"RTN","PSBRPC2",90,0)
4200+ ; Description:
4201+"RTN","PSBRPC2",91,0)
4202+ ; Does a lookup on file 50 returns -1 on invalid lookup or
4203+"RTN","PSBRPC2",92,0)
4204+ ; IEN^DrugName on success
4205+"RTN","PSBRPC2",93,0)
4206+ ;
4207+"RTN","PSBRPC2",94,0)
4208+ D NOW^%DTC S PSBDT=%
4209+"RTN","PSBRPC2",95,0)
4210+ S PSBCNT=0
4211+"RTN","PSBRPC2",96,0)
4212+ I $L(PSBDIEN)>40 S PSBDIEN=$E(PSBDIEN,1,40)
4213+"RTN","PSBRPC2",97,0)
4214+ S RESULTS(PSBCNT)=1
4215+"RTN","PSBRPC2",98,0)
4216+ S PSBCNT=PSBCNT+1,RESULTS(PSBCNT)="-1^Invalid Medication Lookup"
4217+"RTN","PSBRPC2",99,0)
4218+ I $$GET^XPAR("DIV","PSB ROBOT RX"),PSBDIEN?1"3"15N!(PSBDIEN?1"3"17N),123[$E(PSBDIEN,12) S PSBDIEN=$E(PSBDIEN,2,11)
4219+"RTN","PSBRPC2",100,0)
4220+ I PSBTAB="UDTAB" D Q
4221+"RTN","PSBRPC2",101,0)
4222+ .S X=$$FIND1^DIC(50,"","AX",PSBDIEN,"B^C")
4223+"RTN","PSBRPC2",102,0)
4224+ .I X<1 Q
4225+"RTN","PSBRPC2",103,0)
4226+ .E S RESULTS(PSBCNT)="DD"_U_X_U_$$GET1^DIQ(50,X_",",.01)
4227+"RTN","PSBRPC2",104,0)
4228+ ;
4229+"RTN","PSBRPC2",105,0)
4230+ ; IV/IVPB ward stock scan
4231+"RTN","PSBRPC2",106,0)
4232+ ;
4233+"RTN","PSBRPC2",107,0)
4234+ S PSBDIEN=$$FIND1^DIC(50,"","AX",PSBDIEN,"B^C") I PSBDIEN<1 Q
4235+"RTN","PSBRPC2",108,0)
4236+ S PSBOIT=$$GET1^DIQ(50,PSBDIEN,"PHARMACY ORDERABLE ITEM","I")
4237+"RTN","PSBRPC2",109,0)
4238+ I $D(^PSDRUG("A527",PSBDIEN)) S X="" F S X=$O(^PSDRUG("A527",PSBDIEN,X)) Q:X="" D
4239+"RTN","PSBRPC2",110,0)
4240+ .S PSBINACT=$$GET1^DIQ(52.7,X,8,"I") I PSBINACT]"",PSBINACT'>PSBDT Q
4241+"RTN","PSBRPC2",111,0)
4242+ .S RESULTS(PSBCNT)="SOL"_U_X_U_$$GET1^DIQ(50,PSBDIEN_",",.01),PSBCNT=PSBCNT+1,RESULTS(0)=PSBCNT-1
4243+"RTN","PSBRPC2",112,0)
4244+ I $D(^PSDRUG("A526",PSBDIEN)) S X="" F S X=$O(^PSDRUG("A526",PSBDIEN,X)) Q:X="" D
4245+"RTN","PSBRPC2",113,0)
4246+ .S PSBINACT=$$GET1^DIQ(52.6,X,12,"I") I PSBINACT]"",PSBINACT'>PSBDT Q
4247+"RTN","PSBRPC2",114,0)
4248+ .S RESULTS(PSBCNT)="ADD"_U_X_U_$$GET1^DIQ(50,PSBDIEN_",",.01),PSBCNT=PSBCNT+1,RESULTS(0)=PSBCNT-1
4249+"RTN","PSBRPC2",115,0)
4250+ ;
4251+"RTN","PSBRPC2",116,0)
4252+ I PSBTAB="PBTAB",$$FIND1^DIC(50,"","AX",PSBDIEN,"B^C")'<1 S X=$$FIND1^DIC(50,"","AX",PSBDIEN,"B^C"),RESULTS(PSBCNT)="DD"_U_X_U_$$GET1^DIQ(50,X_",",.01),PSBCNT=PSBCNT+1,RESULTS(0)=PSBCNT-1
4253+"RTN","PSBRPC2",117,0)
4254+ Q
4255+"RTN","PSBRPC2",118,0)
4256+ ;
4257+"RTN","PXRMTMED")
4258+0^40^B9970277
4259+"RTN","PXRMTMED",1,0)
4260+PXRMTMED ; SLC/PKR/PJH,MSC/JDA - Edit a reminder term. ;27APR2009
4261+"RTN","PXRMTMED",2,0)
4262+ ;;2.0;CLINICAL REMINDERS;**1,MSC**;Feb 04, 2005
4263+"RTN","PXRMTMED",3,0)
4264+ ;
4265+"RTN","PXRMTMED",4,0)
4266+ ;=======================================================
4267+"RTN","PXRMTMED",5,0)
4268+ N CS1,CS2,DA,DIC,DLAYGO,DTOUT,DUOUT,Y
4269+"RTN","PXRMTMED",6,0)
4270+GETNAME ;Get the name of the term to edit.
4271+"RTN","PXRMTMED",7,0)
4272+ K DA,DIC,DLAYGO,DTOUT,DUOUT,Y
4273+"RTN","PXRMTMED",8,0)
4274+ S DIC="^PXRMD(811.5,"
4275+"RTN","PXRMTMED",9,0)
4276+ S DIC(0)="AEMQL"
4277+"RTN","PXRMTMED",10,0)
4278+ S DIC("A")="Select Reminder Term: "
4279+"RTN","PXRMTMED",11,0)
4280+ S DLAYGO=811.5
4281+"RTN","PXRMTMED",12,0)
4282+ ;Set the starting place for additions.
4283+"RTN","PXRMTMED",13,0)
4284+ D SETSTART^PXRMCOPY(DIC)
4285+"RTN","PXRMTMED",14,0)
4286+ W !
4287+"RTN","PXRMTMED",15,0)
4288+ D ^DIC
4289+"RTN","PXRMTMED",16,0)
4290+ I ($D(DTOUT))!($D(DUOUT)) Q
4291+"RTN","PXRMTMED",17,0)
4292+ I Y=-1 G END
4293+"RTN","PXRMTMED",18,0)
4294+ S DA=$P(Y,U,1)
4295+"RTN","PXRMTMED",19,0)
4296+ S CS1=$$FILE^PXRMEXCS(811.5,DA)
4297+"RTN","PXRMTMED",20,0)
4298+ D EDIT(DIC,DA)
4299+"RTN","PXRMTMED",21,0)
4300+ I $G(DA)="" G GETNAME
4301+"RTN","PXRMTMED",22,0)
4302+ S CS2=$$FILE^PXRMEXCS(811.5,DA)
4303+"RTN","PXRMTMED",23,0)
4304+ I CS2=0 G GETNAME
4305+"RTN","PXRMTMED",24,0)
4306+ I CS2'=CS1 D SEHIST^PXRMUTIL(811.5,DIC,DA)
4307+"RTN","PXRMTMED",25,0)
4308+ G GETNAME
4309+"RTN","PXRMTMED",26,0)
4310+END ;
4311+"RTN","PXRMTMED",27,0)
4312+ Q
4313+"RTN","PXRMTMED",28,0)
4314+ ;
4315+"RTN","PXRMTMED",29,0)
4316+ ;=======================================================
4317+"RTN","PXRMTMED",30,0)
4318+EDIT(ROOT,DA) ;
4319+"RTN","PXRMTMED",31,0)
4320+ N CLASS,DIC,DIE,DR,DIDEL,PXRMTMD,RESULT,TCONT,Y
4321+"RTN","PXRMTMED",32,0)
4322+ ;PXRMTMD is set by a xref on the .01 as a flag that the entire
4323+"RTN","PXRMTMED",33,0)
4324+ ;entry is being deleted.
4325+"RTN","PXRMTMED",34,0)
4326+ S CLASS=$P($G(^PXRMD(811.5,DA,100)),U,1)
4327+"RTN","PXRMTMED",35,0)
4328+ S DIE=ROOT
4329+"RTN","PXRMTMED",36,0)
4330+ I CLASS'="N"!(($G(PXRMINST)=1)&($G(DUZ(0))="@")) D
4331+"RTN","PXRMTMED",37,0)
4332+ . S DR=".01"
4333+"RTN","PXRMTMED",38,0)
4334+ . D ^DIE
4335+"RTN","PXRMTMED",39,0)
4336+ . I $G(DA)'="" D CLASS(DA,DIE)
4337+"RTN","PXRMTMED",40,0)
4338+ I $G(DA)="" Q
4339+"RTN","PXRMTMED",41,0)
4340+ S TCONT=1
4341+"RTN","PXRMTMED",42,0)
4342+ F D FINDING(DIE,DA) Q:TCONT=0
4343+"RTN","PXRMTMED",43,0)
4344+ Q
4345+"RTN","PXRMTMED",44,0)
4346+ ;
4347+"RTN","PXRMTMED",45,0)
4348+ ;=======================================================
4349+"RTN","PXRMTMED",46,0)
4350+FINDING(DIE,DA,LIST) ;
4351+"RTN","PXRMTMED",47,0)
4352+ N CFIEN,GLOB,IEN,LIST,NODE,WPIEN
4353+"RTN","PXRMTMED",48,0)
4354+ N DEF,DEF1,DEF2,STATUS
4355+"RTN","PXRMTMED",49,0)
4356+ S STATUS=0
4357+"RTN","PXRMTMED",50,0)
4358+ D DEF^PXRMRUTL("811.52",.DEF,.DEF1,.DEF2)
4359+"RTN","PXRMTMED",51,0)
4360+ S NODE="^PXRMD(811.5)"
4361+"RTN","PXRMTMED",52,0)
4362+ D LIST^PXRMREDT(NODE,DA,.LIST)
4363+"RTN","PXRMTMED",53,0)
4364+ D DSPALL^PXRMREDF("T",NODE,DA,.LIST)
4365+"RTN","PXRMTMED",54,0)
4366+ S DA(1)=DA
4367+"RTN","PXRMTMED",55,0)
4368+ S IEN=DA
4369+"RTN","PXRMTMED",56,0)
4370+ S DIC=DIE_DA(1)_",20,"
4371+"RTN","PXRMTMED",57,0)
4372+ S DIC(0)="QEAL"
4373+"RTN","PXRMTMED",58,0)
4374+ S DIC("A")="Select Finding: "
4375+"RTN","PXRMTMED",59,0)
4376+ D ^DIC I Y=-1 S DTOUT=1,TCONT=0 Q
4377+"RTN","PXRMTMED",60,0)
4378+ S DIE=DIC
4379+"RTN","PXRMTMED",61,0)
4380+ S DA=+Y,GLOB=$P($P(Y,U,2),";",2) Q:GLOB=""
4381+"RTN","PXRMTMED",62,0)
4382+ I GLOB="PXRMD(811.4," S CFIEN=$P($P(Y,U,2),";",1) D
4383+"RTN","PXRMTMED",63,0)
4384+ .I $D(^PXRMD(811.4,CFIEN,1))>0 D
4385+"RTN","PXRMTMED",64,0)
4386+ ..W !!,"Computed Finding Description:" S WPIEN=0
4387+"RTN","PXRMTMED",65,0)
4388+ ..F S WPIEN=$O(^PXRMD(811.4,CFIEN,1,WPIEN)) Q:+WPIEN'>0 D
4389+"RTN","PXRMTMED",66,0)
4390+ ...W !,$G(^PXRMD(811.4,CFIEN,1,WPIEN,0))
4391+"RTN","PXRMTMED",67,0)
4392+ .E W !!,"No description defined for this computed finding"
4393+"RTN","PXRMTMED",68,0)
4394+ .W !
4395+"RTN","PXRMTMED",69,0)
4396+ W !,"Editing Finding Number: "_$G(DA)
4397+"RTN","PXRMTMED",70,0)
4398+ ;Finding record fields
4399+"RTN","PXRMTMED",71,0)
4400+ S DR=".01;9;12;17"
4401+"RTN","PXRMTMED",72,0)
4402+ S DR=DR_";14;15;18"
4403+"RTN","PXRMTMED",73,0)
4404+ I GLOB="PXRMD(811.4," S DR=DR_";26"
4405+"RTN","PXRMTMED",74,0)
4406+ ;Taxonomy - use inactive problems
4407+"RTN","PXRMTMED",75,0)
4408+ I GLOB="PXD(811.2," S DR=DR_";10",STATUS=1
4409+"RTN","PXRMTMED",76,0)
4410+ ;Health Factor - within category rank
4411+"RTN","PXRMTMED",77,0)
4412+ I GLOB="AUTTHF(" S DR=DR_";11"
4413+"RTN","PXRMTMED",78,0)
4414+ ;Mental Health - scale
4415+"RTN","PXRMTMED",79,0)
4416+ I GLOB="YTT(601," S DR=DR_";13"
4417+"RTN","PXRMTMED",80,0)
4418+ I GLOB="RAMIS(71,"!(GLOB="ORD(101.43,") S DR=DR_";16",STATUS=1
4419+"RTN","PXRMTMED",81,0)
4420+ ;Rx Type
4421+"RTN","PXRMTMED",82,0)
4422+ I GLOB="PSDRUG("!(GLOB="PS(50.605,")!(GLOB="PSNDF(50.6,") S DR=DR_";16",STATUS=1
4423+"RTN","PXRMTMED",83,0)
4424+ ;Condition
4425+"RTN","PXRMTMED",84,0)
4426+ ;
4427+"RTN","PXRMTMED",85,0)
4428+ ;Edit finding record
4429+"RTN","PXRMTMED",86,0)
4430+ D ^DIE
4431+"RTN","PXRMTMED",87,0)
4432+ I STATUS=1,$D(DA)>0 D STATUS^PXRMSTA1(.DA,"T")
4433+"RTN","PXRMTMED",88,0)
4434+ S $P(^PXRMD(811.5,IEN,20,0),U,3)=0
4435+"RTN","PXRMTMED",89,0)
4436+ Q
4437+"RTN","PXRMTMED",90,0)
4438+ ;
4439+"RTN","PXRMTMED",91,0)
4440+ ;=======================================================
4441+"RTN","PXRMTMED",92,0)
4442+CLASS(DA,DIE) ;
4443+"RTN","PXRMTMED",93,0)
4444+ F D Q:RESULT'=0
4445+"RTN","PXRMTMED",94,0)
4446+ . N DR,RESULT,X,Y
4447+"RTN","PXRMTMED",95,0)
4448+ . W !
4449+"RTN","PXRMTMED",96,0)
4450+ . S DR="100" D ^DIE I $D(Y) Q
4451+"RTN","PXRMTMED",97,0)
4452+ . ;Sponsor
4453+"RTN","PXRMTMED",98,0)
4454+ . S DR="101" D ^DIE I $D(Y) Q
4455+"RTN","PXRMTMED",99,0)
4456+ . ;Make sure Class and Sponsor Class are in synch.
4457+"RTN","PXRMTMED",100,0)
4458+ . S RESULT=$$VSPONSOR^PXRMINTR(X)
4459+"RTN","PXRMTMED",101,0)
4460+ . Q
4461+"RTN","PXRMTMED",102,0)
4462+ ;Review date, Usage
4463+"RTN","PXRMTMED",103,0)
4464+ S DR="102;1" D ^DIE I $D(Y) Q
4465+"RTN","PXRMTMED",104,0)
4466+ Q
4467+"RTN","PXRMTMED",105,0)
4468+ ;
4469+"RTN","RORHL7A")
4470+0^32^B35660209
4471+"RTN","RORHL7A",1,0)
4472+RORHL7A ;HCIOFO/SG MSC/JDS- HL7 UTILITIES ;30APR2009
4473+"RTN","RORHL7A",2,0)
4474+ ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006
4475+"RTN","RORHL7A",3,0)
4476+ ;
4477+"RTN","RORHL7A",4,0)
4478+ Q
4479+"RTN","RORHL7A",5,0)
4480+ ;
4481+"RTN","RORHL7A",6,0)
4482+ ;***** ADDS THE SEGMENT TO THE HL7 MESSAGE BUFFER
4483+"RTN","RORHL7A",7,0)
4484+ ;
4485+"RTN","RORHL7A",8,0)
4486+ ; SEG Complete HL7 segment
4487+"RTN","RORHL7A",9,0)
4488+ ;
4489+"RTN","RORHL7A",10,0)
4490+ ; The ADDSEGC^RORHL7A procedure adds the HL7 segment to the HL7
4491+"RTN","RORHL7A",11,0)
4492+ ; message buffer defined by the ROREXT("HL7BUF") parameter
4493+"RTN","RORHL7A",12,0)
4494+ ; (the ^TMP("HLS",$J), by default). The <TAB>, <CR> and <LF>
4495+"RTN","RORHL7A",13,0)
4496+ ; characters are replaced with spaces. Long segments are split
4497+"RTN","RORHL7A",14,0)
4498+ ; among sub-nodes of the main segment node in the destination
4499+"RTN","RORHL7A",15,0)
4500+ ; buffer.
4501+"RTN","RORHL7A",16,0)
4502+ ;
4503+"RTN","RORHL7A",17,0)
4504+ ; The RORHL array and some nodes of the ROREXT array must be
4505+"RTN","RORHL7A",18,0)
4506+ ; initialized (either by the $$INIT^RORHL7 or manually) before
4507+"RTN","RORHL7A",19,0)
4508+ ; calling this procedure.
4509+"RTN","RORHL7A",20,0)
4510+ ;
4511+"RTN","RORHL7A",21,0)
4512+ADDSEGC(SEG) ;
4513+"RTN","RORHL7A",22,0)
4514+ N I1,I2,MAXLEN,NODE,PTR,PTR1,SID,SL
4515+"RTN","RORHL7A",23,0)
4516+ S NODE=ROREXT("HL7BUF"),PTR=$G(ROREXT("HL7PTR"))+1
4517+"RTN","RORHL7A",24,0)
4518+ S HLFS=RORHL("FS"),HLECH=RORHL("ECH")
4519+"RTN","RORHL7A",25,0)
4520+ Q:$P(SEG,HLFS)="" ; Segment Name
4521+"RTN","RORHL7A",26,0)
4522+ ;--- Assign the Set ID if necessary
4523+"RTN","RORHL7A",27,0)
4524+ S SID=$$SETID($P(SEG,HLFS))
4525+"RTN","RORHL7A",28,0)
4526+ S:SID>0 $P(SEG,HLFS,2)=SID
4527+"RTN","RORHL7A",29,0)
4528+ ;--- Remove empty trailing fields
4529+"RTN","RORHL7A",30,0)
4530+ S I2=$L(SEG,HLFS)
4531+"RTN","RORHL7A",31,0)
4532+ F I1=I2:-1:1 Q:$TR($P(SEG,HLFS,I1),HLECH)'=""
4533+"RTN","RORHL7A",32,0)
4534+ S:I1<I2 $P(SEG,HLFS,I1+1,I2)=""
4535+"RTN","RORHL7A",33,0)
4536+ ;--- Store the segment
4537+"RTN","RORHL7A",34,0)
4538+ S SL=$L(SEG),MAXLEN=245 K @NODE@(PTR)
4539+"RTN","RORHL7A",35,0)
4540+ S @NODE@(PTR)=$TR($E(SEG,1,MAXLEN),$C(9,10,13)," ")
4541+"RTN","RORHL7A",36,0)
4542+ S ROREXT("HL7SIZE")=$G(ROREXT("HL7SIZE"))+SL+1
4543+"RTN","RORHL7A",37,0)
4544+ ;--- Split the segment into sub-nodes if necessary
4545+"RTN","RORHL7A",38,0)
4546+ D:SL>MAXLEN
4547+"RTN","RORHL7A",39,0)
4548+ . S I2=MAXLEN
4549+"RTN","RORHL7A",40,0)
4550+ . F PTR1=1:1 S I1=I2+1,I2=I1+MAXLEN-1 Q:I1>SL D
4551+"RTN","RORHL7A",41,0)
4552+ . . S @NODE@(PTR,PTR1)=$TR($E(SEG,I1,I2),$C(9,10,13)," ")
4553+"RTN","RORHL7A",42,0)
4554+ ;--- Save the pointer
4555+"RTN","RORHL7A",43,0)
4556+ S ROREXT("HL7PTR")=PTR
4557+"RTN","RORHL7A",44,0)
4558+ Q
4559+"RTN","RORHL7A",45,0)
4560+ ;
4561+"RTN","RORHL7A",46,0)
4562+ ;***** ASSEMBLES THE SEGMENT AND ADDS IT TO THE HL7 MESSAGE BUFFER
4563+"RTN","RORHL7A",47,0)
4564+ ;
4565+"RTN","RORHL7A",48,0)
4566+ ; .FIELDS Reference to a local variable where the HL7
4567+"RTN","RORHL7A",49,0)
4568+ ; fields are stored
4569+"RTN","RORHL7A",50,0)
4570+ ;
4571+"RTN","RORHL7A",51,0)
4572+ ; FIELDS(
4573+"RTN","RORHL7A",52,0)
4574+ ; 0) Segment name
4575+"RTN","RORHL7A",53,0)
4576+ ; I, Field value
4577+"RTN","RORHL7A",54,0)
4578+ ; i) Continuation of the value if it is
4579+"RTN","RORHL7A",55,0)
4580+ ; ... longer than than 245 characters
4581+"RTN","RORHL7A",56,0)
4582+ ;
4583+"RTN","RORHL7A",57,0)
4584+ ; The ADDSEGF^RORHL7A procedure assembles the HL7 segment from
4585+"RTN","RORHL7A",58,0)
4586+ ; provided field values and adds it to the HL7 message buffer
4587+"RTN","RORHL7A",59,0)
4588+ ; defined by the ROREXT("HL7BUF") node (the ^TMP("HLS",$J), by
4589+"RTN","RORHL7A",60,0)
4590+ ; default). The <TAB>, <CR> and <LF> characters are replaced with
4591+"RTN","RORHL7A",61,0)
4592+ ; spaces. Long segments are split among sub-nodes of the main
4593+"RTN","RORHL7A",62,0)
4594+ ; segment node in the destination buffer.
4595+"RTN","RORHL7A",63,0)
4596+ ;
4597+"RTN","RORHL7A",64,0)
4598+ ; The RORHL array and some nodes of the ROREXT array must be
4599+"RTN","RORHL7A",65,0)
4600+ ; initialized (either by the $$INIT^RORHL7 or manually) before
4601+"RTN","RORHL7A",66,0)
4602+ ; calling this procedure.
4603+"RTN","RORHL7A",67,0)
4604+ ;
4605+"RTN","RORHL7A",68,0)
4606+ADDSEGF(FIELDS) ;
4607+"RTN","RORHL7A",69,0)
4608+ ; RORBUF Temporary buffer for the segment construction
4609+"RTN","RORHL7A",70,0)
4610+ ; RORIS Current continuation subscript in the HL7 buffer
4611+"RTN","RORHL7A",71,0)
4612+ ; RORNODE Closed root of the HL7 message buffer
4613+"RTN","RORHL7A",72,0)
4614+ ; RORPTR Current subscript in the HL7 message buffer
4615+"RTN","RORHL7A",73,0)
4616+ ; RORSL Number of characters that can be appended to the
4617+"RTN","RORHL7A",74,0)
4618+ ; RORBUF before it has to be emptied into the HL7
4619+"RTN","RORHL7A",75,0)
4620+ ; message buffer
4621+"RTN","RORHL7A",76,0)
4622+ ;
4623+"RTN","RORHL7A",77,0)
4624+ N FLD,I,LASTFLD,RORBUF,RORIS,RORNODE,RORPTR,RORSL
4625+"RTN","RORHL7A",78,0)
4626+ Q:$G(FIELDS(0))="" ; Segment Name
4627+"RTN","RORHL7A",79,0)
4628+ S RORNODE=ROREXT("HL7BUF"),RORPTR=$G(ROREXT("HL7PTR"))+1
4629+"RTN","RORHL7A",80,0)
4630+ S HLFS=RORHL("FS"),HLECH=RORHL("ECH")
4631+"RTN","RORHL7A",81,0)
4632+ ;--- Assign the Set ID if necessary
4633+"RTN","RORHL7A",82,0)
4634+ S I=$$SETID(FIELDS(0))
4635+"RTN","RORHL7A",83,0)
4636+ S:I>0 FIELDS(1)=I
4637+"RTN","RORHL7A",84,0)
4638+ ;--- Remove empty trailing fields
4639+"RTN","RORHL7A",85,0)
4640+ S I=$NA(FIELDS)
4641+"RTN","RORHL7A",86,0)
4642+ N A,CNT F S I=$Q(@I) Q:I="" S CNT=$G(CNT)+1,A(CNT)=I I $TR(@I,HLECH)'="" K A,CNT
4643+"RTN","RORHL7A",87,0)
4644+ F I=1:1 Q:'$D(A(I)) K @A(I)
4645+"RTN","RORHL7A",88,0)
4646+ ;--- Initialize construction variables
4647+"RTN","RORHL7A",89,0)
4648+ S RORBUF=FIELDS(0),I=$L(RORBUF)
4649+"RTN","RORHL7A",90,0)
4650+ S ROREXT("HL7SIZE")=$G(ROREXT("HL7SIZE"))+I+1
4651+"RTN","RORHL7A",91,0)
4652+ S RORIS=0,RORSL=245-I
4653+"RTN","RORHL7A",92,0)
4654+ ;--- Append the fields and store the segment
4655+"RTN","RORHL7A",93,0)
4656+ S LASTFLD=+$O(FIELDS(" "),-1)
4657+"RTN","RORHL7A",94,0)
4658+ F FLD=1:1:LASTFLD D
4659+"RTN","RORHL7A",95,0)
4660+ . D APPEND(HLFS_$G(FIELDS(FLD)))
4661+"RTN","RORHL7A",96,0)
4662+ . ;--- Process the field continuation nodes
4663+"RTN","RORHL7A",97,0)
4664+ . S I=""
4665+"RTN","RORHL7A",98,0)
4666+ . F S I=$O(FIELDS(FLD,I)) Q:I="" D APPEND(FIELDS(FLD,I))
4667+"RTN","RORHL7A",99,0)
4668+ ;--- Flush the buffer if necessary
4669+"RTN","RORHL7A",100,0)
4670+ D:RORBUF'=""
4671+"RTN","RORHL7A",101,0)
4672+ . I 'RORIS S @RORNODE@(RORPTR)=RORBUF Q
4673+"RTN","RORHL7A",102,0)
4674+ . S @RORNODE@(RORPTR,RORIS)=RORBUF
4675+"RTN","RORHL7A",103,0)
4676+ S ROREXT("HL7PTR")=RORPTR
4677+"RTN","RORHL7A",104,0)
4678+ Q
4679+"RTN","RORHL7A",105,0)
4680+ ;
4681+"RTN","RORHL7A",106,0)
4682+ ;***** APPENDS THE FIELD VALUE TO THE HL7 SEGMENT
4683+"RTN","RORHL7A",107,0)
4684+ ;
4685+"RTN","RORHL7A",108,0)
4686+ ; VAL Value of the field (or its part)
4687+"RTN","RORHL7A",109,0)
4688+ ;
4689+"RTN","RORHL7A",110,0)
4690+ ; This is an internal function. Do not call it directly.
4691+"RTN","RORHL7A",111,0)
4692+ ;
4693+"RTN","RORHL7A",112,0)
4694+APPEND(VAL) ;
4695+"RTN","RORHL7A",113,0)
4696+ N BASE,L
4697+"RTN","RORHL7A",114,0)
4698+ S VAL=$TR(VAL,$C(9,10,13)," "),L=$L(VAL)
4699+"RTN","RORHL7A",115,0)
4700+ S ROREXT("HL7SIZE")=$G(ROREXT("HL7SIZE"))+L
4701+"RTN","RORHL7A",116,0)
4702+ I L'>RORSL S RORBUF=RORBUF_VAL,RORSL=RORSL-L Q
4703+"RTN","RORHL7A",117,0)
4704+ ;---
4705+"RTN","RORHL7A",118,0)
4706+ S RORBUF=RORBUF_$E(VAL,1,RORSL),L=L-RORSL
4707+"RTN","RORHL7A",119,0)
4708+ S BASE=1
4709+"RTN","RORHL7A",120,0)
4710+ F D Q:L'>0
4711+"RTN","RORHL7A",121,0)
4712+ . I 'RORIS S @RORNODE@(RORPTR)=RORBUF
4713+"RTN","RORHL7A",122,0)
4714+ . E S @RORNODE@(RORPTR,RORIS)=RORBUF
4715+"RTN","RORHL7A",123,0)
4716+ . S BASE=BASE+RORSL,RORIS=RORIS+1,RORSL=245
4717+"RTN","RORHL7A",124,0)
4718+ . S RORBUF=$E(VAL,BASE,BASE+RORSL-1),L=L-RORSL
4719+"RTN","RORHL7A",125,0)
4720+ S RORSL=-L
4721+"RTN","RORHL7A",126,0)
4722+ Q
4723+"RTN","RORHL7A",127,0)
4724+ ;
4725+"RTN","RORHL7A",128,0)
4726+ ;***** RETURNS THE BHS SEGMENT
4727+"RTN","RORHL7A",129,0)
4728+ ;
4729+"RTN","RORHL7A",130,0)
4730+ ; BID Batch message ID
4731+"RTN","RORHL7A",131,0)
4732+ ;
4733+"RTN","RORHL7A",132,0)
4734+ ; [BDT] Batch message creation time in internal FileMan
4735+"RTN","RORHL7A",133,0)
4736+ ; format (NOW by default)
4737+"RTN","RORHL7A",134,0)
4738+ ;
4739+"RTN","RORHL7A",135,0)
4740+ ; [COMMENT] Optional comment
4741+"RTN","RORHL7A",136,0)
4742+ ;
4743+"RTN","RORHL7A",137,0)
4744+ ; The RORHL local variable must be initialized by the $$INIT^RORHL7
4745+"RTN","RORHL7A",138,0)
4746+ ; function before calling this entry point.
4747+"RTN","RORHL7A",139,0)
4748+ ;
4749+"RTN","RORHL7A",140,0)
4750+BHS(BID,BDT,COMMENT) ;
4751+"RTN","RORHL7A",141,0)
4752+ N CS,SEG,TMP
4753+"RTN","RORHL7A",142,0)
4754+ D BHS^HLFNC3(.RORHL,BID,.SEG)
4755+"RTN","RORHL7A",143,0)
4756+ Q:$G(SEG)="" ""
4757+"RTN","RORHL7A",144,0)
4758+ S HLFS=RORHL("FS"),HLECH=RORHL("ECH"),CS=$E(HLECH,1)
4759+"RTN","RORHL7A",145,0)
4760+ ;--- Post-processing
4761+"RTN","RORHL7A",146,0)
4762+ S SEG=SEG_$G(SEG(1))
4763+"RTN","RORHL7A",147,0)
4764+ S:$G(BDT)'>0 BDT=$$NOW^XLFDT
4765+"RTN","RORHL7A",148,0)
4766+ S TMP=$E($P($$SITE^VASITE,U,3),1,3)
4767+"RTN","RORHL7A",149,0)
4768+ S $P(SEG,HLFS,4)=TMP_CS_$G(^XMB("NETNAME"))_CS_"DNS"
4769+"RTN","RORHL7A",150,0)
4770+ S $P(SEG,HLFS,5)="ROR AAC"
4771+"RTN","RORHL7A",151,0)
4772+ S $P(SEG,HLFS,7)=$$FMTHL7^XLFDT(BDT)
4773+"RTN","RORHL7A",152,0)
4774+ S TMP=$P(SEG,HLFS,9)
4775+"RTN","RORHL7A",153,0)
4776+ S $P(TMP,CS,3)=$P(TMP,CS,3)_$E(HLECH,2)_$G(RORHL("ETN"))
4777+"RTN","RORHL7A",154,0)
4778+ S $P(SEG,HLFS,9)=TMP
4779+"RTN","RORHL7A",155,0)
4780+ S $P(SEG,HLFS,10)=$G(COMMENT)
4781+"RTN","RORHL7A",156,0)
4782+ Q SEG
4783+"RTN","RORHL7A",157,0)
4784+ ;
4785+"RTN","RORHL7A",158,0)
4786+ ;***** RETURNS BTS SEGMENT
4787+"RTN","RORHL7A",159,0)
4788+ ;
4789+"RTN","RORHL7A",160,0)
4790+ ; MSGCNT Batch message count
4791+"RTN","RORHL7A",161,0)
4792+ ; [COMMENT] Batch comment
4793+"RTN","RORHL7A",162,0)
4794+ ;
4795+"RTN","RORHL7A",163,0)
4796+ ; The RORHL variable must be initialized by the INIT^HLFNC2 before
4797+"RTN","RORHL7A",164,0)
4798+ ; calling this entry point
4799+"RTN","RORHL7A",165,0)
4800+ ;
4801+"RTN","RORHL7A",166,0)
4802+BTS(MSGCNT,COMMENT) ;
4803+"RTN","RORHL7A",167,0)
4804+ Q "BTS"_RORHL("FS")_MSGCNT_RORHL("FS")_$G(COMMENT)
4805+"RTN","RORHL7A",168,0)
4806+ ;
4807+"RTN","RORHL7A",169,0)
4808+ ;***** LOADS THE HL7 FIELD (OR ITS PART) TO THE BUFFER
4809+"RTN","RORHL7A",170,0)
4810+ ;
4811+"RTN","RORHL7A",171,0)
4812+ ; VAL Value of the field (or its part)
4813+"RTN","RORHL7A",172,0)
4814+ ;
4815+"RTN","RORHL7A",173,0)
4816+ ; FLD Number of the field in the segment (piece number)
4817+"RTN","RORHL7A",174,0)
4818+ ;
4819+"RTN","RORHL7A",175,0)
4820+FIELD(VAL,FLD) ;
4821+"RTN","RORHL7A",176,0)
4822+ N BASE,L
4823+"RTN","RORHL7A",177,0)
4824+ S:FLD>RORFLD RORFLD=FLD,RORIS=0,RORSL=245
4825+"RTN","RORHL7A",178,0)
4826+ S L=$L(VAL),BASE=1
4827+"RTN","RORHL7A",179,0)
4828+ F RORIS=RORIS:1 D Q:L'>0
4829+"RTN","RORHL7A",180,0)
4830+ . I 'RORIS S RORSEG(RORFLD)=$G(RORSEG(RORFLD))_$E(VAL,BASE,BASE+RORSL-1)
4831+"RTN","RORHL7A",181,0)
4832+ . E S RORSEG(RORFLD,RORIS)=$G(RORSEG(RORFLD,RORIS))_$E(VAL,BASE,BASE+RORSL-1)
4833+"RTN","RORHL7A",182,0)
4834+ . S BASE=BASE+RORSL,L=L-RORSL,RORSL=245
4835+"RTN","RORHL7A",183,0)
4836+ S RORSL=-L
4837+"RTN","RORHL7A",184,0)
4838+ Q
4839+"RTN","RORHL7A",185,0)
4840+ ;
4841+"RTN","RORHL7A",186,0)
4842+ ;***** LOADS THE HL7 SEGMENT INTO THE RPOVIDED BUFFER
4843+"RTN","RORHL7A",187,0)
4844+ ;
4845+"RTN","RORHL7A",188,0)
4846+ ; .RORSEG Reference to a local variable where the HL7
4847+"RTN","RORHL7A",189,0)
4848+ ; fields will be stored. The fields are stored
4849+"RTN","RORHL7A",190,0)
4850+ ; in the following format:
4851+"RTN","RORHL7A",191,0)
4852+ ;
4853+"RTN","RORHL7A",192,0)
4854+ ; RORSEG(FldNum)=FldVal
4855+"RTN","RORHL7A",193,0)
4856+ ;
4857+"RTN","RORHL7A",194,0)
4858+ ; If the value is longer that 245 characters then
4859+"RTN","RORHL7A",195,0)
4860+ ; the continuation nodes are created:
4861+"RTN","RORHL7A",196,0)
4862+ ;
4863+"RTN","RORHL7A",197,0)
4864+ ; RORSEG(FldNum,#)=FldValCont
4865+"RTN","RORHL7A",198,0)
4866+ ;
4867+"RTN","RORHL7A",199,0)
4868+ ; ROR8SRC Closed root of the source buffer containing
4869+"RTN","RORHL7A",200,0)
4870+ ; the HL7 segment
4871+"RTN","RORHL7A",201,0)
4872+ ;
4873+"RTN","RORHL7A",202,0)
4874+LOADSEG(RORSEG,ROR8SRC) ;
4875+"RTN","RORHL7A",203,0)
4876+ N BUF,FLD,I,IFL,NFL,RORFLD,RORIS,RORSL
4877+"RTN","RORHL7A",204,0)
4878+ S HLFS=RORHL("FS") K RORSEG
4879+"RTN","RORHL7A",205,0)
4880+ ;--- Process the main segment
4881+"RTN","RORHL7A",206,0)
4882+ S BUF=$G(@ROR8SRC),NFL=$L(BUF,HLFS)
4883+"RTN","RORHL7A",207,0)
4884+ F IFL=1:1:NFL S RORSEG(IFL-1)=$P(BUF,HLFS,IFL)
4885+"RTN","RORHL7A",208,0)
4886+ Q:$D(@ROR8SRC)<10
4887+"RTN","RORHL7A",209,0)
4888+ ;--- Process the sub-segments
4889+"RTN","RORHL7A",210,0)
4890+ S (FLD,RORFLD)=NFL-1,RORIS=0,RORSL=245-$L(RORSEG(FLD))
4891+"RTN","RORHL7A",211,0)
4892+ S I=""
4893+"RTN","RORHL7A",212,0)
4894+ F S I=$O(@ROR8SRC@(I)) Q:I="" D
4895+"RTN","RORHL7A",213,0)
4896+ . S BUF=@ROR8SRC@(I),NFL=$L(BUF,HLFS)
4897+"RTN","RORHL7A",214,0)
4898+ . D FIELD($P(BUF,HLFS),FLD)
4899+"RTN","RORHL7A",215,0)
4900+ . F IFL=2:1:NFL S FLD=FLD+1 D FIELD($P(BUF,HLFS,IFL),FLD)
4901+"RTN","RORHL7A",216,0)
4902+ Q
4903+"RTN","RORHL7A",217,0)
4904+ ;
4905+"RTN","RORHL7A",218,0)
4906+ ;***** RETURNS TEXT EXPLANATIONS OF THE HL7 MESSAGE STATUS
4907+"RTN","RORHL7A",219,0)
4908+ ;
4909+"RTN","RORHL7A",220,0)
4910+ ; MSGST Status value returned by the $$MSGSTAT^HLUTIL
4911+"RTN","RORHL7A",221,0)
4912+ ;
4913+"RTN","RORHL7A",222,0)
4914+MSGSTXT(MSGST) ;
4915+"RTN","RORHL7A",223,0)
4916+ N ST S ST=+MSGST
4917+"RTN","RORHL7A",224,0)
4918+ Q:'ST "Message does not exist"
4919+"RTN","RORHL7A",225,0)
4920+ Q:ST=1 "Waiting in queue"
4921+"RTN","RORHL7A",226,0)
4922+ Q:ST=1.5 "Opening connection"
4923+"RTN","RORHL7A",227,0)
4924+ Q:ST=1.7 "Awaiting response"
4925+"RTN","RORHL7A",228,0)
4926+ Q:ST=2 "Awaiting application ack"
4927+"RTN","RORHL7A",229,0)
4928+ Q:ST=3 "Successfully completed"
4929+"RTN","RORHL7A",230,0)
4930+ Q:ST=4 "Error"
4931+"RTN","RORHL7A",231,0)
4932+ Q:ST=8 "Being generated"
4933+"RTN","RORHL7A",232,0)
4934+ Q:ST=9 "Awaiting processing"
4935+"RTN","RORHL7A",233,0)
4936+ Q "Unknown"
4937+"RTN","RORHL7A",234,0)
4938+ ;
4939+"RTN","RORHL7A",235,0)
4940+ ;***** ASSIGNS THE 'SET ID'
4941+"RTN","RORHL7A",236,0)
4942+ ;
4943+"RTN","RORHL7A",237,0)
4944+ ; SEGNAME Name of the HL7 segment
4945+"RTN","RORHL7A",238,0)
4946+ ; [DISINC] Disable increment of the Set ID
4947+"RTN","RORHL7A",239,0)
4948+ ;
4949+"RTN","RORHL7A",240,0)
4950+ ; Return Values:
4951+"RTN","RORHL7A",241,0)
4952+ ; "" Not required for this segment
4953+"RTN","RORHL7A",242,0)
4954+ ; >0 Value for the Set ID field
4955+"RTN","RORHL7A",243,0)
4956+ ;
4957+"RTN","RORHL7A",244,0)
4958+SETID(SEGNAME,DISINC) ;
4959+"RTN","RORHL7A",245,0)
4960+ N SETID
4961+"RTN","RORHL7A",246,0)
4962+ Q:$G(SEGNAME)="" ""
4963+"RTN","RORHL7A",247,0)
4964+ S SETID=+$G(ROREXT("HL7SID",SEGNAME))
4965+"RTN","RORHL7A",248,0)
4966+ Q:SETID'>0 ""
4967+"RTN","RORHL7A",249,0)
4968+ S:'$G(DISINC) ROREXT("HL7SID",SEGNAME)=SETID+1
4969+"RTN","RORHL7A",250,0)
4970+ Q SETID
4971+"RTN","VALMW3")
4972+0^41^B21033865
4973+"RTN","VALMW3",1,0)
4974+VALMW3 ; ALB/MJK,MSC/JDA - Create transport routines for LM;27APR2009
4975+"RTN","VALMW3",2,0)
4976+ ;;1;List Manager;**MSC**;Aug 13, 1993
4977+"RTN","VALMW3",3,0)
4978+ ;
4979+"RTN","VALMW3",4,0)
4980+EN ; -- exporter main entry point
4981+"RTN","VALMW3",5,0)
4982+ N VALMSYS,VALMNS,VALMROU,VALMAX
4983+"RTN","VALMW3",6,0)
4984+ S U="^",DTIME=600 K ^UTILITY($J)
4985+"RTN","VALMW3",7,0)
4986+ D HOME^%ZIS
4987+"RTN","VALMW3",8,0)
4988+ W @IOF,!?20,"*** List Template Export Utility ***"
4989+"RTN","VALMW3",9,0)
4990+ I '$$DUZ() G ENQ
4991+"RTN","VALMW3",10,0)
4992+ S VALMSYS=$$OS() I VALMSYS="" G ENQ
4993+"RTN","VALMW3",11,0)
4994+ S VALMNS=$$NS() I VALMNS="" G ENQ
4995+"RTN","VALMW3",12,0)
4996+ S VALMROU=$$ROU(.VALMNS) I VALMROU="" G ENQ
4997+"RTN","VALMW3",13,0)
4998+ S VALMAX=$$MAX() I 'VALMAX G ENQ
4999+"RTN","VALMW3",14,0)
5000+ W !!!,">>> Exporting LIST TEMPLATES with namespace '"_VALMNS_"'."
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches