| 1 | HLEVX002 ;O-OIFO/LJA - HL7 Xref Check ;02/04/2004 15:25
 | 
|---|
| 2 |  ;;1.6;HEALTH LEVEL SEVEN;**109**;Oct 13, 1995
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; Event Types... AC-HUNG, AC-PROC'D, AC-NO 773, AC-NO 870
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | CHECKAC ; Check file 773 AC xref...
 | 
|---|
| 7 |  N ABRT,CTERR,CTXREF,ERRNO,GBL,IEN773,IEN870,NOW,XTMP,WAY,X
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  D DEBUG^HLEVAPI2("CHECKAC")
 | 
|---|
| 10 |  D START^HLEVAPI("CTERR^CTXREF")
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 |  KILL ^TMP($J,"HLEV REP"),^TMP($J,"HLEVREP"),^TMP($J,"HLMAIL773")
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  ; Current XMTP
 | 
|---|
| 15 |  S NOW=$$NOW^XLFDT
 | 
|---|
| 16 |  S XTMP="HLEV CHK773AC "_NOW
 | 
|---|
| 17 |  S ^XTMP(XTMP,0)=$$FMADD^XLFDT(NOW,3)_U_NOW_U_"VistA HL7 773 AC Xref Check"_U_"Task# "_$G(ZTSK)
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  ; Previous XTMP...
 | 
|---|
| 20 |  S X=$O(^XTMP(XTMP),-1),XTMP(1)=$S(X["HLEV CHK773AC":X,1:"")
 | 
|---|
| 21 |  ;
 | 
|---|
| 22 |  S GBL="^HLMA(""AC"")"
 | 
|---|
| 23 |  ; Check Xref...
 | 
|---|
| 24 |  S WAY="",(ABRT,CTERR,ERRNO)=0
 | 
|---|
| 25 |  F  S WAY=$O(@GBL@(WAY)) Q:WAY']""!(ABRT)  D
 | 
|---|
| 26 |  .  S IEN870=0
 | 
|---|
| 27 |  .  F  S IEN870=$O(@GBL@(WAY,IEN870)) Q:'IEN870!(ABRT)  D
 | 
|---|
| 28 |  .  .  S IEN773=0,CTXREF=0
 | 
|---|
| 29 |  .  .  F  S IEN773=$O(@GBL@(WAY,IEN870,IEN773)) Q:'IEN773!(ABRT)  D
 | 
|---|
| 30 |  .  .  .  S CTXREF=CTXREF+1
 | 
|---|
| 31 |  .  .  .  I '(CTXREF#1000) D  I $$S^%ZTLOAD S ABRT=1 QUIT  ;->
 | 
|---|
| 32 |  .  .  .  .  D CHECKIN^HLEVAPI
 | 
|---|
| 33 |  .  .  .  .  S $P(^XTMP(XTMP,0),U,5)=$$NOW^XLFDT
 | 
|---|
| 34 |  .  .  .  S ^XTMP(XTMP,"CURR",WAY,IEN870,IEN773)=NOW ; Next run record
 | 
|---|
| 35 |  .  .  .  D CHKAC(WAY,IEN870,IEN773)
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 |  D CHECKOUT^HLEVAPI
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  S X("HLEV REP")=$NA(^TMP($J,"HLEV REP")) D DEBUG^HLEVAPI2("CHECKAC-3",.X)
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 |  ; Create report global, and move into ^TMP($J,"HLEVREP")...
 | 
|---|
| 42 |  D GENREP^HLEVUTI0($NA(^TMP($J,"HLEV REP")),$NA(^TMP($J,"HLEVREP")),4,1)
 | 
|---|
| 43 |  D MAIL773
 | 
|---|
| 44 |  D MSGTEXT^HLEVAPI1($NA(^TMP($J,"HLEVREP")))
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 |  ; Send email if errors exist...
 | 
|---|
| 47 |  I ERRNO>0 D
 | 
|---|
| 48 |  .  S HLEVTXT(1)="MESSAGETEXT"
 | 
|---|
| 49 |  .  D MAILIT^HLEVAPI
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 |  S X("HLEV REP")=$NA(^TMP($J,"HLEV REP")) D DEBUG^HLEVAPI2("CHECKAC-3",.X)
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 |  KILL ^TMP($J,"HLEV REP"),^TMP($J,"HLEVREP"),^TMP($J,"HLMAIL773")
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 |  Q
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 | CHKAC(WAY,IEN870,IEN773) ; Check AC xref...
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 |  ; Record in ^XTMP... (Next run compared to this for "hangarounds")
 | 
|---|
| 60 |  S ^XTMP(XTMP,"CURR",WAY,IEN870,IEN773)=NOW
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 |  S WAY(1)=$S(WAY="I":"IN",1:"OUT")
 | 
|---|
| 63 |  ;
 | 
|---|
| 64 |  ; Does link exist?
 | 
|---|
| 65 |  I $G(^HLCS(870,+IEN870,0))']"" D  QUIT  ;->
 | 
|---|
| 66 |  .  D ERR(WAY(1),IEN870,IEN773,"No 870","AC-NO 870")
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 |  ; Make sure zero node exists...
 | 
|---|
| 69 |  I $G(^HLMA(+IEN773,0))']"" D  QUIT  ;->
 | 
|---|
| 70 |  .  D ERR(WAY(1),IEN870,IEN773,"No 773","AC-NO 773")
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  ; Make sure AC xref should exist...
 | 
|---|
| 73 |  I $G(^HLMA(+IEN773,"P"))?7N1"."1.N D  QUIT  ;->
 | 
|---|
| 74 |  .  D ERR(WAY(1),IEN870,IEN773,"Proc'd","AC-PROC'D")
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  ; Check only for first entry...
 | 
|---|
| 77 |  QUIT:CTXREF>1  ;->
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 |  ; Check for "hang around" AC xrefs...
 | 
|---|
| 80 |  I $G(XTMP(1))]"" D
 | 
