1 | ORWGTASK ; SLC/STAFF - Graph Task ;3/17/08 10:48
|
---|
2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**243**;Dec 17, 1997;Build 242
|
---|
3 | ;
|
---|
4 | SETLAST(PAT) ; from ORWGAPI - set whenever patient is graphed
|
---|
5 | N NOW,USER
|
---|
6 | S PAT=+$G(PAT)
|
---|
7 | S USER=+$G(DUZ)
|
---|
8 | S NOW=$$NOW^ORWGAPIX
|
---|
9 | I USER,PAT D
|
---|
10 | . S ^XTMP("ORGDATA","TP",PAT)=NOW
|
---|
11 | . S ^XTMP("ORGDATA","TP",PAT,"U",USER)=NOW
|
---|
12 | . S ^XTMP("ORGDATA","TU",USER)=NOW
|
---|
13 | . D COUNT("G",PAT,USER)
|
---|
14 | Q
|
---|
15 | ;
|
---|
16 | INIT(OK) ; from ORMTIM02 - run by ORMTIME (OK=0)
|
---|
17 | N BACKTO,CNT,DFN,ITEM,LASTDFN,NOW,PURGE,TASKED,TIME
|
---|
18 | S OK=+$G(OK,0)
|
---|
19 | I $G(^XTMP("ORGRAPH","FORCE"))="ON" D ; set in ORY243 (post-init v27)
|
---|
20 | . S OK=1
|
---|
21 | . D CLEANALL
|
---|
22 | I 'OK D ; unless forced, run one time on Saturday
|
---|
23 | . I $P($G(^XTMP("ORGRAPH",0)),U,2)=DT Q
|
---|
24 | . I $E(DT,6)="0",$$DOW^XLFDT(DT)="Saturday",$L($G(^XTMP("ORGRAPH",0))) D Q ; cleanup on 1st Sat of the month
|
---|
25 | .. S OK=1
|
---|
26 | .. D CLEANALL
|
---|
27 | . I $$DOW^XLFDT(DT)="Saturday",$L($G(^XTMP("ORGRAPH",0))) S OK=1 Q
|
---|
28 | I 'OK Q
|
---|
29 | S BACKTO=$$FMADD^XLFDT(DT,-30) ;clear old data on non-graphed patients backto this date
|
---|
30 | S PURGE=$$FMADD^XLFDT(DT,180) ; when to purge XTMP nodes
|
---|
31 | S NOW=$$NOW^ORWGAPIX
|
---|
32 | S ^XTMP("ORGDATA",0)=PURGE_U_DT_U_"CPRS Graphing - Patient Data Cache Stats"_U_NOW
|
---|
33 | S ^XTMP("ORGRAPH",0)=PURGE_U_DT_U_"CPRS Graphing - Patient Data Cache"
|
---|
34 | S CNT=0
|
---|
35 | S LASTDFN=0
|
---|
36 | S DFN=""
|
---|
37 | F S DFN=$O(^XTMP("ORGDATA","TP",DFN)) Q:DFN="" D
|
---|
38 | . S TIME=$O(^XTMP("ORGDATA","TP",DFN))
|
---|
39 | . I '$L(TIME) Q
|
---|
40 | . I TIME<BACKTO D CLRDATA(DFN) Q
|
---|
41 | . S ^XTMP("ORGRAPH","QUEUE",NOW_"^0^"_DFN)=NOW ; put patients to update on queue
|
---|
42 | . S LASTDFN=DFN
|
---|
43 | . S CNT=CNT+1
|
---|
44 | . S OK=1
|
---|
45 | D UPDATE(.TASKED,LASTDFN,0,0) ; last patient starts the updates
|
---|
46 | S ^XTMP("ORGRAPH","INIT")=NOW_U_$$NOW^ORWGAPIX_U_CNT
|
---|
47 | S ^XTMP("ORGDATA",0)=^XTMP("ORGDATA",0)_U_$$NOW^ORWGAPIX_U_CNT
|
---|
48 | Q
|
---|
49 | ;
|
---|
50 | CLEANALL ;
|
---|
51 | K ^XTMP("ORGDATA")
|
---|
52 | K ^XTMP("ORGRAPH")
|
---|
53 | Q
|
---|
54 | ;
|
---|
55 | CLRDATA(DFN) ;
|
---|
56 | N PATUSER,USER
|
---|
57 | S USER=.9
|
---|
58 | F S USER=$O(^XTMP("ORGDATA","TP",DFN,"U",USER)) Q:USER<1 D
|
---|
59 | . S PATUSER=DFN_U_USER
|
---|
60 | . K ^XTMP("ORGRAPH","ALL DATA",PATUSER)
|
---|
61 | . K ^XTMP("ORGRAPH","ALL ITEMS",PATUSER)
|
---|
62 | . K ^XTMP("ORGRAPH","ALL LABS",PATUSER)
|
---|
63 | . K ^XTMP("ORGRAPH","OLD DATA",DFN)
|
---|
64 | . K ^XTMP("ORGRAPH","OLD LABS",DFN)
|
---|
65 | K ^XTMP("ORGDATA","TP",DFN)
|
---|
66 | Q
|
---|
67 | ;
|
---|
68 | UPDATE(TASKED,DFN,USER,OLDDFN) ; from ORWGAPI
|
---|
69 | ; whenever patient is selected
|
---|
70 | ; to update, cache must exist and user/patient combo has used graphs
|
---|
71 | ;D CLEANALL Q ; ******** temporary disabled BA 1/16/08 *********
|
---|
72 | N NOW,ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE K ZTSAVE
|
---|
73 | ;S ^XTMP("ZZZBOB")=$G(TASKED)_U_$G(DFN)_U_$G(USER)_U_$G(OLDDFN)
|
---|
74 | S TASKED=-1 ; cache turned off
|
---|
75 | I '$L($G(^XTMP("ORGRAPH",0))) Q
|
---|
76 | S TASKED=0 ; not building cache
|
---|
77 | I USER,DFN D COUNT("P",DFN,USER)
|
---|
78 | I USER,'$G(^XTMP("ORGDATA","TU",USER)) Q ; user must use graphing to cache
|
---|
79 | I USER,OLDDFN D CLEARPT(OLDDFN,USER)
|
---|
80 | I 'DFN Q
|
---|
81 | I '$G(^XTMP("ORGDATA","TP",DFN)) Q ; patient must be used with graphing to cache
|
---|
82 | I USER,'$G(^XTMP("ORGDATA","TP",DFN,"U",USER)) Q ; pat/user combo to cache **** comment this out for better graph speed - but more cache
|
---|
83 | S TASKED=1 ; building cache
|
---|
84 | S NOW=$$NOW^ORWGAPIX
|
---|
85 | I USER D CLEARPT(DFN,USER)
|
---|
86 | S ZTIO="ORWG GRAPHING RESOURCE",ZTDTH=$H,ZTDESC="process graph data"
|
---|
87 | S ZTSAVE("ORMTIME")=$$MNOW
|
---|
88 | S ZTSAVE("ORPAT")=DFN
|
---|
89 | S ZTSAVE("ORTSTMP")=NOW
|
---|
90 | S ZTSAVE("ORUSER")=USER
|
---|
91 | S ZTRTN="UP^ORWGTASK"
|
---|
92 | D ^%ZTLOAD
|
---|
93 | Q
|
---|
94 | ;
|
---|
95 | COUNT(EVENT,DFN,USER) ;
|
---|
96 | I EVENT="P" D Q
|
---|
97 | . S ^("C")=1+$G(^XTMP("ORGDATA","P",DFN,"C"))
|
---|
98 | . S ^(USER)=1+$G(^XTMP("ORGDATA","P",DFN,"C-U",USER))
|
---|
99 | . S ^("C")=1+$G(^XTMP("ORGDATA","U",USER,"C"))
|
---|
100 | . S ^(DFN)=1+$G(^XTMP("ORGDATA","U",USER,"C-P",DFN))
|
---|
101 | I EVENT="G" D Q
|
---|
102 | . S ^("CG")=1+$G(^XTMP("ORGDATA","P",DFN,"CG"))
|
---|
103 | . S ^(USER)=1+$G(^XTMP("ORGDATA","P",DFN,"CG-U",USER))
|
---|
104 | . S ^("CG")=1+$G(^XTMP("ORGDATA","U",USER,"CG"))
|
---|
105 | . S ^(DFN)=1+$G(^XTMP("ORGDATA","U",USER,"CG-P",DFN))
|
---|
106 | Q
|
---|
107 | ;
|
---|
108 | CLEARPT(DFN,USER) ;
|
---|
109 | N PATUSER
|
---|
110 | S PATUSER=DFN_U_USER
|
---|
111 | K ^XTMP("ORGRAPH","ALL DATA",PATUSER)
|
---|
112 | K ^XTMP("ORGRAPH","ALL ITEMS",PATUSER)
|
---|
113 | K ^XTMP("ORGRAPH","ALL LABS",PATUSER)
|
---|
114 | Q
|
---|
115 | ;
|
---|
116 | UP ; dequeued from ORWGTASK
|
---|
117 | ; ORUSER, ORPAT, ORTSTMP were saved
|
---|
118 | N GNOW,GSTAMP,NOW,STAMP
|
---|
119 | S STAMP=ORTSTMP_U_ORUSER_U_ORPAT
|
---|
120 | S GSTAMP=ORMTIME_U_ORUSER_U_ORPAT
|
---|
121 | S NOW=$$NOW^ORWGAPIX
|
---|
122 | S GNOW=$$MNOW
|
---|
123 | I $D(ZTQUEUED) S ZTREQ="@"
|
---|
124 | S ^XTMP("ORGRAPH","QUEUE",STAMP)=NOW_U_ORMTIME
|
---|
125 | S ^XTMP("ORGDATA","Q",GSTAMP)=GSTAMP
|
---|
126 | S ^XTMP("ORGDATA","QT",ORUSER_U_ORPAT)=ORMTIME
|
---|
127 | D GSTAMP(GSTAMP,ORMTIME,GNOW,4)
|
---|
128 | I 'ORUSER S $P(^XTMP("ORGRAPH","INIT"),U,4)=NOW
|
---|
129 | I $G(^XTMP("ORGRAPH","STATUS"))'="ACTIVE" D START
|
---|
130 | S ^XTMP("ORGRAPH","STATUS")="INACTIVE"
|
---|
131 | Q
|
---|
132 | ;
|
---|
133 | START ;
|
---|
134 | S ^XTMP("ORGRAPH","STATUS")="ACTIVE"
|
---|
135 | N COUNT,MAX,NEXT,STOP,TIMES
|
---|
136 | S MAX=5
|
---|
137 | S COUNT=0
|
---|
138 | S STOP=0
|
---|
139 | S NEXT=""
|
---|
140 | F S NEXT=$O(^XTMP("ORGRAPH","QUEUE",NEXT)) D Q:STOP
|
---|
141 | . I NEXT="" D Q
|
---|
142 | .. H 1
|
---|
143 | .. S COUNT=COUNT+1
|
---|
144 | .. I COUNT>MAX S STOP=1 Q
|
---|
145 | . S TIMES=^XTMP("ORGRAPH","QUEUE",NEXT)
|
---|
146 | . K ^XTMP("ORGRAPH","QUEUE",NEXT)
|
---|
147 | . D PROCESS(NEXT,TIMES)
|
---|
148 | . K ^XTMP("ORGRAPH","QUEUE",NEXT)
|
---|
149 | Q
|
---|
150 | ;
|
---|
151 | PROCESS(NEXT,TIMES) ;
|
---|
152 | N DFN,GSTAMP,IN,OUT,TSTMP,USER
|
---|
153 | S TSTMP=+$P(NEXT,U)
|
---|
154 | S USER=+$P(NEXT,U,2)
|
---|
155 | S DFN=$P(NEXT,U,3)
|
---|
156 | S GSTAMP=$P(TIMES,U,2)_U_USER_U_DFN
|
---|
157 | D ALL(GSTAMP,DFN,USER)
|
---|
158 | I 'USER S $P(^XTMP("ORGRAPH","INIT"),U,5)=$$NOW^ORWGAPIX
|
---|
159 | Q
|
---|
160 | ;
|
---|
161 | ALL(GSTAMP,DFN,USER) ;
|
---|
162 | N BACKTO,CNT,LASTDATE,NUM,PATUSER,PREV,START,TIMED,TIMEI,TIMEL,TIMEZ,TYPE
|
---|
163 | K ^TMP("ORGAI",$J),^TMP("ORGI",$J),^TMP("ORGT",$J)
|
---|
164 | S START=$$NOW^ORWGAPIX
|
---|
165 | S DFN=+$G(DFN) I 'DFN Q
|
---|
166 | S USER=+$G(USER)
|
---|
167 | S PATUSER=DFN_U_USER
|
---|
168 | S TIMEI=START
|
---|
169 | D GSTAMP(GSTAMP,+GSTAMP,$$MNOW,5)
|
---|
170 | S GTIME=$$MNOW
|
---|
171 | D TYPES^ORWGAPI("ORGT",DFN)
|
---|
172 | I '$L($O(^TMP("ORGT",$J,""))) Q
|
---|
173 | S NUM=""
|
---|
174 | F S NUM=$O(^TMP("ORGT",$J,NUM)) Q:NUM="" D
|
---|
175 | . S TYPE=$P(^TMP("ORGT",$J,NUM),U)
|
---|
176 | . K ^TMP("ORGI",$J)
|
---|
177 | . S CNT=0
|
---|
178 | . D ITEMS^ORWGAPIR("ORGI",DFN,TYPE,3,,,.CNT,2)
|
---|
179 | . M ^TMP("ORGAI",$J)=^TMP("ORGI",$J)
|
---|
180 | K ^TMP("ORGI",$J)
|
---|
181 | S PREV=1
|
---|
182 | I '$D(^XTMP("ORGRAPH","OLD DATA",DFN)) S PREV=0
|
---|
183 | I '$D(^XTMP("ORGRAPH","OLD LABS",DFN)) S PREV=0
|
---|
184 | I USER D ; user is 0 when doing init
|
---|
185 | . L +^XTMP("ORGRAPH","ALL ITEMS",PATUSER):1 I '$T Q
|
---|
186 | . M ^XTMP("ORGRAPH","ALL ITEMS",PATUSER)=^TMP("ORGAI",$J)
|
---|
187 | . L -^XTMP("ORGRAPH","ALL ITEMS",PATUSER)
|
---|
188 | S LASTDATE=+$G(^XTMP("ORGRAPH","LAST BUILD",DFN))
|
---|
189 | I 'LASTDATE S LASTDATE=DT
|
---|
190 | S BACKTO=$$FMADD^XLFDT(LASTDATE,-30) ; *** backto value is 30 days ********************
|
---|
191 | S TIMED=$$NOW^ORWGAPIX
|
---|
192 | D GETDATA("DATA",GSTAMP,GTIME,PATUSER,START,BACKTO)
|
---|
193 | S TIMEL=$$NOW^ORWGAPIX
|
---|
194 | D GETDATA("LABS",GSTAMP,GTIME,PATUSER,START,BACKTO)
|
---|
195 | S TIMEZ=$$NOW^ORWGAPIX
|
---|
196 | S ^XTMP("ORGRAPH","LAST BUILD",DFN)=DT
|
---|
197 | K ^TMP("ORGAI",$J),^TMP("ORGI",$J),^TMP("ORGT",$J)
|
---|
198 | Q
|
---|
199 | ;
|
---|
200 | GETDATA(TYPES,GSTAMP,GTIME,PATUSER,START,BACKTO) ;
|
---|
201 | N ALLSUBS,CNT,DATA,DFN,NUM,NUM1,OLDSUBS,SUB,TYPEITEM,USER
|
---|
202 | K ^TMP("ORGD",$J),^TMP("ORGID",$J),^TMP("ORGNI",$J)
|
---|
203 | S OLDSUBS="OLD "_TYPES
|
---|
204 | S ALLSUBS="ALL "_TYPES
|
---|
205 | S DFN=+PATUSER
|
---|
206 | S USER=+$P(PATUSER,U,2)
|
---|
207 | S SIZE=0
|
---|
208 | I $D(^XTMP("ORGRAPH",OLDSUBS,DFN)) D
|
---|
209 | . S SUB=""
|
---|
210 | . F S SUB=$O(^TMP("ORGAI",$J,SUB)) Q:SUB="" D
|
---|
211 | .. S TYPEITEM=$G(^TMP("ORGAI",$J,SUB))
|
---|
212 | .. I TYPES="DATA",$P(TYPEITEM,U)=63 Q
|
---|
213 | .. I TYPES="LABS",$P(TYPEITEM,U)'=63 Q
|
---|
214 | .. I $P(TYPEITEM,U,6)>BACKTO S ^TMP("ORGNI",$J,SUB)=TYPEITEM
|
---|
215 | . S CNT=0
|
---|
216 | . S NUM=""
|
---|
217 | . F S NUM=$O(^TMP("ORGNI",$J,NUM)) Q:NUM="" D
|
---|
218 | .. S TYPEITEM=^TMP("ORGNI",$J,NUM)
|
---|
219 | .. D SIZE(TYPEITEM,START,DFN,BACKTO,.SIZE)
|
---|
220 | . D GSTAMP(GSTAMP,GTIME,$$MNOW,6)
|
---|
221 | . S $P(^XTMP("ORGDATA","Q",GSTAMP),U,16)=SIZE+$P(^XTMP("ORGDATA","Q",GSTAMP),U,16)
|
---|
222 | E D
|
---|
223 | . S NUM=""
|
---|
224 | . F S NUM=$O(^TMP("ORGAI",$J,NUM)) Q:NUM="" D
|
---|
225 | .. S TYPEITEM=^TMP("ORGAI",$J,NUM)
|
---|
226 | .. I TYPES="DATA",$P(TYPEITEM,U)=63 Q
|
---|
227 | .. I TYPES="LABS",$P(TYPEITEM,U)'=63 Q
|
---|
228 | .. D SIZE(TYPEITEM,START,DFN,2700101,.SIZE)
|
---|
229 | . D GSTAMP(GSTAMP,GTIME,$$MNOW,7)
|
---|
230 | . S $P(^XTMP("ORGDATA","Q",GSTAMP),U,17)=SIZE+$P(^XTMP("ORGDATA","Q",GSTAMP),U,17)
|
---|
231 | S GTIME=$$MNOW
|
---|
232 | M ^XTMP("ORGRAPH",OLDSUBS,DFN)=^TMP("ORGD",$J)
|
---|
233 | I USER D ; user is 0 when doing init
|
---|
234 | . L +^XTMP("ORGRAPH",ALLSUBS,PATUSER):1 I '$T Q
|
---|
235 | . M ^XTMP("ORGRAPH",ALLSUBS,PATUSER)=^XTMP("ORGRAPH",OLDSUBS,DFN)
|
---|
236 | . L -^XTMP("ORGRAPH",ALLSUBS,PATUSER)
|
---|
237 | K ^TMP("ORGD",$J),^TMP("ORGID",$J),^TMP("ORGNI",$J)
|
---|
238 | D GSTAMP(GSTAMP,GTIME,$$MNOW,8)
|
---|
239 | Q
|
---|
240 | ;
|
---|
241 | SIZE(TYPEITEM,START,DFN,BACKTO,SIZE) ;
|
---|
242 | N DATA,NUM
|
---|
243 | K ^TMP("ORGID",$J)
|
---|
244 | D ITEMDATA^ORWGAPI("ORGID",TYPEITEM,START,DFN,BACKTO)
|
---|
245 | S NUM=""
|
---|
246 | F S NUM=$O(^TMP("ORGID",$J,NUM)) Q:NUM="" D
|
---|
247 | . S DATA=^TMP("ORGID",$J,NUM)
|
---|
248 | . S ^TMP("ORGD",$J,$P(DATA,U,1,3))=DATA
|
---|
249 | . S SIZE=$L(DATA)+SIZE
|
---|
250 | Q
|
---|
251 | ;
|
---|
252 | RESOURCE ; from ORWGAPIU on post init, setup graphing resource device
|
---|
253 | N X
|
---|
254 | S X=$$RES^XUDHSET("ORWG GRAPHING RESOURCE",,3,"CPRS GUI graphing data retrieval")
|
---|
255 | Q
|
---|
256 | ;
|
---|
257 | GSTAMP(GSTAMP,TIME1,TIME2,PIECE) ;
|
---|
258 | S $P(^XTMP("ORGDATA","Q",GSTAMP),"^",PIECE)=TIME2-TIME1
|
---|
259 | Q
|
---|
260 | ;
|
---|
261 | MNOW() ;
|
---|
262 | Q $$ZZ^ORWGAPIX
|
---|
263 | ;
|
---|
264 | CLEAN ;
|
---|
265 | K ^XTMP("ORGRAPH")
|
---|
266 | Q
|
---|
267 | ;
|
---|