Я использую API-интерфейс Fhir-dotnet для взаимодействия с нашим сервером Fhir, чтобы синхронизировать записи пациентов с нашим внутренним репозиторием пациентов. У меня есть два экземпляра ресурса Patient: один представляет версию в нашем исходном репозитории, а другой представляет пациента в Fhir. Я хотел бы применить подмножество изменений из исходной версии репозитория пациента к Fhir-версии пациента и попытался использовать метод CopyTo (), но это также удаляет все данные, которые существовали только в Fhir-версии пациента.
В идеале я хочу обновлять только те свойства в версии Fhir пациента, где у меня есть данные в версии исходного репозитория пациента (поля, которые не равны нулю в исходной версии пациента), и оставлять любые данные, которые существовали только в Fhir. репозиторий. Любые данные, которые были добавлены в версию Fhir пациента в результате их взаимодействия с API с помощью своего мобильного приложения, следует оставить в покое (если они не обновили свойство, которое я также пытаюсь синхронизировать).
Поскольку CopyTo () кажется полной заменой одного ресурса на другой (а не аддитивной копией и игнорированием полей, которые имеют нулевое значение в soruce), мне нужно иметь возможность сравнивать два ресурса одного и того же типа и получать список свойств изменения между ними. Похоже, что есть несколько базовых классов для поддержки этого в IsMatch () с использованием IDeepCopy и IDeepComparison, и я также заметил в разделе заметок GitHub, что есть поддержка для обнаружения различий.
Вспомогательные классы для работы с метаданными спецификации, в первую очередь с StructureDefinition и генерацией дифференциалов.
Итак, мой вопрос: существуют ли существующие классы в Fhir DOTNET API, которые могут дать мне список изменений между двумя экземплярами одного и того же типа resoruce, и если да, то какие классы они будут с возможным примером? Если нет, то есть ли существующий шаблон, который я мог бы использовать, чтобы дать мне список свойств, которые различаются между двумя экземплярами одного и того же типа, которые можно использовать для присвоения значений между ними. Похоже, чтобы сгенерировать список реальных свойств, нужно много размышлений, а не просто список пар строк "имя-значение". Если в Fhir.NET API для этого нет поддержки, то я хотел бы написать псевдокод, аналогичный приведенному ниже ...
- Получить пациента-источника
- Получить целевого пациента
- Для каждого измененного свойства (глубокое сравнение между источником и целью) обновите цель с помощью свойства источника.