| 1 | HLTP0 ;AISC/SAW,JRP - Transaction Processor Module (Cont'd) ;11/19/97  11:13 | 
|---|
| 2 | ;;1.6;HEALTH LEVEL SEVEN;**25,37**;Oct 13, 1995 | 
|---|
| 3 | PROCESS(HLMTIEN,HLLD0,HLLD1,HLRESLT) ;Process an incoming message | 
|---|
| 4 | ; | 
|---|
| 5 | ;INPUT  : HLMTIEN - One of two values | 
|---|
| 6 | ;                   1) Pointer to entry in MESSAGE TEXT file (#772) | 
|---|
| 7 | ;                      that requires processing (internal message) | 
|---|
| 8 | ;                   2) Pointer to entry in MESSAGE TEXT file (#772) | 
|---|
| 9 | ;                      that external message will be placed into | 
|---|
| 10 | ;         HLLD0 - One of three values | 
|---|
| 11 | ;                 1) Pointer to LOGICAL LINK file (#870) that | 
|---|
| 12 | ;                    contains the message | 
|---|
| 13 | ;                 2) 'XM' if the message was received through MailMan | 
|---|
| 14 | ;                 3) 'DHCP' if the message is from an internal | 
|---|
| 15 | ;                    application | 
|---|
| 16 | ;         HLLD1 - Pointer to entry in IN QUEUE multiple (#19) of | 
|---|
| 17 | ;                 the LOGICAL LINK file (#870) | 
|---|
| 18 | ;               - Only used for messages received through the | 
|---|
| 19 | ;                 LOGICAL LINK file (#870) | 
|---|
| 20 | ;         HLRESLT - Variable to return error text in (pass by reference) | 
|---|
| 21 | ;OUTPUT : On successful completion, HLRESLT will be set to NULL | 
|---|
| 22 | ;         On error, HLRESLT will be set to ErrorCode^ErrorText | 
|---|
| 23 | ; | 
|---|
| 24 | ;Check parameters | 
|---|
| 25 | S HLRESLT="7^"_$G(^HL(771.7,7,0))_" at PROCESS^HLTP0 entry point" | 
|---|
| 26 | Q:('$G(HLMTIEN)) | 
|---|
| 27 | S HLLD0=$G(HLLD0) | 
|---|
| 28 | Q:(HLLD0="") | 
|---|
| 29 | Q:((HLLD0'="XM")&(HLLD0'="DHCP")&('$D(^HLCS(870,+HLLD0,0)))) | 
|---|
| 30 | S HLLD1=+$G(HLLD1) | 
|---|
| 31 | Q:((+HLLD0)&('$D(^HLCS(870,+HLLD0,1,HLLD1,0)))) | 
|---|
| 32 | S HLRESLT="" | 
|---|
| 33 | N HLEXROU,CHARCNT,EVNTCNT,HDRFND,FLDSPRTR,LINE,TEXT,SEGNAME,HDRTYPE | 
|---|
| 34 | N HLENROU,HLNEXT,HLNODE,HLPROU,HLQUIT,HLMTIENS | 
|---|
| 35 | ; | 
|---|
| 36 | ;Prepare to process internal message | 
|---|
| 37 | I (HLLD0="DHCP") D  Q:(HLRESLT'="") | 
|---|
| 38 | .;Determine statistics for message | 
|---|
| 39 | .S LINE=0 | 
|---|
| 40 | .S TEXT="" | 
|---|
| 41 | .S HDRFND=0 | 
|---|
| 42 | .S CHARCNT=0 | 
|---|
| 43 | .S EVNTCNT=0 | 
|---|
| 44 | .S HLMSA="" | 
|---|
| 45 | .S HLHDR="" | 
|---|
| 46 | .S SEGNAME="" | 
|---|
| 47 | .S HDRTYPE="" | 
|---|
| 48 | .;Order through message text | 
|---|
| 49 | .F  S LINE=+$O(^HL(772,HLMTIEN,"IN",LINE)) Q:('LINE)  D | 
|---|
| 50 | ..S TEXT=$G(^HL(772,HLMTIEN,"IN",LINE,0)) | 
|---|
| 51 | ..;Determine if header found yet (skip lines until it is) | 
|---|
| 52 | ..S:"FHS,BHS,MSH"[$E(TEXT,1,3) HDRFND=1 | 
|---|
| 53 | ..Q:('HDRFND) | 
|---|
| 54 | ..;Increment character count | 
|---|
| 55 | ..S CHARCNT=CHARCNT+$L(TEXT) | 
|---|
| 56 | ..;Get segment name | 
|---|
| 57 | ..S SEGNAME=$E(TEXT,1,3) | 
|---|
| 58 | ..;If header segment, process it and set HLHDR equal to it | 
|---|
| 59 | ..I "FHS,BHS,MSH"[SEGNAME D | 
|---|
| 60 | ...I (HLHDR="") S HLHDR=TEXT,FLDSPRTR=$E(TEXT,4),HDRTYPE=SEGNAME | 
|---|
| 61 | ...S $P(TEXT,FLDSPRTR,8)="" | 
|---|
| 62 | ...S:(SEGNAME="MSH") EVNTCNT=EVNTCNT+1 | 
|---|
| 63 | ..;If acknowledgement segment, set HLMSA equal to it | 
|---|
| 64 | ..S:((SEGNAME="MSA")&(HLMSA="")&(HDRTYPE="MSH")) HLMSA=TEXT | 
|---|
| 65 | .;Update statistics | 
|---|
| 66 | .D STATS^HLTF0(HLMTIEN,CHARCNT,EVNTCNT) | 
|---|
| 67 | .S:(HLHDR="") HLRESLT="12^"_$G(^HL(771.7,12,0)) | 
|---|
| 68 | ; | 
|---|
| 69 | ;Prepare to process external message | 
|---|
| 70 | I (HLLD0'="DHCP") D  Q:(HLRESLT'="") | 
|---|
| 71 | .;Store message in Message Text file | 
|---|
| 72 | .D MERGEIN^HLTF2(HLLD0,$S($G(HLLD1):HLLD1,1:""),HLMTIEN,.HLHDR,.HLMSA) | 
|---|
| 73 | . ; for batch message | 
|---|
| 74 | .I $D(HLMSA),$P(HLMSA,$E(HLHDR,4),2)="" S HLMSA="" | 
|---|
| 75 | .S:('$D(HLHDR)) HLRESLT="12^"_$G(^HL(771.7,12,0)) | 
|---|
| 76 | ; | 
|---|
| 77 | ;Process message | 
|---|
| 78 | D ^HLTP01 | 
|---|
| 79 | ; | 
|---|
| 80 | ;Update status of subscriber message | 
|---|
| 81 | I (HLMTIENS) D STATUS^HLTF0(HLMTIENS,$S(HLRESLT:4,1:3),$S(HLRESLT:+HLRESLT,1:""),$S($D(HLERR):HLERR,HLRESLT:$P(HLRESLT,"^",2),1:"")) | 
|---|
| 82 | ; | 
|---|
| 83 | ;Execute exit action of client protocol | 
|---|
| 84 | X:$G(HLEXROU)]"" HLEXROU | 
|---|
| 85 | Q | 
|---|