| 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
 | 
|---|