Создание HL7 CCD (на основе CDA) для реестров рака (значимое использование, уровень 2)

У меня есть две проблемы, касающиеся генерации сообщений CCD для реестров рака. У меня уже есть класс CCD, сгенерированный из схемы CCD XML (XSD).

Во-первых, это старая схема. Кажется, что он полностью совместим, но я хотел бы иметь возможность генерировать новый класс на основе самой последней схемы CDA. Всякий раз, когда я использую класс, сгенерированный из новой схемы, и заменяю исходный класс, возникает исключение в

serializer.Serialize(textWriterObj, cdaObj);

Я использую XSD.exe MS для создания класса. Я использую VS 2012, и версия XSD.exe, кажется, специфична для.Net Framework 4.0, но проект, над которым я работаю, застрял в 2.0. Сгенерированные классы в основном идентичны, кроме тега о том, что он был создан в версии XSD.exe для FW 4.0.

Другой проблемой является набор ошибок, которые я получаю после создания сообщения и проверки его с помощью официального инструмента muCrValidation.

ERROR: In IHE PCC Cancer Diagnosis Section (1.3.6.1.4.1.19376.1.7.3.1.3.14.1), a Cancer Diagnosis must contain a Problem Concern Entry (1.3.6.1.4.1.19376.1.5.3.1.4.5.2) that contains a Cancer Diagnosis Entry (1.3.6.1.4.1.19376.1.7.3.1.4.14.1). See Section 2.5.3.2.
LOCATION: /ClinicalDocument[1]/component[1]/structuredBody[1]/component[1]/section[1]
TEST : cda:entry/cda:act[cda:templateId[@root = "1.3.6.1.4.1.19376.1.5.3.1.4.5.2"]]//cda:entryRelationship[@typeCode="SUBJ" and @inversionInd="false"]//cda:templateId[@root = "1.3.6.1.4.1.19376.1.7.3.1.4.14.1"]

Это странная ошибка, потому что я это компенсировал, и в правильных полях появилось сообщение. Обратите внимание, что ему нужен конкретный идентификатор шаблона для Act, EntryRelationship в соответствии с Act, который имеет определенное значение TypeCode и InversionInd вместе с другим идентификатором шаблона в EntryRelationship.

Я компенсирую это в классе построения сообщений.

act.templateId = new II[3];
for (int i = 0; i < act.templateId.Length; i++)
act.templateId[i] = new II();
act.templateId[0].root = "1.3.6.1.4.1.19376.1.5.3.1.4.5.2";
act.templateId[1].root = "1.3.6.1.4.1.19376.1.5.3.1.4.5.1";
act.templateId[2].root = "2.16.840.1.113883.10.20.1.27";
...
act.entryRelationship[0].typeCode = x_ActRelationshipEntryRelationship.SUBJ;
act.entryRelationship[0].inversionInd = false;
act.entryRelationship[0].templateId = new II[1];
act.entryRelationship[0].templateId[0] = new II();
act.entryRelationship[0].templateId[0].root = @"1.3.6.1.4.1.19376.1.7.3.1.4.14.1";

Я был в состоянии устранить большинство ошибок (и разделов ошибок), но этот вид остается. Я бы перечислил остальное, но у меня нет персонажей. Я полагаю, что если я смогу это исправить, я смогу исправить все остальное довольно легко.

2 ответа

Вы смотрели на Эверест ( http://everest.marc-hi.ca/)? Это более общая структура HL7v3, но она способна создавать экземпляры CDA. Он также обладает некоторыми более приятными функциями, такими как обработка типов данных CDA, таких как собственные типы данных.NET:

ClinicalDocument doc = new ClinicalDocument();
doc.Title = "My CDA";
doc.EffectiveTime = DateTime.Now;

Существует также всеобъемлющая электронная книга, которая охватывает множество тем, связанных с использованием инфраструктуры (в основном применимо к сообщениям v3, но также применимо и к CDA). http://www.lulu.com/shop/justin-fyfe/advanced-everest-developers-handbook-ebook/ebook/product-21278619.html

Вы установили пространство имен по умолчанию для XmlSerializer?

XmlSerializer ser = new XmlSerializer(typeof(POCD_MT000040ClinicalDocument), "urn:hl7-org:v3");
Другие вопросы по тегам