- Timestamp:
- Dec 4, 2009, 12:11:15 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
WorldVistAEHR/trunk/r/ORDER_ENTRY_RESULTS_REPORTING-OR-OCX--ORRC--ORRJ/ORMTIM02.m
r613 r623 1 ORMTIM02 ; JM/SLC-ISC - PERFORM MISC TIME BASED ACTIVITIES ;05/02/06 2 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**253,243**;Dec 17, 1997;Build 242 3 ; 4 Q 5 MISC ; Perform misc time based activities 6 ; 7 D UNSIGNED ; Generate alerts for unsigned orders that have slipped through the cracks 8 D INIT^ORWGTASK(0) ; check to run rebuild of cache for graphing 9 ; 10 Q 11 ; 12 UNSIGNED ; Generate alerts for unsigned orders that were not alerted by CPRS 13 ; This happens when CPRS crashes - through network connection drops or other causes 14 N ORZPAT,ORZDATE,ORZIEN,ORZSUB,ORZSDATE,%DT,X,Y,ORZTIME,ORZNOW,ORZPURGE 15 N ORN,ORBDFN,ORNUM,ORBADUZ,ORBPMSG,ORBPDATA,ORZREC8,ORZSIGDT,ORZSTS,ORZWHEN,ORMARKID 16 N MINTIME,XTMPDAYS,XTMPHOUR,MINDAYS 17 S ORN=12,ORMARKID="ORMTIME_UNSGNORD" 18 ; 19 S MINTIME=60 ; Order must be unsigned for 60 Minutes before generating an alert 20 S MINDAYS=90 ; Order must have been generated within the last 90 days 21 ; 22 S XTMPDAYS=10 ; Keep ^XTMP record for 10 days - reset timeframe with each run 23 S XTMPHOUR=48 ; Each order that's verified as having generated an alert has a flag set in 24 ; ^XTMP that's kept for 48 hours. When flag is gone, must recheck alert status 25 ; 26 S X="T-"_MINDAYS 27 D ^%DT S ORZSDATE=9999999-Y 28 S %DT="ST",X="NOW" D ^%DT 29 S ORZNOW=Y 30 S ORZTIME=$$FMADD^XLFDT(ORZNOW,0,0,-MINTIME,0) ; Order must have existed for ORZTIME minutes 31 S ORZPURGE=$$FMADD^XLFDT(ORZNOW,XTMPDAYS,0,0,0) ; Purge all marked flags if not run in XTMPDAYS days 32 S ^XTMP(ORMARKID,0)=ORZPURGE_U_ORZNOW_U_"Unsigned Orders Reviewed by ORMTIME" 33 S ORZPURGE=$$FMADD^XLFDT(ORZNOW,0,XTMPHOUR,0,0) ; Purge each marked flag XTMPHOUR hours after creation 34 K MINTIME,MINDAYS,XTMPDAYS,XTMPHOUR,X,Y,%DT ; Kill non-namespaced vars 35 S ORZPAT="" F S ORZPAT=$O(^OR(100,"AS",ORZPAT)) Q:'ORZPAT D 36 . Q:$P(^DPT(+ORZPAT,0),U,21) ; Quit if test patient 37 . S ORZDATE=0 F S ORZDATE=$O(^OR(100,"AS",ORZPAT,ORZDATE)) Q:'ORZDATE I ORZDATE<ORZSDATE D 38 . . S ORZIEN=0 F S ORZIEN=$O(^OR(100,"AS",ORZPAT,ORZDATE,ORZIEN)) Q:'ORZIEN D 39 . . . S ORZSUB=0 F S ORZSUB=$O(^OR(100,"AS",ORZPAT,ORZDATE,ORZIEN,ORZSUB)) Q:'ORZSUB D 40 . . . . I $D(^OR(100,ORZIEN,8,ORZSUB,0)) D 41 . . . . . S ORZREC8=^OR(100,ORZIEN,8,ORZSUB,0) 42 . . . . . S ORZSIGDT=$P(ORZREC8,U,6) I $L(ORZSIGDT)>0 Q ; Can't have a sign date/time 43 . . . . . S ORZSTS=$P(ORZREC8,U,4) I ORZSTS'=2 Q ; must be in an unsigned state 44 . . . . . S ORZWHEN=$P(ORZREC8,U) I ORZWHEN>ORZTIME Q ; must have been unsigned for MINTIME 45 . . . . . S ORBDFN=+ORZPAT 46 . . . . . S ORNUM=ORZIEN_";"_ORZSUB 47 . . . . . I $$NEEDALRT($P(ORZREC8,U,3),ORBDFN,ORNUM) D ; must not have already generated an alert 48 . . . . . . S (ORBADUZ,ORBPMSG,ORBPDATA)="" 49 . . . . . . D DOALERT^ORB3 50 . . . . . . D MARK(ORNUM) ; Alert sent, don't send another one 51 D CLEAN 52 Q 53 ; 54 NEEDALRT(PROVIDER,DFN,ORNUM) ; Returns true if order needs an alert 55 ; 56 I $$MARKED(ORNUM) Q 0 ; If already checked, return 57 ; 58 N RESULT,SUROGATE 59 S RESULT=1 60 I $$HASALERT(PROVIDER,DFN) S RESULT=0 I 1 61 E D 62 . S SUROGATE=$P($$GETSURO^XQALSURO(PROVIDER),U,1) 63 . I +SUROGATE,$$HASALERT(SUROGATE,DFN) S RESULT=0 64 I 'RESULT D MARK(ORNUM) 65 Q RESULT 66 ; 67 HASALERT(USER,PATIENT) ; Returns true if alert exists for user and patient 68 N RESULT,ALERTID,DATE 69 S RESULT=0,ALERTID="OR,"_PATIENT_",12" 70 I $D(^XTV(8992,"AXQAN",ALERTID,USER)) D ;DBIA# 2689 71 . S DATE=$O(^XTV(8992,"AXQAN",ALERTID,USER,0)) 72 . I $G(DATE)>0 S RESULT=1 73 Q RESULT 74 ; 75 MARKED(ORNUM) ; Returns true if the order has been marked as not needing an alert 76 I $D(^XTMP(ORMARKID,"A",ORNUM))>0 Q 1 77 Q 0 78 ; 79 MARK(ORNUM) ; Marks an order as already having been alerted 80 S ^XTMP(ORMARKID,"A",ORNUM)="" 81 S ^XTMP(ORMARKID,"B",ORZPURGE,ORNUM)="" 82 Q 83 CLEAN ; Clean up old entries in ^XTMP 84 N IDX,ORNUM 85 S IDX=0 86 F S IDX=$O(^XTMP(ORMARKID,"B",IDX)) Q:((+IDX=0)!(IDX>ORZNOW)) D 87 . S ORNUM=0 88 . F S ORNUM=$O(^XTMP(ORMARKID,"B",IDX,ORNUM)) Q:+ORNUM=0 D 89 . . K ^XTMP(ORMARKID,"A",ORNUM) 90 . . K ^XTMP(ORMARKID,"B",IDX,ORNUM) 91 Q 1 ORMTIM02 ; JM/SLC-ISC - PERFORM MISC TIME BASED ACTIVITIES ;05/02/06 2 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**253**;Dec 17, 1997 3 ; 4 Q 5 MISC ; Perform misc time based activities 6 ; 7 D UNSIGNED ; Generate alerts for unsigned orders that have slipped through the cracks 8 ; 9 Q 10 ; 11 UNSIGNED ; Generate alerts for unsigned orders that were not alerted by CPRS 12 ; This happens when CPRS crashes - through network connection drops or other causes 13 N ORZPAT,ORZDATE,ORZIEN,ORZSUB,ORZSDATE,%DT,X,Y,ORZTIME,ORZNOW,ORZPURGE 14 N ORN,ORBDFN,ORNUM,ORBADUZ,ORBPMSG,ORBPDATA,ORZREC8,ORZSIGDT,ORZSTS,ORZWHEN,ORMARKID 15 N MINTIME,XTMPDAYS,XTMPHOUR,MINDAYS 16 S ORN=12,ORMARKID="ORMTIME_UNSGNORD" 17 ; 18 S MINTIME=60 ; Order must be unsigned for 60 Minutes before generating an alert 19 S MINDAYS=90 ; Order must have been generated within the last 90 days 20 ; 21 S XTMPDAYS=10 ; Keep ^XTMP record for 10 days - reset timeframe with each run 22 S XTMPHOUR=48 ; Each order that's verified as having generated an alert has a flag set in 23 ; ^XTMP that's kept for 48 hours. When flag is gone, must recheck alert status 24 ; 25 S X="T-"_MINDAYS 26 D ^%DT S ORZSDATE=9999999-Y 27 S %DT="ST",X="NOW" D ^%DT 28 S ORZNOW=Y 29 S ORZTIME=$$FMADD^XLFDT(ORZNOW,0,0,-MINTIME,0) ; Order must have existed for ORZTIME minutes 30 S ORZPURGE=$$FMADD^XLFDT(ORZNOW,XTMPDAYS,0,0,0) ; Purge all marked flags if not run in XTMPDAYS days 31 S ^XTMP(ORMARKID,0)=ORZPURGE_U_ORZNOW_U_"Unsigned Orders Reviewed by ORMTIME" 32 S ORZPURGE=$$FMADD^XLFDT(ORZNOW,0,XTMPHOUR,0,0) ; Purge each marked flag XTMPHOUR hours after creation 33 K MINTIME,MINDAYS,XTMPDAYS,XTMPHOUR,X,Y,%DT ; Kill non-namespaced vars 34 S ORZPAT="" F S ORZPAT=$O(^OR(100,"AS",ORZPAT)) Q:'ORZPAT D 35 . Q:$P(^DPT(+ORZPAT,0),U,21) ; Quit if test patient 36 . S ORZDATE=0 F S ORZDATE=$O(^OR(100,"AS",ORZPAT,ORZDATE)) Q:'ORZDATE I ORZDATE<ORZSDATE D 37 . . S ORZIEN=0 F S ORZIEN=$O(^OR(100,"AS",ORZPAT,ORZDATE,ORZIEN)) Q:'ORZIEN D 38 . . . S ORZSUB=0 F S ORZSUB=$O(^OR(100,"AS",ORZPAT,ORZDATE,ORZIEN,ORZSUB)) Q:'ORZSUB D 39 . . . . I $D(^OR(100,ORZIEN,8,ORZSUB,0)) D 40 . . . . . S ORZREC8=^OR(100,ORZIEN,8,ORZSUB,0) 41 . . . . . S ORZSIGDT=$P(ORZREC8,U,6) I $L(ORZSIGDT)>0 Q ; Can't have a sign date/time 42 . . . . . S ORZSTS=$P(ORZREC8,U,4) I ORZSTS'=2 Q ; must be in an unsigned state 43 . . . . . S ORZWHEN=$P(ORZREC8,U) I ORZWHEN>ORZTIME Q ; must have been unsigned for MINTIME 44 . . . . . S ORBDFN=+ORZPAT 45 . . . . . S ORNUM=ORZIEN_";"_ORZSUB 46 . . . . . I $$NEEDALRT($P(ORZREC8,U,3),ORBDFN,ORNUM) D ; must not have already generated an alert 47 . . . . . . S (ORBADUZ,ORBPMSG,ORBPDATA)="" 48 . . . . . . D DOALERT^ORB3 49 . . . . . . D MARK(ORNUM) ; Alert sent, don't send another one 50 D CLEAN 51 Q 52 ; 53 NEEDALRT(PROVIDER,DFN,ORNUM) ; Returns true if order needs an alert 54 ; 55 I $$MARKED(ORNUM) Q 0 ; If already checked, return 56 ; 57 N RESULT,SUROGATE 58 S RESULT=1 59 I $$HASALERT(PROVIDER,DFN) S RESULT=0 I 1 60 E D 61 . S SUROGATE=$P($$GETSURO^XQALSURO(PROVIDER),U,1) 62 . I +SUROGATE,$$HASALERT(SUROGATE,DFN) S RESULT=0 63 I 'RESULT D MARK(ORNUM) 64 Q RESULT 65 ; 66 HASALERT(USER,PATIENT) ; Returns true if alert exists for user and patient 67 N RESULT,ALERTID,DATE 68 S RESULT=0,ALERTID="OR,"_PATIENT_",12" 69 I $D(^XTV(8992,"AXQAN",ALERTID,USER)) D ;DBIA# 2689 70 . S DATE=$O(^XTV(8992,"AXQAN",ALERTID,USER,0)) 71 . I $G(DATE)>0 S RESULT=1 72 Q RESULT 73 ; 74 MARKED(ORNUM) ; Returns true if the order has been marked as not needing an alert 75 I $D(^XTMP(ORMARKID,"A",ORNUM))>0 Q 1 76 Q 0 77 ; 78 MARK(ORNUM) ; Marks an order as already having been alerted 79 S ^XTMP(ORMARKID,"A",ORNUM)="" 80 S ^XTMP(ORMARKID,"B",ORZPURGE,ORNUM)="" 81 Q 82 CLEAN ; Clean up old entries in ^XTMP 83 N IDX,ORNUM 84 S IDX=0 85 F S IDX=$O(^XTMP(ORMARKID,"B",IDX)) Q:((+IDX=0)!(IDX>ORZNOW)) D 86 . S ORNUM=0 87 . F S ORNUM=$O(^XTMP(ORMARKID,"B",IDX,ORNUM)) Q:+ORNUM=0 D 88 . . K ^XTMP(ORMARKID,"A",ORNUM) 89 . . K ^XTMP(ORMARKID,"B",IDX,ORNUM) 90 Q
Note:
See TracChangeset
for help on using the changeset viewer.