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