2017-03-28 4 views
1

MirthとHL7で始まり、リモートサーバーにメッセージを送信しようとしています。次のように私のMSHに見える:Mirth HL7 ACK ERROR:メッセージコントロールのIDが一致しません

MSH|^~\&|EPIC|EPIC|IMG_SCHEDULE_APPT|REMOTE|20170328193318|PERSONNAME|ORM^O01|12345678|T|2.4|||||||||| 

次のように応答がなります

MSH|^~\&|IMG_SCHEDULE_APPT|REMOTE|EPIC|EPIC|20170328193318||ACK|12345678|T|2.4| 
MSA|AA||| 

を、私は私の知る限り、このエラーは、メッセージコントロールIDという意味を理解するようERROR: Message control Ids do not match.

を言ってエラーが出ますACKメッセージに返されるメッセージは同じではありません。

私が見ることができるから、12345678はメッセージコントロールIDで、返されるACKと同様に、送信するメッセージにその番号が表示されます。ここで何が間違っていますか?そして誰が間違っているのですか?私か遠隔のパーティー?

私はこれをどのように解決したり、デバッグすることができますか?

答えて

1

MSA.2(メッセージ制御ID)が必要とされ、ACKメッセージがacknowlegesことを元のメッセージにControlIdと同じでなければなりません。..

+0

厳密に言えば、ACKメッセージのMSH-10は、元の送信システムが送信するものとは異なる値になる可能性があります(たとえば、複数のシステムからのクエリに応答するシステムを考え、カウンタを使用してメッセージID ACKとして返信する)。 sqlabに言及すると、送信システムのメッセージIDは、セクション2.15.8(私はHL7 v2.5 USを見ています)のMSA-2で返される必要があります。 – Emilien

0

あなたはメッセージ制御IDを検証したくない場合は、あなたは、レスポンス検証プロパティを開き、「検証メッセージ制御ID」をオフにすることができます

Channel Summary Tab -> Set Data Types

リモートシステムがそのロジックを変更することはできません、あなたはまだコントロールIDを検証したい場合は、応答でそれを行うことができます変圧器:

if (responseStatus == ERROR) { 
    // msg here is the ACK, origMsg is the encoded data that was sent outbound 
    var origMsg = new XML(SerializerFactory.getSerializer('HL7V2').toXML(connectorMessage.getEncodedData())); 
    if (origMsg.MSH['MSH.10']['MSH.10.1'].toString() == msg.MSH['MSH.10']['MSH.10.1'].toString()) { 
     responseStatus = SENT; 
    } 
} 
関連する問題