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
RevLine 
[112]1GPLVITAL ; CCDCCR/CJE - CCR/CCD PROCESSING FOR VITALS ; 07/16/08
[73]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 ;
[65]20 W "NO ENTRY FROM TOP",!
21 Q
[40]22 ;
[73]23EXTRACT(VITXML,DFN,VITOUTXML) ; EXTRACT VITALS INTO PROVIDED XML TEMPLATE
[65]24 ;
[40]25 ; VITXML AND OUTXML ARE PASSED BY NAME SO GLOBALS CAN BE USED
[112]26 ; IVITXML CONTAINS ONLY THE VITALS SECTION OF THE OVERALL TEMPLATE
[40]27 ;
[112]28 N VITRSLT,J,K,VITPTMP,X,VITVMAP,TBUF,VORDR
[40]29 D VITALS^ORQQVI(.VITRSLT,DFN,"","")
[88]30 I $P(VITRSLT(1),U,2)="No vitals found." D ; NULL RESULT FROM RPC
31 . W "NO VITALS FOUND FROM VITALS RPC",!
[87]32 . S @VITOUTXML@(0)=0
33 . Q
[113]34 I $P(VITRSLT(1),U,2)="No vitals found." Q ; QUIT
[40]35 ; ZWR RPCRSLT
[50]36 S VITTVMAP=$NA(^TMP("GPLCCR",$J,"VITALS"))
37 S VITTARYTMP=$NA(^TMP("GPLCCR",$J,"VITALARYTMP"))
[97]38 K @VITTVMAP,@VITTARYTMP ; KILL OLD ARRAY VALUES
[121]39 N VSORT,VDATES,VCNT ; ARRAY FOR DATE SORTED VITALS INDEX
40 D VITDATES(.VDATES) ; PULL OUT THE DATES INTO AN ARRAY
[122]41 ; I DEBUG ZWR VDATES ;DEBUG
[121]42 S VCNT=$$SORTDT^CCRUTIL(.VSORT,.VDATES,-1) ; PUT VITALS IN REVERSE
43 ; DATE ORDER AND COUNT THEM. VSORT CONTAINS INDIRECT INDEXES ONLY
[112]44 F J=1:1:VCNT D ; FOR EACH VITAL IN THE LIST
45 . I $D(VITRSLT(VSORT(J))) D
[40]46 . . S VITVMAP=$NA(@VITTVMAP@(J))
47 . . K @VITVMAP
[74]48 . . I DEBUG W "VMAP= ",VITVMAP,!
[112]49 . . S VITPTMP=VITRSLT(VSORT(J)) ; DATE SORTED VITAL FROM RETURN ARRAY
[115]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),!
[112]53 . . S @VITVMAP@("VITALSIGNSDATAOBJECTID")="VITAL"_J ; UNIQUE OBJID
[40]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"
[59]58 . . . S @VITVMAP@("VITALSIGNSSOURCEACTORID")="ACTORSYSTEM_1"
[40]59 . . . S @VITVMAP@("VITALSIGNSTESTOBJECTID")="VITALTEST"_J
60 . . . S @VITVMAP@("VITALSIGNSTESTTYPETEXT")="OBSERVED"
61 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="HEIGHT"
[73]62 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")="248327008"
63 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")="SNOMED"
64 . . . S @VITVMAP@("VITALSIGNSCODEVERSION")=""
[51]65 . . . S @VITVMAP@("VITALSIGNSTESTSOURCEACTORID")="ACTORPROVIDER_"_$P(^GMR(120.5,$P(VITPTMP,U,1),0),U,6)
[40]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"
[59]72 . . . S @VITVMAP@("VITALSIGNSSOURCEACTORID")="ACTORSYSTEM_1"
[40]73 . . . S @VITVMAP@("VITALSIGNSTESTOBJECTID")="VITALTEST"_J
74 . . . S @VITVMAP@("VITALSIGNSTESTTYPETEXT")="OBSERVED"
75 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="WEIGHT"
[73]76 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")="107647005"
77 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")="SNOMED"
78 . . . S @VITVMAP@("VITALSIGNSCODEVERSION")=""
[51]79 . . . S @VITVMAP@("VITALSIGNSTESTSOURCEACTORID")="ACTORPROVIDER_"_$P(^GMR(120.5,$P(VITPTMP,U,1),0),U,6)
[40]80 . . . S @VITVMAP@("VITALSIGNSTESTRESULTVALUE")=$P(VITPTMP,U,3)
81 . . . S @VITVMAP@("VITALSIGNSTESTRESULTUNIT")="lbs"
[59]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"
[73]90 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")="392570002"
91 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")="SNOMED"
92 . . . S @VITVMAP@("VITALSIGNSCODEVERSION")=""
[59]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"
[73]104 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")="309646008"
105 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")="SNOMED"
106 . . . S @VITVMAP@("VITALSIGNSCODEVERSION")=""
[59]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"
[73]118 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")="366147009"
119 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")="SNOMED"
120 . . . S @VITVMAP@("VITALSIGNSCODEVERSION")=""
[59]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"
[73]132 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")="366199006"
133 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")="SNOMED"
134 . . . S @VITVMAP@("VITALSIGNSCODEVERSION")=""
[59]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"
[73]146 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")="22253000"
147 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")="SNOMED"
148 . . . S @VITVMAP@("VITALSIGNSCODEVERSION")=""
[59]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")=""
[40]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"
[59]157 . . . S @VITVMAP@("VITALSIGNSSOURCEACTORID")="ACTORSYSTEM_1"
[40]158 . . . S @VITVMAP@("VITALSIGNSTESTOBJECTID")="VITALTEST"_J
[59]159 . . . S @VITVMAP@("VITALSIGNSTESTTYPETEXT")="UNKNOWN"
[40]160 . . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="OTHER"
[51]161 . . . ;S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")=""
162 . . . ;S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")=""
[73]163 . . . ;S @VITVMAP@("VITALSIGNSCODEVERSION")=""
[51]164 . . . S @VITVMAP@("VITALSIGNSTESTSOURCEACTORID")="ACTORPROVIDER_"_$P(^GMR(120.5,$P(VITPTMP,U,1),0),U,6)
[40]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)
[74]173 . . . W "VITOUTXML ",VITOUTXML,!
[40]174 . . I J>1 D ; AFTER THE FIRST, INSERT INNER XML
175 . . . D INSINNER^GPLXPATH(VITOUTXML,VITARYTMP)
176 ; ZWR ^TMP($J,"VITALS",*)
[122]177 ; ZWR ^TMP($J,"VITALARYTMP",*) ; SHOW THE RESULTS
[93]178 I DEBUG D PARY^GPLXPATH(VITOUTXML)
[40]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 ;
[121]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.