[613] | 1 | HLTP01 ;AISC/SAW-Transaction Processor Module (Cont'd) ;02/16/2000 11:15
|
---|
| 2 | ;;1.6;HEALTH LEVEL SEVEN;**2,25,34,47,60**;Oct 13, 1995
|
---|
| 3 | ;
|
---|
| 4 | ;Validate message header
|
---|
| 5 | D CHK^HLTPCK1(HLHDR,.HL,$S($G(HLMSA)'="":$P(HLMSA,$E(HLHDR,4),2,4),1:""))
|
---|
| 6 | ;
|
---|
| 7 | ;Change stored message ID to match that of the incoming message
|
---|
| 8 | S HL("TMP")=$$CHNGMID^HLTF(HLMTIEN,HL("MID"))
|
---|
| 9 | ;
|
---|
| 10 | ;Remember new message ID if it was changed
|
---|
| 11 | I ('HL("TMP")) S HLMID=HL("MID")
|
---|
| 12 | ;
|
---|
| 13 | ;Update zero node in Message Text file of incoming message
|
---|
| 14 | D UPDATE^HLTF0(HLMTIEN,$S($D(HL("MTIENS")):HL("MTIENS"),1:HLMTIEN),"I",$G(HL("EID")),"",$G(HL("SAP")),"I")
|
---|
| 15 | ;
|
---|
| 16 | ;Update status of incoming message
|
---|
| 17 | D STATUS^HLTF0(HLMTIEN,$S($G(HL):4,1:9),$S($G(HL):+HL,1:""),$S($G(HL):$P(HL,"^",2),1:""))
|
---|
| 18 | ;
|
---|
| 19 | ;Update Logical Link file statistics for message received through MailMan
|
---|
| 20 | ;The protocols associated with dynamically addressed messages
|
---|
| 21 | ;should not have a logical link defined.
|
---|
| 22 | ;This results in the monitor not being updated correctly and
|
---|
| 23 | ;acks cannot be addressed properly.
|
---|
| 24 | ;Get sender from mailman variable XMFROM and try to resolve link from
|
---|
| 25 | ;domain info (pointer in 870).
|
---|
| 26 | I HLLD0="XM",$G(XMFROM)]"" D
|
---|
| 27 | .N HLDOM,HLLINK,HLROUT
|
---|
| 28 | .S HLDOM=$P(XMFROM,"@",2)
|
---|
| 29 | .I $G(HL("EIDS"))]"" S HL("LL")=$P(^ORD(101,HL("EIDS"),770),U,7),HLROUT=$G(^ORD(101,HL("EIDS"),774))
|
---|
| 30 | .Q:$G(HLROUT)=""
|
---|
| 31 | .D LINK^HLUTIL3(HLDOM,.HLLINK,"D")
|
---|
| 32 | .I $O(HLLINK(0)) S HL("LL")=$O(HLLINK(0))
|
---|
| 33 | .;If Ack is required, dynamically address it to sender:
|
---|
| 34 | .;Note-first piece (recipient) not required here
|
---|
| 35 | .I $O(HLLINK(0)) S $P(HLL("LINKS",1),U,2)=HL("LL")
|
---|
| 36 | I HLLD0="XM",$G(HL("LL"))]"" D
|
---|
| 37 | . S X=$$ENQUEUE^HLCSQUE(HL("LL"),"IN")
|
---|
| 38 | . D MONITOR^HLCSDR2("P",2,HL("LL"),$P(X,U,2),"IN")
|
---|
| 39 | ;
|
---|
| 40 | ;Quit if this is acknowledgment to acknowledgement message
|
---|
| 41 | I $G(HL("ACK")) D G EXIT
|
---|
| 42 | .;Update status of original acknowledgment message to successfully
|
---|
| 43 | .; completed if no error occurred
|
---|
| 44 | .I '$G(HL) D STATUS^HLTF0(HL("MTIENS"),3)
|
---|
| 45 | ;
|
---|
| 46 | ;Create message ID and Message Text IEN for subscriber entry in Message
|
---|
| 47 | ; Text file - carry over message ID of original message
|
---|
| 48 | S HLMIDS=HLMID
|
---|
| 49 | D CREATE^HLTF(.HLMIDS,.HLMTIENS,.HLDTS,.HLDT1S)
|
---|
| 50 | K HLDTS,HLDT1S,HLMIDS
|
---|
| 51 | ;
|
---|
| 52 | ;Update zero node in Message Text file of subscriber entry
|
---|
| 53 | D UPDATE^HLTF0(HLMTIENS,HLMTIEN,"I",$G(HL("EIDS")),$G(HL("RAP")),"","I")
|
---|
| 54 | ;
|
---|
| 55 | ;Create and send COMMIT acknowledgment if required
|
---|
| 56 | I $G(HLMSA)="",$G(HL("RAP"))&$G(HL("SAP")) D
|
---|
| 57 | .I '$D(HL("ACAT")),'$D(HL("APAT")),'HL Q
|
---|
| 58 | .I $G(HL("ACAT"))="NE" Q
|
---|
| 59 | .I $G(HL("ACAT"))="ER",'HL Q
|
---|
| 60 | .I $G(HL("ACAT"))="SU",HL Q
|
---|
| 61 | .;Version 2.1 messages always ORIGINAL MODE-application must generate
|
---|
| 62 | .;ack. if error in hdr, hl7 rejects-quits.
|
---|
| 63 | .S HLA("HLA",1)="MSA"_HL("FS")_$S(HL:$S(HL("VER")=2.1:"AR",1:"CR"),1:"CA")_HL("FS")_HL("MID")_HL("FS")_$P(HL,"^",2)
|
---|
| 64 | .;I $D(HLA("HLA")) S HLP("MSACK")=1 D GENACK^HLMA1(HL("EID"),HLMTIENS,HL("EIDS"),"LM",1,.HLRESLT,"",.HLP)
|
---|
| 65 | .S HLP("MSACK")=1
|
---|
| 66 | .;added next line to save off HL* variables due to recursive call;sfciofo/ac
|
---|
| 67 | .N HLSAVE M HLSAVE=HL
|
---|
| 68 | .D GENACK^HLMA1(HL("EID"),HLMTIENS,HL("EIDS"),"LM",1,.HLRESLT,"",.HLP)
|
---|
| 69 | .I $D(HLSAVE) M HL=HLSAVE
|
---|
| 70 | ;
|
---|
| 71 | ;Quit processing if error with header
|
---|
| 72 | ;Potential problem with patch 25 that may affect internal DHCP to DHCP
|
---|
| 73 | ;messaging. As a test, replaced next line with following line to correct:
|
---|
| 74 | ;I HL'="" S HLRESLT=HL G EXIT
|
---|
| 75 | I $G(HL)]"" S HLRESLT=HL G EXIT
|
---|
| 76 | ;Comment out next line. Potential problem with patch 34 affecting
|
---|
| 77 | ;dhcp to dhcp messaging:
|
---|
| 78 | ;I HL("TMP")'=0 S HLRESLT="13^"_$P(HL("TMP"),"^",2)
|
---|
| 79 | I $G(HL("TMP")) S HLRESLT="13^"_$P(HL("TMP"),"^",2)
|
---|
| 80 | ;
|
---|
| 81 | ;Set special HL variables
|
---|
| 82 | S HLQUIT=0,HLNODE="",HLNEXT="D HLNEXT^HLCSUTL"
|
---|
| 83 | ;
|
---|
| 84 | ;Check if message is an acknowledgement
|
---|
| 85 | I ($G(HLMSA)'="") D G EXIT
|
---|
| 86 | .;Update status of original subscriber message
|
---|
| 87 | .D STATUS^HLTF0(HL("MTIENS"),$S("AA,CA"[$P(HLMSA,HL("FS"),2):3,1:4),"",$S("AA,CA"[$P(HLMSA,HL("FS"),2):"",1:$P(HLMSA,HL("FS"),3)))
|
---|
| 88 | .D PROCACK^HLTP2(HLMTIEN,HL("EID"),.HLRESLT,.HL)
|
---|
| 89 | ;
|
---|
| 90 | ;Get entry action, exit action and processing routine
|
---|
| 91 | K HLHDR,HLLD0,HLLD1,HLMSA
|
---|
| 92 | I $G(HL("EIDS"))="",$G(HLEIDS)]"" S HL("EIDS")=HLEIDS ;**CIRN**
|
---|
| 93 | D EVENT^HLUTIL1(HL("EIDS"),"15,20,771",.HLN)
|
---|
| 94 | S HLENROU=$G(HLN(20)),HLEXROU=$G(HLN(15))
|
---|
| 95 | S HLPROU=$G(HLN(771)) I HLPROU']"" S HLRESLT="10^"_$G(^HL(771.7,10,0)) G EXIT
|
---|
| 96 | ;
|
---|
| 97 | ;Execute entry action of client protocol
|
---|
| 98 | X:HLENROU]"" HLENROU K HLENROU
|
---|
| 99 | ;
|
---|
| 100 | ;Execute processing routine
|
---|
| 101 | X HLPROU S HLRESLT=0 S:($D(HLERR)) HLRESLT="9^"_$G(^HL(771.7,9,0))
|
---|
| 102 | EXIT K HL,HLHDR,HLMSA
|
---|
| 103 | Q
|
---|