Hapi FHIR 捆绑包 - 资源不包含 id 元素

问题描述

我正在尝试生成一个包含诊断报告和多个相关媒体的包。但是,我无法让生成的包包含媒体资源 (entry[i]/resource/id) 的 id 元素。

生成了这样的诊断报告和媒体:

    protected Media createMedia(String patientID,DatasetFile datasetFile,Thumbnail thumbnail) {
        Media media = new Media();

        media.setId(IdType.newRandomUuid());
        media.setStatus(Media.MediaStatus.COMPLETED);

        media.setHeight(thumbnail.height);
        media.setWidth(thumbnail.width);

        media.getCreatedDateTimeType().setValue(DateTime.Now().toDate());

        media.getSubject().setReference("Patient/" + patientID);
        media.getSubject().setType("Patient");

        Identifier identifier = media.addIdentifier();

        identifier.setSystem(testSystem);
        identifier.setValue(datasetFile.getGlobalId().toString());

        media.getType().addCoding()
            .setSystem("http://hl7.org/fhir/ValueSet/media-type")
            .setCode("image");

        media.getContent()
            .setTitle(thumbnail.fileName)
            .setContentType(thumbnail.contentType)
            .setData(thumbnail.imageContent);

        return media;
    }

    protected DiagnosticReport createDiagnosticReport(String patientID,Long globalMessageId,Dataset dataset,Map<DatasetFile,Media> medias) {
        DiagnosticReport diagnosticReport = new DiagnosticReport();

        diagnosticReport.setId(IdType.newRandomUuid());

        diagnosticReport.setStatus(DiagnosticReport.DiagnosticReportStatus.FINAL);

        diagnosticReport.getText().getDiv().setValueAsstring("TBD");
        diagnosticReport.getText().setStatus(Narrative.NarrativeStatus.ADDITIONAL);

        diagnosticReport.getCode()
            .addCoding()
            .setSystem("http://loinc.org")
            .setCode("10197-2")
            .setdisplay("Physical findings of Eye Narrative");

        diagnosticReport.getSubject().setReference("Patient/" + patientID);

        diagnosticReport.getEffectiveDateTimeType().setValue(DateTime.Now().toDate());

        Identifier identifier = diagnosticReport.addIdentifier();

        identifier.setSystem(testSystem);
        identifier.setValue(dataset.getGlobalId().toString());

        medias.values().stream().forEach(m -> {
            DiagnosticReport.DiagnosticReportMediaComponent mediaRep = diagnosticReport.addMedia();
            mediaRep.getLink().setReference(m.getIdElement().getValue());
            mediaRep.getLink().setType("Media");
        });

        return diagnosticReport;
    }

这是我用来将诊断报告和媒体放入包中的代码

    protected void addDiagnosticReportAndMediasToBundle(Bundle bundle,DiagnosticReport diagnosticReport,Media> medias) {
        bundle.setType(Bundle.BundleType.TRANSACTION);

        bundle.addEntry()
            .setResource(diagnosticReport)
            .getRequest()
            .setUrl("DiagnosticReport")
            .setMethod(Bundle.HTTPVerb.POST);

        medias.values().forEach(m -> {
            Bundle.BundleEntryComponent bundleEntryComponent = bundle.addEntry();
            bundleEntryComponent.setResource(m);
//            bundleEntryComponent.setId(m.getId());
            bundleEntryComponent.getRequest()
                .setUrl("Media")
                .setMethod(Bundle.HTTPVerb.POST);
        });
    }

这会导致以下 snipper(摘录):

{
  "resourceType": "Bundle","type": "transaction","entry": [ {
    "resource": {
      "resourceType": "DiagnosticReport","text": {
        "status": "additional","div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">TBD</div>"
      },"identifier": [ {
        "system": "http://test.com/my","value": "10"
      } ],"status": "final","code": {
        "coding": [ {
          "system": "http://loinc.org","code": "10197-2","display": "Physical findings of Eye Narrative"
        } ]
      },"subject": {
        "reference": "Patient/559d0494ddd50c0e847e14b5"
      },"effectiveDateTime": "2021-03-17T19:41:11+01:00","media": [ {
        "link": {
          "reference": "urn:uuid:67f3d12d-85f2-412c-bcd7-ab1f55acb63a","type": "Media"
        }
      } ]
    },"request": {
      "method": "POST","url": "DiagnosticReport"
    }
  },{
    "resource": {
      "resourceType": "Media","value": "1616"
      } ],"status": "completed","type": {
        "coding": [ {
          "system": "http://hl7.org/fhir/ValueSet/media-type","code": "image"
        } ]
      },"subject": {
        "reference": "Patient/559d0494ddd50c0e847e14b5","type": "Patient"
      },"createdDateTime": "2021-03-17T19:41:11+01:00","height": 200,"width": 200,"content": {
        "contentType": "image/jpeg","data": "/9j/4AAQSkZJRgABAgEAYABgAAD(...)","title": "dummy image.jpg"
      }
    },"url": "Media"
    }
  } ]
}

diagnosticReport entry[i]/resource/media[j]/link/reference中出现媒体的随机uuid

调用 m.setId 或 m.setIdElement 不会按预期更改任何内容

这是 FHIR 的预期行为吗?在我的示例中,我只有一个媒体,但如果有 2 个,我将无法识别哪个媒体是哪个?

谢谢!

解决方法

  1. 您的媒体资源没有 ID。

“资源”:{ "resourceType": "媒体","id": "1234",...

  1. 媒体中的引用不适合您的应用程序。它不应该使用骨灰盒,而是对媒体资源的引用

“媒体”:[ { “关联”: { "reference": "Media\1234",“类型”:“媒体” } }]

,

使用 media.setId(IdType.newRandomUuid()); 不起作用。如果我将任何静态字符串作为参数传递,它会按预期工作。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...