В этом примере используются следующие зависимости из центрального репозитория 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, чтобы найти документацию о том, как изменить правила проверки, но не нашел ничего полезного.
Пример будет наиболее ценен, но даже указание на соответствующую документацию или простой рабочий пример проекта будет достаточным.
Как можно настроить правила проверки, используемые синтаксическим анализатором HAPI, чтобы разрешить включение добавочного номера телефона в действительный номер телефона в США в поле PID-13?
ИЗМЕНИТЬ
Немного поискав в этой треде списка рассылки разработчиков hapi, я понял, как отключить проверку вообще. Вот пример:
lazy val parser = {
val context = new DefaultHapiContext()
context.setModelClassFactory(new CanonicalModelClassFactory("2.2"))
context.setValidationContext(new NoValidation)
context.getGenericParser
}
Но если возможно, я хотел бы продолжить проверку сообщений. Если мне нужно отключить проверку, я думаю, это должно сработать, но я бы предпочел указать, что проверка остается включенной, но номера телефонов могут включать добавочные номера.