ORWCV ; SLC/KCM - Background Cover Sheet Load; ;11/2/06 15:07 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,109,132,209,214,195,215,260**;Dec 17, 1997;Build 26 ; ; DBIA 4011 Access ^XWB(8994) ; DBIA 4313 Direct R/W permission to capacity mgmt global ^KMPTMP("KMPDT") ; DBIA 10061 Reference to ^UTILITY ; START(VAL,DFN,IP,HWND,LOC,NODO,NEWREM) ; start cover sheet build in background N ZTIO,ZTRTN,ZTDTH,ZTSAVE,ZTDESC,SECT,BACK,X,I,ORLIST,STR,FILE,NODE,ORHTIME,ORX ; Capacity planning timing code uses ORHTIME S ORHTIME=$H S LOC=$G(LOC),NODO=";"_$G(NODO),NEWREM=+$G(NEWREM) D GETLST^XPAR(.ORX,"SYS^PKG","ORWOR COVER RETRIEVAL NEW","Q") S I=0 F S I=$O(ORX(I)) Q:'I I $D(^ORD(101.24,+ORX(I),0)) S SECT(+$P(^(0),"^",2))=$P(ORX(I),"^",2) D GETLST^XPAR(.ORLIST,"ALL","ORWCV1 COVERSHEET LIST") S (VAL,BACK,STR,FILE)="" F S I=$O(ORLIST(I)) Q:'I I $D(^ORD(101.24,$P(ORLIST(I),"^",2),0)) S X0=^(0) D . Q:$P(X0,"^",8)'="C" . S X=$P(X0,"^",2) . I NODO[(";"_X_";") Q ; if in NODO, dont do section . S STR=STR_X_";" . I '$G(SECT(X)) S VAL=VAL_X_";" ; load section in foreground . E S BACK=BACK_X_";",FILE=FILE_$P(ORLIST(I),"^",2)_";" ; load section in background Q:BACK="" S ZTIO="ORW THREAD RESOURCE",ZTRTN="BUILD^ORWCV",ZTDTH=$H S (ZTSAVE("DFN"),ZTSAVE("IP"),ZTSAVE("HWND"),ZTSAVE("NEWREM"),ZTSAVE("LOC"),ZTSAVE("BACK"),ZTSAVE("FILE"))="" S ZTDESC="CPRS GUI Background Data Retrieval" D ^%ZTLOAD I '$D(ZTSK) S VAL=STR Q S NODE="ORWCV "_IP_"-"_HWND_"-"_DFN K ^XTMP(NODE) S ^XTMP(NODE,0)=$$FMADD^XLFDT(DT,1)_U_DT_U_"Background CPRS "_ZTSK ; Start capacity planning timing clock - will be stopped in POLL code I +$G(^KMPTMP("KMPD-CPRS")) S ^KMPTMP("KMPDT","ORWCV",NODE)=$G(ORHTIME)_"^^"_$G(DUZ)_"^"_$G(IO("CLNM")) Q BUILD ; called in background by task manager, expects DFN, JobID N NODE,IFLE,ORFNUM,ID,ENT,RTN,INODE,PARAM1,PARAM2,DETAIL,X0,X2 S NODE="ORWCV "_IP_"-"_HWND_"-"_DFN I $D(ZTQUEUED) S ZTREQ="@" I $G(^XTMP(NODE,"STOP")) K ^XTMP(NODE) Q ; client no longer polling I '$D(^XTMP(NODE,0)) Q ; XTMP node has been purged L +^XTMP(NODE) S ^XTMP(NODE,"DFN")=DFN ;N $ETRAP,$ESTACK ;S $ETRAP="D ERR^ORWCV Q" I $L($G(FILE),";")>0 F IFLE=1:1:$L(FILE,";") S ORFNUM=$P(FILE,";",IFLE) Q:'$D(^ORD(101.24,+ORFNUM,0)) S X0=^(0),X2=$G(^(2)) D . S ID=$P(X0,"^",2),ENT=$P(X0,"^",6),RTN=$P(X0,"^",5),PARAM1=$P(X2,"^"),PARAM2=$P(X2,"^",2),INODE=$P(X2,"^",5),DETAIL="" . I $P(X0,"^",18) S DETAIL=$P($G(^ORD(101.24,+$P(X0,"^",18),0)),"^",13),DETAIL=$P($G(^XWB(8994,+DETAIL,0)),"^") ;DBIA 4011 . I '$L(INODE) Q . I '$L(ENT) S LST(IFLE)="0^ERROR: Missing ENTRY POINT field in file 101.24 for "_$P(X0,"^")_", IFN="_+ORFNUM D LST2XTMP(INODE) Q . I '$L(RTN) S LST(IFLE)="0^ERROR: Missing ROUTINE field in file 101.24 for "_$P(X0,"^")_", IFN="_+ORFNUM D LST2XTMP(INODE) Q . I '$L($T(@(ENT_"^"_RTN))) S LST(IFLE)="0^ERROR: "_ENT_"~"_RTN_" does not exist. See file 101.24 entry: "_$P(X0,"^")_", IFN="_+ORFNUM D LST2XTMP(INODE) Q . I ID=50 D:$L($T(STRT3^AWCMCPR1)) STRT3^AWCMCPR1 D D:$L($T(END^AWCMCPR1)) END^AWCMCPR1 Q ;Special case for reminders .. I $G(NEWREM) D APPL^ORQQPXRM(.LST,DFN,LOC) I 1 .. E D @(ENT_"^"_RTN_"(.LST,DFN)") .. D LST2XTMP(INODE) . I $L(PARAM1),$L(PARAM2) D @(ENT_"^"_RTN_"(.LST,DFN,PARAM1,PARAM2)"),LST2XTMP(INODE) Q . I $L(PARAM1) D @(ENT_"^"_RTN_"(.LST,DFN,PARAM1)"),LST2XTMP(INODE) Q . D @(ENT_"^"_RTN_"(.LST,DFN)"),LST2XTMP(INODE) S ^XTMP(NODE,"DONE")=1 I $G(^XTMP(NODE,"STOP")) K ^XTMP(NODE) L -^XTMP(NODE) Q ERR ;Error trap S $ETRAP="D UNWIND^ORWCV Q" I $D(NODE) D . I $D(INODE) S LST(0)="",LST(1)="0^ERROR DURING COVER SHEET BUILD:"_$ZERROR D LST2XTMP(INODE) . S ^XTMP(NODE,"DONE")=1 . L -^XTMP(NODE) D @^%ZOSF("ERRTN") ;file error S $ECODE=",UOR70 error during Cover Sheet build," Q UNWIND ;Unwind Error stack Q:$ESTACK>1 ;pop the stack ;add additional code here, if needed Q LST2XTMP(ID) ; put the list in ^XTMP(NODE,ID) I $G(^XTMP(NODE,"STOP")) Q N I I $L($G(DETAIL)) S I=0 F S I=$O(LST(I)) Q:'I S $P(LST(I),"^",12)=DETAIL K ^XTMP(NODE,ID) M ^XTMP(NODE,ID)=LST S ^XTMP(NODE,ID)=1 K LST Q POLL(LST,DFN,IP,HWND) ; poll for completed cover sheet parts N I,ILST,ID,NODE,DONE S NODE="ORWCV "_IP_"-"_HWND_"-"_DFN,ILST=0,DONE=0 I '$D(^XTMP(NODE,"DFN")) Q I ^XTMP(NODE,"DFN")'=DFN S LST(1)="~DONE=1" Q I $G(^XTMP(NODE,"DONE")) S ILST=ILST+1,LST(ILST)="~DONE=1",DONE=1 F ID="PROB","CWAD","MEDS","RMND","LABS","VITL","VSIT" D . I '$G(^XTMP(NODE,ID)) Q . S ILST=ILST+1,LST(ILST)="~"_ID . S I=0 F S I=$O(^XTMP(NODE,ID,I)) Q:'I S ILST=ILST+1,LST(ILST)="i"_^(I) . K ^XTMP(NODE,ID) ; Stop capacity planning timing clock - was started in START code I DONE K ^XTMP(NODE) I +$G(^KMPTMP("KMPD-CPRS")) S $P(^KMPTMP("KMPDT","ORWCV",NODE),"^",2)=$H Q STOP(OK,DFN,IP,HWND) ; stop cover sheet data retrieval S NODE="ORWCV "_IP_"-"_HWND_"-"_DFN,ILST=0,DONE=0 S ^XTMP(NODE,"STOP")=1,OK=1 L +^XTMP(NODE) I $G(^XTMP(NODE,"DONE")) K ^XTMP(NODE) L -^XTMP(NODE) Q CLEAN ; clean up ^XTMP nodes S X="ORWCV" F S X=$O(^XTMP(X)) Q:$E(X,1,5)'="ORWCV" W !,X K ^XTMP(X) Q LAB(LST,DFN) ; return labs for patient D:$L($T(STRT2^AWCMCPR1)) STRT2^AWCMCPR1 D LIST^ORQOR1(.LST,DFN,"LAB",4,"T-"_$$RNGLAB(DFN),"T","AW",1) D:$L($T(END^AWCMCPR1)) END^AWCMCPR1 Q ; VST1(ORVISIT,DFN,BEG,END,SKIP) ; N ERR,ERRMSG S ERR=0 ; kludge to return errors D VST(.ORVISIT,DFN,.BEG,.END,$G(SKIP),.ERR,.ERRMSG) I ERR K ORVISIT S ORVISIT(1)=ERRMSG Q ; TEST ;D VST(.ZZZ,76,2950101,3050401,777,1,1) Q VST(ORVISIT,DFN,BEG,END,SKIP,ERR,ERRMSG) ; return appts/admissions for patient N CHECKERR,VAERR,VASD,BDT,COUNT,DTM,EDT,LOC,NOW,ORQUERY,ORLST,STI,STS,TODAY,I,J,K,XI,XE,X S CHECKERR=($G(ERR)=0) ; kludge to check for errors S NOW=$$NOW^XLFDT(),TODAY=$P(NOW,".",1) I '$G(BEG) S BEG=$$X2FM($$RNGVBEG) I '$G(END) S END=$$X2FM($$RNGVEND)+0.2359 S COUNT=0 K ^TMP("ORVSTLIST",$J) S VAERR=0 I END>NOW D Q:VAERR ; get future encounters, past cancels/no-shows from VADPT . S VASD("F")=BEG . S VASD("T")=END . S VASD("W")="123456789" . D SDA^ORQRY01(.ERR,.ERRMSG) . I CHECKERR,ERR K ^UTILITY("VASD",$J) S ORVISIT(1)=ERRMSG Q ;IA 10061 . S I=0 F S I=$O(^UTILITY("VASD",$J,I)) Q:'I D . . S XI=^UTILITY("VASD",$J,I,"I"),XE=^("E") . . S DTM=$P(XI,U),IEN=$P(XI,U,2),STI=$P(XI,U,3) . . S LOC=$P(XE,U,2),STS=$P(XE,U,3) . . I DTMNOW D ;past encounters from ACRP Toolkit - set in CALLBACK . S BDT=BEG . S EDT=$S(END0 D Q:DONE . . S MOV=0 F S MOV=$O(^DGPM("ATID1",DFN,TIM,MOV)) Q:MOV'>0 D Q:DONE . . . S X0=^DGPM(MOV,0),MTIM=$P(X0,U) . . . I MTIM