PXRMSXRM ; SLC/PKR - Main driver for building indexes. ;11/23/2007 ;;2.0;CLINICAL REMINDERS;**6**;Feb 04, 2005;Build 123 ; ;========================================== ADDERROR(GLOBAL,IDEN,NERROR) ;Add to the error list. S NERROR=NERROR+1 S ^TMP("PXRMERROR",$J,NERROR,0)="GLOBAL: "_GLOBAL_" ENTRY: "_IDEN Q ; ;========================================== ASKTASK() ;See if this should be tasked. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y S DIR(0)="YO" S DIR("A")="Do you want this to be tasked" S DIR("B")="Y" D ^DIR I $D(DIROUT)!$D(DIRUT) Q "" I $D(DUOUT)!$D(DTOUT) Q "" Q Y ; ;========================================== COMMSG(GLOBAL,START,END,NE,NERROR) ;Send a MailMan message providing ;notification that the indexing completed. N XMSUB K ^TMP("PXRMXMZ",$J) S XMSUB="Index for global "_GLOBAL_" sucessfully built" S ^TMP("PXRMXMZ",$J,1,0)="Build of Clinical Reminders index for global "_GLOBAL_" completed." S ^TMP("PXRMXMZ",$J,2,0)="Build finished at "_$$FMTE^XLFDT($$NOW^XLFDT,"5Z") S ^TMP("PXRMXMZ",$J,3,0)=NE_" entries were created." S ^TMP("PXRMXMZ",$J,4,0)=$$ETIME(START,END) S ^TMP("PXRMXMZ",$J,5,0)=NERROR_" errors were encountered." I NERROR>0 S ^TMP("PXRMXMZ",$J,6,0)="Another MailMan message will contain the error information." D SEND^PXRMMSG(XMSUB) Q ; ;========================================== DETIME(START,END) ;Write out the elapsed time. ;START and END are $H times. N TEXT S TEXT=$$ETIME(START,END) D MES^XPDUTL(TEXT) Q ; ;========================================== ERRMSG(NERROR,GLOBAL) ;If there were errors send an error message. N END,IND,MAXERR,NE,XMSUB I NERROR=0 Q ;Return the last MAXERR errors S MAXERR=+$G(^PXRM(800,1,"MIERR")) I MAXERR=0 S MAXERR=200 K ^TMP("PXRMXMZ",$J) S END=$S(NERROR'>MAXERR:NERROR,1:MAXERR) S NE=NERROR+1 F IND=1:1:END S NE=NE-1,^TMP("PXRMXMZ",$J,IND,0)=^TMP("PXRMERROR",$J,NE,0) I END=MAXERR S ^TMP("PXRMXMZ",$J,MAXERR+1,0)="GLOBAL: "_GLOBAL_"- Maximum number of errors reached, will not report any more." K ^TMP("PXRMERROR",$J) S XMSUB="CLINICAL REMINDER INDEX BUILD ERROR(S) FOR GLOBAL "_GLOBAL D SEND^PXRMMSG(XMSUB) Q ; ;========================================== ETIME(START,END) ;Calculate and format the elapsed time. ;START and END are $H times. N ETIME,TEXT S ETIME=$$HDIFF^XLFDT(END,START,2) I ETIME>90 D . S ETIME=$$HDIFF^XLFDT(END,START,3) . S TEXT="Elapsed time: "_ETIME E S TEXT="Elapsed time: "_ETIME_" secs" Q TEXT ; ;========================================== INDEX ;Driver for building the various indexes. N GBL,LIST,ROUTINE,TASKIT S ROUTINE(45)="INDEX^DGPTDDCR" ;DBIA #4521 S ROUTINE(52)="PSRX^PSOPXRMI" ;DBIA #4522 S ROUTINE(55)="PSPA^PSSSXRD" ;DBIA #4172 S ROUTINE(63)="LAB^LRPXSXRL" ;DBIA #4247 S ROUTINE(70)="RAD^RAPXRM" ;DBIA #3731 S ROUTINE(100)="INDEX^ORPXRM" ;DBIA #4498 S ROUTINE(120.5)="VITALS^GMVPXRM" ;DBIA #3647 S ROUTINE(601.2)="INDEX^YTPXRM" ;DBIA #4523 S ROUTINE(601.84)="INDEX^YTQPXRM" ;DBIA #5055 S ROUTINE(9000011)="INDEX^GMPLPXRM" ;DBIA #4516 S ROUTINE(9000010.07)="VPOV^PXPXRMI2" ;DBIA #4520 S ROUTINE(9000010.11)="VIMM^PXPXRMI1" ;DBIA #4519 S ROUTINE(9000010.12)="VSK^PXPXRMI2" ;DBIA #4520 S ROUTINE(9000010.13)="VXAM^PXPXRMI2" ;DBIA #4520 S ROUTINE(9000010.16)="VPED^PXPXRMI2" ;DBIA #4520 S ROUTINE(9000010.18)="VCPT^PXPXRMI1" ;DBIA #4519 S ROUTINE(9000010.23)="VHF^PXPXRMI1" ;DBIA #4519 ;Get the list W !,"Which indexes do you want to (re)build?" D SEL(.LIST,.GBL) I LIST="" Q ;See if this should be tasked. S TASKIT=$$ASKTASK I TASKIT="" Q I TASKIT D . W !,"Queue the Clinical Reminders index job." . D TASKIT(LIST,.GBL,.ROUTINE) E D RUNNOW(LIST,.GBL,.ROUTINE) Q ; ;========================================== RUNNOW(LIST,GBL,ROUTINE) ;Run the routines now. N IND,LI,NUM,RTN S NUM=$L(LIST,",")-1 F IND=1:1:NUM D . S LI=$P(LIST,",",IND) . S RTN=ROUTINE(GBL(LI)) . D @RTN Q ; ;========================================== SEL(LIST,GBL) ;Select global list N ALIST,DIR,DIROUT,DIRUT,DTOUT,DUOUT,INUM,X,Y S INUM=1,ALIST(INUM)=" "_INUM_" - LABORATORY TEST (CH, Anatomic Path, Micro)",GBL(INUM)=63 S INUM=INUM+1,ALIST(INUM)=" "_INUM_" - MENTAL HEALTH",GBL(INUM)=601.2 S INUM=INUM+1,ALIST(INUM)=" "_INUM_" - MENTAL HEALTH (MHA3)",GBL(INUM)=601.84 S INUM=INUM+1,ALIST(INUM)=" "_INUM_" - ORDER",GBL(INUM)=100 S INUM=INUM+1,ALIST(INUM)=" "_INUM_" - PTF",GBL(INUM)=45 S INUM=INUM+1,ALIST(INUM)=" "_INUM_" - PHARMACY PATIENT",GBL(INUM)=55 S INUM=INUM+1,ALIST(INUM)=" "_INUM_" - PRESCRIPTION",GBL(INUM)=52 S INUM=INUM+1,ALIST(INUM)=" "_INUM_" - PROBLEM LIST",GBL(INUM)=9000011 S INUM=INUM+1,ALIST(INUM)=" "_INUM_" - RADIOLOGY",GBL(INUM)=70 S INUM=INUM+1,ALIST(INUM)=" "_INUM_" - V CPT",GBL(INUM)=9000010.18 S INUM=INUM+1,ALIST(INUM)=" "_INUM_" - V EXAM",GBL(INUM)=9000010.13 S INUM=INUM+1,ALIST(INUM)=" "_INUM_" - V HEALTH FACTORS",GBL(INUM)=9000010.23 S INUM=INUM+1,ALIST(INUM)=" "_INUM_" - V IMMUNIZATION",GBL(INUM)=9000010.11 S INUM=INUM+1,ALIST(INUM)=" "_INUM_" - V PATIENT ED",GBL(INUM)=9000010.16 S INUM=INUM+1,ALIST(INUM)=" "_INUM_" - V POV",GBL(INUM)=9000010.07 S INUM=INUM+1,ALIST(INUM)=" "_INUM_" - V SKIN TEST",GBL(INUM)=9000010.12 S INUM=INUM+1,ALIST(INUM)=" "_INUM_" - VITAL MEASUREMENT",GBL(INUM)=120.5 M DIR("A")=ALIST S DIR("A")="Enter your list" S DIR(0)="LO^1:"_INUM D ^DIR I $D(DIROUT)!$D(DIRUT) S LIST="" Q I $D(DUOUT)!$D(DTOUT) S LIST="" Q S LIST=Y Q ; ;========================================== TASKIT(LIST,GBL,ROUTINE) ;Build the indexes as a tasked job. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,MINDT,SDTIME,X,Y S MINDT=$$NOW^XLFDT S DIR("A",1)="Enter the date and time you want the job to start." S DIR("A",2)="It must be after "_$$FMTE^XLFDT(MINDT,"5Z") S DIR("A")="Start the task at: " S DIR(0)="DAU"_U_MINDT_"::RSX" D ^DIR I $D(DIROUT)!$D(DIRUT) Q I $D(DUOUT)!$D(DTOUT) Q S SDTIME=Y ;Put the task into the queue. K ZTSAVE S ZTSAVE("LIST")="" S ZTSAVE("GBL(")="" S ZTSAVE("ROUTINE(")="" S ZTRTN="TASKJOB^PXRMSXRM" S ZTDESC="Clinical Reminders index build" S ZTDTH=SDTIME S ZTIO="" D ^%ZTLOAD W !,"Task number ",ZTSK," queued." Q ; ;========================================== TASKJOB ;Execute as tasked job. LIST, GBL, and ROUTINE come through ;ZTSAVE. N IND,LI,NUM,RTN S ZTREQ="@" S ZTSTOP=0 S NUM=$L(LIST,",")-1 F IND=1:1:NUM D .;Check to see if the task has had a stop request . I $$S^%ZTLOAD S ZTSTOP=1,IND=NUM Q . S LI=$P(LIST,",",IND) . S RTN=ROUTINE(GBL(LI)) . D @RTN Q ;