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

PXRMSXRM.m

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