以下相關性正在從行家中央儲存庫中使用在此示例中:如何修改電話號碼的HAPI驗證規則?
<!-- 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>
這裏是我的解析代碼,寫在階的例子:
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查找有關如何修改驗證規則的文檔,但沒有找到任何有用的信息。
一個例子將是最受讚賞的,但即使指向正確的文檔,或一個簡單的工作示例項目就足夠了。
如何將HAPI解析器使用的驗證規則配置爲允許將電話號碼分機包含在PID-13字段中的有效美國電話號碼中?
編輯
有了多一點的搜索,通過這種高致病性禽流感開發者郵件列表thread,我想通了如何禁用驗證。這裏是一個例子:
lazy val parser = {
val context = new DefaultHapiContext()
context.setModelClassFactory(new CanonicalModelClassFactory("2.2"))
context.setValidationContext(new NoValidation)
context.getGenericParser
}
但如果可能,我想繼續驗證消息。如果我必須禁用驗證,我想這將不得不起作用,但我更願意指定驗證保持打開狀態,但該電話號碼可以包含擴展名。
雖然這個答案很好,有信息。我們無權更改擴展程序。 HL7消息被髮送給第三方使用。 – axiopisty 2016-07-26 15:14:22
如果發送應用程序有缺陷,那麼您將不得不編寫自定義代碼來清理不良數據。 HAPI無法爲您解決這個問題。 – 2016-07-26 15:25:15
同意。但是,我們的應用程序不是這些數據的真實來源。雖然HAPI沒有解決問題的責任,但如果HAPI能夠與不良球員打好交手,那將是一件好事。我只是好奇,是否可以爲這種情況啓用自定義驗證,即使它不是有效的HL7消息格式。 – axiopisty 2016-07-27 15:16:09