[613] | 1 | GMRCIBKG ;SLC/JFR - IFC BACKGROUND ERROR PROCESSOR; 07/02/03 13:54
|
---|
| 2 | ;;3.0;CONSULT/REQUEST TRACKING;**22,28,30,35**;DEC 27, 1997
|
---|
| 3 | ;
|
---|
| 4 | ; This routine invokes IA# 3335
|
---|
| 5 | ;
|
---|
| 6 | EN ;process file 123.6 and take action
|
---|
| 7 | ;Start background process
|
---|
| 8 | I $D(ZTQUEUED) S ZTREQ="@"
|
---|
| 9 | ;
|
---|
| 10 | ; OK to run?
|
---|
| 11 | I '$$GONOGO Q
|
---|
| 12 | ;
|
---|
| 13 | ; set start param to NOW and run
|
---|
| 14 | D EN^XPAR("SYS","GMRC IFC BACKGROUND START",1,$$NOW^XLFDT)
|
---|
| 15 | ;
|
---|
| 16 | N GMRCLOG,GMRCTIM,GMRCLOG0
|
---|
| 17 | S GMRCLOG=0
|
---|
| 18 | S GMRCTIM=$$FMADD^XLFDT($$NOW^XLFDT,,-1)
|
---|
| 19 | F S GMRCLOG=$O(^GMR(123.6,GMRCLOG)) Q:'GMRCLOG D
|
---|
| 20 | . S GMRCLOG0=$G(^GMR(123.6,GMRCLOG,0))
|
---|
| 21 | . ;
|
---|
| 22 | . ; v-- resend if couldn't update file immediately
|
---|
| 23 | . I $P(GMRCLOG0,U,6),$P(GMRCLOG0,U,8)=901 D Q
|
---|
| 24 | .. D TRIGR^GMRCIEVT($P(GMRCLOG0,U,4),$P(GMRCLOG0,U,5)) ;re-send activity
|
---|
| 25 | . ; v-- wait at least 1 hour on all other errors
|
---|
| 26 | . I $P(GMRCLOG0,U)>GMRCTIM Q
|
---|
| 27 | . ; v-- if incomplete activity is now the earliest, resend it
|
---|
| 28 | . I $P(GMRCLOG0,U,6),$P(GMRCLOG0,U,8)=902 D Q
|
---|
| 29 | .. Q:$O(^GMR(123.6,"AC",$P(GMRCLOG0,U,4),$P(GMRCLOG0,U,5)),-1)
|
---|
| 30 | .. D DELALRT(GMRCLOG)
|
---|
| 31 | .. D TRIGR^GMRCIEVT($P(GMRCLOG0,U,4),$P(GMRCLOG0,U,5)) ;re-send activity
|
---|
| 32 | . ; v-- delete complete entries after # in GMRC RETAIN IFC ACTIVITY DAYS
|
---|
| 33 | . I '$P(GMRCLOG0,U,6) D Q
|
---|
| 34 | .. N DIK,DA,GMRCRETN
|
---|
| 35 | .. S GMRCRETN=$$GET^XPAR("SYS","GMRC RETAIN IFC ACTIVITY DAYS",1)
|
---|
| 36 | .. I 'GMRCRETN S GMRCRETN=7
|
---|
| 37 | .. I $P(GMRCLOG0,U)>$$FMADD^XLFDT(GMRCTIM,(0-GMRCRETN)) Q ;don't delete
|
---|
| 38 | .. S DIK="^GMR(123.6,",DA=GMRCLOG
|
---|
| 39 | .. D ^DIK ;remove old completed entries
|
---|
| 40 | . ;
|
---|
| 41 | . ; v-- resend unknown patient errors after 3 hours
|
---|
| 42 | . I $P(GMRCLOG0,U,8)=201,GMRCLOG0<$$FMADD^XLFDT($$NOW^XLFDT,,-3) D Q
|
---|
| 43 | .. N GMRCSND,GMRCPAR,DOW
|
---|
| 44 | .. S GMRCPAR=$$GET^XPAR("SYS","GMRC IFC SKIP WEEKEND RE-TRANS",1)
|
---|
| 45 | .. S DOW=$$DOW^XLFDT(DT,1)
|
---|
| 46 | .. S GMRCSND=$S('GMRCPAR:1,(+DOW&(DOW<6)):1,1:0)
|
---|
| 47 | .. I GMRCSND D ;re-send based on parameter and day of week
|
---|
| 48 | ... D DELALRT(GMRCLOG) ;delete previous alerts on same transaction
|
---|
| 49 | ... D TRIGR^GMRCIEVT($P(GMRCLOG0,U,4),$P(GMRCLOG0,U,5))
|
---|
| 50 | .. I '($P(GMRCLOG0,U,7)#8),GMRCSND D
|
---|
| 51 | ... ;alert CAC's about errors every 24 hrs.
|
---|
| 52 | ... D DELALRT(GMRCLOG) ;delete previous alerts on same transaction
|
---|
| 53 | ... D SNDALRT^GMRCIERR(GMRCLOG,"C") ; alert CAC's to patient errors
|
---|
| 54 | ... D ; send mail to remote CAC group
|
---|
| 55 | .... N GMRCLNK,GMRCIQT,HL,HLECH,HLFS,HLQ,PID,DOM,STA,GMRCLNK,OBR
|
---|
| 56 | .... D INIT^HLFNC2("GMRC IFC ORM EVENT",.HL)
|
---|
| 57 | .... D I $D(GMRCIQT) Q ;build PID seg if nat'l ICN
|
---|
| 58 | ..... N GMRCDFN S GMRCDFN=$P(^GMR(123,+$P(GMRCLOG0,U,4),0),U,2)
|
---|
| 59 | ..... I '$G(GMRCDFN) S GMRCIQT=1 Q
|
---|
| 60 | ..... I $$GETICN^MPIF001(GMRCDFN)<1 S GMRCIQT=1 Q
|
---|
| 61 | ..... I $$IFLOCAL^MPIF001(GMRCDFN) S GMRCIQT=1 Q
|
---|
| 62 | ..... S PID=$$EN^VAFCPID(GMRCDFN,"1,2,3,4,5,7,8,19")
|
---|
| 63 | ..... S PID=$P(PID,"|",2,999)
|
---|
| 64 | .... D LINK^HLUTIL3($P(GMRCLOG0,U,2),.GMRCLNK)
|
---|
| 65 | .... S GMRCLNK=$O(GMRCLNK(0)) I 'GMRCLNK Q ;no link set up
|
---|
| 66 | .... S DOM=$$GET1^DIQ(870,+GMRCLNK,.03)
|
---|
| 67 | .... S STA=$$STA^XUAF4($P(GMRCLOG0,U,2))
|
---|
| 68 | .... S OBR=$E($$OBR^GMRCISG1(+$P(GMRCLOG0,U,4),+$P(GMRCLOG0,U,5)),5,999)
|
---|
| 69 | .... D PTERRMSG^GMRCIERR(PID,STA,DOM,OBR)
|
---|
| 70 | . ;
|
---|
| 71 | . ; v-- resend local ICN errors after 3 hours
|
---|
| 72 | . I $P(GMRCLOG0,U,8)=202,GMRCLOG0<$$FMADD^XLFDT($$NOW^XLFDT,,-3) D Q
|
---|
| 73 | .. ;re-send based on parameter and day of week
|
---|
| 74 | .. N GMRCSND,GMRCPAR,DOW
|
---|
| 75 | .. S GMRCPAR=$$GET^XPAR("SYS","GMRC IFC SKIP WEEKEND RE-TRANS",1)
|
---|
| 76 | .. S DOW=$$DOW^XLFDT(DT,1)
|
---|
| 77 | .. S GMRCSND=$S('GMRCPAR:1,(+DOW&(DOW<6)):1,1:0)
|
---|
| 78 | .. I 'GMRCSND Q ;don't re-send activity
|
---|
| 79 | .. D TRIGR^GMRCIEVT($P(GMRCLOG0,U,4),$P(GMRCLOG0,U,5)) ;re-send activity
|
---|
| 80 | .. I '($P(GMRCLOG0,U,7)#8) D ;alert CAC's about errors every 24 hrs
|
---|
| 81 | ... D DELALRT(GMRCLOG) ;delete previous alerts on same transaction
|
---|
| 82 | ... D SNDALRT^GMRCIERR(GMRCLOG,"C") ; alert CAC's to patient errors
|
---|
| 83 | . ; v-- re-process implementation errors
|
---|
| 84 | . I $P(GMRCLOG0,U,8)>300,$P(GMRCLOG0,U,8)<702 D Q
|
---|
| 85 | .. D DELALRT(GMRCLOG) ;delete previous alerts on same transaction
|
---|
| 86 | .. D TRIGR^GMRCIEVT($P(GMRCLOG0,U,4),$P(GMRCLOG0,U,5)) ;re-send activity
|
---|
| 87 | . ; v-- if incomplete and no error, alert tech group
|
---|
| 88 | . I '$P(GMRCLOG0,U,8)!($P(GMRCLOG0,U,8)>902) D Q
|
---|
| 89 | .. D DELALRT(GMRCLOG) ;delete previous alerts on same transaction
|
---|
| 90 | .. D SNDALRT^GMRCIERR(GMRCLOG,"T")
|
---|
| 91 | . Q
|
---|
| 92 | ;
|
---|
| 93 | ; v-- set finish param
|
---|
| 94 | D EN^XPAR("SYS","GMRC IFC BACKGROUND FINISH",1,$$NOW^XLFDT)
|
---|
| 95 | ; v-- start it again one hour after completing
|
---|
| 96 | D REQUEUE
|
---|
| 97 | Q
|
---|
| 98 | ;
|
---|
| 99 | REQUEUE ;task job to start up again one hour after completing
|
---|
| 100 | N ZTRTN,ZTSK,ZTIO,ZTDESC,ZTDTH
|
---|
| 101 | S ZTDESC="IF Consults background error processor"
|
---|
| 102 | S ZTIO=""
|
---|
| 103 | S ZTRTN="EN^GMRCIBKG"
|
---|
| 104 | S ZTDTH=$$FMTH^XLFDT($$FMADD^XLFDT($$NOW^XLFDT,,1))
|
---|
| 105 | D ^%ZTLOAD
|
---|
| 106 | Q
|
---|
| 107 | DELALRT(MSGLOG) ;delete obsolete alerts for an entry
|
---|
| 108 | ; Input:
|
---|
| 109 | ; MSGLOG = ien from file 123.6
|
---|
| 110 | ;
|
---|
| 111 | N XQAID,XQAKILL
|
---|
| 112 | S XQAID="GMRCIFC,trans error,"_MSGLOG,XQAKILL=0
|
---|
| 113 | D DELETEA^XQALERT
|
---|
| 114 | Q
|
---|
| 115 | ;
|
---|
| 116 | OVERDUE ; write message for alert to tell IRM job is overdue
|
---|
| 117 | W @IOF
|
---|
| 118 | W !,"The Inter-facility Consults background job is overdue."
|
---|
| 119 | W !,"This is likely due to an error while the job runs. It is suggested"
|
---|
| 120 | W !,"that you check the systems for errors. If the errors are resolved"
|
---|
| 121 | W !,"the background job will catch up and run normally. There is a "
|
---|
| 122 | W !,"remote possibility that the GMRC IFC BACKGROUND... parameters have"
|
---|
| 123 | W !,"been edited and are out of synch."
|
---|
| 124 | S XQAKILL=0
|
---|
| 125 | Q
|
---|
| 126 | ;
|
---|
| 127 | GONOGO() ; determine if background job should run or not
|
---|
| 128 | ;Output:
|
---|
| 129 | ; 1 = go ahead and run
|
---|
| 130 | ; 0 = don't run for some reason
|
---|
| 131 | N GMRCQT
|
---|
| 132 | S GMRCQT=1
|
---|
| 133 | D
|
---|
| 134 | . N GMRCBST,GMRCNOW,GMRCBFI
|
---|
| 135 | . S GMRCBST=$$GET^XPAR("SYS","GMRC IFC BACKGROUND START",1)
|
---|
| 136 | . I 'GMRCBST Q ; has never run or needs to
|
---|
| 137 | . S GMRCNOW=$$NOW^XLFDT
|
---|
| 138 | . I GMRCBST>GMRCNOW S GMRCQT=0 Q ;set to future date/time - don't run
|
---|
| 139 | . S GMRCBFI=$$GET^XPAR("SYS","GMRC IFC BACKGROUND FINISH",1)
|
---|
| 140 | . I $$FMDIFF^XLFDT(GMRCNOW,GMRCBFI,2)<3600,GMRCBFI>GMRCBST S GMRCQT=0 Q
|
---|
| 141 | . ; ^--ran < 1 hr ago
|
---|
| 142 | . I $$FMDIFF^XLFDT(GMRCBST,GMRCBFI,2)>4500 D Q
|
---|
| 143 | .. ; >1.5 hrs and job not finishing for some reason, alert techies
|
---|
| 144 | .. N XQA,XQAMSG,XQAROU,XQAID,XQAKILL
|
---|
| 145 | .. S XQAID="GMRC IFC BKG",XQAKILL=0 D DELETEA^XQALERT
|
---|
| 146 | .. S XQA("G.IFC TECH ERRORS")=""
|
---|
| 147 | .. S XQAMSG="IFC Background job overdue."
|
---|
| 148 | .. S XQAID="GMRC IFC BKG"
|
---|
| 149 | .. S XQAROU="OVERDUE^GMRCIBKG"
|
---|
| 150 | .. D SETUP^XQALERT
|
---|
| 151 | .. Q
|
---|
| 152 | . Q
|
---|
| 153 | Q GMRCQT
|
---|