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

PXRMMST.m

Go to the documentation of this file.
  1. PXRMMST ;SLC/PKR - Routines for dealing with MST. ;07/29/2010
  1. ;;2.0;CLINICAL REMINDERS;**4,6,17,18**;Feb 04, 2005;Build 152
  1. ;Use of DGMSTAPI supported by DBIA #2716.
  1. ;====================================================
  1. GSYINFO(TYPE) ;Return the Clinical Reminders MST synchronization date
  1. ;and the number of updates made. The format is an up-arrow delimited
  1. ;string. The first piece is the date and the second is the number
  1. ;of updates. If TYPE is "I" then the data for the initial
  1. ;synchronization is returned. For any other value the data for the
  1. ;last daily synchronization is returned.
  1. I $G(TYPE)="I" Q $P($G(^PXRM(800,1,"MST")),U,1,2) Q
  1. Q $P($G(^PXRM(800,1,"MST")),U,3,4)
  1. ;
  1. ;====================================================
  1. QUE ;Queue the MST synchronization job.
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,MINDT,SDTIME,STIME,X,Y
  1. S MINDT=$$NOW^XLFDT
  1. W !,"Queue the Clinical Reminders MST synchronization."
  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(DTOUT)!$D(DUOUT) Q
  1. S SDTIME=Y
  1. K DIR
  1. S DIR(0)="YA"
  1. S DIR("A")="Do you want to run the MST synchronization at the same time every day? "
  1. S DIR("B")="Y"
  1. D ^DIR
  1. I $D(DIROUT)!$D(DIRUT) Q
  1. I $D(DTOUT)!$D(DUOUT) Q
  1. S STIME=$S(Y:"1."_$P(SDTIME,".",2),1:-1)
  1. ;
  1. ;Put the task into the queue.
  1. K ZTSAVE
  1. S ZTSAVE("STIME")=STIME
  1. S ZTRTN="SYNCH^PXRMMST"
  1. S ZTDESC="Clinical Reminders MST synchronization job"
  1. S ZTDTH=SDTIME
  1. S ZTIO=""
  1. D ^%ZTLOAD
  1. W !,"Task number ",ZTSK," queued."
  1. Q
  1. ;
  1. ;====================================================
  1. STATUS(DFN,TEST,DATE,VALUE,TEXT) ;Computed finding for checking a
  1. ;patient's MST status.
  1. N IEN,TEMP
  1. S TEMP=$$GETSTAT^DGMSTAPI(DFN)
  1. S IEN=$P(TEMP,U,1)
  1. I IEN=-1 D Q
  1. . S TEST=0,VALUE="",DATE=$$NOW^PXRMDATE
  1. I IEN=0 D Q
  1. . S TEST=0
  1. . S VALUE=$P(TEMP,U,2)
  1. . S DATE=$P(TEMP,U,3)
  1. . S TEXT="No MST status found"
  1. ;If we get to here then a valid entry was found.
  1. S TEST=1
  1. S VALUE=$P(TEMP,U,2)
  1. S DATE=$P(TEMP,U,3)
  1. Q
  1. ;
  1. ;====================================================
  1. STCODE(TERM) ;Return the MST status code based on the term name.
  1. N STCODE
  1. S STCODE=$S(TERM="VA-MST DECLINES REPORT":"D",TERM="VA-MST NEGATIVE REPORT":"N",TERM="VA-MST POSITIVE REPORT":"Y",1:"U")
  1. Q STCODE
  1. ;
  1. ;====================================================
  1. SYNCH ;Synchronize the MST history file.
  1. N INID,LTIME,NUMUPD,START,TEMP
  1. ;STIME is passed from QUE via ZTSAVE.
  1. D UPDSTAT(.NUMUPD,.START)
  1. ;If the initial sync data has been stored then update the daily
  1. ;data.
  1. S INID=+$P($G(^PXRM(800,1,"MST")),U,1)
  1. I INID>0 D
  1. . S $P(^PXRM(800,1,"MST"),U,3)=$$NOW^XLFDT
  1. . S $P(^PXRM(800,1,"MST"),U,4)=NUMUPD
  1. . S $P(^PXRM(800,1,"MST"),U,6)=START
  1. E D
  1. . S $P(^PXRM(800,1,"MST"),U,1)=$$NOW^XLFDT
  1. . S $P(^PXRM(800,1,"MST"),U,2)=NUMUPD
  1. . S $P(^PXRM(800,1,"MST"),U,5)=START
  1. ;
  1. ;Cleanup the task stuff.
  1. I STIME=-1 S ZTREQ="@" Q
  1. E D
  1. . S TEMP=$G(^PXRM(800,1,"MST"))
  1. . S LTIME=+$P(TEMP,U,3)
  1. . I LTIME=0 S LTIME=+$P(TEMP,U,1)
  1. .;Adding STIME sets the new starting time at exactly one day following
  1. .;the previous starting time.
  1. . S $P(ZTREQ,U,1)=$P(LTIME,".",1)+STIME
  1. Q
  1. ;
  1. ;====================================================
  1. SYNREP ;Provide a report of the synchronization data.
  1. N EDTIME,EITIME,IDATE,LDATE,NIUPD,NLUPD,TEMP
  1. S TEMP=$G(^PXRM(800,1,"MST"))
  1. S IDATE=$$FMTE^XLFDT($P(TEMP,U,1))
  1. I IDATE=0 S IDATE="none"
  1. S NIUPD=$P(TEMP,U,2)
  1. S EITIME=$$FMDIFF^XLFDT($P(TEMP,U,1),$P(TEMP,U,5),2)
  1. S LDATE=$$FMTE^XLFDT($P(TEMP,U,3))
  1. I LDATE=0 S LDATE="none"
  1. S NLUPD=$P(TEMP,U,4)
  1. S EDTIME=$$FMDIFF^XLFDT($P(TEMP,U,3),$P(TEMP,U,6),2)
  1. W !!,"Clinical Reminders MST Synchronization Report"
  1. W !,"---------------------------------------------"
  1. W !,"Initial synchronization date: ",IDATE
  1. W !,"Number of updates made: ",NIUPD
  1. I EITIME>60 D
  1. . S EITIME=$$FMDIFF^XLFDT($P(TEMP,U,1),$P(TEMP,U,5),3)
  1. . W !,"Elapsed time: ",EITIME
  1. E W !,"Elapsed time: ",EITIME," secs"
  1. W !!,"Last daily synchronization date: ",LDATE
  1. W !,"Number of updates made: ",NLUPD
  1. I EDTIME>60 D
  1. . S EDTIME=$$FMDIFF^XLFDT($P(TEMP,U,3),$P(TEMP,U,6),3)
  1. . W !,"Elapsed time: ",EDTIME
  1. E W !,"Elapsed time: ",EDTIME," secs"
  1. Q
  1. ;
  1. ;====================================================
  1. UPDATE(DFN,VISIT,SOURCE,STCODE,TYPE) ;Make an update to the MST History file.
  1. N DATE,MSTDATE,PROV,STAT,TEMP,UPDSTAT,VPRVIEN
  1. S UPDSTAT=-1
  1. ;If the update is because of a protocol event use NOW for the
  1. ;date/time. If it is being done as part of a synchronization use
  1. ;the date the visit was created.
  1. S DATE=$S(TYPE="PROTOCOL":$$NOW^XLFDT,1:$P($G(^AUPNVSIT(VISIT,0)),U,2))
  1. ;If the date does not contain the time use noon.
  1. I DATE'["." S DATE=DATE_".12"
  1. S STAT=$$GETSTAT^DGMSTAPI(DFN)
  1. S MSTDATE=$S($P(STAT,U,1)>0:$P(STAT,U,3),1:0)
  1. I DATE>MSTDATE D
  1. .;Determine the provider.
  1. . S TEMP=$P(SOURCE,";",2)_$P(SOURCE,";",1)_",12)"
  1. . S PROV=$P($G(@TEMP),U,4)
  1. . I PROV="" D
  1. ..;DBIA #2316
  1. .. S VPRVIEN=+$O(^AUPNVPRV("AD",VISIT,""))
  1. .. I VPRVIEN>0 S PROV=$P(^AUPNVPRV(VPRVIEN,0),U,1)
  1. . S UPDSTAT=$$NEWSTAT^DGMSTAPI(DFN,STCODE,DATE,PROV)
  1. . I +UPDSTAT=-1 D
  1. .. N FN,GBL,IEN,NAME,TARGET,XMSUB,VADM
  1. .. K ^TMP("PXRMXMZ",$J)
  1. .. S XMSUB="CLINICAL REMINDER MST UPDATE PROBLEM"
  1. .. S ^TMP("PXRMXMZ",$J,1,0)="NEWSTAT^DGMSTAPI returned the following error:"
  1. .. S ^TMP("PXRMXMZ",$J,2,0)=$P(UPDSTAT,U,2)
  1. .. S ^TMP("PXRMXMZ",$J,3,0)="The following data was passed to NEWSTAT^DGMSTAPI"
  1. .. S ^TMP("PXRMXMZ",$J,4,0)="DFN = "_DFN
  1. .. S ^TMP("PXRMXMZ",$J,5,0)="Status code = "_STCODE
  1. .. S ^TMP("PXRMXMZ",$J,6,0)="Date = "_DATE
  1. .. S ^TMP("PXRMXMZ",$J,7,0)="Provider = "_PROV
  1. .. S ^TMP("PXRMXMZ",$J,8,0)="Data source = "_SOURCE
  1. .. S ^TMP("PXRMXMZ",$J,9,0)="This corresponds to the following:"
  1. .. D DEM^VADPT
  1. .. S ^TMP("PXRMXMZ",$J,10,0)="Patient = "_VADM(1)
  1. .. S ^TMP("PXRMXMZ",$J,11,0)="SSN = "_$P(VADM(2),U,2)
  1. .. S ^TMP("PXRMXMZ",$J,12,0)="MST Status = "_$$EXTERNAL^DILFD(29.11,3,"",STCODE)
  1. .. S ^TMP("PXRMXMZ",$J,13,0)="Date = "_$$FMTE^XLFDT(DATE,"5Z")
  1. .. S TEMP=$S(PROV="":"Unknown",1:TEMP=$$GET1^DIQ(200,PROV,.01,"","",""))
  1. .. I TEMP="" S TEMP="Unknown"
  1. .. S ^TMP("PXRMXMZ",$J,14,0)="Provider = "_TEMP
  1. .. S GBL=$P($P(SOURCE,";",2),"(",1)
  1. .. S TEMP=GBL_"(0)"
  1. .. S FN=+$P(@TEMP,U,2)
  1. .. S TEMP=GBL_"("_$P(SOURCE,";",1)_",0)"
  1. .. S TEMP=$G(@TEMP)
  1. .. S IEN=$P(TEMP,U,1)
  1. .. D FIELD^DID(FN,.01,"N","POINTER","TARGET")
  1. .. S GBL="^"_$P(TARGET("POINTER"),"(",1)
  1. .. S TEMP=GBL_"(0)"
  1. .. S FN=$P(@TEMP,U,1)
  1. .. S TEMP=GBL_"("_IEN_",0)"
  1. .. S NAME=$P(@TEMP,U,1)
  1. .. S ^TMP("PXRMXMZ",$J,14,0)="Data type = "_FN
  1. .. S ^TMP("PXRMXMZ",$J,15,0)="Name = "_NAME
  1. .. D SEND^PXRMMSG("PXRMXMZ",XMSUB,"",DUZ)
  1. Q UPDSTAT
  1. ;
  1. ;====================================================
  1. UPDPAT(EVENT,DFN,VISIT,VFL) ;Update the MST history file for a single patient
  1. ;using term mappings. Called from DATACHG^PXRMPINF which is invoked
  1. ;by the protocol PXK VISIT DATA EVENT.
  1. N AFTER,BEFORE,DGBL,SP,STCODE,SIEN,SOURCE
  1. N TEMP,TERM,TERMIEN,VF
  1. ;Search all the MST terms to build patient lists.
  1. F TERM="VA-MST DECLINES REPORT","VA-MST NEGATIVE REPORT","VA-MST POSITIVE REPORT" D
  1. . S TERMIEN=$O(^PXRMD(811.5,"B",TERM,""))
  1. . S VF=""
  1. . F S VF=$O(VFL(VF)) Q:VF="" D
  1. .. I VFL(VF)=U Q
  1. .. S DGBL=$P(VFL(VF),U,1)
  1. .. I '$D(^PXRMD(811.5,TERMIEN,20,"E",DGBL)) Q
  1. .. S SIEN=""
  1. .. F S SIEN=$O(^XTMP(EVENT,VISIT,VF,SIEN)) Q:SIEN="" D
  1. ... S AFTER=$G(^XTMP(EVENT,VISIT,VF,SIEN,0,"AFTER"))
  1. ... S BEFORE=$G(^XTMP(EVENT,VISIT,VF,SIEN,0,"BEFORE"))
  1. ... I AFTER=BEFORE Q
  1. ... S SP=$P(AFTER,U,1)
  1. ... I SP="" Q
  1. ... I '$D(^PXRMD(811.5,TERMIEN,20,"E",DGBL,SP)) Q
  1. ... S SOURCE=SIEN_";^"_$P(VFL(VF),U,2)
  1. ...;The status code depends on the term name.
  1. ... S STCODE=$$STCODE^PXRMMST(TERM)
  1. ... S TEMP=$$UPDATE^PXRMMST(DFN,VISIT,SOURCE,STCODE,"PROTOCOL")
  1. Q
  1. ;
  1. ;====================================================
  1. UPDSTAT(NUMUPD,START) ;Update the MST history file using term mappings.
  1. N DAS,DATA,DFN,FILENUM,FINDPA,INDEX,ITEM,NOCC,STCODE,SOURCE
  1. N TEMP,TERM,TERMARR,TERMIEN,UPDSTAT,VDATE,VISIT
  1. S FINDPA=""
  1. ;Set the start time for the synchronization.
  1. S START=$$NOW^XLFDT
  1. S INDEX="PXRM_MST_LIST"
  1. S NUMUPD=0
  1. ;Search all the MST terms to build patient lists. Only V file data
  1. ;is used for the update.
  1. F TERM="VA-MST DECLINES REPORT","VA-MST NEGATIVE REPORT","VA-MST POSITIVE REPORT" D
  1. . K TERMARR,^TMP($J,INDEX)
  1. .;The status code depends on the term name.
  1. . S STCODE=$$STCODE(TERM)
  1. . S TERMIEN=$O(^PXRMD(811.5,"B",TERM,""))
  1. . I TERMIEN="" Q
  1. . D TERM^PXRMLDR(TERMIEN,.TERMARR)
  1. . D EVALPL^PXRMTERL(.FINDPA,.TERMARR,INDEX)
  1. . S DFN=0
  1. . F S DFN=+$O(^TMP($J,INDEX,1,DFN)) Q:DFN=0 D
  1. .. S ITEM=""
  1. .. F S ITEM=$O(^TMP($J,INDEX,1,DFN,ITEM)) Q:ITEM="" D
  1. ... S NOCC=0
  1. ... F S NOCC=$O(^TMP($J,INDEX,1,DFN,ITEM,NOCC)) Q:NOCC="" D
  1. .... S FILENUM=""
  1. .... F S FILENUM=$O(^TMP($J,INDEX,1,DFN,ITEM,NOCC,FILENUM)) Q:FILENUM="" D
  1. ..... S TEMP=^TMP($J,INDEX,1,DFN,ITEM,NOCC,FILENUM)
  1. ..... S DAS=$P(TEMP,U,1)
  1. ..... K DATA
  1. ..... D GETDATA^PXRMDATA(FILENUM,DAS,.DATA)
  1. ..... S VISIT=$G(DATA("VISIT"))
  1. ..... I VISIT="" Q
  1. ..... S SOURCE=DAS_";"_^PXRMINDX(FILENUM,"GLOBAL NAME")
  1. ..... S UPDSTAT=$$UPDATE(DFN,VISIT,SOURCE,STCODE,"SYNCH")
  1. ..... I UPDSTAT'=-1 S NUMUPD=NUMUPD+1
  1. K ^TMP($J,INDEX)
  1. Q
  1. ;