1 | HLEME ;ALB/CJM-HL7 - APIs for Monitor Events ;02/04/2004
|
---|
2 | ;;1.6;HEALTH LEVEL SEVEN;**109**;Oct 13, 1995
|
---|
3 | ;
|
---|
4 | GET(IEN,EVENT) ;
|
---|
5 | ;Desc: given the ien, it returns an array containing the event. Does NOT include the NOTES field or the Application Data
|
---|
6 | ;Input:
|
---|
7 | ; IEN - ien of event
|
---|
8 | ;Output:
|
---|
9 | ; function returns 0 on failure, 1 on success
|
---|
10 | ; EVENT( ***pass by reference***
|
---|
11 | ; "ACTION STATUS"
|
---|
12 | ; "APPLICATION" - the sending application, only if the event is related to an HL7 message
|
---|
13 | ; "COUNT" - the number of discrete events included in this event - for conglomerated events
|
---|
14 | ; "DT/TM" - date/time of the event
|
---|
15 | ; "DT/TM ACTION" - for automated action
|
---|
16 | ; "DT/TM CREATED" - time stamp for this event
|
---|
17 | ; "DT/TM REVIEWED" -
|
---|
18 | ; "ID" - unique identifier
|
---|
19 | ; "IEN" -the ien
|
---|
20 | ; "MAIL",<msg ien>)=<msg ien> - list of Mailman messages
|
---|
21 | ; "MSGID ID" - mssage id of message causing this event (if any)
|
---|
22 | ; "MSG TYPE" - HL7 message type code
|
---|
23 | ; "MSG EVENT" - HL7 event type code
|
---|
24 | ; "MSG LINK" - name of the HL Logical Link (NODE) on which the mssg was sent
|
---|
25 | ; "REVIEWER" - ien in New Person file
|
---|
26 | ; "REVIEW STATUS"
|
---|
27 | ; "SITE" - site of occurence, a pointer to the Institution file
|
---|
28 | ; "TYPE" - the type of event, an ien of a HL7 Monitor Event Type
|
---|
29 | ; "URGENT" - flag for urgency
|
---|
30 | ;
|
---|
31 | ;
|
---|
32 | Q:'$G(IEN) 0
|
---|
33 | N NODE,I,LABEL
|
---|
34 | K EVENT
|
---|
35 | S EVENT("IEN")=IEN
|
---|
36 | S NODE=$G(^HLEV(776.4,IEN,0))
|
---|
37 | Q:'$L(NODE) 0
|
---|
38 | S EVENT("DT/TM")=$P(NODE,"^")
|
---|
39 | S EVENT("TYPE")=$P(NODE,"^",2)
|
---|
40 | S EVENT("SITE")=$P(NODE,"^",3)
|
---|
41 | S EVENT("ID")=$P(NODE,"^",4)
|
---|
42 | S EVENT("ACTION STATUS")=$P(NODE,"^",5)
|
---|
43 | S EVENT("REVIEW STATUS")=$P(NODE,"^",6)
|
---|
44 | S EVENT("DT/TM REVIEWED")=$P(NODE,"^",7)
|
---|
45 | S EVENT("REVIEWER")=$P(NODE,"^",8)
|
---|
46 | S EVENT("DT/TM ACTION")=$P(NODE,"^",9)
|
---|
47 | S EVENT("MSG ID")=$P(NODE,"^",10)
|
---|
48 | S EVENT("MSG TYPE")=$P(NODE,"^",13)
|
---|
49 | S EVENT("MSG EVENT")=$P(NODE,"^",14)
|
---|
50 | S EVENT("MSG LINK")=$P(NODE,"^",15)
|
---|
51 | S EVENT("DT/TM CREATED")=$P(NODE,"^",17)
|
---|
52 | S EVENT("APPLICATION")=$P(NODE,"^",16)
|
---|
53 | S EVENT("COUNT")=$P(NODE,"^",11)
|
---|
54 | S EVENT("URGENT")=$P(NODE,"^",12)
|
---|
55 | S I=0 F S I=$O(^HLEV(776.4,IEN,2,I)) Q:'I S NODE=+$G(^HLEV(776.4,IEN,2,I,0)) I NODE S EVENT("MAIL",NODE)=NODE
|
---|
56 | Q 1
|
---|
57 | ;
|
---|
58 | STOREVAR(EVENT,APPDATA,VAR) ;
|
---|
59 | ;Desc: Allows an app. to store its own application-specific data.
|
---|
60 | ;Input:
|
---|
61 | ; EVENT - ien of event
|
---|
62 | ; APPDATA - variable or array to store **for arrays, pass by reference**
|
---|
63 | ; VAR - **optional** - variable name, may inlucde subscripts.Required if the application needs to store multiple variables or arrays. VAR="APPDATA"is the default
|
---|
64 | ;Output:
|
---|
65 | ; function reuturns 1 on success,0 on failure
|
---|
66 | ;Ex 1
|
---|
67 | ; An app. needs to store a single set of data with the
|
---|
68 | ; event. It could set the data into an array call
|
---|
69 | ; $$STOREVAR(EVENT,.MYARRAY) To get back the
|
---|
70 | ; data it would call $$GETVAR(EVENT,.MYARRAY). (any variable name could have been used instead of MYARRAY.
|
---|
71 | ;Ex 2
|
---|
72 | ; An application needs to store multiple sets of data with the
|
---|
73 | ; the event. It could accomplish that by setting the data into
|
---|
74 | ; multiple arrays, say DATA1,DATA2,DATA3,... and calling
|
---|
75 | ; $$STOREVAR(EVENT,.DATA1,"DATA1"), then $$STOREVAR(EVENT,.DATA2,"DATA2"),etc.
|
---|
76 | ; To get back the named datasets the application would call
|
---|
77 | ; $$GETVAR(EVENT,.DATA1,"DATA1"), $$GETVAR(EVENT,.DATA2,"DATA2"),
|
---|
78 | ; etc.
|
---|
79 | ;
|
---|
80 | Q:'$G(EVENT) 0
|
---|
81 | Q:'$D(^HLEV(776.4,EVENT,0)) 0
|
---|
82 | Q:'$D(APPDATA) 0
|
---|
83 | ;
|
---|
84 | N I,LABEL
|
---|
85 | S I=+$O(^HLEV(776.4,EVENT,3,999999999),-1)
|
---|
86 | I $L($G(VAR)) N @VAR D
|
---|
87 | .S LABEL=VAR
|
---|
88 | .M @VAR=APPDATA
|
---|
89 | E D
|
---|
90 | .S LABEL="APPDATA"
|
---|
91 | ;
|
---|
92 | ;check if the root has data, if so, store it
|
---|
93 | I $D(@LABEL)'[0 D
|
---|
94 | .N OLDIEN
|
---|
95 | .S OLDIEN=$O(^HLEV(776.4,EVENT,3,"B",LABEL,0))
|
---|
96 | .I OLDIEN D
|
---|
97 | ..K ^HLEV(776.4,EVENT,"B",LABEL,OLDIEN),^HLEV(776.4,EVENT,3,OLDIEN)
|
---|
98 | .E D
|
---|
99 | ..S I=I+1
|
---|
100 | .S ^HLEV(776.4,EVENT,3,I,0)=LABEL,^HLEV(776.4,EVENT,3,I,2)=@LABEL,^HLEV(776.4,EVENT,3,"B",LABEL,I)=0
|
---|
101 | ;
|
---|
102 | ;now store everything that comes below it
|
---|
103 | F S LABEL=$Q(@LABEL) Q:LABEL="" D
|
---|
104 | .;can't go over a total lenth of 230
|
---|
105 | .Q:'$L(LABEL)>230
|
---|
106 | .S I=I+1 S ^HLEV(776.4,EVENT,3,I,0)=LABEL,^HLEV(776.4,EVENT,3,I,2)=@LABEL,^HLEV(776.4,EVENT,3,"B",LABEL,I)=0
|
---|
107 | ;
|
---|
108 | ;write the 0-node
|
---|
109 | S ^HLEV(776.4,EVENT,3,0)="^776.43^"_I_"^"_I
|
---|
110 | ;
|
---|
111 | Q 1
|
---|
112 | ;
|
---|
113 | GETVAR(EVENT,APPDATA,VAR) ;
|
---|
114 | ;Desc: Used to retrieve application-specific data that was stored along with the event.
|
---|
115 | ;Input:
|
---|
116 | ; EVENT - ien of the event
|
---|
117 | ; VAR - name of the variable or array to fetch. If not passed, "APPDATA" is assumed, which is also the default when calling $$STOREVAR()
|
---|
118 | ;Output
|
---|
119 | ; function value - 1 on success, 0 on failure
|
---|
120 | ; APPDATA() - used to return the requested data **pass by reference**
|
---|
121 | ;
|
---|
122 | Q:'$G(EVENT) 0
|
---|
123 | Q:'$L($G(^HLEV(776.4,EVENT,0))) 0
|
---|
124 | ;
|
---|
125 | N INDEX,I,LABEL,VAR2
|
---|
126 | K APPDATA
|
---|
127 | S INDEX="^HLEV(776.4,EVENT,3)"
|
---|
128 | S:'$L($G(VAR)) VAR="APPDATA"
|
---|
129 | S VAR2=$O(@INDEX@("B",VAR),-1)
|
---|
130 | F S VAR2=$O(@INDEX@("B",VAR2)) Q:'$L(VAR2) Q:(VAR2'[VAR) S I=0 F S I=$O(@INDEX@("B",VAR2,I)) Q:'I S LABEL=$G(@INDEX@(I,0)) S:LABEL[VAR @LABEL=$G(@INDEX@(I,2))
|
---|
131 | ;
|
---|
132 | M APPDATA=@VAR
|
---|
133 | Q 1
|
---|
134 | ;
|
---|
135 | EVENT(CODE,PACKAGE,HL7MSGID,SITE,WHEN,ERROR) ;
|
---|
136 | ;Desc: API for applications to notify HL7 Event Monitor of their events
|
---|
137 | ;Input:
|
---|
138 | ; CODE - the code (.01 field) for the HL7 Monitor Event Type
|
---|
139 | ; PACKAGE - the name of the package that created the HL7 Monitor Event Type, used to find the event type ien.
|
---|
140 | ; HL7MSGID - **optional** - if the event pertains to a specific message, this should be passed
|
---|
141 | ; SITE - **optional** - the station number, including any suffix, where the event occured. Will assume the local site if not passed in.
|
---|
142 | ; WHEN - **optional** - FM date/time of when the event occurred. Will assume now if not passed in.
|
---|
143 | ;Output:
|
---|
144 | ; function value - ien of the event (file 776.4) on success, 0 on failure
|
---|
145 | ; ERROR - **optional, pass by reference** - array of error messages
|
---|
146 | ;
|
---|
147 | N EVENT,TYPE,MSGIEN,NOW
|
---|
148 | S EVENT("TYPE")=$$FIND^HLEMT(.CODE,.PACKAGE)
|
---|
149 | I 'EVENT("TYPE") S ERROR(1)="UNKNOWN EVENT TYPE" Q 0
|
---|
150 | I '$L($G(SITE)) D
|
---|
151 | .S EVENT("SITE")=+$P($$SITE^VASITE(),"^")
|
---|
152 | E D
|
---|
153 | .S EVENT("SITE")=$$LKUP^XUAF4(SITE)
|
---|
154 | I 'EVENT("SITE") S ERROR(1)="UNKNOWN SITE" Q 0
|
---|
155 | S NOW=$$NOW^XLFDT
|
---|
156 | S EVENT("DT/TM")=$S('$G(WHEN):NOW,1:WHEN)
|
---|
157 | S EVENT("DT/TM CREATED")=NOW
|
---|
158 | ;
|
---|
159 | ;get the event type array
|
---|
160 | I '$$GET^HLEMT(EVENT("TYPE"),.TYPE) S ERROR(1)="UNKNOWN EVENT TYPE" Q 0
|
---|
161 | ;
|
---|
162 | ;is this event type active?
|
---|
163 | I 'TYPE("ACTIVE") S ERROR(1)="INACTIVE EVENT TYPE" Q 0
|
---|
164 | ;
|
---|
165 | ;check if this is a conglomerated event that can be added to an existing event
|
---|
166 | I TYPE("CONGLOMERATE") D
|
---|
167 | .L +^HLEV(776.4,"AE",EVENT("SITE"),EVENT("TYPE")):2
|
---|
168 | .S EVENT("IEN")=$$ADD^HLEME1(EVENT("SITE"),EVENT("TYPE"),EVENT("DT/TM"))
|
---|
169 | ;
|
---|
170 | I '$G(EVENT("IEN")) D
|
---|
171 | .;
|
---|
172 | .;otherwise, create and store a new event
|
---|
173 | .S EVENT("ACTION STATUS")=$S($L(TYPE("ACTION")):1,1:0)
|
---|
174 | .S EVENT("REVIEW STATUS")=TYPE("REVIEW")
|
---|
175 | .S EVENT("MSG ID")=$G(HL7MSGID)
|
---|
176 | .S MSGIEN=$$MSGIEN^HLEMU($G(HL7MSGID))
|
---|
177 | .I MSGIEN D
|
---|
178 | ..S EVENT("MSG TYPE")=$$MSGTYPE^HLEMU(MSGIEN)
|
---|
179 | ..S EVENT("MSG EVENT")=$$HL7EVENT^HLEMU(MSGIEN)
|
---|
180 | ..S EVENT("MSG LINK")=$P($$LINK^HLEMU(MSGIEN),"^",2)
|
---|
181 | ..S EVENT("APPLICATION")=$$APP^HLEMU(MSGIEN)
|
---|
182 | .E D
|
---|
183 | ..S EVENT("MSG TYPE")=""
|
---|
184 | ..S EVENT("MSG EVENT")=""
|
---|
185 | ..S EVENT("MSG LINK")=""
|
---|
186 | ..S EVENT("APPLICATION")=""
|
---|
187 | .S EVENT("COUNT")=1
|
---|
188 | .S EVENT("URGENT")=TYPE("URGENT")
|
---|
189 | .S EVENT("IEN")=$$STORE^HLEME1(.EVENT,.ERROR)
|
---|
190 | .I EVENT("IEN"),$O(TYPE("DOMAIN",0)) S ^HLEV(776.4,"AK",NOW,EVENT("IEN"))=""
|
---|
191 | I TYPE("CONGLOMERATE") L -^HLEV(776.4,"AE",EVENT("SITE"),EVENT("TYPE"))
|
---|
192 | Q EVENT("IEN")
|
---|
193 | ;
|
---|
194 | COUNT(EVENT) ;
|
---|
195 | ;given the event ien, returns the value of the COUNT field
|
---|
196 | Q:'$G(EVENT) 0
|
---|
197 | Q $P($G(^HLEV(776.4,EVENT,0)),"^",11)
|
---|
198 | INC(EVENTIEN,NUMBER) ;
|
---|
199 | ;Desc: given the ien of a conglomerated event, it will increment the count by the given amount and return the new count. Returns "" on failure.
|
---|
200 | ;
|
---|
201 | Q:'$G(EVENTIEN) ""
|
---|
202 | Q:'$G(NUMBER) ""
|
---|
203 | N COUNT,EVENT
|
---|
204 | L +^HLEV(776.4,EVENTIEN,0):1
|
---|
205 | Q:'$$GET(EVENTIEN,.EVENT) ""
|
---|
206 | S COUNT=EVENT("COUNT")
|
---|
207 | S $P(^HLEV(776.4,EVENTIEN,0),"^",11)=COUNT+NUMBER
|
---|
208 | D ADDSTAT^HLEMDD(EVENT("DT/TM"),,EVENT("SITE"),EVENT("TYPE"),EVENT("REVIEW STATUS"),NUMBER)
|
---|
209 | L -^HLEV(776.4,EVENTIEN,0)
|
---|
210 | Q (COUNT+NUMBER)
|
---|
211 | ;
|
---|
212 | RSTATUS(EVENT) ;
|
---|
213 | ;given the event ien, returns the value of the REVIEW STATUS field
|
---|
214 | Q:'$G(EVENT) ""
|
---|
215 | Q $P($G(^HLEV(776.4,EVENT,0)),"^",6)
|
---|
216 | ;
|
---|
217 | ADDNOTE(EVENT,NOTE) ;
|
---|
218 | ;Description: adds a note to the NOTE field of the event
|
---|
219 | ;Input:
|
---|
220 | ; EVENT - ien of the event
|
---|
221 | ; NOTE - either:
|
---|
222 | ; 1) A single line to add to the NOTES OR
|
---|
223 | ; 2) An array of lines to add. All descendant nodes will be added.
|
---|
224 | ;Ouput:
|
---|
225 | ; function value - 1 on success, 0 on failure
|
---|
226 | ;
|
---|
227 | Q:'$G(EVENT) 0
|
---|
228 | Q:'$L($G(^HLEV(776.4,EVENT,0))) 0
|
---|
229 | Q:'$D(NOTE) 0
|
---|
230 | ;
|
---|
231 | N LABEL,I
|
---|
232 | S I=$O(^HLEV(776.4,EVENT,1,9999999),-1)+1
|
---|
233 | I $L($G(NOTE)) S ^HLEV(776.4,EVENT,1,I,0)=NOTE,I=I+1
|
---|
234 | S LABEL="NOTE"
|
---|
235 | F S LABEL=$Q(@LABEL) Q:LABEL="" S ^HLEV(776.4,EVENT,1,I,0)=@LABEL,I=I+1
|
---|
236 | S ^HLEV(776.4,EVENT,1,0)="^776.41^"_(I-1)_"^"_(I-1)_"^"_DT
|
---|
237 | Q 1
|
---|
238 | ;
|
---|
239 | GETNOTES(EVENT,ARRAY) ;
|
---|
240 | ;Description - given an event, returns the note field into an array, local or global
|
---|
241 | ;Input: ARRAY - the name of the array to store the notes, referenced by indirection
|
---|
242 | ;Output:
|
---|
243 | ; function returns 1 on success, 0 on failure
|
---|
244 | ; @ARRAY will contain the NOTES, wich is a WP field
|
---|
245 | ;
|
---|
246 | Q:'$L('$G(ARRAY)) 0
|
---|
247 | Q:'$G(EVENT) 0
|
---|
248 | K @ARRAY
|
---|
249 | M @ARRAY=^HLEV(776.4,EVENT,1)
|
---|
250 | Q 1
|
---|