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

PXVWCCH.m

Go to the documentation of this file.
  1. PXVWCCH ;ISP/LMT - ICE Cache Utilities ;Aug 23, 2021@11:28:52
  1. ;;1.0;PCE PATIENT CARE ENCOUNTER;**217**;Aug 12, 1996;Build 134
  1. ;
  1. ;
  1. STAT(DFN) ;
  1. ;
  1. N PXBUILDINGDT,PXNOW,PXPURGEDT,PXRETURN,PXSUB,PXVMRCHASH,PXVMRHASH
  1. ;
  1. S PXSUB=$$SUB(DFN)
  1. S PXNOW=$$NOW^XLFDT
  1. S PXRETURN=0
  1. ;
  1. I '$D(^XTMP(PXSUB)) Q PXRETURN
  1. ;
  1. S PXPURGEDT=$P($G(^XTMP(PXSUB,0)),U,1)
  1. I (PXPURGEDT<PXNOW)!('$D(^XTMP(PXSUB,"VMR")))!('$D(^XTMP(PXSUB,"ICE"))) D Q PXRETURN
  1. . S PXBUILDINGDT=$G(^XTMP(PXSUB,"BUILDING"))
  1. . I PXBUILDINGDT,$$HDIFF^XLFDT($H,PXBUILDINGDT,2)<21 D Q
  1. . . S PXRETURN=2
  1. . D PURGE(DFN)
  1. ;
  1. S PXVMRHASH=$$HASH^PXVWVMR
  1. S PXVMRCHASH=$G(^XTMP(PXSUB,"VMR","HASH"))
  1. I PXVMRHASH'="",PXVMRHASH=PXVMRCHASH D Q PXRETURN
  1. . S ^XTMP(PXSUB,"DT")=PXNOW
  1. . S PXRETURN=1
  1. ;
  1. Q PXRETURN
  1. ;
  1. ;
  1. EXIST(DFN) ;
  1. ;
  1. N PXPURGEDT,PXSUB
  1. ;
  1. S PXSUB=$$SUB(DFN)
  1. ;
  1. S PXPURGEDT=$P($G(^XTMP(PXSUB,0)),U,1)
  1. ;
  1. Q $$NOW^XLFDT()<PXPURGEDT
  1. ;
  1. ;
  1. LOAD(DFN) ;
  1. ;
  1. N PXSUB
  1. ;
  1. S PXSUB=$$SUB(DFN)
  1. ;
  1. M ^TMP("PXICEWEB",$J)=^XTMP(PXSUB,"ICE")
  1. ;
  1. Q
  1. ;
  1. ;
  1. BLDNG(DFN) ;Set flag that cache is in middle of building
  1. ;
  1. N PXSUB
  1. ;
  1. S PXSUB=$$SUB(DFN)
  1. ;
  1. I '$D(^XTMP(PXSUB,0)) D
  1. . S ^XTMP(PXSUB,0)=DT_".24"_U_($H)_U_"ICE Cache for "_DFN
  1. ;
  1. S ^XTMP(PXSUB,"BUILDING")=$H
  1. ;
  1. Q
  1. ;
  1. ;
  1. ISBLDNG(DFN) ;
  1. ;
  1. N PXBUILDINGDT,PXRETURN,PXSUB
  1. ;
  1. S PXSUB=$$SUB(DFN)
  1. S PXRETURN=0
  1. ;
  1. S PXBUILDINGDT=$G(^XTMP(PXSUB,"BUILDING"))
  1. I PXBUILDINGDT,$$HDIFF^XLFDT($H,PXBUILDINGDT,2)<21 S PXRETURN=1
  1. ;
  1. Q PXRETURN
  1. ;
  1. ;
  1. CLRBLDNG(DFN) ;
  1. ;
  1. N PXSUB
  1. ;
  1. S PXSUB=$$SUB(DFN)
  1. K ^XTMP(PXSUB,"BUILDING")
  1. ;
  1. Q
  1. ;
  1. ;
  1. SAVE(DFN,PXCREATEDT) ;
  1. ;
  1. N PXBDAY,PXPURGEDT,PXSUB,PXVMRHASH
  1. ;
  1. S PXSUB=$$SUB(DFN)
  1. ;
  1. ; when ICE sends back version num (and purge cache when version chahnges), then set purge date to 24 days;
  1. ; except for: age<17 or birthday<24 days
  1. S PXPURGEDT=DT_".24"
  1. ;S PXBDAY=$$BDAY(DFN)
  1. ;I PXBDAY<PXPURGEDT S PXPURGEDT=PXBDAY
  1. ;
  1. S ^XTMP(PXSUB,0)=PXPURGEDT_U_PXCREATEDT_U_"ICE Cache for "_DFN
  1. ;
  1. S PXVMRHASH=$$HASH^PXVWVMR
  1. S ^XTMP(PXSUB,"VMR","HASH")=PXVMRHASH
  1. ;
  1. M ^XTMP(PXSUB,"ICE")=^TMP("PXICEWEB",$J)
  1. ;
  1. S ^XTMP(PXSUB,"DT")=PXCREATEDT
  1. ;
  1. K ^XTMP(PXSUB,"BUILDING")
  1. ;
  1. Q
  1. ;
  1. ;
  1. PURGE(DFN) ;
  1. ;
  1. N PXSUB
  1. ;
  1. S PXSUB=$$SUB(DFN)
  1. K ^XTMP(PXSUB)
  1. ;
  1. Q
  1. ;
  1. ;
  1. SUB(DFN) ;
  1. Q "PXVWICE-"_DFN
  1. ;
  1. ;
  1. UPDATE ; Update cache for patients with upcoming appointments or admissions
  1. ;
  1. ; ZEXCEPT: ZTREQ
  1. ;
  1. S ZTREQ="@"
  1. N DFN,PXCHKCACHE,PXDT,PXMIDNIGHT,PXNOW,PXPURGEDT,PXRETURN,PXSUB
  1. ;
  1. K ^TMP("PXVWCCH-DFN",$J)
  1. ;
  1. S PXNOW=$$NOW^XLFDT
  1. S PXMIDNIGHT=DT_".24"
  1. D GETLIST(PXNOW)
  1. ;
  1. S PXDT=0
  1. F S PXDT=$O(^TMP("PXVWCCH-DFN",$J,PXDT)) Q:'PXDT D
  1. . S DFN=0
  1. . F S DFN=$O(^TMP("PXVWCCH-DFN",$J,PXDT,DFN)) Q:'DFN D
  1. . . S PXSUB=$$SUB(DFN)
  1. . . S PXPURGEDT=$P($G(^XTMP(PXSUB,0)),U,1)
  1. . . S PXCHKCACHE=1
  1. . . ; if cache is expiring before midnight, then force update to cache
  1. . . I PXPURGEDT<PXMIDNIGHT S PXCHKCACHE=0
  1. . . D EN^PXVWICE(.PXRETURN,DFN,PXCHKCACHE,1)
  1. ;
  1. I $G(PXRETURN)'="" K @PXRETURN
  1. K ^TMP("PXVWCCH-DFN",$J)
  1. ;
  1. Q
  1. ;
  1. ;
  1. GETLIST(PXNOW) ; get list of patients with upcoming appoitments or admissions
  1. ;
  1. N PXDT,PXHR,PXLISTDT,PXTIME
  1. ;
  1. S PXDT=$P(PXNOW,".",1)
  1. S PXTIME=$P(PXNOW,".",2)
  1. S PXHR=$E(PXTIME,1,2)
  1. ; Get tomorrow's appointments/admissions
  1. ;S PXLISTDT=$$FMADD^XLFDT(PXDT,1)
  1. ; If running before 8am, get today's appointments/admissions
  1. ; TODO: what time should cut-off be?
  1. ;I PXHR<8 S PXLISTDT=PXDT
  1. S PXLISTDT=PXDT
  1. ;
  1. D GETAPPT(PXLISTDT)
  1. D GETADM(PXLISTDT)
  1. D GETINP
  1. K ^TMP("PXVWCCH-DFN",$J,"C")
  1. Q
  1. ;
  1. GETAPPT(PXAPPTDT) ; get upcoming appointments
  1. ;
  1. N DFN,PXARRAY,PXCOUNT,PXSTOPCODES
  1. ;
  1. K ^TMP($J,"SDAMA301")
  1. ;
  1. S PXARRAY(1)=PXAPPTDT_";"_PXAPPTDT
  1. S PXARRAY(3)="R;I"
  1. S PXSTOPCODES=$$GET^XPAR("ALL","PXV ICE WEB STOP CODE FILTER")
  1. I PXSTOPCODES'="" S PXARRAY(13)=PXSTOPCODES
  1. S PXARRAY("FLDS")="1;2;3;10;13"
  1. S PXARRAY("SORT")="P"
  1. S PXCOUNT=$$SDAPI^SDAMA301(.PXARRAY)
  1. ;
  1. S DFN=0
  1. F S DFN=$O(^TMP($J,"SDAMA301",DFN)) Q:'DFN D
  1. . S PXAPPTDT=$O(^TMP($J,"SDAMA301",DFN,0))
  1. . S ^TMP("PXVWCCH-DFN",$J,PXAPPTDT,DFN)=""
  1. . S ^TMP("PXVWCCH-DFN",$J,"C",DFN,PXAPPTDT)=""
  1. ;
  1. K ^TMP($J,"SDAMA301")
  1. ;
  1. Q
  1. ;
  1. GETADM(PXADMDT) ; get scheduled admissions
  1. ;
  1. N DFN,PXDT,PXENDDT,PXIEN,PXNODE,PXRESDT
  1. ;
  1. ; TOTO: get ICR for 41.1 (perhaps subscribe to ICR #429)
  1. S PXENDDT=PXADMDT_".24"
  1. S PXRESDT=PXADMDT-.0000001
  1. F S PXRESDT=$O(^DGS(41.1,"C",PXRESDT)) Q:(('PXRESDT)!(PXRESDT>PXENDDT)) D
  1. . S PXIEN=0
  1. . F S PXIEN=$O(^DGS(41.1,"C",PXRESDT,PXIEN)) Q:'PXIEN D
  1. . . S PXNODE=$G(^DGS(41.1,PXIEN,0))
  1. . . I $P(PXNODE,U,13) Q ;cancelled
  1. . . S DFN=$P(PXNODE,U,1)
  1. . . I $D(^TMP("PXVWCCH-DFN",$J,"C",DFN)) D Q:'PXRESDT
  1. . . . S PXDT=$O(^TMP("PXVWCCH-DFN",$J,"C",DFN,0))
  1. . . . I PXDT<PXRESDT S PXRESDT=0 Q
  1. . . . K ^TMP("PXVWCCH-DFN",$J,PXDT,DFN)
  1. . . . K ^TMP("PXVWCCH-DFN",$J,"C",DFN,PXDT)
  1. . . S ^TMP("PXVWCCH-DFN",$J,PXRESDT,DFN)=""
  1. . . S ^TMP("PXVWCCH-DFN",$J,"C",DFN,PXRESDT)=""
  1. ;
  1. Q
  1. ;
  1. ;
  1. GETINP ; get current inpatients
  1. ;
  1. N DFN,PXWARD
  1. ;
  1. S PXWARD=""
  1. F S PXWARD=$O(^DPT("CN",PXWARD)) Q:PXWARD="" D ;ICR #10035
  1. . S DFN=0 F S DFN=$O(^DPT("CN",PXWARD,DFN)) Q:'DFN D
  1. . . I $D(^TMP("PXVWCCH-DFN",$J,"C",DFN)) Q
  1. . . S ^TMP("PXVWCCH-DFN",$J,DT,DFN)=""
  1. Q
  1. ;
  1. ;
  1. UPDPAT(PXRETURN,DFN) ;Check, and if needed update, the cache for a given patient
  1. ;
  1. N PXCREATEDT,PXLASTDT,PXSUB,PXTASK,PXVOTH
  1. ;
  1. S PXRETURN=1
  1. ;
  1. S PXSUB=$$SUB(DFN)
  1. ;
  1. S PXLASTDT=$G(^XTMP(PXSUB,"DT"))
  1. ; If cache was already validated today, no need to update it again.
  1. I $P(PXLASTDT,".",1)=DT Q
  1. ;
  1. S PXVOTH("ZTDTH")=$H
  1. S PXTASK=$$NODEV^XUTMDEVQ("UPDPTTSK^PXVWCCH","Update ICE Cache for DFN "_DFN,"DFN",.PXVOTH)
  1. ;
  1. Q
  1. ;
  1. UPDPTTSK ; Tasked job to update cache
  1. ;
  1. ; ZEXCEPT: DFN,ZTREQ
  1. ;
  1. S ZTREQ="@"
  1. N PXCHKCACHE,PXPURGEDT,PXRETURN,PXSUB
  1. ;
  1. S PXSUB=$$SUB(DFN)
  1. S PXPURGEDT=$P($G(^XTMP(PXSUB,0)),U,1)
  1. S PXCHKCACHE=1
  1. ; if cache is expiring before midnight, then force update to cache
  1. I PXPURGEDT<(DT_".24") S PXCHKCACHE=0
  1. ;
  1. D EN^PXVWICE(.PXRETURN,DFN,PXCHKCACHE,1)
  1. ;
  1. I $G(PXRETURN)'="" K @PXRETURN
  1. ;
  1. Q
  1. ;
  1. ;
  1. AGE(DFN) ; Patient's age
  1. N VADM,VAHOW,VAPTYP,VAROOT
  1. D DEM^VADPT
  1. Q VADM(4)
  1. ;
  1. BDAY(DFN) ; Patient's next birthday
  1. ;
  1. N PXDOB,PXDT,PXYR,VADM,VAHOW,VAPTYP,VAROOT
  1. ;
  1. D DEM^VADPT
  1. S PXDOB=$P(VADM(3),U,1)
  1. S PXDT=$$DT^XLFDT
  1. S PXYR=$E(PXDT,1,3)+1
  1. I $E(PXDOB,4,7)>$E(PXDT,4,7) S PXYR=$E(PXDT,1,3)
  1. Q PXYR_$E(PXDOB,4,7)