Как изменить правила проверки HAPI для телефонных номеров?

В этом примере используются следующие зависимости из центрального репозитория 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
  }

Но если возможно, я хотел бы продолжить проверку сообщений. Если мне нужно отключить проверку, я думаю, это должно сработать, но я бы предпочел указать, что проверка остается включенной, но номера телефонов могут включать добавочные номера.


person axiopisty    schedule 31.10.2014    source источник


Ответы (2)


Я должен работать со сторонней службой, и эта служба присылает мне недействительные телефоны. К сожалению, я не могу понять, как это сделать в качестве «лучшей практики». Но я нашел один лайфхак:

@PostConstruct
public void postConstruct() {  
    List<RuleBinding<PrimitiveTypeRule>> rules = ((ValidationContextImpl)applicationRouter.getParser().getHapiContext().getValidationContext()).getPrimitiveRuleBindings();
    //initially was published with this line, but think it was mistake
    //for(int i = rules.size() - 1; i > 0; i--) {
    for(int i = rules.size() - 1; i >= 0; i--) {
        RuleBinding<PrimitiveTypeRule> item = rules.get(i);
        if("TN".equals(item.getScope())){
            rules.remove(i);
        }
    }
}

Если кто-то знает более хороший способ решить эту проблему, пожалуйста, напишите.

person degr    schedule 28.03.2016

Телефонные номера могут включать добавочные номера. Проблема в том, что у вас есть расширение в неправильном формате. См. Стандарт обмена сообщениями HL7 версии 2.2, раздел 2.8.10.9. Номера телефонов должны быть в следующем формате.

[NN] [(999)]999-9999[X99999][B99999][C any text]

Поместите расширение после «X».

person Nick Radov    schedule 08.11.2014
comment
Хотя в этом ответе приятно иметь информацию. У нас нет доступа для изменения расширения. Сообщение HL7 отправляется для использования третьей стороной. - person axiopisty; 26.07.2016
comment
Если отправляющее приложение неисправно, вам придется написать собственный код для очистки неверных данных. HAPI не может решить эту проблему за вас. - person Nick Radov; 26.07.2016
comment
Согласованный. Однако наше приложение не является источником истины для этих данных. Хотя решение проблемы не входит в обязанности HAPI, было бы неплохо, если бы HAPI хорошо работал с плохими игроками. Мне просто любопытно, можно ли включить пользовательскую проверку для этого сценария, даже если это недопустимый формат сообщения HL7. - person axiopisty; 27.07.2016