Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: ORWGTASK

ORWGTASK.m

Go to the documentation of this file.
  1. ORWGTASK ; SLC/STAFF - Graph Task ;3/17/08 10:48
  1. ;;3.0;ORDER ENTRY/RESULTS REPORTING;**243**;Dec 17, 1997;Build 242
  1. ;
  1. SETLAST(PAT) ; from ORWGAPI - set whenever patient is graphed
  1. N NOW,USER
  1. S PAT=+$G(PAT)
  1. S USER=+$G(DUZ)
  1. S NOW=$$NOW^ORWGAPIX
  1. I USER,PAT D
  1. . S ^XTMP("ORGDATA","TP",PAT)=NOW
  1. . S ^XTMP("ORGDATA","TP",PAT,"U",USER)=NOW
  1. . S ^XTMP("ORGDATA","TU",USER)=NOW
  1. . D COUNT("G",PAT,USER)
  1. Q
  1. ;
  1. INIT(OK) ; from ORMTIM02 - run by ORMTIME (OK=0)
  1. N BACKTO,CNT,DFN,ITEM,LASTDFN,NOW,PURGE,TASKED,TIME
  1. S OK=+$G(OK,0)
  1. I $G(^XTMP("ORGRAPH","FORCE"))="ON" D ; set in ORY243 (post-init v27)
  1. . S OK=1
  1. . D CLEANALL
  1. I 'OK D ; unless forced, run one time on Saturday
  1. . I $P($G(^XTMP("ORGRAPH",0)),U,2)=DT Q
  1. . I $E(DT,6)="0",$$DOW^XLFDT(DT)="Saturday",$L($G(^XTMP("ORGRAPH",0))) D Q ; cleanup on 1st Sat of the month
  1. .. S OK=1
  1. .. D CLEANALL
  1. . I $$DOW^XLFDT(DT)="Saturday",$L($G(^XTMP("ORGRAPH",0))) S OK=1 Q
  1. I 'OK Q
  1. S BACKTO=$$FMADD^XLFDT(DT,-30) ;clear old data on non-graphed patients backto this date
  1. S PURGE=$$FMADD^XLFDT(DT,180) ; when to purge XTMP nodes
  1. S NOW=$$NOW^ORWGAPIX
  1. S ^XTMP("ORGDATA",0)=PURGE_U_DT_U_"CPRS Graphing - Patient Data Cache Stats"_U_NOW
  1. S ^XTMP("ORGRAPH",0)=PURGE_U_DT_U_"CPRS Graphing - Patient Data Cache"
  1. S CNT=0
  1. S LASTDFN=0
  1. S DFN=""
  1. F S DFN=$O(^XTMP("ORGDATA","TP",DFN)) Q:DFN="" D
  1. . S TIME=$O(^XTMP("ORGDATA","TP",DFN))
  1. . I '$L(TIME) Q
  1. . I TIME<BACKTO D CLRDATA(DFN) Q
  1. . S ^XTMP("ORGRAPH","QUEUE",NOW_"^0^"_DFN)=NOW ; put patients to update on queue
  1. . S LASTDFN=DFN
  1. . S CNT=CNT+1
  1. . S OK=1
  1. D UPDATE(.TASKED,LASTDFN,0,0) ; last patient starts the updates
  1. S ^XTMP("ORGRAPH","INIT")=NOW_U_$$NOW^ORWGAPIX_U_CNT
  1. S ^XTMP("ORGDATA",0)=^XTMP("ORGDATA",0)_U_$$NOW^ORWGAPIX_U_CNT
  1. Q
  1. ;
  1. CLEANALL ;
  1. K ^XTMP("ORGDATA")
  1. K ^XTMP("ORGRAPH")
  1. Q
  1. ;
  1. CLRDATA(DFN) ;
  1. N PATUSER,USER
  1. S USER=.9
  1. F S USER=$O(^XTMP("ORGDATA","TP",DFN,"U",USER)) Q:USER<1 D
  1. . S PATUSER=DFN_U_USER
  1. . K ^XTMP("ORGRAPH","ALL DATA",PATUSER)
  1. . K ^XTMP("ORGRAPH","ALL ITEMS",PATUSER)
  1. . K ^XTMP("ORGRAPH","ALL LABS",PATUSER)
  1. . K ^XTMP("ORGRAPH","OLD DATA",DFN)
  1. . K ^XTMP("ORGRAPH","OLD LABS",DFN)
  1. K ^XTMP("ORGDATA","TP",DFN)
  1. Q
  1. ;
  1. UPDATE(TASKED,DFN,USER,OLDDFN) ; from ORWGAPI
  1. ; whenever patient is selected
  1. ; to update, cache must exist and user/patient combo has used graphs
  1. ;D CLEANALL Q ; ******** temporary disabled BA 1/16/08 *********
  1. N NOW,ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE K ZTSAVE
  1. ;S ^XTMP("ZZZBOB")=$G(TASKED)_U_$G(DFN)_U_$G(USER)_U_$G(OLDDFN)
  1. S TASKED=-1 ; cache turned off
  1. I '$L($G(^XTMP("ORGRAPH",0))) Q
  1. S TASKED=0 ; not building cache
  1. I USER,DFN D COUNT("P",DFN,USER)
  1. I USER,'$G(^XTMP("ORGDATA","TU",USER)) Q ; user must use graphing to cache
  1. I USER,OLDDFN D CLEARPT(OLDDFN,USER)
  1. I 'DFN Q
  1. I '$G(^XTMP("ORGDATA","TP",DFN)) Q ; patient must be used with graphing to cache
  1. 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
  1. S TASKED=1 ; building cache
  1. S NOW=$$NOW^ORWGAPIX
  1. I USER D CLEARPT(DFN,USER)
  1. S ZTIO="ORWG GRAPHING RESOURCE",ZTDTH=$H,ZTDESC="process graph data"
  1. S ZTSAVE("ORMTIME")=$$MNOW
  1. S ZTSAVE("ORPAT")=DFN
  1. S ZTSAVE("ORTSTMP")=NOW
  1. S ZTSAVE("ORUSER")=USER
  1. S ZTRTN="UP^ORWGTASK"
  1. D ^%ZTLOAD
  1. Q
  1. ;
  1. COUNT(EVENT,DFN,USER) ;
  1. I EVENT="P" D Q
  1. . S ^("C")=1+$G(^XTMP("ORGDATA","P",DFN,"C"))
  1. . S ^(USER)=1+$G(^XTMP("ORGDATA","P",DFN,"C-U",USER))
  1. . S ^("C")=1+$G(^XTMP("ORGDATA","U",USER,"C"))
  1. . S ^(DFN)=1+$G(^XTMP("ORGDATA","U",USER,"C-P",DFN))
  1. I EVENT="G" D Q
  1. . S ^("CG")=1+$G(^XTMP("ORGDATA","P",DFN,"CG"))
  1. . S ^(USER)=1+$G(^XTMP("ORGDATA","P",DFN,"CG-U",USER))
  1. . S ^("CG")=1+$G(^XTMP("ORGDATA","U",USER,"CG"))
  1. . S ^(DFN)=1+$G(^XTMP("ORGDATA","U",USER,"CG-P",DFN))
  1. Q
  1. ;
  1. CLEARPT(DFN,USER) ;
  1. N PATUSER
  1. S PATUSER=DFN_U_USER
  1. K ^XTMP("ORGRAPH","ALL DATA",PATUSER)
  1. K ^XTMP("ORGRAPH","ALL ITEMS",PATUSER)
  1. K ^XTMP("ORGRAPH","ALL LABS",PATUSER)
  1. Q
  1. ;
  1. UP ; dequeued from ORWGTASK
  1. ; ORUSER, ORPAT, ORTSTMP were saved
  1. N GNOW,GSTAMP,NOW,STAMP
  1. S STAMP=ORTSTMP_U_ORUSER_U_ORPAT
  1. S GSTAMP=ORMTIME_U_ORUSER_U_ORPAT
  1. S NOW=$$NOW^ORWGAPIX
  1. S GNOW=$$MNOW
  1. I $D(ZTQUEUED) S ZTREQ="@"
  1. S ^XTMP("ORGRAPH","QUEUE",STAMP)=NOW_U_ORMTIME
  1. S ^XTMP("ORGDATA","Q",GSTAMP)=GSTAMP
  1. S ^XTMP("ORGDATA","QT",ORUSER_U_ORPAT)=ORMTIME
  1. D GSTAMP(GSTAMP,ORMTIME,GNOW,4)
  1. I 'ORUSER S $P(^XTMP("ORGRAPH","INIT"),U,4)=NOW
  1. I $G(^XTMP("ORGRAPH","STATUS"))'="ACTIVE" D START
  1. S ^XTMP("ORGRAPH","STATUS")="INACTIVE"
  1. Q
  1. ;
  1. START ;
  1. S ^XTMP("ORGRAPH","STATUS")="ACTIVE"
  1. N COUNT,MAX,NEXT,STOP,TIMES
  1. S MAX=5
  1. S COUNT=0
  1. S STOP=0
  1. S NEXT=""
  1. F S NEXT=$O(^XTMP("ORGRAPH","QUEUE",NEXT)) D Q:STOP
  1. . I NEXT="" D Q
  1. .. H 1
  1. .. S COUNT=COUNT+1
  1. .. I COUNT>MAX S STOP=1 Q
  1. . S TIMES=^XTMP("ORGRAPH","QUEUE",NEXT)
  1. . K ^XTMP("ORGRAPH","QUEUE",NEXT)
  1. . D PROCESS(NEXT,TIMES)
  1. . K ^XTMP("ORGRAPH","QUEUE",NEXT)
  1. Q
  1. ;
  1. PROCESS(NEXT,TIMES) ;
  1. N DFN,GSTAMP,IN,OUT,TSTMP,USER
  1. S TSTMP=+$P(NEXT,U)
  1. S USER=+$P(NEXT,U,2)
  1. S DFN=$P(NEXT,U,3)
  1. S GSTAMP=$P(TIMES,U,2)_U_USER_U_DFN
  1. D ALL(GSTAMP,DFN,USER)
  1. I 'USER S $P(^XTMP("ORGRAPH","INIT"),U,5)=$$NOW^ORWGAPIX
  1. Q
  1. ;
  1. ALL(GSTAMP,DFN,USER) ;
  1. N BACKTO,CNT,LASTDATE,NUM,PATUSER,PREV,START,TIMED,TIMEI,TIMEL,TIMEZ,TYPE
  1. K ^TMP("ORGAI",$J),^TMP("ORGI",$J),^TMP("ORGT",$J)
  1. S START=$$NOW^ORWGAPIX
  1. S DFN=+$G(DFN) I 'DFN Q
  1. S USER=+$G(USER)
  1. S PATUSER=DFN_U_USER
  1. S TIMEI=START
  1. D GSTAMP(GSTAMP,+GSTAMP,$$MNOW,5)
  1. S GTIME=$$MNOW
  1. D TYPES^ORWGAPI("ORGT",DFN)
  1. I '$L($O(^TMP("ORGT",$J,""))) Q
  1. S NUM=""
  1. F S NUM=$O(^TMP("ORGT",$J,NUM)) Q:NUM="" D
  1. . S TYPE=$P(^TMP("ORGT",$J,NUM),U)
  1. . K ^TMP("ORGI",$J)
  1. . S CNT=0
  1. . D ITEMS^ORWGAPIR("ORGI",DFN,TYPE,3,,,.CNT,2)
  1. . M ^TMP("ORGAI",$J)=^TMP("ORGI",$J)
  1. K ^TMP("ORGI",$J)
  1. S PREV=1
  1. I '$D(^XTMP("ORGRAPH","OLD DATA",DFN)) S PREV=0
  1. I '$D(^XTMP("ORGRAPH","OLD LABS",DFN)) S PREV=0
  1. I USER D ; user is 0 when doing init
  1. . L +^XTMP("ORGRAPH","ALL ITEMS",PATUSER):1 I '$T Q
  1. . M ^XTMP("ORGRAPH","ALL ITEMS",PATUSER)=^TMP("ORGAI",$J)
  1. . L -^XTMP("ORGRAPH","ALL ITEMS",PATUSER)
  1. S LASTDATE=+$G(^XTMP("ORGRAPH","LAST BUILD",DFN))
  1. I 'LASTDATE S LASTDATE=DT
  1. S BACKTO=$$FMADD^XLFDT(LASTDATE,-30) ; *** backto value is 30 days ********************
  1. S TIMED=$$NOW^ORWGAPIX
  1. D GETDATA("DATA",GSTAMP,GTIME,PATUSER,START,BACKTO)
  1. S TIMEL=$$NOW^ORWGAPIX
  1. D GETDATA("LABS",GSTAMP,GTIME,PATUSER,START,BACKTO)
  1. S TIMEZ=$$NOW^ORWGAPIX
  1. S ^XTMP("ORGRAPH","LAST BUILD",DFN)=DT
  1. K ^TMP("ORGAI",$J),^TMP("ORGI",$J),^TMP("ORGT",$J)
  1. Q
  1. ;
  1. GETDATA(TYPES,GSTAMP,GTIME,PATUSER,START,BACKTO) ;
  1. N ALLSUBS,CNT,DATA,DFN,NUM,NUM1,OLDSUBS,SUB,TYPEITEM,USER
  1. K ^TMP("ORGD",$J),^TMP("ORGID",$J),^TMP("ORGNI",$J)
  1. S OLDSUBS="OLD "_TYPES
  1. S ALLSUBS="ALL "_TYPES
  1. S DFN=+PATUSER
  1. S USER=+$P(PATUSER,U,2)
  1. S SIZE=0
  1. I $D(^XTMP("ORGRAPH",OLDSUBS,DFN)) D
  1. . S SUB=""
  1. . F S SUB=$O(^TMP("ORGAI",$J,SUB)) Q:SUB="" D
  1. .. S TYPEITEM=$G(^TMP("ORGAI",$J,SUB))
  1. .. I TYPES="DATA",$P(TYPEITEM,U)=63 Q
  1. .. I TYPES="LABS",$P(TYPEITEM,U)'=63 Q
  1. .. I $P(TYPEITEM,U,6)>BACKTO S ^TMP("ORGNI",$J,SUB)=TYPEITEM
  1. . S CNT=0
  1. . S NUM=""
  1. . F S NUM=$O(^TMP("ORGNI",$J,NUM)) Q:NUM="" D
  1. .. S TYPEITEM=^TMP("ORGNI",$J,NUM)
  1. .. D SIZE(TYPEITEM,START,DFN,BACKTO,.SIZE)
  1. . D GSTAMP(GSTAMP,GTIME,$$MNOW,6)
  1. . S $P(^XTMP("ORGDATA","Q",GSTAMP),U,16)=SIZE+$P(^XTMP("ORGDATA","Q",GSTAMP),U,16)
  1. E D
  1. . S NUM=""
  1. . F S NUM=$O(^TMP("ORGAI",$J,NUM)) Q:NUM="" D
  1. .. S TYPEITEM=^TMP("ORGAI",$J,NUM)
  1. .. I TYPES="DATA",$P(TYPEITEM,U)=63 Q
  1. .. I TYPES="LABS",$P(TYPEITEM,U)'=63 Q
  1. .. D SIZE(TYPEITEM,START,DFN,2700101,.SIZE)
  1. . D GSTAMP(GSTAMP,GTIME,$$MNOW,7)
  1. . S $P(^XTMP("ORGDATA","Q",GSTAMP),U,17)=SIZE+$P(^XTMP("ORGDATA","Q",GSTAMP),U,17)
  1. S GTIME=$$MNOW
  1. M ^XTMP("ORGRAPH",OLDSUBS,DFN)=^TMP("ORGD",$J)
  1. I USER D ; user is 0 when doing init
  1. . L +^XTMP("ORGRAPH",ALLSUBS,PATUSER):1 I '$T Q
  1. . M ^XTMP("ORGRAPH",ALLSUBS,PATUSER)=^XTMP("ORGRAPH",OLDSUBS,DFN)
  1. . L -^XTMP("ORGRAPH",ALLSUBS,PATUSER)
  1. K ^TMP("ORGD",$J),^TMP("ORGID",$J),^TMP("ORGNI",$J)
  1. D GSTAMP(GSTAMP,GTIME,$$MNOW,8)
  1. Q
  1. ;
  1. SIZE(TYPEITEM,START,DFN,BACKTO,SIZE) ;
  1. N DATA,NUM
  1. K ^TMP("ORGID",$J)
  1. D ITEMDATA^ORWGAPI("ORGID",TYPEITEM,START,DFN,BACKTO)
  1. S NUM=""
  1. F S NUM=$O(^TMP("ORGID",$J,NUM)) Q:NUM="" D
  1. . S DATA=^TMP("ORGID",$J,NUM)
  1. . S ^TMP("ORGD",$J,$P(DATA,U,1,3))=DATA
  1. . S SIZE=$L(DATA)+SIZE
  1. Q
  1. ;
  1. RESOURCE ; from ORWGAPIU on post init, setup graphing resource device
  1. N X
  1. S X=$$RES^XUDHSET("ORWG GRAPHING RESOURCE",,3,"CPRS GUI graphing data retrieval")
  1. Q
  1. ;
  1. GSTAMP(GSTAMP,TIME1,TIME2,PIECE) ;
  1. S $P(^XTMP("ORGDATA","Q",GSTAMP),"^",PIECE)=TIME2-TIME1
  1. Q
  1. ;
  1. MNOW() ;
  1. Q $$ZZ^ORWGAPIX
  1. ;
  1. CLEAN ;
  1. K ^XTMP("ORGRAPH")
  1. Q
  1. ;