1 | LA7SMB ;DALOI/JMC - Shipping Manifest Build ;11/25/96 14:39
|
---|
2 | ;;5.2;AUTOMATED LAB INSTRUMENTS;**27,46,64**;Sep 27, 1994
|
---|
3 | EN ;
|
---|
4 | ;
|
---|
5 | D CLEANUP
|
---|
6 | S LA7QUIT=0
|
---|
7 | ;
|
---|
8 | ; Select shipping configuration
|
---|
9 | S LA7SCFG=$$SSCFG^LA7SUTL(1)
|
---|
10 | I LA7SCFG<1 D CLEANUP Q
|
---|
11 | ;
|
---|
12 | ; Determine if there's an active manifest.
|
---|
13 | S LA7SM=$$CHKSM^LA7SMU(+LA7SCFG)
|
---|
14 | I LA7SM<0 D Q
|
---|
15 | . D EN^DDIOL($P(LA7SM,"^",2),"","!?5")
|
---|
16 | . D CLEANUP
|
---|
17 | ;
|
---|
18 | I LA7SM=0 D
|
---|
19 | . N DIR,DIRUT,DTOUT,X,Y
|
---|
20 | . S DIR(0)="YO",DIR("A",1)="There's no open shipping manifest for "_$P(LA7SCFG,"^",2)
|
---|
21 | . S DIR("A")="Do you want to start one",DIR("B")="NO"
|
---|
22 | . D ^DIR
|
---|
23 | . I Y'=1 S LA7QUIT=1 Q
|
---|
24 | . S LA7SM=$$CSM^LA7SMU(+LA7SCFG)
|
---|
25 | . I LA7SM<1 D EN^DDIOL($P(LA7SM,"^",2),"","!?5") S LA7QUIT=1
|
---|
26 | ;
|
---|
27 | ; Only starting a new manifest, no building
|
---|
28 | I $G(LA7SMON) Q
|
---|
29 | ;
|
---|
30 | I LA7QUIT=1 D CLEANUP Q
|
---|
31 | ;
|
---|
32 | D ADATE^LA7SMU1
|
---|
33 | I LA7QUIT=1 D CLEANUP Q
|
---|
34 | ;
|
---|
35 | ; Flag to exclude previously removed tests from building.
|
---|
36 | S LA7EXPRV=$$ASKPREV^LA7SMU1
|
---|
37 | I LA7EXPRV<0 S LA7QUIT=1
|
---|
38 | ;
|
---|
39 | I LA7QUIT=1 D CLEANUP Q
|
---|
40 | ;
|
---|
41 | DQ ; Taskman entry point
|
---|
42 | ; Build list of tests and criteria for manifest.
|
---|
43 | S LA7SCFG(0)=$G(^LAHM(62.9,+LA7SCFG,0))
|
---|
44 | I '$D(ZTQUEUED) D EN^DDIOL("Using shipping manifest# "_$P(LA7SM,"^",2),"","!?5")
|
---|
45 | ;
|
---|
46 | ; Lock this shipping manifest
|
---|
47 | L +^LAHM(62.8,+LA7SM,0):5
|
---|
48 | I '$T D Q
|
---|
49 | . I '$D(ZTQUEUED) D EN^DDIOL("Unable to obtain lock for shipping manifest "_$P(LA7SCFG,"^",2),"","!?5")
|
---|
50 | . D CLEANUP
|
---|
51 | ;
|
---|
52 | ; Update status
|
---|
53 | D SMSUP^LA7SMU(LA7SM,2,"SM03")
|
---|
54 | S LA7SMCNT=0
|
---|
55 | ;
|
---|
56 | ; Build TMP global with test profiles
|
---|
57 | D SCBLD^LA7SM1(+LA7SCFG)
|
---|
58 | S LA7AA=""
|
---|
59 | F S LA7AA=$O(^TMP("LA7SMB",$J,LA7AA)) Q:LA7AA="" D
|
---|
60 | . N LA7END,LRSS
|
---|
61 | . I '$D(ZTQUEUED) D EN^DDIOL("Searching accession area: "_$P($G(^LRO(68,LA7AA,0)),"^"),"","!?5")
|
---|
62 | . ; Use selected accession date else get current accession day for this acession area
|
---|
63 | . I $G(LA7AA(LA7AA)) S LA7AD=$P(LA7AA(LA7AA),"^")
|
---|
64 | . E S LA7AD=$$AD^LA7SUTL(LA7AA)
|
---|
65 | . S LRSS=$P($G(^LRO(68,LA7AA,0)),"^",2)
|
---|
66 | . S LA7AN=+$P($G(LA7AA(LA7AA)),"^",2),LA7LAN=+$P($G(LA7AA(LA7AA)),"^",3),LA7END=0
|
---|
67 | . I LA7AN S LA7AN=LA7AN-1
|
---|
68 | . F S LA7AN=$O(^LRO(68,LA7AA,1,LA7AD,1,LA7AN)) Q:'LA7AN!(LA7END) D SCAN
|
---|
69 | ;
|
---|
70 | ; Update status
|
---|
71 | D SMSUP^LA7SMU(LA7SM,1,"SM02")
|
---|
72 | ;
|
---|
73 | ; Release lock on this shipping manifest
|
---|
74 | L -^LAHM(62.8,+LA7SM,0)
|
---|
75 | ;
|
---|
76 | I '$D(ZTQUEUED) D
|
---|
77 | . N DIR,DIRUT,DIROUT,DTOUT,X,Y
|
---|
78 | . D EN^DDIOL("There were "_$S(LA7SMCNT:LA7SMCNT,1:"NO")_" specimens added","","!?5")
|
---|
79 | . D ASK^LA7SMP(LA7SM)
|
---|
80 | D CLEANUP
|
---|
81 | Q
|
---|
82 | ;
|
---|
83 | SMONLY ; Start a shipping manifest only, no building
|
---|
84 | ;
|
---|
85 | N LA7SMON
|
---|
86 | S LA7SMON=1
|
---|
87 | D EN
|
---|
88 | I $G(LA7SCFG),$G(LA7SM)>0 D EN^DDIOL("Shipping manifest# "_$P(LA7SM,"^",2)_" is available","","!?5")
|
---|
89 | D CLEANUP
|
---|
90 | Q
|
---|
91 | ;
|
---|
92 | ;
|
---|
93 | SCAN ; Scan accession for tests to build
|
---|
94 | ;
|
---|
95 | N LA76805,LA7DIV,LA7END
|
---|
96 | ;
|
---|
97 | I LA7LAN,LA7AN>LA7LAN S LA7END=1 Q
|
---|
98 | ;
|
---|
99 | ; Don't build controls
|
---|
100 | I $P($G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,0)),"^",2)=62.3 Q
|
---|
101 | ;
|
---|
102 | ; Don't build uncollected specimens
|
---|
103 | I '$P(LA7SCFG(0),"^",14),'$P($G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,3)),"^",3) Q
|
---|
104 | ;
|
---|
105 | ; Get Specimen type - if no specimen then quit
|
---|
106 | ; Anatomic path does not store specimen type in #68.
|
---|
107 | S LA76805=""
|
---|
108 | I "CY^EM^SP"[LRSS S LA76805=0
|
---|
109 | E D
|
---|
110 | . S X=+$O(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,5,0))
|
---|
111 | . I 'X Q
|
---|
112 | . S LA76805=+$G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,5,X,0))
|
---|
113 | I LA76805="" Q
|
---|
114 | ;
|
---|
115 | ; Accession's division
|
---|
116 | S LA7DIV=+$P($G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,.4)),"^")
|
---|
117 | ;
|
---|
118 | S LA760=0
|
---|
119 | F S LA760=$O(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,4,LA760)) Q:'LA760 D
|
---|
120 | . ; Not looking for this test.
|
---|
121 | . I '$D(^TMP("LA7SMB",$J,LA7AA,LA760)) Q
|
---|
122 | . ; Set lock.
|
---|
123 | . D LOCK68
|
---|
124 | . ; NOTE *** Do NOT add any "QUIT" after this point unless releasing LOCK set above ***.
|
---|
125 | . ; Test's zeroth node.
|
---|
126 | . S LA760(0)=$G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,4,LA760,0))
|
---|
127 | . ; Test completed - skip
|
---|
128 | . I "CY^EM^SP"'[LRSS,$P(LA760(0),"^",5) D UNLOCK68 Q
|
---|
129 | . ; Test already on shipping manifest - skip
|
---|
130 | . I $P(LA760(0),"^",10) D UNLOCK68 Q
|
---|
131 | . ; Previously removed - skip
|
---|
132 | . I LA7EXPRV,$$PREV^LA7SMU1($P($G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,.3)),"^"),$P(LA760(0),"^")) D UNLOCK68 Q
|
---|
133 | . ; Test urgency
|
---|
134 | . S LA76205=+$P(LA760(0),"^",2)
|
---|
135 | . I LA76205>49 S LA76205=$S(LA76205=50:9,1:LA76205-50)
|
---|
136 | . ; Check if test is eligible for manifest
|
---|
137 | . D SCHK^LA7SM1
|
---|
138 | . I LA7FLAG S LA7FLAG=$$CKTEST(LA7AA,LA7AD,LA7AN,LA760)
|
---|
139 | . ; Add test to shipping manifest.
|
---|
140 | . I LA7FLAG D
|
---|
141 | . . S LA7I=0
|
---|
142 | . . F S LA7I=$O(LA7X(LA7I)) Q:'LA7I D ADD
|
---|
143 | . ; Release lock.
|
---|
144 | . D UNLOCK68
|
---|
145 | Q
|
---|
146 | ;
|
---|
147 | ADD ; Add test to shipping manifest
|
---|
148 | ; Called from above, LA7SM
|
---|
149 | ; Lock on ^LRO(68,LA7AA,1,LA7AD,1,LA7AN,4,LA760) should be set before entering here.
|
---|
150 | ;
|
---|
151 | N FDA,IENS,LA7628,LA768,LA7DATA
|
---|
152 | ;
|
---|
153 | S LRDFN=+$G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,0))
|
---|
154 | S LA7UID=$P($G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,.3)),"^")
|
---|
155 | I LA7UID="" S LA7UID=$$LRUID^LRX(LA7AA,LA7AD,LA7AN)
|
---|
156 | S LA7SMCNT=$G(LA7SMCNT)+1
|
---|
157 | S ^TMP("LA7SMADD",$J,LA7SMCNT)=LRDFN_"^"_LA760_"^"_LA76805_"^"_LA76205_"^"_LA7UID
|
---|
158 | S LA7628(1)=+LA7SM,IENS="+2,"_LA7628(1)_","
|
---|
159 | S FDA(2,62.801,IENS,.01)=LRDFN
|
---|
160 | S FDA(2,62.801,IENS,.02)=LA760
|
---|
161 | I LA76805 S FDA(2,62.801,IENS,.03)=LA76805
|
---|
162 | S FDA(2,62.801,IENS,.04)=LA76205
|
---|
163 | S FDA(2,62.801,IENS,.05)=LA7UID
|
---|
164 | S FDA(2,62.801,IENS,.08)=1
|
---|
165 | I $D(LA7X(LA7I,0)) D
|
---|
166 | . I $P(LA7X(LA7I,0),"^",5) S FDA(2,62.801,IENS,.06)=$P(LA7X(LA7I,0),"^",5)
|
---|
167 | . I $P(LA7X(LA7I,0),"^",6) S FDA(2,62.801,IENS,.07)=$P(LA7X(LA7I,0),"^",6)
|
---|
168 | . I $P(LA7X(LA7I,0),"^",7) S FDA(2,62.801,IENS,.09)=$P(LA7X(LA7I,0),"^",7)
|
---|
169 | I $D(LA7X(LA7I,1)) D
|
---|
170 | . I $P(LA7X(LA7I,1),"^",1)]"" S FDA(2,62.801,IENS,1.1)=$P(LA7X(LA7I,1),"^",1)
|
---|
171 | . I $P(LA7X(LA7I,1),"^",2)]"" S FDA(2,62.801,IENS,1.13)=$P(LA7X(LA7I,1),"^",2)
|
---|
172 | . I $P(LA7X(LA7I,1),"^",5)]"" S FDA(2,62.801,IENS,1.14)=$P(LA7X(LA7I,1),"^",5)
|
---|
173 | . I $P(LA7X(LA7I,1),"^",3)]"" S FDA(2,62.801,IENS,1.2)=$P(LA7X(LA7I,1),"^",3)
|
---|
174 | . I $P(LA7X(LA7I,1),"^",4)]"" S FDA(2,62.801,IENS,1.23)=$P(LA7X(LA7I,1),"^",4)
|
---|
175 | . I $P(LA7X(LA7I,1),"^",6)]"" S FDA(2,62.801,IENS,1.24)=$P(LA7X(LA7I,1),"^",6)
|
---|
176 | I $D(LA7X(LA7I,2)) D
|
---|
177 | . I $P(LA7X(LA7I,2),"^",1)]"" S FDA(2,62.801,IENS,2.1)=$P(LA7X(LA7I,2),"^",1)
|
---|
178 | . I $P(LA7X(LA7I,2),"^",2)]"" S FDA(2,62.801,IENS,2.13)=$P(LA7X(LA7I,2),"^",2)
|
---|
179 | . I $P(LA7X(LA7I,2),"^",7)]"" S FDA(2,62.801,IENS,2.14)=$P(LA7X(LA7I,2),"^",7)
|
---|
180 | . I $P(LA7X(LA7I,2),"^",3)]"" S FDA(2,62.801,IENS,2.2)=$P(LA7X(LA7I,2),"^",3)
|
---|
181 | . I $P(LA7X(LA7I,2),"^",4)]"" S FDA(2,62.801,IENS,2.23)=$P(LA7X(LA7I,2),"^",4)
|
---|
182 | . I $P(LA7X(LA7I,2),"^",8)]"" S FDA(2,62.801,IENS,2.24)=$P(LA7X(LA7I,2),"^",8)
|
---|
183 | . I $P(LA7X(LA7I,2),"^",5)]"" S FDA(2,62.801,IENS,2.3)=$P(LA7X(LA7I,2),"^",5)
|
---|
184 | . I $P(LA7X(LA7I,2),"^",6)]"" S FDA(2,62.801,IENS,2.33)=$P(LA7X(LA7I,2),"^",6)
|
---|
185 | . I $P(LA7X(LA7I,2),"^",9)]"" S FDA(2,62.801,IENS,2.34)=$P(LA7X(LA7I,2),"^",9)
|
---|
186 | I $D(LA7X(LA7I,5)) D
|
---|
187 | . F I=1:1:9 I $P(LA7X(LA7I,5),"^",I)]"" S FDA(2,62.801,IENS,"5."_I)=$P(LA7X(LA7I,5),"^",I)
|
---|
188 | D UPDATE^DIE("","FDA(2)","LA7628","LA7DIE(2)")
|
---|
189 | ;
|
---|
190 | ; Update event file
|
---|
191 | S LA7DATA="SM50^"_$$NOW^XLFDT_"^"_LA760_"^"_$P(LA7SM,"^",2)
|
---|
192 | D SEUP^LA7SMU(LA7UID,2,LA7DATA)
|
---|
193 | ;
|
---|
194 | ; Update accession
|
---|
195 | D ACCSUP^LA7SMU(LA7UID,LA760,+LA7SM)
|
---|
196 | Q
|
---|
197 | ;
|
---|
198 | ;
|
---|
199 | CKTEST(LA7AA,LA7AD,LA7AN,LA760) ; Check other tests on accession if test is part of another panel that
|
---|
200 | ; has been flagged for shipping.
|
---|
201 | ; Call with LA7AA = ien of accession area.
|
---|
202 | ; LA7AD = accession date
|
---|
203 | ; LA7AN = accession number
|
---|
204 | ; LA760 = ien of lab test
|
---|
205 | ; Returns LA7FLAG = 0 (part of another panel)
|
---|
206 | ; = 1 (not part of another panel)
|
---|
207 | ;
|
---|
208 | N LA7FLAG,LA7PCNT,LA7K,LA7J,X
|
---|
209 | ;
|
---|
210 | K ^TMP("LA7TREE",$J)
|
---|
211 | ;
|
---|
212 | S LA7FLAG=1
|
---|
213 | S LA7AD(LA7AD)=""
|
---|
214 | S LA7K=+$P($G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,0)),"^",3)
|
---|
215 | ;
|
---|
216 | I LA7K D
|
---|
217 | . ; Check original accession date.
|
---|
218 | . S LA7AD(LA7K)=""
|
---|
219 | . ; Check rollover accession
|
---|
220 | . I $P($G(^LRO(68,LA7AA,1,LA7K,1,LA7AN,9)),"^") S LA7AD($P($G(^LRO(68,LA7AA,1,LA7K,1,LA7AN,9)),"^"))=""
|
---|
221 | S LA7AD=0
|
---|
222 | F S LA7AD=$O(LA7AD(LA7AD)) Q:'LA7AD D
|
---|
223 | . S LA7J=0
|
---|
224 | . F S LA7J=$O(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,4,LA7J)) Q:'LA7J D
|
---|
225 | . . I LA7J=LA760 Q
|
---|
226 | . . ; Not on manifest
|
---|
227 | . . I '$P($G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,4,LA7J,0)),"^",10) Q
|
---|
228 | . . S LA7PCNT=0 D UNWIND(LA7J)
|
---|
229 | ;
|
---|
230 | ; Test is part of another test previously shipped.
|
---|
231 | I $D(^TMP("LA7TREE",$J,LA760)) S LA7FLAG=0
|
---|
232 | ;
|
---|
233 | K ^TMP("LA7TREE",$J)
|
---|
234 | ;
|
---|
235 | Q LA7FLAG
|
---|
236 | ;
|
---|
237 | UNWIND(LA760) ; Unwind profile - set tests into global ^TMP("LA7TREE",$J).
|
---|
238 | ; Initialize variable LA7PCNT=0 before calling.
|
---|
239 | ; Kill ^TMP("LA7TREE",$J) before calling.
|
---|
240 | ;
|
---|
241 | N I,II
|
---|
242 | ;
|
---|
243 | ; Recursive panel, caught in a loop.
|
---|
244 | I $G(LA7PCNT)>50 Q
|
---|
245 | ; Test does not exist in file 60.
|
---|
246 | I '$D(^LAB(60,LA760,0)) Q
|
---|
247 | ; Bypass "workload" type tests.
|
---|
248 | I $P(^LAB(60,LA760,0),"^",4)="WK" Q
|
---|
249 | ; Atomic test
|
---|
250 | I $L($P(^LAB(60,LA760,0),"^",5)) S ^TMP("LA7TREE",$J,LA760)="" Q
|
---|
251 | ; Check panels
|
---|
252 | I $O(^LAB(60,LA760,2,0)) D
|
---|
253 | . ; Increment panel counter.
|
---|
254 | . S LA7PCNT=$G(LA7PCNT)+1
|
---|
255 | . S I=0
|
---|
256 | . ; Expand test on panel.
|
---|
257 | . F S I=$O(^LAB(60,LA760,2,I)) Q:'I D
|
---|
258 | . . ; IEN of test on panel.
|
---|
259 | . . S II=+$G(^LAB(60,LA760,2,I,0))
|
---|
260 | . . ; Recursive panel, panel calls itself.
|
---|
261 | . . I II,II=LA760 Q
|
---|
262 | . . I II S ^TMP("LA7TREE",$J,LA760)="" D UNWIND(II)
|
---|
263 | Q
|
---|
264 | ;
|
---|
265 | LOCK68 ; Lock entry in file 68
|
---|
266 | ; Called from above, LA7SM
|
---|
267 | ;
|
---|
268 | L +^LRO(68,LA7AA,1,LA7AD,1,LA7AN,4,LA760):9999 ; Set lock.
|
---|
269 | ;
|
---|
270 | Q
|
---|
271 | ;
|
---|
272 | UNLOCK68 ; Unlock entry in file 68
|
---|
273 | ; Called from above, LA7SM
|
---|
274 | ;
|
---|
275 | L -^LRO(68,LA7AA,1,LA7AD,1,LA7AN,4,LA760) ; Release lock.
|
---|
276 | ;
|
---|
277 | Q
|
---|
278 | ;
|
---|
279 | CLEANUP ; Cleanup variables
|
---|
280 | ;
|
---|
281 | I $D(ZTQUEUED) S ZTREQ="@"
|
---|
282 | ;
|
---|
283 | K ^TMP("LA7SMB",$J),^TMP("LA7SMADD",$J),^TMP("LA7TREE",$J)
|
---|
284 | ;
|
---|
285 | K LA760,LA76205,LA76805,LA7AA,LA7AD,LA7AN,LA7EXPRV,LA7FLAG,LA7LAN,LA7PCNT,LA7QUIT,LA7SCFG,LA7SM,LA7SMCNT,LA7UID,LA7X
|
---|
286 | K LRDFN
|
---|
287 | Q
|
---|