Разбор сообщения REF HL7 v2.3 с локальными настройками в HAPI

Я пытаюсь разобрать сообщение HL7 REF I12 с локальной настройкой (NZ).

Когда я пытался использовать GenericParser, я продолжал получать исключения Validation. Например, для сегмента ниже, я продолжаю получать вывод

ca.uhn.hl7v2.validation.ValidationException: проверка не удалась: примитивное значение '(08)569-7555' должно быть пустым или номер телефона США

PRD|PP|See T Tan^""^""^^""|""^^^^""^New Zealand||(08)569-7555||14134^NZMC

Мой вопрос:

  • Есть ли способ избежать проверки с помощью генератора классов соответствия
  • Можно ли создать собственные классы проверки с использованием CustomModelClasses?

В любом случае, есть ли пример кода для этого или учебная пример документации?

1 ответ

Решение

Если отключение проверки в целом является опцией для вашего приложения, вы можете установить контекст проверки для использования NoValidation,

Смотрите эту ветку в списке рассылки разработчиков хапи: http://sourceforge.net/p/hl7api/mailman/message/31244500/

Вот пример того, как отключить проверку:

HapiContext context = new DefaultHapiContext();
context.setValidationContext(new NoValidation());
GenericParser parser = context.getGenericParser();
String message = ...
try {
  parser.parse(message);
} catch (Exception e) {
  e.printStackTrace();
}

Если вам все еще требуется валидация, но вы просто хотите изменить валидатор для определенных правил, вам придется создать собственную реализацию ValidationContext. Это будет сделано путем подклассификации ca.uhn.hl7v2.validation.builder.support.NoValidationBuilder и переопределяя configure метод и использовать его для создания экземпляра ValidationContextImpl.

Для примера того, как реализовать метод configure в вашем подклассе NoValidationBuilder, см. Исходный код для ca.uhn.hl7v2.validation.builder.support.DefaultValidationBuilder, Это контекст проверки по умолчанию, который генерирует сообщение об ошибке, которое вы видите. Чтобы вам было легче, я включил список классов здесь:

public class DefaultValidationBuilder extends DefaultValidationWithoutTNBuilder {

    @Override
    protected void configure() {
        super.configure();

        forAllVersions()
            .primitive("TN")
                .refersToSection("Version 2.4 Section 2.9.45")
                .is(emptyOr(usPhoneNumber()));
    }

}

Обратите внимание, что это реализация usPhoneNumber метод, определенный в BuilderSupport:

public Predicate usPhoneNumber() {
    return matches("(\\d{1,2} )?(\\(\\d{3}\\))?\\d{3}-\\d{4}(X\\d{1,5})?(B\\d{1,5})?(C.*)?",
            "a US phone number");
}
Другие вопросы по тегам