source: ccr/trunk/p/GPLVITAL.m@ 122

Last change on this file since 122 was 122, checked in by George Lilly, 16 years ago

XINDEX fixes. almost clean except for long var names and big files

File size: 11.8 KB
Line 
1GPLVITAL ; CCDCCR/CJE - CCR/CCD PROCESSING FOR VITALS ; 07/16/08
2 ;;0.1;CCDCCR;;JUL 16,2008;
3 ;Copyright 2008 WorldVistA. Licensed under the terms of the GNU
4 ;General Public License See attached copy of the License.
5 ;
6 ;This program is free software; you can redistribute it and/or modify
7 ;it under the terms of the GNU General Public License as published by
8 ;the Free Software Foundation; either version 2 of the License, or
9 ;(at your option) any later version.
10 ;
11 ;This program is distributed in the hope that it will be useful,
12 ;but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 ;GNU General Public License for more details.
15 ;
16 ;You should have received a copy of the GNU General Public License along
17 ;with this program; if not, write to the Free Software Foundation, Inc.,
18 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 ;
20 W "NO ENTRY FROM TOP",!
21 Q
22 ;
23EXTRACT(VITXML,DFN,VITOUTXML) ; EXTRACT VITALS INTO PROVIDED XML TEMPLATE
24 ;
25 ; VITXML AND OUTXML ARE PASSED BY NAME SO GLOBALS CAN BE USED
26 ; IVITXML CONTAINS ONLY THE VITALS SECTION OF THE OVERALL TEMPLATE
27 ;
28 N VITRSLT,J,K,VITPTMP,X,VITVMAP,TBUF,VORDR
29 D VITALS^ORQQVI(.VITRSLT,DFN,"","")
30 I $P(VITRSLT(1),U,2)="No vitals found." D ; NULL RESULT FROM RPC
31 . W "NO VITALS FOUND FROM VITALS RPC",!
32 . S @VITOUTXML@(0)=0
33 . Q
34 I $P(VITRSLT(1),U,2)="No vitals found." Q ; QUIT
35 ; ZWR RPCRSLT
36 S VITTVMAP=$NA(^TMP("GPLCCR",$J,"VITALS"))
37 S VITTARYTMP=$NA(^TMP("GPLCCR",$J,"VITALARYTMP"))
38 K @VITTVMAP,@VITTARYTMP ; KILL OLD ARRAY VALUES
39 N VSORT,VDATES,VCNT ; ARRAY FOR DATE SORTED VITALS INDEX
40 D VITDATES(.VDATES) ; PULL OUT THE DATES INTO AN ARRAY
41 ; I DEBUG ZWR VDATES ;DEBUG
42 S VCNT=$$SORTDT^CCRUTIL(.VSORT,.VDATES,-1) ; PUT VITALS IN REVERSE
43 ; DATE ORDER AND COUNT THEM. VSORT CONTAINS INDIRECT INDEXES ONLY
44 F J=1:1:VCNT D ; FOR EACH VITAL IN THE LIST
45 . I $D(VITRSLT(VSORT(J))) D
46 . . S VITVMAP=$NA(@VITTVMAP@(J))
47 . . K @VITVMAP
48 . . I DEBUG W "VMAP= ",VITVMAP,!
49 . . S VITPTMP=VITRSLT(VSORT(J)) ; DATE SORTED VITAL FROM RETURN ARRAY
50 . . I DEBUG W "VITAL ",VSORT(J),!
51 . . I DEBUG W VITRSLT(VSORT(J))," ",$$FMDTOUTC^CCRUTIL($P(VITPTMP,U,4),"DT"),!
52 . . I DEBUG W $P(VITPTMP,U,4),!
53 . . S @VITVMAP@("VITALSIGNSDATAOBJECTID")="VITAL"_J ; UNIQUE OBJID
54 . . I $P(VITPTMP,U,2)="HT" D
55 . . . S @VITVMAP@("VITALSIGNSDATETIMETYPETEXT")="OBSERVED"
56 . . . S @VITVMAP@("VITALSIGNSEXACTDATETIME")=$$FMDTOUTC^CCRUTIL($P(VITPTMP,U,4),"DT")
57 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="HEIGHT"
58 . . . S @VITVMAP@("VITALSIGNSSOURCEACTORID")="ACTORSYSTEM_1"
59 . . . S @VITVMAP@("VITALSIGNSTESTOBJECTID")="VITALTEST"_J
60 . . . S @VITVMAP@("VITALSIGNSTESTTYPETEXT")="OBSERVED"
61 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="HEIGHT"
62 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")="248327008"
63 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")="SNOMED"
64 . . . S @VITVMAP@("VITALSIGNSCODEVERSION")=""
65 . . . S @VITVMAP@("VITALSIGNSTESTSOURCEACTORID")="ACTORPROVIDER_"_$P(^GMR(120.5,$P(VITPTMP,U,1),0),U,6)
66 . . . S @VITVMAP@("VITALSIGNSTESTRESULTVALUE")=$P(VITPTMP,U,3)
67 . . . S @VITVMAP@("VITALSIGNSTESTRESULTUNIT")="in"
68 . . E I $P(VITPTMP,U,2)="WT" D
69 . . . S @VITVMAP@("VITALSIGNSDATETIMETYPETEXT")="OBSERVED"
70 . . . S @VITVMAP@("VITALSIGNSEXACTDATETIME")=$$FMDTOUTC^CCRUTIL($P(VITPTMP,U,4),"DT")
71 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="WEIGHT"
72 . . . S @VITVMAP@("VITALSIGNSSOURCEACTORID")="ACTORSYSTEM_1"
73 . . . S @VITVMAP@("VITALSIGNSTESTOBJECTID")="VITALTEST"_J
74 . . . S @VITVMAP@("VITALSIGNSTESTTYPETEXT")="OBSERVED"
75 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="WEIGHT"
76 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")="107647005"
77 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")="SNOMED"
78 . . . S @VITVMAP@("VITALSIGNSCODEVERSION")=""
79 . . . S @VITVMAP@("VITALSIGNSTESTSOURCEACTORID")="ACTORPROVIDER_"_$P(^GMR(120.5,$P(VITPTMP,U,1),0),U,6)
80 . . . S @VITVMAP@("VITALSIGNSTESTRESULTVALUE")=$P(VITPTMP,U,3)
81 . . . S @VITVMAP@("VITALSIGNSTESTRESULTUNIT")="lbs"
82 . . E I $P(VITPTMP,U,2)="BP" D
83 . . . S @VITVMAP@("VITALSIGNSDATETIMETYPETEXT")="OBSERVED"
84 . . . S @VITVMAP@("VITALSIGNSEXACTDATETIME")=$$FMDTOUTC^CCRUTIL($P(VITPTMP,U,4),"DT")
85 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="BLOOD PRESSURE"
86 . . . S @VITVMAP@("VITALSIGNSSOURCEACTORID")="ACTORSYSTEM_1"
87 . . . S @VITVMAP@("VITALSIGNSTESTOBJECTID")="VITALTEST"_J
88 . . . S @VITVMAP@("VITALSIGNSTESTTYPETEXT")="OBSERVED"
89 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="BLOOD PRESSURE"
90 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")="392570002"
91 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")="SNOMED"
92 . . . S @VITVMAP@("VITALSIGNSCODEVERSION")=""
93 . . . S @VITVMAP@("VITALSIGNSTESTSOURCEACTORID")="ACTORPROVIDER_"_$P(^GMR(120.5,$P(VITPTMP,U,1),0),U,6)
94 . . . S @VITVMAP@("VITALSIGNSTESTRESULTVALUE")=$P(VITPTMP,U,3)
95 . . . S @VITVMAP@("VITALSIGNSTESTRESULTUNIT")=""
96 . . E I $P(VITPTMP,U,2)="T" D
97 . . . S @VITVMAP@("VITALSIGNSDATETIMETYPETEXT")="OBSERVED"
98 . . . S @VITVMAP@("VITALSIGNSEXACTDATETIME")=$$FMDTOUTC^CCRUTIL($P(VITPTMP,U,4),"DT")
99 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="TEMPERATURE"
100 . . . S @VITVMAP@("VITALSIGNSSOURCEACTORID")="ACTORSYSTEM_1"
101 . . . S @VITVMAP@("VITALSIGNSTESTOBJECTID")="VITALTEST"_J
102 . . . S @VITVMAP@("VITALSIGNSTESTTYPETEXT")="OBSERVED"
103 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="TEMPERATURE"
104 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")="309646008"
105 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")="SNOMED"
106 . . . S @VITVMAP@("VITALSIGNSCODEVERSION")=""
107 . . . S @VITVMAP@("VITALSIGNSTESTSOURCEACTORID")="ACTORPROVIDER_"_$P(^GMR(120.5,$P(VITPTMP,U,1),0),U,6)
108 . . . S @VITVMAP@("VITALSIGNSTESTRESULTVALUE")=$P(VITPTMP,U,3)
109 . . . S @VITVMAP@("VITALSIGNSTESTRESULTUNIT")="F"
110 . . E I $P(VITPTMP,U,2)="R" D
111 . . . S @VITVMAP@("VITALSIGNSDATETIMETYPETEXT")="OBSERVED"
112 . . . S @VITVMAP@("VITALSIGNSEXACTDATETIME")=$$FMDTOUTC^CCRUTIL($P(VITPTMP,U,4),"DT")
113 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="RESPIRATION"
114 . . . S @VITVMAP@("VITALSIGNSSOURCEACTORID")="ACTORSYSTEM_1"
115 . . . S @VITVMAP@("VITALSIGNSTESTOBJECTID")="VITALTEST"_J
116 . . . S @VITVMAP@("VITALSIGNSTESTTYPETEXT")="OBSERVED"
117 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="RESPIRATION"
118 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")="366147009"
119 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")="SNOMED"
120 . . . S @VITVMAP@("VITALSIGNSCODEVERSION")=""
121 . . . S @VITVMAP@("VITALSIGNSTESTSOURCEACTORID")="ACTORPROVIDER_"_$P(^GMR(120.5,$P(VITPTMP,U,1),0),U,6)
122 . . . S @VITVMAP@("VITALSIGNSTESTRESULTVALUE")=$P(VITPTMP,U,3)
123 . . . S @VITVMAP@("VITALSIGNSTESTRESULTUNIT")=""
124 . . E I $P(VITPTMP,U,2)="P" D
125 . . . S @VITVMAP@("VITALSIGNSDATETIMETYPETEXT")="OBSERVED"
126 . . . S @VITVMAP@("VITALSIGNSEXACTDATETIME")=$$FMDTOUTC^CCRUTIL($P(VITPTMP,U,4),"DT")
127 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="PULSE"
128 . . . S @VITVMAP@("VITALSIGNSSOURCEACTORID")="ACTORSYSTEM_1"
129 . . . S @VITVMAP@("VITALSIGNSTESTOBJECTID")="VITALTEST"_J
130 . . . S @VITVMAP@("VITALSIGNSTESTTYPETEXT")="OBSERVED"
131 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="PULSE"
132 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")="366199006"
133 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")="SNOMED"
134 . . . S @VITVMAP@("VITALSIGNSCODEVERSION")=""
135 . . . S @VITVMAP@("VITALSIGNSTESTSOURCEACTORID")="ACTORPROVIDER_"_$P(^GMR(120.5,$P(VITPTMP,U,1),0),U,6)
136 . . . S @VITVMAP@("VITALSIGNSTESTRESULTVALUE")=$P(VITPTMP,U,3)
137 . . . S @VITVMAP@("VITALSIGNSTESTRESULTUNIT")=""
138 . . E I $P(VITPTMP,U,2)="PN" D
139 . . . S @VITVMAP@("VITALSIGNSDATETIMETYPETEXT")="OBSERVED"
140 . . . S @VITVMAP@("VITALSIGNSEXACTDATETIME")=$$FMDTOUTC^CCRUTIL($P(VITPTMP,U,4),"DT")
141 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="PAIN"
142 . . . S @VITVMAP@("VITALSIGNSSOURCEACTORID")="ACTORSYSTEM_1"
143 . . . S @VITVMAP@("VITALSIGNSTESTOBJECTID")="VITALTEST"_J
144 . . . S @VITVMAP@("VITALSIGNSTESTTYPETEXT")="OBSERVED"
145 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="PAIN"
146 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")="22253000"
147 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")="SNOMED"
148 . . . S @VITVMAP@("VITALSIGNSCODEVERSION")=""
149 . . . S @VITVMAP@("VITALSIGNSTESTSOURCEACTORID")="ACTORPROVIDER_"_$P(^GMR(120.5,$P(VITPTMP,U,1),0),U,6)
150 . . . S @VITVMAP@("VITALSIGNSTESTRESULTVALUE")=$P(VITPTMP,U,3)
151 . . . S @VITVMAP@("VITALSIGNSTESTRESULTUNIT")=""
152 . . E D
153 . . . ;W "IN VITAL: OTHER",!
154 . . . S @VITVMAP@("VITALSIGNSDATETIMETYPETEXT")="OBSERVED"
155 . . . S @VITVMAP@("VITALSIGNSEXACTDATETIME")=$$FMDTOUTC^CCRUTIL($P(VITPTMP,U,4),"DT")
156 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="OTHER VITAL"
157 . . . S @VITVMAP@("VITALSIGNSSOURCEACTORID")="ACTORSYSTEM_1"
158 . . . S @VITVMAP@("VITALSIGNSTESTOBJECTID")="VITALTEST"_J
159 . . . S @VITVMAP@("VITALSIGNSTESTTYPETEXT")="UNKNOWN"
160 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="OTHER"
161 . . . ;S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")=""
162 . . . ;S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")=""
163 . . . ;S @VITVMAP@("VITALSIGNSCODEVERSION")=""
164 . . . S @VITVMAP@("VITALSIGNSTESTSOURCEACTORID")="ACTORPROVIDER_"_$P(^GMR(120.5,$P(VITPTMP,U,1),0),U,6)
165 . . . S @VITVMAP@("VITALSIGNSTESTRESULTVALUE")=$P(VITPTMP,U,3)
166 . . . S @VITVMAP@("VITALSIGNSTESTRESULTUNIT")="UNKNOWN"
167 . . S VITARYTMP=$NA(@VITTARYTMP@(J))
168 . . K @VITARYTMP
169 . . D MAP^GPLXPATH(VITXML,VITVMAP,VITARYTMP)
170 . . I J=1 D ; FIRST ONE IS JUST A COPY
171 . . . ; W "FIRST ONE",!
172 . . . D CP^GPLXPATH(VITARYTMP,VITOUTXML)
173 . . . W "VITOUTXML ",VITOUTXML,!
174 . . I J>1 D ; AFTER THE FIRST, INSERT INNER XML
175 . . . D INSINNER^GPLXPATH(VITOUTXML,VITARYTMP)
176 ; ZWR ^TMP($J,"VITALS",*)
177 ; ZWR ^TMP($J,"VITALARYTMP",*) ; SHOW THE RESULTS
178 I DEBUG D PARY^GPLXPATH(VITOUTXML)
179 N VITTMP,I
180 D MISSING^GPLXPATH(VITOUTXML,"VITTMP") ; SEARCH XML FOR MISSING VARS
181 I VITTMP(0)>0 D ; IF THERE ARE MISSING VARS - MARKED AS @@X@@
182 . W "VITALS MISSING ",!
183 . F I=1:1:VITTMP(0) W VITTMP(I),!
184 Q
185 ;
186VITDATES(VDT) ; VDT IS PASSED BY REFERENCE AND WILL CONTAIN THE ARRAY
187 ; OF DATES IN THE VITALS RESULTS
188 N VDTI,VDTJ,VTDCNT
189 S VTDCNT=0 ; COUNT TO BUILD ARRAY
190 S VDTJ="" ; USED TO VISIT THE RESULTS
191 F VDTI=0:0 D Q:$O(VITRSLT(VDTJ))="" ; VISIT ALL RESULTS
192 . S VDTJ=$O(VITRSLT(VDTJ)) ; NEXT RESULT
193 . S VTDCNT=VTDCNT+1 ; INCREMENT COUNTER
194 . S VDT(VTDCNT)=$P(VITRSLT(VDTJ),U,4) ; PULL OUT THE DATE
195 Q
196 ;
Note: See TracBrowser for help on using the repository browser.