[623] | 1 | RGHLLOG ;CAIRO/DKM-LOG MESSAGE PROCESSING INFO ;09/04/98
|
---|
| 2 | ;;1.0;CLINICAL INFO RESOURCE NETWORK;**1,3,11,13,18,19,25,45**;30 Apr 99;Build 9
|
---|
| 3 | ;Reference to ^HLMA("C" supported by IA #3244
|
---|
| 4 | ;=================================================================
|
---|
| 5 | ; Log information about message processing and exceptions
|
---|
| 6 | ; in CIRN HL7 Exception Log file.
|
---|
| 7 | ;=================================================================
|
---|
| 8 | ; Start time for run log
|
---|
| 9 | START(RGMSG,RGDC,RGPARAM) ;
|
---|
| 10 | ;This entry point starts the log process in the CIRN HL7 EXCEPTION LOG
|
---|
| 11 | ;file (#991.1), if the (#6) MINIMAL EXCEPTION LOGGING? field in
|
---|
| 12 | ;File #990.8 is set to 0.
|
---|
| 13 | ; Input: Required
|
---|
| 14 | ; RGMSG - IEN of message entry in File #773, usually HLMTIEN
|
---|
| 15 | ; Optional
|
---|
| 16 | ; RGDC - Event Class, associated with an entry in File #
|
---|
| 17 | ; RGPARAM - reprocessing routine
|
---|
| 18 | S U="^"
|
---|
| 19 | K RGLOG
|
---|
| 20 | S RGLOG(3)=$G(RGMSG),RGLOG(5)=$G(RGDC),RGLOG(4)=$G(RGPARAM),RGLOG(1)=$$NOW^XLFDT
|
---|
| 21 | I '$P(^RGSITE("COR",1,0),U,8) S RGLOG=$$CREATE
|
---|
| 22 | Q
|
---|
| 23 | ; Create a log entry
|
---|
| 24 | CREATE() Q:$G(RGLOG) RGLOG
|
---|
| 25 | L +^RGHL7(991.1,0):10
|
---|
| 26 | S RGLOG=$O(^RGHL7(991.1,$C(32)),-1)+1
|
---|
| 27 | S:$G(RGLOG(1))="" RGLOG(1)=$$NOW^XLFDT
|
---|
| 28 | S RGLOG(3)=$S($G(RGLOG(3))=0:0,$G(HL("MID"))="":"",1:$$IEN773($G(HL("MID"))))
|
---|
| 29 | S (DA,X)=RGLOG,DIC="^RGHL7(991.1,",DIC(0)="L",DLAYGO=991.1,DIC("DR")="1///"_$G(RGLOG(1))_";3////"_$G(RGLOG(3))_";5///"_$G(RGLOG(5))_";4////"_$G(RGLOG(4)) K DD,DO D FILE^DICN K DIC,DA,X,DLAYGO
|
---|
| 30 | L -^RGHL7(991.1,0)
|
---|
| 31 | Q RGLOG
|
---|
| 32 | ; Log time run completed
|
---|
| 33 | STOP(RGQUIT) ;
|
---|
| 34 | ;This entry point completes the logging process
|
---|
| 35 | ; Input: required
|
---|
| 36 | ; RGQUIT - 0 for success and 1 for failure
|
---|
| 37 | ;
|
---|
| 38 | Q:'$G(RGLOG)
|
---|
| 39 | L +^RGHL7(991.1,RGLOG):10
|
---|
| 40 | S DIE="^RGHL7(991.1,",DR="1.5///NOW;1.6///^S X=$G(RGQUIT)",DA=RGLOG D ^DIE K DIE,DA,DR
|
---|
| 41 | L -^RGHL7(991.1,RGLOG)
|
---|
| 42 | K RGLOG,RGQUIT,X,Y,DIC,DIE
|
---|
| 43 | Q
|
---|
| 44 | ; Log unclassified exception (old entry point)
|
---|
| 45 | ERR(RGERR,RGSEV) ;
|
---|
| 46 | D EXC(18,RGERR)
|
---|
| 47 | S RGQUIT=$G(RGQUIT)!$G(RGSEV)
|
---|
| 48 | Q
|
---|
| 49 | ; Log an exception
|
---|
| 50 | EXC(RGEXC,RGERR,RGDFN,MSGID,STATNUM) ;
|
---|
| 51 | ;This entry point logs exceptions in the CIRN HL7 EXCEPTION LOG
|
---|
| 52 | ;file (#991.1)
|
---|
| 53 | ; Input: Required
|
---|
| 54 | ; RGEXC - Exception type in File #991.11
|
---|
| 55 | ; RGERR - Supplemental text
|
---|
| 56 | ; Optional
|
---|
| 57 | ; RGDFN - IEN in the PATIENT file (#2)
|
---|
| 58 | ; MSGID - message id of the HL7 message where the exception was encountered (optional)
|
---|
| 59 | ; STATNUM - station # of site that encountered the error (optional) - if not defined then the local site is assumed, using $$SITE^VASITE
|
---|
| 60 | ;
|
---|
| 61 | I $L($G(HL("MID"))) Q:$$INVEXC(HL("MID")) ; is the exception valid?
|
---|
| 62 | N RGI,RGZ
|
---|
| 63 | S U="^"
|
---|
| 64 | S:RGEXC[U RGERR=$P(RGEXC,U,2,999),RGEXC=+RGEXC
|
---|
| 65 | S:RGEXC'=+RGEXC RGERR=RGEXC,RGEXC=18
|
---|
| 66 | S:'$D(^RGHL7(991.11,RGEXC)) RGEXC=18
|
---|
| 67 | L +^RGHL7(991.11,RGEXC):10
|
---|
| 68 | S RGZ=$G(^RGHL7(991.11,RGEXC,0))
|
---|
| 69 | S:$L(RGZ) $P(^RGHL7(991.11,RGEXC,0),U,5)=$P(RGZ,U,5)+1
|
---|
| 70 | S:$P(RGZ,U,2)>1 RGQUIT=1
|
---|
| 71 | L -^RGHL7(991.11,RGEXC)
|
---|
| 72 | S RGLOG=$$CREATE
|
---|
| 73 | L +^RGHL7(991.1,RGLOG):10
|
---|
| 74 | S RGI=$O(^RGHL7(991.1,RGLOG,1,$C(32)),-1)+1
|
---|
| 75 | S RGERR=$E($G(RGERR),1,250)
|
---|
| 76 | S DIC="^RGHL7(991.1,"_RGLOG_",1,"
|
---|
| 77 | S X=RGI,DA(1)=RGLOG,DIC(0)="FL",DLAYGO=991.12,DIC("P")=$P(^DD(991.1,2,0),"^",2)
|
---|
| 78 | D ^DIC
|
---|
| 79 | S DIE=DIC
|
---|
| 80 | K DIC,DA,DR,DLAYGO
|
---|
| 81 | S STAT=0
|
---|
| 82 | S DIC="3.8",DIC(0)="Z",X="MPIF EXCEPTIONS" D ^DIC K DIC
|
---|
| 83 | S RGMG=$P($G(Y),"^",1)
|
---|
| 84 | I $P(^RGHL7(991.11,RGEXC,0),U,4)=RGMG S STAT=1
|
---|
| 85 | S DA(1)=RGLOG,DA=RGI,DR="2///"_$G(RGEXC)_";3///"_$S($G(RGDFN):"`"_RGDFN,1:"")_";6///"_$G(STAT)_";10///"_$G(RGERR)
|
---|
| 86 | D ^DIE K DIE,DA,DR
|
---|
| 87 | L -^RGHL7(991.1,RGLOG)
|
---|
| 88 | S RGI=$P(RGZ,U,3),RGZ=$P(RGZ,U,4)
|
---|
| 89 | ;
|
---|
| 90 | ;If the action type is for the MPI Exception Handler, send exception to the handler and quit
|
---|
| 91 | I (RGI=3) D SENDMPI^RGHLLOG1($G(RGEXC),$G(RGERR),$G(RGDFN),$G(MSGID),$G(STATNUM)) Q
|
---|
| 92 | ;
|
---|
| 93 | Q:'RGI!'RGZ
|
---|
| 94 | ;quit and don't send messages for exception types that are now being
|
---|
| 95 | ;handled through the MPI/PD Exception Handling option.
|
---|
| 96 | Q:RGEXC=234!((RGEXC>214)&(RGEXC<219))
|
---|
| 97 | S DIC="^XMB(3.8,",DIC(0)="NZ",X="`"_RGZ D ^DIC K DIC Q:+Y<1 S RGZ=$P(Y,U,2) K Y
|
---|
| 98 | Q:RGZ=""!$P($G(^RGSITE("COR",1,0)),U,7)
|
---|
| 99 | S RGERR=$$SHORT(RGEXC,RGERR),RGZ="G."_RGZ
|
---|
| 100 | I RGI=2 D ALERT^RGRSUTL2(RGERR,RGZ) Q
|
---|
| 101 | D MAIL^RGRSUTL2(RGERR,RGZ,"MPI/PD Exception: "_$$SHORT(RGEXC),"MPI/PD exception notification")
|
---|
| 102 | Q
|
---|
| 103 | ;
|
---|
| 104 | INVEXC(RGMID) ; determine if this exception needs to be sent to MPI/PD
|
---|
| 105 | ; personnel via FORUM. Return 1 to avoid messaging to FORUM, else 0.
|
---|
| 106 | ; IA#:3244 is applied in this functionality
|
---|
| 107 | N RGFLG,RGIEN S RGFLG=1
|
---|
| 108 | S RGIEN=$$IEN773(RGMID) Q:'RGIEN RGFLG
|
---|
| 109 | S RGIEN("SND")=$$GET1^DIQ(773,RGIEN_",",13)
|
---|
| 110 | S RGIEN("REC")=$$GET1^DIQ(773,RGIEN_",",14)
|
---|
| 111 | ; check the sending application (fld:13, 0;11) & the receiving
|
---|
| 112 | ; application (fld:14, 0;12) to see if they are related to the MPI/PD
|
---|
| 113 | ; project.
|
---|
| 114 | I RGIEN("SND")]""!(RGIEN("REC")]"") D Q RGFLG
|
---|
| 115 | .S RGFLG=$$APP(RGIEN("SND")) Q:'RGFLG
|
---|
| 116 | .S RGFLG=$$APP(RGIEN("REC"))
|
---|
| 117 | .Q
|
---|
| 118 | ; Only if the sending/receiving applications cannot be determined from
|
---|
| 119 | ; the data in their respective fields, do I check the MSH multiple for
|
---|
| 120 | ; the MSH segment. I identify the sending/receiving application from
|
---|
| 121 | ; this segment.
|
---|
| 122 | E D
|
---|
| 123 | .N RG,RG1,RGMSH,RGFS
|
---|
| 124 | .D GETS^DIQ(773,RGIEN_",",200,,"RGMSH") ;check MSH mult for snd/rec app
|
---|
| 125 | .Q:'($D(RGMSH)\10) ; no data in "MSH" multiple for file 773
|
---|
| 126 | .S RGIEN=RGIEN_",",RG="RGMSH(773,"""_RGIEN_""","_200_")"
|
---|
| 127 | .S RG1=0 F S RG1=$O(@RG@(RG1)) Q:RG1'>0 D Q:$E($G(@RG@(RG1)),1,3)="MSH"
|
---|
| 128 | ..I $E($G(@RG@(RG1)),1,3)="MSH" D
|
---|
| 129 | ...S RG(0)=$G(@RG@(RG1)),RGFS=$E(RG(0),4)
|
---|
| 130 | ...S:$P(RG(0),RGFS,3)]"" RGFLG=$$APP($P(RG(0),RGFS,3)) Q:'RGFLG
|
---|
| 131 | ...S:$P(RG(0),RGFS,5)]"" RGFLG=$$APP($P(RG(0),RGFS,5))
|
---|
| 132 | ...Q
|
---|
| 133 | ..Q
|
---|
| 134 | .Q
|
---|
| 135 | Q RGFLG
|
---|
| 136 | APP(X) ; check if the sending/receiving application is relevant to the
|
---|
| 137 | ; MPI/PD team. Returns 1 if a non-relevant namespace, else 0
|
---|
| 138 | I $E(X,1,2)="RG"!($E(X,1,2)="VA")!($E(X,1,3)="MPI") Q 0
|
---|
| 139 | Q 1
|
---|
| 140 | ;
|
---|
| 141 | IEN773(RGMID) ; find the ien of the record in the HL7 MESSAGE ADMINISTRATION
|
---|
| 142 | ; (#773) file based on the Message ID. Input: Message ID
|
---|
| 143 | ; Output: null, no record in 773, else 773 record ien. IA#: 3244
|
---|
| 144 | Q:$G(RGMID)="" ""
|
---|
| 145 | Q $O(^HLMA("C",RGMID,0))
|
---|
| 146 | ;
|
---|
| 147 | SHORT(RGEXC,RGTXT) ;
|
---|
| 148 | ; Retrieve short text description of exception
|
---|
| 149 | Q $G(^RGHL7(991.11,+RGEXC,10))_$S($G(RGTXT)="":"",1:": "_RGTXT)
|
---|
| 150 | ;
|
---|