1 | HLUCM050 ;CIOFO-O/LJA - HL7/Capacity Mgt API-II ;10/23/01 12:01
|
---|
2 | ;;1.6;HEALTH LEVEL SEVEN;**103,114**;Oct 13, 1995
|
---|
3 | ;
|
---|
4 | LOADEM(IEN772,HLNMSP) ; Find all related entries, up to 20...
|
---|
5 | ; HLNMSP is passed by reference...
|
---|
6 | ;
|
---|
7 | ; Note! If entry already loaded, it will not be reloaded.
|
---|
8 | ; (Stored ^TMP($J) data will be used instead.)
|
---|
9 | ;
|
---|
10 | N ACKTO,CHARC,CHARP,CT,DATA,DATAC,DATAP,DEF,FAC,HL,HLZZI
|
---|
11 | N HOLDNMSP,I,I772,I773,IEN,IENPAR,LEN,MSGID,MTYPEC
|
---|
12 | N MTYPEP,NMSP,NMSPP,NUM,PIEN,PROT,PROTP,TIME,TIMEBEG
|
---|
13 | N TIMEEND,TMDIFF,TMP,TOT772,TOT773,TOTNUM,X,Y
|
---|
14 | ;
|
---|
15 | KILL HLNMSP
|
---|
16 | ;
|
---|
17 | ; Call already made here?
|
---|
18 | S IENPAR=+$G(^TMP($J,"HLCHILD",+IEN772)) ; Call already made here?
|
---|
19 | ;
|
---|
20 | ; If call already made, just return results...
|
---|
21 | I IENPAR D QUIT $P(HLNMSP("HLPARENT",+IENPAR),U,2) ;->
|
---|
22 | . S HLNMSP("HLPARENT",+IENPAR)=$G(^TMP($J,"HLPARENT",+IENPAR))
|
---|
23 | . ; HL*1.6*114 added TOTNUM to next 3 lines to avoid ALLOC errors...
|
---|
24 | . S IEN772=0,TOTNUM=0
|
---|
25 | . F S IEN772=$O(^TMP($J,"HLPARENT",IENPAR,IEN772)) Q:'IEN772!(TOTNUM>19) D
|
---|
26 | . . S TOTNUM=TOTNUM+1
|
---|
27 | . . S HLNMSP("HLPARENT",+IENPAR,IEN772)=$G(^TMP($J,"HLPARENT",IENPAR,IEN772))
|
---|
28 | . . S HLNMSP("HLCHILD",+IEN772)=$G(^TMP($J,"HLCHILD",+IEN772))
|
---|
29 | ;
|
---|
30 | S HLNMSP(+IEN772)="" ; Seed for engine...
|
---|
31 | ;
|
---|
32 | S (NUM,TOTNUM)=1
|
---|
33 | F D QUIT:NUM'>NUM(1)!(TOTNUM>19)
|
---|
34 | . S NUM(1)=NUM ; Set NUM(1) = # entries found "now"...
|
---|
35 | . KILL HOLDNMSP
|
---|
36 | . S I772=0
|
---|
37 | . F S I772=$O(HLNMSP(I772)) Q:I772'>0!(TOTNUM>19) D
|
---|
38 | . . S DATA=$G(^HL(772,+$G(I772),0)) QUIT:DATA']"" ;->
|
---|
39 | . .
|
---|
40 | . . ; IEN Search...
|
---|
41 | . . S HLZZI=0 F S HLZZI=$O(^HL(772,"AF",I772,HLZZI)) Q:'HLZZI!(TOTNUM>19) I HLZZI'=IEN772 D HOLDTOT(HLZZI)
|
---|
42 | . . ; MSG ID search...
|
---|
43 | . . S MSGID=$P(DATA,U,6)
|
---|
44 | . . I MSGID]"" D
|
---|
45 | . . . S HLZZI=0 F S HLZZI=$O(^HL(772,"C",MSGID,HLZZI)) Q:'HLZZI!(TOTNUM>19) I HLZZI'=IEN772 D HOLDTOT(HLZZI)
|
---|
46 | . . . D MSGID(MSGID)
|
---|
47 | . . ; 773 MSG ID search...
|
---|
48 | . . S I773=+$O(^HLMA("B",I772,0)) I I773 D
|
---|
49 | . . . S MSGID=$P($G(^HLMA(+I773,0)),U,2) QUIT:MSGID']"" ;->
|
---|
50 | . . . S I773(1)=0
|
---|
51 | . . . F S I773(1)=$O(^HLMA("AF",I773,I773(1))) Q:I773(1)'>0!(TOTNUM>19) D
|
---|
52 | . . . . S X=+$G(^HLMA(+I773(1),0)) I X D HOLDTOT(+X)
|
---|
53 | . . . S I773(1)=0
|
---|
54 | . . . F S I773(1)=$O(^HLMA("C",MSGID,I773(1))) Q:I773(1)'>0!(TOTNUM>19) D
|
---|
55 | . . . . S X=+$G(^HLMA(+I773(1),0)) I X D HOLDTOT(+X)
|
---|
56 | . . . KILL I773(1)
|
---|
57 | . . . D MSGID(MSGID)
|
---|
58 | . .
|
---|
59 | . . ;
|
---|
60 | . . ; ACK TO search...
|
---|
61 | . . I $P(DATA,U,7)>0,$P(DATA,U,7)'=IEN772 D
|
---|
62 | . . . D HOLDTOT(+$P(DATA,U,7))
|
---|
63 | . . I I773 D
|
---|
64 | . . . S ACKTO=$P($G(^HLMA(+I773,0)),U,10) QUIT:ACKTO'>0 ;->
|
---|
65 | . . . S X=+$G(^HLMA(+ACKTO,0)) I X D HOLDTOT(+X)
|
---|
66 | . . ;
|
---|
67 | . . ; HLPARENT search...
|
---|
68 | . . I $P(DATA,U,8)>0,$P(DATA,U,8)'=IEN772 D
|
---|
69 | . . . D HOLDTOT(+$P(DATA,U,8))
|
---|
70 | . . I I773 D
|
---|
71 | . . . S PIEN=$P($G(^HLMA(+I773,0)),U,6) QUIT:PIEN'>0 ;->
|
---|
72 | . . . S X=+$G(^HLMA(+PIEN,0)) I X D HOLDTOT(+X)
|
---|
73 | . .
|
---|
74 | . . MERGE HLNMSP=HOLDNMSP
|
---|
75 | . . KILL HOLDNMSP
|
---|
76 | .
|
---|
77 | . S I=0,NUM=0 F S I=$O(HLNMSP(I)) Q:'I S NUM=NUM+1
|
---|
78 | ;
|
---|
79 | I '$$OKALL(.HLNMSP) D QUIT "" ;->
|
---|
80 | . KILL HLNMSP
|
---|
81 | ;
|
---|
82 | S FAC=$$FACILITY^HLUCM090(.HLNMSP) I FAC']"" S FAC="UNKNOWN"
|
---|
83 | S IENPAR=$O(HLNMSP(0))
|
---|
84 | ;
|
---|
85 | ; Find total number characters...
|
---|
86 | KILL TIMEP
|
---|
87 | S IEN772=0,CHARC=0,CHARP=0,CT=0,MTYPEP="",NMSPP="",PROTP="",NUM=0
|
---|
88 | F S IEN772=$O(HLNMSP(IEN772)) Q:'IEN772 D
|
---|
89 | . S CT=CT+1,NUM=NUM+1
|
---|
90 | .
|
---|
91 | . S TMP($J,"HLPARENT",+IENPAR,+IEN772)=$$VAL3(+IEN772,FAC)_U_IENPAR
|
---|
92 | .
|
---|
93 | . S CHARC=$$CHAR(+IEN772)
|
---|
94 | . S DATAC(IEN772)=CHARC
|
---|
95 | . S CHARP=CHARP+CHARC
|
---|
96 | .
|
---|
97 | . S $P(DATAC(IEN772),U,2)=1
|
---|
98 | .
|
---|
99 | . S TIME=$$TIME(+IEN772)
|
---|
100 | . F I=1:1:3 S $P(DATAC(IEN772),U,2+I)=$P(TIME,U,I)
|
---|
101 | . F I=2,3 S X=$P(TIME,U,I) I X?7N.E S TIMEP(X)=""
|
---|
102 | .
|
---|
103 | . S MTYPEC=$$MSGTYPE^HLUCM009(IEN772)
|
---|
104 | . S $P(DATAC(IEN772),U,6)=MTYPEC
|
---|
105 | . S MTYPEP=MTYPEP_$S(MTYPEP]"":"~",1:"")_MTYPEC
|
---|
106 | .
|
---|
107 | . S PROT=$$PROT101^HLUCM002(+IEN772)
|
---|
108 | . S $P(DATAC(IEN772),U,7)=PROT
|
---|
109 | . S:PROT]"" PROTP=PROT
|
---|
110 | .
|
---|
111 | . S NMSP=$$NMSPALL(+IEN772)
|
---|
112 | . S $P(DATAC(IEN772),U,9)=NMSP
|
---|
113 | . I NMSP]"" D
|
---|
114 | . . I NMSPP]"",NMSP="XWB",NMSPP'="XWB" QUIT ;->
|
---|
115 | . . S NMSPP=NMSP
|
---|
116 | .
|
---|
117 | . S $P(DATAC(IEN772),U,11)=FAC
|
---|
118 | ;
|
---|
119 | S TIMEBEG=$O(TIMEP(0)),TIMEEND=$O(TIMEP(":"),-1)
|
---|
120 | S TMDIFF=$$FMDIFF^XLFDT(TIMEEND,TIMEBEG,2)
|
---|
121 | ;
|
---|
122 | S DATAP=CHARP_U_CT_U_TMDIFF_U_TIMEBEG_U_TIMEEND_U_MTYPEP_U_PROTP_U_U_NMSPP_U_U_FAC
|
---|
123 | ;
|
---|
124 | ; Set PARENT node...
|
---|
125 | S IENPAR=$O(HLNMSP(0))
|
---|
126 | S TMP($J,"HLPARENT",+IENPAR)=DATAP
|
---|
127 | ;
|
---|
128 | ; Set CHILD nodes...
|
---|
129 | S IEN772=0
|
---|
130 | F S IEN772=$O(HLNMSP(IEN772)) Q:IEN772'>0 D
|
---|
131 | . S TMP($J,"HLCHILD",+IEN772)=IENPAR_"~"_$G(DATAC(+IEN772))
|
---|
132 | ;
|
---|
133 | KILL HLNMSP
|
---|
134 | MERGE HLNMSP=TMP($J)
|
---|
135 | MERGE ^TMP($J)=TMP($J)
|
---|
136 | ;
|
---|
137 | Q NUM
|
---|
138 | ;
|
---|
139 | OKALL(HLNMSP) ; Does every 772 entry have a valid .01 node?
|
---|
140 | N FAIL,I772
|
---|
141 | S FAIL=0,I772=0
|
---|
142 | F S I772=$O(HLNMSP(I772)) Q:'I772!(FAIL) D
|
---|
143 | . QUIT:$P($G(^HL(772,+I772,0)),U)?7N1"."1.N ;->
|
---|
144 | . S FAIL=1
|
---|
145 | Q 'FAIL
|
---|
146 | ;
|
---|
147 | VAL3(IEN772,FAC) ; Return sort values...
|
---|
148 | N TYPEHR,TYPEIO,TYPELR
|
---|
149 | S TYPEHR=$$TYPETMO^HLUCM002(+IEN772)
|
---|
150 | S TYPEIO=$$TYPEIO^HLUCM002(+IEN772)
|
---|
151 | ;S TYPELR=$$TYPELR^HLUCM001(+IEN772,FAC)
|
---|
152 | S TYPELR=$S(FAC["~DNS":"R",1:"L")
|
---|
153 | Q TYPEHR_U_TYPEIO_U_TYPELR
|
---|
154 | ;
|
---|
155 | TIME(IEN772) ; Times...
|
---|
156 | N CT,DATA,IEN773,TMBEG,TMEND,TMDIFF
|
---|
157 | D TOT772T^HLUCM(+IEN772)
|
---|
158 | S IEN773=0,CT=0
|
---|
159 | F S IEN773=$O(^HLMA("B",+IEN772,IEN773)) Q:'IEN773!(CT>20) D
|
---|
160 | . S CT=CT+1
|
---|
161 | . D TOT773T^HLUCM(+IEN773)
|
---|
162 | D TMDIFF^HLUCM
|
---|
163 | Q DATA("DIFF")_U_DATA("START")_U_DATA("END")
|
---|
164 | ;
|
---|
165 | ;
|
---|
166 | CHAR(IEN772) ; Number characters...
|
---|
167 | N CT,DATA,IEN773
|
---|
168 | D TOT772C^HLUCM(+IEN772)
|
---|
169 | S IEN773=0,CT=0
|
---|
170 | F S IEN773=$O(^HLMA("B",+IEN772,IEN773)) Q:'IEN773!(CT>20) D
|
---|
171 | . S CT=CT+1
|
---|
172 | . D TOT773C^HLUCM(+IEN773)
|
---|
173 | Q $G(DATA("CHAR"))
|
---|
174 | ;
|
---|
175 | GETNMSP(IEN772) ; The one and only place to ask for NAMESPACE...
|
---|
176 | N HL,NMSP,NUM,PAR,VAL
|
---|
177 | S NUM=$$LOADEM^HLUCM050(+IEN772,.HL) QUIT:NUM'>0 "" ;->
|
---|
178 | S PAR=+$G(HL("HLCHILD",+IEN772))
|
---|
179 | S VAL=$G(HL("HLPARENT",+PAR))
|
---|
180 | Q $P(VAL,U,9)
|
---|
181 | ;
|
---|
182 | GETPROT(IEN772) ; One & only place to ask for PROTOCOL...
|
---|
183 | N HL,NMSP,NUM,PAR,VAL
|
---|
184 | S NUM=$$LOADEM^HLUCM050(+IEN772,.HL) QUIT:NUM'>0 "" ;->
|
---|
185 | S PAR=+$G(HL("HLCHILD",+IEN772))
|
---|
186 | S VAL=$G(HL("HLPARENT",+PAR))
|
---|
187 | Q $P(VAL,U,7)
|
---|
188 | ;
|
---|
189 | HOLDTOT(X) D HOLDTOT^HLUCM009(X) QUIT
|
---|
190 | MSGID(X) D MSGID^HLUCM009(X) QUIT
|
---|
191 | ;
|
---|
192 | NMSPALL(IEN772) ;Perform all attempts to find NMSP...
|
---|
193 | N IEN101,IEN94,NMSP
|
---|
194 | ;
|
---|
195 | ; If SPR...
|
---|
196 | S NMSP=$$SPR(+IEN772) QUIT:NMSP]"" $$NMSPCHG(NMSP) ;->
|
---|
197 | ;
|
---|
198 | ; Check MSH segment...
|
---|
199 | S NMSP=$$MSH772^HLUCM003(+IEN772) QUIT:NMSP]"" $$NMSPCHG(NMSP) ;->
|
---|
200 | S NMSP=$$MSHMAIL^HLUCM003(+IEN772) QUIT:NMSP]"" $$NMSPCHG(NMSP) ;->
|
---|
201 | ;
|
---|
202 | ; Get Event Protocol
|
---|
203 | S IEN101=+$P($G(^HL(772,+IEN772,0)),U,10) QUIT:IEN101'>0 "" ;->
|
---|
204 | ;
|
---|
205 | ; Find XEC routines, and try NMSPXRFs...
|
---|
206 | S NMSP=$$NMSPXRF(+IEN101) QUIT:NMSP]"" $$NMSPCHG(NMSP) ;->
|
---|
207 | ;
|
---|
208 | ; Try 9.4 link...
|
---|
209 | S IEN94=$P($G(^ORD(101,+IEN101,0)),U,12)
|
---|
210 | I IEN94 S NMSP=$P($$NMSP94(IEN94),U,2) QUIT:NMSP]"" $$NMSPCHG(NMSP) ;->
|
---|
211 | ;
|
---|
212 | S NMSP=$$MSH773^HLUCM003(+IEN772) QUIT:NMSP]"" $$NMSPCHG(NMSP) ;->
|
---|
213 | ;
|
---|
214 | QUIT ""
|
---|
215 | ;
|
---|
216 | NMSP94(IEN94) ; From 9.4 find it's namespace...
|
---|
217 | N D0,DA,DIC,DIQ,DR,NMSP,RET
|
---|
218 | S RET=$G(^TMP($J,"HLNMSP94",+IEN94)) I RET]"" QUIT RET ;->
|
---|
219 | S DIC=9.4,DR=".01;1",DA=IEN94,DIQ="NMSP(",DIQ(0)="E"
|
---|
220 | D EN^DIQ1
|
---|
221 | S RET=$G(NMSP(9.4,+IEN94,.01,"E"))_U_$G(NMSP(9.4,+IEN94,1,"E"))
|
---|
222 | S ^TMP($J,"HLNMSP94",+IEN94)=RET
|
---|
223 | QUIT RET
|
---|
224 | ;
|
---|
225 | NMSPCHG(NMSP) ; Some miscellaneous special actions first...
|
---|
226 | N PCKG
|
---|
227 | ;
|
---|
228 | ; Check xref first...
|
---|
229 | D:'$D(^TMP($J,"HLNMSPXRF")) NMSPXRF^HLUCM009
|
---|
230 | S PCKG=$$NMSPFROM(NMSP) QUIT:PCKG]"" PCKG ;->
|
---|
231 | ;
|
---|
232 | S PCKG=NMSP
|
---|
233 | ;
|
---|
234 | ; Other conversions here...
|
---|
235 | I $E(PCKG,1,2)="DG",PCKG'="DG" S PCKG="DG"
|
---|
236 | I $E(PCKG,1,3)="VEI",PCKG'="VEIB" S PCKG="VEIB"
|
---|
237 | I $E(PCKG,1,2)="VA" D
|
---|
238 | . I PCKG["PIMS" S PCKG="DG" QUIT ;->
|
---|
239 | . I $G(APPR)["HEC " S PCKG="HEC" QUIT ;->
|
---|
240 | . I $G(FACR)["HEC " S PCKG="HEC" QUIT ;->
|
---|
241 | I $E(PCKG,1,2)="LA" S PCKG="LA"
|
---|
242 | I $E(PCKG,1,2)="VA",PCKG[" PIMS" S PCKG="DG"
|
---|
243 | I $E(PCKG,1,10)="VAFC ADMIT" S PCKG="DG"
|
---|
244 | I $E(PCKG,1,8)="VAFC ADT" S PCKG="DG"
|
---|
245 | I $E(PCKG,1,8)?1"VAFH A"2N S PCKG="DG"
|
---|
246 | I $E(PCKG,1,15)?1"VAFH CLIENT A"2N S PCKG="DG"
|
---|
247 | I $E(PCKG,1,2)="XM" S PCKG="XM"
|
---|
248 | I $E(PCKG,1,2)="XU" S PCKG="XU"
|
---|
249 | ;
|
---|
250 | QUIT PCKG
|
---|
251 | ;
|
---|
252 | NMSPXRF(IEN101) ; Find NMSP from ^TMP($J,"NMSPXRF")
|
---|
253 | N LEN,NMSP,NODE,RTN
|
---|
254 | I '$D(^TMP($J,"HLNMSPXRF")) D NMSPXRF^HLUCM009 ; Build, if not there
|
---|
255 | S NMSP=""
|
---|
256 | F NODE=772,774,771 D QUIT:NMSP]""
|
---|
257 | . S RTN=$E($P($G(^ORD(101,+IEN101,NODE)),U,2),1,4) QUIT:RTN']"" ;->
|
---|
258 | . S NMSP=$$NMSPFROM(RTN)
|
---|
259 | Q NMSP
|
---|
260 | ;
|
---|
261 | NMSPFROM(TXT) ; From TXT try to find NMSP...
|
---|
262 | N NMSP
|
---|
263 | QUIT:$G(TXT)']"" "" ;->
|
---|
264 | S NMSP=""
|
---|
265 | F LEN=4:-1:2 D QUIT:NMSP]""
|
---|
266 | . S NMSP=$G(^TMP($J,"HLNMSPXRF",$E(TXT,1,LEN))) QUIT:NMSP]"" ;->
|
---|
267 | I NMSP']"" F LEN=4:-1:2 D QUIT:NMSP]""
|
---|
268 | . ; See Integration Agreement #10048
|
---|
269 | . N D,DIC,X,Y
|
---|
270 | . S DIC="^DIC(9.4,",DIC(0)="FO",D="C",X=$E(TXT,1,LEN)
|
---|
271 | . D MIX^DIC1 QUIT:+Y'>0 ;->
|
---|
272 | . ; Found! So, set into ^TMP...
|
---|
273 | . S NMSP=$E(TXT,1,LEN)
|
---|
274 | . S ^TMP($J,"HLNMSPXRF",NMSP)=NMSP
|
---|
275 | Q NMSP
|
---|
276 | ;
|
---|
277 | SPR(IEN772) ; Evaluate SPR segment for RPC for package, possible
|
---|
278 | ; resetting the PCKG variable...
|
---|
279 | ; PCKG -- req
|
---|
280 | N CHAR,DEL,IN,NMSP
|
---|
281 | S IN=$G(^HL(772,+IEN772,"IN",1,0))
|
---|
282 | QUIT:$E(IN,1,4)'="SPR^" "" ;->
|
---|
283 | QUIT:IN'["REMOTE RPC^" "" ;->
|
---|
284 | S DEL=$E(IN,4)
|
---|
285 | S IN=$P(IN,DEL,5) QUIT:IN']"" "" ;->
|
---|
286 | S IN=$P(IN,"003RPC",2) QUIT:IN']"" "" ;->
|
---|
287 | S CHAR=+IN,IN=$TR($E(IN,4,CHAR+4),"&","") QUIT:IN']"" "" ;->
|
---|
288 | I $E(IN,1,2)="IB" QUIT "IB" ;->
|
---|
289 | I $E(IN,1,2)="OR" QUIT "OR" ;->
|
---|
290 | I '$D(^TMP($J,"HLNMSPXRF")) D NMSPXRF^HLUCM009
|
---|
291 | S NMSP=$$NMSPFROM(IN)
|
---|
292 | QUIT NMSP
|
---|
293 | ;
|
---|
294 | EOR ; HLUCM050 - HL7/Capacity Mgt API-II ;10/23/01 12:01
|
---|