|---|
| 81 |  .  ; Quit if didn't exist last run...
 | 
|---|
| 82 |  .  QUIT:'$D(^XTMP(XTMP(1),"CURR",WAY,IEN870,IEN773))  ;->
 | 
|---|
| 83 |  .  QUIT:$P($$UP^XLFSTR($G(^HLCS(870,+IEN870,0))),U,5)["SHUTDOWN"  ;->
 | 
|---|
| 84 |  .  D ERR($S(WAY=1:"IN",1:"OUT"),IEN870,IEN773,"Hung#","AC-HUNG")
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  Q
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 | ERR(WAY,IEN870,IEN773,REA,ETYPE) ;
 | 
|---|
| 89 |  ; ERRNO -- req
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 |  ; Has this problem already been logged?
 | 
|---|
| 92 |  QUIT:'$$LOG^HLEVAPI2($G(ETYPE),"WAY^IEN870^IEN773")  ;->
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 |  ; $$LOG creates (where AC-HUNG = ETYPE)...
 | 
|---|
| 95 |  ; ^HLEV(776.4,"AH","AC-HUNG","IN",25,15333) = 100
 | 
|---|
| 96 |  ; ^HLEV(776.4,"AH","AC-HUNG","X776",1183,100) = 100
 | 
|---|
| 97 |  ; ^HLEV(776.4,"AH","AC-HUNG","X7764",100,1183) = 100
 | 
|---|
| 98 |  ; 1183 = 776 ien    100 = 776.4 ien
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 |  S ERRNO=$G(ERRNO)+1
 | 
|---|
| 101 |  D RECORD^HLEVX000("773 AC-"_REA,WAY,IEN870,IEN773)
 | 
|---|
| 102 |  S ^TMP($J,"HLMAIL773",IEN870,WAY,+IEN773)=$$NEXTACS(WAY,IEN870,IEN773)
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  Q
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 | NEXTACS(WAY,IEN870,I773) ; Store the next two entries...
 | 
|---|
| 107 |  N CT,NEXTIENS
 | 
|---|
| 108 |  S WAY=$E(WAY),NEXTIENS="",CT=0
 | 
|---|
| 109 |  F  S I773=$O(^HLMA("AC",WAY,IEN870,I773)) Q:'I773!(CT=2)  D
 | 
|---|
| 110 |  .  S CT=CT+1
 | 
|---|
| 111 |  .  S NEXTIENS=NEXTIENS_$S(NEXTIENS]"":U,1:"")_I773
 | 
|---|
| 112 |  Q NEXTIENS
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 | MAIL773 ; Add collected 773 entry data to email message...
 | 
|---|
| 115 |  N CT,I773,IEN773,IEN870,LINKNM,NEXTACS,WAY
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 |  D ADD("")
 | 
|---|
| 118 |  ;
 | 
|---|
| 119 |  S IEN870=0
 | 
|---|
| 120 |  F  S IEN870=$O(^TMP($J,"HLMAIL773",IEN870)) Q:IEN870'>0  D
 | 
|---|
| 121 |  .  S DATA=$G(^HLCS(870,+IEN870,0))
 | 
|---|
| 122 |  .  S LINKNM=$P(DATA,U)_" [#"_IEN870_"] "
 | 
|---|
| 123 |  .  D ADD("")
 | 
|---|
| 124 |  .  D ADD($$CJ^XLFSTR(LINKNM_" ",74,"="))
 | 
|---|
| 125 |  .  F NODE=0,100,200,300,400 D ADDNODE(NODE,NODE,IEN870)
 | 
|---|
| 126 |  .  S WAY=""
 | 
|---|
| 127 |  .  F  S WAY=$O(^TMP($J,"HLMAIL773",IEN870,WAY)) Q:WAY']""  D
 | 
