source: ccr/trunk/p/GPLRIMA.m@ 160

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

changed DPATVGPLRIMA to call ANALYZE first to refresh RIM variables.. more usefull in debugging

File size: 16.3 KB
Line 
1GPLRIMA ; CCDCCR/GPL - RIM REPORT ROUTINES; 6/6/08
2 ;;0.1;CCDCCR;nopatch;noreleasedate
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 ; THESE ROUTINES EXAMINE ONE OR MORE, UP TO ALL, OF THE PATIENTS ON THE
21 ; SYSTEM TO DETERMINE HOW COMPLETE THE RESULTING CCR OR CCD WOULD BE FOR
22 ; THESE PATIENTS. IT BEGINS TO MEASURE "HL7 RIM COHERENCE" WHICH IS HOW USEFUL
23 ; THE VARIABLES WILL BE TO A RIM-MODELED APPLICATION AFTER THEY ARE
24 ; CONVEYED VIA THE CCR OR CCD.
25 ; FACTORS THAT AFFECT RIM COHERENCE INCLUDE:
26 ; 1. THE PRESENSE OF CLINICAL DATA IN A SECTION
27 ; 2. ARE THE DATA ELEMENTS TIME-BOUND
28 ; 3. ARE THE DATA ELEMENTS CODED WITH SNOMED OR LOINC ETC
29 ; 4. ARE SOURCE ACTORS ASSOCIATED WITH THE DATA ELEMENTS
30 ; 5. ARE ACTORS IDENTIFIED REGARDING THEIR ROLE
31 ; .. AND OTHER FACTORS YET TO BE DETERMINED
32 ;
33 ; SINCE THESE MEASUREMENTS ARE DONE AT THE VARIABLE LEVEL, THEY
34 ; REFLECT ON RIM COHERENCE WHETHER THE CCR OR THE CCD IS USED FOR
35 ; CONVEYANCE TO THE RIM APPLICATION.
36 ;
37 ;
38ANALYZE(BEGDFN,DFNCNT) ; RIM COHERANCE ANALYSIS ROUTINE
39 ; BEGINS AT BEGDFN AND GOES FOR DFNCNT PATIENTS
40 ; TO RESUME AT NEXT PATIENT, USE BEGDFN=""
41 ; USE RESET^GPLRIMA TO RESET TO TOP OF PATIENT LIST
42 ;
43 N RIMARY,RIMTMP,RIMI,RIMDFN,RATTR
44 N CCRGLO
45 D ASETUP ; SET UP VARIABLES AND GLOBALS
46 D AINIT ; INITIALIZE ATTRIBUTE VALUE TABLE
47 I '$D(@RIMBASE@("RESUME")) S @RIMBASE@("RESUME")=$O(^DPT(0)) ; FIRST TIME
48 S RESUME=@RIMBASE@("RESUME") ; WHERE WE LEFT OFF LAST RUN
49 S RIMDFN=BEGDFN ; BEGIN WITH THE BEGDFN PATIENT
50 I RIMDFN="" S RIMDFN=RESUME
51 I +RIMDFN=0 D Q ; AT THE END OF THE PATIENTS
52 . W "END OF PATIENT LIST, CALL RESET^GPLRIMA",!
53 F RIMI=1:1:DFNCNT D Q:+RIMDFN=0 ; FOR DFNCNT NUMBER OF PATIENTS OR END
54 . D CCRRPC^GPLCCR(.CCRGLO,RIMDFN,"CCR","","","") ;PROCESS THE CCR
55 . W RIMDFN,!
56 . K @RIMBASE@("VARS",RIMDFN) ; CLEAR OUT OLD VARS
57 . ;
58 . ; COPY ALL THE VARIABLES TO THE RIM MAP AREA INDEXED BY PATIENT
59 . ;
60 . I $D(^TMP("GPLCCR",$J,"PROBVALS",1)) D ; PROBLEM VARS EXISTS
61 . . M @RIMBASE@("VARS",RIMDFN,"PROBLEMS")=^TMP("GPLCCR",$J,"PROBVALS")
62 . . S @RIMBASE@("VARS",RIMDFN,"PROBLEMS",0)=^TMP("GPLCCR",$J,"PROBVALS",0)
63 . I $D(^TMP("GPLCCR",$J,"VITALS",1)) D ; VITALS VARS EXISTS
64 . . M @RIMBASE@("VARS",RIMDFN,"VITALS")=^TMP("GPLCCR",$J,"VITALS")
65 . I $D(^TMP("GPLCCR",$J,"MEDICATIONS",1)) D ; MEDS VARS EXISTS
66 . . M @RIMBASE@("VARS",RIMDFN,"MEDS")=^TMP("GPLCCR",$J,"MEDICATIONS")
67 . K ^TMP("GPLCCR",$J) ; KILL WORK AREA FOR CCR BUILDING
68 . ;
69 . ; EVALUATE THE VARIABLES AND CREATE AN ATTRIBUTE MAP
70 . ;
71 . S RATTR=$$SETATTR(RIMDFN) ; SET THE ATTRIBUTE STRING BASED ON THE VARS
72 . S @RIMBASE@("ATTR",RIMDFN)=RATTR ; SAVE THE ATRIBUTES FOR THIS PAT
73 . ;
74 . ; INCREMENT THE COUNT OF PATIENTS WITH THESE ATTRIBUTES IN ATTRTBL
75 . ;
76 . ; I '$D(@RIMBASE@("ATTRTBL",RATTR)) D ; IF FIRST PAT WITH THESE ATTRS
77 . ; . S @RIMBASE@("ATTRTBL",RATTR)=0 ; DEFAULT VALUE TO BE INCREMENTED
78 . ; S @RIMBASE@("ATTRTBL",RATTR)=@RIMBASE@("ATTRTBL",RATTR)+1 ; INCREMENT
79 . ;
80 . N CATNAME,CATTBL
81 . ; S CATBASE=$NA(@RIMBASE@("ANALYSIS"))
82 . S CATNAME=""
83 . D CPUSH(.CATNAME,RIMBASE,"RIMTBL",RIMDFN,RATTR) ; ADD TO CATEGORY
84 . W "CATEGORY NAME: ",CATNAME,!
85 . ;
86 . F S RIMDFN=$O(^DPT(RIMDFN)) Q:'$$PTST^CCRSYS(RIMDFN) ; NEXT PATIENT
87 . ; PTST TESTS TO SEE IF PATIENT WAS MERGED
88 . ; IF CCRTEST=0, PTST WILL CHECK TO SEE IF THIS IS A TEST PATIENT
89 . ; AND WE SKIP IT
90 . S @RIMBASE@("RESUME")=RIMDFN ; WHERE WE ARE LEAVING OFF THIS RUN
91 ; D PARY^GPLXPATH(@RIMBASE@("ATTRTBL"))
92 Q
93 ;
94SETATTR(SDFN) ; SET ATTRIBUTES BASED ON VARS
95 N SBASE,SATTR
96 S SBASE=$NA(@RIMBASE@("VARS",SDFN))
97 D APOST("SATTR","RIMTBL","HEADER")
98 I $D(@SBASE@("PROBLEMS",1)) D ;
99 . D APOST("SATTR","RIMTBL","PROBLEMS")
100 . ; W "POSTING PROBLEMS",!
101 I $D(@SBASE@("VITALS",1)) D APOST("SATTR","RIMTBL","VITALS")
102 I $D(@SBASE@("MEDS",1)) D APOST("SATTR","RIMTBL","MEDS")
103 D APOST("SATTR","RIMTBL","NOTEXTRACTED") ; OUTPUT NOT YET PRODUCED
104 W "ATTRIBUTES: ",SATTR,!
105 Q SATTR
106 ;
107RESET ; KILL RESUME INDICATOR TO START OVER. ALSO KILL RIM TMP VALUES
108 K ^TMP("GPLRIM","RESUME")
109 K ^TMP("GPLRIM")
110 Q
111 ;
112CLIST ; LIST THE CATEGORIES
113 ;
114 I '$D(RIMBASE) D ASETUP ; FOR COMMAND LINE CALLS
115 N CLBASE,CLNUM,ZI,CLIDX
116 S CLBASE=$NA(@RIMBASE@("RIMTBL","CATS"))
117 S CLNUM=@CLBASE@(0)
118 F ZI=1:1:CLNUM D ; LOOP THROUGH THE CATEGORIES
119 . S CLIDX=@CLBASE@(ZI)
120 . W "(",$P(@CLBASE@(CLIDX),"^",1)
121 . W ":",$P(@CLBASE@(CLIDX),"^",2),") "
122 . W CLIDX,!
123 ; D PARY^GPLXPATH(CLBASE)
124 Q
125 ;
126CPUSH(CATRTN,CBASE,CTBL,CDFN,CATTR) ; ADD PATIENTS TO CATEGORIES
127 ; AND PASS BACK THE NAME OF THE CATEGORY TO WHICH THE PATIENT
128 ; WAS ADDED IN CATRTN, WHICH IS PASSED BY REFERENCE
129 ; CBASE IS WHERE TO PUT THE CATEGORIES PASSED BY NAME
130 ; CTBL IS THE NAME OF THE TABLE USED TO CREATE THE ATTRIBUTES,
131 ; PASSED BY NAME AND USED TO CREATE CATEGORY NAMES IE "@CTBL_X"
132 ; WHERE X IS THE CATEGORY NUMBER. CTBL(0) IS THE NUMBER OF CATEGORIES
133 ; CATBL(X)=CATTR STORES THE ATTRIBUTE IN THE CATEGORY
134 ; CDFN IS THE PATIENT DFN, CATTR IS THE ATTRIBUTE STRING
135 ; THE LIST OF PATIENTS IN A CATEGORY IS STORED INDEXED BY CATEGORY
136 ; NUMBER IE CTBL_X(CDFN)=""
137 ;
138 ; N CCTBL,CENTRY,CNUM,CCOUNT,CPATLIST
139 S CCTBL=$NA(@CBASE@(CTBL,"CATS"))
140 W "CBASE: ",CCTBL,!
141 ;
142 I '$D(@CCTBL@(CATTR)) D ; FIRST PATIENT IN THIS CATEGORY
143 . D PUSH^GPLXPATH(CCTBL,CATTR) ; ADD THE CATEGORY TO THE ARRAY
144 . S CNUM=@CCTBL@(0) ; ARRAY ENTRY NUMBER FOR THIS CATEGORY
145 . S CENTRY=CTBL_"_"_CNUM_U_0 ; TABLE ENTRY DEFAULT
146 . S @CCTBL@(CATTR)=CENTRY ; DEFAULT NON INCREMENTED TABLE ENTRY
147 . ; NOTE THAT P1 IS THE CATEGORY NAME MADE UP OF THE TABLE NAME
148 . ; AND CATGORY ARRAY NUMBER. P2 IS THE COUNT WHICH IS INITIALLY 0
149 ;
150 S CCOUNT=$P(@CCTBL@(CATTR),U,2) ; COUNT OF PATIENTS IN THIS CATEGORY
151 S CCOUNT=CCOUNT+1 ; INCREMENT THE COUNT
152 S $P(@CCTBL@(CATTR),U,2)=CCOUNT ; PUT IT BACK
153 ;
154 S CATRTN=$P(@CCTBL@(CATTR),U,1) ; THE CATEGORY NAME WHICH IS RETURNED
155 ;
156 S CPATLIST=$NA(@CBASE@(CTBL,"PATS",CATRTN)) ; BASE OF PAT LIST FOR THIS CAT
157 W "PATS BASE: ",CPATLIST,!
158 S @CPATLIST@(CDFN)="" ; ADD THIS PATIENT TO THE CAT PAT LIST
159 ;
160 Q
161 ;
162CCOUNT ; RECOUNT THE CATEGORIES.. USE IN CASE OF RESTART OF ANALYZE
163 ;
164 I '$D(RIMBASE) D ASETUP ; FOR COMMAND LINE CALLS
165 N ZI,ZJ,ZCNT,ZIDX,ZCAT,ZATR,ZTOT
166 S ZCBASE=$NA(@RIMBASE@("RIMTBL","CATS")) ; BASE OF CATEGORIES
167 S ZPBASE=$NA(@RIMBASE@("RIMTBL","PATS")) ; BASE OF PATIENTS
168 S ZTOT=0 ; INITIALIZE OVERALL TOTAL
169 F ZI=1:1:@ZCBASE@(0) D ; FOR ALL CATS
170 . S ZCNT=0
171 . S ZATR=@ZCBASE@(ZI) ; THE ATTRIBUTE OF THE CATEGORY
172 . S ZCAT=$P(@ZCBASE@(ZATR),"^",1) ; USE IT TO LOOK UP THE CATEGORY NAME
173 . ; S ZIDX=$O(@ZPBASE@(ZCAT,"")) ; FIRST PATIENT IN LIST
174 . ; F ZJ=0:0 D Q:$O(@ZPBASE@(ZCAT,ZIDX))="" ; ALL PATIENTS IN THE LISTS
175 . ; . S ZCNT=ZCNT+1 ; INCREMENT THE COUNT
176 . ; . W ZCAT," DFN:",ZIDX," COUNT:",ZCNT,!
177 . ; . S ZIDX=$O(@ZPBASE@(ZCAT,ZIDX))
178 . S ZCNT=$$CNTLST($NA(@ZPBASE@(ZCAT)))
179 . S $P(@ZCBASE@(ZATR),"^",2)=ZCNT ; UPDATE THE COUNT IN THE CAT RECORD
180 . S ZTOT=ZTOT+ZCNT
181 W "TOTAL: ",ZTOT,!
182 Q
183 ;
184CNTLST(INLST) ; RETURNS THE NUMBER OF ELEMENTS IN THE LIST
185 ; INLST IS PASSED BY NAME
186 N ZI,ZDX,ZCOUNT
187 W INLST,!
188 S ZCOUNT=0
189 S ZDX=""
190 F ZI=$O(@INLST@(ZDX)):0 D Q:$O(@INLST@(ZDX))="" ; LOOP UNTIL THE END
191 . S ZCOUNT=ZCOUNT+1
192 . S ZDX=$O(@INLST@(ZDX))
193 . W "ZDX:",ZDX," ZCNT:",ZCOUNT,!
194 Q ZCOUNT
195 ;
196XCPAT(CPATCAT) ; EXPORT TO FILE ALL PATIENTS IN CATEGORY CPATCAT
197 ;
198 I '$D(RIMBASE) D ASETUP ; FOR COMMAND LINE CALLS
199 N ZI,ZJ,ZC,ZPATBASE
200 S ZPATBASE=$NA(@RIMBASE@("RIMTBL","PATS",CPATCAT))
201 S ZI=""
202 F ZJ=0:0 D Q:$O(@ZPATBASE@(ZI))="" ; TIL END
203 . S ZI=$O(@ZPATBASE@(ZI))
204 . D XPAT^GPLCCR(ZI,"","") ; EXPORT THE PATIENT TO A FILE
205 Q
206 ;
207CPAT(CPATCAT) ; SHOW PATIENT DFNS FOR A CATEGORY CPATCAT
208 ;
209 I '$D(RIMBASE) D ASETUP ; FOR COMMAND LINE CALLS
210 N ZI,ZJ,ZC,ZPATBASE
211 S ZC=0 ; COUNT FOR SPACING THE PRINTOUT
212 S ZPATBASE=$NA(@RIMBASE@("RIMTBL","PATS",CPATCAT))
213 S ZI=""
214 F ZJ=0:0 D Q:$O(@ZPATBASE@(ZI))="" ; TIL END
215 . S ZI=$O(@ZPATBASE@(ZI))
216 . S ZC=ZC+1 ; INCREMENT OUTPUT PER LINE COUNT
217 . W ZI," "
218 . I ZC=10 D ; NEW LINE
219 . . S ZC=0
220 . . W !
221 Q
222 ;
223PATC(DFN) ; DISPLAY THE CATEGORY FOR THIS PATIENT
224 ;
225 N ATTR S ATTR=""
226 I '$D(^TMP("GPLRIM","ATTR",DFN)) D ; RIM VARS NOT PRESENT
227 . D ANALYZE(DFN,1) ; EXTRACT THE RIM VARIABLE FOR THIS PATIENT
228 S ATTR=^TMP("GPLRIM","ATTR",DFN)
229 I ATTR="" W "THIS PATIENT NOT ANALYZED.",! Q ;NO ATTRIBUTES FOUND
230 I $D(^TMP("GPLRIM","RIMTBL","CATS",ATTR)) D ; FOUND A CAT
231 . N CAT
232 . S CAT=$P(^TMP("GPLRIM","RIMTBL","CATS",ATTR),U,1) ; LOOK UP THE CAT
233 . W CAT,": ",ATTR,!
234 Q
235 ;
236APUSH(AMAP,AVAL) ; ADD AVAL TO ATTRIBUTE MAP AMAP (AMAP PASSED BY NAME)
237 ; AMAP IS FORMED FOR ARRAY ACCESS: AMAP(0) IS THE COUNT
238 ; AND AMAP(N)=AVAL IS THE NTH AVAL
239 ; ALSO HASH ACCESS AMAP(AVAL)=N WHERE N IS THE ASSIGNED ORDER OF THE
240 ; MAP VALUE. INSTANCES OF THE MAP WILL USE $P(X,U,N)=AVAL TO PLACE
241 ; THE ATTRIBUTE IN ITS RIGHT PLACE. THE ATTRIBUTE VALUE IS STORED
242 ; SO THAT DIFFERENT MAPS CAN BE AUTOMATICALLY CROSSWALKED
243 ;
244 I '$D(@AMAP) D ; IF THE MAP DOES NOT EXIST
245 . S @AMAP@(0)=0 ; HAS ZERO ELEMENTS
246 S @AMAP@(0)=@AMAP@(0)+1 ;INCREMENT ELEMENT COUNT
247 S @AMAP@(@AMAP@(0))=AVAL ; ADD THE VALUE TO THE ARRAY
248 S @AMAP@(AVAL)=@AMAP@(0) ; ADD THE VALUE TO THE HASH WITH ARRAY REF
249 Q
250 ;
251ASETUP ; SET UP GLOBALS AND VARS RIMBASE AND RIMTBL
252 I '$D(RIMBASE) S RIMBASE=$NA(^TMP("GPLRIM"))
253 I '$D(@RIMBASE) S @RIMBASE=""
254 I '$D(RIMTBL) S RIMTBL=$NA(^TMP("GPLRIM","RIMTBL","TABLE")) ; ATTR TABLE
255 S ^TMP("GPLRIM","TABLES","RIMTBL")=RIMTBL ; TABLE OF TABLES
256 Q
257 ;
258AINIT ; INITIALIZE ATTRIBUTE TABLE
259 I '$D(RIMBASE) D ASETUP ; FOR COMMAND LINE CALLS
260 K @RIMTBL
261 D APUSH(RIMTBL,"EXTRACTED")
262 D APUSH(RIMTBL,"NOTEXTRACTED")
263 D APUSH(RIMTBL,"HEADER")
264 D APUSH(RIMTBL,"NOPCP")
265 D APUSH(RIMTBL,"PCP")
266 D APUSH(RIMTBL,"PROBLEMS")
267 D APUSH(RIMTBL,"PROBCODE")
268 D APUSH(RIMTBL,"PROBNOCODE")
269 D APUSH(RIMTBL,"PROBDATE")
270 D APUSH(RIMTBL,"PROBNODATE")
271 D APUSH(RIMTBL,"VITALS")
272 D APUSH(RIMTBL,"VITALSCODE")
273 D APUSH(RIMTBL,"VITALSNOCODE")
274 D APUSH(RIMTBL,"VITALSDATE")
275 D APUSH(RIMTBL,"VITALSNODATE")
276 D APUSH(RIMTBL,"MEDS")
277 D APUSH(RIMTBL,"MEDSCODE")
278 D APUSH(RIMTBL,"MEDSNOCODE")
279 D APUSH(RIMTBL,"MEDSDATE")
280 D APUSH(RIMTBL,"MEDSNODATE")
281 Q
282 ;
283APOST(PRSLT,PTBL,PVAL) ; POST AN ATTRIBUTE PVAL TO PRSLT USING PTBL
284 ; PSRLT AND PTBL ARE PASSED BY NAME. PVAL IS A STRING
285 ; PTBL IS THE NAME OF A TABLE IN @RIMBASE@("TABLES") - "RIMTBL"=ALL VALUES
286 ; PVAL WILL BE PLACED IN THE STRING PRSLT AT $P(X,U,@PTBL@(PVAL))
287 I '$D(RIMBASE) D ASETUP ; FOR COMMANDLINE PROCESSING
288 N USETBL
289 I '$D(@RIMBASE@("TABLES",PTBL)) D Q ; NO TABLE
290 . W "ERROR NO SUCH TABLE",!
291 S USETBL=@RIMBASE@("TABLES",PTBL)
292 S $P(@PRSLT,U,@USETBL@(PVAL))=PVAL
293 Q
294GETPA(RTN,DFN,ISEC,IVAR) ; RETURNS ARRAY OF RIM VARIABLES FOR PATIENT DFN
295 ; EXAMPLE: D GETPA(.RT,2,"MEDS","MEDSSTATUSTEXT")
296 ; RETURNS AN ARRAY RT OF VALUES OF MEDSTATUSTEXT FOR PATIENT 2 IN P2
297 ; IN SECTION "MEDS"
298 ; P1 IS THE IEN OF THE MED WITH THE VALUE IE 2^PENDING WOULD BE STATUS
299 ; PENDING FOR MED 2 FOR PATIENT 2
300 ; RT(0) IS THE COUNT OF HOW MANY IN THE ARRAY. NULL VALUES ARE
301 ; RETURNED. RTN IS PASSED BY REFERENCE
302 ;
303 S RTN(0)=0 ; SET NULL DEFAULT RETURN VALUE
304 I '$D(RIMBASE) D AINIT ; INITIALIZE GLOBAL NAMES AND TABLES
305 S ZVBASE=$NA(@RIMBASE@("VARS")) ; BASE OF VARIABLES
306 I '$D(@ZVBASE@(DFN,ISEC,0)) D Q ; NO VARIABLES IN SECTION
307 . W "NO VARIABLES IN THIS SECTION FOR PATIENT ",DFN,!
308 N ZZI,ZZS
309 S ZZS=$NA(@ZVBASE@(DFN,ISEC)) ; SECTION VARIABLE ARRAY FOR THIS PATIENT
310 ; ZWR @ZZS@(1)
311 S RTN(0)=@ZZS@(0)
312 F ZZI=1:1:RTN(0) D ; FOR ALL PARTS OF THIS SECTION ( IE FOR ALL MEDS)
313 . S $P(RTN(ZZI),"^",1)=ZZI ; INDEX FOR VARIABLE
314 . S $P(RTN(ZZI),"^",2)=@ZZS@(ZZI,IVAR) ; THE VALUE OF THE VARIABLE
315 Q
316 ;
317PATD(DFN,ISEC,IVAR) ; DISPLAY FOR PATIENT DFN THE VARIABLE IVAR
318 ;
319 N ZR
320 D GETPA(.ZR,DFN,ISEC,IVAR)
321 I $D(ZR(0)) D PARY^GPLXPATH("ZR")
322 E W "NOTHING RETURNED",!
323 Q
324 ;
325CAGET(RTN,IATTR) ;
326 ; GETPA LOOKS AT RIMTBL TO FIND PATIENTS WITH ATTRIBUTE IATTR
327 ; IT DOES NOT SEARCH ALL PATIENTS, ONLY THE ONES WITH THE ATTRIBUTE
328 ; IT RETURNS AN ARRAY OF THE VALUES OF VARIABLE IVAR IN SECTION ISEC
329 Q
330 ;
331PCLST(LSTRTN,IATTR) ; RETURNS ARRAY OF PATIENTS WITH ATTRIBUTE IATTR
332 ;
333 I '$D(RIMBASE) D AINIT ; INITIALIZE GLOBAL NAMES AND TABLES
334 N ZLST
335 S LSTRTN(0)=0 ; DEFAULT RETURN NONE
336 S ZCBASE=$NA(@RIMBASE@("RIMTBL","CATS")) ; BASE OF CATEGORIES
337 S ZPBASE=$NA(@RIMBASE@("RIMTBL","PATS")) ; BASE OF PATIENTS
338 N ZNC ; ZNC IS NUMBER OF CATEGORIES
339 S ZNC=@ZCBASE@(0)
340 I ZNC=0 Q ; NO CATEGORIES TO SEARCH
341 N ZAP ; ZAP IS THE PIECE INDEX OF THE ATTRIBUTE IN THE RIM ATTR TABLE
342 S ZAP=@RIMBASE@("RIMTBL","TABLE",IATTR)
343 N ZI,ZCATTBL,ZATBL,ZCNT,ZPAT
344 F ZI=1:1:ZNC D ; FOR ALL CATEGORIES
345 . S ZATBL=@ZCBASE@(ZI) ; PULL OUT ATTR TBL FOR CAT
346 . I $P(ZATBL,"^",ZAP)'="" D ; CAT HAS ATTR
347 . . S ZCATTBL=$P(@ZCBASE@(ZATBL),"^",1) ; NAME OF TBL
348 . . M LSTRTN=@ZPBASE@(ZCATTBL) ; MERGE PATS FROM CAT
349 S ZCNT=0 ; INITIALIZE COUNT OF PATIENTS
350 S ZPAT=0 ; START AT FIRST PATIENT IN LIST
351 F S ZPAT=$O(LSTRTN(ZPAT)) Q:ZPAT="" D ;
352 . S ZCNT=ZCNT+1
353 S LSTRTN(0)=ZCNT ; COUNT OF PATIENTS IN ARRAY
354 Q
355 ;
356DCPAT(CATTR) ; DISPLAY LIST OF PATIENTS WITH ATTRIBUTE CATTR
357 ;
358 N ZR
359 D PCLST(.ZR,CATTR)
360 I ZR(0)=0 D Q ;
361 . W "NO PATIENTS RETURNED",!
362 E D ;
363 . D PARY^GPLXPATH("ZR") ; PRINT ARRAY
364 . W "COUNT=",ZR(0),!
365 Q
366 ;
367RPCGV(RTN,DFN,WHICH) ; RPC GET VARS
368 ; RETURNS IN RTN (PASSED BY REFERENCE) THE VARS AND VALUES
369 ; FOUND AT INARY RTN(X)="VAR^VALUE" RTN(0) IS THE COUNT
370 ; DFN IS THE PATIENT NUMBER.
371 ; WHICH IS "ALL" OR "MEDS" OR "VITALS" OR "PROBLEMS" OR "ALERTS" OR "LABS"
372 ; OR OTHER SECTIONS AS THEY ARE ADDED
373 ; THIS IS MEANT TO BE AVAILABLE AS AN RPC
374 I '$D(RIMBASE) D ASETUP ; FOR COMMAND LINE CALLS
375 S ZVBASE=$NA(@RIMBASE@("VARS")) ; BASE OF VARIABLES
376 S RTN(0)=0 ; DEFAULT NOTHING IS RETURNED
377 N ZZGI
378 I WHICH="ALL" D ; VARIABLES FROM ALL SECTIONS
379 . F ZZGI="PROBLEMS","VITALS","MEDS" D ; FOR EACH SECTION
380 . . D ZGVWRK(ZZGI) ; DO EACH SECTION
381 E D ZGVWRK(WHICH) ; ONLY ONE SECTION ASKED FOR
382 Q
383 ;
384ZGVWRK(ZWHICH) ; DO ONE SECTION FOR RPCGV
385 ;
386 N ZZGN ; NAME FOR SECTION VARIABLES
387 S ZZGN=$NA(@ZVBASE@(DFN,ZWHICH)) ; BASE OF VARS FOR SECTION
388 I '$D(@ZZGN@(0)) Q ; NO VARS FOR THIS SECTION
389 E D ; VARS EXIST
390 . N ZGVI
391 . F ZGVI=1:1:@ZZGN@(0) D ; FOR EACH MULTIPLE IN SECTION
392 . . K ZZGA N ZZGA ; TEMP ARRAY FOR SECTION VARS
393 . . K ZZGN2 N ZZGN2 ; NAME FOR MULTIPLE
394 . . S ZZGN2=$NA(@ZZGN@(ZGVI))
395 . . ; W ZZGN2,!,$O(@ZZGN2@("")),!
396 . . D H2ARY^GPLXPATH("ZZGA",ZZGN2) ; CONVERT HASH TO ARRAY
397 . . ; D PARY^GPLXPATH("ZZGA")
398 . . D PUSHA^GPLXPATH("RTN","ZZGA") ; PUSH ARRAY INTO RETURN
399 Q
400 ;
401DPATV(DFN,IWHICH) ; DISPLAY VARS FOR PATIENT DFN THAT ARE MAINTAINED IN GPLRIM
402 ; ALONG WITH SAMPLE VALUES.
403 ; IWHICH IS "ALL" OR "MEDS" OR "VITALS" OR "PROBLEMS" OR "ALERTS" OR "LABS"
404 N GTMP
405 D ANALYZE(DFN,1) ; REFRESH THE RIM VARIABLES
406 D RPCGV(.GTMP,DFN,IWHICH)
407 D PARY^GPLXPATH("GTMP")
408 Q
409 ;
Note: See TracBrowser for help on using the repository browser.