source: smart/trunk/kids/C0S_1_0_0_T1.KID@ 1526

Last change on this file since 1526 was 1526, checked in by George Lilly, 12 years ago

initial release of the VistA Smart Container demo

File size: 193.9 KB
Line 
1KIDS Distribution saved on Sep 07, 2012@18:45
2initial VistA Smart container demo
3**KIDS**:C0S*1.0*0^
4
5**INSTALL NAME**
6C0S*1.0*0
7"BLD",7929,0)
8C0S*1.0*0^^0^3120907^n
9"BLD",7929,4,0)
10^9.64PA^^
11"BLD",7929,6.3)
121
13"BLD",7929,"KRN",0)
14^9.67PA^779.2^20
15"BLD",7929,"KRN",.4,0)
16.4
17"BLD",7929,"KRN",.401,0)
18.401
19"BLD",7929,"KRN",.402,0)
20.402
21"BLD",7929,"KRN",.403,0)
22.403
23"BLD",7929,"KRN",.5,0)
24.5
25"BLD",7929,"KRN",.84,0)
26.84
27"BLD",7929,"KRN",3.6,0)
283.6
29"BLD",7929,"KRN",3.8,0)
303.8
31"BLD",7929,"KRN",9.2,0)
329.2
33"BLD",7929,"KRN",9.8,0)
349.8
35"BLD",7929,"KRN",9.8,"NM",0)
36^9.68A^13^13
37"BLD",7929,"KRN",9.8,"NM",1,0)
38C0SDEM^^0^B59022362
39"BLD",7929,"KRN",9.8,"NM",2,0)
40C0SDOM^^0^B87367162
41"BLD",7929,"KRN",9.8,"NM",3,0)
42C0SLAB^^0^B79265150
43"BLD",7929,"KRN",9.8,"NM",4,0)
44C0SMART^^0^B2902265
45"BLD",7929,"KRN",9.8,"NM",5,0)
46C0SMED^^0^B40719083
47"BLD",7929,"KRN",9.8,"NM",6,0)
48C0SMXMLB^^0^B12189644
49"BLD",7929,"KRN",9.8,"NM",7,0)
50C0SNHIN^^0^B88600644
51"BLD",7929,"KRN",9.8,"NM",8,0)
52C0SNHINV^^0^B15736572
53"BLD",7929,"KRN",9.8,"NM",9,0)
54C0SPROB^^0^B49669400
55"BLD",7929,"KRN",9.8,"NM",10,0)
56C0SPROB2^^0^B63749946
57"BLD",7929,"KRN",9.8,"NM",11,0)
58C0STBL^^0^B2532386
59"BLD",7929,"KRN",9.8,"NM",12,0)
60C0SUTIL^^0^B1005502
61"BLD",7929,"KRN",9.8,"NM",13,0)
62C0SXPATH^^0^B521212541
63"BLD",7929,"KRN",9.8,"NM","B","C0SDEM",1)
64
65"BLD",7929,"KRN",9.8,"NM","B","C0SDOM",2)
66
67"BLD",7929,"KRN",9.8,"NM","B","C0SLAB",3)
68
69"BLD",7929,"KRN",9.8,"NM","B","C0SMART",4)
70
71"BLD",7929,"KRN",9.8,"NM","B","C0SMED",5)
72
73"BLD",7929,"KRN",9.8,"NM","B","C0SMXMLB",6)
74
75"BLD",7929,"KRN",9.8,"NM","B","C0SNHIN",7)
76
77"BLD",7929,"KRN",9.8,"NM","B","C0SNHINV",8)
78
79"BLD",7929,"KRN",9.8,"NM","B","C0SPROB",9)
80
81"BLD",7929,"KRN",9.8,"NM","B","C0SPROB2",10)
82
83"BLD",7929,"KRN",9.8,"NM","B","C0STBL",11)
84
85"BLD",7929,"KRN",9.8,"NM","B","C0SUTIL",12)
86
87"BLD",7929,"KRN",9.8,"NM","B","C0SXPATH",13)
88
89"BLD",7929,"KRN",19,0)
9019
91"BLD",7929,"KRN",19.1,0)
9219.1
93"BLD",7929,"KRN",101,0)
94101
95"BLD",7929,"KRN",409.61,0)
96409.61
97"BLD",7929,"KRN",771,0)
98771
99"BLD",7929,"KRN",779.2,0)
100779.2
101"BLD",7929,"KRN",870,0)
102870
103"BLD",7929,"KRN",8989.51,0)
1048989.51
105"BLD",7929,"KRN",8989.52,0)
1068989.52
107"BLD",7929,"KRN",8994,0)
1088994
109"BLD",7929,"KRN","B",.4,.4)
110
111"BLD",7929,"KRN","B",.401,.401)
112
113"BLD",7929,"KRN","B",.402,.402)
114
115"BLD",7929,"KRN","B",.403,.403)
116
117"BLD",7929,"KRN","B",.5,.5)
118
119"BLD",7929,"KRN","B",.84,.84)
120
121"BLD",7929,"KRN","B",3.6,3.6)
122
123"BLD",7929,"KRN","B",3.8,3.8)
124
125"BLD",7929,"KRN","B",9.2,9.2)
126
127"BLD",7929,"KRN","B",9.8,9.8)
128
129"BLD",7929,"KRN","B",19,19)
130
131"BLD",7929,"KRN","B",19.1,19.1)
132
133"BLD",7929,"KRN","B",101,101)
134
135"BLD",7929,"KRN","B",409.61,409.61)
136
137"BLD",7929,"KRN","B",771,771)
138
139"BLD",7929,"KRN","B",779.2,779.2)
140
141"BLD",7929,"KRN","B",870,870)
142
143"BLD",7929,"KRN","B",8989.51,8989.51)
144
145"BLD",7929,"KRN","B",8989.52,8989.52)
146
147"BLD",7929,"KRN","B",8994,8994)
148
149"MBREQ")
1500
151"QUES","XPF1",0)
152Y
153"QUES","XPF1","??")
154^D REP^XPDH
155"QUES","XPF1","A")
156Shall I write over your |FLAG| File
157"QUES","XPF1","B")
158YES
159"QUES","XPF1","M")
160D XPF1^XPDIQ
161"QUES","XPF2",0)
162Y
163"QUES","XPF2","??")
164^D DTA^XPDH
165"QUES","XPF2","A")
166Want my data |FLAG| yours
167"QUES","XPF2","B")
168YES
169"QUES","XPF2","M")
170D XPF2^XPDIQ
171"QUES","XPI1",0)
172YO
173"QUES","XPI1","??")
174^D INHIBIT^XPDH
175"QUES","XPI1","A")
176Want KIDS to INHIBIT LOGONs during the install
177"QUES","XPI1","B")
178NO
179"QUES","XPI1","M")
180D XPI1^XPDIQ
181"QUES","XPM1",0)
182PO^VA(200,:EM
183"QUES","XPM1","??")
184^D MG^XPDH
185"QUES","XPM1","A")
186Enter the Coordinator for Mail Group '|FLAG|'
187"QUES","XPM1","B")
188
189"QUES","XPM1","M")
190D XPM1^XPDIQ
191"QUES","XPO1",0)
192Y
193"QUES","XPO1","??")
194^D MENU^XPDH
195"QUES","XPO1","A")
196Want KIDS to Rebuild Menu Trees Upon Completion of Install
197"QUES","XPO1","B")
198NO
199"QUES","XPO1","M")
200D XPO1^XPDIQ
201"QUES","XPZ1",0)
202Y
203"QUES","XPZ1","??")
204^D OPT^XPDH
205"QUES","XPZ1","A")
206Want to DISABLE Scheduled Options, Menu Options, and Protocols
207"QUES","XPZ1","B")
208NO
209"QUES","XPZ1","M")
210D XPZ1^XPDIQ
211"QUES","XPZ2",0)
212Y
213"QUES","XPZ2","??")
214^D RTN^XPDH
215"QUES","XPZ2","A")
216Want to MOVE routines to other CPUs
217"QUES","XPZ2","B")
218NO
219"QUES","XPZ2","M")
220D XPZ2^XPDIQ
221"RTN")
22213
223"RTN","C0SDEM")
2240^1^B59022362
225"RTN","C0SDEM",1,0)
226C0SDEM ; GPL - Smart Demographics Processing ;2/22/12 17:05
227"RTN","C0SDEM",2,0)
228 ;;0.1;C0S;nopatch;noreleasedate;Build 1
229"RTN","C0SDEM",3,0)
230 ;Copyright 2012 George Lilly. Licensed under the terms of the GNU
231"RTN","C0SDEM",4,0)
232 ;General Public License See attached copy of the License.
233"RTN","C0SDEM",5,0)
234 ;
235"RTN","C0SDEM",6,0)
236 ;This program is free software; you can redistribute it and/or modify
237"RTN","C0SDEM",7,0)
238 ;it under the terms of the GNU General Public License as published by
239"RTN","C0SDEM",8,0)
240 ;the Free Software Foundation; either version 2 of the License, or
241"RTN","C0SDEM",9,0)
242 ;(at your option) any later version.
243"RTN","C0SDEM",10,0)
244 ;
245"RTN","C0SDEM",11,0)
246 ;This program is distributed in the hope that it will be useful,
247"RTN","C0SDEM",12,0)
248 ;but WITHOUT ANY WARRANTY; without even the implied warranty of
249"RTN","C0SDEM",13,0)
250 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
251"RTN","C0SDEM",14,0)
252 ;GNU General Public License for more details.
253"RTN","C0SDEM",15,0)
254 ;
255"RTN","C0SDEM",16,0)
256 ;You should have received a copy of the GNU General Public License along
257"RTN","C0SDEM",17,0)
258 ;with this program; if not, write to the Free Software Foundation, Inc.,
259"RTN","C0SDEM",18,0)
260 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
261"RTN","C0SDEM",19,0)
262 ;
263"RTN","C0SDEM",20,0)
264 Q
265"RTN","C0SDEM",21,0)
266 ;
267"RTN","C0SDEM",22,0)
268 ;<?xml version="1.0" encoding="utf-8"?>
269"RTN","C0SDEM",23,0)
270 ;<rdf:RDF
271"RTN","C0SDEM",24,0)
272 ; xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
273"RTN","C0SDEM",25,0)
274 ; xmlns:sp="http://smartplatforms.org/terms#"
275"RTN","C0SDEM",26,0)
276 ; xmlns:dcterms="http://purl.org/dc/terms/"
277"RTN","C0SDEM",27,0)
278 ; xmlns:v="http://www.w3.org/2006/vcard/ns#"
279"RTN","C0SDEM",28,0)
280 ; xmlns:foaf="http://xmlns.com/foaf/0.1/">
281"RTN","C0SDEM",29,0)
282 ; <sp:Demographics>
283"RTN","C0SDEM",30,0)
284 ;
285"RTN","C0SDEM",31,0)
286 ; <v:n>
287"RTN","C0SDEM",32,0)
288 ; <v:Name>
289"RTN","C0SDEM",33,0)
290 ; <v:given-name>Bob</v:given-name>
291"RTN","C0SDEM",34,0)
292 ; <v:additional-name>J</v:additional-name>
293"RTN","C0SDEM",35,0)
294 ; <v:family-name>Odenkirk</v:family-name>
295"RTN","C0SDEM",36,0)
296 ; </v:Name>
297"RTN","C0SDEM",37,0)
298 ; </v:n>
299"RTN","C0SDEM",38,0)
300 ;
301"RTN","C0SDEM",39,0)
302 ; <v:adr>
303"RTN","C0SDEM",40,0)
304 ; <v:Address>
305"RTN","C0SDEM",41,0)
306 ; <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home" />
307"RTN","C0SDEM",42,0)
308 ; <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Pref" />
309"RTN","C0SDEM",43,0)
310 ;
311"RTN","C0SDEM",44,0)
312 ; <v:street-address>15 Main St</v:street-address>
313"RTN","C0SDEM",45,0)
314 ; <v:extended-address>Apt 2</v:extended-address>
315"RTN","C0SDEM",46,0)
316 ; <v:locality>Wonderland</v:locality>
317"RTN","C0SDEM",47,0)
318 ; <v:region>OZ</v:region>
319"RTN","C0SDEM",48,0)
320 ; <v:postal-code>54321</v:postal-code>
321"RTN","C0SDEM",49,0)
322 ; <v:country>USA</v:country>
323"RTN","C0SDEM",50,0)
324 ; </v:Address>
325"RTN","C0SDEM",51,0)
326 ; </v:adr>
327"RTN","C0SDEM",52,0)
328 ;
329"RTN","C0SDEM",53,0)
330 ; <v:tel>
331"RTN","C0SDEM",54,0)
332 ; <v:Tel>
333"RTN","C0SDEM",55,0)
334 ; <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home" />
335"RTN","C0SDEM",56,0)
336 ; <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Pref" />
337"RTN","C0SDEM",57,0)
338 ; <rdf:value>800-555-1212</rdf:value>
339"RTN","C0SDEM",58,0)
340 ; </v:Tel>
341"RTN","C0SDEM",59,0)
342 ; </v:tel>
343"RTN","C0SDEM",60,0)
344 ;
345"RTN","C0SDEM",61,0)
346 ; <v:tel>
347"RTN","C0SDEM",62,0)
348 ; <v:Tel>
349"RTN","C0SDEM",63,0)
350 ; <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Cell" />
351"RTN","C0SDEM",64,0)
352 ; <rdf:value>800-555-1515</rdf:value>
353"RTN","C0SDEM",65,0)
354 ; </v:Tel>
355"RTN","C0SDEM",66,0)
356 ; </v:tel>
357"RTN","C0SDEM",67,0)
358 ;
359"RTN","C0SDEM",68,0)
360 ; <foaf:gender>male</foaf:gender>
361"RTN","C0SDEM",69,0)
362 ; <v:bday>1959-12-25</v:bday>
363"RTN","C0SDEM",70,0)
364 ; <v:email>bob.odenkirk@example.com</v:email>
365"RTN","C0SDEM",71,0)
366 ;
367"RTN","C0SDEM",72,0)
368 ; <sp:medicalRecordNumber>
369"RTN","C0SDEM",73,0)
370 ; <sp:Code>
371"RTN","C0SDEM",74,0)
372 ; <dcterms:title>My Hospital Record 2304575</dcterms:title>
373"RTN","C0SDEM",75,0)
374 ; <dcterms:identifier>2304575</dcterms:identifier>
375"RTN","C0SDEM",76,0)
376 ; <sp:system>My Hospital Record</sp:system>
377"RTN","C0SDEM",77,0)
378 ; </sp:Code>
379"RTN","C0SDEM",78,0)
380 ; </sp:medicalRecordNumber>
381"RTN","C0SDEM",79,0)
382 ;
383"RTN","C0SDEM",80,0)
384 ; </sp:Demographics>
385"RTN","C0SDEM",81,0)
386 ;</rdf:RDF><?xml version="1.0" encoding="utf-8"?>
387"RTN","C0SDEM",82,0)
388 ;<rdf:RDF
389"RTN","C0SDEM",83,0)
390 ; xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
391"RTN","C0SDEM",84,0)
392 ; xmlns:sp="http://smartplatforms.org/terms#"
393"RTN","C0SDEM",85,0)
394 ; xmlns:dcterms="http://purl.org/dc/terms/"
395"RTN","C0SDEM",86,0)
396 ; xmlns:v="http://www.w3.org/2006/vcard/ns#"
397"RTN","C0SDEM",87,0)
398 ; xmlns:foaf="http://xmlns.com/foaf/0.1/">
399"RTN","C0SDEM",88,0)
400 ; <sp:Demographics>
401"RTN","C0SDEM",89,0)
402 ;
403"RTN","C0SDEM",90,0)
404 ; <v:n>
405"RTN","C0SDEM",91,0)
406 ; <v:Name>
407"RTN","C0SDEM",92,0)
408 ; <v:given-name>Bob</v:given-name>
409"RTN","C0SDEM",93,0)
410 ; <v:additional-name>J</v:additional-name>
411"RTN","C0SDEM",94,0)
412 ; <v:family-name>Odenkirk</v:family-name>
413"RTN","C0SDEM",95,0)
414 ; </v:Name>
415"RTN","C0SDEM",96,0)
416 ; </v:n>
417"RTN","C0SDEM",97,0)
418 ;
419"RTN","C0SDEM",98,0)
420 ; <v:adr>
421"RTN","C0SDEM",99,0)
422 ; <v:Address>
423"RTN","C0SDEM",100,0)
424 ; <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home" />
425"RTN","C0SDEM",101,0)
426 ; <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Pref" />
427"RTN","C0SDEM",102,0)
428 ;
429"RTN","C0SDEM",103,0)
430 ; <v:street-address>15 Main St</v:street-address>
431"RTN","C0SDEM",104,0)
432 ; <v:extended-address>Apt 2</v:extended-address>
433"RTN","C0SDEM",105,0)
434 ; <v:locality>Wonderland</v:locality>
435"RTN","C0SDEM",106,0)
436 ; <v:region>OZ</v:region>
437"RTN","C0SDEM",107,0)
438 ; <v:postal-code>54321</v:postal-code>
439"RTN","C0SDEM",108,0)
440 ; <v:country>USA</v:country>
441"RTN","C0SDEM",109,0)
442 ; </v:Address>
443"RTN","C0SDEM",110,0)
444 ; </v:adr>
445"RTN","C0SDEM",111,0)
446 ;
447"RTN","C0SDEM",112,0)
448 ; <v:tel>
449"RTN","C0SDEM",113,0)
450 ; <v:Tel>
451"RTN","C0SDEM",114,0)
452 ; <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home" />
453"RTN","C0SDEM",115,0)
454 ; <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Pref" />
455"RTN","C0SDEM",116,0)
456 ; <rdf:value>800-555-1212</rdf:value>
457"RTN","C0SDEM",117,0)
458 ; </v:Tel>
459"RTN","C0SDEM",118,0)
460 ; </v:tel>
461"RTN","C0SDEM",119,0)
462 ;
463"RTN","C0SDEM",120,0)
464 ; <v:tel>
465"RTN","C0SDEM",121,0)
466 ; <v:Tel>
467"RTN","C0SDEM",122,0)
468 ; <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Cell" />
469"RTN","C0SDEM",123,0)
470 ; <rdf:value>800-555-1515</rdf:value>
471"RTN","C0SDEM",124,0)
472 ; </v:Tel>
473"RTN","C0SDEM",125,0)
474 ; </v:tel>
475"RTN","C0SDEM",126,0)
476 ;
477"RTN","C0SDEM",127,0)
478 ; <foaf:gender>male</foaf:gender>
479"RTN","C0SDEM",128,0)
480 ; <v:bday>1959-12-25</v:bday>
481"RTN","C0SDEM",129,0)
482 ; <v:email>bob.odenkirk@example.com</v:email>
483"RTN","C0SDEM",130,0)
484 ;
485"RTN","C0SDEM",131,0)
486 ; <sp:medicalRecordNumber>
487"RTN","C0SDEM",132,0)
488 ; <sp:Code>
489"RTN","C0SDEM",133,0)
490 ; <dcterms:title>My Hospital Record 2304575</dcterms:title>
491"RTN","C0SDEM",134,0)
492 ; <dcterms:identifier>2304575</dcterms:identifier>
493"RTN","C0SDEM",135,0)
494 ; <sp:system>My Hospital Record</sp:system>
495"RTN","C0SDEM",136,0)
496 ; </sp:Code>
497"RTN","C0SDEM",137,0)
498 ; </sp:medicalRecordNumber>
499"RTN","C0SDEM",138,0)
500 ;
501"RTN","C0SDEM",139,0)
502 ; </sp:Demographics>
503"RTN","C0SDEM",140,0)
504 ;</rdf:RDF>
505"RTN","C0SDEM",141,0)
506 ;G(1)="nodeID:25591^rdf:type^v:Home"
507"RTN","C0SDEM",142,0)
508 ;G(2)="nodeID:25591^rdf:type^v:Pref"
509"RTN","C0SDEM",143,0)
510 ;G(3)="nodeID:25591^rdf:type^v:Tel"
511"RTN","C0SDEM",144,0)
512 ;G(4)="nodeID:25591^rdf:value^800-369-6403"
513"RTN","C0SDEM",145,0)
514 ;G(5)="nodeID:25611^rdf:type^v:Name"
515"RTN","C0SDEM",146,0)
516 ;G(6)="nodeID:25611^v:additional-name^N"
517"RTN","C0SDEM",147,0)
518 ;G(7)="nodeID:25611^v:family-name^Brooks"
519"RTN","C0SDEM",148,0)
520 ;G(8)="nodeID:25611^v:given-name^Brian"
521"RTN","C0SDEM",149,0)
522 ;G(9)="nodeID:25622^dcterms:identifier^981968"
523"RTN","C0SDEM",150,0)
524 ;G(10)="nodeID:25622^dcterms:title^My Hospital Record 981968"
525"RTN","C0SDEM",151,0)
526 ;G(11)="nodeID:25622^rdf:type^sp:Code"
527"RTN","C0SDEM",152,0)
528 ;G(12)="nodeID:25622^sp:system^My Hospital Record"
529"RTN","C0SDEM",153,0)
530 ;G(13)="nodeID:25623^rdf:type^v:Address"
531"RTN","C0SDEM",154,0)
532 ;G(14)="nodeID:25623^rdf:type^v:Home"
533"RTN","C0SDEM",155,0)
534 ;G(15)="nodeID:25623^rdf:type^v:Pref"
535"RTN","C0SDEM",156,0)
536 ;G(16)="nodeID:25623^v:locality^Bixby"
537"RTN","C0SDEM",157,0)
538 ;G(17)="nodeID:25623^v:postal-code^74008"
539"RTN","C0SDEM",158,0)
540 ;G(18)="nodeID:25623^v:region^OK"
541"RTN","C0SDEM",159,0)
542 ;G(19)="nodeID:25623^v:street-address^82 Lake St"
543"RTN","C0SDEM",160,0)
544 ;G(20)="smart:981968/demographics^foaf:gender^male"
545"RTN","C0SDEM",161,0)
546 ;G(21)="smart:981968/demographics^rdf:type^sp:Demographics"
547"RTN","C0SDEM",162,0)
548 ;G(22)="smart:981968/demographics^sp:belongsTo^smart:981968"
549"RTN","C0SDEM",163,0)
550 ;G(23)="smart:981968/demographics^sp:medicalRecordNumber^nodeID:25622"
551"RTN","C0SDEM",164,0)
552 ;G(24)="smart:981968/demographics^v:adr^nodeID:25623"
553"RTN","C0SDEM",165,0)
554 ;G(25)="smart:981968/demographics^v:bday^1956-03-23"
555"RTN","C0SDEM",166,0)
556 ;G(26)="smart:981968/demographics^v:email^brian.brooks@example.com"
557"RTN","C0SDEM",167,0)
558 ;G(27)="smart:981968/demographics^v:n^nodeID:25611"
559"RTN","C0SDEM",168,0)
560 ;G(28)="smart:981968/demographics^v:tel^nodeID:25591"
561"RTN","C0SDEM",169,0)
562 Q
563"RTN","C0SDEM",170,0)
564 ;
565"RTN","C0SDEM",171,0)
566PATIENT(GRTN,C0SARY) ; GRTN, passed by reference,
567"RTN","C0SDEM",172,0)
568 ; is the return name of the graph created. "" if none
569"RTN","C0SDEM",173,0)
570 ; C0SARY is passed in by reference and is the NHIN array of patient
571"RTN","C0SDEM",174,0)
572 ;
573"RTN","C0SDEM",175,0)
574 I $O(C0SARY("patient",""))="" D Q ;
575"RTN","C0SDEM",176,0)
576 . I $D(DEBUG) W !,"No Patient array"
577"RTN","C0SDEM",177,0)
578 . S GRTN=""
579"RTN","C0SDEM",178,0)
580 S GRTN="" ; default to no patient
581"RTN","C0SDEM",179,0)
582 N C0SGRF
583"RTN","C0SDEM",180,0)
584 S C0SGRF="vistaSmart:"_ZPATID_"/patient"
585"RTN","C0SDEM",181,0)
586 S ZPAT=C0SGRF ; subject is the same as the graph name
587"RTN","C0SDEM",182,0)
588 I $D(DEBUG) W !,"Processing ",C0SGRF
589"RTN","C0SDEM",183,0)
590 D DELGRAPH^C0XF2N(C0SGRF) ; delete the old graph
591"RTN","C0SDEM",184,0)
592 D INITFARY^C0XF2N("C0XFARY") ; which triple store to use
593"RTN","C0SDEM",185,0)
594 N FARY S FARY="C0XFARY"
595"RTN","C0SDEM",186,0)
596 D USEFARY^C0XF2N(FARY)
597"RTN","C0SDEM",187,0)
598 D VOCINIT^C0XUTIL
599"RTN","C0SDEM",188,0)
600 ;
601"RTN","C0SDEM",189,0)
602 N ZPN,ZR
603"RTN","C0SDEM",190,0)
604 D STARTADD^C0XF2N
605"RTN","C0SDEM",191,0)
606 ;
607"RTN","C0SDEM",192,0)
608 ; First do the base demographic graph
609"RTN","C0SDEM",193,0)
610 ;
611"RTN","C0SDEM",194,0)
612 S ZPN=$NA(C0SARY("patient",1)) ; name of predicate array for this patient
613"RTN","C0SDEM",195,0)
614 N SEX S SEX=$G(@ZPN@("gender@value"))
615"RTN","C0SDEM",196,0)
616 I SEX="M" S SEX="male"
617"RTN","C0SDEM",197,0)
618 I SEX="F" S SEX="female"
619"RTN","C0SDEM",198,0)
620 S ZR("foaf:gender")=SEX
621"RTN","C0SDEM",199,0)
622 S ZR("rdf:type")="sp:Demographics"
623"RTN","C0SDEM",200,0)
624 S ZR("sp:belongsTo")=ZPAT
625"RTN","C0SDEM",201,0)
626 N PATIENT
627"RTN","C0SDEM",202,0)
628 S PATIENT=$P(ZPAT,"#",2)
629"RTN","C0SDEM",203,0)
630 I $D(DEBUG) W !,"PROCESSING PATIENT ",PATIENT
631"RTN","C0SDEM",204,0)
632 N NMREC S NMREC=$$ANONS^C0XF2N ; new anonomous subject for med rec graph
633"RTN","C0SDEM",205,0)
634 S ZR("sp:medicalRecordNumber")=NMREC
635"RTN","C0SDEM",206,0)
636 N NVADR S NVADR=$$ANONS^C0XF2N ; for address
637"RTN","C0SDEM",207,0)
638 S ZR("v:adr")=NVADR
639"RTN","C0SDEM",208,0)
640 N NNAME S NNAME=$$ANONS^C0XF2N ; for name
641"RTN","C0SDEM",209,0)
642 S ZR("v:n")=NNAME
643"RTN","C0SDEM",210,0)
644 N NTEL S NTEL=$$ANONS^C0XF2N ; for telephone
645"RTN","C0SDEM",211,0)
646 I $D(@ZPN@("telecomList.telecom@value")) S ZR("v:tel")=NTEL ; only if exists
647"RTN","C0SDEM",212,0)
648 N BDATE
649"RTN","C0SDEM",213,0)
650 S ZX=""
651"RTN","C0SDEM",214,0)
652 S ZX=$G(@ZPN@("dob@value")) ; date of birth in fileman format
653"RTN","C0SDEM",215,0)
654 S BDATE=$$FMTE^XLFDT(ZX,"7D") ; ordered date
655"RTN","C0SDEM",216,0)
656 S BDATE=$TR(BDATE,"/","-") ; change slashes to hyphens
657"RTN","C0SDEM",217,0)
658 I BDATE="" S BDATE="UNKNOWN"
659"RTN","C0SDEM",218,0)
660 N Z2,Z3
661"RTN","C0SDEM",219,0)
662 S Z2=$P(BDATE,"-",2)
663"RTN","C0SDEM",220,0)
664 S Z3=$P(BDATE,"-",3)
665"RTN","C0SDEM",221,0)
666 I $L(Z2)=1 S $P(BDATE,"-",2)="0"_Z2
667"RTN","C0SDEM",222,0)
668 I $L(Z3)=1 S $P(BDATE,"-",3)="0"_Z3
669"RTN","C0SDEM",223,0)
670 S ZR("v:bday")=BDATE
671"RTN","C0SDEM",224,0)
672 I $D(C0SVISTA) D ;
673"RTN","C0SDEM",225,0)
674 . S ZR("vista:SSN")=$G(@ZPN@("ssn@value")) ; SSN
675"RTN","C0SDEM",226,0)
676 . S ZR("vista:DFN")=$G(@ZPN@("id@value")) ; DFN
677"RTN","C0SDEM",227,0)
678 D ADDINN^C0XF2N(C0SGRF,ZPAT,.ZR) ; create base graph
679"RTN","C0SDEM",228,0)
680 K ZR
681"RTN","C0SDEM",229,0)
682 ;
683"RTN","C0SDEM",230,0)
684 ; create address sub-graph
685"RTN","C0SDEM",231,0)
686 ;
687"RTN","C0SDEM",232,0)
688 S ZR("rdf:type")="v:Address"
689"RTN","C0SDEM",233,0)
690 S ZR("rdf:type")="v:Home"
691"RTN","C0SDEM",234,0)
692 S ZR("v:locality")=$G(@ZPN@("address@city"))
693"RTN","C0SDEM",235,0)
694 S ZR("v:postal-code")=$G(@ZPN@("address@postalCode"))
695"RTN","C0SDEM",236,0)
696 S ZR("v:region")=$G(@ZPN@("address@stateProvince"))
697"RTN","C0SDEM",237,0)
698 S ZR("v:street-address")=$G(@ZPN@("address@streetLine1"))
699"RTN","C0SDEM",238,0)
700 D ADDINN^C0XF2N(C0SGRF,NVADR,.ZR) ; create the vcard address
701"RTN","C0SDEM",239,0)
702 K ZR
703"RTN","C0SDEM",240,0)
704 ;
705"RTN","C0SDEM",241,0)
706 ; create medical record subgraph
707"RTN","C0SDEM",242,0)
708 ;
709"RTN","C0SDEM",243,0)
710 S ZR("dcterms:identifier")=$G(@ZPN@("id@value"))
711"RTN","C0SDEM",244,0)
712 S ZR("dcterms:title")="VistA Patient Record "_ZR("dcterms:identifier")
713"RTN","C0SDEM",245,0)
714 S ZR("rdf:type")="sp:Code"
715"RTN","C0SDEM",246,0)
716 S ZR("sp:system")="VistA Patient Record"
717"RTN","C0SDEM",247,0)
718 D ADDINN^C0XF2N(C0SGRF,NMREC,.ZR) ; create medical record graph
719"RTN","C0SDEM",248,0)
720 K ZR
721"RTN","C0SDEM",249,0)
722 ;
723"RTN","C0SDEM",250,0)
724 ; create name subgraph
725"RTN","C0SDEM",251,0)
726 ;
727"RTN","C0SDEM",252,0)
728 N ZNF,ZNL,ZNM,ZNAM
729"RTN","C0SDEM",253,0)
730 S ZR("rdf:type")="v:Name"
731"RTN","C0SDEM",254,0)
732 S ZX=$G(@ZPN@("givenNames@value")) ; first name and middle names
733"RTN","C0SDEM",255,0)
734 S ZNF=$P(ZX," ",1) ; first name is first piece
735"RTN","C0SDEM",256,0)
736 S ZNM=$P(ZX," ",2) ; middle names are the rest
737"RTN","C0SDEM",257,0)
738 S ZR("v:additional-name")=ZNM
739"RTN","C0SDEM",258,0)
740 S ZR("v:family-name")=$G(@ZPN@("familyName@value"))
741"RTN","C0SDEM",259,0)
742 S ZR("v:given-name")=ZNF
743"RTN","C0SDEM",260,0)
744 D ADDINN^C0XF2N(C0SGRF,NNAME,.ZR) ; insert name graph
745"RTN","C0SDEM",261,0)
746 K ZR
747"RTN","C0SDEM",262,0)
748 ;
749"RTN","C0SDEM",263,0)
750 ; create telephone subgraph
751"RTN","C0SDEM",264,0)
752 ;
753"RTN","C0SDEM",265,0)
754 D ;
755"RTN","C0SDEM",266,0)
756 . S ZR("rdf:value")=$G(@ZPN@("telecomList.telecom@value"))
757"RTN","C0SDEM",267,0)
758 . I ZR("rdf:value")="" Q ; telephone number missing, no subgraph
759"RTN","C0SDEM",268,0)
760 . S ZR("rdf:type")="v:Tel"
761"RTN","C0SDEM",269,0)
762 . D ADDINN^C0XF2N(C0SGRF,NTEL,.ZR)
763"RTN","C0SDEM",270,0)
764 K ZR
765"RTN","C0SDEM",271,0)
766 ;
767"RTN","C0SDEM",272,0)
768 ; load the demographics graph and all sub graphs to the triple store
769"RTN","C0SDEM",273,0)
770 ;
771"RTN","C0SDEM",274,0)
772 D BULKLOAD^C0XF2N(.C0XFDA)
773"RTN","C0SDEM",275,0)
774 S GRTN=C0SGRF
775"RTN","C0SDEM",276,0)
776 Q
777"RTN","C0SDEM",277,0)
778 ;
779"RTN","C0SDEM",278,0)
780AGES ; LIST ALL PATIENTS AND THEIR AGES
781"RTN","C0SDEM",279,0)
782 N ZI S ZI=0
783"RTN","C0SDEM",280,0)
784 F S ZI=$O(^DPT(ZI)) Q:+ZI=0 D ; FOR EVERY PATIENT
785"RTN","C0SDEM",281,0)
786 . N ZDOB
787"RTN","C0SDEM",282,0)
788 . S ZDOB=$$GET1^DIQ(2,ZI_",","DOB","I") ; FILEMAN DOB
789"RTN","C0SDEM",283,0)
790 . N ZNAME
791"RTN","C0SDEM",284,0)
792 . S ZNAME=$P(^DPT(ZI,0),U)
793"RTN","C0SDEM",285,0)
794 . N ZSEX
795"RTN","C0SDEM",286,0)
796 . S ZSEX=$$GET1^DIQ(2,ZI_",","SEX")
797"RTN","C0SDEM",287,0)
798 . W !,"DFN:",ZI," ",ZNAME," AGE: ",+$$BRIEF^VWTIME(ZDOB)," YEAR OLD ",ZSEX
799"RTN","C0SDEM",288,0)
800 Q
801"RTN","C0SDEM",289,0)
802 ;
803"RTN","C0SDOM")
8040^2^B87367162
805"RTN","C0SDOM",1,0)
806C0SDOM ; GPL - Smart Container - DOM PROCESSING ROUTINES ;6/6/11 17:05
807"RTN","C0SDOM",2,0)
808 ;;0.1;C0S;nopatch;noreleasedate;Build 1
809"RTN","C0SDOM",3,0)
810 ;Copyright 2011,2012 George Lilly. Licensed under the terms of the GNU
811"RTN","C0SDOM",4,0)
812 ;General Public License See attached copy of the License.
813"RTN","C0SDOM",5,0)
814 ;
815"RTN","C0SDOM",6,0)
816 ;This program is free software; you can redistribute it and/or modify
817"RTN","C0SDOM",7,0)
818 ;it under the terms of the GNU General Public License as published by
819"RTN","C0SDOM",8,0)
820 ;the Free Software Foundation; either version 2 of the License, or
821"RTN","C0SDOM",9,0)
822 ;(at your option) any later version.
823"RTN","C0SDOM",10,0)
824 ;
825"RTN","C0SDOM",11,0)
826
827"RTN","C0SDOM",12,0)
828 ;This program is distributed in the hope that it will be useful,
829"RTN","C0SDOM",13,0)
830 ;but WITHOUT ANY WARRANTY; without even the implied warranty of
831"RTN","C0SDOM",14,0)
832 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
833"RTN","C0SDOM",15,0)
834 ;GNU General Public License for more details.
835"RTN","C0SDOM",16,0)
836 ;
837"RTN","C0SDOM",17,0)
838 ;You should have received a copy of the GNU General Public License along
839"RTN","C0SDOM",18,0)
840 ;with this program; if not, write to the Free Software Foundation, Inc.,
841"RTN","C0SDOM",19,0)
842 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
843"RTN","C0SDOM",20,0)
844 ;
845"RTN","C0SDOM",21,0)
846 Q
847"RTN","C0SDOM",22,0)
848 ;
849"RTN","C0SDOM",23,0)
850DOMO(ZOID,ZPATH,ZNARY,ZXIDX,ZXPARY,ZNUM,ZREDUX) ; RECURSIVE ROUTINE TO POPULATE
851"RTN","C0SDOM",24,0)
852 ; THE XPATH INDEX ZXIDX, PASSED BY NAME
853"RTN","C0SDOM",25,0)
854 ; THE XPATH ARRAY XPARY, PASSED BY NAME
855"RTN","C0SDOM",26,0)
856 ; ZOID IS THE STARTING OID
857"RTN","C0SDOM",27,0)
858 ; ZPATH IS THE STARTING XPATH, USUALLY "/"
859"RTN","C0SDOM",28,0)
860 ; ZNUM IS THE MULTIPLE NUMBER [x], USUALLY NULL WHEN ON THE TOP NODE
861"RTN","C0SDOM",29,0)
862 ; ZREDUX IS THE XPATH REDUCTION STRING, TAKEN OUT OF EACH XPATH IF PRESENT
863"RTN","C0SDOM",30,0)
864 I $G(ZREDUX)="" S ZREDUX=""
865"RTN","C0SDOM",31,0)
866 N NEWPATH,NARY ; NEWPATH IS AN XPATH NARY IS AN NHIN MUMPS ARRAY
867"RTN","C0SDOM",32,0)
868 N NEWNUM S NEWNUM=""
869"RTN","C0SDOM",33,0)
870 I $G(ZNUM)>0 S NEWNUM="["_ZNUM_"]"
871"RTN","C0SDOM",34,0)
872 S NEWPATH=ZPATH_"/"_$$TAG(ZOID)_NEWNUM ; CREATE THE XPATH FOR THIS NODE
873"RTN","C0SDOM",35,0)
874 I $G(ZREDUX)'="" D ; REDUX PROVIDED?
875"RTN","C0SDOM",36,0)
876 . N GT S GT=$P(NEWPATH,ZREDUX,2)
877"RTN","C0SDOM",37,0)
878 . I GT'="" S NEWPATH=GT
879"RTN","C0SDOM",38,0)
880 S @ZXIDX@(NEWPATH)=ZOID ; ADD THE XPATH FOR THIS NODE TO THE XPATH INDEX
881"RTN","C0SDOM",39,0)
882 N GA D ATT("GA",ZOID) ; GET ATTRIBUTES FOR THIS NODE
883"RTN","C0SDOM",40,0)
884 I $D(GA) D ; PROCESS THE ATTRIBUTES
885"RTN","C0SDOM",41,0)
886 . N ZI S ZI=""
887"RTN","C0SDOM",42,0)
888 . F S ZI=$O(GA(ZI)) Q:ZI="" D ; FOR EACH ATTRIBUTE
889"RTN","C0SDOM",43,0)
890 . . N ZP S ZP=NEWPATH_"@"_ZI ; PATH FOR ATTRIBUTE
891"RTN","C0SDOM",44,0)
892 . . S @ZXPARY@(ZP)=GA(ZI) ; ADD THE ATTRIBUTE XPATH TO THE XP ARRAY
893"RTN","C0SDOM",45,0)
894 . . I GA(ZI)'="" D ADDNARY(ZP,GA(ZI)) ; ADD THE NHIN ARRAY VALUE
895"RTN","C0SDOM",46,0)
896 N GD D DATA("GD",ZOID) ; SEE IF THERE IS DATA FOR THIS NODE
897"RTN","C0SDOM",47,0)
898 I $D(GD(2)) D ;
899"RTN","C0SDOM",48,0)
900 . M @ZXPARY@(NEWPATH)=GD ; IF MULITPLE DATA MERGE TO THE ARRAY
901"RTN","C0SDOM",49,0)
902 E I $D(GD(1)) D ;
903"RTN","C0SDOM",50,0)
904 . S @ZXPARY@(NEWPATH)=GD(1) ; IF SINGLE VALUE, ADD TO ARRAY
905"RTN","C0SDOM",51,0)
906 . I GD(1)'="" D ADDNARY(NEWPATH,GD(1)) ; ADD TO NHIN ARRAY
907"RTN","C0SDOM",52,0)
908 N ZFRST S ZFRST=$$FIRST(ZOID) ; SET FIRST CHILD
909"RTN","C0SDOM",53,0)
910 I ZFRST'=0 D ; THERE IS A CHILD
911"RTN","C0SDOM",54,0)
912 . N ZNUM
913"RTN","C0SDOM",55,0)
914 . N ZMULT S ZMULT=$$ISMULT(ZFRST) ; IS FIRST CHILD A MULTIPLE
915"RTN","C0SDOM",56,0)
916 . D DOMO(ZFRST,NEWPATH,ZNARY,ZXIDX,ZXPARY,$S(ZMULT:1,1:""),ZREDUX) ; THE CHILD
917"RTN","C0SDOM",57,0)
918 N GNXT S GNXT=$$NXTSIB(ZOID)
919"RTN","C0SDOM",58,0)
920 I $$TAG(GNXT)'=$$TAG(ZOID) S ZNUM="" ; RESET COUNTING AFTER MULTIPLES
921"RTN","C0SDOM",59,0)
922 I GNXT'=0 D ;
923"RTN","C0SDOM",60,0)
924 . N ZMULT S ZMULT=$$ISMULT(GNXT) ; IS THE SIBLING A MULTIPLE?
925"RTN","C0SDOM",61,0)
926 . I (ZNUM="")&(ZMULT) D ; SIBLING IS FIRST OF MULTIPLES
927"RTN","C0SDOM",62,0)
928 . . N ZNUM S ZNUM=1 ;
929"RTN","C0SDOM",63,0)
930 . . D DOMO(GNXT,ZPATH,ZNARY,ZXIDX,ZXPARY,ZNUM,ZREDUX) ; DO NEXT SIB
931"RTN","C0SDOM",64,0)
932 . E D DOMO(GNXT,ZPATH,ZNARY,ZXIDX,ZXPARY,$S(ZNUM>0:ZNUM+1,1:""),ZREDUX) ; SIB
933"RTN","C0SDOM",65,0)
934 Q
935"RTN","C0SDOM",66,0)
936 ;
937"RTN","C0SDOM",67,0)
938ADDNARY(ZXP,ZVALUE) ; ADD AN NHIN ARRAY VALUE TO ZNARY
939"RTN","C0SDOM",68,0)
940 ;
941"RTN","C0SDOM",69,0)
942 ; IF ZATT=1 THE ARRAY IS ADDED AS ATTRIBUTES
943"RTN","C0SDOM",70,0)
944 ;
945"RTN","C0SDOM",71,0)
946 N ZZI,ZZJ,ZZN
947"RTN","C0SDOM",72,0)
948 S ZZI=$P(ZXP,"/",1) ; FIRST PIECE OF XPATH ARRAY
949"RTN","C0SDOM",73,0)
950 I ZZI="" Q ; DON'T ADD THIS ONE .. PROBABLY THE //results NODE
951"RTN","C0SDOM",74,0)
952 S ZZJ=$P(ZXP,ZZI_"/",2) ; REST OF XPATH ARRAY
953"RTN","C0SDOM",75,0)
954 S ZZJ=$TR(ZZJ,"/",".") ; REPLACE / WITH .
955"RTN","C0SDOM",76,0)
956 I ZZI'["]" D ; A SINGLETON
957"RTN","C0SDOM",77,0)
958 . S ZZN=1
959"RTN","C0SDOM",78,0)
960 E D ; THERE IS AN [x] OCCURANCE
961"RTN","C0SDOM",79,0)
962 . S ZZN=$P($P(ZZI,"[",2),"]",1) ; PULL OUT THE OCCURANCE
963"RTN","C0SDOM",80,0)
964 . S ZZI=$P(ZZI,"[",1) ; TAKE OUT THE [X]
965"RTN","C0SDOM",81,0)
966 I ZZJ'="" D ; TIME TO ADD THE VALUE
967"RTN","C0SDOM",82,0)
968 . S @ZNARY@(ZZI,ZZN,ZZJ)=ZVALUE
969"RTN","C0SDOM",83,0)
970 Q
971"RTN","C0SDOM",84,0)
972 ;
973"RTN","C0SDOM",85,0)
974PARSE(INXML,INDOC) ;CALL THE MXML PARSER ON INXML, PASSED BY NAME
975"RTN","C0SDOM",86,0)
976 ; INDOC IS PASSED AS THE DOCUMENT NAME - DON'T KNOW WHERE TO STORE THIS NOW
977"RTN","C0SDOM",87,0)
978 ; EXTRINSIC WHICH RETURNS THE DOCID ASSIGNED BY MXML
979"RTN","C0SDOM",88,0)
980 ;Q $$EN^MXMLDOM(INXML)
981"RTN","C0SDOM",89,0)
982 Q $$EN^MXMLDOM(INXML,"W")
983"RTN","C0SDOM",90,0)
984 ;
985"RTN","C0SDOM",91,0)
986ISMULT(ZOID) ; RETURN TRUE IF ZOID IS ONE OF A MULTIPLE
987"RTN","C0SDOM",92,0)
988 N ZN
989"RTN","C0SDOM",93,0)
990 ;I $$TAG(ZOID)["entry" B
991"RTN","C0SDOM",94,0)
992 S ZN=$$NXTSIB(ZOID)
993"RTN","C0SDOM",95,0)
994 I ZN'="" Q $$TAG(ZOID)=$$TAG(ZN) ; IF TAG IS THE SAME AS NEXT SIB TAG
995"RTN","C0SDOM",96,0)
996 Q 0
997"RTN","C0SDOM",97,0)
998 ;
999"RTN","C0SDOM",98,0)
1000FIRST(ZOID) ;RETURNS THE OID OF THE FIRST CHILD OF ZOID
1001"RTN","C0SDOM",99,0)
1002 Q $$CHILD^MXMLDOM(C0SDOCID,ZOID)
1003"RTN","C0SDOM",100,0)
1004 ;
1005"RTN","C0SDOM",101,0)
1006PARENT(ZOID) ;RETURNS THE OID OF THE PARENT OF ZOID
1007"RTN","C0SDOM",102,0)
1008 Q $$PARENT^MXMLDOM(C0SDOCID,ZOID)
1009"RTN","C0SDOM",103,0)
1010 ;
1011"RTN","C0SDOM",104,0)
1012ATT(RTN,NODE) ;GET ATTRIBUTES FOR ZOID
1013"RTN","C0SDOM",105,0)
1014 S HANDLE=C0SDOCID
1015"RTN","C0SDOM",106,0)
1016 K @RTN
1017"RTN","C0SDOM",107,0)
1018 D GETTXT^MXMLDOM("A")
1019"RTN","C0SDOM",108,0)
1020 Q
1021"RTN","C0SDOM",109,0)
1022 ;
1023"RTN","C0SDOM",110,0)
1024TAG(ZOID) ; RETURNS THE XML TAG FOR THE NODE
1025"RTN","C0SDOM",111,0)
1026 ;I ZOID=149 B ;GPLTEST
1027"RTN","C0SDOM",112,0)
1028 N X,Y
1029"RTN","C0SDOM",113,0)
1030 S Y=""
1031"RTN","C0SDOM",114,0)
1032 S X=$G(C0SCBK("TAG")) ;IS THERE A CALLBACK FOR THIS ROUTINE
1033"RTN","C0SDOM",115,0)
1034 I X'="" X X ; EXECUTE THE CALLBACK, SHOULD SET Y
1035"RTN","C0SDOM",116,0)
1036 I Y="" S Y=$$NAME^MXMLDOM(C0SDOCID,ZOID)
1037"RTN","C0SDOM",117,0)
1038 Q Y
1039"RTN","C0SDOM",118,0)
1040 ;
1041"RTN","C0SDOM",119,0)
1042NXTSIB(ZOID) ; RETURNS THE NEXT SIBLING
1043"RTN","C0SDOM",120,0)
1044 Q $$SIBLING^MXMLDOM(C0SDOCID,ZOID)
1045"RTN","C0SDOM",121,0)
1046 ;
1047"RTN","C0SDOM",122,0)
1048DATA(ZT,ZOID) ; RETURNS DATA FOR THE NODE
1049"RTN","C0SDOM",123,0)
1050 ;N ZT,ZN S ZT=""
1051"RTN","C0SDOM",124,0)
1052 ;S C0SDOM=$NA(^TMP("MXMLDOM",$J,C0SDOCID))
1053"RTN","C0SDOM",125,0)
1054 ;Q $G(@C0SDOM@(ZOID,"T",1))
1055"RTN","C0SDOM",126,0)
1056 S ZN=$$TEXT^MXMLDOM(C0SDOCID,ZOID,ZT)
1057"RTN","C0SDOM",127,0)
1058 Q
1059"RTN","C0SDOM",128,0)
1060 ;
1061"RTN","C0SDOM",129,0)
1062OUTXML(ZRTN,INID,NO1ST) ; USES C0SMXMLB (MXMLBLD) TO OUTPUT XML FROM AN MXMLDOM
1063"RTN","C0SDOM",130,0)
1064 ;
1065"RTN","C0SDOM",131,0)
1066 S C0SDOCID=INID
1067"RTN","C0SDOM",132,0)
1068 I '$D(NO1ST) S NO1ST=0 ; DO NOT SURPRESS THE <?xml tag generation
1069"RTN","C0SDOM",133,0)
1070 D START^C0SMXMLB($$TAG(1),,"G",NO1ST)
1071"RTN","C0SDOM",134,0)
1072 D NDOUT($$FIRST(1))
1073"RTN","C0SDOM",135,0)
1074 D END^C0SMXMLB ;END THE DOCUMENT
1075"RTN","C0SDOM",136,0)
1076 M @ZRTN=^TMP("MXMLBLD",$J)
1077"RTN","C0SDOM",137,0)
1078 K ^TMP("MXMLBLD",$J)
1079"RTN","C0SDOM",138,0)
1080 Q
1081"RTN","C0SDOM",139,0)
1082 ;
1083"RTN","C0SDOM",140,0)
1084NDOUT(ZOID) ;CALLBACK ROUTINE - IT IS RECURSIVE
1085"RTN","C0SDOM",141,0)
1086 N ZI S ZI=$$FIRST(ZOID)
1087"RTN","C0SDOM",142,0)
1088 I ZI'=0 D ; THERE IS A CHILD
1089"RTN","C0SDOM",143,0)
1090 . N ZATT D ATT("ZATT",ZOID) ; THESE ARE THE ATTRIBUTES MOVED TO ZATT
1091"RTN","C0SDOM",144,0)
1092 . D MULTI^C0SMXMLB("",$$TAG(ZOID),.ZATT,"NDOUT^C0SMXML(ZI)") ;HAVE CHILDREN
1093"RTN","C0SDOM",145,0)
1094 E D ; NO CHILD - IF NO CHILDREN, A NODE HAS DATA, IS AN ENDPOINT
1095"RTN","C0SDOM",146,0)
1096 . ;W "DOING",ZOID,!
1097"RTN","C0SDOM",147,0)
1098 . N ZD D DATA("ZD",ZOID) ;NODES WITHOUT CHILDREN HAVE DATA
1099"RTN","C0SDOM",148,0)
1100 . N ZATT D ATT("ZATT",ZOID) ;ATTRIBUTES
1101"RTN","C0SDOM",149,0)
1102 . D ITEM^C0SMXMLB("",$$TAG(ZOID),.ZATT,$G(ZD(1))) ;NO CHILDREN
1103"RTN","C0SDOM",150,0)
1104 I $$NXTSIB(ZOID)'=0 D ; THERE IS A SIBLING
1105"RTN","C0SDOM",151,0)
1106 . D NDOUT($$NXTSIB(ZOID)) ;RECURSE FOR SIBLINGS
1107"RTN","C0SDOM",152,0)
1108 Q
1109"RTN","C0SDOM",153,0)
1110 ;
1111"RTN","C0SDOM",154,0)
1112WNHIN(ZDFN) ; WRITES THE XML OUTPUT OF GET^NHINV TO AN XML FILE
1113"RTN","C0SDOM",155,0)
1114 ;
1115"RTN","C0SDOM",156,0)
1116 N GN,GN2
1117"RTN","C0SDOM",157,0)
1118 D GET^NHINV(.GN,ZDFN) ; EXTRACT THE XML
1119"RTN","C0SDOM",158,0)
1120 S GN2=$NA(@GN@(1))
1121"RTN","C0SDOM",159,0)
1122 W $$OUTPUT^C0SXPATH(GN2,"nhin_"_ZDFN_".xml","/home/wvehr3-09/")
1123"RTN","C0SDOM",160,0)
1124 Q
1125"RTN","C0SDOM",161,0)
1126 ;
1127"RTN","C0SDOM",162,0)
1128NARY2XML(ZGOUT,ZGIN) ; CREATE XML FROM AN NHIN ARRAY
1129"RTN","C0SDOM",163,0)
1130 ; ZGOUT AND ZGIN ARE PASSED BY NAME
1131"RTN","C0SDOM",164,0)
1132 N C0SDOCID
1133"RTN","C0SDOM",165,0)
1134 W !,ZGOUT," ",ZGIN
1135"RTN","C0SDOM",166,0)
1136 S C0SDOCID=$$DOMI(ZGIN) ; PUT IT INTO THE DOM
1137"RTN","C0SDOM",167,0)
1138 D OUTXML(ZGOUT,C0SDOCID)
1139"RTN","C0SDOM",168,0)
1140 Q
1141"RTN","C0SDOM",169,0)
1142 ;
1143"RTN","C0SDOM",170,0)
1144 ; EXAMPLE OF NHIN ARRAY FORMAT - THIS IS AN OUTPUT OF DOMO ABOVE WHEN RUN
1145"RTN","C0SDOM",171,0)
1146 ; AGAINST THE OUTPUT OF THE GET^NHINV ROUTINE. (THIS IS NOT REAL PATIENT DATA)
1147"RTN","C0SDOM",172,0)
1148 ;
1149"RTN","C0SDOM",173,0)
1150 ;GNARY("med",1,"doses.dose@dose")=10
1151"RTN","C0SDOM",174,0)
1152 ;GNARY("med",1,"doses.dose@noun")="TABLET"
1153"RTN","C0SDOM",175,0)
1154 ;GNARY("med",1,"doses.dose@route")="PO"
1155"RTN","C0SDOM",176,0)
1156 ;GNARY("med",1,"doses.dose@schedule")="QD"
1157"RTN","C0SDOM",177,0)
1158 ;GNARY("med",1,"doses.dose@units")="MG"
1159"RTN","C0SDOM",178,0)
1160 ;GNARY("med",1,"doses.dose@unitsPerDose")=1
1161"RTN","C0SDOM",179,0)
1162 ;GNARY("med",1,"facility@code")=100
1163"RTN","C0SDOM",180,0)
1164 ;GNARY("med",1,"facility@name")="VOE OFFICE INSTITUTION"
1165"RTN","C0SDOM",181,0)
1166 ;GNARY("med",1,"form@value")="TAB"
1167"RTN","C0SDOM",182,0)
1168 ;GNARY("med",1,"id@value")="1N;O"
1169"RTN","C0SDOM",183,0)
1170 ;GNARY("med",1,"location@code")=5
1171"RTN","C0SDOM",184,0)
1172 ;GNARY("med",1,"location@name")="3 WEST"
1173"RTN","C0SDOM",185,0)
1174 ;GNARY("med",1,"name@value")="LISINOPRIL TAB"
1175"RTN","C0SDOM",186,0)
1176 ;GNARY("med",1,"orderID@value")=294
1177"RTN","C0SDOM",187,0)
1178 ;GNARY("med",1,"ordered@value")=3110531.001233
1179"RTN","C0SDOM",188,0)
1180 ;GNARY("med",1,"orderingProvider@code")=63
1181"RTN","C0SDOM",189,0)
1182 ;GNARY("med",1,"orderingProvider@name")="KING,MATTHEW MICHAEL"
1183"RTN","C0SDOM",190,0)
1184 ;GNARY("med",1,"products.product.class@code")="ACE INHIBITORS"
1185"RTN","C0SDOM",191,0)
1186 ;GNARY("med",1,"products.product.vaGeneric@code")=1990
1187"RTN","C0SDOM",192,0)
1188 ;GNARY("med",1,"products.product.vaGeneric@name")="LISINOPRIL"
1189"RTN","C0SDOM",193,0)
1190 ;GNARY("med",1,"products.product.vaGeneric@vuid")=4019380
1191"RTN","C0SDOM",194,0)
1192 ;GNARY("med",1,"products.product.vaProduct@code")=8118
1193"RTN","C0SDOM",195,0)
1194 ;GNARY("med",1,"products.product.vaProduct@name")="LISINOPRIL 10MG TAB"
1195"RTN","C0SDOM",196,0)
1196 ;GNARY("med",1,"products.product.vaProduct@vuid")=4008593
1197"RTN","C0SDOM",197,0)
1198 ;GNARY("med",1,"products.product@code")=6174
1199"RTN","C0SDOM",198,0)
1200 ;GNARY("med",1,"products.product@name")="LISINOPRIL 10MG U/D"
1201"RTN","C0SDOM",199,0)
1202 ;GNARY("med",1,"products.product@role")="D"
1203"RTN","C0SDOM",200,0)
1204 ;GNARY("med",1,"sig")="10MG BY MOUTH EVERY DAY"
1205"RTN","C0SDOM",201,0)
1206 ;GNARY("med",1,"sig@xml:space")="preserve"
1207"RTN","C0SDOM",202,0)
1208 ;GNARY("med",1,"status@value")="active"
1209"RTN","C0SDOM",203,0)
1210 ;GNARY("med",1,"type@value")="OTC"
1211"RTN","C0SDOM",204,0)
1212 ;GNARY("med",1,"vaType@value")="N"
1213"RTN","C0SDOM",205,0)
1214 ;
1215"RTN","C0SDOM",206,0)
1216 ; DOMI is an extrinsic to insert NHIN ARRAY FORMAT arrays into the DOM
1217"RTN","C0SDOM",207,0)
1218 ; it returns 0 or 1 based on success.
1219"RTN","C0SDOM",208,0)
1220 ;
1221"RTN","C0SDOM",209,0)
1222 ; INARY is passed by name and has the format shown above
1223"RTN","C0SDOM",210,0)
1224 ; HANDLE is the document number in the DOM (both MXML and EWD DOMs will
1225"RTN","C0SDOM",211,0)
1226 ; be supported eventually - initial implementation is for MXML
1227"RTN","C0SDOM",212,0)
1228 ;
1229"RTN","C0SDOM",213,0)
1230 ; PARENT is the node id or tag of the parent under which the DOM will
1231"RTN","C0SDOM",214,0)
1232 ; be populated. If it is numeric, it is a node. If it is a string, the DOM
1233"RTN","C0SDOM",215,0)
1234 ; will be searched to find the tag. If not found and there is no root,
1235"RTN","C0SDOM",216,0)
1236 ; it will be inserted as the root. If not found and there is a root, it
1237"RTN","C0SDOM",217,0)
1238 ; will be inserted under the root.
1239"RTN","C0SDOM",218,0)
1240 ;
1241"RTN","C0SDOM",219,0)
1242 ; For the above example the call would be OK=$$DOMI("GNARY",0,"results")
1243"RTN","C0SDOM",220,0)
1244 ; because "results" is the root tag. Use OUTXML to render the xml from
1245"RTN","C0SDOM",221,0)
1246 ; the DOM.
1247"RTN","C0SDOM",222,0)
1248 ;
1249"RTN","C0SDOM",223,0)
1250DOMI(INARY,HANDLE,PARENT) ; EXTRINSIC TO INSERT NHIN ARRAYS TO A DOM
1251"RTN","C0SDOM",224,0)
1252 ;
1253"RTN","C0SDOM",225,0)
1254 N ZPARNODE
1255"RTN","C0SDOM",226,0)
1256 S (SUCCESS,LEVEL,LEVEL(0),NODE)=0
1257"RTN","C0SDOM",227,0)
1258 I '$D(INARY) Q 0 ; NO ARRAY PASSED
1259"RTN","C0SDOM",228,0)
1260 I '$D(HANDLE) S HANDLE=$$NEWDOM() ; MAKE A NEW DOM
1261"RTN","C0SDOM",229,0)
1262 ;I PARENT="" S PARENT="root"
1263"RTN","C0SDOM",230,0)
1264 I +$G(PARENT)>0 S ZPARNODE=PARENT ; WE HAVE BEEN PASSED A PARENT NODE ID
1265"RTN","C0SDOM",231,0)
1266 E I $L($G(PARENT))>0 D ; TBD FIND THE PARENT IN THE DOM AND SET LEVEL
1267"RTN","C0SDOM",232,0)
1268 . D STARTELE^MXMLDOM(PARENT) ; INSERT THE PARENT NODE
1269"RTN","C0SDOM",233,0)
1270 . S ZPARNODE=1 ;
1271"RTN","C0SDOM",234,0)
1272 ; WE NOW HAVE A HANDLE AND A PARENT NODE AND LEVEL HAS BEEN SET
1273"RTN","C0SDOM",235,0)
1274 N ZEXARY
1275"RTN","C0SDOM",236,0)
1276 D EXPAND("ZEXARY",INARY) ; EXPAND THE NHIN ARRAY
1277"RTN","C0SDOM",237,0)
1278 D MAJOR("ZEXARY") ; PROCESS ALL THE NODES TO BE ADDED
1279"RTN","C0SDOM",238,0)
1280 I $L($G(PARENT))>0 D ENDELE^MXMLDOM(PARENT) ; CLOSE OUT THE PARENT NODE
1281"RTN","C0SDOM",239,0)
1282 Q HANDLE ; SUCCESS
1283"RTN","C0SDOM",240,0)
1284 ;
1285"RTN","C0SDOM",241,0)
1286MAJOR(ZARY) ; RECURSIVE ROUTINE FOR INTERMEDIATE NODES
1287"RTN","C0SDOM",242,0)
1288 N ZI S ZI=""
1289"RTN","C0SDOM",243,0)
1290 N ZTAG
1291"RTN","C0SDOM",244,0)
1292 F S ZI=$O(@ZARY@(ZI)) Q:ZI="" D ; FOR EACH SECTION
1293"RTN","C0SDOM",245,0)
1294 . N ZELEADD S ZELEADD=0
1295"RTN","C0SDOM",246,0)
1296 . I ZI["@" D ; END NODE HAS NO VALUE, ONLY ATTRIBUTES
1297"RTN","C0SDOM",247,0)
1298 . . S ZTAG=$P(ZI,"@",1) ; PULL OUT THE TAG
1299"RTN","C0SDOM",248,0)
1300 . . K ZATT ; CLEAR OUT LAST ONE
1301"RTN","C0SDOM",249,0)
1302 . . M ZATT=@ZARY@(ZI,1) ; GET ATTRIBUTE ARRAY
1303"RTN","C0SDOM",250,0)
1304 . . D STARTELE^MXMLDOM(ZTAG,.ZATT) ; ADD THE NODE
1305"RTN","C0SDOM",251,0)
1306 . . S ZELEADD=1 ; FLAG TO NOT ADD THE ELEMENT TWICE
1307"RTN","C0SDOM",252,0)
1308 . I $O(@ZARY@(ZI,""))="" D ;END NODE
1309"RTN","C0SDOM",253,0)
1310 . . S ZTAG=ZI ; USE ZI FOR THE TAG
1311"RTN","C0SDOM",254,0)
1312 . . I 'ZELEADD D STARTELE^MXMLDOM(ZTAG) ; ADD ELEMENT IF NOT THERE
1313"RTN","C0SDOM",255,0)
1314 . . S ZELEADD=1 ; ADDED AN ELEMENT
1315"RTN","C0SDOM",256,0)
1316 . . D CHAR^MXMLDOM($G(@ZARY@(ZI))) ; INSERT THE VALUE
1317"RTN","C0SDOM",257,0)
1318 . I ZELEADD D Q ; NO MORE TO DO ON THIS LEVEL
1319"RTN","C0SDOM",258,0)
1320 . . D ENDELE^MXMLDOM(ZTAG) ; CLOSE THE ELEMENT BEFORE LEAVING
1321"RTN","C0SDOM",259,0)
1322 . N NEWARY ; INDENTED ARRAY
1323"RTN","C0SDOM",260,0)
1324 . N ZN S ZN=0
1325"RTN","C0SDOM",261,0)
1326 . F S ZN=$O(@ZARY@(ZI,ZN)) Q:ZN="" D ; FOR EACH MULTIPLE
1327"RTN","C0SDOM",262,0)
1328 . . D STARTELE^MXMLDOM(ZI) ; ADD THE INTERMEDIATE TAG
1329"RTN","C0SDOM",263,0)
1330 . . S NEWARY=$NA(@ZARY@(ZI,ZN)) ; INDENT THE ARRAY
1331"RTN","C0SDOM",264,0)
1332 . . D MAJOR(NEWARY) ; RECURSE FOR INDENTED ARRAY
1333"RTN","C0SDOM",265,0)
1334 . . D ENDELE^MXMLDOM(ZI) ; END THE INTERMEDIATE TAG
1335"RTN","C0SDOM",266,0)
1336 Q
1337"RTN","C0SDOM",267,0)
1338 ;
1339"RTN","C0SDOM",268,0)
1340EXPAND(ZZOUT,ZZIN) ; EXPANDS NHIN ARRAY FORMAT TO AN EXPANDED
1341"RTN","C0SDOM",269,0)
1342 ; CONSISTENT FORMAT
1343"RTN","C0SDOM",270,0)
1344 ; GNARY("patient",1,"facilities[2].facility@code")="050"
1345"RTN","C0SDOM",271,0)
1346 ; becomes G2ARY("patient",1,"facilities",2,"facility@",1,"code")="050"
1347"RTN","C0SDOM",272,0)
1348 ; for easier processing (this is fileman format genius)
1349"RTN","C0SDOM",273,0)
1350 ; basically removes the dot notation from the strings
1351"RTN","C0SDOM",274,0)
1352 ;
1353"RTN","C0SDOM",275,0)
1354 N ZZI
1355"RTN","C0SDOM",276,0)
1356 S ZZI=""
1357"RTN","C0SDOM",277,0)
1358 F S ZZI=$O(@ZZIN@(ZZI)) Q:ZZI="" D ;
1359"RTN","C0SDOM",278,0)
1360 . N ZZN S ZZN=0
1361"RTN","C0SDOM",279,0)
1362 . F S ZZN=$O(@ZZIN@(ZZI,ZZN)) Q:ZZN="" D ;
1363"RTN","C0SDOM",280,0)
1364 . . N ZZS S ZZS=""
1365"RTN","C0SDOM",281,0)
1366 . . N GA ;PUSH STACK
1367"RTN","C0SDOM",282,0)
1368 . . F S ZZS=$O(@ZZIN@(ZZI,ZZN,ZZS)) Q:ZZS="" D ;
1369"RTN","C0SDOM",283,0)
1370 . . . K GA ; NEW STACK
1371"RTN","C0SDOM",284,0)
1372 . . . D PUSH^C0SXPATH("GA",ZZI_"^"_ZZN) ; PUSH PARENT
1373"RTN","C0SDOM",285,0)
1374 . . . N ZZV ; PLACE TO STASH THE VALUE
1375"RTN","C0SDOM",286,0)
1376 . . . S ZZV=@ZZIN@(ZZI,ZZN,ZZS) ; VALUE
1377"RTN","C0SDOM",287,0)
1378 . . . W !,"VALUE:",ZZV
1379"RTN","C0SDOM",288,0)
1380 . . . N GK ; COUNTER
1381"RTN","C0SDOM",289,0)
1382 . . . F GK=1:1:$L(ZZS,".") D ; FOR EACH INTERMEDIATE NODE
1383"RTN","C0SDOM",290,0)
1384 . . . . N ZZN2 S ZZN2=1 ; DEFAULT IF NO [X]
1385"RTN","C0SDOM",291,0)
1386 . . . . N GM S GM=$P(ZZS,".",GK) ; TAG
1387"RTN","C0SDOM",292,0)
1388 . . . . I GM["[" D ; IT'S A MULTIPLE
1389"RTN","C0SDOM",293,0)
1390 . . . . . S ZZN2=$P($P(GM,"[",2),"]",1) ; PULL OUT THE NUMBER
1391"RTN","C0SDOM",294,0)
1392 . . . . . S GM=$P(GM,"[",1) ; PULL OUT THE TAG
1393"RTN","C0SDOM",295,0)
1394 . . . . I GM["@" D ; IT'S GOT ATTRIBUTES
1395"RTN","C0SDOM",296,0)
1396 . . . . . N GM2 S GM2=$P(GM,"@",2) ; PULLOUT THE ATTRIBUTE NAME
1397"RTN","C0SDOM",297,0)
1398 . . . . . D PUSH^C0SXPATH("GA",$P(GM,"@",1)_"@"_"^"_ZZN2) ; PUSH THE TAG
1399"RTN","C0SDOM",298,0)
1400 . . . . . D PUSH^C0SXPATH("GA",GM2_"^"_ZZN2)
1401"RTN","C0SDOM",299,0)
1402 . . . . E D PUSH^C0SXPATH("GA",GM_"^"_ZZN2) ;
1403"RTN","C0SDOM",300,0)
1404 . . . S GA(GA(0))=$P(GA(GA(0)),"^",1)_"^" ; GET RID OF THE LAST "1"
1405"RTN","C0SDOM",301,0)
1406 . . . N GZI S GZI="" ; STRING FOR THE INDEX
1407"RTN","C0SDOM",302,0)
1408 . . . F GK=1:1:GA(0) D ; TIME TO REVERSE POP THE TAGS
1409"RTN","C0SDOM",303,0)
1410 . . . . S GM=$P(GA(GK),"^",1) ; THE TAG
1411"RTN","C0SDOM",304,0)
1412 . . . . S ZZN2=$P(GA(GK),"^",2) ; THE NUMBER IF ANY
1413"RTN","C0SDOM",305,0)
1414 . . . . I ZZN2="" S GZI=GZI_""""_GM_"""" ; FOR THE LAST ONE
1415"RTN","C0SDOM",306,0)
1416 . . . . E S GZI=GZI_""""_GM_""""_","_ZZN2_"," ; FOR THE REST
1417"RTN","C0SDOM",307,0)
1418 . . . S GZI2=ZZOUT_"("_GZI_")" ; INCLUDE THE ARRAY NAME
1419"RTN","C0SDOM",308,0)
1420 . . . W !,GZI
1421"RTN","C0SDOM",309,0)
1422 . . . S @GZI2=ZZV ; REMEMBER THE VALUE?
1423"RTN","C0SDOM",310,0)
1424 Q
1425"RTN","C0SDOM",311,0)
1426 ;
1427"RTN","C0SDOM",312,0)
1428NEWDOM() ; extrinsic which creates a new DOM and returns the HANDLE
1429"RTN","C0SDOM",313,0)
1430 N CBK,SUCCESS,LEVEL,NODE,HANDLE
1431"RTN","C0SDOM",314,0)
1432 K ^TMP("MXMLERR",$J)
1433"RTN","C0SDOM",315,0)
1434 L +^TMP("MXMLDOM",$J):5
1435"RTN","C0SDOM",316,0)
1436 E Q 0
1437"RTN","C0SDOM",317,0)
1438 S HANDLE=$O(^TMP("MXMLDOM",$J,""),-1)+1,^(HANDLE)=""
1439"RTN","C0SDOM",318,0)
1440 L -^TMP("MXMLDOM",$J)
1441"RTN","C0SDOM",319,0)
1442 Q HANDLE
1443"RTN","C0SDOM",320,0)
1444 ;
1445"RTN","C0SLAB")
14460^3^B79265150
1447"RTN","C0SLAB",1,0)
1448C0SLAB ; GPL - Smart Lab Processing ;4/15/12 17:05
1449"RTN","C0SLAB",2,0)
1450 ;;0.1;C0S;nopatch;noreleasedate;Build 1
1451"RTN","C0SLAB",3,0)
1452 ;Copyright 2012 George Lilly. Licensed under the terms of the GNU
1453"RTN","C0SLAB",4,0)
1454 ;General Public License See attached copy of the License.
1455"RTN","C0SLAB",5,0)
1456 ;
1457"RTN","C0SLAB",6,0)
1458 ;This program is free software; you can redistribute it and/or modify
1459"RTN","C0SLAB",7,0)
1460 ;it under the terms of the GNU General Public License as published by
1461"RTN","C0SLAB",8,0)
1462 ;the Free Software Foundation; either version 2 of the License, or
1463"RTN","C0SLAB",9,0)
1464 ;(at your option) any later version.
1465"RTN","C0SLAB",10,0)
1466 ;
1467"RTN","C0SLAB",11,0)
1468 ;This program is distributed in the hope that it will be useful,
1469"RTN","C0SLAB",12,0)
1470 ;but WITHOUT ANY WARRANTY; without even the implied warranty of
1471"RTN","C0SLAB",13,0)
1472 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1473"RTN","C0SLAB",14,0)
1474 ;GNU General Public License for more details.
1475"RTN","C0SLAB",15,0)
1476 ;
1477"RTN","C0SLAB",16,0)
1478 ;You should have received a copy of the GNU General Public License along
1479"RTN","C0SLAB",17,0)
1480 ;with this program; if not, write to the Free Software Foundation, Inc.,
1481"RTN","C0SLAB",18,0)
1482 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
1483"RTN","C0SLAB",19,0)
1484 ;
1485"RTN","C0SLAB",20,0)
1486 Q
1487"RTN","C0SLAB",21,0)
1488 ;
1489"RTN","C0SLAB",22,0)
1490 ; sample VistA NHIN lab result
1491"RTN","C0SLAB",23,0)
1492 ;
1493"RTN","C0SLAB",24,0)
1494 ;^TMP("C0STBL",32,"lab",8,"collected@value")=3110626.16
1495"RTN","C0SLAB",25,0)
1496 ;^TMP("C0STBL",32,"lab",8,"comment")="Report Released Date/Time: Jun 26, 2011@19:00"
1497"RTN","C0SLAB",26,0)
1498 ;^TMP("C0STBL",32,"lab",8,"comment@xml:space")="preserve"
1499"RTN","C0SLAB",27,0)
1500 ;^TMP("C0STBL",32,"lab",8,"facility@code")=100
1501"RTN","C0SLAB",28,0)
1502 ;^TMP("C0STBL",32,"lab",8,"facility@name")="VOE OFFICE INSTITUTION"
1503"RTN","C0SLAB",29,0)
1504 ;^TMP("C0STBL",32,"lab",8,"groupName@value")="CH 0626 47"
1505"RTN","C0SLAB",30,0)
1506 ;^TMP("C0STBL",32,"lab",8,"high@value")=" 101"
1507"RTN","C0SLAB",31,0)
1508 ;^TMP("C0STBL",32,"lab",8,"id@value")="CH;6889372.84;67003"
1509"RTN","C0SLAB",32,0)
1510 ;^TMP("C0STBL",32,"lab",8,"interpretation@value")="H"
1511"RTN","C0SLAB",33,0)
1512 ;^TMP("C0STBL",32,"lab",8,"labOrderID@value")=336
1513"RTN","C0SLAB",34,0)
1514 ;^TMP("C0STBL",32,"lab",8,"localName@value")="FBLDGLU"
1515"RTN","C0SLAB",35,0)
1516 ;^TMP("C0STBL",32,"lab",8,"loinc@value")="14771-0"
1517"RTN","C0SLAB",36,0)
1518 ;^TMP("C0STBL",32,"lab",8,"low@value")="69 "
1519"RTN","C0SLAB",37,0)
1520 ;^TMP("C0STBL",32,"lab",8,"orderID@value")=807
1521"RTN","C0SLAB",38,0)
1522 ;^TMP("C0STBL",32,"lab",8,"result@value")=178
1523"RTN","C0SLAB",39,0)
1524 ;^TMP("C0STBL",32,"lab",8,"resulted@value")=3110626.190006
1525"RTN","C0SLAB",40,0)
1526 ;^TMP("C0STBL",32,"lab",8,"sample@value")="SERUM"
1527"RTN","C0SLAB",41,0)
1528 ;^TMP("C0STBL",32,"lab",8,"specimen@code")="0X500"
1529"RTN","C0SLAB",42,0)
1530 ;^TMP("C0STBL",32,"lab",8,"specimen@name")="SERUM"
1531"RTN","C0SLAB",43,0)
1532 ;^TMP("C0STBL",32,"lab",8,"status@value")="completed"
1533"RTN","C0SLAB",44,0)
1534 ;^TMP("C0STBL",32,"lab",8,"test@value")="FASTING BLOOD GLUCOSE"
1535"RTN","C0SLAB",45,0)
1536 ;^TMP("C0STBL",32,"lab",8,"type@value")="CH"
1537"RTN","C0SLAB",46,0)
1538 ;^TMP("C0STBL",32,"lab",8,"units@value")="MG/DL"
1539"RTN","C0SLAB",47,0)
1540 ;^TMP("C0STBL",32,"lab",8,"vuid@value")=4656342
1541"RTN","C0SLAB",48,0)
1542 ;
1543"RTN","C0SLAB",49,0)
1544 ; sample Smart lab result triples
1545"RTN","C0SLAB",50,0)
1546 ;
1547"RTN","C0SLAB",51,0)
1548 ;G("loinc:29571-7","dcterms:identifier")="29571-7"
1549"RTN","C0SLAB",52,0)
1550 ;G("loinc:29571-7","dcterms:title")="Phe DBS Ql"
1551"RTN","C0SLAB",53,0)
1552 ;G("loinc:29571-7","rdf:type")="sp:Code"
1553"RTN","C0SLAB",54,0)
1554 ;G("loinc:29571-7","sp:system")="http://loinc.org/codes/"
1555"RTN","C0SLAB",55,0)
1556 ;G("loinc:38478-4","dcterms:identifier")="38478-4"
1557"RTN","C0SLAB",56,0)
1558 ;G("loinc:38478-4","dcterms:title")="Biotinidase DBS Ql"
1559"RTN","C0SLAB",57,0)
1560 ;G("loinc:38478-4","rdf:type")="sp:Code"
1561"RTN","C0SLAB",58,0)
1562 ;G("loinc:38478-4","sp:system")="http://loinc.org/codes/"
1563"RTN","C0SLAB",59,0)
1564 ;G("qqWZZIew993","rdf:type")="sp:Attribution"
1565"RTN","C0SLAB",60,0)
1566 ;G("qqWZZIew993","sp:startDate")="2007-04-21"
1567"RTN","C0SLAB",61,0)
1568 ;G("qqWZZIew994","rdf:type")="sp:NarrativeResult"
1569"RTN","C0SLAB",62,0)
1570 ;G("qqWZZIew994","sp:value")="Normal"
1571"RTN","C0SLAB",63,0)
1572 ;G("qqWZZIew995","dcterms:title")="Biotinidase DBS Ql"
1573"RTN","C0SLAB",64,0)
1574 ;G("qqWZZIew995","rdf:type")="sp:CodedValue"
1575"RTN","C0SLAB",65,0)
1576 ;G("qqWZZIew995","sp:code")="loinc:38478-4"
1577"RTN","C0SLAB",66,0)
1578 ;G("qqWZZIew997","rdf:type")="sp:Attribution"
1579"RTN","C0SLAB",67,0)
1580 ;G("qqWZZIew997","sp:startDate")="2007-09-08"
1581"RTN","C0SLAB",68,0)
1582 ;G("qqWZZIew998","rdf:type")="sp:NarrativeResult"
1583"RTN","C0SLAB",69,0)
1584 ;G("qqWZZIew998","sp:value")="Normal"
1585"RTN","C0SLAB",70,0)
1586 ;G("qqWZZIew999","dcterms:title")="Phe DBS Ql"
1587"RTN","C0SLAB",71,0)
1588 ;G("qqWZZIew999","rdf:type")="sp:CodedValue"
1589"RTN","C0SLAB",72,0)
1590 ;G("qqWZZIew999","sp:code")="loinc:29571-7"
1591"RTN","C0SLAB",73,0)
1592 ;G("smart:99912345/lab_results/3d9b39249193","rdf:type")="sp:LabResult"
1593"RTN","C0SLAB",74,0)
1594 ;G("smart:99912345/lab_results/3d9b39249193","sp:belongsTo")="smart:99912345"
1595"RTN","C0SLAB",75,0)
1596 ;G("smart:99912345/lab_results/3d9b39249193","sp:labName")="qqWZZIew995"
1597"RTN","C0SLAB",76,0)
1598 ;G("smart:99912345/lab_results/3d9b39249193","sp:narrativeResult")="qqWZZIew994"
1599"RTN","C0SLAB",77,0)
1600 ;G("smart:99912345/lab_results/3d9b39249193","sp:specimenCollected")="qqWZZIew993"
1601"RTN","C0SLAB",78,0)
1602 ;G("smart:99912345/lab_results/426c7adc4f54","rdf:type")="sp:LabResult"
1603"RTN","C0SLAB",79,0)
1604 ;G("smart:99912345/lab_results/426c7adc4f54","sp:belongsTo")="smart:99912345"
1605"RTN","C0SLAB",80,0)
1606 ;G("smart:99912345/lab_results/426c7adc4f54","sp:labName")="qqWZZIew999"
1607"RTN","C0SLAB",81,0)
1608 ;G("smart:99912345/lab_results/426c7adc4f54","sp:narrativeResult")="qqWZZIew998"
1609"RTN","C0SLAB",82,0)
1610 ;G("smart:99912345/lab_results/426c7adc4f54","sp:specimenCollected")="qqWZZIew997"
1611"RTN","C0SLAB",83,0)
1612 ;
1613"RTN","C0SLAB",84,0)
1614 ;
1615"RTN","C0SLAB",85,0)
1616 ; another Smart example, this one with sp:quantitativeResult
1617"RTN","C0SLAB",86,0)
1618 ;
1619"RTN","C0SLAB",87,0)
1620 ;G("loinc:786-4","dcterms:identifier")="786-4"
1621"RTN","C0SLAB",88,0)
1622 ;G("loinc:786-4","dcterms:title")="MCHC RBC Auto-mCnc"
1623"RTN","C0SLAB",89,0)
1624 ;G("loinc:786-4","rdf:type")="sp:Code"
1625"RTN","C0SLAB",90,0)
1626 ;G("loinc:786-4","sp:system")="http://loinc.org/codes/"
1627"RTN","C0SLAB",91,0)
1628 ;G("nodeID:4439","rdf:type")="sp:ValueAndUnit"
1629"RTN","C0SLAB",92,0)
1630 ;G("nodeID:4439","sp:unit")="g/dL"
1631"RTN","C0SLAB",93,0)
1632 ;G("nodeID:4439","sp:value")=36.6
1633"RTN","C0SLAB",94,0)
1634 ;G("nodeID:4613","rdf:type")="sp:ValueAndUnit"
1635"RTN","C0SLAB",95,0)
1636 ;G("nodeID:4613","sp:unit")="g/dL"
1637"RTN","C0SLAB",96,0)
1638 ;G("nodeID:4613","sp:value")=32
1639"RTN","C0SLAB",97,0)
1640 ;G("nodeID:4672","rdf:type")="sp:Attribution"
1641"RTN","C0SLAB",98,0)
1642 ;G("nodeID:4672","sp:startDate")="2005-03-10"
1643"RTN","C0SLAB",99,0)
1644 ;G("nodeID:4866","rdf:type")="sp:ValueAndUnit"
1645"RTN","C0SLAB",100,0)
1646 ;G("nodeID:4866","sp:unit")="g/dL"
1647"RTN","C0SLAB",101,0)
1648 ;G("nodeID:4866","sp:value")=36
1649"RTN","C0SLAB",102,0)
1650 ;G("nodeID:4871","dcterms:title")="MCHC RBC Auto-mCnc"
1651"RTN","C0SLAB",103,0)
1652 ;G("nodeID:4871","rdf:type")="sp:CodedValue"
1653"RTN","C0SLAB",104,0)
1654 ;G("nodeID:4871","sp:code")="loinc:786-4"
1655"RTN","C0SLAB",105,0)
1656 ;G("nodeID:5221","rdf:type")="sp:QuantitativeResult"
1657"RTN","C0SLAB",106,0)
1658 ;G("nodeID:5221","sp:normalRange")="nodeID:5282"
1659"RTN","C0SLAB",107,0)
1660 ;G("nodeID:5221","sp:valueAndUnit")="nodeID:4439"
1661"RTN","C0SLAB",108,0)
1662 ;G("nodeID:5282","rdf:type")="sp:ValueRange"
1663"RTN","C0SLAB",109,0)
1664 ;G("nodeID:5282","sp:maximum")="nodeID:4866"
1665"RTN","C0SLAB",110,0)
1666 ;G("nodeID:5282","sp:minimum")="nodeID:4613"
1667"RTN","C0SLAB",111,0)
1668 ;G("smart:1540505/lab_results/2fc100850766","rdf:type")="sp:LabResult"
1669"RTN","C0SLAB",112,0)
1670 ;G("smart:1540505/lab_results/2fc100850766","sp:belongsTo")="smart:1540505"
1671"RTN","C0SLAB",113,0)
1672 ;G("smart:1540505/lab_results/2fc100850766","sp:labName")="nodeID:4871"
1673"RTN","C0SLAB",114,0)
1674 ;G("smart:1540505/lab_results/2fc100850766","sp:quantitativeResult")="nodeID:5221"
1675"RTN","C0SLAB",115,0)
1676 ;G("smart:1540505/lab_results/2fc100850766","sp:specimenCollected")="nodeID:4672"
1677"RTN","C0SLAB",116,0)
1678 ;
1679"RTN","C0SLAB",117,0)
1680LAB(GRTN,C0SARY) ; GRTN, passed by reference,
1681"RTN","C0SLAB",118,0)
1682 ; is the return name of the graph created. "" if none
1683"RTN","C0SLAB",119,0)
1684 ; C0SARY is passed in by reference and is the NHIN array of lab
1685"RTN","C0SLAB",120,0)
1686 ;
1687"RTN","C0SLAB",121,0)
1688 I $O(C0SARY("lab",""))="" D Q ;
1689"RTN","C0SLAB",122,0)
1690 . I $D(DEBUG) W !,"No Labs"
1691"RTN","C0SLAB",123,0)
1692 S GRTN="" ; default to no labs
1693"RTN","C0SLAB",124,0)
1694 N C0SGRF
1695"RTN","C0SLAB",125,0)
1696 S C0SGRF="vistaSmart:"_ZPATID_"/lab_results"
1697"RTN","C0SLAB",126,0)
1698 I $D(DEBUG) W !,"Processing ",C0SGRF
1699"RTN","C0SLAB",127,0)
1700 D DELGRAPH^C0XF2N(C0SGRF) ; delete the old graph
1701"RTN","C0SLAB",128,0)
1702 D INITFARY^C0XF2N("C0XFARY") ; which triple store to use
1703"RTN","C0SLAB",129,0)
1704 N FARY S FARY="C0XFARY"
1705"RTN","C0SLAB",130,0)
1706 D USEFARY^C0XF2N(FARY)
1707"RTN","C0SLAB",131,0)
1708 D VOCINIT^C0XUTIL
1709"RTN","C0SLAB",132,0)
1710 ;
1711"RTN","C0SLAB",133,0)
1712 D STARTADD^C0XF2N ; initialize to create triples
1713"RTN","C0SLAB",134,0)
1714 ;
1715"RTN","C0SLAB",135,0)
1716 N ZI S ZI=""
1717"RTN","C0SLAB",136,0)
1718 F S ZI=$O(C0SARY("lab",ZI)) Q:ZI="" D ;
1719"RTN","C0SLAB",137,0)
1720 . N LRN,ZR ; ZR is the local array for building the new triples
1721"RTN","C0SLAB",138,0)
1722 . S LRN=$NA(C0SARY("lab",ZI)) ; base for values in this lab result
1723"RTN","C0SLAB",139,0)
1724 . ;
1725"RTN","C0SLAB",140,0)
1726 . N RSLTID ; unique Id for this lab result
1727"RTN","C0SLAB",141,0)
1728 . S RSLTID=C0SGRF_"/"_$$LKY17^C0XF2N ; use a random number
1729"RTN","C0SLAB",142,0)
1730 . ;
1731"RTN","C0SLAB",143,0)
1732 . ; i don't like this because the same labs result gets a
1733"RTN","C0SLAB",144,0)
1734 . ; different ID every time it's reported. Can't trace it back to VistA
1735"RTN","C0SLAB",145,0)
1736 . ; I'd rather be using id@value ie "id@value")="CH;6889372.84;67003"
1737"RTN","C0SLAB",146,0)
1738 . ; .. either that or store an OID with the lab result - but that
1739"RTN","C0SLAB",147,0)
1740 . ; will have to wait for the redesign of file 60.. - gpl 4/16/2012
1741"RTN","C0SLAB",148,0)
1742 . ;
1743"RTN","C0SLAB",149,0)
1744 . N LOINC S LOINC=$G(@LRN@("loinc@value"))
1745"RTN","C0SLAB",150,0)
1746 . I LOINC="" D Q ;
1747"RTN","C0SLAB",151,0)
1748 . . I $D(DEBUG) W !,"NO LOINC VALUE, SKIPPING"
1749"RTN","C0SLAB",152,0)
1750 . N LABTST S LABTST=$G(@LRN@("test@value"))
1751"RTN","C0SLAB",153,0)
1752 . I $D(DEBUG) D ;
1753"RTN","C0SLAB",154,0)
1754 . . W !,"Processing Lab Result ",RSLTID
1755"RTN","C0SLAB",155,0)
1756 . . W !,"test: ",LABTST
1757"RTN","C0SLAB",156,0)
1758 . . W !,"loinc: ",LOINC
1759"RTN","C0SLAB",157,0)
1760 . ;
1761"RTN","C0SLAB",158,0)
1762 . ; first do the base result graph
1763"RTN","C0SLAB",159,0)
1764 . ;
1765"RTN","C0SLAB",160,0)
1766 . S ZR("rdf:type")="sp:LabResult"
1767"RTN","C0SLAB",161,0)
1768 . S ZR("sp:belongsTo")=C0SGRF ; the subject for this patient's lab results
1769"RTN","C0SLAB",162,0)
1770 . ; ie /vista/smart/99912345/lab_results
1771"RTN","C0SLAB",163,0)
1772 . ;
1773"RTN","C0SLAB",164,0)
1774 . N LABNAME S LABNAME=$$ANONS^C0XF2N ; new node for lab name
1775"RTN","C0SLAB",165,0)
1776 . S ZR("sp:labName")=LABNAME
1777"RTN","C0SLAB",166,0)
1778 . ;
1779"RTN","C0SLAB",167,0)
1780 . N NARRSLT S NARRSLT=$$ANONS^C0XF2N ; new node for narrative result
1781"RTN","C0SLAB",168,0)
1782 . S ZR("sp:narrativeResult")=NARRSLT
1783"RTN","C0SLAB",169,0)
1784 . ;
1785"RTN","C0SLAB",170,0)
1786 . N QNTRSLT S QNTRSLT=$$ANONS^C0XF2N ; new node for narrative result
1787"RTN","C0SLAB",171,0)
1788 . S ZR("sp:quantitativeResult")=QNTRSLT
1789"RTN","C0SLAB",172,0)
1790 . ;
1791"RTN","C0SLAB",173,0)
1792 . N SPECCOLL S SPECCOLL=$$ANONS^C0XF2N ; new node for specimen collected
1793"RTN","C0SLAB",174,0)
1794 . S ZR("sp:specimenCollected")=SPECCOLL
1795"RTN","C0SLAB",175,0)
1796 . ;
1797"RTN","C0SLAB",176,0)
1798 . D ADDINN^C0XF2N(C0SGRF,RSLTID,.ZR) ; addIfNotNull the triples
1799"RTN","C0SLAB",177,0)
1800 . K ZR ; clean up
1801"RTN","C0SLAB",178,0)
1802 . ;
1803"RTN","C0SLAB",179,0)
1804 . ; create the narrative result graph
1805"RTN","C0SLAB",180,0)
1806 . ;
1807"RTN","C0SLAB",181,0)
1808 . N IVAL S IVAL=$G(@LRN@("interpretation@value"))'="" D ; H OR L
1809"RTN","C0SLAB",182,0)
1810 . I IVAL'=""
1811"RTN","C0SLAB",183,0)
1812 . . S ZR("rdf:type")="sp:NarrativeResult"
1813"RTN","C0SLAB",184,0)
1814 . . S ZR("sp:value")=$G(@LRN@("interpretation@value")) ; H or L
1815"RTN","C0SLAB",185,0)
1816 . . I ZR("sp:value")="L" S ZR("sp:value")="abnormal"
1817"RTN","C0SLAB",186,0)
1818 . . I ZR("sp:value")="H" S ZR("sp:value")="abnormal"
1819"RTN","C0SLAB",187,0)
1820 . . I ZR("sp:value")="HH" S ZR("sp:value")="critical"
1821"RTN","C0SLAB",188,0)
1822 . . I ZR("sp:value")="LL" S ZR("sp:value")="critical"
1823"RTN","C0SLAB",189,0)
1824 . . D ADDINN^C0XF2N(C0SGRF,NARRSLT,.ZR)
1825"RTN","C0SLAB",190,0)
1826 . . K ZR
1827"RTN","C0SLAB",191,0)
1828 . ;
1829"RTN","C0SLAB",192,0)
1830 . ; create the quantitative result graph
1831"RTN","C0SLAB",193,0)
1832 . ;
1833"RTN","C0SLAB",194,0)
1834 . S ZR("rdf:type")="sp:QuantitativeResult"
1835"RTN","C0SLAB",195,0)
1836 . N NORMNM S NORMNM=$$ANONS^C0XF2N ; new node for normal range graph
1837"RTN","C0SLAB",196,0)
1838 . N VUNM S VUNM=$$ANONS^C0XF2N ; new node for value and unit graph
1839"RTN","C0SLAB",197,0)
1840 . N HASNORMAL S HASNORMAL=0
1841"RTN","C0SLAB",198,0)
1842 . I $G(@LRN@("high@value"))'="" S HASNORMAL=1
1843"RTN","C0SLAB",199,0)
1844 . I HASNORMAL S ZR("sp:normalRange")=NORMNM
1845"RTN","C0SLAB",200,0)
1846 . S ZR("sp:valueAndUnit")=VUNM
1847"RTN","C0SLAB",201,0)
1848 . D ADDINN^C0XF2N(C0SGRF,QNTRSLT,.ZR)
1849"RTN","C0SLAB",202,0)
1850 . K ZR
1851"RTN","C0SLAB",203,0)
1852 . ;
1853"RTN","C0SLAB",204,0)
1854 . ; create the normal range graph
1855"RTN","C0SLAB",205,0)
1856 . ;
1857"RTN","C0SLAB",206,0)
1858 . I HASNORMAL D ;
1859"RTN","C0SLAB",207,0)
1860 . . S ZR("rdf:type")="sp:ValueRange"
1861"RTN","C0SLAB",208,0)
1862 . . N MAXNM S MAXNM=$$ANONS^C0XF2N ; new node for maximum graph
1863"RTN","C0SLAB",209,0)
1864 . . N MINNM S MINNM=$$ANONS^C0XF2N ; new node for minimum graph
1865"RTN","C0SLAB",210,0)
1866 . . S ZR("sp:maximum")=MAXNM
1867"RTN","C0SLAB",211,0)
1868 . . S ZR("sp:minimum")=MINNM
1869"RTN","C0SLAB",212,0)
1870 . . D ADDINN^C0XF2N(C0SGRF,NORMNM,.ZR)
1871"RTN","C0SLAB",213,0)
1872 . . K ZR
1873"RTN","C0SLAB",214,0)
1874 . . ;
1875"RTN","C0SLAB",215,0)
1876 . . ; create the maximum graph
1877"RTN","C0SLAB",216,0)
1878 . . ;
1879"RTN","C0SLAB",217,0)
1880 . . S ZR("rdf:type")="sp:ValueAndUnit"
1881"RTN","C0SLAB",218,0)
1882 . . S ZR("sp:unit")=$G(@LRN@("units@value"))
1883"RTN","C0SLAB",219,0)
1884 . . S ZR("sp:value")=$G(@LRN@("high@value"))
1885"RTN","C0SLAB",220,0)
1886 . . D ADDINN^C0XF2N(C0SGRF,MAXNM,.ZR)
1887"RTN","C0SLAB",221,0)
1888 . . K ZR
1889"RTN","C0SLAB",222,0)
1890 . . ;
1891"RTN","C0SLAB",223,0)
1892 . . ; create the minimum graph
1893"RTN","C0SLAB",224,0)
1894 . . ;
1895"RTN","C0SLAB",225,0)
1896 . . S ZR("rdf:type")="sp:ValueAndUnit"
1897"RTN","C0SLAB",226,0)
1898 . . S ZR("sp:unit")=$G(@LRN@("units@value"))
1899"RTN","C0SLAB",227,0)
1900 . . S ZR("sp:value")=$G(@LRN@("low@value"))
1901"RTN","C0SLAB",228,0)
1902 . . D ADDINN^C0XF2N(C0SGRF,MINNM,.ZR)
1903"RTN","C0SLAB",229,0)
1904 . . K ZR
1905"RTN","C0SLAB",230,0)
1906 . ;
1907"RTN","C0SLAB",231,0)
1908 . ; create the value and unit graph
1909"RTN","C0SLAB",232,0)
1910 . ;
1911"RTN","C0SLAB",233,0)
1912 . S ZR("rdf:type")="sp:ValueAndUnit"
1913"RTN","C0SLAB",234,0)
1914 . S ZR("sp:unit")=$G(@LRN@("units@value"))
1915"RTN","C0SLAB",235,0)
1916 . I ZR("sp:unit")="" S ZR("sp:unit")=$G(@LRN@("test@value"))
1917"RTN","C0SLAB",236,0)
1918 . S ZR("sp:value")=$G(@LRN@("result@value"))
1919"RTN","C0SLAB",237,0)
1920 . D ADDINN^C0XF2N(C0SGRF,VUNM,.ZR)
1921"RTN","C0SLAB",238,0)
1922 . K ZR
1923"RTN","C0SLAB",239,0)
1924 . ;
1925"RTN","C0SLAB",240,0)
1926 . ; create specimen collected graph
1927"RTN","C0SLAB",241,0)
1928 . ;
1929"RTN","C0SLAB",242,0)
1930 . S ZR("rdf:type")="sp:Attribution"
1931"RTN","C0SLAB",243,0)
1932 . S ZR("sp:startDate")=$$SPDATE^C0SUTIL($G(@LRN@("collected@value")))
1933"RTN","C0SLAB",244,0)
1934 . D ADDINN^C0XF2N(C0SGRF,SPECCOLL,.ZR)
1935"RTN","C0SLAB",245,0)
1936 . K ZR
1937"RTN","C0SLAB",246,0)
1938 . ;
1939"RTN","C0SLAB",247,0)
1940 . ; create lab name graph - this contains the test name and code
1941"RTN","C0SLAB",248,0)
1942 . ;
1943"RTN","C0SLAB",249,0)
1944 . I LOINC'="" D ;
1945"RTN","C0SLAB",250,0)
1946 . . S ZR("rdf:type")="sp:CodedValue"
1947"RTN","C0SLAB",251,0)
1948 . . S ZR("dcterms:title")=LABTST
1949"RTN","C0SLAB",252,0)
1950 . . N LOINCNM S LOINCNM="loinc:"_LOINC
1951"RTN","C0SLAB",253,0)
1952 . . S ZR("sp:code")="loinc:"_LOINC
1953"RTN","C0SLAB",254,0)
1954 . . D ADDINN^C0XF2N(C0SGRF,LABNAME,.ZR)
1955"RTN","C0SLAB",255,0)
1956 . . K ZR
1957"RTN","C0SLAB",256,0)
1958 . . S ZR("dcterms:identifier")=LOINC
1959"RTN","C0SLAB",257,0)
1960 . . S ZR("dcterms:title")=LABTST
1961"RTN","C0SLAB",258,0)
1962 . . S ZR("rdf:type")="sp:Code"
1963"RTN","C0SLAB",259,0)
1964 . . S ZR("sp:system")="http://loinc.org/codes/"
1965"RTN","C0SLAB",260,0)
1966 . . D ADDINN^C0XF2N(C0SGRF,LOINCNM,.ZR)
1967"RTN","C0SLAB",261,0)
1968 . . K ZR
1969"RTN","C0SLAB",262,0)
1970 . ;
1971"RTN","C0SLAB",263,0)
1972 . ; that's all for now folks (there is more to do like reference ranges
1973"RTN","C0SLAB",264,0)
1974 . ; and result values)
1975"RTN","C0SLAB",265,0)
1976 . ;
1977"RTN","C0SLAB",266,0)
1978 D BULKLOAD^C0XF2N(.C0XFDA)
1979"RTN","C0SLAB",267,0)
1980 S GRTN=C0SGRF
1981"RTN","C0SLAB",268,0)
1982 Q
1983"RTN","C0SLAB",269,0)
1984 ;
1985"RTN","C0SLAB",270,0)
1986SAMPLE ; import sample lab tests to the triplestore
1987"RTN","C0SLAB",271,0)
1988 N GN
1989"RTN","C0SLAB",272,0)
1990 S GN=$NA(^rdf("lab_results"))
1991"RTN","C0SLAB",273,0)
1992 D INSRDF^C0XF2N(GN,"/smart/lab/samples")
1993"RTN","C0SLAB",274,0)
1994 Q
1995"RTN","C0SLAB",275,0)
1996 ;
1997"RTN","C0SMART")
19980^4^B2902265
1999"RTN","C0SMART",1,0)
2000C0SMART ; GPL - Smart Container Entry Points;2/22/12 17:05
2001"RTN","C0SMART",2,0)
2002 ;;0.1;C0S;nopatch;noreleasedate;Build 1
2003"RTN","C0SMART",3,0)
2004 ;Copyright 2012 George Lilly. Licensed under the terms of the GNU
2005"RTN","C0SMART",4,0)
2006 ;General Public License See attached copy of the License.
2007"RTN","C0SMART",5,0)
2008 ;
2009"RTN","C0SMART",6,0)
2010 ;This program is free software; you can redistribute it and/or modify
2011"RTN","C0SMART",7,0)
2012 ;it under the terms of the GNU General Public License as published by
2013"RTN","C0SMART",8,0)
2014 ;the Free Software Foundation; either version 2 of the License, or
2015"RTN","C0SMART",9,0)
2016 ;(at your option) any later version.
2017"RTN","C0SMART",10,0)
2018 ;
2019"RTN","C0SMART",11,0)
2020 ;This program is distributed in the hope that it will be useful,
2021"RTN","C0SMART",12,0)
2022 ;but WITHOUT ANY WARRANTY; without even the implied warranty of
2023"RTN","C0SMART",13,0)
2024 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2025"RTN","C0SMART",14,0)
2026 ;GNU General Public License for more details.
2027"RTN","C0SMART",15,0)
2028 ;
2029"RTN","C0SMART",16,0)
2030 ;You should have received a copy of the GNU General Public License along
2031"RTN","C0SMART",17,0)
2032 ;with this program; if not, write to the Free Software Foundation, Inc.,
2033"RTN","C0SMART",18,0)
2034 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
2035"RTN","C0SMART",19,0)
2036 ;
2037"RTN","C0SMART",20,0)
2038 Q
2039"RTN","C0SMART",21,0)
2040EN(ZRTN,ZPATID,ZTYP,ZFORM,DEBUG) ; return a Smart RDF file section ZTYP
2041"RTN","C0SMART",22,0)
2042 ; for patient ZPATID; ZFORM defaults to rdf
2043"RTN","C0SMART",23,0)
2044 ; ZRTN is passed by reference
2045"RTN","C0SMART",24,0)
2046 ; For now, ZPATID is the DFN
2047"RTN","C0SMART",25,0)
2048 ;
2049"RTN","C0SMART",26,0)
2050 I '$D(ZFORM) S ZFORM="rdf"
2051"RTN","C0SMART",27,0)
2052 K ZRTN ; CLEAN RETURN
2053"RTN","C0SMART",28,0)
2054 N C0SARY
2055"RTN","C0SMART",29,0)
2056 I ZTYP="patient" D EN^C0SNHIN(.C0SARY,ZPATID,"patient")
2057"RTN","C0SMART",30,0)
2058 E D EN^C0SNHIN(.C0SARY,ZPATID,"patient;"_ZTYP)
2059"RTN","C0SMART",31,0)
2060 I $G(C0SARY("patient",1,"id@value"))'=ZPATID D Q ;
2061"RTN","C0SMART",32,0)
2062 . W !,"Error Retreiving Patient Record"
2063"RTN","C0SMART",33,0)
2064 ;
2065"RTN","C0SMART",34,0)
2066 K C0XFDA
2067"RTN","C0SMART",35,0)
2068 ;
2069"RTN","C0SMART",36,0)
2070 N C0SGR ; graph
2071"RTN","C0SMART",37,0)
2072 ;
2073"RTN","C0SMART",38,0)
2074 ; processing table
2075"RTN","C0SMART",39,0)
2076 ;
2077"RTN","C0SMART",40,0)
2078 N C0SCTRL
2079"RTN","C0SMART",41,0)
2080 S C0SCTRL("med")="D MED^C0SMED(.C0SGR,.C0SARY)"
2081"RTN","C0SMART",42,0)
2082 S C0SCTRL("patient")="D PATIENT^C0SDEM(.C0SGR,.C0SARY)"
2083"RTN","C0SMART",43,0)
2084 S C0SCTRL("lab")="D LAB^C0SLAB(.C0SGR,.C0SARY)"
2085"RTN","C0SMART",44,0)
2086 S C0SCTRL("problem")="D PROB^C0SPROB(.C0SGR,.C0SARY)"
2087"RTN","C0SMART",45,0)
2088 ;
2089"RTN","C0SMART",46,0)
2090 I '$D(C0SCTRL(ZTYP)) W !,ZTYP," ","Not Supported" Q ;
2091"RTN","C0SMART",47,0)
2092 N ZX
2093"RTN","C0SMART",48,0)
2094 S ZX=C0SCTRL(ZTYP)
2095"RTN","C0SMART",49,0)
2096 X ZX ;
2097"RTN","C0SMART",50,0)
2098 ;
2099"RTN","C0SMART",51,0)
2100 I '$D(C0SGR) Q ;
2101"RTN","C0SMART",52,0)
2102 ;
2103"RTN","C0SMART",53,0)
2104 D getGraph^C0XGET1(.ZRTN,C0SGR,ZFORM)
2105"RTN","C0SMART",54,0)
2106 ;
2107"RTN","C0SMART",55,0)
2108 Q
2109"RTN","C0SMART",56,0)
2110 ;
2111"RTN","C0SMED")
21120^5^B40719083
2113"RTN","C0SMED",1,0)
2114C0SMED ; GPL - Smart Meds Processing ;2/22/12 17:05
2115"RTN","C0SMED",2,0)
2116 ;;0.1;C0S;nopatch;noreleasedate;Build 1
2117"RTN","C0SMED",3,0)
2118 ;Copyright 2012 George Lilly. Licensed under the terms of the GNU
2119"RTN","C0SMED",4,0)
2120 ;General Public License See attached copy of the License.
2121"RTN","C0SMED",5,0)
2122 ;
2123"RTN","C0SMED",6,0)
2124 ;This program is free software; you can redistribute it and/or modify
2125"RTN","C0SMED",7,0)
2126 ;it under the terms of the GNU General Public License as published by
2127"RTN","C0SMED",8,0)
2128 ;the Free Software Foundation; either version 2 of the License, or
2129"RTN","C0SMED",9,0)
2130 ;(at your option) any later version.
2131"RTN","C0SMED",10,0)
2132 ;
2133"RTN","C0SMED",11,0)
2134 ;This program is distributed in the hope that it will be useful,
2135"RTN","C0SMED",12,0)
2136 ;but WITHOUT ANY WARRANTY; without even the implied warranty of
2137"RTN","C0SMED",13,0)
2138 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2139"RTN","C0SMED",14,0)
2140 ;GNU General Public License for more details.
2141"RTN","C0SMED",15,0)
2142 ;
2143"RTN","C0SMED",16,0)
2144 ;You should have received a copy of the GNU General Public License along
2145"RTN","C0SMED",17,0)
2146 ;with this program; if not, write to the Free Software Foundation, Inc.,
2147"RTN","C0SMED",18,0)
2148 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
2149"RTN","C0SMED",19,0)
2150 ;
2151"RTN","C0SMED",20,0)
2152 Q
2153"RTN","C0SMED",21,0)
2154 ;
2155"RTN","C0SMED",22,0)
2156MED(GRTN,C0SARY) ; GRTN, passed by reference,
2157"RTN","C0SMED",23,0)
2158 ; is the return name of the graph created. "" if none
2159"RTN","C0SMED",24,0)
2160 ; C0SARY is passed in by reference and is the NHIN array of meds
2161"RTN","C0SMED",25,0)
2162 ;
2163"RTN","C0SMED",26,0)
2164 I $O(C0SARY("med",""))="" D Q ;
2165"RTN","C0SMED",27,0)
2166 . I $D(DEBUG) W !,"No Meds"
2167"RTN","C0SMED",28,0)
2168 S GRTN="" ; default to no meds
2169"RTN","C0SMED",29,0)
2170 N C0SGRF
2171"RTN","C0SMED",30,0)
2172 S C0SGRF="vistaSmart:"_ZPATID_"/"_ZTYP
2173"RTN","C0SMED",31,0)
2174 I $D(DEBUG) W !,"Processing ",C0SGRF
2175"RTN","C0SMED",32,0)
2176 D DELGRAPH^C0XF2N(C0SGRF) ; delete the old graph
2177"RTN","C0SMED",33,0)
2178 N MEDTRP ; MEDS TRIPLES
2179"RTN","C0SMED",34,0)
2180 D INITFARY^C0XF2N("C0XFARY") ; which triple store to use
2181"RTN","C0SMED",35,0)
2182 N FARY S FARY="C0XFARY"
2183"RTN","C0SMED",36,0)
2184 D USEFARY^C0XF2N(FARY)
2185"RTN","C0SMED",37,0)
2186 D VOCINIT^C0XUTIL
2187"RTN","C0SMED",38,0)
2188 ;
2189"RTN","C0SMED",39,0)
2190 N DUPCHK S DUPCHK="" ; check for no duplicates
2191"RTN","C0SMED",40,0)
2192 N ZI S ZI=""
2193"RTN","C0SMED",41,0)
2194 F S ZI=$O(C0SARY("med",ZI)) Q:ZI="" D ;
2195"RTN","C0SMED",42,0)
2196 . N SDATE,SDTMP
2197"RTN","C0SMED",43,0)
2198 . I $G(C0SARY("med",ZI,"vaStatus@value"))="EXPIRED" D Q ;
2199"RTN","C0SMED",44,0)
2200 . . I $D(DEBUG) W !,"Expired Mediation, Skipping"
2201"RTN","C0SMED",45,0)
2202 . I $G(COSARY("med",ZI,"vaType@value"))="I" D Q ;
2203"RTN","C0SMED",46,0)
2204 . . I $D(DEBUG) W !,"Inpatient Med, skipping"
2205"RTN","C0SMED",47,0)
2206 . I $G(COSARY("med",ZI,"vaType@value"))="V" D Q ;
2207"RTN","C0SMED",48,0)
2208 . . I $D(DEBUG) W !,"IV Inpatient Med, skipping"
2209"RTN","C0SMED",49,0)
2210 . ;
2211"RTN","C0SMED",50,0)
2212 . S SDTMP=$G(C0SARY("med",ZI,"ordered@value"))
2213"RTN","C0SMED",51,0)
2214 . I SDTMP="" D ;
2215"RTN","C0SMED",52,0)
2216 . . S SDTMP=$G(C0SARY("med",ZI,"start@value"))
2217"RTN","C0SMED",53,0)
2218 . S SDATE=$$FMTE^XLFDT(SDTMP,"7D") ; ordered date
2219"RTN","C0SMED",54,0)
2220 . S SDATE=$TR(SDATE,"/","-") ; change slashes to hyphens
2221"RTN","C0SMED",55,0)
2222 . I SDATE="" S SDATE="UNKNOWN"
2223"RTN","C0SMED",56,0)
2224 . N DNAME,VUID,DCODE,RXNORM,SIG
2225"RTN","C0SMED",57,0)
2226 . S DNAME=$G(C0SARY("med",ZI,"name@value"))
2227"RTN","C0SMED",58,0)
2228 . I DNAME="" D ;
2229"RTN","C0SMED",59,0)
2230 . . S DNAME=$G(C0SARY("med",ZI,"products.product@name"))
2231"RTN","C0SMED",60,0)
2232 . S VUID=$G(C0SARY("med",ZI,"products.product.vaProduct@vuid"))
2233"RTN","C0SMED",61,0)
2234 . S DCODE=$G(C0SARY("med",ZI,"products.product.vaProduct@code"))
2235"RTN","C0SMED",62,0)
2236 . I DCODE="" S DCODE=$G(C0SARY("med",ZI,"id@value"))
2237"RTN","C0SMED",63,0)
2238 . S RXNORM=$$RXCUI(VUID) ; look up RxNorm code
2239"RTN","C0SMED",64,0)
2240 . I $P(RXNORM,"^",2)="RXNORM" D ;
2241"RTN","C0SMED",65,0)
2242 . . S RXVER=$P(RXNORM,"^",3)
2243"RTN","C0SMED",66,0)
2244 . . S RXNORM=$P(RXNORM,"^",1)
2245"RTN","C0SMED",67,0)
2246 . E D Q ;
2247"RTN","C0SMED",68,0)
2248 . . I $D(DEBUG) W !,"NO RXNORM NUMBER AVAILABLE"
2249"RTN","C0SMED",69,0)
2250 . . I $D(DEBUG) W !,RXNORM
2251"RTN","C0SMED",70,0)
2252 . I DNAME="" D Q ;
2253"RTN","C0SMED",71,0)
2254 . . I $D(DEBUG) W !,"Error No Drug Name"
2255"RTN","C0SMED",72,0)
2256 . S MEDGRF=C0SGRF_"/"_DCODE_"-"_$G(SDTMP)
2257"RTN","C0SMED",73,0)
2258 . I +$D(DUPCHK(MEDGRF)) D Q ; NO DUPS ALLOWED
2259"RTN","C0SMED",74,0)
2260 . . I $D(DEBUG) W !,"Found Duplicate Medication ",MEDGRF
2261"RTN","C0SMED",75,0)
2262 . S DUPCHK(MEDGRF)=""
2263"RTN","C0SMED",76,0)
2264 . I $D(DEBUG) D ;
2265"RTN","C0SMED",77,0)
2266 . . W !,"Processing Medication ",MEDGRF
2267"RTN","C0SMED",78,0)
2268 . . W !,DNAME
2269"RTN","C0SMED",79,0)
2270 . . W !,RXNORM
2271"RTN","C0SMED",80,0)
2272 . S SIG=$G(C0SARY("med",ZI,"sig"))
2273"RTN","C0SMED",81,0)
2274 . I SIG["|" D ;
2275"RTN","C0SMED",82,0)
2276 . . N SIGTMP
2277"RTN","C0SMED",83,0)
2278 . . S SIGTMP=SIG
2279"RTN","C0SMED",84,0)
2280 . . S SIG=$P(SIGTMP,"|",2) ; remove the drug name from the sig
2281"RTN","C0SMED",85,0)
2282 . . I DNAME["FREE TXT" D ; eRx free text drug, get drug name from sig
2283"RTN","C0SMED",86,0)
2284 . . . S DNAME=$P(SIGTMP,"|",1) ; eRx Drug name is stored as the first piece of the sig
2285"RTN","C0SMED",87,0)
2286 . K C0XFARY
2287"RTN","C0SMED",88,0)
2288 . D ADD^C0XF2N(C0SGRF,MEDGRF,"rdf:type","sp:Medication",FARY)
2289"RTN","C0SMED",89,0)
2290 . D ADD^C0XF2N(C0SGRF,MEDGRF,"sp:belongsTo",C0SGRF,FARY)
2291"RTN","C0SMED",90,0)
2292 . N DSUBJ S DSUBJ=$$ANONS^C0XF2N ; anonomous subject
2293"RTN","C0SMED",91,0)
2294 . D ADD^C0XF2N(C0SGRF,MEDGRF,"sp:drugName",DSUBJ,FARY)
2295"RTN","C0SMED",92,0)
2296 . I SIG'="" D ADD^C0XF2N(C0SGRF,MEDGRF,"sp:instructions",SIG,FARY)
2297"RTN","C0SMED",93,0)
2298 . N NQTY,NQTY2,NFREQ,NFREQ2
2299"RTN","C0SMED",94,0)
2300 . S NQTY=$$ANONS^C0XF2N ; anonomous subject
2301"RTN","C0SMED",95,0)
2302 . D ADD^C0XF2N(C0SGRF,MEDGRF,"sp:quantity",NQTY,FARY)
2303"RTN","C0SMED",96,0)
2304 . S NQTY2=$$ANONS^C0XF2N ; anonomous subject
2305"RTN","C0SMED",97,0)
2306 . D ADD^C0XF2N(C0SGRF,NQTY,"sp:ValueAndUnit",NQTY2,FARY)
2307"RTN","C0SMED",98,0)
2308 . N DOSE S DOSE=$G(C0SARY("med",ZI,"doses.dose@dose"))
2309"RTN","C0SMED",99,0)
2310 . I DOSE="" S DOSE="UNKNOWN"
2311"RTN","C0SMED",100,0)
2312 . N UNIT S UNIT=$G(C0SARY("med",ZI,"doses.dose@units"))
2313"RTN","C0SMED",101,0)
2314 . I UNIT="" S UNIT="UNKNOWN"
2315"RTN","C0SMED",102,0)
2316 . D ADD^C0XF2N(C0SGRF,NQTY2,"sp:value",DOSE,FARY)
2317"RTN","C0SMED",103,0)
2318 . D ADD^C0XF2N(C0SGRF,NQTY2,"sp:unit",UNIT,FARY)
2319"RTN","C0SMED",104,0)
2320 . S NFREQ=$$ANONS^C0XF2N ; anonomous subject
2321"RTN","C0SMED",105,0)
2322 . S NFREQ2=$$ANONS^C0XF2N ; anonomous subject
2323"RTN","C0SMED",106,0)
2324 . D ADD^C0XF2N(C0SGRF,MEDGRF,"sp:frequency",NFREQ,FARY)
2325"RTN","C0SMED",107,0)
2326 . D ADD^C0XF2N(C0SGRF,NFREQ,"sp:ValueAndUnit",NFREQ2,FARY)
2327"RTN","C0SMED",108,0)
2328 . N SCHED S SCHED=$G(C0SARY("med",ZI,"doses.dose@schedule"))
2329"RTN","C0SMED",109,0)
2330 . I SCHED="" S SCHED="UNKNOWN"
2331"RTN","C0SMED",110,0)
2332 . N SCHUNIT S SCHUNIT=$G(C0SARY("med",ZI,"doses.dose@route"))
2333"RTN","C0SMED",111,0)
2334 . I SCHUNIT="" S SCHUNIT="UNKNOWN"
2335"RTN","C0SMED",112,0)
2336 . D ADD^C0XF2N(C0SGRF,NFREQ2,"sp:value",SCHED,FARY)
2337"RTN","C0SMED",113,0)
2338 . D ADD^C0XF2N(C0SGRF,NFREQ2,"sp:unit",SCHUNIT,FARY)
2339"RTN","C0SMED",114,0)
2340 . D ADD^C0XF2N(C0SGRF,DSUBJ,"rdf:type","sp:CodedValue",FARY)
2341"RTN","C0SMED",115,0)
2342 . D ADD^C0XF2N(C0SGRF,DSUBJ,"sp:code","rxnorm:"_RXNORM,FARY)
2343"RTN","C0SMED",116,0)
2344 . D ADD^C0XF2N(C0SGRF,"rxnorm:"_RXNORM,"rdf:type","sp:Code",FARY)
2345"RTN","C0SMED",117,0)
2346 . D ADD^C0XF2N(C0SGRF,"rxnorm:"_RXNORM,"dcterms:title",DNAME,FARY)
2347"RTN","C0SMED",118,0)
2348 . D ADD^C0XF2N(C0SGRF,"rxnorm:"_RXNORM,"sp:system","rxnorm:",FARY)
2349"RTN","C0SMED",119,0)
2350 . D ADD^C0XF2N(C0SGRF,"rxnorm:"_RXNORM,"dcterms:identifier",RXNORM,FARY)
2351"RTN","C0SMED",120,0)
2352 . D ADD^C0XF2N(C0SGRF,DSUBJ,"dcterms:title",DNAME,FARY)
2353"RTN","C0SMED",121,0)
2354 . D ADD^C0XF2N(C0SGRF,MEDGRF,"sp:startDate",SDATE,FARY)
2355"RTN","C0SMED",122,0)
2356 . D ADD^C0XF2N(C0SGRF,"rxnorm:"_RXNORM,"rdf:type","http://smartplatforms.org/terms/codes/RxNorm_Semantic",FARY)
2357"RTN","C0SMED",123,0)
2358 . D BULKLOAD^C0XF2N(.C0XFDA)
2359"RTN","C0SMED",124,0)
2360 . K C0XFDA
2361"RTN","C0SMED",125,0)
2362 S GRTN=C0SGRF
2363"RTN","C0SMED",126,0)
2364 q
2365"RTN","C0SMED",127,0)
2366 ;
2367"RTN","C0SMED",128,0)
2368RXNFN() Q 1130590011.001 ; RxNorm Concepts file number
2369"RTN","C0SMED",129,0)
2370 ;
2371"RTN","C0SMED",130,0)
2372RXCUI(ZVUID) ; EXTRINSIC WHICH RETURNS THE RXNORM CODE IF KNOWN OF
2373"RTN","C0SMED",131,0)
2374 ; THE VUID - RETURNS CODE^SYSTEM^VERSION TO USE IN THE CCR
2375"RTN","C0SMED",132,0)
2376 N ZRSLT S ZRSLT=ZVUID_"^"_"VUID"_"^" ; DEFAULT
2377"RTN","C0SMED",133,0)
2378 I $G(ZVUID)="" Q ""
2379"RTN","C0SMED",134,0)
2380 I '$D(^C0P("RXN")) Q ZRSLT ; ERX NOT INSTALLED
2381"RTN","C0SMED",135,0)
2382 N C0PIEN ; S C0PIEN=$$FIND1^DIC($$RXNFN,"","QX",ZVUID,"VUID")
2383"RTN","C0SMED",136,0)
2384 S C0PIEN=$O(^C0P("RXN","VUID",ZVUID,"")) ;GPL FIX FOR MULTIPLES
2385"RTN","C0SMED",137,0)
2386 N ZRXN S ZRXN=$$GET1^DIQ($$RXNFN,C0PIEN,.01)
2387"RTN","C0SMED",138,0)
2388 S ZRXN=$$NISTMAP(ZRXN) ; CHANGE THE CODE IF NEEDED
2389"RTN","C0SMED",139,0)
2390 I ZRXN'="" S ZRSLT=ZRXN_"^RXNORM^08AB_081201F"
2391"RTN","C0SMED",140,0)
2392 Q ZRSLT
2393"RTN","C0SMED",141,0)
2394 ;
2395"RTN","C0SMED",142,0)
2396NISTMAP(ZRXN) ; EXTRINSIC WHICH MAPS SOME RXNORM NUMBERS TO
2397"RTN","C0SMED",143,0)
2398 ; CONFORM TO NIST REQUIREMENTS
2399"RTN","C0SMED",144,0)
2400 ;INPATIENT CERTIFICATION
2401"RTN","C0SMED",145,0)
2402 I ZRXN=309362 S ZRXN=213169
2403"RTN","C0SMED",146,0)
2404 I ZRXN=855318 S ZRXN=855320
2405"RTN","C0SMED",147,0)
2406 I ZRXN=197361 S ZRXN=212549
2407"RTN","C0SMED",148,0)
2408 ;OUTPATIENT CERTIFICATION
2409"RTN","C0SMED",149,0)
2410 I ZRXN=310534 S ZRXN=205875
2411"RTN","C0SMED",150,0)
2412 I ZRXN=617312 S ZRXN=617314
2413"RTN","C0SMED",151,0)
2414 I ZRXN=310429 S ZRXN=200801
2415"RTN","C0SMED",152,0)
2416 I ZRXN=628953 S ZRXN=628958
2417"RTN","C0SMED",153,0)
2418 I ZRXN=745679 S ZRXN=630208
2419"RTN","C0SMED",154,0)
2420 I ZRXN=311564 S ZRXN=979334
2421"RTN","C0SMED",155,0)
2422 I ZRXN=836343 S ZRXN=836370
2423"RTN","C0SMED",156,0)
2424 Q ZRXN
2425"RTN","C0SMED",157,0)
2426 ;
2427"RTN","C0SMXMLB")
24280^6^B12189644
2429"RTN","C0SMXMLB",1,0)
2430MXMLBLD ;;ISF/RWF - Tool to build XML ;07/09/09 16:55 - Smart Container Ver.
2431"RTN","C0SMXMLB",2,0)
2432 ;;8.0;KERNEL;;;Build 1
2433"RTN","C0SMXMLB",3,0)
2434 QUIT
2435"RTN","C0SMXMLB",4,0)
2436 ;
2437"RTN","C0SMXMLB",5,0)
2438 ;DOC - The top level tag
2439"RTN","C0SMXMLB",6,0)
2440 ;DOCTYPE - Want to include a DOCTYPE node
2441"RTN","C0SMXMLB",7,0)
2442 ;FLAG - Set to 'G' to store the output in the global ^TMP("MXMLBLD",$J,
2443"RTN","C0SMXMLB",8,0)
2444START(DOC,DOCTYPE,FLAG,NO1ST) ;Call this once at the begining.
2445"RTN","C0SMXMLB",9,0)
2446 K ^TMP("MXMLBLD",$J)
2447"RTN","C0SMXMLB",10,0)
2448 S ^TMP("MXMLBLD",$J,"DOC")=DOC,^TMP("MXMLBLD",$J,"STK")=0
2449"RTN","C0SMXMLB",11,0)
2450 I $G(FLAG)["G" S ^TMP("MXMLBLD",$J,"CNT")=1
2451"RTN","C0SMXMLB",12,0)
2452 I $G(NO1ST)'=1 D OUTPUT($$XMLHDR)
2453"RTN","C0SMXMLB",13,0)
2454 D:$L($G(DOCTYPE)) OUTPUT("<!DOCTYPE "_DOCTYPE_">") D OUTPUT("<"_DOC_">")
2455"RTN","C0SMXMLB",14,0)
2456 Q
2457"RTN","C0SMXMLB",15,0)
2458 ;
2459"RTN","C0SMXMLB",16,0)
2460END ;Call this once to close out the document
2461"RTN","C0SMXMLB",17,0)
2462 D OUTPUT("</"_$G(^TMP("MXMLBLD",$J,"DOC"))_">")
2463"RTN","C0SMXMLB",18,0)
2464 I '$G(^TMP("MXMLBLD",$J,"CNT")) K ^TMP("MXMLBLD",$J)
2465"RTN","C0SMXMLB",19,0)
2466 K ^TMP("MXMLBLD",$J,"DOC"),^("CNT"),^("STK")
2467"RTN","C0SMXMLB",20,0)
2468 Q
2469"RTN","C0SMXMLB",21,0)
2470 ;
2471"RTN","C0SMXMLB",22,0)
2472ITEM(INDENT,TAG,ATT,VALUE) ;Output a Item
2473"RTN","C0SMXMLB",23,0)
2474 N I,X
2475"RTN","C0SMXMLB",24,0)
2476 S ATT=$G(ATT)
2477"RTN","C0SMXMLB",25,0)
2478 I '$D(VALUE) D OUTPUT($$BLS($G(INDENT))_"<"_TAG_$$ATT(.ATT)_" />") Q
2479"RTN","C0SMXMLB",26,0)
2480 D OUTPUT($$BLS($G(INDENT))_"<"_TAG_$$ATT(.ATT)_">"_$$CHARCHK(VALUE)_"</"_TAG_">")
2481"RTN","C0SMXMLB",27,0)
2482 Q
2483"RTN","C0SMXMLB",28,0)
2484 ;DOITEM is a callback to output the lower level.
2485"RTN","C0SMXMLB",29,0)
2486MULTI(INDENT,TAG,ATT,DOITEM) ;Output a Multipule
2487"RTN","C0SMXMLB",30,0)
2488 N I,X,S
2489"RTN","C0SMXMLB",31,0)
2490 S ATT=$G(ATT)
2491"RTN","C0SMXMLB",32,0)
2492 D PUSH($G(INDENT),TAG,.ATT)
2493"RTN","C0SMXMLB",33,0)
2494 D @DOITEM
2495"RTN","C0SMXMLB",34,0)
2496 D POP
2497"RTN","C0SMXMLB",35,0)
2498 Q
2499"RTN","C0SMXMLB",36,0)
2500 ;
2501"RTN","C0SMXMLB",37,0)
2502ATT(ATT) ;Output a string of attributes
2503"RTN","C0SMXMLB",38,0)
2504 I $D(ATT)<9 Q ""
2505"RTN","C0SMXMLB",39,0)
2506 N I,S,V
2507"RTN","C0SMXMLB",40,0)
2508 S S="",I=""
2509"RTN","C0SMXMLB",41,0)
2510 F S I=$O(ATT(I)) Q:I="" S S=S_" "_I_"="_$$Q(ATT(I))
2511"RTN","C0SMXMLB",42,0)
2512 Q S
2513"RTN","C0SMXMLB",43,0)
2514 ;
2515"RTN","C0SMXMLB",44,0)
2516Q(X) ;Add Quotes - Changed by gpl to use single instead of double quotes 6/11
2517"RTN","C0SMXMLB",45,0)
2518 ;I X'[$C(34) Q $C(34)_X_$C(34)
2519"RTN","C0SMXMLB",46,0)
2520 I X'[$C(39) Q $C(39)_X_$C(39)
2521"RTN","C0SMXMLB",47,0)
2522 ;N Q,Y,I,Z S Q=$C(34),(Y,Z)=""
2523"RTN","C0SMXMLB",48,0)
2524 N Q,Y,I,Z S Q=$C(39),(Y,Z)=""
2525"RTN","C0SMXMLB",49,0)
2526 F I=1:1:$L(X,Q)-1 S Y=Y_$P(X,Q,I)_Q_Q
2527"RTN","C0SMXMLB",50,0)
2528 S Y=Y_$P(X,Q,$L(X,Q))
2529"RTN","C0SMXMLB",51,0)
2530 ;Q $C(34)_Y_$C(34)
2531"RTN","C0SMXMLB",52,0)
2532 Q $C(39)_Y_$C(39)
2533"RTN","C0SMXMLB",53,0)
2534 ;
2535"RTN","C0SMXMLB",54,0)
2536XMLHDR() ; -- provides current XML standard header
2537"RTN","C0SMXMLB",55,0)
2538 Q "<?xml version=""1.0"" encoding=""utf-8"" ?>"
2539"RTN","C0SMXMLB",56,0)
2540 ;
2541"RTN","C0SMXMLB",57,0)
2542OUTPUT(S) ;Output
2543"RTN","C0SMXMLB",58,0)
2544 N C S C=$G(^TMP("MXMLBLD",$J,"CNT"))
2545"RTN","C0SMXMLB",59,0)
2546 I C S ^TMP("MXMLBLD",$J,C)=S,^TMP("MXMLBLD",$J,"CNT")=C+1 Q
2547"RTN","C0SMXMLB",60,0)
2548 W S,!
2549"RTN","C0SMXMLB",61,0)
2550 Q
2551"RTN","C0SMXMLB",62,0)
2552 ;
2553"RTN","C0SMXMLB",63,0)
2554CHARCHK(STR) ; -- replace xml character limits with entities
2555"RTN","C0SMXMLB",64,0)
2556 N A,I,X,Y,Z,NEWSTR
2557"RTN","C0SMXMLB",65,0)
2558 S (Y,Z)=""
2559"RTN","C0SMXMLB",66,0)
2560 ;IF STR["&" SET NEWSTR=STR DO SET STR=Y_Z
2561"RTN","C0SMXMLB",67,0)
2562 ;. FOR X=1:1 SET Y=Y_$PIECE(NEWSTR,"&",X)_"&amp;",Z=$PIECE(STR,"&",X+1,999) QUIT:Z'["&"
2563"RTN","C0SMXMLB",68,0)
2564 I STR["&" F I=1:1:$L(STR,"&")-1 S STR=$P(STR,"&",1,I)_"&amp;"_$P(STR,"&",I+1,999)
2565"RTN","C0SMXMLB",69,0)
2566 I STR["<" F S STR=$PIECE(STR,"<",1)_"&lt;"_$PIECE(STR,"<",2,99) Q:STR'["<"
2567"RTN","C0SMXMLB",70,0)
2568 I STR[">" F S STR=$PIECE(STR,">",1)_"&gt;"_$PIECE(STR,">",2,99) Q:STR'[">"
2569"RTN","C0SMXMLB",71,0)
2570 I STR["'" F S STR=$PIECE(STR,"'",1)_"&apos;"_$PIECE(STR,"'",2,99) Q:STR'["'"
2571"RTN","C0SMXMLB",72,0)
2572 I STR["""" F S STR=$PIECE(STR,"""",1)_"&quot;"_$PIECE(STR,"""",2,99) Q:STR'[""""
2573"RTN","C0SMXMLB",73,0)
2574 ;
2575"RTN","C0SMXMLB",74,0)
2576 S STR=$TR(STR,$C(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31))
2577"RTN","C0SMXMLB",75,0)
2578 QUIT STR
2579"RTN","C0SMXMLB",76,0)
2580 ;
2581"RTN","C0SMXMLB",77,0)
2582COMMENT(VAL) ;Add Comments
2583"RTN","C0SMXMLB",78,0)
2584 N I,L
2585"RTN","C0SMXMLB",79,0)
2586 ;I $D($G(VAL))=1 D OUTPUT("<!-- "_ATT_" -->") Q
2587"RTN","C0SMXMLB",80,0)
2588 I $D(VAL) D OUTPUT("<!-- "_ATT_" -->") Q ;CHANGED BY GPL FOR GTM
2589"RTN","C0SMXMLB",81,0)
2590 S I="",L="<!--"
2591"RTN","C0SMXMLB",82,0)
2592 F S I=$O(ATT(I)) Q:I="" D OUTPUT(L_ATT(I)) S L=""
2593"RTN","C0SMXMLB",83,0)
2594 D OUTPUT("-->")
2595"RTN","C0SMXMLB",84,0)
2596 Q
2597"RTN","C0SMXMLB",85,0)
2598 ;
2599"RTN","C0SMXMLB",86,0)
2600PUSH(INDENT,TAG,ATT) ;Write a TAG and save.
2601"RTN","C0SMXMLB",87,0)
2602 N CNT
2603"RTN","C0SMXMLB",88,0)
2604 S ATT=$G(ATT)
2605"RTN","C0SMXMLB",89,0)
2606 D OUTPUT($$BLS($G(INDENT))_"<"_TAG_$$ATT(.ATT)_">")
2607"RTN","C0SMXMLB",90,0)
2608 S CNT=$G(^TMP("MXMLBLD",$J,"STK"))+1,^TMP("MXMLBLD",$J,"STK")=CNT,^TMP("MXMLBLD",$J,"STK",CNT)=INDENT_"^"_TAG
2609"RTN","C0SMXMLB",91,0)
2610 Q
2611"RTN","C0SMXMLB",92,0)
2612 ;
2613"RTN","C0SMXMLB",93,0)
2614POP ;Write last pushed tag and pop
2615"RTN","C0SMXMLB",94,0)
2616 N CNT,TAG,INDENT,X
2617"RTN","C0SMXMLB",95,0)
2618 S CNT=$G(^TMP("MXMLBLD",$J,"STK")),X=^TMP("MXMLBLD",$J,"STK",CNT),^TMP("MXMLBLD",$J,"STK")=CNT-1
2619"RTN","C0SMXMLB",96,0)
2620 S INDENT=+X,TAG=$P(X,"^",2)
2621"RTN","C0SMXMLB",97,0)
2622 D OUTPUT($$BLS(INDENT)_"</"_TAG_">")
2623"RTN","C0SMXMLB",98,0)
2624 Q
2625"RTN","C0SMXMLB",99,0)
2626 ;
2627"RTN","C0SMXMLB",100,0)
2628BLS(I) ;Return INDENT string
2629"RTN","C0SMXMLB",101,0)
2630 N S
2631"RTN","C0SMXMLB",102,0)
2632 S S="",I=$G(I) S:I>0 $P(S," ",I)=" "
2633"RTN","C0SMXMLB",103,0)
2634 Q S
2635"RTN","C0SMXMLB",104,0)
2636 ;
2637"RTN","C0SMXMLB",105,0)
2638INDENT() ;Renturn indent level
2639"RTN","C0SMXMLB",106,0)
2640 Q +$G(^TMP("MXMLBLD",$J,"STK"))
2641"RTN","C0SNHIN")
26420^7^B88600644
2643"RTN","C0SNHIN",1,0)
2644C0SNHIN ; GPL - Smart Container - OUTPUT OF NHINV ROUTINES;6/3/11 17:05
2645"RTN","C0SNHIN",2,0)
2646 ;;0.1;C0S;nopatch;noreleasedate;Build 1
2647"RTN","C0SNHIN",3,0)
2648 ;Copyright 2011-2012 George Lilly. Licensed under the terms of the GNU
2649"RTN","C0SNHIN",4,0)
2650 ;General Public License See attached copy of the License.
2651"RTN","C0SNHIN",5,0)
2652 ;
2653"RTN","C0SNHIN",6,0)
2654 ;This program is free software; you can redistribute it and/or modify
2655"RTN","C0SNHIN",7,0)
2656 ;it under the terms of the GNU General Public License as published by
2657"RTN","C0SNHIN",8,0)
2658 ;the Free Software Foundation; either version 2 of the License, or
2659"RTN","C0SNHIN",9,0)
2660 ;(at your option) any later version.
2661"RTN","C0SNHIN",10,0)
2662 ;
2663"RTN","C0SNHIN",11,0)
2664 ;This program is distributed in the hope that it will be useful,
2665"RTN","C0SNHIN",12,0)
2666 ;but WITHOUT ANY WARRANTY; without even the implied warranty of
2667"RTN","C0SNHIN",13,0)
2668 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2669"RTN","C0SNHIN",14,0)
2670 ;GNU General Public License for more details.
2671"RTN","C0SNHIN",15,0)
2672 ;
2673"RTN","C0SNHIN",16,0)
2674 ;You should have received a copy of the GNU General Public License along
2675"RTN","C0SNHIN",17,0)
2676 ;with this program; if not, write to the Free Software Foundation, Inc.,
2677"RTN","C0SNHIN",18,0)
2678 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
2679"RTN","C0SNHIN",19,0)
2680 ;
2681"RTN","C0SNHIN",20,0)
2682 Q
2683"RTN","C0SNHIN",21,0)
2684EN(ZRTN,ZDFN,ZPART,KEEP) ; GENERATE AN NHIN ARRAY FOR A PATIENT
2685"RTN","C0SNHIN",22,0)
2686 ;
2687"RTN","C0SNHIN",23,0)
2688 K GARY,GNARY,GIDX,C0SDOCID
2689"RTN","C0SNHIN",24,0)
2690 K ZRTN
2691"RTN","C0SNHIN",25,0)
2692 N GN
2693"RTN","C0SNHIN",26,0)
2694 K ^TMP("NHINV",$J) ; CLEAN UP FROM LAST CALL
2695"RTN","C0SNHIN",27,0)
2696 K ^TMP("MXMLDOM",$J) ; CLEAN UP DOM
2697"RTN","C0SNHIN",28,0)
2698 K ^TMP("MXMLERR",$J) ; CLEAN UP MXML ERRORS
2699"RTN","C0SNHIN",29,0)
2700 D GET^C0SNHINV(.GN,ZDFN,ZPART) ; CALL NHINV ROUTINES TO PULL XML
2701"RTN","C0SNHIN",30,0)
2702 S GN=$P(GN,")",1)_")" ; CUT OFF THE REST OF LINE PROTOCOL
2703"RTN","C0SNHIN",31,0)
2704 S C0SDOCID=$$PARSE(GN,"NHINARRAY") ; PARSE WITH MXML
2705"RTN","C0SNHIN",32,0)
2706 D DOMO^C0SDOM(C0SDOCID,"/","ZRTN","GIDX","GARY",,"/results/") ; BLD ARRAYS
2707"RTN","C0SNHIN",33,0)
2708 I '$G(KEEP) K GIDX,GARY ; GET RID OF THE ARRAYS UNLESS KEEP=1
2709"RTN","C0SNHIN",34,0)
2710 ;D PROCESS("ZRTN",GN,"/result/",$G(KEEP))
2711"RTN","C0SNHIN",35,0)
2712 Q
2713"RTN","C0SNHIN",36,0)
2714 ;
2715"RTN","C0SNHIN",37,0)
2716PQRI(ZOUT,KEEP) ; RETURN THE NHIN ARRAY FOR THE PQRI XML TEMPLATE
2717"RTN","C0SNHIN",38,0)
2718 ;
2719"RTN","C0SNHIN",39,0)
2720 N ZG
2721"RTN","C0SNHIN",40,0)
2722 S ZG=$NA(^TMP("PQRIXML",$J))
2723"RTN","C0SNHIN",41,0)
2724 K @ZG
2725"RTN","C0SNHIN",42,0)
2726 D GETXML^C0SMXP(ZG,"PQRIXML") ; GET THE XML FROM C0S MISC XML
2727"RTN","C0SNHIN",43,0)
2728 N C0SDOCID
2729"RTN","C0SNHIN",44,0)
2730 S C0SDOCID=$$PARSE^C0SDOM(ZG,"PQRIXML") ; PARSE THE XML
2731"RTN","C0SNHIN",45,0)
2732 D DOMO^C0SDOM(C0SDOCID,"/","ZOUT","GIDX","GARY",,"//submission") ; BLD ARRAYS
2733"RTN","C0SNHIN",46,0)
2734 I '$G(KEEP) K GIDX,GARY ; GET RID OF THE ARRAYS UNLESS KEEP=1
2735"RTN","C0SNHIN",47,0)
2736 Q
2737"RTN","C0SNHIN",48,0)
2738 ;
2739"RTN","C0SNHIN",49,0)
2740PQRI2(ZRTN) ; RETURN THE NHIN ARRAY FOR PQRI ONE MEASURE
2741"RTN","C0SNHIN",50,0)
2742 ;
2743"RTN","C0SNHIN",51,0)
2744 ;N GG
2745"RTN","C0SNHIN",52,0)
2746 D GETXML^C0SMXP("GG","PQRI ONE MEASURE")
2747"RTN","C0SNHIN",53,0)
2748 D PROCESS(ZRTN,"GG","root",1)
2749"RTN","C0SNHIN",54,0)
2750 Q
2751"RTN","C0SNHIN",55,0)
2752 ;
2753"RTN","C0SNHIN",56,0)
2754PROCESS(ZRSLT,ZXML,ZREDUCE,KEEP) ; PARSE AND RUN DOMO ON XML
2755"RTN","C0SNHIN",57,0)
2756 ; ZRTN IS PASSED BY REFERENCE
2757"RTN","C0SNHIN",58,0)
2758 ; ZXML IS PASSED BY NAME
2759"RTN","C0SNHIN",59,0)
2760 ; IF KEEP IS 1, GARY AND GIDX ARE NOT KILLED
2761"RTN","C0SNHIN",60,0)
2762 ;
2763"RTN","C0SNHIN",61,0)
2764 N GN
2765"RTN","C0SNHIN",62,0)
2766 S GN=$NA(^TMP("C0SPROCESS",$J))
2767"RTN","C0SNHIN",63,0)
2768 K @GN
2769"RTN","C0SNHIN",64,0)
2770 M @GN=@ZXML
2771"RTN","C0SNHIN",65,0)
2772 S C0SDOCID=$$PARSE(GN,"NHINARRAY") ; PARSE WITH MXML
2773"RTN","C0SNHIN",66,0)
2774 K @GN
2775"RTN","C0SNHIN",67,0)
2776 D DOMO^C0SDOM(C0SDOCID,"/","ZRSLT","GIDX","GARY",,$G(ZREDUCE)) ; BLD ARRAYS
2777"RTN","C0SNHIN",68,0)
2778 I '$G(KEEP) K GIDX,GARY ; GET RID OF THE ARRAYS UNLESS KEEP=1
2779"RTN","C0SNHIN",69,0)
2780 Q
2781"RTN","C0SNHIN",70,0)
2782 ;
2783"RTN","C0SNHIN",71,0)
2784LOADSMRT ;
2785"RTN","C0SNHIN",72,0)
2786 ;
2787"RTN","C0SNHIN",73,0)
2788 K ^GPL("SMART")
2789"RTN","C0SNHIN",74,0)
2790 S GN=$NA(^GPL("SMART",1))
2791"RTN","C0SNHIN",75,0)
2792 I $$FTG^%ZISH("/home/george/","alex-lewis2.xml",GN,2) W !,"SMART FILE LOADED"
2793"RTN","C0SNHIN",76,0)
2794 Q
2795"RTN","C0SNHIN",77,0)
2796 ;
2797"RTN","C0SNHIN",78,0)
2798SMART ; TRY IT WITH SMART
2799"RTN","C0SNHIN",79,0)
2800 ;
2801"RTN","C0SNHIN",80,0)
2802 S GN=$NA(^GPL("SMART"))
2803"RTN","C0SNHIN",81,0)
2804 ;K ^TMP("MXMLDOM",$J)
2805"RTN","C0SNHIN",82,0)
2806 K ^TMP("MXMLERR",$J)
2807"RTN","C0SNHIN",83,0)
2808 S C0SDOCID=$$PARSE(GN,"SMART")
2809"RTN","C0SNHIN",84,0)
2810 D DOMO^C0SDOM(C0SDOCID,"/","GNARY","GIDX","GARY",,"//rdf:RDF/")
2811"RTN","C0SNHIN",85,0)
2812 ;K ^TMP("MXMLDOM",$J) ;CLEAN UP... IT'S BIG
2813"RTN","C0SNHIN",86,0)
2814 Q
2815"RTN","C0SNHIN",87,0)
2816 ;
2817"RTN","C0SNHIN",88,0)
2818CCR ; TRY IT WITH A CCR
2819"RTN","C0SNHIN",89,0)
2820 ;
2821"RTN","C0SNHIN",90,0)
2822 S GN=$NA(^GPL("CCR"))
2823"RTN","C0SNHIN",91,0)
2824 ;K ^TMP("MXMLDOM",$J)
2825"RTN","C0SNHIN",92,0)
2826 K ^TMP("MXMLERR",$J)
2827"RTN","C0SNHIN",93,0)
2828 S C0SDOCID=$$PARSE(GN,"CCR")
2829"RTN","C0SNHIN",94,0)
2830 D DOMO^C0SDOM(C0SDOCID,"/","GNARY","GIDX","GARY",,"//ContinuityOfCareRecord/Body/")
2831"RTN","C0SNHIN",95,0)
2832 ;K ^TMP("MXMLDOM",$J) ;CLEAN UP... IT'S BIG
2833"RTN","C0SNHIN",96,0)
2834 Q
2835"RTN","C0SNHIN",97,0)
2836 ;
2837"RTN","C0SNHIN",98,0)
2838MED ; TRY IT WITH A CCR MED SECTION
2839"RTN","C0SNHIN",99,0)
2840 ;
2841"RTN","C0SNHIN",100,0)
2842 S GN=$NA(^GPL("MED"))
2843"RTN","C0SNHIN",101,0)
2844 K ^TMP("MXMLDOM",$J)
2845"RTN","C0SNHIN",102,0)
2846 K ^TMP("MXMLERR",$J)
2847"RTN","C0SNHIN",103,0)
2848 S C0SDOCID=$$PARSE(GN,"MED")
2849"RTN","C0SNHIN",104,0)
2850 D DOMO^C0SDOM(C0SDOCID,"/","GNARY","GIDX","GARY",,"//Medications/")
2851"RTN","C0SNHIN",105,0)
2852 ;K ^TMP("MXMLDOM",$J) ;CLEAN UP... IT'S BIG
2853"RTN","C0SNHIN",106,0)
2854 Q
2855"RTN","C0SNHIN",107,0)
2856 ;
2857"RTN","C0SNHIN",108,0)
2858CCD ; TRY IT WITH A CCD
2859"RTN","C0SNHIN",109,0)
2860 ;
2861"RTN","C0SNHIN",110,0)
2862 S GN=$NA(^GPL("CCD"))
2863"RTN","C0SNHIN",111,0)
2864 ;K ^TMP("MXMLDOM",$J)
2865"RTN","C0SNHIN",112,0)
2866 K ^TMP("MXMLERR",$J)
2867"RTN","C0SNHIN",113,0)
2868 S C0SDOCID=$$PARSE(GN,"CCD")
2869"RTN","C0SNHIN",114,0)
2870 D DOMO^C0SDOM(C0SDOCID,"/","GNARY","GIDX","GARY",,"//ClinicalDocument/component/structuredBody/")
2871"RTN","C0SNHIN",115,0)
2872 ;K ^TMP("MXMLDOM",$J) ;CLEAN UP... IT'S BIG
2873"RTN","C0SNHIN",116,0)
2874 Q
2875"RTN","C0SNHIN",117,0)
2876 ;
2877"RTN","C0SNHIN",118,0)
2878TEST1 ; TEST NHINV OUTPUT IN ^GPL("NIHIN")
2879"RTN","C0SNHIN",119,0)
2880 ; PARSED WITH MXML
2881"RTN","C0SNHIN",120,0)
2882 ; RUN THROUGH XPATH
2883"RTN","C0SNHIN",121,0)
2884 K GARY,GIDX,C0SDOCID
2885"RTN","C0SNHIN",122,0)
2886 S GN=$NA(^GPL("NHIN"))
2887"RTN","C0SNHIN",123,0)
2888 ;S GN=$NA(^GPL("DOMI"))
2889"RTN","C0SNHIN",124,0)
2890 S C0SDOCID=$$PARSE(GN,"GPLTEST")
2891"RTN","C0SNHIN",125,0)
2892 D DOMO^C0SDOM(C0SDOCID,"/","GNARY","GIDX","GARY",,"/results/")
2893"RTN","C0SNHIN",126,0)
2894 K ^GPL("GNARY")
2895"RTN","C0SNHIN",127,0)
2896 M ^GPL("GNARY")=GNARY
2897"RTN","C0SNHIN",128,0)
2898 Q
2899"RTN","C0SNHIN",129,0)
2900 ;
2901"RTN","C0SNHIN",130,0)
2902TEST2 ; PUT GNARY THROUGH DOMI AND STORE XML IN ^GPL("DOMI")
2903"RTN","C0SNHIN",131,0)
2904 ;
2905"RTN","C0SNHIN",132,0)
2906 S GN=$NA(^GPL("GNARY"))
2907"RTN","C0SNHIN",133,0)
2908 S C0SDOCID=$$DOMI^C0SDOM(GN,,"results")
2909"RTN","C0SNHIN",134,0)
2910 D OUTXML^C0SDOM("G",C0SDOCID)
2911"RTN","C0SNHIN",135,0)
2912 K ^GPL("DOMI")
2913"RTN","C0SNHIN",136,0)
2914 M ^GPL("DOMI")=G
2915"RTN","C0SNHIN",137,0)
2916 Q
2917"RTN","C0SNHIN",138,0)
2918 ;
2919"RTN","C0SNHIN",139,0)
2920TEST3 ; TEST NHINV OUTPUT IN ^GPL("NIHIN")
2921"RTN","C0SNHIN",140,0)
2922 ; PARSED WITH MXML
2923"RTN","C0SNHIN",141,0)
2924 ; RUN THROUGH XPATH
2925"RTN","C0SNHIN",142,0)
2926 K GARY,GIDX,C0SDOCID
2927"RTN","C0SNHIN",143,0)
2928 ;S GN=$NA(^GPL("NHIN"))
2929"RTN","C0SNHIN",144,0)
2930 S GN=$NA(^GPL("DOMI"))
2931"RTN","C0SNHIN",145,0)
2932 S C0SDOCID=$$PARSE(GN,"GPLTEST")
2933"RTN","C0SNHIN",146,0)
2934 D DOMO^C0SDOM(C0SDOCID,"/","GNARY","GIDX","GARY",,"/results/")
2935"RTN","C0SNHIN",147,0)
2936 Q
2937"RTN","C0SNHIN",148,0)
2938 ;
2939"RTN","C0SNHIN",149,0)
2940DOMO(ZOID,ZPATH,ZNARY,ZXIDX,ZXPARY,ZNUM,ZREDUX) ; RECURSIVE ROUTINE TO POPULATE
2941"RTN","C0SNHIN",150,0)
2942 ; THE XPATH INDEX ZXIDX, PASSED BY NAME
2943"RTN","C0SNHIN",151,0)
2944 ; THE XPATH ARRAY XPARY, PASSED BY NAME
2945"RTN","C0SNHIN",152,0)
2946 ; ZOID IS THE STARTING OID
2947"RTN","C0SNHIN",153,0)
2948 ; ZPATH IS THE STARTING XPATH, USUALLY "/"
2949"RTN","C0SNHIN",154,0)
2950 ; ZNUM IS THE MULTIPLE NUMBER [x], USUALLY NULL WHEN ON THE TOP NODE
2951"RTN","C0SNHIN",155,0)
2952 ; ZREDUX IS THE XPATH REDUCTION STRING, TAKEN OUT OF EACH XPATH IF PRESENT
2953"RTN","C0SNHIN",156,0)
2954 I $G(ZREDUX)="" S ZREDUX=""
2955"RTN","C0SNHIN",157,0)
2956 N NEWPATH,NARY ; NEWPATH IS AN XPATH NARY IS AN NHIN MUMPS ARRAY
2957"RTN","C0SNHIN",158,0)
2958 N NEWNUM S NEWNUM=""
2959"RTN","C0SNHIN",159,0)
2960 I $G(ZNUM)>0 S NEWNUM="["_ZNUM_"]"
2961"RTN","C0SNHIN",160,0)
2962 S NEWPATH=ZPATH_"/"_$$TAG(ZOID)_NEWNUM ; CREATE THE XPATH FOR THIS NODE
2963"RTN","C0SNHIN",161,0)
2964 I $G(ZREDUX)'="" D ; REDUX PROVIDED?
2965"RTN","C0SNHIN",162,0)
2966 . N GT S GT=$P(NEWPATH,ZREDUX,2)
2967"RTN","C0SNHIN",163,0)
2968 . I GT'="" S NEWPATH=GT
2969"RTN","C0SNHIN",164,0)
2970 S @ZXIDX@(NEWPATH)=ZOID ; ADD THE XPATH FOR THIS NODE TO THE XPATH INDEX
2971"RTN","C0SNHIN",165,0)
2972 N GA D ATT("GA",ZOID) ; GET ATTRIBUTES FOR THIS NODE
2973"RTN","C0SNHIN",166,0)
2974 I $D(GA) D ; PROCESS THE ATTRIBUTES
2975"RTN","C0SNHIN",167,0)
2976 . N ZI S ZI=""
2977"RTN","C0SNHIN",168,0)
2978 . F S ZI=$O(GA(ZI)) Q:ZI="" D ; FOR EACH ATTRIBUTE
2979"RTN","C0SNHIN",169,0)
2980 . . N ZP S ZP=NEWPATH_"/"_ZI ; PATH FOR ATTRIBUTE
2981"RTN","C0SNHIN",170,0)
2982 . . S @ZXPARY@(ZP)=GA(ZI) ; ADD THE ATTRIBUTE XPATH TO THE XP ARRAY
2983"RTN","C0SNHIN",171,0)
2984 . . I GA(ZI)'="" D ADDNARY(ZP,GA(ZI)) ; ADD THE NHIN ARRAY VALUE
2985"RTN","C0SNHIN",172,0)
2986 N GD D DATA("GD",ZOID) ; SEE IF THERE IS DATA FOR THIS NODE
2987"RTN","C0SNHIN",173,0)
2988 I $D(GD(2)) D ;
2989"RTN","C0SNHIN",174,0)
2990 . M @ZXPARY@(NEWPATH)=GD ; IF MULITPLE DATA MERGE TO THE ARRAY
2991"RTN","C0SNHIN",175,0)
2992 E I $D(GD(1)) D ;
2993"RTN","C0SNHIN",176,0)
2994 . S @ZXPARY@(NEWPATH)=GD(1) ; IF SINGLE VALUE, ADD TO ARRAY
2995"RTN","C0SNHIN",177,0)
2996 . I GD(1)'="" D ADDNARY(NEWPATH,GD(1)) ; ADD TO NHIN ARRAY
2997"RTN","C0SNHIN",178,0)
2998 N ZFRST S ZFRST=$$FIRST(ZOID) ; SET FIRST CHILD
2999"RTN","C0SNHIN",179,0)
3000 I ZFRST'=0 D ; THERE IS A CHILD
3001"RTN","C0SNHIN",180,0)
3002 . N ZNUM
3003"RTN","C0SNHIN",181,0)
3004 . N ZMULT S ZMULT=$$ISMULT(ZFRST) ; IS FIRST CHILD A MULTIPLE
3005"RTN","C0SNHIN",182,0)
3006 . D DOMO(ZFRST,NEWPATH,ZNARY,ZXIDX,ZXPARY,$S(ZMULT:1,1:""),ZREDUX) ; THE CHILD
3007"RTN","C0SNHIN",183,0)
3008 N GNXT S GNXT=$$NXTSIB(ZOID)
3009"RTN","C0SNHIN",184,0)
3010 I $$TAG(GNXT)'=$$TAG(ZOID) S ZNUM="" ; RESET COUNTING AFTER MULTIPLES
3011"RTN","C0SNHIN",185,0)
3012 I GNXT'=0 D ;
3013"RTN","C0SNHIN",186,0)
3014 . N ZMULT S ZMULT=$$ISMULT(GNXT) ; IS THE SIBLING A MULTIPLE?
3015"RTN","C0SNHIN",187,0)
3016 . I (ZNUM="")&(ZMULT) D ; SIBLING IS FIRST OF MULTIPLES
3017"RTN","C0SNHIN",188,0)
3018 . . N ZNUM S ZNUM=1 ;
3019"RTN","C0SNHIN",189,0)
3020 . . D DOMO(GNXT,ZPATH,ZNARY,ZXIDX,ZXPARY,ZNUM,ZREDUX) ; DO NEXT SIB
3021"RTN","C0SNHIN",190,0)
3022 . E D DOMO(GNXT,ZPATH,ZNARY,ZXIDX,ZXPARY,$S(ZNUM>0:ZNUM+1,1:""),ZREDUX) ; SIB
3023"RTN","C0SNHIN",191,0)
3024 Q
3025"RTN","C0SNHIN",192,0)
3026 ;
3027"RTN","C0SNHIN",193,0)
3028ADDNARY(ZXP,ZVALUE) ; ADD AN NHIN ARRAY VALUE TO ZNARY
3029"RTN","C0SNHIN",194,0)
3030 ;
3031"RTN","C0SNHIN",195,0)
3032 N ZZI,ZZJ,ZZN
3033"RTN","C0SNHIN",196,0)
3034 S ZZI=$P(ZXP,"/",1) ; FIRST PIECE OF XPATH ARRAY
3035"RTN","C0SNHIN",197,0)
3036 I ZZI="" Q ; DON'T ADD THIS ONE .. PROBABLY THE //results NODE
3037"RTN","C0SNHIN",198,0)
3038 S ZZJ=$P(ZXP,ZZI_"/",2) ; REST OF XPATH ARRAY
3039"RTN","C0SNHIN",199,0)
3040 S ZZJ=$TR(ZZJ,"/",".") ; REPLACE / WITH .
3041"RTN","C0SNHIN",200,0)
3042 I ZZI'["]" D ; A SINGLETON
3043"RTN","C0SNHIN",201,0)
3044 . S ZZN=1
3045"RTN","C0SNHIN",202,0)
3046 E D ; THERE IS AN [x] OCCURANCE
3047"RTN","C0SNHIN",203,0)
3048 . S ZZN=$P($P(ZZI,"[",2),"]",1) ; PULL OUT THE OCCURANCE
3049"RTN","C0SNHIN",204,0)
3050 . S ZZI=$P(ZZI,"[",1) ; TAKE OUT THE [X]
3051"RTN","C0SNHIN",205,0)
3052 I ZZJ'="" S @ZNARY@(ZZI,ZZN,ZZJ)=ZVALUE
3053"RTN","C0SNHIN",206,0)
3054 Q
3055"RTN","C0SNHIN",207,0)
3056 ;
3057"RTN","C0SNHIN",208,0)
3058PARSE(INXML,INDOC) ;CALL THE MXML PARSER ON INXML, PASSED BY NAME
3059"RTN","C0SNHIN",209,0)
3060 ; INDOC IS PASSED AS THE DOCUMENT NAME - DON'T KNOW WHERE TO STORE THIS NOW
3061"RTN","C0SNHIN",210,0)
3062 ; EXTRINSIC WHICH RETURNS THE DOCID ASSIGNED BY MXML
3063"RTN","C0SNHIN",211,0)
3064 ;Q $$EN^MXMLDOM(INXML)
3065"RTN","C0SNHIN",212,0)
3066 Q $$EN^MXMLDOM(INXML,"W")
3067"RTN","C0SNHIN",213,0)
3068 ;
3069"RTN","C0SNHIN",214,0)
3070ISMULT(ZOID) ; RETURN TRUE IF ZOID IS ONE OF A MULTIPLE
3071"RTN","C0SNHIN",215,0)
3072 N ZN
3073"RTN","C0SNHIN",216,0)
3074 ;I $$TAG(ZOID)["entry" B
3075"RTN","C0SNHIN",217,0)
3076 S ZN=$$NXTSIB(ZOID)
3077"RTN","C0SNHIN",218,0)
3078 I ZN'="" Q $$TAG(ZOID)=$$TAG(ZN) ; IF TAG IS THE SAME AS NEXT SIB TAG
3079"RTN","C0SNHIN",219,0)
3080 Q 0
3081"RTN","C0SNHIN",220,0)
3082 ;
3083"RTN","C0SNHIN",221,0)
3084FIRST(ZOID) ;RETURNS THE OID OF THE FIRST CHILD OF ZOID
3085"RTN","C0SNHIN",222,0)
3086 Q $$CHILD^MXMLDOM(C0SDOCID,ZOID)
3087"RTN","C0SNHIN",223,0)
3088 ;
3089"RTN","C0SNHIN",224,0)
3090PARENT(ZOID) ;RETURNS THE OID OF THE PARENT OF ZOID
3091"RTN","C0SNHIN",225,0)
3092 Q $$PARENT^MXMLDOM(C0SDOCID,ZOID)
3093"RTN","C0SNHIN",226,0)
3094 ;
3095"RTN","C0SNHIN",227,0)
3096ATT(RTN,NODE) ;GET ATTRIBUTES FOR ZOID
3097"RTN","C0SNHIN",228,0)
3098 S HANDLE=C0SDOCID
3099"RTN","C0SNHIN",229,0)
3100 K @RTN
3101"RTN","C0SNHIN",230,0)
3102 D GETTXT^MXMLDOM("A")
3103"RTN","C0SNHIN",231,0)
3104 Q
3105"RTN","C0SNHIN",232,0)
3106 ;
3107"RTN","C0SNHIN",233,0)
3108TAG(ZOID) ; RETURNS THE XML TAG FOR THE NODE
3109"RTN","C0SNHIN",234,0)
3110 ;I ZOID=149 B ;GPLTEST
3111"RTN","C0SNHIN",235,0)
3112 N X,Y
3113"RTN","C0SNHIN",236,0)
3114 S Y=""
3115"RTN","C0SNHIN",237,0)
3116 S X=$G(C0SCBK("TAG")) ;IS THERE A CALLBACK FOR THIS ROUTINE
3117"RTN","C0SNHIN",238,0)
3118 I X'="" X X ; EXECUTE THE CALLBACK, SHOULD SET Y
3119"RTN","C0SNHIN",239,0)
3120 I Y="" S Y=$$NAME^MXMLDOM(C0SDOCID,ZOID)
3121"RTN","C0SNHIN",240,0)
3122 Q Y
3123"RTN","C0SNHIN",241,0)
3124 ;
3125"RTN","C0SNHIN",242,0)
3126NXTSIB(ZOID) ; RETURNS THE NEXT SIBLING
3127"RTN","C0SNHIN",243,0)
3128 Q $$SIBLING^MXMLDOM(C0SDOCID,ZOID)
3129"RTN","C0SNHIN",244,0)
3130 ;
3131"RTN","C0SNHIN",245,0)
3132DATA(ZT,ZOID) ; RETURNS DATA FOR THE NODE
3133"RTN","C0SNHIN",246,0)
3134 ;N ZT,ZN S ZT=""
3135"RTN","C0SNHIN",247,0)
3136 ;S C0SDOM=$NA(^TMP("MXMLDOM",$J,C0SDOCID))
3137"RTN","C0SNHIN",248,0)
3138 ;Q $G(@C0SDOM@(ZOID,"T",1))
3139"RTN","C0SNHIN",249,0)
3140 S ZN=$$TEXT^MXMLDOM(C0SDOCID,ZOID,ZT)
3141"RTN","C0SNHIN",250,0)
3142 Q
3143"RTN","C0SNHIN",251,0)
3144 ;
3145"RTN","C0SNHIN",252,0)
3146OUTXML(ZRTN,INID) ; USES C0SMXMLB (MXMLBLD) TO OUTPUT XML FROM AN MXMLDOM
3147"RTN","C0SNHIN",253,0)
3148 ;
3149"RTN","C0SNHIN",254,0)
3150 S C0SDOCID=INID
3151"RTN","C0SNHIN",255,0)
3152 D START^C0SMXMLB($$TAG(1),,"G")
3153"RTN","C0SNHIN",256,0)
3154 D NDOUT($$FIRST(1))
3155"RTN","C0SNHIN",257,0)
3156 D END^C0SMXMLB ;END THE DOCUMENT
3157"RTN","C0SNHIN",258,0)
3158 M @ZRTN=^TMP("MXMLBLD",$J)
3159"RTN","C0SNHIN",259,0)
3160 K ^TMP("MXMLBLD",$J)
3161"RTN","C0SNHIN",260,0)
3162 Q
3163"RTN","C0SNHIN",261,0)
3164 ;
3165"RTN","C0SNHIN",262,0)
3166NDOUT(ZOID) ;CALLBACK ROUTINE - IT IS RECURSIVE
3167"RTN","C0SNHIN",263,0)
3168 N ZI S ZI=$$FIRST(ZOID)
3169"RTN","C0SNHIN",264,0)
3170 I ZI'=0 D ; THERE IS A CHILD
3171"RTN","C0SNHIN",265,0)
3172 . N ZATT D ATT("ZATT",ZOID) ; THESE ARE THE ATTRIBUTES MOVED TO ZATT
3173"RTN","C0SNHIN",266,0)
3174 . D MULTI^C0SMXMLB("",$$TAG(ZOID),.ZATT,"NDOUT^C0SMXML(ZI)") ;HAVE CHILDREN
3175"RTN","C0SNHIN",267,0)
3176 E D ; NO CHILD - IF NO CHILDREN, A NODE HAS DATA, IS AN ENDPOINT
3177"RTN","C0SNHIN",268,0)
3178 . ;W "DOING",ZOID,!
3179"RTN","C0SNHIN",269,0)
3180 . N ZD D DATA("ZD",ZOID) ;NODES WITHOUT CHILDREN HAVE DATA
3181"RTN","C0SNHIN",270,0)
3182 . N ZATT D ATT("ZATT",ZOID) ;ATTRIBUTES
3183"RTN","C0SNHIN",271,0)
3184 . D ITEM^C0SMXMLB("",$$TAG(ZOID),.ZATT,$G(ZD(1))) ;NO CHILDREN
3185"RTN","C0SNHIN",272,0)
3186 I $$NXTSIB(ZOID)'=0 D ; THERE IS A SIBLING
3187"RTN","C0SNHIN",273,0)
3188 . D NDOUT($$NXTSIB(ZOID)) ;RECURSE FOR SIBLINGS
3189"RTN","C0SNHIN",274,0)
3190 Q
3191"RTN","C0SNHIN",275,0)
3192 ;
3193"RTN","C0SNHIN",276,0)
3194WNHIN(ZDFN) ; WRITES THE XML OUTPUT OF GET^NHINV TO AN XML FILE
3195"RTN","C0SNHIN",277,0)
3196 ;
3197"RTN","C0SNHIN",278,0)
3198 N GN,GN2
3199"RTN","C0SNHIN",279,0)
3200 D GET^NHINV(.GN,ZDFN) ; EXTRACT THE XML
3201"RTN","C0SNHIN",280,0)
3202 S GN2=$NA(@GN@(1))
3203"RTN","C0SNHIN",281,0)
3204 W $$OUTPUT^C0SXPATH(GN2,"nhin_"_ZDFN_".xml","/home/wvehr3-09/")
3205"RTN","C0SNHIN",282,0)
3206 Q
3207"RTN","C0SNHIN",283,0)
3208 ;
3209"RTN","C0SNHIN",284,0)
3210TESTNARY ; TEST MAKING A NHIN ARRAY
3211"RTN","C0SNHIN",285,0)
3212 N ZI S ZI=""
3213"RTN","C0SNHIN",286,0)
3214 N ZH ; DOM HANDLE
3215"RTN","C0SNHIN",287,0)
3216 D TEST1 ; PARSE AN NHIN RESULT INTO THE DOM
3217"RTN","C0SNHIN",288,0)
3218 S ZH=C0SDOCID ; SET THE HANDLE
3219"RTN","C0SNHIN",289,0)
3220 N ZD S ZD=$NA(^TMP("MXMLDOM",$J,ZH))
3221"RTN","C0SNHIN",290,0)
3222 F S ZI=$O(@ZD@(ZI)) Q:ZI="" D ; FOR EACH NODE
3223"RTN","C0SNHIN",291,0)
3224 . N ZATT
3225"RTN","C0SNHIN",292,0)
3226 . D MNARY(.ZATT,ZH,ZI)
3227"RTN","C0SNHIN",293,0)
3228 . N ZPRE,ZN
3229"RTN","C0SNHIN",294,0)
3230 . S ZPRE=$$PRE(ZI)
3231"RTN","C0SNHIN",295,0)
3232 . S ZN=$P(ZPRE,",",2)
3233"RTN","C0SNHIN",296,0)
3234 . S ZPRE=$P(ZPRE,",",1)
3235"RTN","C0SNHIN",297,0)
3236 . ;I $D(ZATT) ZWR ZATT
3237"RTN","C0SNHIN",298,0)
3238 . N ZJ S ZJ=""
3239"RTN","C0SNHIN",299,0)
3240 . F S ZJ=$O(ZATT(ZJ)) Q:ZJ="" D ; FOR EACH ATTRIBUTE
3241"RTN","C0SNHIN",300,0)
3242 . . W ZPRE_"["_ZN_"]"_$$TAG(ZI)_"."_ZJ_"="_ZATT(ZJ),!
3243"RTN","C0SNHIN",301,0)
3244 . . S GOUT(ZPRE,ZN,$$TAG(ZI)_"."_ZJ)=ZATT(ZJ)
3245"RTN","C0SNHIN",302,0)
3246 Q
3247"RTN","C0SNHIN",303,0)
3248 ;
3249"RTN","C0SNHIN",304,0)
3250PRE(ZNODE) ; EXTRINSIC WHICH RETURNS THE PREFIX FOR A NODE
3251"RTN","C0SNHIN",305,0)
3252 ;
3253"RTN","C0SNHIN",306,0)
3254 N GI,GI2,GPT,GJ,GN
3255"RTN","C0SNHIN",307,0)
3256 S GI=$$PARENT(ZNODE) ; PARENT NODE
3257"RTN","C0SNHIN",308,0)
3258 I GI=0 Q "" ; NO PARENT
3259"RTN","C0SNHIN",309,0)
3260 S GPT=$$TAG(GI) ; TAG OF PARENT
3261"RTN","C0SNHIN",310,0)
3262 S GI2=$$PARENT(GI) ; PARENT OF PARENT
3263"RTN","C0SNHIN",311,0)
3264 I (GI2'=0)&($$TAG(GI2)'="results") S GPT=$$TAG(GI2)_"."_GPT
3265"RTN","C0SNHIN",312,0)
3266 S GJ=$$FIRST(GI) ; NODE OF FIRST SIB
3267"RTN","C0SNHIN",313,0)
3268 I GJ=ZNODE Q:$$TAG(GI)_",1"
3269"RTN","C0SNHIN",314,0)
3270 F GN=2:1 Q:GJ=ZNODE D ;
3271"RTN","C0SNHIN",315,0)
3272 . S GJ=$$NXTSIB(GJ) ; NEXT SIBLING
3273"RTN","C0SNHIN",316,0)
3274 Q GPT_","_GN
3275"RTN","C0SNHIN",317,0)
3276 ;
3277"RTN","C0SNHIN",318,0)
3278MNARY(ZRTN,ZHANDLE,ZOID) ; MAKE A NHIN ARRAY FROM A DOM NODE
3279"RTN","C0SNHIN",319,0)
3280 ; RETURNED IN ZRTN, PASSED BY REFERENCE
3281"RTN","C0SNHIN",320,0)
3282 ; ZHANDLE IS THE DOM DOCUMENT ID
3283"RTN","C0SNHIN",321,0)
3284 ; ZOID IS THE DOM NODE
3285"RTN","C0SNHIN",322,0)
3286 D ATT("ZRTN",ZOID)
3287"RTN","C0SNHIN",323,0)
3288 Q
3289"RTN","C0SNHIN",324,0)
3290 ;
3291"RTN","C0SNHINV")
32920^8^B15736572
3293"RTN","C0SNHINV",1,0)
3294C0SNHINV ;SLC/MKB - Serve VistA data as XML via RPC - Smart Container Version
3295"RTN","C0SNHINV",2,0)
3296 ;;1.0;C0S;**1**;Oct 25, 2010;Build 1
3297"RTN","C0SNHINV",3,0)
3298 ;
3299"RTN","C0SNHINV",4,0)
3300 ; External References DBIA#
3301"RTN","C0SNHINV",5,0)
3302 ; ------------------- -----
3303"RTN","C0SNHINV",6,0)
3304 ; ^DPT 10035
3305"RTN","C0SNHINV",7,0)
3306 ; ^SC 10040
3307"RTN","C0SNHINV",8,0)
3308 ; DIQ 2056
3309"RTN","C0SNHINV",9,0)
3310 ; MPIF001 2701
3311"RTN","C0SNHINV",10,0)
3312 ; VASITE 10112
3313"RTN","C0SNHINV",11,0)
3314 ; XLFDT 10103
3315"RTN","C0SNHINV",12,0)
3316 ; XLFSTR 10104
3317"RTN","C0SNHINV",13,0)
3318 ; XUAF4 2171
3319"RTN","C0SNHINV",14,0)
3320 ;
3321"RTN","C0SNHINV",15,0)
3322GET(NHIN,DFN,TYPE,START,STOP,MAX,ID) ; -- Return search results as XML in @NHIN@(n)
3323"RTN","C0SNHINV",16,0)
3324 ; RPC = NHIN GET VISTA DATA
3325"RTN","C0SNHINV",17,0)
3326 N ICN,NHINI,NHINTOTL
3327"RTN","C0SNHINV",18,0)
3328 S NHIN=$NA(^TMP("NHINV",$J)) K @NHIN
3329"RTN","C0SNHINV",19,0)
3330 ;
3331"RTN","C0SNHINV",20,0)
3332 ; parse & validate input parameters
3333"RTN","C0SNHINV",21,0)
3334 S ICN=+$P(DFN,";",2),DFN=+$G(DFN)
3335"RTN","C0SNHINV",22,0)
3336 I 'DFN S DFN=+$$GETDFN^MPIF001(ICN)
3337"RTN","C0SNHINV",23,0)
3338 I DFN<1!'$D(^DPT(DFN)) D ERR(1,DFN) G GTQ
3339"RTN","C0SNHINV",24,0)
3340 S TYPE=$G(TYPE) I TYPE="" S TYPE=$$ALL
3341"RTN","C0SNHINV",25,0)
3342 S:'$G(START) START=1410101 S:'$G(STOP) STOP=9999998 S:'$G(MAX) MAX=9999
3343"RTN","C0SNHINV",26,0)
3344 I START,STOP,STOP<START N X S X=START,START=STOP,STOP=X ;switch
3345"RTN","C0SNHINV",27,0)
3346 I STOP,$L(STOP,".")<2 S STOP=STOP_".24"
3347"RTN","C0SNHINV",28,0)
3348 S ID=$G(ID)
3349"RTN","C0SNHINV",29,0)
3350 ;
3351"RTN","C0SNHINV",30,0)
3352 ; extract data
3353"RTN","C0SNHINV",31,0)
3354 N NHINTYPE,NHINP,RTN
3355"RTN","C0SNHINV",32,0)
3356 S NHINTYPE=TYPE D ADD("<results>")
3357"RTN","C0SNHINV",33,0)
3358 F NHINP=1:1:$L(NHINTYPE,";") S TYPE=$P(NHINTYPE,";",NHINP) I $L(TYPE) D
3359"RTN","C0SNHINV",34,0)
3360 . S RTN="EN^"_$$RTN(TYPE) Q:'$L($T(@RTN)) ;D ERR(2) Q
3361"RTN","C0SNHINV",35,0)
3362 . D @(RTN_"(DFN,START,STOP,MAX,ID)")
3363"RTN","C0SNHINV",36,0)
3364 D ADD("</results>")
3365"RTN","C0SNHINV",37,0)
3366 ;
3367"RTN","C0SNHINV",38,0)
3368 I $G(NHINTOTL),$G(@NHIN@(1))="<results>" S @NHIN@(1)="<results total='"_NHINTOTL_"' >"
3369"RTN","C0SNHINV",39,0)
3370 ;
3371"RTN","C0SNHINV",40,0)
3372GTQ ; end
3373"RTN","C0SNHINV",41,0)
3374 Q
3375"RTN","C0SNHINV",42,0)
3376 ;
3377"RTN","C0SNHINV",43,0)
3378RTN(X) ; -- Return name of NHINVxxx routine for clinical domain X
3379"RTN","C0SNHINV",44,0)
3380 S X=$$UP^XLFSTR(X),Y="NHINV"
3381"RTN","C0SNHINV",45,0)
3382 I X="ACCESSION" S Y="NHINVLRA"
3383"RTN","C0SNHINV",46,0)
3384 I X="ALLERGY" S Y="NHINVART"
3385"RTN","C0SNHINV",47,0)
3386 I X="APPOINTMENT" S Y="NHINVAPT"
3387"RTN","C0SNHINV",48,0)
3388 ; X="CONSULT" S Y="NHINVCON"
3389"RTN","C0SNHINV",49,0)
3390 I X="DOCUMENT" S Y="NHINVTIU"
3391"RTN","C0SNHINV",50,0)
3392 I X="IMMUNIZATION" S Y="NHINVIMM"
3393"RTN","C0SNHINV",51,0)
3394 I X="LAB" S Y="NHINVLR"
3395"RTN","C0SNHINV",52,0)
3396 I X="PANEL" S Y="NHINVLRO"
3397"RTN","C0SNHINV",53,0)
3398 I X="MED" S Y="NHINVPS"
3399"RTN","C0SNHINV",54,0)
3400 I X="RX" S Y="NHINVPSO"
3401"RTN","C0SNHINV",55,0)
3402 ; X="ORDER" S Y="NHINVOR"
3403"RTN","C0SNHINV",56,0)
3404 I X="PATIENT" S Y="NHINVPT"
3405"RTN","C0SNHINV",57,0)
3406 I X="PROBLEM" S Y="NHINVPL"
3407"RTN","C0SNHINV",58,0)
3408 I X="PROCEDURE" S Y="NHINVPRC"
3409"RTN","C0SNHINV",59,0)
3410 I X="SURGERY" S Y="NHINVSR"
3411"RTN","C0SNHINV",60,0)
3412 I X="VISIT" S Y="NHINVSIT"
3413"RTN","C0SNHINV",61,0)
3414 I X="VITAL" S Y="NHINVIT"
3415"RTN","C0SNHINV",62,0)
3416 I X="RADIOLOGY" S Y="NHINVRA"
3417"RTN","C0SNHINV",63,0)
3418 I X="NEW" S Y="NHINVPR"
3419"RTN","C0SNHINV",64,0)
3420 Q Y
3421"RTN","C0SNHINV",65,0)
3422 ;
3423"RTN","C0SNHINV",66,0)
3424ALL() ; -- return string for all types of data
3425"RTN","C0SNHINV",67,0)
3426 ;Q "patient;allergy;problem;vital;lab;med;immunization;visit;appointment;document;procedure"
3427"RTN","C0SNHINV",68,0)
3428 Q "patient;allergy;problem;vital;lab;med;immunization;visit;appointment;procedure"
3429"RTN","C0SNHINV",69,0)
3430 ;
3431"RTN","C0SNHINV",70,0)
3432ERR(X,VAL) ; -- return error message
3433"RTN","C0SNHINV",71,0)
3434 N MSG S MSG="Error"
3435"RTN","C0SNHINV",72,0)
3436 I X=1 S MSG="Patient with dfn '"_$G(VAL)_"' not found"
3437"RTN","C0SNHINV",73,0)
3438 I X=2 S MSG="Requested domain type '"_$G(VAL)_"' not recognized"
3439"RTN","C0SNHINV",74,0)
3440 I X=99 S MSG="Unknown request"
3441"RTN","C0SNHINV",75,0)
3442 ;
3443"RTN","C0SNHINV",76,0)
3444 D ADD("<error>")
3445"RTN","C0SNHINV",77,0)
3446 D ADD("<message>"_MSG_"</message>")
3447"RTN","C0SNHINV",78,0)
3448 D ADD("</error>")
3449"RTN","C0SNHINV",79,0)
3450 Q
3451"RTN","C0SNHINV",80,0)
3452 ;
3453"RTN","C0SNHINV",81,0)
3454ESC(X) ; -- escape outgoing XML
3455"RTN","C0SNHINV",82,0)
3456 ; Q $ZCONVERT(X,"O","HTML") ; uncomment for fastest performance on Cache
3457"RTN","C0SNHINV",83,0)
3458 ;
3459"RTN","C0SNHINV",84,0)
3460 N I,Y,QOT S QOT=""""
3461"RTN","C0SNHINV",85,0)
3462 S Y=$P(X,"&") F I=2:1:$L(X,"&") S Y=Y_"&amp;"_$P(X,"&",I)
3463"RTN","C0SNHINV",86,0)
3464 S X=Y,Y=$P(X,"<") F I=2:1:$L(X,"<") S Y=Y_"&lt;"_$P(X,"<",I)
3465"RTN","C0SNHINV",87,0)
3466 S X=Y,Y=$P(X,">") F I=2:1:$L(X,">") S Y=Y_"&gt;"_$P(X,">",I)
3467"RTN","C0SNHINV",88,0)
3468 S X=Y,Y=$P(X,"'") F I=2:1:$L(X,"'") S Y=Y_"&apos;"_$P(X,"'",I)
3469"RTN","C0SNHINV",89,0)
3470 S X=Y,Y=$P(X,QOT) F I=2:1:$L(X,QOT) S Y=Y_"&quot;"_$P(X,QOT,I)
3471"RTN","C0SNHINV",90,0)
3472 Q Y
3473"RTN","C0SNHINV",91,0)
3474 ;
3475"RTN","C0SNHINV",92,0)
3476ADD(X) ; Add a line @NHIN@(n)=X
3477"RTN","C0SNHINV",93,0)
3478 S NHINI=$G(NHINI)+1
3479"RTN","C0SNHINV",94,0)
3480 S @NHIN@(NHINI)=X
3481"RTN","C0SNHINV",95,0)
3482 Q
3483"RTN","C0SNHINV",96,0)
3484 ;
3485"RTN","C0SNHINV",97,0)
3486STRING(ARRAY) ; -- Return text in ARRAY(n) or ARRAY(n,0) as a string
3487"RTN","C0SNHINV",98,0)
3488 N I,X,Y S Y=""
3489"RTN","C0SNHINV",99,0)
3490 S I=+$O(ARRAY("")) I I=0 S I=+$O(ARRAY(0))
3491"RTN","C0SNHINV",100,0)
3492 S Y=$S($D(ARRAY(I,0)):ARRAY(I,0),1:$G(ARRAY(I)))
3493"RTN","C0SNHINV",101,0)
3494 F S I=$O(ARRAY(I)) Q:I<1 D
3495"RTN","C0SNHINV",102,0)
3496 . S X=$S($D(ARRAY(I,0)):ARRAY(I,0),1:ARRAY(I))
3497"RTN","C0SNHINV",103,0)
3498 . I $E(X)=" " S Y=Y_$C(13,10)_X Q
3499"RTN","C0SNHINV",104,0)
3500 . S Y=Y_$S($E(Y,$L(Y))=" ":"",1:" ")_X
3501"RTN","C0SNHINV",105,0)
3502 Q Y
3503"RTN","C0SNHINV",106,0)
3504 ;
3505"RTN","C0SNHINV",107,0)
3506FAC(X) ; -- return Institution file station# for location X
3507"RTN","C0SNHINV",108,0)
3508 N HLOC,FAC,Y0,Y S Y=""
3509"RTN","C0SNHINV",109,0)
3510 S HLOC=$G(^SC(+$G(X),0)),FAC=$P(HLOC,U,4) ;Institution ien
3511"RTN","C0SNHINV",110,0)
3512 ; Get P:4 via Med Ctr Div, if not directly linked
3513"RTN","C0SNHINV",111,0)
3514 I 'FAC,$P(HLOC,U,15) S FAC=$$GET1^DIQ(40.8,+$P(HLOC,U,15)_",",.07,"I")
3515"RTN","C0SNHINV",112,0)
3516 S Y0=$S(FAC:$$NS^XUAF4(FAC),1:$P($$SITE^VASITE,U,2,3)) ;name^stn#
3517"RTN","C0SNHINV",113,0)
3518 S:$L(Y0) Y=$P(Y0,U,2)_U_$P(Y0,U) ;switch to stn#^name
3519"RTN","C0SNHINV",114,0)
3520 I $L(Y),'Y S $P(Y,U)=FAC
3521"RTN","C0SNHINV",115,0)
3522 Q Y
3523"RTN","C0SNHINV",116,0)
3524 ;
3525"RTN","C0SNHINV",117,0)
3526VUID(IEN,FILE) ; -- Return VUID for item
3527"RTN","C0SNHINV",118,0)
3528 Q $$GET1^DIQ(FILE,IEN_",",99.99)
3529"RTN","C0SPROB")
35300^9^B49669400
3531"RTN","C0SPROB",1,0)
3532C0SPROB ; GPL - Smart Problem Processing ;5/01/12 17:05
3533"RTN","C0SPROB",2,0)
3534 ;;0.1;C0S;nopatch;noreleasedate;Build 1
3535"RTN","C0SPROB",3,0)
3536 ;Copyright 2012 George Lilly. Licensed under the terms of the GNU
3537"RTN","C0SPROB",4,0)
3538 ;General Public License See attached copy of the License.
3539"RTN","C0SPROB",5,0)
3540 ;
3541"RTN","C0SPROB",6,0)
3542 ;This program is free software; you can redistribute it and/or modify
3543"RTN","C0SPROB",7,0)
3544 ;it under the terms of the GNU General Public License as published by
3545"RTN","C0SPROB",8,0)
3546 ;the Free Software Foundation; either version 2 of the License, or
3547"RTN","C0SPROB",9,0)
3548 ;(at your option) any later version.
3549"RTN","C0SPROB",10,0)
3550 ;
3551"RTN","C0SPROB",11,0)
3552 ;This program is distributed in the hope that it will be useful,
3553"RTN","C0SPROB",12,0)
3554 ;but WITHOUT ANY WARRANTY; without even the implied warranty of
3555"RTN","C0SPROB",13,0)
3556 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3557"RTN","C0SPROB",14,0)
3558 ;GNU General Public License for more details.
3559"RTN","C0SPROB",15,0)
3560 ;
3561"RTN","C0SPROB",16,0)
3562 ;You should have received a copy of the GNU General Public License along
3563"RTN","C0SPROB",17,0)
3564 ;with this program; if not, write to the Free Software Foundation, Inc.,
3565"RTN","C0SPROB",18,0)
3566 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
3567"RTN","C0SPROB",19,0)
3568 ;
3569"RTN","C0SPROB",20,0)
3570 Q
3571"RTN","C0SPROB",21,0)
3572 ;
3573"RTN","C0SPROB",22,0)
3574 ; sample VistA NHIN problem list
3575"RTN","C0SPROB",23,0)
3576 ;
3577"RTN","C0SPROB",24,0)
3578 ;^TMP("C0STBL",91,"problem",1,"acuity@value")="C"
3579"RTN","C0SPROB",25,0)
3580 ;^TMP("C0STBL",91,"problem",1,"entered@value")=3110531
3581"RTN","C0SPROB",26,0)
3582 ;^TMP("C0STBL",91,"problem",1,"facility@code")=100
3583"RTN","C0SPROB",27,0)
3584 ;^TMP("C0STBL",91,"problem",1,"facility@name")="VOE OFFICE INSTITUTION"
3585"RTN","C0SPROB",28,0)
3586 ;^TMP("C0STBL",91,"problem",1,"icd@value")=414.9
3587"RTN","C0SPROB",29,0)
3588 ;^TMP("C0STBL",91,"problem",1,"id@value")=100
3589"RTN","C0SPROB",30,0)
3590 ;^TMP("C0STBL",91,"problem",1,"location@value")="DR OFFICE"
3591"RTN","C0SPROB",31,0)
3592 ;^TMP("C0STBL",91,"problem",1,"name@value")="Coronary Artery Disease"
3593"RTN","C0SPROB",32,0)
3594 ;^TMP("C0STBL",91,"problem",1,"onset@value")=3100201
3595"RTN","C0SPROB",33,0)
3596 ;^TMP("C0STBL",91,"problem",1,"provider@code")=63
3597"RTN","C0SPROB",34,0)
3598 ;^TMP("C0STBL",91,"problem",1,"provider@name")="KING,MATTHEW MICHAEL"
3599"RTN","C0SPROB",35,0)
3600 ;^TMP("C0STBL",91,"problem",1,"removed@value")=0
3601"RTN","C0SPROB",36,0)
3602 ;^TMP("C0STBL",91,"problem",1,"sc@value")=0
3603"RTN","C0SPROB",37,0)
3604 ;^TMP("C0STBL",91,"problem",1,"status@value")="A"
3605"RTN","C0SPROB",38,0)
3606 ;^TMP("C0STBL",91,"problem",1,"unverified@value")=0
3607"RTN","C0SPROB",39,0)
3608 ;^TMP("C0STBL",91,"problem",1,"updated@value")=3110531
3609"RTN","C0SPROB",40,0)
3610 ;^TMP("C0STBL",91,"problem",2,"acuity@value")="C"
3611"RTN","C0SPROB",41,0)
3612 ;^TMP("C0STBL",91,"problem",2,"entered@value")=3110602
3613"RTN","C0SPROB",42,0)
3614 ;^TMP("C0STBL",91,"problem",2,"facility@code")=100
3615"RTN","C0SPROB",43,0)
3616 ;^TMP("C0STBL",91,"problem",2,"facility@name")="VOE OFFICE INSTITUTION"
3617"RTN","C0SPROB",44,0)
3618 ;^TMP("C0STBL",91,"problem",2,"icd@value")=780.2
3619"RTN","C0SPROB",45,0)
3620 ;^TMP("C0STBL",91,"problem",2,"id@value")=108
3621"RTN","C0SPROB",46,0)
3622 ;^TMP("C0STBL",91,"problem",2,"name@value")="Syncope and collapse"
3623"RTN","C0SPROB",47,0)
3624 ;^TMP("C0STBL",91,"problem",2,"onset@value")=3110102
3625"RTN","C0SPROB",48,0)
3626 ;^TMP("C0STBL",91,"problem",2,"provider@code")=63
3627"RTN","C0SPROB",49,0)
3628 ;^TMP("C0STBL",91,"problem",2,"provider@name")="KING,MATTHEW MICHAEL"
3629"RTN","C0SPROB",50,0)
3630 ;^TMP("C0STBL",91,"problem",2,"removed@value")=0
3631"RTN","C0SPROB",51,0)
3632 ;^TMP("C0STBL",91,"problem",2,"sc@value")=0
3633"RTN","C0SPROB",52,0)
3634 ;^TMP("C0STBL",91,"problem",2,"status@value")="A"
3635"RTN","C0SPROB",53,0)
3636 ;^TMP("C0STBL",91,"problem",2,"unverified@value")=0
3637"RTN","C0SPROB",54,0)
3638 ;^TMP("C0STBL",91,"problem",2,"updated@value")=3110602
3639"RTN","C0SPROB",55,0)
3640 ;^TMP("C0STBL",91,"problem",3,"acuity@value")="C"
3641"RTN","C0SPROB",56,0)
3642 ;^TMP("C0STBL",91,"problem",3,"entered@value")=3110602
3643"RTN","C0SPROB",57,0)
3644 ;^TMP("C0STBL",91,"problem",3,"facility@code")=100
3645"RTN","C0SPROB",58,0)
3646 ;^TMP("C0STBL",91,"problem",3,"facility@name")="VOE OFFICE INSTITUTION"
3647"RTN","C0SPROB",59,0)
3648 ;^TMP("C0STBL",91,"problem",3,"icd@value")=433.91
3649"RTN","C0SPROB",60,0)
3650 ;^TMP("C0STBL",91,"problem",3,"id@value")=109
3651"RTN","C0SPROB",61,0)
3652 ;^TMP("C0STBL",91,"problem",3,"name@value")="Occlusion and Stenosis of Unspecifid Precerebral Artery with Cerebral Infarctio"
3653"RTN","C0SPROB",62,0)
3654 ;^TMP("C0STBL",91,"problem",3,"onset@value")=3100101
3655"RTN","C0SPROB",63,0)
3656 ;^TMP("C0STBL",91,"problem",3,"provider@code")=63
3657"RTN","C0SPROB",64,0)
3658 ;^TMP("C0STBL",91,"problem",3,"provider@name")="KING,MATTHEW MICHAEL"
3659"RTN","C0SPROB",65,0)
3660 ;^TMP("C0STBL",91,"problem",3,"removed@value")=0
3661"RTN","C0SPROB",66,0)
3662 ;^TMP("C0STBL",91,"problem",3,"sc@value")=0
3663"RTN","C0SPROB",67,0)
3664 ;^TMP("C0STBL",91,"problem",3,"status@value")="A"
3665"RTN","C0SPROB",68,0)
3666 ;^TMP("C0STBL",91,"problem",3,"unverified@value")=0
3667"RTN","C0SPROB",69,0)
3668 ;^TMP("C0STBL",91,"problem",3,"updated@value")=3110602
3669"RTN","C0SPROB",70,0)
3670 ;^TMP("C0STBL",91,"problem",4,"entered@value")=3110603
3671"RTN","C0SPROB",71,0)
3672 ;^TMP("C0STBL",91,"problem",4,"facility@code")=100
3673"RTN","C0SPROB",72,0)
3674 ;^TMP("C0STBL",91,"problem",4,"facility@name")="VOE OFFICE INSTITUTION"
3675"RTN","C0SPROB",73,0)
3676 ;^TMP("C0STBL",91,"problem",4,"icd@value")="00.66"
3677"RTN","C0SPROB",74,0)
3678 ;^TMP("C0STBL",91,"problem",4,"id@value")=115
3679"RTN","C0SPROB",75,0)
3680 ;^TMP("C0STBL",91,"problem",4,"location@value")="DR OFFICE"
3681"RTN","C0SPROB",76,0)
3682 ;^TMP("C0STBL",91,"problem",4,"name@value")="00.66"
3683"RTN","C0SPROB",77,0)
3684 ;^TMP("C0STBL",91,"problem",4,"provider@code")=63
3685"RTN","C0SPROB",78,0)
3686 ;^TMP("C0STBL",91,"problem",4,"provider@name")="KING,MATTHEW MICHAEL"
3687"RTN","C0SPROB",79,0)
3688 ;^TMP("C0STBL",91,"problem",4,"removed@value")=0
3689"RTN","C0SPROB",80,0)
3690 ;^TMP("C0STBL",91,"problem",4,"status@value")="A"
3691"RTN","C0SPROB",81,0)
3692 ;^TMP("C0STBL",91,"problem",4,"unverified@value")=0
3693"RTN","C0SPROB",82,0)
3694 ;^TMP("C0STBL",91,"problem",4,"updated@value")=3110603
3695"RTN","C0SPROB",83,0)
3696 ;^TMP("C0STBL",91,"problem",5,"entered@value")=3110603
3697"RTN","C0SPROB",84,0)
3698 ;^TMP("C0STBL",91,"problem",5,"facility@code")=100
3699"RTN","C0SPROB",85,0)
3700 ;^TMP("C0STBL",91,"problem",5,"facility@name")="VOE OFFICE INSTITUTION"
3701"RTN","C0SPROB",86,0)
3702 ;^TMP("C0STBL",91,"problem",5,"icd@value")=37.21
3703"RTN","C0SPROB",87,0)
3704 ;^TMP("C0STBL",91,"problem",5,"id@value")=116
3705"RTN","C0SPROB",88,0)
3706 ;^TMP("C0STBL",91,"problem",5,"location@value")="DR OFFICE"
3707"RTN","C0SPROB",89,0)
3708 ;^TMP("C0STBL",91,"problem",5,"name@value")=37.21
3709"RTN","C0SPROB",90,0)
3710 ;^TMP("C0STBL",91,"problem",5,"provider@code")=63
3711"RTN","C0SPROB",91,0)
3712 ;^TMP("C0STBL",91,"problem",5,"provider@name")="KING,MATTHEW MICHAEL"
3713"RTN","C0SPROB",92,0)
3714 ;^TMP("C0STBL",91,"problem",5,"removed@value")=0
3715"RTN","C0SPROB",93,0)
3716 ;^TMP("C0STBL",91,"problem",5,"status@value")="A"
3717"RTN","C0SPROB",94,0)
3718 ;^TMP("C0STBL",91,"problem",5,"unverified@value")=0
3719"RTN","C0SPROB",95,0)
3720 ;^TMP("C0STBL",91,"problem",5,"updated@value")=3110603
3721"RTN","C0SPROB",96,0)
3722 ;^TMP("C0STBL",91,"problem",6,"entered@value")=3110603
3723"RTN","C0SPROB",97,0)
3724 ;^TMP("C0STBL",91,"problem",6,"facility@code")=100
3725"RTN","C0SPROB",98,0)
3726 ;^TMP("C0STBL",91,"problem",6,"facility@name")="VOE OFFICE INSTITUTION"
3727"RTN","C0SPROB",99,0)
3728 ;^TMP("C0STBL",91,"problem",6,"icd@value")=81.51
3729"RTN","C0SPROB",100,0)
3730 ;^TMP("C0STBL",91,"problem",6,"id@value")=117
3731"RTN","C0SPROB",101,0)
3732 ;^TMP("C0STBL",91,"problem",6,"location@value")="DR OFFICE"
3733"RTN","C0SPROB",102,0)
3734 ;^TMP("C0STBL",91,"problem",6,"name@value")=81.51
3735"RTN","C0SPROB",103,0)
3736 ;^TMP("C0STBL",91,"problem",6,"provider@code")=63
3737"RTN","C0SPROB",104,0)
3738 ;^TMP("C0STBL",91,"problem",6,"provider@name")="KING,MATTHEW MICHAEL"
3739"RTN","C0SPROB",105,0)
3740 ;^TMP("C0STBL",91,"problem",6,"removed@value")=0
3741"RTN","C0SPROB",106,0)
3742 ;^TMP("C0STBL",91,"problem",6,"status@value")="A"
3743"RTN","C0SPROB",107,0)
3744 ;^TMP("C0STBL",91,"problem",6,"unverified@value")=0
3745"RTN","C0SPROB",108,0)
3746 ;^TMP("C0STBL",91,"problem",6,"updated@value")=3110603
3747"RTN","C0SPROB",109,0)
3748 ;^TMP("C0STBL",91,"problem",7,"entered@value")=3110603
3749"RTN","C0SPROB",110,0)
3750 ;^TMP("C0STBL",91,"problem",7,"facility@code")=100
3751"RTN","C0SPROB",111,0)
3752 ;^TMP("C0STBL",91,"problem",7,"facility@name")="VOE OFFICE INSTITUTION"
3753"RTN","C0SPROB",112,0)
3754 ;^TMP("C0STBL",91,"problem",7,"icd@value")=47.09
3755"RTN","C0SPROB",113,0)
3756 ;^TMP("C0STBL",91,"problem",7,"id@value")=118
3757"RTN","C0SPROB",114,0)
3758 ;^TMP("C0STBL",91,"problem",7,"location@value")="DR OFFICE"
3759"RTN","C0SPROB",115,0)
3760 ;^TMP("C0STBL",91,"problem",7,"name@value")=47.09
3761"RTN","C0SPROB",116,0)
3762 ;^TMP("C0STBL",91,"problem",7,"provider@code")=63
3763"RTN","C0SPROB",117,0)
3764 ;^TMP("C0STBL",91,"problem",7,"provider@name")="KING,MATTHEW MICHAEL"
3765"RTN","C0SPROB",118,0)
3766 ;^TMP("C0STBL",91,"problem",7,"removed@value")=0
3767"RTN","C0SPROB",119,0)
3768 ;^TMP("C0STBL",91,"problem",7,"status@value")="A"
3769"RTN","C0SPROB",120,0)
3770 ;^TMP("C0STBL",91,"problem",7,"unverified@value")=0
3771"RTN","C0SPROB",121,0)
3772 ;^TMP("C0STBL",91,"problem",7,"updated@value")=3110603
3773"RTN","C0SPROB",122,0)
3774 ;^TMP("C0STBL",91,"problem",8,"entered@value")=3110603
3775"RTN","C0SPROB",123,0)
3776 ;^TMP("C0STBL",91,"problem",8,"facility@code")=100
3777"RTN","C0SPROB",124,0)
3778 ;^TMP("C0STBL",91,"problem",8,"facility@name")="VOE OFFICE INSTITUTION"
3779"RTN","C0SPROB",125,0)
3780 ;^TMP("C0STBL",91,"problem",8,"icd@value")="250.00"
3781"RTN","C0SPROB",126,0)
3782 ;^TMP("C0STBL",91,"problem",8,"id@value")=119
3783"RTN","C0SPROB",127,0)
3784 ;^TMP("C0STBL",91,"problem",8,"location@value")="DR OFFICE"
3785"RTN","C0SPROB",128,0)
3786 ;^TMP("C0STBL",91,"problem",8,"name@value")="Diabetes Mellitus without mentionof Complication, type II or unspecified type,"
3787"RTN","C0SPROB",129,0)
3788 ;^TMP("C0STBL",91,"problem",8,"provider@code")=63
3789"RTN","C0SPROB",130,0)
3790 ;^TMP("C0STBL",91,"problem",8,"provider@name")="KING,MATTHEW MICHAEL"
3791"RTN","C0SPROB",131,0)
3792 ;^TMP("C0STBL",91,"problem",8,"removed@value")=0
3793"RTN","C0SPROB",132,0)
3794 ;^TMP("C0STBL",91,"problem",8,"status@value")="A"
3795"RTN","C0SPROB",133,0)
3796 ;^TMP("C0STBL",91,"problem",8,"unverified@value")=0
3797"RTN","C0SPROB",134,0)
3798 ;^TMP("C0STBL",91,"problem",8,"updated@value")=3110603
3799"RTN","C0SPROB",135,0)
3800 ;
3801"RTN","C0SPROB",136,0)
3802 ; sample Smart lab result triples
3803"RTN","C0SPROB",137,0)
3804 ;
3805"RTN","C0SPROB",138,0)
3806 ;G("node16rk1fgdvx10882","code")="snomed:40930008"
3807"RTN","C0SPROB",139,0)
3808 ;G("node16rk1fgdvx10882","dcterms:title")="Hypothyroidism"
3809"RTN","C0SPROB",140,0)
3810 ;G("node16rk1fgdvx10882","rdf:type")="sp:CodedValue"
3811"RTN","C0SPROB",141,0)
3812 ;G("node16rk1fgdvx11051","code")="snomed:188155002"
3813"RTN","C0SPROB",142,0)
3814 ;G("node16rk1fgdvx11051","dcterms:title")="Primary malignant neoplasm of lower outer quadrant of female breast"
3815"RTN","C0SPROB",143,0)
3816 ;G("node16rk1fgdvx11051","rdf:type")="sp:CodedValue"
3817"RTN","C0SPROB",144,0)
3818 ;G("node16rk1fgdvx11073","code")="snomed:353295004"
3819"RTN","C0SPROB",145,0)
3820 ;G("node16rk1fgdvx11073","dcterms:title")="Toxic diffuse goiter"
3821"RTN","C0SPROB",146,0)
3822 ;G("node16rk1fgdvx11073","rdf:type")="sp:CodedValue"
3823"RTN","C0SPROB",147,0)
3824 ;G("node16rk1fgdvx11089","code")="snomed:54302000"
3825"RTN","C0SPROB",148,0)
3826 ;G("node16rk1fgdvx11089","dcterms:title")="Disorder of breast"
3827"RTN","C0SPROB",149,0)
3828 ;G("node16rk1fgdvx11089","rdf:type")="sp:CodedValue"
3829"RTN","C0SPROB",150,0)
3830 ;G("node16rk1fgdvx11351","code")="snomed:38341003"
3831"RTN","C0SPROB",151,0)
3832 ;G("node16rk1fgdvx11351","dcterms:title")="Essential hypertension"
3833"RTN","C0SPROB",152,0)
3834 ;G("node16rk1fgdvx11351","rdf:type")="sp:CodedValue"
3835"RTN","C0SPROB",153,0)
3836 ;G("node16rk1fgdvx11390","code")="snomed:44054006"
3837"RTN","C0SPROB",154,0)
3838 ;G("node16rk1fgdvx11390","dcterms:title")="Diabetes mellitus type 2"
3839"RTN","C0SPROB",155,0)
3840 ;G("node16rk1fgdvx11390","rdf:type")="sp:CodedValue"
3841"RTN","C0SPROB",156,0)
3842 ;G("node16rk1fgdvx11558","code")="snomed:195967001"
3843"RTN","C0SPROB",157,0)
3844 ;G("node16rk1fgdvx11558","dcterms:title")="Asthma"
3845"RTN","C0SPROB",158,0)
3846 ;G("node16rk1fgdvx11558","rdf:type")="sp:CodedValue"
3847"RTN","C0SPROB",159,0)
3848 ;G("node16rk1fgdvx11578","code")="snomed:254837009"
3849"RTN","C0SPROB",160,0)
3850 ;G("node16rk1fgdvx11578","dcterms:title")="Primary malignant neoplasm of female breast"
3851"RTN","C0SPROB",161,0)
3852 ;G("node16rk1fgdvx11578","rdf:type")="sp:CodedValue"
3853"RTN","C0SPROB",162,0)
3854 ;G("node16rk1fgdvx11687","code")="snomed:8517006"
3855"RTN","C0SPROB",163,0)
3856 ;G("node16rk1fgdvx11687","dcterms:title")="History of tobacco use"
3857"RTN","C0SPROB",164,0)
3858 ;G("node16rk1fgdvx11687","rdf:type")="sp:CodedValue"
3859"RTN","C0SPROB",165,0)
3860 ;G("node16rk1fgdvx11716","code")="snomed:55822004"
3861"RTN","C0SPROB",166,0)
3862 ;G("node16rk1fgdvx11716","dcterms:title")="Hyperlipidemia"
3863"RTN","C0SPROB",167,0)
3864 ;G("node16rk1fgdvx11716","rdf:type")="sp:CodedValue"
3865"RTN","C0SPROB",168,0)
3866 ;G("smart:1577780/problems/69560e4721e1","belongsTo")="smart:1577780"
3867"RTN","C0SPROB",169,0)
3868 ;G("smart:1577780/problems/69560e4721e1","problemName")="node16rk1fgdvx11089"
3869"RTN","C0SPROB",170,0)
3870 ;G("smart:1577780/problems/69560e4721e1","rdf:type")="sp:Problem"
3871"RTN","C0SPROB",171,0)
3872 ;G("smart:1577780/problems/69560e4721e1","startDate")="2005-08-02"
3873"RTN","C0SPROB",172,0)
3874 ;G("smart:1577780/problems/06ef10c4e92c","belongsTo")="smart:1577780"
3875"RTN","C0SPROB",173,0)
3876 ;G("smart:1577780/problems/06ef10c4e92c","problemName")="node16rk1fgdvx11051"
3877"RTN","C0SPROB",174,0)
3878 ;G("smart:1577780/problems/06ef10c4e92c","rdf:type")="sp:Problem"
3879"RTN","C0SPROB",175,0)
3880 ;G("smart:1577780/problems/06ef10c4e92c","startDate")="2006-02-20"
3881"RTN","C0SPROB",176,0)
3882 ;G("smart:1577780/problems/9894ba9dfe5a","belongsTo")="smart:1577780"
3883"RTN","C0SPROB",177,0)
3884 ;G("smart:1577780/problems/9894ba9dfe5a","problemName")="node16rk1fgdvx11578"
3885"RTN","C0SPROB",178,0)
3886 ;G("smart:1577780/problems/9894ba9dfe5a","rdf:type")="sp:Problem"
3887"RTN","C0SPROB",179,0)
3888 ;G("smart:1577780/problems/9894ba9dfe5a","startDate")="2005-08-22"
3889"RTN","C0SPROB",180,0)
3890 ;G("smart:1577780/problems/c109aa7a0675","belongsTo")="smart:1577780"
3891"RTN","C0SPROB",181,0)
3892 ;G("smart:1577780/problems/c109aa7a0675","problemName")="node16rk1fgdvx11558"
3893"RTN","C0SPROB",182,0)
3894 ;G("smart:1577780/problems/c109aa7a0675","rdf:type")="sp:Problem"
3895"RTN","C0SPROB",183,0)
3896 ;G("smart:1577780/problems/c109aa7a0675","startDate")="2005-09-22"
3897"RTN","C0SPROB",184,0)
3898 ;G("smart:1577780/problems/1c50100614a2","belongsTo")="smart:1577780"
3899"RTN","C0SPROB",185,0)
3900 ;G("smart:1577780/problems/1c50100614a2","problemName")="node16rk1fgdvx11073"
3901"RTN","C0SPROB",186,0)
3902 ;G("smart:1577780/problems/1c50100614a2","rdf:type")="sp:Problem"
3903"RTN","C0SPROB",187,0)
3904 ;G("smart:1577780/problems/1c50100614a2","startDate")="2007-02-21"
3905"RTN","C0SPROB",188,0)
3906 ;G("smart:1577780/problems/083dffb2c4a0","belongsTo")="smart:1577780"
3907"RTN","C0SPROB",189,0)
3908 ;G("smart:1577780/problems/083dffb2c4a0","problemName")="node16rk1fgdvx11390"
3909"RTN","C0SPROB",190,0)
3910 ;G("smart:1577780/problems/083dffb2c4a0","rdf:type")="sp:Problem"
3911"RTN","C0SPROB",191,0)
3912 ;G("smart:1577780/problems/083dffb2c4a0","startDate")="2007-01-07"
3913"RTN","C0SPROB",192,0)
3914 ;G("smart:1577780/problems/762b5639a2d1","belongsTo")="smart:1577780"
3915"RTN","C0SPROB",193,0)
3916 ;G("smart:1577780/problems/762b5639a2d1","problemName")="node16rk1fgdvx11687"
3917"RTN","C0SPROB",194,0)
3918 ;G("smart:1577780/problems/762b5639a2d1","rdf:type")="sp:Problem"
3919"RTN","C0SPROB",195,0)
3920 ;G("smart:1577780/problems/762b5639a2d1","startDate")="2006-02-20"
3921"RTN","C0SPROB",196,0)
3922 ;G("smart:1577780/problems/9dc9053dd6f4","belongsTo")="smart:1577780"
3923"RTN","C0SPROB",197,0)
3924 ;G("smart:1577780/problems/9dc9053dd6f4","problemName")="node16rk1fgdvx11716"
3925"RTN","C0SPROB",198,0)
3926 ;G("smart:1577780/problems/9dc9053dd6f4","rdf:type")="sp:Problem"
3927"RTN","C0SPROB",199,0)
3928 ;G("smart:1577780/problems/9dc9053dd6f4","startDate")="2008-04-08"
3929"RTN","C0SPROB",200,0)
3930 ;G("smart:1577780/problems/e3fe9b7ee552","belongsTo")="smart:1577780"
3931"RTN","C0SPROB",201,0)
3932 ;G("smart:1577780/problems/e3fe9b7ee552","problemName")="node16rk1fgdvx10882"
3933"RTN","C0SPROB",202,0)
3934 ;G("smart:1577780/problems/e3fe9b7ee552","rdf:type")="sp:Problem"
3935"RTN","C0SPROB",203,0)
3936 ;G("smart:1577780/problems/e3fe9b7ee552","startDate")="2005-10-27"
3937"RTN","C0SPROB",204,0)
3938 ;G("smart:1577780/problems/9933307e8f95","belongsTo")="smart:1577780"
3939"RTN","C0SPROB",205,0)
3940 ;G("smart:1577780/problems/9933307e8f95","problemName")="node16rk1fgdvx11351"
3941"RTN","C0SPROB",206,0)
3942 ;G("smart:1577780/problems/9933307e8f95","rdf:type")="sp:Problem"
3943"RTN","C0SPROB",207,0)
3944 ;G("smart:1577780/problems/9933307e8f95","startDate")="2005-08-22"
3945"RTN","C0SPROB",208,0)
3946 ;G("snomed:188155002","dcterms:identifier")=188155002
3947"RTN","C0SPROB",209,0)
3948 ;G("snomed:188155002","dcterms:title")="Primary malignant neoplasm of lower outer quadrant of female breast"
3949"RTN","C0SPROB",210,0)
3950 ;G("snomed:188155002","rdf:type")="sp:Code"
3951"RTN","C0SPROB",211,0)
3952 ;G("snomed:188155002","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
3953"RTN","C0SPROB",212,0)
3954 ;G("snomed:195967001","dcterms:identifier")=195967001
3955"RTN","C0SPROB",213,0)
3956 ;G("snomed:195967001","dcterms:title")="Asthma"
3957"RTN","C0SPROB",214,0)
3958 ;G("snomed:195967001","rdf:type")="sp:Code"
3959"RTN","C0SPROB",215,0)
3960 ;G("snomed:195967001","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
3961"RTN","C0SPROB",216,0)
3962 ;G("snomed:254837009","dcterms:identifier")=254837009
3963"RTN","C0SPROB",217,0)
3964 ;G("snomed:254837009","dcterms:title")="Primary malignant neoplasm of female breast"
3965"RTN","C0SPROB",218,0)
3966 ;G("snomed:254837009","rdf:type")="sp:Code"
3967"RTN","C0SPROB",219,0)
3968 ;G("snomed:254837009","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
3969"RTN","C0SPROB",220,0)
3970 ;G("snomed:353295004","dcterms:identifier")=353295004
3971"RTN","C0SPROB",221,0)
3972 ;G("snomed:353295004","dcterms:title")="Toxic diffuse goiter"
3973"RTN","C0SPROB",222,0)
3974 ;G("snomed:353295004","rdf:type")="sp:Code"
3975"RTN","C0SPROB",223,0)
3976 ;G("snomed:353295004","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
3977"RTN","C0SPROB",224,0)
3978 ;G("snomed:38341003","dcterms:identifier")=38341003
3979"RTN","C0SPROB",225,0)
3980 ;G("snomed:38341003","dcterms:title")="Essential hypertension"
3981"RTN","C0SPROB",226,0)
3982 ;G("snomed:38341003","rdf:type")="sp:Code"
3983"RTN","C0SPROB",227,0)
3984 ;G("snomed:38341003","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
3985"RTN","C0SPROB",228,0)
3986 ;G("snomed:40930008","dcterms:identifier")=40930008
3987"RTN","C0SPROB",229,0)
3988 ;G("snomed:40930008","dcterms:title")="Hypothyroidism"
3989"RTN","C0SPROB",230,0)
3990 ;G("snomed:40930008","rdf:type")="sp:Code"
3991"RTN","C0SPROB",231,0)
3992 ;G("snomed:40930008","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
3993"RTN","C0SPROB",232,0)
3994 ;G("snomed:44054006","dcterms:identifier")=44054006
3995"RTN","C0SPROB",233,0)
3996 ;G("snomed:44054006","dcterms:title")="Diabetes mellitus type 2"
3997"RTN","C0SPROB",234,0)
3998 ;G("snomed:44054006","rdf:type")="sp:Code"
3999"RTN","C0SPROB",235,0)
4000 ;G("snomed:44054006","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
4001"RTN","C0SPROB",236,0)
4002 ;G("snomed:54302000","dcterms:identifier")=54302000
4003"RTN","C0SPROB",237,0)
4004 ;G("snomed:54302000","dcterms:title")="Disorder of breast"
4005"RTN","C0SPROB",238,0)
4006 ;G("snomed:54302000","rdf:type")="sp:Code"
4007"RTN","C0SPROB",239,0)
4008 ;G("snomed:54302000","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
4009"RTN","C0SPROB",240,0)
4010 ;G("snomed:55822004","dcterms:identifier")=55822004
4011"RTN","C0SPROB",241,0)
4012 ;G("snomed:55822004","dcterms:title")="Hyperlipidemia"
4013"RTN","C0SPROB",242,0)
4014 ;G("snomed:55822004","rdf:type")="sp:Code"
4015"RTN","C0SPROB",243,0)
4016 ;G("snomed:55822004","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
4017"RTN","C0SPROB",244,0)
4018 ;G("snomed:8517006","dcterms:identifier")=8517006
4019"RTN","C0SPROB",245,0)
4020 ;G("snomed:8517006","dcterms:title")="History of tobacco use"
4021"RTN","C0SPROB",246,0)
4022 ;G("snomed:8517006","rdf:type")="sp:Code"
4023"RTN","C0SPROB",247,0)
4024 ;G("snomed:8517006","system")="http://purl.bioontology.org/ontology/SNOMEDCT/"
4025"RTN","C0SPROB",248,0)
4026
4027"RTN","C0SPROB",249,0)
4028 ;
4029"RTN","C0SPROB",250,0)
4030PROB(GRTN,C0SARY) ; GRTN, passed by reference,
4031"RTN","C0SPROB",251,0)
4032 ; is the return name of the graph created. "" if none
4033"RTN","C0SPROB",252,0)
4034 ; C0SARY is passed in by reference and is the NHIN array of problems
4035"RTN","C0SPROB",253,0)
4036 ;
4037"RTN","C0SPROB",254,0)
4038 I $O(C0SARY("problem",""))="" D Q ;
4039"RTN","C0SPROB",255,0)
4040 . I $D(DEBUG) W !,"No Problems"
4041"RTN","C0SPROB",256,0)
4042 S GRTN="" ; default to no problems
4043"RTN","C0SPROB",257,0)
4044 N C0SGRF
4045"RTN","C0SPROB",258,0)
4046 S C0SGRF="vistaSmart:"_ZPATID_"/problems"
4047"RTN","C0SPROB",259,0)
4048 I $D(DEBUG) W !,"Processing ",C0SGRF
4049"RTN","C0SPROB",260,0)
4050 D DELGRAPH^C0XF2N(C0SGRF) ; delete the old graph
4051"RTN","C0SPROB",261,0)
4052 D INITFARY^C0XF2N("C0XFARY") ; which triple store to use
4053"RTN","C0SPROB",262,0)
4054 N FARY S FARY="C0XFARY"
4055"RTN","C0SPROB",263,0)
4056 D USEFARY^C0XF2N(FARY)
4057"RTN","C0SPROB",264,0)
4058 D VOCINIT^C0XUTIL
4059"RTN","C0SPROB",265,0)
4060 ;
4061"RTN","C0SPROB",266,0)
4062 D STARTADD^C0XF2N ; initialize to create triples
4063"RTN","C0SPROB",267,0)
4064 ;
4065"RTN","C0SPROB",268,0)
4066 N ZI S ZI=""
4067"RTN","C0SPROB",269,0)
4068 F S ZI=$O(C0SARY("problem",ZI)) Q:ZI="" D ;
4069"RTN","C0SPROB",270,0)
4070 . N LRN,ZR ; ZR is the local array for building the new triples
4071"RTN","C0SPROB",271,0)
4072 . S LRN=$NA(C0SARY("problem",ZI)) ; base for values in this lab result
4073"RTN","C0SPROB",272,0)
4074 . ;
4075"RTN","C0SPROB",273,0)
4076 . N PROBID ; unique Id for this problem
4077"RTN","C0SPROB",274,0)
4078 . S PROBID=C0SGRF_"/"_$$LKY17^C0XF2N ; use a random number
4079"RTN","C0SPROB",275,0)
4080 . ;
4081"RTN","C0SPROB",276,0)
4082 . ; i don't like this because the same problems gets a
4083"RTN","C0SPROB",277,0)
4084 . ; different ID every time it's reported. Can't trace it back to VistA
4085"RTN","C0SPROB",278,0)
4086 . ; I'd rather be using id@value ie "id@value")="118"
4087"RTN","C0SPROB",279,0)
4088 . ;
4089"RTN","C0SPROB",280,0)
4090 . N SNOMED S SNOMED=$G(@LRN@("icd@value"))
4091"RTN","C0SPROB",281,0)
4092 . N SNOGRF S SNOGRF="snomed:"_SNOMED
4093"RTN","C0SPROB",282,0)
4094 . N SNOTIT S SNOTIT=$G(@LRN@("name@value"))
4095"RTN","C0SPROB",283,0)
4096 . I $D(DEBUG) D ;
4097"RTN","C0SPROB",284,0)
4098 . . W !,"Processing Problem List ",PROBID
4099"RTN","C0SPROB",285,0)
4100 . . W !,"problem: ",SNOTIT
4101"RTN","C0SPROB",286,0)
4102 . . W !,"code: ",SNOMED
4103"RTN","C0SPROB",287,0)
4104 . ;
4105"RTN","C0SPROB",288,0)
4106 . ; first do the base result graph
4107"RTN","C0SPROB",289,0)
4108 . ;
4109"RTN","C0SPROB",290,0)
4110 . S ZR("rdf:type")="sp:Problem"
4111"RTN","C0SPROB",291,0)
4112 . S ZR("sp:belongsTo")=C0SGRF ; the subject for this patient's problems
4113"RTN","C0SPROB",292,0)
4114 . ; ie /vista/smart/99912345/problems
4115"RTN","C0SPROB",293,0)
4116 . ;
4117"RTN","C0SPROB",294,0)
4118 . N PROBNAME S PROBNAME=$$ANONS^C0XF2N ; new node for problem name
4119"RTN","C0SPROB",295,0)
4120 . S ZR("sp:problemName")=PROBNAME
4121"RTN","C0SPROB",296,0)
4122 . ;
4123"RTN","C0SPROB",297,0)
4124 . N STARTDT S STARTDT=$$SPDATE^C0SUTIL($G(@LRN@("entered@value")))
4125"RTN","C0SPROB",298,0)
4126 . S ZR("sp:startDate")=STARTDT
4127"RTN","C0SPROB",299,0)
4128 . ;
4129"RTN","C0SPROB",300,0)
4130 . D ADDINN^C0XF2N(C0SGRF,PROBID,.ZR) ; addIfNotNull the triples
4131"RTN","C0SPROB",301,0)
4132 . K ZR ; clean up
4133"RTN","C0SPROB",302,0)
4134 . ;
4135"RTN","C0SPROB",303,0)
4136 . ; create the problemName graph
4137"RTN","C0SPROB",304,0)
4138 . ;
4139"RTN","C0SPROB",305,0)
4140 . S ZR("rdf:type")="sp:CodedValue"
4141"RTN","C0SPROB",306,0)
4142 . S ZR("sp:code")="snomed:"_SNOMED
4143"RTN","C0SPROB",307,0)
4144 . S ZR("dcterms:title")=$G(@LRN@("name@value"))
4145"RTN","C0SPROB",308,0)
4146 . D ADDINN^C0XF2N(C0SGRF,PROBNAME,.ZR)
4147"RTN","C0SPROB",309,0)
4148 . K ZR
4149"RTN","C0SPROB",310,0)
4150 . ;
4151"RTN","C0SPROB",311,0)
4152 . ; create snomed graph
4153"RTN","C0SPROB",312,0)
4154 . ;
4155"RTN","C0SPROB",313,0)
4156 . S ZR("rdf:type")="sp:Code"
4157"RTN","C0SPROB",314,0)
4158 . S ZR("sp:system")="http://purl.bioontology.org/ontology/SNOMEDCT"
4159"RTN","C0SPROB",315,0)
4160 . S ZR("dcterms:identifier")=SNOMED
4161"RTN","C0SPROB",316,0)
4162 . S ZR("dcterms:title")=SNOTIT
4163"RTN","C0SPROB",317,0)
4164 . D ADDINN^C0XF2N(C0SGRF,SNOGRF,.ZR)
4165"RTN","C0SPROB",318,0)
4166 . K ZR
4167"RTN","C0SPROB",319,0)
4168 . ;
4169"RTN","C0SPROB",320,0)
4170 D BULKLOAD^C0XF2N(.C0XFDA)
4171"RTN","C0SPROB",321,0)
4172 S GRTN=C0SGRF
4173"RTN","C0SPROB",322,0)
4174 Q
4175"RTN","C0SPROB",323,0)
4176 ;
4177"RTN","C0SPROB2")
41780^10^B63749946
4179"RTN","C0SPROB2",1,0)
4180C0SPROB ; GPL - Smart Problem Processing ;5/01/12 17:05
4181"RTN","C0SPROB2",2,0)
4182 ;;0.1;C0S;nopatch;noreleasedate;Build 1
4183"RTN","C0SPROB2",3,0)
4184 ;Copyright 2012 George Lilly. Licensed under the terms of the GNU
4185"RTN","C0SPROB2",4,0)
4186 ;General Public License See attached copy of the License.
4187"RTN","C0SPROB2",5,0)
4188 ;
4189"RTN","C0SPROB2",6,0)
4190 ;This program is free software; you can redistribute it and/or modify
4191"RTN","C0SPROB2",7,0)
4192 ;it under the terms of the GNU General Public License as published by
4193"RTN","C0SPROB2",8,0)
4194 ;the Free Software Foundation; either version 2 of the License, or
4195"RTN","C0SPROB2",9,0)
4196 ;(at your option) any later version.
4197"RTN","C0SPROB2",10,0)
4198 ;
4199"RTN","C0SPROB2",11,0)
4200 ;This program is distributed in the hope that it will be useful,
4201"RTN","C0SPROB2",12,0)
4202 ;but WITHOUT ANY WARRANTY; without even the implied warranty of
4203"RTN","C0SPROB2",13,0)
4204 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4205"RTN","C0SPROB2",14,0)
4206 ;GNU General Public License for more details.
4207"RTN","C0SPROB2",15,0)
4208 ;
4209"RTN","C0SPROB2",16,0)
4210 ;You should have received a copy of the GNU General Public License along
4211"RTN","C0SPROB2",17,0)
4212 ;with this program; if not, write to the Free Software Foundation, Inc.,
4213"RTN","C0SPROB2",18,0)
4214 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
4215"RTN","C0SPROB2",19,0)
4216 ;
4217"RTN","C0SPROB2",20,0)
4218 Q
4219"RTN","C0SPROB2",21,0)
4220 ;
4221"RTN","C0SPROB2",22,0)
4222 ; sample VistA NHIN problem list
4223"RTN","C0SPROB2",23,0)
4224 ;
4225"RTN","C0SPROB2",24,0)
4226 ;^TMP("C0STBL",91,"problem",1,"acuity@value")="C"
4227"RTN","C0SPROB2",25,0)
4228 ;^TMP("C0STBL",91,"problem",1,"entered@value")=3110531
4229"RTN","C0SPROB2",26,0)
4230 ;^TMP("C0STBL",91,"problem",1,"facility@code")=100
4231"RTN","C0SPROB2",27,0)
4232 ;^TMP("C0STBL",91,"problem",1,"facility@name")="VOE OFFICE INSTITUTION"
4233"RTN","C0SPROB2",28,0)
4234 ;^TMP("C0STBL",91,"problem",1,"icd@value")=414.9
4235"RTN","C0SPROB2",29,0)
4236 ;^TMP("C0STBL",91,"problem",1,"id@value")=100
4237"RTN","C0SPROB2",30,0)
4238 ;^TMP("C0STBL",91,"problem",1,"location@value")="DR OFFICE"
4239"RTN","C0SPROB2",31,0)
4240 ;^TMP("C0STBL",91,"problem",1,"name@value")="Coronary Artery Disease"
4241"RTN","C0SPROB2",32,0)
4242 ;^TMP("C0STBL",91,"problem",1,"onset@value")=3100201
4243"RTN","C0SPROB2",33,0)
4244 ;^TMP("C0STBL",91,"problem",1,"provider@code")=63
4245"RTN","C0SPROB2",34,0)
4246 ;^TMP("C0STBL",91,"problem",1,"provider@name")="KING,MATTHEW MICHAEL"
4247"RTN","C0SPROB2",35,0)
4248 ;^TMP("C0STBL",91,"problem",1,"removed@value")=0
4249"RTN","C0SPROB2",36,0)
4250 ;^TMP("C0STBL",91,"problem",1,"sc@value")=0
4251"RTN","C0SPROB2",37,0)
4252 ;^TMP("C0STBL",91,"problem",1,"status@value")="A"
4253"RTN","C0SPROB2",38,0)
4254 ;^TMP("C0STBL",91,"problem",1,"unverified@value")=0
4255"RTN","C0SPROB2",39,0)
4256 ;^TMP("C0STBL",91,"problem",1,"updated@value")=3110531
4257"RTN","C0SPROB2",40,0)
4258 ;^TMP("C0STBL",91,"problem",2,"acuity@value")="C"
4259"RTN","C0SPROB2",41,0)
4260 ;^TMP("C0STBL",91,"problem",2,"entered@value")=3110602
4261"RTN","C0SPROB2",42,0)
4262 ;^TMP("C0STBL",91,"problem",2,"facility@code")=100
4263"RTN","C0SPROB2",43,0)
4264 ;^TMP("C0STBL",91,"problem",2,"facility@name")="VOE OFFICE INSTITUTION"
4265"RTN","C0SPROB2",44,0)
4266 ;^TMP("C0STBL",91,"problem",2,"icd@value")=780.2
4267"RTN","C0SPROB2",45,0)
4268 ;^TMP("C0STBL",91,"problem",2,"id@value")=108
4269"RTN","C0SPROB2",46,0)
4270 ;^TMP("C0STBL",91,"problem",2,"name@value")="Syncope and collapse"
4271"RTN","C0SPROB2",47,0)
4272 ;^TMP("C0STBL",91,"problem",2,"onset@value")=3110102
4273"RTN","C0SPROB2",48,0)
4274 ;^TMP("C0STBL",91,"problem",2,"provider@code")=63
4275"RTN","C0SPROB2",49,0)
4276 ;^TMP("C0STBL",91,"problem",2,"provider@name")="KING,MATTHEW MICHAEL"
4277"RTN","C0SPROB2",50,0)
4278 ;^TMP("C0STBL",91,"problem",2,"removed@value")=0
4279"RTN","C0SPROB2",51,0)
4280 ;^TMP("C0STBL",91,"problem",2,"sc@value")=0
4281"RTN","C0SPROB2",52,0)
4282 ;^TMP("C0STBL",91,"problem",2,"status@value")="A"
4283"RTN","C0SPROB2",53,0)
4284 ;^TMP("C0STBL",91,"problem",2,"unverified@value")=0
4285"RTN","C0SPROB2",54,0)
4286 ;^TMP("C0STBL",91,"problem",2,"updated@value")=3110602
4287"RTN","C0SPROB2",55,0)
4288 ;^TMP("C0STBL",91,"problem",3,"acuity@value")="C"
4289"RTN","C0SPROB2",56,0)
4290 ;^TMP("C0STBL",91,"problem",3,"entered@value")=3110602
4291"RTN","C0SPROB2",57,0)
4292 ;^TMP("C0STBL",91,"problem",3,"facility@code")=100
4293"RTN","C0SPROB2",58,0)
4294 ;^TMP("C0STBL",91,"problem",3,"facility@name")="VOE OFFICE INSTITUTION"
4295"RTN","C0SPROB2",59,0)
4296 ;^TMP("C0STBL",91,"problem",3,"icd@value")=433.91
4297"RTN","C0SPROB2",60,0)
4298 ;^TMP("C0STBL",91,"problem",3,"id@value")=109
4299"RTN","C0SPROB2",61,0)
4300 ;^TMP("C0STBL",91,"problem",3,"name@value")="Occlusion and Stenosis of Unspecifid Precerebral Artery with Cerebral Infarctio"
4301"RTN","C0SPROB2",62,0)
4302 ;^TMP("C0STBL",91,"problem",3,"onset@value")=3100101
4303"RTN","C0SPROB2",63,0)
4304 ;^TMP("C0STBL",91,"problem",3,"provider@code")=63
4305"RTN","C0SPROB2",64,0)
4306 ;^TMP("C0STBL",91,"problem",3,"provider@name")="KING,MATTHEW MICHAEL"
4307"RTN","C0SPROB2",65,0)
4308 ;^TMP("C0STBL",91,"problem",3,"removed@value")=0
4309"RTN","C0SPROB2",66,0)
4310 ;^TMP("C0STBL",91,"problem",3,"sc@value")=0
4311"RTN","C0SPROB2",67,0)
4312 ;^TMP("C0STBL",91,"problem",3,"status@value")="A"
4313"RTN","C0SPROB2",68,0)
4314 ;^TMP("C0STBL",91,"problem",3,"unverified@value")=0
4315"RTN","C0SPROB2",69,0)
4316 ;^TMP("C0STBL",91,"problem",3,"updated@value")=3110602
4317"RTN","C0SPROB2",70,0)
4318 ;^TMP("C0STBL",91,"problem",4,"entered@value")=3110603
4319"RTN","C0SPROB2",71,0)
4320 ;^TMP("C0STBL",91,"problem",4,"facility@code")=100
4321"RTN","C0SPROB2",72,0)
4322 ;^TMP("C0STBL",91,"problem",4,"facility@name")="VOE OFFICE INSTITUTION"
4323"RTN","C0SPROB2",73,0)
4324 ;^TMP("C0STBL",91,"problem",4,"icd@value")="00.66"
4325"RTN","C0SPROB2",74,0)
4326 ;^TMP("C0STBL",91,"problem",4,"id@value")=115
4327"RTN","C0SPROB2",75,0)
4328 ;^TMP("C0STBL",91,"problem",4,"location@value")="DR OFFICE"
4329"RTN","C0SPROB2",76,0)
4330 ;^TMP("C0STBL",91,"problem",4,"name@value")="00.66"
4331"RTN","C0SPROB2",77,0)
4332 ;^TMP("C0STBL",91,"problem",4,"provider@code")=63
4333"RTN","C0SPROB2",78,0)
4334 ;^TMP("C0STBL",91,"problem",4,"provider@name")="KING,MATTHEW MICHAEL"
4335"RTN","C0SPROB2",79,0)
4336 ;^TMP("C0STBL",91,"problem",4,"removed@value")=0
4337"RTN","C0SPROB2",80,0)
4338 ;^TMP("C0STBL",91,"problem",4,"status@value")="A"
4339"RTN","C0SPROB2",81,0)
4340 ;^TMP("C0STBL",91,"problem",4,"unverified@value")=0
4341"RTN","C0SPROB2",82,0)
4342 ;^TMP("C0STBL",91,"problem",4,"updated@value")=3110603
4343"RTN","C0SPROB2",83,0)
4344 ;^TMP("C0STBL",91,"problem",5,"entered@value")=3110603
4345"RTN","C0SPROB2",84,0)
4346 ;^TMP("C0STBL",91,"problem",5,"facility@code")=100
4347"RTN","C0SPROB2",85,0)
4348 ;^TMP("C0STBL",91,"problem",5,"facility@name")="VOE OFFICE INSTITUTION"
4349"RTN","C0SPROB2",86,0)
4350 ;^TMP("C0STBL",91,"problem",5,"icd@value")=37.21
4351"RTN","C0SPROB2",87,0)
4352 ;^TMP("C0STBL",91,"problem",5,"id@value")=116
4353"RTN","C0SPROB2",88,0)
4354 ;^TMP("C0STBL",91,"problem",5,"location@value")="DR OFFICE"
4355"RTN","C0SPROB2",89,0)
4356 ;^TMP("C0STBL",91,"problem",5,"name@value")=37.21
4357"RTN","C0SPROB2",90,0)
4358 ;^TMP("C0STBL",91,"problem",5,"provider@code")=63
4359"RTN","C0SPROB2",91,0)
4360 ;^TMP("C0STBL",91,"problem",5,"provider@name")="KING,MATTHEW MICHAEL"
4361"RTN","C0SPROB2",92,0)
4362 ;^TMP("C0STBL",91,"problem",5,"removed@value")=0
4363"RTN","C0SPROB2",93,0)
4364 ;^TMP("C0STBL",91,"problem",5,"status@value")="A"
4365"RTN","C0SPROB2",94,0)
4366 ;^TMP("C0STBL",91,"problem",5,"unverified@value")=0
4367"RTN","C0SPROB2",95,0)
4368 ;^TMP("C0STBL",91,"problem",5,"updated@value")=3110603
4369"RTN","C0SPROB2",96,0)
4370 ;^TMP("C0STBL",91,"problem",6,"entered@value")=3110603
4371"RTN","C0SPROB2",97,0)
4372 ;^TMP("C0STBL",91,"problem",6,"facility@code")=100
4373"RTN","C0SPROB2",98,0)
4374 ;^TMP("C0STBL",91,"problem",6,"facility@name")="VOE OFFICE INSTITUTION"
4375"RTN","C0SPROB2",99,0)
4376 ;^TMP("C0STBL",91,"problem",6,"icd@value")=81.51
4377"RTN","C0SPROB2",100,0)
4378 ;^TMP("C0STBL",91,"problem",6,"id@value")=117
4379"RTN","C0SPROB2",101,0)
4380 ;^TMP("C0STBL",91,"problem",6,"location@value")="DR OFFICE"
4381"RTN","C0SPROB2",102,0)
4382 ;^TMP("C0STBL",91,"problem",6,"name@value")=81.51
4383"RTN","C0SPROB2",103,0)
4384 ;^TMP("C0STBL",91,"problem",6,"provider@code")=63
4385"RTN","C0SPROB2",104,0)
4386 ;^TMP("C0STBL",91,"problem",6,"provider@name")="KING,MATTHEW MICHAEL"
4387"RTN","C0SPROB2",105,0)
4388 ;^TMP("C0STBL",91,"problem",6,"removed@value")=0
4389"RTN","C0SPROB2",106,0)
4390 ;^TMP("C0STBL",91,"problem",6,"status@value")="A"
4391"RTN","C0SPROB2",107,0)
4392 ;^TMP("C0STBL",91,"problem",6,"unverified@value")=0
4393"RTN","C0SPROB2",108,0)
4394 ;^TMP("C0STBL",91,"problem",6,"updated@value")=3110603
4395"RTN","C0SPROB2",109,0)
4396 ;^TMP("C0STBL",91,"problem",7,"entered@value")=3110603
4397"RTN","C0SPROB2",110,0)
4398 ;^TMP("C0STBL",91,"problem",7,"facility@code")=100
4399"RTN","C0SPROB2",111,0)
4400 ;^TMP("C0STBL",91,"problem",7,"facility@name")="VOE OFFICE INSTITUTION"
4401"RTN","C0SPROB2",112,0)
4402 ;^TMP("C0STBL",91,"problem",7,"icd@value")=47.09
4403"RTN","C0SPROB2",113,0)
4404 ;^TMP("C0STBL",91,"problem",7,"id@value")=118
4405"RTN","C0SPROB2",114,0)
4406 ;^TMP("C0STBL",91,"problem",7,"location@value")="DR OFFICE"
4407"RTN","C0SPROB2",115,0)
4408 ;^TMP("C0STBL",91,"problem",7,"name@value")=47.09
4409"RTN","C0SPROB2",116,0)
4410 ;^TMP("C0STBL",91,"problem",7,"provider@code")=63
4411"RTN","C0SPROB2",117,0)
4412 ;^TMP("C0STBL",91,"problem",7,"provider@name")="KING,MATTHEW MICHAEL"
4413"RTN","C0SPROB2",118,0)
4414 ;^TMP("C0STBL",91,"problem",7,"removed@value")=0
4415"RTN","C0SPROB2",119,0)
4416 ;^TMP("C0STBL",91,"problem",7,"status@value")="A"
4417"RTN","C0SPROB2",120,0)
4418 ;^TMP("C0STBL",91,"problem",7,"unverified@value")=0
4419"RTN","C0SPROB2",121,0)
4420 ;^TMP("C0STBL",91,"problem",7,"updated@value")=3110603
4421"RTN","C0SPROB2",122,0)
4422 ;^TMP("C0STBL",91,"problem",8,"entered@value")=3110603
4423"RTN","C0SPROB2",123,0)
4424 ;^TMP("C0STBL",91,"problem",8,"facility@code")=100
4425"RTN","C0SPROB2",124,0)
4426 ;^TMP("C0STBL",91,"problem",8,"facility@name")="VOE OFFICE INSTITUTION"
4427"RTN","C0SPROB2",125,0)
4428 ;^TMP("C0STBL",91,"problem",8,"icd@value")="250.00"
4429"RTN","C0SPROB2",126,0)
4430 ;^TMP("C0STBL",91,"problem",8,"id@value")=119
4431"RTN","C0SPROB2",127,0)
4432 ;^TMP("C0STBL",91,"problem",8,"location@value")="DR OFFICE"
4433"RTN","C0SPROB2",128,0)
4434 ;^TMP("C0STBL",91,"problem",8,"name@value")="Diabetes Mellitus without mentionof Complication, type II or unspecified type,"
4435"RTN","C0SPROB2",129,0)
4436 ;^TMP("C0STBL",91,"problem",8,"provider@code")=63
4437"RTN","C0SPROB2",130,0)
4438 ;^TMP("C0STBL",91,"problem",8,"provider@name")="KING,MATTHEW MICHAEL"
4439"RTN","C0SPROB2",131,0)
4440 ;^TMP("C0STBL",91,"problem",8,"removed@value")=0
4441"RTN","C0SPROB2",132,0)
4442 ;^TMP("C0STBL",91,"problem",8,"status@value")="A"
4443"RTN","C0SPROB2",133,0)
4444 ;^TMP("C0STBL",91,"problem",8,"unverified@value")=0
4445"RTN","C0SPROB2",134,0)
4446 ;^TMP("C0STBL",91,"problem",8,"updated@value")=3110603
4447"RTN","C0SPROB2",135,0)
4448 ;
4449"RTN","C0SPROB2",136,0)
4450 ; sample Smart lab result triples
4451"RTN","C0SPROB2",137,0)
4452 ;
4453"RTN","C0SPROB2",138,0)
4454 ;G("node16rk1fgdvx10882","code")="snomed:40930008"
4455"RTN","C0SPROB2",139,0)
4456 ;G("node16rk1fgdvx10882","dcterms:title")="Hypothyroidism"
4457"RTN","C0SPROB2",140,0)
4458 ;G("node16rk1fgdvx10882","rdf:type")="sp:CodedValue"
4459"RTN","C0SPROB2",141,0)
4460 ;G("node16rk1fgdvx11051","code")="snomed:188155002"
4461"RTN","C0SPROB2",142,0)
4462 ;G("node16rk1fgdvx11051","dcterms:title")="Primary malignant neoplasm of lower outer quadrant of female breast"
4463"RTN","C0SPROB2",143,0)
4464 ;G("node16rk1fgdvx11051","rdf:type")="sp:CodedValue"
4465"RTN","C0SPROB2",144,0)
4466 ;G("node16rk1fgdvx11073","code")="snomed:353295004"
4467"RTN","C0SPROB2",145,0)
4468 ;G("node16rk1fgdvx11073","dcterms:title")="Toxic diffuse goiter"
4469"RTN","C0SPROB2",146,0)
4470 ;G("node16rk1fgdvx11073","rdf:type")="sp:CodedValue"
4471"RTN","C0SPROB2",147,0)
4472 ;G("node16rk1fgdvx11089","code")="snomed:54302000"
4473"RTN","C0SPROB2",148,0)
4474 ;G("node16rk1fgdvx11089","dcterms:title")="Disorder of breast"
4475"RTN","C0SPROB2",149,0)
4476 ;G("node16rk1fgdvx11089","rdf:type")="sp:CodedValue"
4477"RTN","C0SPROB2",150,0)
4478 ;G("node16rk1fgdvx11351","code")="snomed:38341003"
4479"RTN","C0SPROB2",151,0)
4480 ;G("node16rk1fgdvx11351","dcterms:title")="Essential hypertension"
4481"RTN","C0SPROB2",152,0)
4482 ;G("node16rk1fgdvx11351","rdf:type")="sp:CodedValue"
4483"RTN","C0SPROB2",153,0)
4484 ;G("node16rk1fgdvx11390","code")="snomed:44054006"
4485"RTN","C0SPROB2",154,0)
4486 ;G("node16rk1fgdvx11390","dcterms:title")="Diabetes mellitus type 2"
4487"RTN","C0SPROB2",155,0)
4488 ;G("node16rk1fgdvx11390","rdf:type")="sp:CodedValue"
4489"RTN","C0SPROB2",156,0)
4490 ;G("node16rk1fgdvx11558","code")="snomed:195967001"
4491"RTN","C0SPROB2",157,0)
4492 ;G("node16rk1fgdvx11558","dcterms:title")="Asthma"
4493"RTN","C0SPROB2",158,0)
4494 ;G("node16rk1fgdvx11558","rdf:type")="sp:CodedValue"
4495"RTN","C0SPROB2",159,0)
4496 ;G("node16rk1fgdvx11578","code")="snomed:254837009"
4497"RTN","C0SPROB2",160,0)
4498 ;G("node16rk1fgdvx11578","dcterms:title")="Primary malignant neoplasm of female breast"
4499"RTN","C0SPROB2",161,0)
4500 ;G("node16rk1fgdvx11578","rdf:type")="sp:CodedValue"
4501"RTN","C0SPROB2",162,0)
4502 ;G("node16rk1fgdvx11687","code")="snomed:8517006"
4503"RTN","C0SPROB2",163,0)
4504 ;G("node16rk1fgdvx11687","dcterms:title")="History of tobacco use"
4505"RTN","C0SPROB2",164,0)
4506 ;G("node16rk1fgdvx11687","rdf:type")="sp:CodedValue"
4507"RTN","C0SPROB2",165,0)
4508 ;G("node16rk1fgdvx11716","code")="snomed:55822004"
4509"RTN","C0SPROB2",166,0)
4510 ;G("node16rk1fgdvx11716","dcterms:title")="Hyperlipidemia"
4511"RTN","C0SPROB2",167,0)
4512 ;G("node16rk1fgdvx11716","rdf:type")="sp:CodedValue"
4513"RTN","C0SPROB2",168,0)
4514 ;G("smart:1577780/problems/69560e4721e1","belongsTo")="smart:1577780"
4515"RTN","C0SPROB2",169,0)
4516 ;G("smart:1577780/problems/69560e4721e1","problemName")="node16rk1fgdvx11089"
4517"RTN","C0SPROB2",170,0)
4518 ;G("smart:1577780/problems/69560e4721e1","rdf:type")="sp:Problem"
4519"RTN","C0SPROB2",171,0)
4520 ;G("smart:1577780/problems/69560e4721e1","startDate")="2005-08-02"
4521"RTN","C0SPROB2",172,0)
4522 ;G("smart:1577780/problems/06ef10c4e92c","belongsTo")="smart:1577780"
4523"RTN","C0SPROB2",173,0)
4524 ;G("smart:1577780/problems/06ef10c4e92c","problemName")="node16rk1fgdvx11051"
4525"RTN","C0SPROB2",174,0)
4526 ;G("smart:1577780/problems/06ef10c4e92c","rdf:type")="sp:Problem"
4527"RTN","C0SPROB2",175,0)
4528 ;G("smart:1577780/problems/06ef10c4e92c","startDate")="2006-02-20"
4529"RTN","C0SPROB2",176,0)
4530 ;G("smart:1577780/problems/9894ba9dfe5a","belongsTo")="smart:1577780"
4531"RTN","C0SPROB2",177,0)
4532 ;G("smart:1577780/problems/9894ba9dfe5a","problemName")="node16rk1fgdvx11578"
4533"RTN","C0SPROB2",178,0)
4534 ;G("smart:1577780/problems/9894ba9dfe5a","rdf:type")="sp:Problem"
4535"RTN","C0SPROB2",179,0)
4536 ;G("smart:1577780/problems/9894ba9dfe5a","startDate")="2005-08-22"
4537"RTN","C0SPROB2",180,0)
4538 ;G("smart:1577780/problems/c109aa7a0675","belongsTo")="smart:1577780"
4539"RTN","C0SPROB2",181,0)
4540 ;G("smart:1577780/problems/c109aa7a0675","problemName")="node16rk1fgdvx11558"
4541"RTN","C0SPROB2",182,0)
4542 ;G("smart:1577780/problems/c109aa7a0675","rdf:type")="sp:Problem"
4543"RTN","C0SPROB2",183,0)
4544 ;G("smart:1577780/problems/c109aa7a0675","startDate")="2005-09-22"
4545"RTN","C0SPROB2",184,0)
4546 ;G("smart:1577780/problems/1c50100614a2","belongsTo")="smart:1577780"
4547"RTN","C0SPROB2",185,0)
4548 ;G("smart:1577780/problems/1c50100614a2","problemName")="node16rk1fgdvx11073"
4549"RTN","C0SPROB2",186,0)
4550 ;G("smart:1577780/problems/1c50100614a2","rdf:type")="sp:Problem"
4551"RTN","C0SPROB2",187,0)
4552 ;G("smart:1577780/problems/1c50100614a2","startDate")="2007-02-21"
4553"RTN","C0SPROB2",188,0)
4554 ;G("smart:1577780/problems/083dffb2c4a0","belongsTo")="smart:1577780"
4555"RTN","C0SPROB2",189,0)
4556 ;G("smart:1577780/problems/083dffb2c4a0","problemName")="node16rk1fgdvx11390"
4557"RTN","C0SPROB2",190,0)
4558 ;G("smart:1577780/problems/083dffb2c4a0","rdf:type")="sp:Problem"
4559"RTN","C0SPROB2",191,0)
4560 ;G("smart:1577780/problems/083dffb2c4a0","startDate")="2007-01-07"
4561"RTN","C0SPROB2",192,0)
4562 ;G("smart:1577780/problems/762b5639a2d1","belongsTo")="smart:1577780"
4563"RTN","C0SPROB2",193,0)
4564 ;G("smart:1577780/problems/762b5639a2d1","problemName")="node16rk1fgdvx11687"
4565"RTN","C0SPROB2",194,0)
4566 ;G("smart:1577780/problems/762b5639a2d1","rdf:type")="sp:Problem"
4567"RTN","C0SPROB2",195,0)
4568 ;G("smart:1577780/problems/762b5639a2d1","startDate")="2006-02-20"
4569"RTN","C0SPROB2",196,0)
4570 ;G("smart:1577780/problems/9dc9053dd6f4","belongsTo")="smart:1577780"
4571"RTN","C0SPROB2",197,0)
4572 ;G("smart:1577780/problems/9dc9053dd6f4","problemName")="node16rk1fgdvx11716"
4573"RTN","C0SPROB2",198,0)
4574 ;G("smart:1577780/problems/9dc9053dd6f4","rdf:type")="sp:Problem"
4575"RTN","C0SPROB2",199,0)
4576 ;G("smart:1577780/problems/9dc9053dd6f4","startDate")="2008-04-08"
4577"RTN","C0SPROB2",200,0)
4578 ;G("smart:1577780/problems/e3fe9b7ee552","belongsTo")="smart:1577780"
4579"RTN","C0SPROB2",201,0)
4580 ;G("smart:1577780/problems/e3fe9b7ee552","problemName")="node16rk1fgdvx10882"
4581"RTN","C0SPROB2",202,0)
4582 ;G("smart:1577780/problems/e3fe9b7ee552","rdf:type")="sp:Problem"
4583"RTN","C0SPROB2",203,0)
4584 ;G("smart:1577780/problems/e3fe9b7ee552","startDate")="2005-10-27"
4585"RTN","C0SPROB2",204,0)
4586 ;G("smart:1577780/problems/9933307e8f95","belongsTo")="smart:1577780"
4587"RTN","C0SPROB2",205,0)
4588 ;G("smart:1577780/problems/9933307e8f95","problemName")="node16rk1fgdvx11351"
4589"RTN","C0SPROB2",206,0)
4590 ;G("smart:1577780/problems/9933307e8f95","rdf:type")="sp:Problem"
4591"RTN","C0SPROB2",207,0)
4592 ;G("smart:1577780/problems/9933307e8f95","startDate")="2005-08-22"
4593"RTN","C0SPROB2",208,0)
4594 ;G("snomed:188155002","dcterms:identifier")=188155002
4595"RTN","C0SPROB2",209,0)
4596 ;G("snomed:188155002","dcterms:title")="Primary malignant neoplasm of lower outer quadrant of female breast"
4597"RTN","C0SPROB2",210,0)
4598 ;G("snomed:188155002","rdf:type")="sp:Code"
4599"RTN","C0SPROB2",211,0)
4600 ;G("snomed:188155002","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
4601"RTN","C0SPROB2",212,0)
4602 ;G("snomed:195967001","dcterms:identifier")=195967001
4603"RTN","C0SPROB2",213,0)
4604 ;G("snomed:195967001","dcterms:title")="Asthma"
4605"RTN","C0SPROB2",214,0)
4606 ;G("snomed:195967001","rdf:type")="sp:Code"
4607"RTN","C0SPROB2",215,0)
4608 ;G("snomed:195967001","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
4609"RTN","C0SPROB2",216,0)
4610 ;G("snomed:254837009","dcterms:identifier")=254837009
4611"RTN","C0SPROB2",217,0)
4612 ;G("snomed:254837009","dcterms:title")="Primary malignant neoplasm of female breast"
4613"RTN","C0SPROB2",218,0)
4614 ;G("snomed:254837009","rdf:type")="sp:Code"
4615"RTN","C0SPROB2",219,0)
4616 ;G("snomed:254837009","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
4617"RTN","C0SPROB2",220,0)
4618 ;G("snomed:353295004","dcterms:identifier")=353295004
4619"RTN","C0SPROB2",221,0)
4620 ;G("snomed:353295004","dcterms:title")="Toxic diffuse goiter"
4621"RTN","C0SPROB2",222,0)
4622 ;G("snomed:353295004","rdf:type")="sp:Code"
4623"RTN","C0SPROB2",223,0)
4624 ;G("snomed:353295004","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
4625"RTN","C0SPROB2",224,0)
4626 ;G("snomed:38341003","dcterms:identifier")=38341003
4627"RTN","C0SPROB2",225,0)
4628 ;G("snomed:38341003","dcterms:title")="Essential hypertension"
4629"RTN","C0SPROB2",226,0)
4630 ;G("snomed:38341003","rdf:type")="sp:Code"
4631"RTN","C0SPROB2",227,0)
4632 ;G("snomed:38341003","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
4633"RTN","C0SPROB2",228,0)
4634 ;G("snomed:40930008","dcterms:identifier")=40930008
4635"RTN","C0SPROB2",229,0)
4636 ;G("snomed:40930008","dcterms:title")="Hypothyroidism"
4637"RTN","C0SPROB2",230,0)
4638 ;G("snomed:40930008","rdf:type")="sp:Code"
4639"RTN","C0SPROB2",231,0)
4640 ;G("snomed:40930008","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
4641"RTN","C0SPROB2",232,0)
4642 ;G("snomed:44054006","dcterms:identifier")=44054006
4643"RTN","C0SPROB2",233,0)
4644 ;G("snomed:44054006","dcterms:title")="Diabetes mellitus type 2"
4645"RTN","C0SPROB2",234,0)
4646 ;G("snomed:44054006","rdf:type")="sp:Code"
4647"RTN","C0SPROB2",235,0)
4648 ;G("snomed:44054006","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
4649"RTN","C0SPROB2",236,0)
4650 ;G("snomed:54302000","dcterms:identifier")=54302000
4651"RTN","C0SPROB2",237,0)
4652 ;G("snomed:54302000","dcterms:title")="Disorder of breast"
4653"RTN","C0SPROB2",238,0)
4654 ;G("snomed:54302000","rdf:type")="sp:Code"
4655"RTN","C0SPROB2",239,0)
4656 ;G("snomed:54302000","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
4657"RTN","C0SPROB2",240,0)
4658 ;G("snomed:55822004","dcterms:identifier")=55822004
4659"RTN","C0SPROB2",241,0)
4660 ;G("snomed:55822004","dcterms:title")="Hyperlipidemia"
4661"RTN","C0SPROB2",242,0)
4662 ;G("snomed:55822004","rdf:type")="sp:Code"
4663"RTN","C0SPROB2",243,0)
4664 ;G("snomed:55822004","system")="http://purl.bioontology.org/ontology/SNOMEDCT"
4665"RTN","C0SPROB2",244,0)
4666 ;G("snomed:8517006","dcterms:identifier")=8517006
4667"RTN","C0SPROB2",245,0)
4668 ;G("snomed:8517006","dcterms:title")="History of tobacco use"
4669"RTN","C0SPROB2",246,0)
4670 ;G("snomed:8517006","rdf:type")="sp:Code"
4671"RTN","C0SPROB2",247,0)
4672 ;G("snomed:8517006","system")="http://purl.bioontology.org/ontology/SNOMEDCT/"
4673"RTN","C0SPROB2",248,0)
4674
4675"RTN","C0SPROB2",249,0)
4676 ;
4677"RTN","C0SPROB2",250,0)
4678PROB(GRTN,C0SARY) ; GRTN, passed by reference,
4679"RTN","C0SPROB2",251,0)
4680 ; is the return name of the graph created. "" if none
4681"RTN","C0SPROB2",252,0)
4682 ; C0SARY is passed in by reference and is the NHIN array of problems
4683"RTN","C0SPROB2",253,0)
4684 ;
4685"RTN","C0SPROB2",254,0)
4686 I $O(C0SARY("problem",""))="" D Q ;
4687"RTN","C0SPROB2",255,0)
4688 . I $D(DEBUG) W !,"No Problems"
4689"RTN","C0SPROB2",256,0)
4690 S GRTN="" ; default to no problems
4691"RTN","C0SPROB2",257,0)
4692 N C0SGRF
4693"RTN","C0SPROB2",258,0)
4694 S C0SGRF="/vista/smart/"_ZPATID_"/problems"
4695"RTN","C0SPROB2",259,0)
4696 I $D(DEBUG) W !,"Processing ",C0SGRF
4697"RTN","C0SPROB2",260,0)
4698 D DELGRAPH^C0XF2N(C0SGRF) ; delete the old graph
4699"RTN","C0SPROB2",261,0)
4700 D INITFARY^C0XF2N("C0XFARY") ; which triple store to use
4701"RTN","C0SPROB2",262,0)
4702 N FARY S FARY="C0XFARY"
4703"RTN","C0SPROB2",263,0)
4704 D USEFARY^C0XF2N(FARY)
4705"RTN","C0SPROB2",264,0)
4706 D VOCINIT^C0XUTIL
4707"RTN","C0SPROB2",265,0)
4708 ;
4709"RTN","C0SPROB2",266,0)
4710 D STARTADD^C0XF2N ; initialize to create triples
4711"RTN","C0SPROB2",267,0)
4712 ;
4713"RTN","C0SPROB2",268,0)
4714 N ZI S ZI=""
4715"RTN","C0SPROB2",269,0)
4716 F S ZI=$O(C0SARY("problem",ZI)) Q:ZI="" D ;
4717"RTN","C0SPROB2",270,0)
4718 . N LRN,ZR ; ZR is the local array for building the new triples
4719"RTN","C0SPROB2",271,0)
4720 . S LRN=$NA(C0SARY("problem",ZI)) ; base for values in this lab result
4721"RTN","C0SPROB2",272,0)
4722 . ;
4723"RTN","C0SPROB2",273,0)
4724 . N PROBID ; unique Id for this problem
4725"RTN","C0SPROB2",274,0)
4726 . S PROBID=C0SGRF_"/"_$$LKY17^C0XF2N ; use a random number
4727"RTN","C0SPROB2",275,0)
4728 . ;
4729"RTN","C0SPROB2",276,0)
4730 . ; i don't like this because the same problems gets a
4731"RTN","C0SPROB2",277,0)
4732 . ; different ID every time it's reported. Can't trace it back to VistA
4733"RTN","C0SPROB2",278,0)
4734 . ; I'd rather be using id@value ie "id@value")="118"
4735"RTN","C0SPROB2",279,0)
4736 . ;
4737"RTN","C0SPROB2",280,0)
4738 . N SNOMED,ICD S ICD=$G(@LRN@("icd@value"))
4739"RTN","C0SPROB2",281,0)
4740 . S SNOMED=$$SNOMED(ICD) ; look up the snomed code in the map
4741"RTN","C0SPROB2",282,0)
4742 . N SNOGRF ; graph for SNOMED code
4743"RTN","C0SPROB2",283,0)
4744 . I SNOMED="" D ;
4745"RTN","C0SPROB2",284,0)
4746 . . S SNOMED=ICD ; if not found, return the ICD code
4747"RTN","C0SPROB2",285,0)
4748 . . S SNOGRF="icd9:"_SNOMED
4749"RTN","C0SPROB2",286,0)
4750 . E S SNOGRF="snomed:"_SNOMED
4751"RTN","C0SPROB2",287,0)
4752 . N SNOTIT S SNOTIT=$G(@LRN@("name@value"))
4753"RTN","C0SPROB2",288,0)
4754 . I $D(DEBUG) D ;
4755"RTN","C0SPROB2",289,0)
4756 . . W !,"Processing Problem List ",PROBID
4757"RTN","C0SPROB2",290,0)
4758 . . W !,"problem: ",SNOTIT
4759"RTN","C0SPROB2",291,0)
4760 . . W !,"code: ",SNOMED
4761"RTN","C0SPROB2",292,0)
4762 . ;
4763"RTN","C0SPROB2",293,0)
4764 . ; first do the base result graph
4765"RTN","C0SPROB2",294,0)
4766 . ;
4767"RTN","C0SPROB2",295,0)
4768 . S ZR("rdf:type")="sp:Problem"
4769"RTN","C0SPROB2",296,0)
4770 . S ZR("sp:belongsTo")=C0SGRF ; the subject for this patient's problems
4771"RTN","C0SPROB2",297,0)
4772 . ; ie /vista/smart/99912345/problems
4773"RTN","C0SPROB2",298,0)
4774 . ;
4775"RTN","C0SPROB2",299,0)
4776 . N PROBNAME S PROBNAME=$$ANONS^C0XF2N ; new node for problem name
4777"RTN","C0SPROB2",300,0)
4778 . S ZR("sp:problemName")=PROBNAME
4779"RTN","C0SPROB2",301,0)
4780 . ;
4781"RTN","C0SPROB2",302,0)
4782 . N STARTDT S STARTDT=$$SPDATE^C0SUTIL($G(@LRN@("entered@value")))
4783"RTN","C0SPROB2",303,0)
4784 . S ZR("sp:startDate")=STARTDT
4785"RTN","C0SPROB2",304,0)
4786 . ;
4787"RTN","C0SPROB2",305,0)
4788 . D ADDINN^C0XF2N(C0SGRF,PROBID,.ZR) ; addIfNotNull the triples
4789"RTN","C0SPROB2",306,0)
4790 . K ZR ; clean up
4791"RTN","C0SPROB2",307,0)
4792 . ;
4793"RTN","C0SPROB2",308,0)
4794 . ; create the problemName graph
4795"RTN","C0SPROB2",309,0)
4796 . ;
4797"RTN","C0SPROB2",310,0)
4798 . S ZR("rdf:type")="sp:CodedValue"
4799"RTN","C0SPROB2",311,0)
4800 . ;S ZR("sp:code")="snomed:"_SNOMED
4801"RTN","C0SPROB2",312,0)
4802 . S ZR("sp:code")=SNOGRF
4803"RTN","C0SPROB2",313,0)
4804 . S ZR("dcterms:title")=$G(@LRN@("name@value"))
4805"RTN","C0SPROB2",314,0)
4806 . D ADDINN^C0XF2N(C0SGRF,PROBNAME,.ZR)
4807"RTN","C0SPROB2",315,0)
4808 . K ZR
4809"RTN","C0SPROB2",316,0)
4810 . ;
4811"RTN","C0SPROB2",317,0)
4812 . ; create snomed graph
4813"RTN","C0SPROB2",318,0)
4814 . ;
4815"RTN","C0SPROB2",319,0)
4816 . S ZR("rdf:type")="sp:Code"
4817"RTN","C0SPROB2",320,0)
4818 . S ZR("sp:system")="http://purl.bioontology.org/ontology/SNOMEDCT"
4819"RTN","C0SPROB2",321,0)
4820 . I ZR("sp:system")["icd9" S ZR("sp:system")="http://purl.bioontology.org/ontology/ICD9"
4821"RTN","C0SPROB2",322,0)
4822 . S ZR("dcterms:identifier")=SNOMED
4823"RTN","C0SPROB2",323,0)
4824 . S ZR("dcterms:title")=SNOTIT
4825"RTN","C0SPROB2",324,0)
4826 . D ADDINN^C0XF2N(C0SGRF,SNOGRF,.ZR)
4827"RTN","C0SPROB2",325,0)
4828 . K ZR
4829"RTN","C0SPROB2",326,0)
4830 . ;
4831"RTN","C0SPROB2",327,0)
4832 D BULKLOAD^C0XF2N(.C0XFDA)
4833"RTN","C0SPROB2",328,0)
4834 S GRTN=C0SGRF
4835"RTN","C0SPROB2",329,0)
4836 Q
4837"RTN","C0SPROB2",330,0)
4838 ;
4839"RTN","C0SPROB2",331,0)
4840SNOMED(ZICD) ; extrinsic which returns SNOMED code given an ICD9 code
4841"RTN","C0SPROB2",332,0)
4842 ; requires the mapping table installed in the triplestore
4843"RTN","C0SPROB2",333,0)
4844 ;
4845"RTN","C0SPROB2",334,0)
4846 N ZSN,ZARY,ZSUB
4847"RTN","C0SPROB2",335,0)
4848 S ZSUB=$$subject^C0XGET1(,ZICD) ; subject of the ICD9 code
4849"RTN","C0SPROB2",336,0)
4850 D objects^C0XGET1(.ZARY,ZSUB,"cg:ontology#toCode")
4851"RTN","C0SPROB2",337,0)
4852 S ZSN=$O(ZARY(""))
4853"RTN","C0SPROB2",338,0)
4854 I $D(DEBUG) W !,ZSN," ",$$object^C0XGET1(ZSUB,"rdfs:label")
4855"RTN","C0SPROB2",339,0)
4856 Q ZSN
4857"RTN","C0SPROB2",340,0)
4858 ;
4859"RTN","C0STBL")
48600^11^B2532386
4861"RTN","C0STBL",1,0)
4862C0STBL ; GPL - Smart Container CREATE A TABLE OF NHINV VALUES;2/22/12 17:05
4863"RTN","C0STBL",2,0)
4864 ;;0.1;C0S;nopatch;noreleasedate;Build 1
4865"RTN","C0STBL",3,0)
4866 ;Copyright 2012 George Lilly. Licensed under the terms of the GNU
4867"RTN","C0STBL",4,0)
4868 ;General Public License See attached copy of the License.
4869"RTN","C0STBL",5,0)
4870 ;
4871"RTN","C0STBL",6,0)
4872 ;This program is free software; you can redistribute it and/or modify
4873"RTN","C0STBL",7,0)
4874 ;it under the terms of the GNU General Public License as published by
4875"RTN","C0STBL",8,0)
4876 ;the Free Software Foundation; either version 2 of the License, or
4877"RTN","C0STBL",9,0)
4878 ;(at your option) any later version.
4879"RTN","C0STBL",10,0)
4880 ;
4881"RTN","C0STBL",11,0)
4882 ;This program is distributed in the hope that it will be useful,
4883"RTN","C0STBL",12,0)
4884 ;but WITHOUT ANY WARRANTY; without even the implied warranty of
4885"RTN","C0STBL",13,0)
4886 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4887"RTN","C0STBL",14,0)
4888 ;GNU General Public License for more details.
4889"RTN","C0STBL",15,0)
4890 ;
4891"RTN","C0STBL",16,0)
4892 ;You should have received a copy of the GNU General Public License along
4893"RTN","C0STBL",17,0)
4894 ;with this program; if not, write to the Free Software Foundation, Inc.,
4895"RTN","C0STBL",18,0)
4896 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
4897"RTN","C0STBL",19,0)
4898 ;
4899"RTN","C0STBL",20,0)
4900 Q
4901"RTN","C0STBL",21,0)
4902EN(BEGDFN,DFNCNT,ZPART) ; START IS A DFN
4903"RTN","C0STBL",22,0)
4904 I '$D(BEGDFN) S BDGDFN=""
4905"RTN","C0STBL",23,0)
4906 I '$D(DFNCNT) S DFNCNT=150
4907"RTN","C0STBL",24,0)
4908 I '$D(ZPART) S ZPART=""
4909"RTN","C0STBL",25,0)
4910 N ZTBL S ZTBL=$NA(^TMP("C0STBL"))
4911"RTN","C0STBL",26,0)
4912 N ZI,ZCNT,ZG
4913"RTN","C0STBL",27,0)
4914 S ZI=BEGDFN
4915"RTN","C0STBL",28,0)
4916 S ZCNT=0
4917"RTN","C0STBL",29,0)
4918 F S ZI=$O(^DPT(ZI)) Q:(+ZI="")!(ZCNT>DFNCNT) D ;
4919"RTN","C0STBL",30,0)
4920 . S ZCNT=ZCNT+1
4921"RTN","C0STBL",31,0)
4922 . W ZI," "
4923"RTN","C0STBL",32,0)
4924 . K ZG
4925"RTN","C0STBL",33,0)
4926 . D EN^C0SNHIN(.ZG,ZI,ZPART)
4927"RTN","C0STBL",34,0)
4928 . M @ZTBL@(ZI)=ZG
4929"RTN","C0STBL",35,0)
4930 . K G
4931"RTN","C0STBL",36,0)
4932 . ;D EN^C0SMART(.G,ZI,"med")
4933"RTN","C0STBL",37,0)
4934 . ;I $D(G) W !,$$output^C0XGET1("G")
4935"RTN","C0STBL",38,0)
4936 . ;k G
4937"RTN","C0STBL",39,0)
4938 . ;D EN^C0SMART(.G,ZI,"patient")
4939"RTN","C0STBL",40,0)
4940 . ;I $D(G) W !,$$output^C0XGET1("G")
4941"RTN","C0STBL",41,0)
4942 . ;K G
4943"RTN","C0STBL",42,0)
4944 . ;D EN^C0SMART(.G,ZI,"lab")
4945"RTN","C0STBL",43,0)
4946 . ;I $D(G) W !,$$output^C0XGET1("G")
4947"RTN","C0STBL",44,0)
4948 . ;K G
4949"RTN","C0STBL",45,0)
4950 . D EN^C0SMART(.G,ZI,"problem")
4951"RTN","C0STBL",46,0)
4952 . I $D(G) W !,$$output^C0XGET1("G")
4953"RTN","C0STBL",47,0)
4954 Q
4955"RTN","C0STBL",48,0)
4956 ;
4957"RTN","C0STBL",49,0)
4958LOADHACK ;
4959"RTN","C0STBL",50,0)
4960 N ZI
4961"RTN","C0STBL",51,0)
4962 F ZI=2:1:374 D ;
4963"RTN","C0STBL",52,0)
4964 . D IMPORT^C0XF2N("hack"_ZI_".xml","/home/vista/hack/")
4965"RTN","C0STBL",53,0)
4966 Q
4967"RTN","C0STBL",54,0)
4968 ;
4969"RTN","C0SUTIL")
49700^12^B1005502
4971"RTN","C0SUTIL",1,0)
4972C0SUTIL ; GPL - Smart Processing Utilities ;2/22/12 17:05
4973"RTN","C0SUTIL",2,0)
4974 ;;0.1;C0S;nopatch;noreleasedate;Build 1
4975"RTN","C0SUTIL",3,0)
4976 ;Copyright 2012 George Lilly. Licensed under the terms of the GNU
4977"RTN","C0SUTIL",4,0)
4978 ;General Public License See attached copy of the License.
4979"RTN","C0SUTIL",5,0)
4980 ;
4981"RTN","C0SUTIL",6,0)
4982 ;This program is free software; you can redistribute it and/or modify
4983"RTN","C0SUTIL",7,0)
4984 ;it under the terms of the GNU General Public License as published by
4985"RTN","C0SUTIL",8,0)
4986 ;the Free Software Foundation; either version 2 of the License, or
4987"RTN","C0SUTIL",9,0)
4988 ;(at your option) any later version.
4989"RTN","C0SUTIL",10,0)
4990 ;
4991"RTN","C0SUTIL",11,0)
4992 ;This program is distributed in the hope that it will be useful,
4993"RTN","C0SUTIL",12,0)
4994 ;but WITHOUT ANY WARRANTY; without even the implied warranty of
4995"RTN","C0SUTIL",13,0)
4996 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4997"RTN","C0SUTIL",14,0)
4998 ;GNU General Public License for more details.
4999"RTN","C0SUTIL",15,0)
5000 ;
5001"RTN","C0SUTIL",16,0)
5002 ;You should have received a copy of the GNU General Public License along
5003"RTN","C0SUTIL",17,0)
5004 ;with this program; if not, write to the Free Software Foundation, Inc.,
5005"RTN","C0SUTIL",18,0)
5006 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
5007"RTN","C0SUTIL",19,0)
5008 ;
5009"RTN","C0SUTIL",20,0)
5010 Q
5011"RTN","C0SUTIL",21,0)
5012 ;
5013"RTN","C0SUTIL",22,0)
5014SPDATE(ZDATE) ; extrinsic which returns the Smart date format yyyy-mm-dd
5015"RTN","C0SUTIL",23,0)
5016 ; ZDATE is a fileman format date
5017"RTN","C0SUTIL",24,0)
5018 N TMPDT
5019"RTN","C0SUTIL",25,0)
5020 S TMPDT=$$FMTE^XLFDT(ZDATE,"7D") ; ordered date
5021"RTN","C0SUTIL",26,0)
5022 S TMPDT=$TR(TMPDT,"/","-") ; change slashes to hyphens
5023"RTN","C0SUTIL",27,0)
5024 I TMPDT="" S TMPDT="UNKNOWN"
5025"RTN","C0SUTIL",28,0)
5026 N Z2,Z3
5027"RTN","C0SUTIL",29,0)
5028 S Z2=$P(TMPDT,"-",2)
5029"RTN","C0SUTIL",30,0)
5030 S Z3=$P(TMPDT,"-",3)
5031"RTN","C0SUTIL",31,0)
5032 I $L(Z2)=1 S $P(TMPDT,"-",2)="0"_Z2
5033"RTN","C0SUTIL",32,0)
5034 I $L(Z3)=1 S $P(TMPDT,"-",3)="0"_Z3
5035"RTN","C0SUTIL",33,0)
5036 Q TMPDT
5037"RTN","C0SUTIL",34,0)
5038 ;
5039"RTN","C0SXPATH")
50400^13^B521212541
5041"RTN","C0SXPATH",1,0)
5042 C0SXPATH ; CCDCCR/GPL - XPATH XML manipulation utilities; 6/1/08
5043"RTN","C0SXPATH",2,0)
5044 ;;1.0;C0S;;May 19, 2009;Build 1
5045"RTN","C0SXPATH",3,0)
5046 ;Copyright 2008-2012 George Lilly. Licensed under the terms of the GNU
5047"RTN","C0SXPATH",4,0)
5048 ;General Public License See attached copy of the License.
5049"RTN","C0SXPATH",5,0)
5050 ;
5051"RTN","C0SXPATH",6,0)
5052 ;This program is free software; you can redistribute it and/or modify
5053"RTN","C0SXPATH",7,0)
5054 ;it under the terms of the GNU General Public License as published by
5055"RTN","C0SXPATH",8,0)
5056 ;the Free Software Foundation; either version 2 of the License, or
5057"RTN","C0SXPATH",9,0)
5058 ;(at your option) any later version.
5059"RTN","C0SXPATH",10,0)
5060 ;
5061"RTN","C0SXPATH",11,0)
5062 ;This program is distributed in the hope that it will be useful,
5063"RTN","C0SXPATH",12,0)
5064 ;but WITHOUT ANY WARRANTY; without even the implied warranty of
5065"RTN","C0SXPATH",13,0)
5066 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5067"RTN","C0SXPATH",14,0)
5068 ;GNU General Public License for more details.
5069"RTN","C0SXPATH",15,0)
5070 ;
5071"RTN","C0SXPATH",16,0)
5072 ;You should have received a copy of the GNU General Public License along
5073"RTN","C0SXPATH",17,0)
5074 ;with this program; if not, write to the Free Software Foundation, Inc.,
5075"RTN","C0SXPATH",18,0)
5076 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
5077"RTN","C0SXPATH",19,0)
5078 ;
5079"RTN","C0SXPATH",20,0)
5080 W "This is an XML XPATH utility library",!
5081"RTN","C0SXPATH",21,0)
5082 W !
5083"RTN","C0SXPATH",22,0)
5084 Q
5085"RTN","C0SXPATH",23,0)
5086 ;
5087"RTN","C0SXPATH",24,0)
5088OUTPUT(OUTARY,OUTNAME,OUTDIR) ; WRITE AN ARRAY TO A FILE
5089"RTN","C0SXPATH",25,0)
5090 ;
5091"RTN","C0SXPATH",26,0)
5092 N Y
5093"RTN","C0SXPATH",27,0)
5094 S Y=$$GTF^%ZISH(OUTARY,$QL(OUTARY),OUTDIR,OUTNAME)
5095"RTN","C0SXPATH",28,0)
5096 I Y Q 1_U_"WROTE FILE: "_OUTNAME_" TO "_OUTDIR
5097"RTN","C0SXPATH",29,0)
5098 I 'Y Q 0_U_"ERROR WRITING FILE"_OUTNAME_" TO "_OUTDIR
5099"RTN","C0SXPATH",30,0)
5100 Q
5101"RTN","C0SXPATH",31,0)
5102 ;
5103"RTN","C0SXPATH",32,0)
5104PUSH(STK,VAL) ; pushs VAL onto STK and updates STK(0)
5105"RTN","C0SXPATH",33,0)
5106 ; VAL IS A STRING AND STK IS PASSED BY NAME
5107"RTN","C0SXPATH",34,0)
5108 ;
5109"RTN","C0SXPATH",35,0)
5110 I '$D(@STK@(0)) S @STK@(0)=0 ; IF THE ARRAY IS EMPTY, INITIALIZE
5111"RTN","C0SXPATH",36,0)
5112 S @STK@(0)=@STK@(0)+1 ; INCREMENT ARRAY DEPTH
5113"RTN","C0SXPATH",37,0)
5114 S @STK@(@STK@(0))=VAL ; PUT VAL A THE END OF THE ARRAY
5115"RTN","C0SXPATH",38,0)
5116 Q
5117"RTN","C0SXPATH",39,0)
5118 ;
5119"RTN","C0SXPATH",40,0)
5120POP(STK,VAL) ; POPS THE LAST VALUE OFF THE STK AND RETURNS IT IN VAL
5121"RTN","C0SXPATH",41,0)
5122 ; VAL AND STK ARE PASSED BY REFERENCE
5123"RTN","C0SXPATH",42,0)
5124 ;
5125"RTN","C0SXPATH",43,0)
5126 I @STK@(0)<1 D ; IF ARRAY IS EMPTY
5127"RTN","C0SXPATH",44,0)
5128 . S VAL=""
5129"RTN","C0SXPATH",45,0)
5130 . S @STK@(0)=0
5131"RTN","C0SXPATH",46,0)
5132 I @STK@(0)>0 D ;
5133"RTN","C0SXPATH",47,0)
5134 . S VAL=@STK@(@STK@(0))
5135"RTN","C0SXPATH",48,0)
5136 . K @STK@(@STK@(0))
5137"RTN","C0SXPATH",49,0)
5138 . S @STK@(0)=@STK@(0)-1 ; NEW DEPTH OF THE ARRAY
5139"RTN","C0SXPATH",50,0)
5140 Q
5141"RTN","C0SXPATH",51,0)
5142 ;
5143"RTN","C0SXPATH",52,0)
5144PUSHA(ADEST,ASRC) ; PUSH ASRC ONTO ADEST, BOTH PASSED BY NAME
5145"RTN","C0SXPATH",53,0)
5146 ;
5147"RTN","C0SXPATH",54,0)
5148 N ZGI
5149"RTN","C0SXPATH",55,0)
5150 F ZGI=1:1:@ASRC@(0) D ; FOR ALL OF THE SOURCE ARRAY
5151"RTN","C0SXPATH",56,0)
5152 . D PUSH(ADEST,@ASRC@(ZGI)) ; PUSH ONE ELEMENT
5153"RTN","C0SXPATH",57,0)
5154 Q
5155"RTN","C0SXPATH",58,0)
5156 ;
5157"RTN","C0SXPATH",59,0)
5158MKMDX(STK,RTN,INREDUX) ; MAKES A MUMPS INDEX FROM THE ARRAY STK
5159"RTN","C0SXPATH",60,0)
5160 ; RTN IS SET TO //FIRST/SECOND/THIRD FOR THREE ARRAY ELEMENTS
5161"RTN","C0SXPATH",61,0)
5162 ; REDUX IS A STRING TO REMOVE FROM THE RESULT
5163"RTN","C0SXPATH",62,0)
5164 S RTN=""
5165"RTN","C0SXPATH",63,0)
5166 N I
5167"RTN","C0SXPATH",64,0)
5168 ; W "STK= ",STK,!
5169"RTN","C0SXPATH",65,0)
5170 I @STK@(0)>0 D ; IF THE ARRAY IS NOT EMPTY
5171"RTN","C0SXPATH",66,0)
5172 . S RTN="//"_@STK@(1) ; FIRST ELEMENT NEEDS NO SEMICOLON
5173"RTN","C0SXPATH",67,0)
5174 . I @STK@(0)>1 D ; SUBSEQUENT ELEMENTS NEED A SEMICOLON
5175"RTN","C0SXPATH",68,0)
5176 . . F I=2:1:@STK@(0) S RTN=RTN_"/"_@STK@(I)
5177"RTN","C0SXPATH",69,0)
5178 I $G(INREDUX)'="" S RTN=$P(RTN,INREDUX,1)_$P(RTN,INREDUX,2)
5179"RTN","C0SXPATH",70,0)
5180 Q
5181"RTN","C0SXPATH",71,0)
5182 ;
5183"RTN","C0SXPATH",72,0)
5184XNAME(ISTR) ; FUNCTION TO EXTRACT A NAME FROM AN XML FRAG
5185"RTN","C0SXPATH",73,0)
5186 ; </NAME> AND <NAME ID=XNAME> WILL RETURN NAME
5187"RTN","C0SXPATH",74,0)
5188 ; ISTR IS PASSED BY VALUE
5189"RTN","C0SXPATH",75,0)
5190 N CUR,TMP
5191"RTN","C0SXPATH",76,0)
5192 I ISTR?.E1"<".E D ; STRIP OFF LEFT BRACKET
5193"RTN","C0SXPATH",77,0)
5194 . S TMP=$P(ISTR,"<",2)
5195"RTN","C0SXPATH",78,0)
5196 I TMP?1"/".E D ; ALSO STRIP OFF SLASH IF PRESENT IE </NAME>
5197"RTN","C0SXPATH",79,0)
5198 . S TMP=$P(TMP,"/",2)
5199"RTN","C0SXPATH",80,0)
5200 S CUR=$P(TMP,">",1) ; EXTRACT THE NAME
5201"RTN","C0SXPATH",81,0)
5202 ; W "CUR= ",CUR,!
5203"RTN","C0SXPATH",82,0)
5204 I CUR?.1"_"1.A1" ".E D ; CONTAINS A BLANK IE NAME ID=TEST>
5205"RTN","C0SXPATH",83,0)
5206 . S CUR=$P(CUR," ",1) ; STRIP OUT BLANK AND AFTER
5207"RTN","C0SXPATH",84,0)
5208 ; W "CUR2= ",CUR,!
5209"RTN","C0SXPATH",85,0)
5210 Q CUR
5211"RTN","C0SXPATH",86,0)
5212 ;
5213"RTN","C0SXPATH",87,0)
5214XVAL(ISTR) ; EXTRACTS THE VALUE FROM A FRAGMENT OF XML
5215"RTN","C0SXPATH",88,0)
5216 ; <NAME>VALUE</NAME> WILL RETURN VALUE
5217"RTN","C0SXPATH",89,0)
5218 N G
5219"RTN","C0SXPATH",90,0)
5220 S G=$P(ISTR,">",2) ;STRIP OFF <NAME>
5221"RTN","C0SXPATH",91,0)
5222 Q $P(G,"<",1) ; STRIP OFF </NAME> LEAVING VALUE
5223"RTN","C0SXPATH",92,0)
5224 ;
5225"RTN","C0SXPATH",93,0)
5226VDX2VDV(OUTVDV,INVDX) ; CONVERT AN VDX ARRAY TO VDV
5227"RTN","C0SXPATH",94,0)
5228 ; VDX: @INVDX@(XPATH)=VALUE
5229"RTN","C0SXPATH",95,0)
5230 ; VDV: @OUTVDV@(X1X2X3X4)=VALUE
5231"RTN","C0SXPATH",96,0)
5232 ; THE VDV DATANAMES MIGHT BE MORE CONVENIENT FOR USE IN CODE
5233"RTN","C0SXPATH",97,0)
5234 ; AN INDEX IS PROVIDED TO GO BACK TO VDX FOR CONVERSIONS
5235"RTN","C0SXPATH",98,0)
5236 ; @VDV@("XPATH",X1X2X3X4)="XPATH"
5237"RTN","C0SXPATH",99,0)
5238 N ZA,ZI,ZW
5239"RTN","C0SXPATH",100,0)
5240 S ZI=""
5241"RTN","C0SXPATH",101,0)
5242 F S ZI=$O(@INVDX@(ZI)) Q:ZI="" D ;
5243"RTN","C0SXPATH",102,0)
5244 . S ZW=$TR(ZI,"/","") ; ELIMINATE ALL SLASHES - CAMEL CASE VARIABLE NAME
5245"RTN","C0SXPATH",103,0)
5246 . W ZW,!
5247"RTN","C0SXPATH",104,0)
5248 . S @OUTVDV@(ZW)=@INVDX@(ZI)
5249"RTN","C0SXPATH",105,0)
5250 . S @OUTVDV@("XPATH",ZW)=ZI
5251"RTN","C0SXPATH",106,0)
5252 Q
5253"RTN","C0SXPATH",107,0)
5254 ;
5255"RTN","C0SXPATH",108,0)
5256VDX2XPG(OUTXPG,INVDX) ; CONVERT AN VDX ARRAY TO XPG
5257"RTN","C0SXPATH",109,0)
5258 ; VDX: @VDX@(XPATH)=VALUE
5259"RTN","C0SXPATH",110,0)
5260 ; XPG: @(VDX(X1,X2,X3,X4))@=VALUE
5261"RTN","C0SXPATH",111,0)
5262 ; THIS IS A STEP TOWARD GENERATING XML FROM A VDX
5263"RTN","C0SXPATH",112,0)
5264 N ZA,ZI,ZW
5265"RTN","C0SXPATH",113,0)
5266 S ZI=""
5267"RTN","C0SXPATH",114,0)
5268 F S ZI=$O(@INVDX@(ZI)) Q:ZI="" D ;
5269"RTN","C0SXPATH",115,0)
5270 . S ZW=$E(ZI,3,$L(ZI)) ; STRIP OFF INITIAL //
5271"RTN","C0SXPATH",116,0)
5272 . S ZW2=$P(ZW,"/",1)
5273"RTN","C0SXPATH",117,0)
5274 . F ZK=1:1:$L(ZW,"/") D PUSH("ZA",$P(ZW,"/",ZK))
5275"RTN","C0SXPATH",118,0)
5276 . ;ZWR ZA
5277"RTN","C0SXPATH",119,0)
5278 . S ZW2=ZA(1)
5279"RTN","C0SXPATH",120,0)
5280 . F ZK=2:1:ZA(0) D ;
5281"RTN","C0SXPATH",121,0)
5282 . . S ZW2=ZW2_""","""_ZA(ZK)
5283"RTN","C0SXPATH",122,0)
5284 . K ZA
5285"RTN","C0SXPATH",123,0)
5286 . S ZW2=""""_ZW2_""""
5287"RTN","C0SXPATH",124,0)
5288 . W ZW2,!
5289"RTN","C0SXPATH",125,0)
5290 . S ZN=OUTXPG_"("_ZW2_")"
5291"RTN","C0SXPATH",126,0)
5292 . S @ZN=@INVDX@(ZI)
5293"RTN","C0SXPATH",127,0)
5294 Q
5295"RTN","C0SXPATH",128,0)
5296 ;
5297"RTN","C0SXPATH",129,0)
5298XML2XPG(OUTXPG,INXML) ; CONVERT AN XML ARRAY, PASSED BY NAME TO AN XPG ARRAY
5299"RTN","C0SXPATH",130,0)
5300 ; XPG MEANS XPATH GLOBAL AND HAS THE FORM @OUTXPG@("X1","X2","X3")=VALUE
5301"RTN","C0SXPATH",131,0)
5302 ;
5303"RTN","C0SXPATH",132,0)
5304 ;N G1
5305"RTN","C0SXPATH",133,0)
5306 D INDEX(INXML,"G1",1) ; PRODUCES A VDX ARRAY IN G1, NO INDEX IS PRODUCED
5307"RTN","C0SXPATH",134,0)
5308 D VDX2XPG(OUTXPG,"G1") ; CONVERTS THE VDX ARRAY TO XPG FORM
5309"RTN","C0SXPATH",135,0)
5310 Q
5311"RTN","C0SXPATH",136,0)
5312 ;
5313"RTN","C0SXPATH",137,0)
5314DO
5315"RTN","C0SXPATH",138,0)
5316 D XPG2XML("^GPL2B","^GPL2A")
5317"RTN","C0SXPATH",139,0)
5318 Q
5319"RTN","C0SXPATH",140,0)
5320 ;
5321"RTN","C0SXPATH",141,0)
5322T1 ; TEST OUT THESE ROUTINES
5323"RTN","C0SXPATH",142,0)
5324 D XML2XPG("G2","^GPL")
5325"RTN","C0SXPATH",143,0)
5326 D XPG2XML("G3","G2")
5327"RTN","C0SXPATH",144,0)
5328 K ^GPLOUT
5329"RTN","C0SXPATH",145,0)
5330 M ^GPLOUT=G3
5331"RTN","C0SXPATH",146,0)
5332 W $$OUTPUT^C0CXPATH("^GPLOUT(1)","GPLTEST.xml","/home/vademo2/EHR/p")
5333"RTN","C0SXPATH",147,0)
5334 Q
5335"RTN","C0SXPATH",148,0)
5336 ;
5337"RTN","C0SXPATH",149,0)
5338XPG2XML(OUTXML,INXPG) ;
5339"RTN","C0SXPATH",150,0)
5340 N C0CN,FWD,ZA,G,GA,ZQ
5341"RTN","C0SXPATH",151,0)
5342 S ZQ=0 ; QUIT FLAG
5343"RTN","C0SXPATH",152,0)
5344 F Q:ZQ=1 D ; LOOP THROUGH EVERYTHING
5345"RTN","C0SXPATH",153,0)
5346 . I '$D(C0CN) D ; FIRST TIME THROUGH
5347"RTN","C0SXPATH",154,0)
5348 . . K @OUTXML ; MAKE SURE OUTPUT ARRAY IS CLEAR
5349"RTN","C0SXPATH",155,0)
5350 . . S FWD=1 ; START OUT GOING FORWARD THROUGH SUBSCRIPTS
5351"RTN","C0SXPATH",156,0)
5352 . . S G=$Q(@INXPG) ; THIS ONE
5353"RTN","C0SXPATH",157,0)
5354 . . S GN=$Q(@G) ; NEXT ONE
5355"RTN","C0SXPATH",158,0)
5356 . . S C0CN=1 ; SUBSCRIPT COUNT
5357"RTN","C0SXPATH",159,0)
5358 . . S ZQ=0 ; QUIT FLAG
5359"RTN","C0SXPATH",160,0)
5360 . . D ZXO("?xml version=""1.0"" encoding=""UTF-8""?") ;MAKE IT REAL XML
5361"RTN","C0SXPATH",161,0)
5362 . . I $QS(G,1)="ContinuityOfCareRecord" D ;
5363"RTN","C0SXPATH",162,0)
5364 . . . D ZXO("?xml-stylesheet type=""text/xsl"" href=""ccr.xsl""?") ; HACK TO MAKE THE CCR STYLESHEET WORK
5365"RTN","C0SXPATH",163,0)
5366 . I FWD D ; GOING FORWARDS
5367"RTN","C0SXPATH",164,0)
5368 . . I C0CN<$QL(G) D ; NOT A DATA NODE
5369"RTN","C0SXPATH",165,0)
5370 . . . S ZA=$QS(G,C0CN) ; PULL OUT THE SUBSCRIPT
5371"RTN","C0SXPATH",166,0)
5372 . . . D ZXO(ZA) ; AND OPEN AN XML ELEMENT
5373"RTN","C0SXPATH",167,0)
5374 . . . I @OUTXML@(@OUTXML@(0))="<ContinuityOfCareRecord>" D ;
5375"RTN","C0SXPATH",168,0)
5376 . . . . S @OUTXML@(@OUTXML@(0))="<ContinuityOfCareRecord xmlns=""urn:astm-org:CCR"">"
5377"RTN","C0SXPATH",169,0)
5378 . . . S C0CN=C0CN+1 ; MOVE TO THE NEXT ONE
5379"RTN","C0SXPATH",170,0)
5380 . . E D ; AT THE DATA NODE
5381"RTN","C0SXPATH",171,0)
5382 . . . S ZA=$QS(G,C0CN) ; PULL OUT THE SUBSCRIPT
5383"RTN","C0SXPATH",172,0)
5384 . . . D ZXVAL(ZA,@G) ; OUTPUT <X>VAL</X> FOR DATA NODE
5385"RTN","C0SXPATH",173,0)
5386 . . . S FWD=0 ; GO BACKWARDS
5387"RTN","C0SXPATH",174,0)
5388 . I 'FWD D ;GOING BACKWARDS
5389"RTN","C0SXPATH",175,0)
5390 . . S GN=$Q(@G) ;NEXT XPATH
5391"RTN","C0SXPATH",176,0)
5392 . . ;W "NEXT!",GN,!
5393"RTN","C0SXPATH",177,0)
5394 . . S C0CN=C0CN-1 ; PREVIOUS SUBSCRIPT
5395"RTN","C0SXPATH",178,0)
5396 . . I GN'="" D ;
5397"RTN","C0SXPATH",179,0)
5398 . . . I $QS(G,C0CN)'=$QS(GN,C0CN) D ; NEED TO CLOSE OFF ELEMENT
5399"RTN","C0SXPATH",180,0)
5400 . . . . D ZXC($QS(G,C0CN)) ;
5401"RTN","C0SXPATH",181,0)
5402 . . . E I GN'="" D ; MORE ELEMENTS AT THIS LEVEL
5403"RTN","C0SXPATH",182,0)
5404 . . . . S G=$Q(@G) ; ADVANCE TO NEW XPATH
5405"RTN","C0SXPATH",183,0)
5406 . . . . S C0CN=C0CN+1 ; GET READY TO PROCESS NEXT SUBSCRIPT
5407"RTN","C0SXPATH",184,0)
5408 . . . . S FWD=1 ; GOING FORWARD NOW
5409"RTN","C0SXPATH",185,0)
5410 . I (GN="")&(C0CN=1) D Q ; WHEN WE ARE ALL DONE
5411"RTN","C0SXPATH",186,0)
5412 . . D ZXC($QS(G,C0CN)) ; LAST ONE
5413"RTN","C0SXPATH",187,0)
5414 . . S ZQ=1 ; QUIT NOW
5415"RTN","C0SXPATH",188,0)
5416 Q
5417"RTN","C0SXPATH",189,0)
5418 ;
5419"RTN","C0SXPATH",190,0)
5420ZXO(WHAT)
5421"RTN","C0SXPATH",191,0)
5422 D PUSH("GA",WHAT)
5423"RTN","C0SXPATH",192,0)
5424 D PUSH(OUTXML,"<"_WHAT_">")
5425"RTN","C0SXPATH",193,0)
5426 Q
5427"RTN","C0SXPATH",194,0)
5428 ;
5429"RTN","C0SXPATH",195,0)
5430ZXC(WHAT)
5431"RTN","C0SXPATH",196,0)
5432 D POP("GA",.TMP)
5433"RTN","C0SXPATH",197,0)
5434 D PUSH(OUTXML,"</"_WHAT_">")
5435"RTN","C0SXPATH",198,0)
5436 Q
5437"RTN","C0SXPATH",199,0)
5438 ;
5439"RTN","C0SXPATH",200,0)
5440ZXVAL(WHAT,VAL)
5441"RTN","C0SXPATH",201,0)
5442 D PUSH(OUTXML,"<"_WHAT_">"_VAL_"</"_WHAT_">")
5443"RTN","C0SXPATH",202,0)
5444 Q
5445"RTN","C0SXPATH",203,0)
5446 ;
5447"RTN","C0SXPATH",204,0)
5448INDEX(IZXML,VDX,NOINX,TEMPLATE,REDUX) ; parse XML in IZXML and produce
5449"RTN","C0SXPATH",205,0)
5450 ; an XPATH index; REDUX is a string to be removed from each xpath
5451"RTN","C0SXPATH",206,0)
5452 ; GPL 7/14/09 OPTIONALLY GENERATE AN XML TEMPLATE IF PASSED BY NAME
5453"RTN","C0SXPATH",207,0)
5454 ; TEMPLATE IS IDENTICAL TO THE PARSED XML LINE BY LINE
5455"RTN","C0SXPATH",208,0)
5456 ; EXCEPT THAT DATA VALUES ARE REPLACED WITH @@XPATH@@ FOR THE XPATH OF THE TAG
5457"RTN","C0SXPATH",209,0)
5458 ; GPL 5/24/09 AND OPTIONALLY PRODUCE THE VDX ARRAY PASSED BY NAME
5459"RTN","C0SXPATH",210,0)
5460 ; @VDX@("XPATH")=VALUE
5461"RTN","C0SXPATH",211,0)
5462 ; ex. @IZXML@("XPATH")=FIRSTLINE^LASTLINE
5463"RTN","C0SXPATH",212,0)
5464 ; WHERE FIRSTLINE AND LASTLINE ARE THE BEGINNING AND ENDING OF THE
5465"RTN","C0SXPATH",213,0)
5466 ; XML SECTION
5467"RTN","C0SXPATH",214,0)
5468 ; IZXML IS PASSED BY NAME
5469"RTN","C0SXPATH",215,0)
5470 ; IF NOINX IS SET TO 1, NO INDEX WILL BE GENERATED, BUT THE VDX WILL BE
5471"RTN","C0SXPATH",216,0)
5472 N I,LINE,FIRST,LAST,CUR,TMP,MDX,FOUND,CURVAL,DVDX,LCNT
5473"RTN","C0SXPATH",217,0)
5474 N C0CSTK ; LEAVE OUT FOR DEBUGGING
5475"RTN","C0SXPATH",218,0)
5476 I '$D(REDUX) S REDUX=""
5477"RTN","C0SXPATH",219,0)
5478 I '$D(NOINX) S NOINX=0 ; IF NOT PASSED, GENERATE AN INDEX
5479"RTN","C0SXPATH",220,0)
5480 N ZXML
5481"RTN","C0SXPATH",221,0)
5482 I NOINX S ZXML=$NA(^TMP("C0CINDEX",$J)) ; TEMP PLACE FOR INDEX TO DISCARD
5483"RTN","C0SXPATH",222,0)
5484 E S ZXML=IZXML ; PLACE FOR INDEX TO KEEP
5485"RTN","C0SXPATH",223,0)
5486 I '$D(@IZXML@(0)) D ; IF COUNT NOT IN NODE 0 COUNT THEM
5487"RTN","C0SXPATH",224,0)
5488 . S I="",LCNT=0
5489"RTN","C0SXPATH",225,0)
5490 . F S I=$O(@IZXML@(I)) Q:I="" S LCNT=LCNT+1
5491"RTN","C0SXPATH",226,0)
5492 E S LCNT=@IZXML@(0) ; LINE COUNT PASSED IN ARRAY
5493"RTN","C0SXPATH",227,0)
5494 I LCNT=0 D Q ; NO XML PASSED
5495"RTN","C0SXPATH",228,0)
5496 . W "ERROR IN XML FILE",!
5497"RTN","C0SXPATH",229,0)
5498 S DVDX=0 ; DEFAULT DO NOT PRODUCE VDX INDEX
5499"RTN","C0SXPATH",230,0)
5500 I $D(VDX) S DVDX=1 ; IF NAME PASSED, DO VDX
5501"RTN","C0SXPATH",231,0)
5502 S C0CSTK(0)=0 ; INITIALIZE STACK
5503"RTN","C0SXPATH",232,0)
5504 K LKASD ; KILL LOOKASIDE ARRAY
5505"RTN","C0SXPATH",233,0)
5506 D MKLASD(.LKASD,IZXML) ;MAKE LOOK ASIDE BUFFER FOR MULTIPLES
5507"RTN","C0SXPATH",234,0)
5508 F I=1:1:LCNT D ; PROCESS THE ENTIRE ARRAY
5509"RTN","C0SXPATH",235,0)
5510 . S LINE=@IZXML@(I)
5511"RTN","C0SXPATH",236,0)
5512 . I $D(TEMPLATE) D ;IF TEMPLATE IS REQUESTED
5513"RTN","C0SXPATH",237,0)
5514 . . S @TEMPLATE@(I)=$$CLEAN(LINE)
5515"RTN","C0SXPATH",238,0)
5516 . ;W LINE,!
5517"RTN","C0SXPATH",239,0)
5518 . S FOUND=0 ; INTIALIZED FOUND FLAG
5519"RTN","C0SXPATH",240,0)
5520 . I LINE?.E1"<!".E S FOUND=1 ; SKIP OVER COMMENTS
5521"RTN","C0SXPATH",241,0)
5522 . I FOUND'=1 D
5523"RTN","C0SXPATH",242,0)
5524 . . I (LINE?.E1"<"1.E1"</".E)!(LINE?.E1"<"1.E1"/>".E) D
5525"RTN","C0SXPATH",243,0)
5526 . . . ; THIS IS THE CASE THERE SECTION BEGINS AND ENDS
5527"RTN","C0SXPATH",244,0)
5528 . . . ; ON THE SAME LINE
5529"RTN","C0SXPATH",245,0)
5530 . . . ; W "FOUND ",LINE,!
5531"RTN","C0SXPATH",246,0)
5532 . . . S FOUND=1 ; SET FOUND FLAG
5533"RTN","C0SXPATH",247,0)
5534 . . . S CUR=$$XNAME(LINE) ; EXTRACT THE NAME
5535"RTN","C0SXPATH",248,0)
5536 . . . S CUR=CUR_$G(LKASD(CUR,I)) ; HANDLE MULTIPLES
5537"RTN","C0SXPATH",249,0)
5538 . . . D PUSH("C0CSTK",CUR) ; ADD TO THE STACK
5539"RTN","C0SXPATH",250,0)
5540 . . . D MKMDX("C0CSTK",.MDX,REDUX) ; GENERATE THE M INDEX
5541"RTN","C0SXPATH",251,0)
5542 . . . ; W "MDX=",MDX,!
5543"RTN","C0SXPATH",252,0)
5544 . . . I $D(@ZXML@(MDX)) D ; IN THE INDEX, IS A MULTIPLE
5545"RTN","C0SXPATH",253,0)
5546 . . . . ;I '$D(ZDUP(MDX)) S ZDUP(MDX)=2
5547"RTN","C0SXPATH",254,0)
5548 . . . . ;E S ZDUP(MDX)=ZDUP(MDX)+1
5549"RTN","C0SXPATH",255,0)
5550 . . . . ;W "DUP:",MDX,!
5551"RTN","C0SXPATH",256,0)
5552 . . . . ;I '$D(CURVAL) S CURVAL=""
5553"RTN","C0SXPATH",257,0)
5554 . . . . ;I DVDX S @VDX@(MDX_"["_ZDUP(MDX)_"]")=CURVAL
5555"RTN","C0SXPATH",258,0)
5556 . . . . S $P(@ZXML@(MDX),"^",2)=I ; UPDATE LAST LINE NUMBER
5557"RTN","C0SXPATH",259,0)
5558 . . . I '$D(@ZXML@(MDX)) D ; NOT IN THE INDEX, NOT A MULTIPLE
5559"RTN","C0SXPATH",260,0)
5560 . . . . S @ZXML@(MDX)=I_"^"_I ; ADD INDEX ENTRY-FIRST AND LAST
5561"RTN","C0SXPATH",261,0)
5562 . . . . S CURVAL=$$XVAL(LINE) ; VALUE
5563"RTN","C0SXPATH",262,0)
5564 . . . . S $P(@ZXML@(MDX),"^",3)=CURVAL ; THIRD PIECE
5565"RTN","C0SXPATH",263,0)
5566 . . . . I DVDX S @VDX@(MDX)=CURVAL ; FILL IN VDX ARRAY IF REQUESTED
5567"RTN","C0SXPATH",264,0)
5568 . . . . I $D(TEMPLATE) D ; IF TEMPLATE IS REQUESTED
5569"RTN","C0SXPATH",265,0)
5570 . . . . . S LINE=$$CLEAN(LINE) ; CLEAN OUT CONTROL CHARACTERS
5571"RTN","C0SXPATH",266,0)
5572 . . . . . S @TEMPLATE@(I)=$P(LINE,">",1)_">@@"_MDX_"@@</"_$P(LINE,"</",2)
5573"RTN","C0SXPATH",267,0)
5574 . . . D POP("C0CSTK",.TMP) ; REMOVE FROM STACK
5575"RTN","C0SXPATH",268,0)
5576 . I FOUND'=1 D ; THE LINE DOESN'T CONTAIN THE START AND END
5577"RTN","C0SXPATH",269,0)
5578 . . I LINE?.E1"</"1.E D ; LINE CONTAINS END OF A SECTION
5579"RTN","C0SXPATH",270,0)
5580 . . . ; W "FOUND ",LINE,!
5581"RTN","C0SXPATH",271,0)
5582 . . . S FOUND=1 ; SET FOUND FLAG
5583"RTN","C0SXPATH",272,0)
5584 . . . S CUR=$$XNAME(LINE) ; EXTRACT THE NAME
5585"RTN","C0SXPATH",273,0)
5586 . . . D MKMDX("C0CSTK",.MDX) ; GENERATE THE M INDEX
5587"RTN","C0SXPATH",274,0)
5588 . . . S $P(@ZXML@(MDX),"^",2)=I ; UPDATE LAST LINE NUMBER
5589"RTN","C0SXPATH",275,0)
5590 . . . D POP("C0CSTK",.TMP) ; REMOVE FROM STACK
5591"RTN","C0SXPATH",276,0)
5592 . . . S TMP=$P(TMP,"[",1) ; REMOVE [X] FROM MULTIPLE
5593"RTN","C0SXPATH",277,0)
5594 . . . I TMP'=CUR D ; MALFORMED XML, END MUST MATCH START
5595"RTN","C0SXPATH",278,0)
5596 . . . . W "MALFORMED XML ",CUR,"LINE "_I_LINE,!
5597"RTN","C0SXPATH",279,0)
5598 . . . . D PARY("C0CSTK") ; PRINT OUT THE STACK FOR DEBUGING
5599"RTN","C0SXPATH",280,0)
5600 . . . . Q
5601"RTN","C0SXPATH",281,0)
5602 . I FOUND'=1 D ; THE LINE MIGHT CONTAIN A SECTION BEGINNING
5603"RTN","C0SXPATH",282,0)
5604 . . I (LINE?.E1"<"1.E)&(LINE'["?>") D ; BEGINNING OF A SECTION
5605"RTN","C0SXPATH",283,0)
5606 . . . ; W "FOUND ",LINE,!
5607"RTN","C0SXPATH",284,0)
5608 . . . S FOUND=1 ; SET FOUND FLAG
5609"RTN","C0SXPATH",285,0)
5610 . . . S CUR=$$XNAME(LINE) ; EXTRACT THE NAME
5611"RTN","C0SXPATH",286,0)
5612 . . . S CUR=CUR_$G(LKASD(CUR,I)) ; HANDLE MULTIPLES
5613"RTN","C0SXPATH",287,0)
5614 . . . D PUSH("C0CSTK",CUR) ; ADD TO THE STACK
5615"RTN","C0SXPATH",288,0)
5616 . . . D MKMDX("C0CSTK",.MDX) ; GENERATE THE M INDEX
5617"RTN","C0SXPATH",289,0)
5618 . . . ; W "MDX=",MDX,!
5619"RTN","C0SXPATH",290,0)
5620 . . . I $D(@ZXML@(MDX)) D ; IN THE INDEX, IS A MULTIPLE
5621"RTN","C0SXPATH",291,0)
5622 . . . . S $P(@ZXML@(MDX),"^",2)=I ; UPDATE LAST LINE NUMBER
5623"RTN","C0SXPATH",292,0)
5624 . . . . ;B
5625"RTN","C0SXPATH",293,0)
5626 . . . I '$D(@ZXML@(MDX)) D ; NOT IN THE INDEX, NOT A MULTIPLE
5627"RTN","C0SXPATH",294,0)
5628 . . . . S @ZXML@(MDX)=I_"^" ; INSERT INTO THE INDEX
5629"RTN","C0SXPATH",295,0)
5630 S @ZXML@("INDEXED")=""
5631"RTN","C0SXPATH",296,0)
5632 S @ZXML@("//")="1^"_LCNT ; ROOT XPATH
5633"RTN","C0SXPATH",297,0)
5634 I NOINX K @ZXML ; DELETE UNWANTED INDEX
5635"RTN","C0SXPATH",298,0)
5636 Q
5637"RTN","C0SXPATH",299,0)
5638 ;
5639"RTN","C0SXPATH",300,0)
5640MKLASD(OUTBUF,INARY) ; CREATE A LOOKASIDE BUFFER FOR MULTILPLES
5641"RTN","C0SXPATH",301,0)
5642 ;
5643"RTN","C0SXPATH",302,0)
5644 N ZI,ZN,ZA,ZLINE,ZLINE2,CUR,CUR2
5645"RTN","C0SXPATH",303,0)
5646 F ZI=1:1:LCNT-1 D ; PROCESS THE ENTIRE ARRAY
5647"RTN","C0SXPATH",304,0)
5648 . S ZLINE=@IZXML@(ZI)
5649"RTN","C0SXPATH",305,0)
5650 . I ZI<LCNT S ZLINE2=@IZXML@(ZI+1)
5651"RTN","C0SXPATH",306,0)
5652 . I ZLINE?.E1"</"1.E D ; NEXT LINE CONTAINS END OF A SECTION
5653"RTN","C0SXPATH",307,0)
5654 . . S CUR=$$XNAME(ZLINE) ; EXTRACT THE NAME
5655"RTN","C0SXPATH",308,0)
5656 . . I (ZLINE2?.E1"<"1.E)&(ZLINE'["?>") D ; BEGINNING OF A SECTION
5657"RTN","C0SXPATH",309,0)
5658 . . . S CUR2=$$XNAME(ZLINE2) ; EXTRACT THE NAME
5659"RTN","C0SXPATH",310,0)
5660 . . . I CUR=CUR2 D ; IF THIS IS A MULTIPLE
5661"RTN","C0SXPATH",311,0)
5662 . . . . S OUTBUF(CUR,ZI+1)=""
5663"RTN","C0SXPATH",312,0)
5664 ;ZWR OUTBUF
5665"RTN","C0SXPATH",313,0)
5666 S ZI=""
5667"RTN","C0SXPATH",314,0)
5668 F S ZI=$O(OUTBUF(ZI)) Q:ZI="" D ; FOR EACH KIND OF MULTIPLE
5669"RTN","C0SXPATH",315,0)
5670 . S ZN=$O(OUTBUF(ZI,"")) ; LINE NUMBER OF SECOND MULTIPLE
5671"RTN","C0SXPATH",316,0)
5672 . F S ZN=$O(@IZXML@(ZN),-1) Q:ZN="" I $E($P(@IZXML@(ZN),"<"_ZI,2),1,1)=">" Q ;
5673"RTN","C0SXPATH",317,0)
5674 . S OUTBUF(ZI,ZN)=""
5675"RTN","C0SXPATH",318,0)
5676 S ZA=1,ZI="",ZN=""
5677"RTN","C0SXPATH",319,0)
5678 F S ZI=$O(OUTBUF(ZI)) Q:ZI="" D ; ADDING THE COUNT FOR THE MULIPLES [x]
5679"RTN","C0SXPATH",320,0)
5680 . S ZN="",ZA=1
5681"RTN","C0SXPATH",321,0)
5682 . F S ZN=$O(OUTBUF(ZI,ZN)) Q:ZN="" D ;
5683"RTN","C0SXPATH",322,0)
5684 . . S OUTBUF(ZI,ZN)="["_ZA_"]"
5685"RTN","C0SXPATH",323,0)
5686 . . S ZA=ZA+1
5687"RTN","C0SXPATH",324,0)
5688 Q
5689"RTN","C0SXPATH",325,0)
5690 ;
5691"RTN","C0SXPATH",326,0)
5692CLEAN(STR,TR) ; extrinsic function; returns string
5693"RTN","C0SXPATH",327,0)
5694 ;; Removes all non printable characters from a string.
5695"RTN","C0SXPATH",328,0)
5696 ;; STR by Value
5697"RTN","C0SXPATH",329,0)
5698 ;; TR IS OPTIONAL TO IMPROVE PERFORMANCE
5699"RTN","C0SXPATH",330,0)
5700 N TR,I
5701"RTN","C0SXPATH",331,0)
5702 I '$D(TR) D ;
5703"RTN","C0SXPATH",332,0)
5704 . F I=0:1:31 S TR=$G(TR)_$C(I)
5705"RTN","C0SXPATH",333,0)
5706 . S TR=TR_$C(127)
5707"RTN","C0SXPATH",334,0)
5708 QUIT $TR(STR,TR)
5709"RTN","C0SXPATH",335,0)
5710 ;
5711"RTN","C0SXPATH",336,0)
5712QUERY(IARY,XPATH,OARY) ; RETURNS THE XML ARRAY MATCHING THE XPATH EXPRESSION
5713"RTN","C0SXPATH",337,0)
5714 ; XPATH IS OF THE FORM "//FIRST/SECOND/THIRD"
5715"RTN","C0SXPATH",338,0)
5716 ; IARY AND OARY ARE PASSED BY NAME
5717"RTN","C0SXPATH",339,0)
5718 I '$D(@IARY@("INDEXED")) D ; INDEX IS NOT PRESENT IN IARY
5719"RTN","C0SXPATH",340,0)
5720 . D INDEX(IARY) ; GENERATE AN INDEX FOR THE XML
5721"RTN","C0SXPATH",341,0)
5722 N FIRST,LAST ; FIRST AND LAST LINES OF ARRAY TO RETURN
5723"RTN","C0SXPATH",342,0)
5724 N TMP,I,J,QXPATH
5725"RTN","C0SXPATH",343,0)
5726 S FIRST=1
5727"RTN","C0SXPATH",344,0)
5728 I '$D(@IARY@(0)) D ; LINE COUNT NOT IN ZERO NODE
5729"RTN","C0SXPATH",345,0)
5730 . S @IARY@(0)=$O(@IARY@("//"),-1) ; THIS SHOULD USUALLY WORK
5731"RTN","C0SXPATH",346,0)
5732 S LAST=@IARY@(0) ; FIRST AND LAST DEFAULT TO ROOT
5733"RTN","C0SXPATH",347,0)
5734 I XPATH'="//" D ; NOT A ROOT QUERY
5735"RTN","C0SXPATH",348,0)
5736 . S TMP=@IARY@(XPATH) ; LOOK UP LINE VALUES
5737"RTN","C0SXPATH",349,0)
5738 . S FIRST=$P(TMP,"^",1)
5739"RTN","C0SXPATH",350,0)
5740 . S LAST=$P(TMP,"^",2)
5741"RTN","C0SXPATH",351,0)
5742 K @OARY
5743"RTN","C0SXPATH",352,0)
5744 S @OARY@(0)=+LAST-FIRST+1
5745"RTN","C0SXPATH",353,0)
5746 S J=1
5747"RTN","C0SXPATH",354,0)
5748 FOR I=FIRST:1:LAST D
5749"RTN","C0SXPATH",355,0)
5750 . S @OARY@(J)=@IARY@(I) ; COPY THE LINE TO OARY
5751"RTN","C0SXPATH",356,0)
5752 . S J=J+1
5753"RTN","C0SXPATH",357,0)
5754 ; ZWR OARY
5755"RTN","C0SXPATH",358,0)
5756 Q
5757"RTN","C0SXPATH",359,0)
5758 ;
5759"RTN","C0SXPATH",360,0)
5760XF(IDX,XPATH) ; EXTRINSIC TO RETURN THE STARTING LINE FROM AN XPATH
5761"RTN","C0SXPATH",361,0)
5762 ; INDEX WITH TWO PIECES START^FINISH
5763"RTN","C0SXPATH",362,0)
5764 ; IDX IS PASSED BY NAME
5765"RTN","C0SXPATH",363,0)
5766 Q $P(@IDX@(XPATH),"^",1)
5767"RTN","C0SXPATH",364,0)
5768 ;
5769"RTN","C0SXPATH",365,0)
5770XL(IDX,XPATH) ; EXTRINSIC TO RETURN THE LAST LINE FROM AN XPATH
5771"RTN","C0SXPATH",366,0)
5772 ; INDEX WITH TWO PIECES START^FINISH
5773"RTN","C0SXPATH",367,0)
5774 ; IDX IS PASSED BY NAME
5775"RTN","C0SXPATH",368,0)
5776 Q $P(@IDX@(XPATH),"^",2)
5777"RTN","C0SXPATH",369,0)
5778 ;
5779"RTN","C0SXPATH",370,0)
5780START(ISTR) ; EXTRINSIC TO RETURN THE STARTING LINE FROM AN INDEX
5781"RTN","C0SXPATH",371,0)
5782 ; TYPE STRING WITH THREE PIECES ARRAY;START;FINISH
5783"RTN","C0SXPATH",372,0)
5784 ; COMPANION TO FINISH ; IDX IS PASSED BY NAME
5785"RTN","C0SXPATH",373,0)
5786 Q $P(ISTR,";",2)
5787"RTN","C0SXPATH",374,0)
5788 ;
5789"RTN","C0SXPATH",375,0)
5790FINISH(ISTR) ; EXTRINSIC TO RETURN THE LAST LINE FROM AN INDEX
5791"RTN","C0SXPATH",376,0)
5792 ; TYPE STRING WITH THREE PIECES ARRAY;START;FINISH
5793"RTN","C0SXPATH",377,0)
5794 Q $P(ISTR,";",3)
5795"RTN","C0SXPATH",378,0)
5796 ;
5797"RTN","C0SXPATH",379,0)
5798ARRAY(ISTR) ; EXTRINSIC TO RETURN THE ARRAY REFERENCE FROM AN INDEX
5799"RTN","C0SXPATH",380,0)
5800 ; TYPE STRING WITH THREE PIECES ARRAY;START;FINISH
5801"RTN","C0SXPATH",381,0)
5802 Q $P(ISTR,";",1)
5803"RTN","C0SXPATH",382,0)
5804 ;
5805"RTN","C0SXPATH",383,0)
5806BUILD(BLIST,BDEST) ; A COPY MACHINE THAT TAKE INSTRUCTIONS IN ARRAY BLIST
5807"RTN","C0SXPATH",384,0)
5808 ; WHICH HAVE ARRAY;START;FINISH AND COPIES THEM TO DEST
5809"RTN","C0SXPATH",385,0)
5810 ; DEST IS CLEARED TO START
5811"RTN","C0SXPATH",386,0)
5812 ; USES PUSH TO DO THE COPY
5813"RTN","C0SXPATH",387,0)
5814 N I
5815"RTN","C0SXPATH",388,0)
5816 K @BDEST
5817"RTN","C0SXPATH",389,0)
5818 F I=1:1:@BLIST@(0) D ; FOR EACH INSTRUCTION IN BLIST
5819"RTN","C0SXPATH",390,0)
5820 . N J,ATMP
5821"RTN","C0SXPATH",391,0)
5822 . S ATMP=$$ARRAY(@BLIST@(I))
5823"RTN","C0SXPATH",392,0)
5824 . I $G(DEBUG) W "ATMP=",ATMP,!
5825"RTN","C0SXPATH",393,0)
5826 . I $G(DEBUG) W @BLIST@(I),!
5827"RTN","C0SXPATH",394,0)
5828 . F J=$$START(@BLIST@(I)):1:$$FINISH(@BLIST@(I)) D ;
5829"RTN","C0SXPATH",395,0)
5830 . . ; FOR EACH LINE IN THIS INSTR
5831"RTN","C0SXPATH",396,0)
5832 . . I $G(DEBUG) W "BDEST= ",BDEST,!
5833"RTN","C0SXPATH",397,0)
5834 . . I $G(DEBUG) W "ATMP= ",@ATMP@(J),!
5835"RTN","C0SXPATH",398,0)
5836 . . D PUSH(BDEST,@ATMP@(J))
5837"RTN","C0SXPATH",399,0)
5838 Q
5839"RTN","C0SXPATH",400,0)
5840 ;
5841"RTN","C0SXPATH",401,0)
5842QUEUE(BLST,ARRAY,FIRST,LAST) ; ADD AN ENTRY TO A BLIST
5843"RTN","C0SXPATH",402,0)
5844 ;
5845"RTN","C0SXPATH",403,0)
5846 I $G(DEBUG) W "QUEUEING ",BLST,!
5847"RTN","C0SXPATH",404,0)
5848 D PUSH(BLST,ARRAY_";"_FIRST_";"_LAST)
5849"RTN","C0SXPATH",405,0)
5850 Q
5851"RTN","C0SXPATH",406,0)
5852 ;
5853"RTN","C0SXPATH",407,0)
5854CP(CPSRC,CPDEST) ; COPIES CPSRC TO CPDEST BOTH PASSED BY NAME
5855"RTN","C0SXPATH",408,0)
5856 ; KILLS CPDEST FIRST
5857"RTN","C0SXPATH",409,0)
5858 N CPINSTR
5859"RTN","C0SXPATH",410,0)
5860 I $G(DEBUG) W "MADE IT TO COPY",CPSRC,CPDEST,!
5861"RTN","C0SXPATH",411,0)
5862 I @CPSRC@(0)<1 D ; BAD LENGTH
5863"RTN","C0SXPATH",412,0)
5864 . W "ERROR IN COPY BAD SOURCE LENGTH: ",CPSRC,!
5865"RTN","C0SXPATH",413,0)
5866 . Q
5867"RTN","C0SXPATH",414,0)
5868 ; I '$D(@CPDEST@(0)) S @CPDEST@(0)=0 ; IF THE DEST IS EMPTY, INIT
5869"RTN","C0SXPATH",415,0)
5870 D QUEUE("CPINSTR",CPSRC,1,@CPSRC@(0)) ; BLIST FOR ENTIRE ARRAY
5871"RTN","C0SXPATH",416,0)
5872 D BUILD("CPINSTR",CPDEST)
5873"RTN","C0SXPATH",417,0)
5874 Q
5875"RTN","C0SXPATH",418,0)
5876 ;
5877"RTN","C0SXPATH",419,0)
5878QOPEN(QOBLIST,QOXML,QOXPATH) ; ADD ALL BUT THE LAST LINE OF QOXML TO QOBLIST
5879"RTN","C0SXPATH",420,0)
5880 ; WARNING NEED TO DO QCLOSE FOR SAME XML BEFORE CALLING BUILD
5881"RTN","C0SXPATH",421,0)
5882 ; QOXPATH IS OPTIONAL - WILL OPEN INSIDE THE XPATH POINT
5883"RTN","C0SXPATH",422,0)
5884 ; USED TO INSERT CHILDREN NODES
5885"RTN","C0SXPATH",423,0)
5886 I @QOXML@(0)<1 D ; MALFORMED XML
5887"RTN","C0SXPATH",424,0)
5888 . W "MALFORMED XML PASSED TO QOPEN: ",QOXML,!
5889"RTN","C0SXPATH",425,0)
5890 . Q
5891"RTN","C0SXPATH",426,0)
5892 I $G(DEBUG) W "DOING QOPEN",!
5893"RTN","C0SXPATH",427,0)
5894 N S1,E1,QOT,QOTMP
5895"RTN","C0SXPATH",428,0)
5896 S S1=1 ; OPEN FROM THE BEGINNING OF THE XML
5897"RTN","C0SXPATH",429,0)
5898 I $D(QOXPATH) D ; XPATH PROVIDED
5899"RTN","C0SXPATH",430,0)
5900 . D QUERY(QOXML,QOXPATH,"QOT") ; INSURE INDEX
5901"RTN","C0SXPATH",431,0)
5902 . S E1=$P(@QOXML@(QOXPATH),"^",2)-1
5903"RTN","C0SXPATH",432,0)
5904 I '$D(QOXPATH) D ; NO XPATH PROVIDED, OPEN AT ROOT
5905"RTN","C0SXPATH",433,0)
5906 . S E1=@QOXML@(0)-1
5907"RTN","C0SXPATH",434,0)
5908 D QUEUE(QOBLIST,QOXML,S1,E1)
5909"RTN","C0SXPATH",435,0)
5910 ; S QOTMP=QOXML_"^"_S1_"^"_E1
5911"RTN","C0SXPATH",436,0)
5912 ; D PUSH(QOBLIST,QOTMP)
5913"RTN","C0SXPATH",437,0)
5914 Q
5915"RTN","C0SXPATH",438,0)
5916 ;
5917"RTN","C0SXPATH",439,0)
5918QCLOSE(QCBLIST,QCXML,QCXPATH) ; CLOSE XML AFTER A QOPEN
5919"RTN","C0SXPATH",440,0)
5920 ; ADDS THE LIST LINE OF QCXML TO QCBLIST
5921"RTN","C0SXPATH",441,0)
5922 ; USED TO FINISH INSERTING CHILDERN NODES
5923"RTN","C0SXPATH",442,0)
5924 ; QCXPATH IS OPTIONAL - IF PROVIDED, WILL CLOSE UNTIL THE END
5925"RTN","C0SXPATH",443,0)
5926 ; IF QOPEN WAS CALLED WITH XPATH, QCLOSE SHOULD BE TOO
5927"RTN","C0SXPATH",444,0)
5928 I @QCXML@(0)<1 D ; MALFORMED XML
5929"RTN","C0SXPATH",445,0)
5930 . W "MALFORMED XML PASSED TO QCLOSE: ",QCXML,!
5931"RTN","C0SXPATH",446,0)
5932 I $G(DEBUG) W "GOING TO CLOSE",!
5933"RTN","C0SXPATH",447,0)
5934 N S1,E1,QCT,QCTMP
5935"RTN","C0SXPATH",448,0)
5936 S E1=@QCXML@(0) ; CLOSE UNTIL THE END OF THE XML
5937"RTN","C0SXPATH",449,0)
5938 I $D(QCXPATH) D ; XPATH PROVIDED
5939"RTN","C0SXPATH",450,0)
5940 . D QUERY(QCXML,QCXPATH,"QCT") ; INSURE INDEX
5941"RTN","C0SXPATH",451,0)
5942 . S S1=$P(@QCXML@(QCXPATH),"^",2) ; REMAINING XML
5943"RTN","C0SXPATH",452,0)
5944 I '$D(QCXPATH) D ; NO XPATH PROVIDED, CLOSE AT ROOT
5945"RTN","C0SXPATH",453,0)
5946 . S S1=@QCXML@(0)
5947"RTN","C0SXPATH",454,0)
5948 D QUEUE(QCBLIST,QCXML,S1,E1)
5949"RTN","C0SXPATH",455,0)
5950 ; D PUSH(QCBLIST,QCXML_";"_S1_";"_E1)
5951"RTN","C0SXPATH",456,0)
5952 Q
5953"RTN","C0SXPATH",457,0)
5954 ;
5955"RTN","C0SXPATH",458,0)
5956INSERT(INSXML,INSNEW,INSXPATH) ; INSERT INSNEW INTO INSXML AT THE
5957"RTN","C0SXPATH",459,0)
5958 ; INSXPATH XPATH POINT INSXPATH IS OPTIONAL - IF IT IS
5959"RTN","C0SXPATH",460,0)
5960 ; OMITTED, INSERTION WILL BE AT THE ROOT
5961"RTN","C0SXPATH",461,0)
5962 ; NOTE INSERT IS NON DESTRUCTIVE AND WILL ADD THE NEW
5963"RTN","C0SXPATH",462,0)
5964 ; XML AT THE END OF THE XPATH POINT
5965"RTN","C0SXPATH",463,0)
5966 ; INSXML AND INSNEW ARE PASSED BY NAME INSXPATH IS A VALUE
5967"RTN","C0SXPATH",464,0)
5968 N INSBLD,INSTMP
5969"RTN","C0SXPATH",465,0)
5970 I $G(DEBUG) W "DOING INSERT ",INSXML,INSNEW,INSXPATH,!
5971"RTN","C0SXPATH",466,0)
5972 I $G(DEBUG) F G1=1:1:@INSXML@(0) W @INSXML@(G1),!
5973"RTN","C0SXPATH",467,0)
5974 I '$D(@INSXML@(1)) D ; INSERT INTO AN EMPTY ARRAY
5975"RTN","C0SXPATH",468,0)
5976 . D CP^C0CXPATH(INSNEW,INSXML) ; JUST COPY INTO THE OUTPUT
5977"RTN","C0SXPATH",469,0)
5978 I $D(@INSXML@(1)) D ; IF ORIGINAL ARRAY IS NOT EMPTY
5979"RTN","C0SXPATH",470,0)
5980 . I '$D(@INSXML@(0)) S @INSXML@(0)=$O(@INSXML@(""),-1) ;SET LENGTH
5981"RTN","C0SXPATH",471,0)
5982 . I $D(INSXPATH) D ; XPATH PROVIDED
5983"RTN","C0SXPATH",472,0)
5984 . . D QOPEN("INSBLD",INSXML,INSXPATH) ; COPY THE BEFORE
5985"RTN","C0SXPATH",473,0)
5986 . . I $G(DEBUG) D PARY^C0CXPATH("INSBLD")
5987"RTN","C0SXPATH",474,0)
5988 . I '$D(INSXPATH) D ; NO XPATH PROVIDED, OPEN AT ROOT
5989"RTN","C0SXPATH",475,0)
5990 . . D QOPEN("INSBLD",INSXML,"//") ; OPEN WITH ROOT XPATH
5991"RTN","C0SXPATH",476,0)
5992 . I '$D(@INSNEW@(0)) S @INSNEW@(0)=$O(@INSNEW@(""),-1) ;SIZE OF XML
5993"RTN","C0SXPATH",477,0)
5994 . D QUEUE("INSBLD",INSNEW,1,@INSNEW@(0)) ; COPY IN NEW XML
5995"RTN","C0SXPATH",478,0)
5996 . I $D(INSXPATH) D ; XPATH PROVIDED
5997"RTN","C0SXPATH",479,0)
5998 . . D QCLOSE("INSBLD",INSXML,INSXPATH) ; CLOSE WITH XPATH
5999"RTN","C0SXPATH",480,0)
6000 . I '$D(INSXPATH) D ; NO XPATH PROVIDED, CLOSE AT ROOT
6001"RTN","C0SXPATH",481,0)
6002 . . D QCLOSE("INSBLD",INSXML,"//") ; CLOSE WITH ROOT XPATH
6003"RTN","C0SXPATH",482,0)
6004 . D BUILD("INSBLD","INSTMP") ; PUT RESULTS IN INDEST
6005"RTN","C0SXPATH",483,0)
6006 . D CP^C0CXPATH("INSTMP",INSXML) ; COPY BUFFER TO SOURCE
6007"RTN","C0SXPATH",484,0)
6008 Q
6009"RTN","C0SXPATH",485,0)
6010 ;
6011"RTN","C0SXPATH",486,0)
6012INSINNER(INNXML,INNNEW,INNXPATH) ; INSERT THE INNER XML OF INNNEW
6013"RTN","C0SXPATH",487,0)
6014 ; INTO INNXML AT THE INNXPATH XPATH POINT
6015"RTN","C0SXPATH",488,0)
6016 ;
6017"RTN","C0SXPATH",489,0)
6018 N INNBLD,UXPATH
6019"RTN","C0SXPATH",490,0)
6020 N INNTBUF
6021"RTN","C0SXPATH",491,0)
6022 S INNTBUF=$NA(^TMP($J,"INNTBUF"))
6023"RTN","C0SXPATH",492,0)
6024 I '$D(INNXPATH) D ; XPATH NOT PASSED
6025"RTN","C0SXPATH",493,0)
6026 . S UXPATH="//" ; USE ROOT XPATH
6027"RTN","C0SXPATH",494,0)
6028 I $D(INNXPATH) S UXPATH=INNXPATH ; USE THE XPATH THAT'S PASSED
6029"RTN","C0SXPATH",495,0)
6030 I '$D(@INNXML@(0)) D ; INNXML IS EMPTY
6031"RTN","C0SXPATH",496,0)
6032 . D QUEUE^C0CXPATH("INNBLD",INNNEW,2,@INNNEW@(0)-1) ; JUST INNER
6033"RTN","C0SXPATH",497,0)
6034 . D BUILD("INNBLD",INNXML)
6035"RTN","C0SXPATH",498,0)
6036 I @INNXML@(0)>0 D ; NOT EMPTY
6037"RTN","C0SXPATH",499,0)
6038 . D QOPEN("INNBLD",INNXML,UXPATH) ;
6039"RTN","C0SXPATH",500,0)
6040 . D QUEUE("INNBLD",INNNEW,2,@INNNEW@(0)-1) ; JUST INNER XML
6041"RTN","C0SXPATH",501,0)
6042 . D QCLOSE("INNBLD",INNXML,UXPATH)
6043"RTN","C0SXPATH",502,0)
6044 . D BUILD("INNBLD",INNTBUF) ; BUILD TO BUFFER
6045"RTN","C0SXPATH",503,0)
6046 . D CP(INNTBUF,INNXML) ; COPY BUFFER TO DEST
6047"RTN","C0SXPATH",504,0)
6048 Q
6049"RTN","C0SXPATH",505,0)
6050 ;
6051"RTN","C0SXPATH",506,0)
6052INSB4(XDEST,XNEW) ; INSERT XNEW AT THE BEGINNING OF XDEST
6053"RTN","C0SXPATH",507,0)
6054 ; BUT XDEST AN XNEW ARE PASSED BY NAME
6055"RTN","C0SXPATH",508,0)
6056 N XBLD,XTMP
6057"RTN","C0SXPATH",509,0)
6058 D QUEUE("XBLD",XDEST,1,1) ; NEED TO PRESERVE SECTION ROOT
6059"RTN","C0SXPATH",510,0)
6060 D QUEUE("XBLD",XNEW,1,@XNEW@(0)) ; ALL OF NEW XML FIRST
6061"RTN","C0SXPATH",511,0)
6062 D QUEUE("XBLD",XDEST,2,@XDEST@(0)) ; FOLLOWED BY THE REST OF SECTION
6063"RTN","C0SXPATH",512,0)
6064 D BUILD("XBLD","XTMP") ; BUILD THE RESULT
6065"RTN","C0SXPATH",513,0)
6066 D CP("XTMP",XDEST) ; COPY TO THE DESTINATION
6067"RTN","C0SXPATH",514,0)
6068 I $G(DEBUG) D PARY("XDEST")
6069"RTN","C0SXPATH",515,0)
6070 Q
6071"RTN","C0SXPATH",516,0)
6072 ;
6073"RTN","C0SXPATH",517,0)
6074REPLACE(REXML,RENEW,REXPATH) ; REPLACE THE XML AT THE XPATH POINT
6075"RTN","C0SXPATH",518,0)
6076 ; WITH RENEW - NOTE THIS WILL DELETE WHAT WAS THERE BEFORE
6077"RTN","C0SXPATH",519,0)
6078 ; REXML AND RENEW ARE PASSED BY NAME XPATH IS A VALUE
6079"RTN","C0SXPATH",520,0)
6080 ; THE DELETED XML IS PUT IN ^TMP($J,"REPLACE_OLD")
6081"RTN","C0SXPATH",521,0)
6082 N REBLD,XFIRST,XLAST,OLD,XNODE,RETMP
6083"RTN","C0SXPATH",522,0)
6084 S OLD=$NA(^TMP($J,"REPLACE_OLD"))
6085"RTN","C0SXPATH",523,0)
6086 D QUERY(REXML,REXPATH,OLD) ; CREATE INDEX, TEST XPATH, MAKE OLD
6087"RTN","C0SXPATH",524,0)
6088 S XNODE=@REXML@(REXPATH) ; PULL OUT FIRST AND LAST LINE PTRS
6089"RTN","C0SXPATH",525,0)
6090 S XFIRST=$P(XNODE,"^",1)
6091"RTN","C0SXPATH",526,0)
6092 S XLAST=$P(XNODE,"^",2)
6093"RTN","C0SXPATH",527,0)
6094 I RENEW="" D ; WE ARE DELETING A SECTION, MUST SAVE THE TAG
6095"RTN","C0SXPATH",528,0)
6096 . D QUEUE("REBLD",REXML,1,XFIRST) ; THE BEFORE
6097"RTN","C0SXPATH",529,0)
6098 . D QUEUE("REBLD",REXML,XLAST,@REXML@(0)) ; THE REST
6099"RTN","C0SXPATH",530,0)
6100 I RENEW'="" D ; NEW XML IS NOT NULL
6101"RTN","C0SXPATH",531,0)
6102 . D QUEUE("REBLD",REXML,1,XFIRST-1) ; THE BEFORE
6103"RTN","C0SXPATH",532,0)
6104 . D QUEUE("REBLD",RENEW,1,@RENEW@(0)) ; THE NEW
6105"RTN","C0SXPATH",533,0)
6106 . D QUEUE("REBLD",REXML,XLAST+1,@REXML@(0)) ; THE REST
6107"RTN","C0SXPATH",534,0)
6108 I $G(DEBUG) W "REPLACE PREBUILD",!
6109"RTN","C0SXPATH",535,0)
6110 I $G(DEBUG) D PARY("REBLD")
6111"RTN","C0SXPATH",536,0)
6112 D BUILD("REBLD","RTMP")
6113"RTN","C0SXPATH",537,0)
6114 K @REXML ; KILL WHAT WAS THERE
6115"RTN","C0SXPATH",538,0)
6116 D CP("RTMP",REXML) ; COPY IN THE RESULT
6117"RTN","C0SXPATH",539,0)
6118 Q
6119"RTN","C0SXPATH",540,0)
6120 ;
6121"RTN","C0SXPATH",541,0)
6122DELETE(REXML,REXPATH) ; DELETE THE XML AT THE XPATH POINT
6123"RTN","C0SXPATH",542,0)
6124 ; REXML IS PASSED BY NAME XPATH IS A VALUE
6125"RTN","C0SXPATH",543,0)
6126 N REBLD,XFIRST,XLAST,OLD,XNODE,RETMP
6127"RTN","C0SXPATH",544,0)
6128 S OLD=$NA(^TMP($J,"REPLACE_OLD"))
6129"RTN","C0SXPATH",545,0)
6130 D QUERY(REXML,REXPATH,OLD) ; CREATE INDEX, TEST XPATH, MAKE OLD
6131"RTN","C0SXPATH",546,0)
6132 S XNODE=@REXML@(REXPATH) ; PULL OUT FIRST AND LAST LINE PTRS
6133"RTN","C0SXPATH",547,0)
6134 S XFIRST=$P(XNODE,"^",1)
6135"RTN","C0SXPATH",548,0)
6136 S XLAST=$P(XNODE,"^",2)
6137"RTN","C0SXPATH",549,0)
6138 D QUEUE("REBLD",REXML,1,XFIRST-1) ; THE BEFORE
6139"RTN","C0SXPATH",550,0)
6140 D QUEUE("REBLD",REXML,XLAST+1,@REXML@(0)) ; THE REST
6141"RTN","C0SXPATH",551,0)
6142 I $G(DEBUG) D PARY("REBLD")
6143"RTN","C0SXPATH",552,0)
6144 D BUILD("REBLD","RTMP")
6145"RTN","C0SXPATH",553,0)
6146 K @REXML ; KILL WHAT WAS THERE
6147"RTN","C0SXPATH",554,0)
6148 D CP("RTMP",REXML) ; COPY IN THE RESULT
6149"RTN","C0SXPATH",555,0)
6150 Q
6151"RTN","C0SXPATH",556,0)
6152 ;
6153"RTN","C0SXPATH",557,0)
6154MISSING(IXML,OARY) ; SEARTH THROUGH INXLM AND PUT ANY @@X@@ VARS IN OARY
6155"RTN","C0SXPATH",558,0)
6156 ; W "Reporting on the missing",!
6157"RTN","C0SXPATH",559,0)
6158 ; W OARY
6159"RTN","C0SXPATH",560,0)
6160 I '$D(@IXML@(0)) W "MALFORMED XML PASSED TO MISSING",! Q
6161"RTN","C0SXPATH",561,0)
6162 N I
6163"RTN","C0SXPATH",562,0)
6164 S @OARY@(0)=0 ; INITIALIZED MISSING COUNT
6165"RTN","C0SXPATH",563,0)
6166 F I=1:1:@IXML@(0) D ; LOOP THROUGH WHOLE ARRAY
6167"RTN","C0SXPATH",564,0)
6168 . I @IXML@(I)?.E1"@@".E D ; MISSING VARIABLE HERE
6169"RTN","C0SXPATH",565,0)
6170 . . D PUSH^C0CXPATH(OARY,$P(@IXML@(I),"@@",2)) ; ADD TO OUTARY
6171"RTN","C0SXPATH",566,0)
6172 . . Q
6173"RTN","C0SXPATH",567,0)
6174 Q
6175"RTN","C0SXPATH",568,0)
6176 ;
6177"RTN","C0SXPATH",569,0)
6178MAP(IXML,INARY,OXML) ; SUBSTITUTE MULTIPLE @@X@@ VARS WITH VALUES IN INARY
6179"RTN","C0SXPATH",570,0)
6180 ; AND PUT THE RESULTS IN OXML
6181"RTN","C0SXPATH",571,0)
6182 N XCNT
6183"RTN","C0SXPATH",572,0)
6184 I '$D(DEBUG) S DEBUG=0
6185"RTN","C0SXPATH",573,0)
6186 I '$D(IXML) W "MALFORMED XML PASSED TO MAP",! Q
6187"RTN","C0SXPATH",574,0)
6188 I '$D(@IXML@(0)) D ; INITIALIZE COUNT
6189"RTN","C0SXPATH",575,0)
6190 . S XCNT=$O(@IXML@(""),-1)
6191"RTN","C0SXPATH",576,0)
6192 E S XCNT=@IXML@(0) ;COUNT
6193"RTN","C0SXPATH",577,0)
6194 I $O(@INARY@(""))="" W "EMPTY ARRAY PASSED TO MAP",! Q
6195"RTN","C0SXPATH",578,0)
6196 N I,J,TNAM,TVAL,TSTR
6197"RTN","C0SXPATH",579,0)
6198 S @OXML@(0)=XCNT ; TOTAL LINES IN OUTPUT
6199"RTN","C0SXPATH",580,0)
6200 F I=1:1:XCNT D ; LOOP THROUGH WHOLE ARRAY
6201"RTN","C0SXPATH",581,0)
6202 . S @OXML@(I)=@IXML@(I) ; COPY THE LINE TO OUTPUT
6203"RTN","C0SXPATH",582,0)
6204 . I @OXML@(I)?.E1"@@".E D ; IS THERE A VARIABLE HERE?
6205"RTN","C0SXPATH",583,0)
6206 . . S TSTR=$P(@IXML@(I),"@@",1) ; INIT TO PART BEFORE VARS
6207"RTN","C0SXPATH",584,0)
6208 . . F J=2:2:10 D Q:$P(@IXML@(I),"@@",J+2)="" ; QUIT IF NO MORE VARS
6209"RTN","C0SXPATH",585,0)
6210 . . . I DEBUG W "IN MAPPING LOOP: ",TSTR,!
6211"RTN","C0SXPATH",586,0)
6212 . . . S TNAM=$P(@OXML@(I),"@@",J) ; EXTRACT THE VARIABLE NAME
6213"RTN","C0SXPATH",587,0)
6214 . . . S TVAL="@@"_$P(@IXML@(I),"@@",J)_"@@" ; DEFAULT UNCHANGED
6215"RTN","C0SXPATH",588,0)
6216 . . . I $D(@INARY@(TNAM)) D ; IS THE VARIABLE IN THE MAP?
6217"RTN","C0SXPATH",589,0)
6218 . . . . I '$D(@INARY@(TNAM,"F")) D ; NOT A SPECIAL FIELD
6219"RTN","C0SXPATH",590,0)
6220 . . . . . S TVAL=@INARY@(TNAM) ; PULL OUT MAPPED VALUE
6221"RTN","C0SXPATH",591,0)
6222 . . . . E D DOFLD ; PROCESS A FIELD
6223"RTN","C0SXPATH",592,0)
6224 . . . S TVAL=$$SYMENC^MXMLUTL(TVAL) ;MAKE SURE THE VALUE IS XML SAFE
6225"RTN","C0SXPATH",593,0)
6226 . . . S TSTR=TSTR_TVAL_$P(@IXML@(I),"@@",J+1) ; ADD VAR AND PART AFTER
6227"RTN","C0SXPATH",594,0)
6228 . . S @OXML@(I)=TSTR ; COPY LINE WITH MAPPED VALUES
6229"RTN","C0SXPATH",595,0)
6230 . . I DEBUG W TSTR
6231"RTN","C0SXPATH",596,0)
6232 I DEBUG W "MAPPED",!
6233"RTN","C0SXPATH",597,0)
6234 Q
6235"RTN","C0SXPATH",598,0)
6236 ;
6237"RTN","C0SXPATH",599,0)
6238DOFLD ; PROCESS A FILEMAN FIELD REFERENCED BY A VARIABLE
6239"RTN","C0SXPATH",600,0)
6240 ;
6241"RTN","C0SXPATH",601,0)
6242 Q
6243"RTN","C0SXPATH",602,0)
6244 ;
6245"RTN","C0SXPATH",603,0)
6246TRIM(THEXML) ; TAKES OUT ALL NULL ELEMENTS
6247"RTN","C0SXPATH",604,0)
6248 ; THEXML IS PASSED BY NAME
6249"RTN","C0SXPATH",605,0)
6250 N I,J,TMPXML,DEL,FOUND,INTXT
6251"RTN","C0SXPATH",606,0)
6252 S FOUND=0
6253"RTN","C0SXPATH",607,0)
6254 S INTXT=0
6255"RTN","C0SXPATH",608,0)
6256 I $G(DEBUG) W "DELETING EMPTY ELEMENTS",!
6257"RTN","C0SXPATH",609,0)
6258 F I=1:1:(@THEXML@(0)-1) D ; LOOP THROUGH ENTIRE ARRAY
6259"RTN","C0SXPATH",610,0)
6260 . S J=@THEXML@(I)
6261"RTN","C0SXPATH",611,0)
6262 . I J["<text>" D
6263"RTN","C0SXPATH",612,0)
6264 . . S INTXT=1 ; IN HTML SECTION, DON'T TRIM
6265"RTN","C0SXPATH",613,0)
6266 . . I $G(DEBUG) W "IN HTML SECTION",!
6267"RTN","C0SXPATH",614,0)
6268 . N JM,JP,JPX ; JMINUS AND JPLUS
6269"RTN","C0SXPATH",615,0)
6270 . S JM=@THEXML@(I-1) ; LINE BEFORE
6271"RTN","C0SXPATH",616,0)
6272 . I JM["</text>" S INTXT=0 ; LEFT HTML SECTION,START TRIM
6273"RTN","C0SXPATH",617,0)
6274 . S JP=@THEXML@(I+1) ; LINE AFTER
6275"RTN","C0SXPATH",618,0)
6276 . I INTXT=0 D ; IF NOT IN AN HTML SECTION
6277"RTN","C0SXPATH",619,0)
6278 . . S JPX=$TR(JP,"/","") ; REMOVE THE SLASH
6279"RTN","C0SXPATH",620,0)
6280 . . I J=JPX D ; AN EMPTY ELEMENT ON TWO LINES
6281"RTN","C0SXPATH",621,0)
6282 . . . I $G(DEBUG) W I,J,JP,!
6283"RTN","C0SXPATH",622,0)
6284 . . . S FOUND=1 ; FOUND SOMETHING TO BE DELETED
6285"RTN","C0SXPATH",623,0)
6286 . . . S DEL(I)="" ; SET LINE TO DELETE
6287"RTN","C0SXPATH",624,0)
6288 . . . S DEL(I+1)="" ; SET NEXT LINE TO DELETE
6289"RTN","C0SXPATH",625,0)
6290 . . I J["><" D ; AN EMPTY ELEMENT ON ONE LINE
6291"RTN","C0SXPATH",626,0)
6292 . . . I $G(DEBUG) W I,J,!
6293"RTN","C0SXPATH",627,0)
6294 . . . S FOUND=1 ; FOUND SOMETHING TO BE DELETED
6295"RTN","C0SXPATH",628,0)
6296 . . . S DEL(I)="" ; SET THE EMPTY LINE UP TO BE DELETED
6297"RTN","C0SXPATH",629,0)
6298 . . . I JM=JPX D ;
6299"RTN","C0SXPATH",630,0)
6300 . . . . I $G(DEBUG) W I,JM_J_JPX,!
6301"RTN","C0SXPATH",631,0)
6302 . . . . S DEL(I-1)=""
6303"RTN","C0SXPATH",632,0)
6304 . . . . S DEL(I+1)="" ; SET THE SURROUNDING LINES FOR DEL
6305"RTN","C0SXPATH",633,0)
6306 ; . I J'["><" D PUSH("TMPXML",J)
6307"RTN","C0SXPATH",634,0)
6308 I FOUND D ; NEED TO DELETE THINGS
6309"RTN","C0SXPATH",635,0)
6310 . F I=1:1:@THEXML@(0) D ; COPY ARRAY LEAVING OUT DELELTED LINES
6311"RTN","C0SXPATH",636,0)
6312 . . I '$D(DEL(I)) D ; IF THE LINE IS NOT DELETED
6313"RTN","C0SXPATH",637,0)
6314 . . . D PUSH("TMPXML",@THEXML@(I)) ; COPY TO TMPXML ARRAY
6315"RTN","C0SXPATH",638,0)
6316 . D CP("TMPXML",THEXML) ; REPLACE THE XML WITH THE COPY
6317"RTN","C0SXPATH",639,0)
6318 Q FOUND
6319"RTN","C0SXPATH",640,0)
6320 ;
6321"RTN","C0SXPATH",641,0)
6322UNMARK(XSEC) ; REMOVE MARKUP FROM FIRST AND LAST LINE OF XML
6323"RTN","C0SXPATH",642,0)
6324 ; XSEC IS A SECTION PASSED BY NAME
6325"RTN","C0SXPATH",643,0)
6326 N XBLD,XTMP
6327"RTN","C0SXPATH",644,0)
6328 D QUEUE("XBLD",XSEC,2,@XSEC@(0)-1) ; BUILD LIST FOR INNER XML
6329"RTN","C0SXPATH",645,0)
6330 D BUILD("XBLD","XTMP") ; BUILD THE RESULT
6331"RTN","C0SXPATH",646,0)
6332 D CP("XTMP",XSEC) ; REPLACE PASSED XML
6333"RTN","C0SXPATH",647,0)
6334 Q
6335"RTN","C0SXPATH",648,0)
6336 ;
6337"RTN","C0SXPATH",649,0)
6338PARY(GLO,ZN) ;PRINT AN ARRAY
6339"RTN","C0SXPATH",650,0)
6340 ; IF ZN=-1 NO LINE NUMBERS
6341"RTN","C0SXPATH",651,0)
6342 N I
6343"RTN","C0SXPATH",652,0)
6344 F I=1:1:@GLO@(0) D ;
6345"RTN","C0SXPATH",653,0)
6346 . I $G(ZN)=-1 W @GLO@(I),!
6347"RTN","C0SXPATH",654,0)
6348 . E W I_" "_@GLO@(I),!
6349"RTN","C0SXPATH",655,0)
6350 Q
6351"RTN","C0SXPATH",656,0)
6352 ;
6353"RTN","C0SXPATH",657,0)
6354H2ARY(IARYRTN,IHASH,IPRE) ; CONVERT IHASH TO RETURN ARRAY
6355"RTN","C0SXPATH",658,0)
6356 ; IPRE IS OPTIONAL PREFIX FOR THE ELEMENTS. USED FOR MUPTIPLES 1^"VAR"^VALUE
6357"RTN","C0SXPATH",659,0)
6358 I '$D(IPRE) S IPRE=""
6359"RTN","C0SXPATH",660,0)
6360 N H2I S H2I=""
6361"RTN","C0SXPATH",661,0)
6362 ; W $O(@IHASH@(H2I)),!
6363"RTN","C0SXPATH",662,0)
6364 F S H2I=$O(@IHASH@(H2I)) Q:H2I="" D ; FOR EACH ELEMENT OF THE HASH
6365"RTN","C0SXPATH",663,0)
6366 . I $QS(H2I,$QL(H2I))="M" D Q ; SPECIAL CASE FOR MULTIPLES
6367"RTN","C0SXPATH",664,0)
6368 . . ;W H2I_"^"_@IHASH@(H2I),!
6369"RTN","C0SXPATH",665,0)
6370 . . N IH,IHI
6371"RTN","C0SXPATH",666,0)
6372 . . S IH=$NA(@IHASH@(H2I)) ;
6373"RTN","C0SXPATH",667,0)
6374 . . S IH2A=$O(@IH@("")) ; SKIP OVER MULTIPLE DISCRIPTOR
6375"RTN","C0SXPATH",668,0)
6376 . . S IH2=$NA(@IH@(IH2A)) ; PAST THE "M","DIRETIONS" FOR EXAMPLE
6377"RTN","C0SXPATH",669,0)
6378 . . S IHI="" ; INDEX INTO "M" MULTIPLES
6379"RTN","C0SXPATH",670,0)
6380 . . F S IHI=$O(@IH2@(IHI)) Q:IHI="" D ; FOR EACH SUB-MULTIPLE
6381"RTN","C0SXPATH",671,0)
6382 . . . ; W @IH@(IHI)
6383"RTN","C0SXPATH",672,0)
6384 . . . S IH3=$NA(@IH2@(IHI))
6385"RTN","C0SXPATH",673,0)
6386 . . . ; W "HEY",IH3,!
6387"RTN","C0SXPATH",674,0)
6388 . . . D H2ARY(.IARYRTN,IH3,IPRE_";"_IHI) ; RECURSIVE CALL - INDENTED ELEMENTS
6389"RTN","C0SXPATH",675,0)
6390 . . ; W IH,!
6391"RTN","C0SXPATH",676,0)
6392 . . ; W "C0CZZ",!
6393"RTN","C0SXPATH",677,0)
6394 . . ; W $NA(@IHASH@(H2I)),!
6395"RTN","C0SXPATH",678,0)
6396 . . Q ;
6397"RTN","C0SXPATH",679,0)
6398 . D PUSH(IARYRTN,IPRE_"^"_H2I_"^"_@IHASH@(H2I))
6399"RTN","C0SXPATH",680,0)
6400 . ; W @IARYRTN@(0),!
6401"RTN","C0SXPATH",681,0)
6402 Q
6403"RTN","C0SXPATH",682,0)
6404 ;
6405"RTN","C0SXPATH",683,0)
6406XVARS(XVRTN,XVIXML) ; RETURNS AN ARRAY XVRTN OF ALL UNIQUE VARIABLES
6407"RTN","C0SXPATH",684,0)
6408 ; DEFINED IN INPUT XML XVIXML BY @@VAR@@
6409"RTN","C0SXPATH",685,0)
6410 ; XVRTN AND XVIXML ARE PASSED BY NAME
6411"RTN","C0SXPATH",686,0)
6412 ;
6413"RTN","C0SXPATH",687,0)
6414 N XVI,XVTMP,XVT
6415"RTN","C0SXPATH",688,0)
6416 F XVI=1:1:@XVIXML@(0) D ; FOR ALL LINES OF THE XML
6417"RTN","C0SXPATH",689,0)
6418 . S XVT=@XVIXML@(XVI)
6419"RTN","C0SXPATH",690,0)
6420 . I XVT["@@" S XVTMP($P(XVT,"@@",2))=XVI
6421"RTN","C0SXPATH",691,0)
6422 D H2ARY(XVRTN,"XVTMP")
6423"RTN","C0SXPATH",692,0)
6424 Q
6425"RTN","C0SXPATH",693,0)
6426 ;
6427"RTN","C0SXPATH",694,0)
6428DXVARS(DXIN) ;DISPLAY ALL VARIABLES IN A TEMPLATE
6429"RTN","C0SXPATH",695,0)
6430 ; IF PARAMETERS ARE NULL, DEFAULTS TO CCR TEMPLATE
6431"RTN","C0SXPATH",696,0)
6432 ;
6433"RTN","C0SXPATH",697,0)
6434 N DXUSE,DTMP ; DXUSE IS NAME OF VARIABLE, DTMP IS VARIABLE IF NOT SUPPLIED
6435"RTN","C0SXPATH",698,0)
6436 I DXIN="CCR" D ; NEED TO GO GET CCR TEMPLATE
6437"RTN","C0SXPATH",699,0)
6438 . D LOAD^C0CCCR0("DTMP") ; LOAD CCR TEMPLATE INTO DXTMP
6439"RTN","C0SXPATH",700,0)
6440 . S DXUSE="DTMP" ; DXUSE IS NAME
6441"RTN","C0SXPATH",701,0)
6442 E I DXIN="CCD" D ; NEED TO GO GET CCD TEMPLATE
6443"RTN","C0SXPATH",702,0)
6444 . D LOAD^C0CCCD1("DTMP") ; LOAD CCR TEMPLATE INTO DXTMP
6445"RTN","C0SXPATH",703,0)
6446 . S DXUSE="DTMP" ; DXUSE IS NAME
6447"RTN","C0SXPATH",704,0)
6448 E S DXUSE=DXIN ; IF PASSED THE TEMPLATE TO USE
6449"RTN","C0SXPATH",705,0)
6450 N DVARS ; PUT VARIABLE NAME RESULTS IN ARRAY HERE
6451"RTN","C0SXPATH",706,0)
6452 D XVARS("DVARS",DXUSE) ; PULL OUT VARS
6453"RTN","C0SXPATH",707,0)
6454 D PARY^C0CXPATH("DVARS") ;AND DISPLAY THEM
6455"RTN","C0SXPATH",708,0)
6456 Q
6457"RTN","C0SXPATH",709,0)
6458 ;
6459"RTN","C0SXPATH",710,0)
6460TEST ; Run all the test cases
6461"RTN","C0SXPATH",711,0)
6462 D TESTALL^C0CUNIT("C0CXPAT0")
6463"RTN","C0SXPATH",712,0)
6464 Q
6465"RTN","C0SXPATH",713,0)
6466 ;
6467"RTN","C0SXPATH",714,0)
6468ZTEST(WHICH) ; RUN ONE SET OF TESTS
6469"RTN","C0SXPATH",715,0)
6470 N ZTMP
6471"RTN","C0SXPATH",716,0)
6472 S DEBUG=1
6473"RTN","C0SXPATH",717,0)
6474 D ZLOAD^C0CUNIT("ZTMP","C0CXPAT0")
6475"RTN","C0SXPATH",718,0)
6476 D ZTEST^C0CUNIT(.ZTMP,WHICH)
6477"RTN","C0SXPATH",719,0)
6478 Q
6479"RTN","C0SXPATH",720,0)
6480 ;
6481"RTN","C0SXPATH",721,0)
6482TLIST ; LIST THE TESTS
6483"RTN","C0SXPATH",722,0)
6484 N ZTMP
6485"RTN","C0SXPATH",723,0)
6486 D ZLOAD^C0CUNIT("ZTMP","C0CXPAT0")
6487"RTN","C0SXPATH",724,0)
6488 D TLIST^C0CUNIT(.ZTMP)
6489"RTN","C0SXPATH",725,0)
6490 Q
6491"RTN","C0SXPATH",726,0)
6492 ;
6493"VER")
64948.0^22.0
6495**END**
6496**END**
Note: See TracBrowser for help on using the repository browser.