|---|
| 128 |  .  .  S IEN773=0,CT=0
 | 
|---|
| 129 |  .  .  F  S IEN773=$O(^TMP($J,"HLMAIL773",IEN870,WAY,IEN773)) Q:IEN773'>0  D
 | 
|---|
| 130 |  .  .  .  S CT=CT+1
 | 
|---|
| 131 |  .  .  .  I CT=1 D ADD($$CJ^XLFSTR(" "_$S($E(WAY)="I":"INCOMING",1:"OUTGOING")_" ",74,"="))
 | 
|---|
| 132 |  .  .  .  D DATA773(+IEN773," Problem AC Entry ") ; Problem entry...
 | 
|---|
| 133 |  .  .  .  ; Add next two 773s...
 | 
|---|
| 134 |  .  .  .  S NEXTACS=$G(^TMP($J,"HLMAIL773",IEN870,WAY,IEN773)) QUIT:NEXTACS']""  ;->
 | 
|---|
| 135 |  .  .  .  F PCE=1:1:$L(NEXTACS,U) D
 | 
|---|
| 136 |  .  .  .  .  S I773=+$P(NEXTACS,U,PCE) QUIT:I773'>0  ;->
 | 
|---|
| 137 |  .  .  .  .  D DATA773(I773," Entry After AC Problem ")
 | 
|---|
| 138 |  ;
 | 
|---|
| 139 |  Q
 | 
|---|
| 140 |  ;
 | 
|---|
| 141 | ADDNODE(NODE,NAME,IEN870) ; Add node data prefixed by node name...
 | 
|---|
| 142 |  N DATA,PFX
 | 
|---|
| 143 |  S PFX=$S(NODE=+NODE:"",1:"""")
 | 
|---|
| 144 |  S DATA="^HLCS(870,"_IEN870_","_PFX_NAME_PFX_")="_$G(^HLCS(870,+IEN870,NODE))
 | 
|---|
| 145 |  D ADD(DATA)
 | 
|---|
| 146 |  Q
 | 
|---|
| 147 |  ;
 | 
|---|
| 148 | DATA773(IEN773,PROBL) ; Add critical data to Email message...
 | 
|---|
| 149 |  N DATA773,NO
 | 
|---|
| 150 |  ;
 | 
|---|
| 151 |  D ADD($$CJ^XLFSTR($G(PROBL),74,"="))
 | 
|---|
| 152 |  ;
 | 
|---|
| 153 |  KILL ^TMP($J,"HLDATA773")
 | 
|---|
| 154 |  ;
 | 
|---|
| 155 |  ; Collect 773 informaiton...
 | 
|---|
| 156 |  D ENDIQ1^HLEVUTIL(773,+IEN773,"HLDATA773")
 | 
|---|
| 157 |  ;
 | 
|---|
| 158 |  S ^TMP($J,"HLDATA773",1)="       "_$$CJ^XLFSTR(" 773# "_IEN773_" ",60,"-")_"       "
 | 
|---|
| 159 |  S NO=0
 | 
|---|
| 160 |  F  S NO=$O(^TMP($J,"HLDATA773",NO)) Q:NO'>0  D
 | 
|---|
| 161 |  .  D ADD(^TMP($J,"HLDATA773",+NO))
 | 
|---|
| 162 |  ;
 | 
|---|
| 163 |  KILL ^TMP($J,"HLDATA773")
 | 
|---|
| 164 |  ;
 | 
|---|
| 165 |  Q
 | 
|---|
| 166 |  ;
 | 
|---|
| 167 | ADD(TXT,TRAIL) ; Add TXT to ^TMP($J,"HLEVREP",#)...
 | 
|---|
| 168 |  N COL,LEN,NO,TXTOLD
 | 
|---|
| 169 |  ;
 | 
|---|
| 170 |  S LEN=$L($P(TXT,"=")),LEN=$S('LEN:3,LEN<55:LEN+1,1:3)
 | 
|---|
| 171 |  ;
 | 
|---|
| 172 |  F  D  QUIT:TXT']""
 | 
|---|
| 173 |  .  S NO=$O(^TMP($J,"HLEVREP",":"),-1)+1
 | 
|---|
| 174 |  .  S ^TMP($J,"HLEVREP",+NO)=$E(TXT,1,74)
 | 
|---|
| 175 |  .  S TXT=$E(TXT,75,999) QUIT:TXT']""  ;->
 | 
|---|
| 176 |  .  S TXT=$$REPEAT^XLFSTR(" ",LEN)_TXT
 | 
|---|
| 177 |  ;
 | 
|---|
| 178 |  Q
 | 
|---|
| 179 |  ;
 | 
|---|
| 180 | EOR ;HLEVX002 - VistA HL7 Event Monitor Code ;5/30/03 15:25
 | 
|---|