Анализ EDI Smooks — повторяющиеся сегменты

Я пытаюсь создать общий синтаксический анализатор EDI, который может обрабатывать, когда какие-либо ситуационные сегменты отсутствуют в данном файле. Это было достаточно просто, используя атрибут minOccurs="0" в XML-сопоставлении, однако я изо всех сил пытаюсь понять, как справиться с этим, когда несколько сегментов повторяются с одним и тем же тегом. Например:

CAS*PR*1*793~
NM1*QC*1*SHEPHARD*SAM*O***HN*666666666A~    --PatientName
NM1*IL*1*SHEPARD*JESSICA****HN*999887777A~  --InsuredName
MIA*0***138018.4~

Сопоставлено с использованием следующего XML:

<medi:segment segcode="NM1" xmltag="PatientNameSegment" minOccurs="0" truncatable="true">
    <medi:field xmltag="EntityIdentifierCode" />
    <medi:field xmltag="EntityTypeQualifier" />
    <medi:field xmltag="LastName" />
    <medi:field xmltag="FirstName" />
    <medi:field xmltag="MiddleName" />
    <medi:field xmltag="NamePrefix" />
    <medi:field xmltag="NameSuffix" />
    <medi:field xmltag="IdentificationCodeQualifer" />
    <medi:field xmltag="IdentificationCode" />
</medi:segment>
<medi:segment segcode="NM1" xmltag="InsuredNameSegment" minOccurs="0" truncatable="true">
    <medi:field xmltag="EntityIdentifierCode" />
    <medi:field xmltag="EntityTypeQualifier" />
    <medi:field xmltag="LastName" />
    <medi:field xmltag="FirstName" />
    <medi:field xmltag="MiddleName" />
    <medi:field xmltag="NamePrefix" />
    <medi:field xmltag="NameSuffix" />
    <medi:field xmltag="IdentificationCodeQualifer" />
    <medi:field xmltag="IdentificationCode" />
</medi:segment>

Но когда первая строка для имени пациента удалена из входного файла, она просто загрузит застрахованное имя в имя пациента и пропустит загрузку застрахованного имени, а не оставит имя пациента пустым.

По сути, то, что я хотел бы, эквивалентно указанию «NM1 * QC» в качестве segcode (поскольку на самом деле его установка убивает синтаксический анализатор). Я вижу, что документация Smooks также допускает сопоставление регулярных выражений, но я не уверен, с чем его сравнивают, и мне еще не удалось поэкспериментировать с ним.

Спасибо!


person cmcowart    schedule 28.07.2014    source источник
comment
Можете ли вы прочитать файл EDI, если все сегменты находятся в одной строке (не отформатированный файл EDI). Образцы сегментов, которые вы разместили здесь, являются отформатированными. Не могли бы вы опубликовать свои конфигурации разделителей?   -  person JToddler    schedule 02.03.2016


Ответы (1)


Вам нужно сделать ваш квалификатор парсера (QC и IL в первом элементе) осведомленным. Я не знаю, если и как это делается с вашим конкретным продуктом, но я совершенно уверен, что обычно это основное требование. Пятисекундный гугл говорит мне, что вы можете использовать segcode="NM1\*IL.*", но я сомневаюсь, что это правильный способ сделать это.

person eckes    schedule 28.07.2014
comment
Вздох... Я определенно столкнулся с этим и столкнулся с ошибками синтаксического анализа при попытке реализовать его, но, попытавшись еще раз минуту назад, похоже, проблема решается. Я, должно быть, растолстел его раньше. Супер обидно! - person cmcowart; 29.07.2014
comment
Теперь smooks (версия 1.6) лучше обрабатывает повторяющиеся сегменты. Мы можем использовать segmentGroups для работы с повторяющимися сегментами. - person JToddler; 02.03.2016