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

ORB3TIM1.m

Go to the documentation of this file.
  1. ORB3TIM1 ; slc/CLA - Routine to trigger time-related notifications ;6/28/00 12:00 [ 04/02/97 11:12 AM ]
  1. ;;3.0;ORDER ENTRY/RESULTS REPORTING;**31,64,74,88,102,143,179**;Dec 17, 1997
  1. TNOTIFS ;process time-driven notifications - called by ORMTIM01
  1. ;
  1. ;Do not process DIV for param - ORMTIM01 is initiated by postmaster:
  1. Q:$$GET^XPAR("SYS^PKG","ORB SYSTEM ENABLE/DISABLE",1,"I")="D"
  1. N ORLASTQ,ORNOW,ORERR
  1. S ORNOW=$$NOW^XLFDT
  1. S ORLASTQ=$$GET^XPAR("SYS","ORB LAST QUEUE DATE",1,"I")
  1. ;
  1. D NPO
  1. D UNVER
  1. D UVMED
  1. D EXPIR^ORB3TIM2
  1. D PUT^XPAR("SYS","ORB LAST QUEUE DATE",1,ORNOW,.ORERR)
  1. Q
  1. NPO ;trigger NPO diet > 72 hours notifications
  1. N ORNPO,ORPT,INVDT,ORDG,ORNUM,ORBDT,OREDT
  1. N OIFILE,ORBY,ORBI,ORST,ORSDT
  1. ;
  1. S ^XTMP("ORBNPO",0)=$$FMADD^XLFDT(ORNOW,1,"","","")_"^"_ORNOW
  1. ;
  1. ;get NPO OIs:
  1. S OIFILE=$$TERMLKUP^ORB31(.ORBY,"NPO")
  1. ;
  1. Q:'$D(ORBY) ;quit if no link between NPO and local OI
  1. S:'$G(ORLASTQ) ORLASTQ=$$FMADD^XLFDT(ORNOW,"","-96","","")
  1. S ORBDT=$$FMADD^XLFDT(ORLASTQ,"","-72","","")
  1. S OREDT=$$FMADD^XLFDT(ORNOW,"","-72","","")
  1. F S ORBDT=$O(^OR(100,"AF",ORBDT)) Q:(ORBDT="")!(ORBDT>OREDT) D
  1. .S ORNUM="" F S ORNUM=$O(^OR(100,"AF",ORBDT,ORNUM)) Q:ORNUM="" D
  1. ..Q:$D(^XTMP("ORBNPO",ORNUM))
  1. ..; determine if NPO order:
  1. ..I +$G(OIFILE)=101.43 F ORBI=1:1:ORBY D
  1. ...S ORNPO=$P(ORBY(ORBI),U) I ORNPO=$$OI^ORQOR2(ORNUM) D
  1. ....S ORSDT=$P($G(^OR(100,ORNUM,0)),U,8)
  1. ....S ^XTMP("ORBNPO",ORNUM)=$S($L(ORSDT):ORSDT,1:ORBDT)_U_0
  1. ;
  1. ;loop thru XTMP looking for NPO orders with start d/t > 72
  1. S ORNUM=0 F S ORNUM=$O(^XTMP("ORBNPO",ORNUM)) Q:+$G(ORNUM)<1 D
  1. .S ORSDT=$P(^XTMP("ORBNPO",ORNUM),U)
  1. .I $P(^XTMP("ORBNPO",ORNUM),U,2)=0 D ;if alert not already triggered
  1. ..Q:ORSDT>OREDT ;quit if start date more recent than 72 hours ago
  1. ..S ORPT=$P($G(^OR(100,ORNUM,0)),U,2) I ORPT]"" D
  1. ...S ORST=$P($$STATUS^ORQOR2(ORNUM),U,2)
  1. ...I ORST'="DISCONTINUED",ORST'="COMPLETE",ORST'="EXPIRED",ORST'="UNRELEASED",ORST'="CHANGED",ORST'="CANCELLED",ORST'="LAPSED",ORST'="SCHEDULED" D
  1. ....D EN^ORB3(31,+ORPT,ORNUM,"","",ORNUM_"@") ;trigger NPO>72 notif
  1. ....S $P(^XTMP("ORBNPO",ORNUM),U,2)=1 ;alert triggered
  1. .;
  1. .I $G(ORSDT)<$$FMADD^XLFDT(ORNOW,"-7","","","") D
  1. ..K ^XTMP("ORBNPO",ORNUM) ;kill XTMP if order start d/t > 7 days
  1. Q
  1. UNVER ;trigger unverified order (by nurse) notif
  1. N ORPT,INVDT,ORDG,ORNUM,ORBDT,OREDT,ORST,ORX,ORACT,ORDELAY
  1. ;
  1. ;if not queued via ORMTIM01 recently, look for past 48 hours:
  1. S:'$G(ORLASTQ) ORLASTQ=$$FMADD^XLFDT(ORNOW,"","-48","","")
  1. ;
  1. ;get number of hours delay before trigger:
  1. S ORDELAY=$$GET^XPAR("ALL","ORB UNVERIFIED ORDER",1,"I")
  1. ;
  1. ;look for orders unverified after <parameter value> hours:
  1. S ORBDT=$$FMADD^XLFDT(ORLASTQ,"",-ORDELAY,"","")
  1. S OREDT=$$FMADD^XLFDT(ORNOW,"",-ORDELAY,"","")
  1. ;
  1. F S ORBDT=$O(^OR(100,"AF",ORBDT)) Q:(ORBDT="")!(ORBDT>OREDT) D
  1. .S ORNUM="" F S ORNUM=$O(^OR(100,"AF",ORBDT,ORNUM)) Q:ORNUM="" D
  1. ..S ORPT=$P($G(^OR(100,ORNUM,0)),U,2) I ORPT]"" D
  1. ...;The following filters match those in UVN1^ORQ11 so notif triggers
  1. ...;and orders displayed via alert follow-up action are in sync:
  1. ...S ORX=$G(^OR(100,ORNUM,0))
  1. ...Q:'$L(ORX)
  1. ...Q:$P(ORX,U,12)="O" ;quit if outpatient order
  1. ...Q:$L($P(ORX,U,17)) ;quit if someone has released order
  1. ...S ORST=$P($$STATUS^ORQOR2(ORNUM),U,2)
  1. ...I ORST'="DISCONTINUED",ORST'="COMPLETE",ORST'="EXPIRED",ORST'="UNRELEASED",ORST'="CHANGED",ORST'="CANCELLED",ORST'="LAPSED" D
  1. ....Q:'$D(^OR(100,ORNUM,8))
  1. ....Q:$P(^OR(100,ORNUM,8,$P(^OR(100,ORNUM,8,0),U,3),0),U,8) ;quit if someone has verified order
  1. ....D EN^ORB3(59,+ORPT,ORNUM,"","",ORNUM_"@")
  1. Q
  1. UVMED ;trigger unverified med (by nurse) notif
  1. N DG,ORGRP,ORPT,INVDT,ORNUM,ORBDT,OREDT,ORST,ORX,ORACT,ORDELAY
  1. ;
  1. ;if not queued via ORMTIM01 recently, look for past 48 hours:
  1. S:'$G(ORLASTQ) ORLASTQ=$$FMADD^XLFDT(ORNOW,"","-48","","")
  1. ;
  1. ;get number of hours delay before trigger:
  1. S ORDELAY=$$GET^XPAR("ALL","ORB UNVERIFIED MED ORDER",1,"I")
  1. ;
  1. ;look for meds unverified after <parameter value> hours:
  1. S ORBDT=$$FMADD^XLFDT(ORLASTQ,"",-ORDELAY,"","")
  1. S OREDT=$$FMADD^XLFDT(ORNOW,"",-ORDELAY,"","")
  1. ;
  1. F S ORBDT=$O(^OR(100,"AF",ORBDT)) Q:(ORBDT="")!(ORBDT>OREDT) D
  1. .S ORNUM="" F S ORNUM=$O(^OR(100,"AF",ORBDT,ORNUM)) Q:ORNUM="" D
  1. ..S ORPT=$P($G(^OR(100,ORNUM,0)),U,2) I ORPT]"" D
  1. ...;The following filters match those in UVN1^ORQ11 so notif triggers
  1. ...;and orders displayed via alert follow-up action are in sync:
  1. ...S ORX=$G(^OR(100,ORNUM,0))
  1. ...Q:'$L(ORX)
  1. ...Q:'$L($$DGRX^ORQOR2(+ORNUM)) ;quit if not a pharmacy order
  1. ...Q:$P(ORX,U,12)="O" ;quit if outpatient order
  1. ...Q:$L($P(ORX,U,17)) ;quit if someone has released order
  1. ...S ORST=$P($$STATUS^ORQOR2(ORNUM),U,2)
  1. ...I ORST'="DISCONTINUED",ORST'="COMPLETE",ORST'="EXPIRED",ORST'="UNRELEASED",ORST'="CHANGED",ORST'="CANCELLED",ORST'="LAPSED" D
  1. ....Q:'$D(^OR(100,ORNUM,8))
  1. ....Q:$P(^OR(100,ORNUM,8,$P(^OR(100,ORNUM,8,0),U,3),0),U,8) ;quit if someone has verified order
  1. ....D EN^ORB3(48,+ORPT,ORNUM,"","",ORNUM_"@")
  1. Q
  1. GRP(DG) ;Setup display groups
  1. ;DG=Display group to expand
  1. N STK,MEM,I
  1. S ORGRP(DG)="",STK=1,STK(STK)=DG_"^0",STK(0)=0,MEM=0
  1. F I=0:0 S MEM=$O(^ORD(100.98,+STK(STK),1,MEM)) D @$S(+MEM'>0:"POP",1:"PROC") Q:STK<1
  1. Q
  1. POP S STK=STK-1,MEM=$P(STK(STK),"^",2) Q
  1. PROC S $P(STK(STK),"^",2)=MEM,DG=$P(^ORD(100.98,+STK(STK),1,MEM,0),"^",1)
  1. S ORGRP(DG)="",STK=STK+1,STK(STK)=DG_"^0",MEM=0
  1. Q