Merge lp:~jontai/openvista-gtm-integration/bug385353 into lp:openvista-gtm-integration

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

Subscribers

People subscribed via source and target branches