この例では、maven 中央リポジトリから次の依存関係が使用されています。
<!-- provides HAPI library -->
<dependency>
<groupId>ca.uhn.hapi</groupId>
<artifactId>hapi-base</artifactId>
<version>2.2</version>
</dependency>
<!-- provides HAPI library message version -->
<dependency>
<groupId>ca.uhn.hapi</groupId>
<artifactId>hapi-structures-v22</artifactId>
<version>2.2</version>
</dependency>
<!-- provides ByteString -->
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-actor_2.10</artifactId>
<version>2.3.3</version>
</dependency>
これは、scala で記述された私の解析コードの例です。
import akka.util.ByteString
import ca.uhn.hl7v2.model.Message
import ca.uhn.hl7v2.model.v22.datatype.{CM_PAT_ID, ST, TN, TSComponentOne}
import ca.uhn.hl7v2.model.v22.segment.{EVN, MRG, PID}
import ca.uhn.hl7v2.parser.CanonicalModelClassFactory
import ca.uhn.hl7v2.{DefaultHapiContext, ErrorCode, HL7Exception}
lazy val parser = {
val context = new DefaultHapiContext()
context.setModelClassFactory(new CanonicalModelClassFactory("2.2"))
context.getGenericParser
}
def parseHL7Message(message: ByteString) = Try[Message] {
val msg: String = message.utf8String.trim
parser.parse(msg)
}
このコードは、次の HL7 メッセージを正常に解析できます。
"MSH|^~\\&|XXXX|S|XXXXXX|S|201410280931||ADT^A31|123456|P|2.2\r" +
"EVN|A31|201410280930\r" +
"PID|||9999999^^^S^MR~88888888^^^^PI||xxxx^xxxxxxxxx||11111111||||||(123)456-7890\r" +
"PV1\r"
ただし、内線番号付きの電話番号がメッセージで提供されると、hapi パーサーはメッセージの解析に失敗します。電話番号の内線番号で解析しようとしている入力メッセージの例を次に示します。
"MSH|^~\\&|XXXX|S|XXXXXX|S|201410280931||ADT^A31|123456|P|2.2\r" +
"EVN|A31|201410280930\r" +
"PID|||9999999^^^S^MR~88888888^^^^PI||xxxx^xxxxxxxxx||11111111||||||(123)456-7890 1\r" +
"PV1\r"
このメッセージを解析しようとすると、次のエラー メッセージが表示されて失敗します。
ca.uhn.hl7v2.validation.ValidationException: 検証に失敗しました: プリミティブ値 '(123)456-7890 1' は、空にするか、PID-13 の米国の電話番号にする必要があります
http://hl7api.sourceforge.net/index.htmlで見つけることができるすべてを読んで、検証ルールを変更する方法に関するドキュメントを探しましたが、有用なものは見つかりませんでした。
例を示していただければ幸いですが、適切なドキュメントや簡単な作業例のプロジェクトを参照するだけでも十分です。
PID-13 フィールドの有効な米国の電話番号に電話番号の内線番号を含めることができるように、HAPI パーサーで使用される検証規則をどのように構成できますか?
編集
この hapi 開発者メーリング リストのスレッドをもう少し検索して、検証を完全に無効にする方法を見つけました。次に例を示します。
lazy val parser = {
val context = new DefaultHapiContext()
context.setModelClassFactory(new CanonicalModelClassFactory("2.2"))
context.setValidationContext(new NoValidation)
context.getGenericParser
}
しかし、可能であれば、メッセージの検証を続けたいと思います。検証を無効にする必要がある場合は、それが機能する必要があると思いますが、検証をオンのままにし、電話番号に内線番号を含めることができるように指定したいと思います。