1 | OCXOHL7 ;SLC/RJS,CLA - External Interface - PROCESS HL7 DATA ARRAY ;4/02/03 13:50
|
---|
2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**32,179**;Dec 17,1997
|
---|
3 | ;; ;;ORDER CHECK EXPERT version 1.01 released OCT 29,1998
|
---|
4 | ;
|
---|
5 | ;
|
---|
6 | Q
|
---|
7 | SILENT(OCXMSG,OUTMSG) ;
|
---|
8 | ;
|
---|
9 | N OCXSEG0,OCXRDT,OCXHL7,OCXOZZT
|
---|
10 | S OCXRDT=($H*86400+$P($H,",",2))
|
---|
11 | S:'$D(OUTMSG) OUTMSG=""
|
---|
12 | D CHECK(.OCXMSG,.OUTMSG)
|
---|
13 | Q
|
---|
14 | ;
|
---|
15 | VERBOSE(OCXMSG) ;
|
---|
16 | ;
|
---|
17 | N OCXSEG0,OCXX,OUTMSG,OCXHL7,OCXOZZT
|
---|
18 | S OCXRDT=($H*86400+$P($H,",",2))
|
---|
19 | S OUTMSG=""
|
---|
20 | D CHECK(.OCXMSG,.OUTMSG)
|
---|
21 | W:$O(OUTMSG(0)) !,"Order Check Message: ",$C(7)
|
---|
22 | S OCXX=0 F S OCXX=$O(OUTMSG(OCXX)) Q:'OCXX W !,OUTMSG(OCXX)
|
---|
23 | W:$O(OUTMSG(0)) !,$C(7)
|
---|
24 | Q
|
---|
25 | ;
|
---|
26 | CHECK(OCXMSG,OUTMSG) ;
|
---|
27 | ;
|
---|
28 | N OCXARY,OCXDFN,OCXEL,OCXODATA,OCXOLOG,OCXOSRC,OCXDSIZE
|
---|
29 | N OCXOTIME,OCXQUIT,OCXSEG0,OCXSEQ,OCXSUB,OCXTEST,OCXVAR
|
---|
30 | ;
|
---|
31 | I $$RTEST D Q
|
---|
32 | .N OMSG,OTMOUT,OCXM
|
---|
33 | .S OMSG="^25^^Order Checking is recompiling and momentarily disabled"
|
---|
34 | .S OCXM=0 F S OCXM=$O(OUTMSG(OCXM)) Q:'OCXM Q:(OUTMSG(OCXM)[OMSG)
|
---|
35 | .Q:OCXM
|
---|
36 | .S OUTMSG($O(OUTMSG(""),-1)+1)=OMSG
|
---|
37 | ;
|
---|
38 | S OCXARY=$S($L($G(OCXMSG)):OCXMSG,1:"OCXMSG") Q:'$O(@OCXARY@(0))
|
---|
39 | ;
|
---|
40 | S (OCXQUIT,OCXSUB)=0 F S OCXSUB=$O(@OCXARY@(OCXSUB)) Q:'OCXSUB I ($P($G(@OCXARY@(OCXSUB)),"|",1)="ORC") D Q
|
---|
41 | .S:($P($P($G(@OCXARY@(OCXSUB)),"|",2),"^",1)="ZC") OCXQUIT=1
|
---|
42 | ;
|
---|
43 | Q:OCXQUIT
|
---|
44 | ;
|
---|
45 | S OCXOLOG=$$LOG(OCXARY)
|
---|
46 | ;
|
---|
47 | S OCXODATA="",OCXTEST=$G(OCXOVRD)
|
---|
48 | ;
|
---|
49 | S OCXVAR("DUZ")=""
|
---|
50 | S OCXVAR("OCXMSG")=""
|
---|
51 | S OCXVAR("OCXARY")=""
|
---|
52 | S OCXOSRC="GENERIC HL7 MESSAGE ARRAY"
|
---|
53 | ;
|
---|
54 | S OCXSUB=0 F S OCXSUB=$O(@OCXARY@(OCXSUB)) Q:'OCXSUB D
|
---|
55 | .N OCXLINE,OCXPC,X,OCXTDAT,OCXCLIN,LASTPC
|
---|
56 | .S OCXDSIZE=$$ARYSIZE($NAME(@OCXARY@(OCXSUB)))
|
---|
57 | .;
|
---|
58 | .I (OCXDSIZE<5000) D Q:'$L($G(OCXLINE(0)))
|
---|
59 | ..M OCXLINE(0)=@OCXARY@(OCXSUB)
|
---|
60 | ..S OCXLINE(0,0)=OCXLINE(0) ; This will make first node consistent with continuation lines.
|
---|
61 | ..S OCXSEG=$P($G(OCXLINE(0)),"|",1)
|
---|
62 | .;
|
---|
63 | .I (OCXDSIZE>4999) D Q:'$L($G(^TMP($J,"OCXLDATA",0)))
|
---|
64 | ..K ^TMP($J,"OCXLDATA")
|
---|
65 | ..M ^TMP($J,"OCXLDATA",0)=@OCXARY@(OCXSUB)
|
---|
66 | ..S ^TMP($J,"OCXLDATA",0,0)=^TMP($J,"OCXLDATA",0) ; This will make first node consistent with continuation lines.
|
---|
67 | ..S OCXSEG=$P($G(^TMP($J,"OCXLDATA",0)),"|",1)
|
---|
68 | .;
|
---|
69 | .Q:'$L(OCXSEG)
|
---|
70 | .;
|
---|
71 | .I $D(OCXODATA(OCXSEG)) D ; This is another instance of this segment.
|
---|
72 | ..; Process current OCXODATA and reset OCXODATA for this new instance.
|
---|
73 | ..; Process OCXODATA
|
---|
74 | ..S OCXDFN=$$GETDFN(OCXARY) I $G(OCXDFN) D UPDATE^OCXOZ01(+OCXDFN,OCXOSRC,.OUTMSG)
|
---|
75 | ..;
|
---|
76 | ..; Reset OCXODATA
|
---|
77 | ..S OCXSEQ=+$G(OCXODATA(OCXSEG)) F Q:'OCXSEQ D S OCXSEQ=$O(OCXODATA(OCXSEQ))
|
---|
78 | ...S OCXSEG0=$G(OCXODATA(OCXSEQ)) Q:'$L(OCXSEG0)
|
---|
79 | ...K OCXODATA(OCXSEQ),OCXODATA(OCXSEG0)
|
---|
80 | .;
|
---|
81 | .S OCXODATA(OCXSUB)=OCXSEG ; Set OCXODATA 'cross reference'
|
---|
82 | .S OCXODATA(OCXSEG)=OCXSUB ; Set OCXODATA 'cross reference'
|
---|
83 | .;
|
---|
84 | .; Load this segment instance into OCXODATA
|
---|
85 | .;
|
---|
86 | .; OCXPC - Keeps track of which "|" piece we're on
|
---|
87 | .;
|
---|
88 | .I (OCXDSIZE<5000) D LOADATA(OCXSEG,"OCXLINE(0)")
|
---|
89 | .;
|
---|
90 | .I (OCXDSIZE>4999) D LOADATA(OCXSEG,$NAME(^TMP($J,"OCXLDATA",0)))
|
---|
91 | ;
|
---|
92 | S OCXDFN=$$GETDFN(OCXARY)
|
---|
93 | I $G(OCXDFN) D UPDATE^OCXOZ01(+OCXDFN,OCXOSRC,.OUTMSG) I 1 ; Process OCXODATA for the last segment
|
---|
94 | ;
|
---|
95 | D FINISH^OCXOLOG(OCXOLOG)
|
---|
96 | ;
|
---|
97 | K ^TMP($J,"OCXLDATA")
|
---|
98 | ;
|
---|
99 | Q
|
---|
100 | ;
|
---|
101 | LOADATA(OCXSEG,OCXSD) ; Get '|' piece #OCXPC of OCXSD Segment Data array.
|
---|
102 | ;
|
---|
103 | N OCXTEXT,OCXPCNT,OCXD0,OCXD1
|
---|
104 | ;
|
---|
105 | Q:'$L(OCXSEG)
|
---|
106 | S OCXPCNT=0,OCXD0="" F S OCXD0=$O(@OCXSD@(OCXD0)) Q:'$L(OCXD0) D
|
---|
107 | .S OCXTEXT=$G(@OCXSD@(OCXD0))
|
---|
108 | .F OCXD1=1:1:$L(OCXTEXT) D
|
---|
109 | ..I ($E(OCXTEXT,OCXD1)="|") S OCXPCNT=OCXPCNT+1 Q
|
---|
110 | ..I ($L($G(OCXODATA(OCXSEG,OCXPCNT)))<241) S OCXODATA(OCXSEG,OCXPCNT)=$G(OCXODATA(OCXSEG,OCXPCNT))_$E(OCXTEXT,OCXD1)
|
---|
111 | ;
|
---|
112 | Q
|
---|
113 | ;
|
---|
114 | RTEST() ; Does ^OCXOZ01 exist ?? Is it currently being compiled ??
|
---|
115 | N DATE,TMOUT
|
---|
116 | Q:'$L($T(^OCXOZ01)) 1
|
---|
117 | I '($P($G(^OCXD(861,1,0)),U,1)="SITE PREFERENCES") K ^OCXD(861,1) S ^OCXD(861,1,0)="SITE PREFERENCES"
|
---|
118 | S DATE=$P($G(^OCXD(861,1,0)),U,3)
|
---|
119 | I DATE,((+DATE)=(+$H)),(((+$P($H,",",2))-(+$P(DATE,",",2)))<1800) Q 1
|
---|
120 | Q 0
|
---|
121 | ;
|
---|
122 | LOG(OCXARY) ;
|
---|
123 | ; Log Data Messages
|
---|
124 | ;
|
---|
125 | I $G(OCXTRACE),$$CDATA^OCXOZ01 W:$G(OCXTRACE) !," Raw Input Data: ",! D ZW(OCXARY) Q 0
|
---|
126 | Q:'$L($T(LOG^OCXOZ01)) 0 Q:'$$LOG^OCXOZ01 0
|
---|
127 | N OCXDFN,OCXNL
|
---|
128 | I '$O(@OCXARY@(0)) S OCXARY="OCXNL",OCXNL(1)="Null HL7 Data Array Found"
|
---|
129 | S OCXDFN=$$GETDFN(OCXARY)
|
---|
130 | Q $$NEW^OCXOLOG(OCXARY,"HL7",+$G(DUZ),+OCXDFN)
|
---|
131 | ;
|
---|
132 | ARYSIZE(ARY) ; Get array size (Local or Global)
|
---|
133 | ;
|
---|
134 | N ARY1,SIZE
|
---|
135 | ;
|
---|
136 | S SIZE=0
|
---|
137 | ;
|
---|
138 | I '(ARY["^") F S ARY=$Q(@ARY) Q:'$L(ARY) S SIZE=SIZE+$L(@ARY)
|
---|
139 | ;
|
---|
140 | I (ARY["^") D
|
---|
141 | .S ARY=$NAME(@ARY),ARY1=ARY
|
---|
142 | .S:($E(ARY,$L(ARY))=")") ARY=$E(ARY,1,$L(ARY)-1)_","
|
---|
143 | .F S ARY1=$Q(@ARY1) Q:'$L(ARY1) Q:'(ARY1[ARY) S SIZE=SIZE+$L(@ARY1)
|
---|
144 | ;
|
---|
145 | Q SIZE
|
---|
146 | ;
|
---|
147 | ZW(ARY) ; ZWrite an array (Local or Global)
|
---|
148 | ;
|
---|
149 | N ARY1
|
---|
150 | ;
|
---|
151 | I '(ARY["^") D Q
|
---|
152 | .F S ARY=$Q(@ARY) Q:'$L(ARY) W !,ARY," = ",@ARY
|
---|
153 | ;
|
---|
154 | I (ARY["^") D Q
|
---|
155 | .S ARY=$NAME(@ARY),ARY1=ARY
|
---|
156 | .S:($E(ARY,$L(ARY))=")") ARY=$E(ARY,1,$L(ARY)-1)_","
|
---|
157 | .F S ARY1=$Q(@ARY1) Q:'$L(ARY1) Q:'(ARY1[ARY) W !,ARY1," = ",@ARY1
|
---|
158 | ;
|
---|
159 | Q
|
---|
160 | ;
|
---|
161 | ERROR Q
|
---|
162 | ;
|
---|
163 | ; **** Old Labels to insure backwards compatibility ****
|
---|
164 | ;
|
---|
165 | ;
|
---|
166 | GETDFN(ARRAY) ; Returns the patient IEN from file 2.
|
---|
167 | ;
|
---|
168 | N OCXNDX,OCXARY,OCXP1,OCXP2,OCXP3
|
---|
169 | S OCXARY=$S($L($G(ARRAY)):ARRAY,1:"ARRAY")
|
---|
170 | S OCXNDX=0 F S OCXNDX=$O(@OCXARY@(OCXNDX)) Q:'OCXNDX I $P($G(@OCXARY@(OCXNDX)),"|",1)="PID" Q
|
---|
171 | Q:'OCXNDX 0
|
---|
172 | ;
|
---|
173 | S OCXP1=$P($G(@OCXARY@(OCXNDX)),"|",4)
|
---|
174 | S OCXP2=$P($G(@OCXARY@(OCXNDX)),"|",5)
|
---|
175 | S OCXP3=$P($G(@OCXARY@(OCXNDX)),"|",6)
|
---|
176 | ;
|
---|
177 | Q:(OCXP2["DPT(") +OCXP2
|
---|
178 | ;
|
---|
179 | I $L(OCXP3),($P($G(^DPT(+OCXP1,0)),U,1)=OCXP3) Q +OCXP1
|
---|
180 | ;
|
---|
181 | Q 0
|
---|
182 | ;
|
---|
183 | ; Old line label area.
|
---|
184 | ;
|
---|
185 | PROC(OCXMSG,OUTMSG) ;
|
---|
186 | D SILENT(.OCXMSG,.OUTMSG)
|
---|
187 | Q
|
---|
188 | ;
|
---|
189 | EN(OCXMSG) ;
|
---|
190 | D VERBOSE(.OCXMSG)
|
---|
191 | Q
|
---|
192 | ;
|
---|