| 1 | HLTF0 ;AISC/SAW,JRP - File Data in Message Text File ;05/05/2000  09:01 | 
|---|
| 2 | ;;1.6;HEALTH LEVEL SEVEN;**12,19,64,91,109**;Oct 13, 1995 | 
|---|
| 3 | ; | 
|---|
| 4 | STATUS(MTIEN,STATUS,ERR,ERRTEXT,COMDT,NOEVENT) ;Update Status of Entry in Message Text File and log an event for errors | 
|---|
| 5 | ; | 
|---|
| 6 | ;This is a subroutine call with parameter passing.  No output | 
|---|
| 7 | ;parameters are returned | 
|---|
| 8 | ; | 
|---|
| 9 | ;$D(HLTCP) will determine if you are updating file 773, instead | 
|---|
| 10 | ; of file 772. | 
|---|
| 11 | ;Required Input Parameters | 
|---|
| 12 | ;    MTIEN = IEN of entry in file 772 or 773, to be updated | 
|---|
| 13 | ;   STATUS = IEN of new status (pointer to Message Status file) | 
|---|
| 14 | ;Optional Parameters | 
|---|
| 15 | ;      ERR = IEN of error message (pointer to Error Message file) | 
|---|
| 16 | ;  ERRTEXT = An error message of up to 200 characters | 
|---|
| 17 | ;    COMDT = 0/1 ; 1=update DATE/TIME PROCESSED, field 100 | 
|---|
| 18 | ;  NOEVENT = 1 if an event should NOT be logged.  Presumably this signals that the application already logged the event | 
|---|
| 19 | ; | 
|---|
| 20 | ;Check for required parameters | 
|---|
| 21 | I '$G(MTIEN)!('$G(STATUS)) Q | 
|---|
| 22 | ;File new status info | 
|---|
| 23 | N HLJ,HLOCK,X | 
|---|
| 24 | ;if TCP update status in file 773, else status in file 772 | 
|---|
| 25 | I $D(HLTCP) S X="HLJ(773,",HLOCK="^HLMA(" | 
|---|
| 26 | E  S X="HLJ(772,",HLOCK="^HL(772," | 
|---|
| 27 | S X=X_""""_MTIEN_","")",HLOCK=HLOCK_MTIEN_")" | 
|---|
| 28 | ;20=status, 21=date process | 
|---|
| 29 | S @X@(20)=STATUS,@X@(21)=$S(STATUS=1:"@",1:$$NOW^XLFDT) | 
|---|
| 30 | ;22=error msg | 
|---|
| 31 | S:$G(ERRTEXT)]"" @X@(22)=$E(ERRTEXT,1,200) | 
|---|
| 32 | ;23=error type | 
|---|
| 33 | S:$G(ERR) @X@(23)=+ERR | 
|---|
| 34 | ;100=date/time processed | 
|---|
| 35 | S:$G(COMDT) @X@(100)=$$NOW^XLFDT | 
|---|
| 36 | ;**109** F  L +@HLOCK:1 Q:$T  H 1 | 
|---|
| 37 | D FILE^HLDIE("","HLJ","","STATUS","HLTF0") ;HL*1.6*109 | 
|---|
| 38 | ;**109** L -@HLOCK | 
|---|
| 39 | ; | 
|---|
| 40 | ;if the status is error, and the event is not being surpressed by the | 
|---|
| 41 | ;application, log a new event | 
|---|
| 42 | I '$G(NOEVENT),$G(STATUS)=4 D | 
|---|
| 43 | .N CODE,HL7MSGID,ERROR,PARENT,EVENT | 
|---|
| 44 | .S CODE=$G(ERR) | 
|---|
| 45 | .S (HL7MSGID,PARENT)="" | 
|---|
| 46 | .I $G(MTIEN) D | 
|---|
| 47 | ..N NODE | 
|---|
| 48 | ..I $G(HLTCP) D | 
|---|
| 49 | ...S NODE=$G(^HLMA(MTIEN,0)) | 
|---|
| 50 | ...S HL7MSGID=$P(NODE,"^",2) | 
|---|
| 51 | ...S PARENT=$P(NODE,"^",6) | 
|---|
| 52 | ..E  D | 
|---|
| 53 | ...S NODE=$G(^HL(772,MTIEN,0)) | 
|---|
| 54 | ...S HL7MSGID=$P(NODE,"^",6) | 
|---|
| 55 | ...S PARENT=$P(NODE,"^",8) | 
|---|
| 56 | .; | 
|---|
| 57 | .S EVENT=$$EVENT^HLEME(CODE,"HEALTH LEVEL SEVEN",HL7MSGID,,,.ERROR) | 
|---|
| 58 | .;I 'EVENT,'$D(ZTQUEUED) W !,"Failed to create an Event in STATUS^HLTF0: ",$G(ERROR)_" "_$G(ERROR(1))_" "_$G(ERROR(2)) | 
|---|
| 59 | .; | 
|---|
| 60 | .I EVENT D | 
|---|
| 61 | ..I $L($G(ERRTEXT)),$$ADDNOTE^HLEME(EVENT,"Application Error Text: "_ERRTEXT) | 
|---|
| 62 | ..;If this message was not the initial message in a transaction protocol, then provide some information about the initial message | 
|---|
| 63 | ..I PARENT,PARENT'=$G(MTIEN) D | 
|---|
| 64 | ...N PLINK,PMSGID,PMSGTYPE,PNODE,PEVENT,PNOTES | 
|---|
| 65 | ...I $D(HLTCP) D | 
|---|
| 66 | ....S PNODE=$G(^HLMA(PARENT,0)) | 
|---|
| 67 | ....S PLINK=$P(PNODE,"^",7) | 
|---|
| 68 | ....S PMSGID=$P(PNODE,"^",2) | 
|---|
| 69 | ....S PMSGTYPE=$P(PNODE,"^",13) | 
|---|
| 70 | ....S PEVENT=$P(PNODE,"^",14) | 
|---|
| 71 | ...E  D | 
|---|
| 72 | ....S PNODE=$G(^HL(772,PARENT,0)) | 
|---|
| 73 | ....S PLINK=$P(PNODE,"^",11) | 
|---|
| 74 | ....S PMSGID=$P(PNODE,"^",6) | 
|---|
| 75 | ....S PMSGTYPE="" | 
|---|
| 76 | ....S PEVENT="" | 
|---|
| 77 | ...S PNOTES(1)="Initial Message in this transaction protocol:" | 
|---|
| 78 | ...S PNOTES(2)="  Initial Message ID: "_PMSGID | 
|---|
| 79 | ...S PNOTES(3)="  Logical Link of Initial Message: " | 
|---|
| 80 | ...S:PLINK PNOTES(3)=PNOTES(3)_$P($G(^HLCS(870,PLINK,0)),"^") | 
|---|
| 81 | ...S:PMSGTYPE PNOTES(4)="  Inital Message Type: "_$P($G(^HL(771.2,PMSGTYPE,0)),"^") | 
|---|
| 82 | ...S:PEVENT PNOTES(5)="  Inital Message Event: "_$P($G(^HL(779.001,PEVENT,0)),"^") | 
|---|
| 83 | ...I $$ADDNOTE^HLEME(EVENT,.PNOTES) ;then notes successfully added | 
|---|
| 84 | Q | 
|---|
| 85 | ; | 
|---|
| 86 | STATS(MTIEN,HLCHAR,HLEVN) ;Enter Statistics for an Entry in Message | 
|---|
| 87 | ;Text File | 
|---|
| 88 | ; | 
|---|
| 89 | ;This is a subroutine call with parameter passing.  No output | 
|---|
| 90 | ;parameters are returned | 
|---|
| 91 | ; | 
|---|
| 92 | ;Required Input Parameters | 
|---|
| 93 | ;   MTIEN = The IEN from the Message Text file of the entry to be | 
|---|
| 94 | ;             updated | 
|---|
| 95 | ;  HLCHAR = The number of characters in the message | 
|---|
| 96 | ;   HLEVN = The number of HL7 events in the message | 
|---|
| 97 | ; | 
|---|
| 98 | ;Check for required parameters | 
|---|
| 99 | I '$G(MTIEN)!('$D(HLCHAR))!('$D(HLEVN)) Q | 
|---|
| 100 | I '$D(^HL(772,MTIEN,0)) Q | 
|---|
| 101 | ;File statistical info | 
|---|
| 102 | ;**109** F  L +^HL(772,MTIEN):1 H:'$T 1 I $T D  Q | 
|---|
| 103 | D | 
|---|
| 104 | .  S ^HL(772,MTIEN,"S")=HLCHAR_"^"_$G(HLEVN) | 
|---|
| 105 | ;**109** .  L -^HL(772,MTIEN) | 
|---|
| 106 | Q | 
|---|
| 107 | STUFF(HLMT) ;Update Fields on Zero Node of the Message Text File for | 
|---|
| 108 | ;Version 1.5 Interface Only | 
|---|
| 109 | ; | 
|---|
| 110 | ;This is a subroutine call with parameter passing.  No output | 
|---|
| 111 | ;parameters are returned | 
|---|
| 112 | ; | 
|---|
| 113 | ;Required Input Parameter | 
|---|
| 114 | ;  HLMT = Message type, O for outgoing or I for incoming | 
|---|
| 115 | ; | 
|---|
| 116 | ;Check for required parameter | 
|---|
| 117 | Q:HLMT']"" | 
|---|
| 118 | ;File zero node data | 
|---|
| 119 | N DA,DIC,DIE,DR | 
|---|
| 120 | S (DIC,DIE)="^HL(772,",DA=HLDA | 
|---|
| 121 | S DR="4////"_HLMT_$S('$G(HLDAP):"",1:";2////"_HLDAP)_$S('$G(HLXMZ):"",1:";5////"_HLXMZ)_$S('$G(HLDAI):"",1:";7////"_HLDAI)_";Q"_$S('$P($G(HLNDAP0),U,12):"",1:";3////"_$P($G(HLNDAP0),U,12)) | 
|---|
| 122 | F  L +^HL(772,DA):1 H:'$T 1 I $T D  Q | 
|---|
| 123 | .  D ^DIE | 
|---|
| 124 | .  L -^HL(772,DA) | 
|---|
| 125 | Q | 
|---|
| 126 | UPDATE(MTIEN,MTIENP,HLMT,EID,CLIENT,SERVER,PRIORITY,REPLYTO,LOGLINK,HLP) ; | 
|---|
| 127 | ;Update Fields of the Message Text File #772 or Message Administration | 
|---|
| 128 | ; File #773 for Bi-directional TCP | 
|---|
| 129 | ; | 
|---|
| 130 | ;$D(HLTCP) will determine if you are updating file 773, instead | 
|---|
| 131 | ; of file 772. | 
|---|
| 132 | ; | 
|---|
| 133 | ;This is a subroutine call with parameter passing.  No output | 
|---|
| 134 | ;parameters are returned | 
|---|
| 135 | ; | 
|---|
| 136 | ;Required Input Parameters | 
|---|
| 137 | ;   MTIEN = The IEN from file 772 or 773 of the entry to be | 
|---|
| 138 | ;             updated | 
|---|
| 139 | ;  MTIENP = The IEN from the Message Text file of the parent entry | 
|---|
| 140 | ;           to which this entry (MTIEN) should be linked. TCP will | 
|---|
| 141 | ;           ignore this parameter. | 
|---|
| 142 | ;    HLMT = The type of message, I for Incoming or O for Outgoing | 
|---|
| 143 | ;NOTE:  Either Client or Server must be passed.  Both parameters may | 
|---|
| 144 | ;         be passed | 
|---|
| 145 | ;  CLIENT = The IEN of the client (subscriber) application from | 
|---|
| 146 | ;             the Application Parameter file | 
|---|
| 147 | ;  SERVER = The IEN of the server (event driver) application from | 
|---|
| 148 | ;             the Application Parameter file | 
|---|
| 149 | ;Optional parameters | 
|---|
| 150 | ;     EID = The IEN from the Protocol file of the event related to this | 
|---|
| 151 | ;             Message Text file entry | 
|---|
| 152 | ;PRIORITY = I for immediate or D for deferred | 
|---|
| 153 | ; REPLYTO = The IEN from the Message Text file of the message being | 
|---|
| 154 | ;             acknowledged.  (Only used for acknowledgement messages.) | 
|---|
| 155 | ; LOGLINK = The IEN of the logical link from the Logical Link file | 
|---|
| 156 | ; HLP("SECURITY")    = A 1 to 40 character string | 
|---|
| 157 | ; HLP("CONTPTR")     = Continuation pointer, a 1 to 180 character string | 
|---|
| 158 | ; HLP("MSGTYPE")     = M for Single Message or B for Batch of Messages | 
|---|
| 159 | ; HLP("EVENT")       = ien of event type | 
|---|
| 160 | ; HLP("MTYPE")       = ien of message type | 
|---|
| 161 | ; HLP("HLTCPI")      = ien of initial message | 
|---|
| 162 | ; HLP("ACKTIME")     = acknowledge timeout override for this message | 
|---|
| 163 | ; HLP("NAMESPACE")   = Passed in by application namespace - HL*1.6*91 | 
|---|
| 164 | ; | 
|---|
| 165 | ;Check for required parameters | 
|---|
| 166 | I '$G(MTIEN)!($G(HLMT)']"") Q | 
|---|
| 167 | ;File new status info | 
|---|
| 168 | N HLJ,HLOCK,X,Y | 
|---|
| 169 | ;if TCP update status in file 773, else status in file 772 | 
|---|
| 170 | S Y=$D(HLTCP) | 
|---|
| 171 | I Y S X="HLJ(773,",HLOCK="^HLMA(" | 
|---|
| 172 | E  S X="HLJ(772,",HLOCK="^HL(772," | 
|---|
| 173 | ;transmission type | 
|---|
| 174 | S X=X_""""_MTIEN_","")",HLOCK=HLOCK_MTIEN_")",@X@($S(Y:3,1:4))=HLMT | 
|---|
| 175 | ;sending or server application | 
|---|
| 176 | S:$G(SERVER) @X@($S(Y:13,1:2))=SERVER | 
|---|
| 177 | ;receiving or client application | 
|---|
| 178 | S:$G(CLIENT) @X@($S(Y:14,1:3))=CLIENT | 
|---|
| 179 | ;acknowledgement to | 
|---|
| 180 | S:$G(REPLYTO) @X@($S(Y:12,1:7))=REPLYTO | 
|---|
| 181 | ;parent message | 
|---|
| 182 | S:$G(MTIENP) @X@(8)=MTIENP | 
|---|
| 183 | ;priority | 
|---|
| 184 | S:$G(PRIORITY)]"" @X@($S(Y:4,1:9))=PRIORITY | 
|---|
| 185 | ;related event protocol | 
|---|
| 186 | S:$G(EID) @X@($S(Y:8,1:10))=EID | 
|---|
| 187 | ;logical link | 
|---|
| 188 | S:$G(LOGLINK) @X@($S(Y:7,1:11))=LOGLINK | 
|---|
| 189 | ;security | 
|---|
| 190 | S:$G(HLP("SECURITY"))]"" @X@($S(Y:9,1:12))=HLP("SECURITY") | 
|---|
| 191 | ;namespace - HL*1.6*91 | 
|---|
| 192 | I HLOCK["HL(772" S:$G(HLP("NAMESPACE"))?1U1.3UN @X@(16)=HLP("NAMESPACE") ;HL*1.6*91 | 
|---|
| 193 | ;message type | 
|---|
| 194 | S:$G(HLP("MSGTYPE"))]"" @X@($S(Y:5,1:14))=HLP("MSGTYPE") | 
|---|
| 195 | ;continuation pointer | 
|---|
| 196 | S:$G(HLP("CONTPTR"))]"" @X@($S(Y:11,1:13))=HLP("CONTPTR") | 
|---|
| 197 | ;ack timeout override | 
|---|
| 198 | S:$G(HLP("ACKTIME")) @X@(26)=HLP("ACKTIME") | 
|---|
| 199 | ;only for file 773 | 
|---|
| 200 | I Y D | 
|---|
| 201 | . ;initial message | 
|---|
| 202 | . S:$G(HLP("HLTCPI")) @X@(6)=HLP("HLTCPI") | 
|---|
| 203 | . ;message type | 
|---|
| 204 | . S:$G(HLP("MTYPE")) @X@(15)=HLP("MTYPE") | 
|---|
| 205 | . ;event type | 
|---|
| 206 | . S:$G(HLP("EVENT")) @X@(16)=HLP("EVENT") | 
|---|
| 207 | ;**109** F  L +@HLOCK:1 Q:$T  H 1 | 
|---|
| 208 | D FILE^HLDIE("","HLJ","","UPDATE","HLTF0") ; HL*1.6*109 | 
|---|
| 209 | ;**109** L -@HLOCK | 
|---|
| 210 | Q | 
|---|