Как использовать FhirDotNet для получения списка свойств, которые различаются между двумя ресурсами одного типа - PullRequest
0 голосов
/ 28 сентября 2019

Я использую API-интерфейс Fhir-dotnet для взаимодействия с нашим сервером Fhir для синхронизации записей пациентов с нашим внутренним хранилищем пациентов.У меня есть два экземпляра ресурса Patient: один представляет версию в нашем исходном хранилище, а другой представляет пациента в Fhir.Я хотел бы применить подмножество изменений из исходной версии репозитория пациента к версии Fhir пациента и пытался использовать метод CopyTo (), но при этом также удаляются все данные, которые существовали только в версии пациента Fhir.

В идеале я хочу обновлять только те свойства в Fhir-версии Patient, где у меня есть данные в исходной версии репозитория Patient (поля, отличные от NULL в исходной версии пациента), и оставлять любые данныеэто существовало только в хранилище Fhir.Любые данные, которые были добавлены в Fhir-версию пациента в результате их взаимодействия с API с помощью их мобильного приложения, не следует оставлять в покое (если только они не обновили свойство, которое я также пытаюсь синхронизировать).

Так как CopyTo () выглядит как полная замена одного ресурса другому (не аддитивная копия и игнорирование полей, которые являются нулевыми в soruce), мне нужно иметь возможность сравнивать два ресурса одного типаи получить список изменений свойств между ними.Кажется, что есть некоторые фундаментальные классы для поддержки этого в IsMatch (), использующие IDeepCopy и IDeepComparison, и я также заметил в разделе заметок GitHub, что есть поддержка для обнаружения различий.

Вспомогательные классы для работы сметаданные спецификации, прежде всего StructureDefinition и генерация дифференциалов

Поэтому мой вопрос заключается в том, существуют ли существующие классы в API Fhir DOTNET, которые могут дать мне список изменений между двумя экземплярами одного и того жетип resoruce и если да, то какие классы они будут с возможным примером?Если нет, то существует ли существующий шаблон, который я мог бы использовать, чтобы дать мне список свойств, которые отличаются между двумя экземплярами одного типа, которые можно использовать для назначения значений между ними.Похоже, что нужно было бы много размышлять, чтобы сгенерировать список реальных свойств, а не просто список пар «имя-значение» строк.Если это не поддерживается в Fhir.NET API, то я хотел бы написать аналогично псевдокоду ниже ...

  • Получить исходного пациента
  • Получить целевого пациента
  • Для каждого измененного свойства (глубокое сравнение между источником и целью) обновите цель с помощью свойства источника

1 Ответ

0 голосов
/ 30 сентября 2019

Вы можете использовать функцию NamedChildren() для любого элемента, чтобы получить дочерние элементы по имени.С этим списком вы можете использовать метод IsExactly(), чтобы сравнить их один за другим!Конечно, вам придется иметь дело с вложенными группами FHIR (такими как Patient.contact), которым может потребоваться другое лечение.

...