Skip to content

Commit 197c371

Browse files
committed
FHIR validator workaround for existing MII plugins
1 parent dd3f656 commit 197c371

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

dsf-fhir/dsf-fhir-validation/src/main/java/dev/dsf/fhir/validation/ResourceValidatorImpl.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.hl7.fhir.common.hapi.validation.validator.WorkerContextValidationSupportAdapter;
2828
import org.hl7.fhir.exceptions.FHIRException;
2929
import org.hl7.fhir.instance.model.api.IBaseResource;
30+
import org.hl7.fhir.r4.model.Bundle;
3031
import org.hl7.fhir.r4.model.Resource;
3132
import org.hl7.fhir.r5.model.CanonicalResource;
3233
import org.hl7.fhir.r5.model.CanonicalType;
@@ -196,10 +197,13 @@ public ValidationResult validate(Resource resource)
196197
{
197198
ValidationResult result = validator.validateWithResult(resource);
198199

199-
// TODO: remove after HAPI validator is fixed: https://github.com/hapifhir/org.hl7.fhir.core/issues/193
200+
// TODO remove after HAPI validator is fixed: https://github.com/hapifhir/org.hl7.fhir.core/issues/193
200201
adaptDefaultSliceValidationErrorToWarning(result);
201202
adaptQuestionnaireTextNotSameValidationErrorToWarning(result);
202203

204+
// TODO remove if MII plugins with error no longer in circulation
205+
adaptMiiPluginsBundleFullUrlUuidNullErrorToWarning(resource, result);
206+
203207
return new ValidationResult(context,
204208
result.getMessages().stream().filter(m -> !(ResultSeverityEnum.WARNING.equals(m.getSeverity())
205209
&& m.getMessage().startsWith(MISSING_NARRATIVE_MESSAGE_START))).toList());
@@ -220,4 +224,18 @@ private void adaptQuestionnaireTextNotSameValidationErrorToWarning(ValidationRes
220224
.startsWith("If text exists, it must match the questionnaire definition for linkId"))
221225
.forEach(m -> m.setSeverity(ResultSeverityEnum.WARNING));
222226
}
227+
228+
private void adaptMiiPluginsBundleFullUrlUuidNullErrorToWarning(Resource resource, ValidationResult result)
229+
{
230+
if (resource instanceof Bundle b && b.hasIdentifier()
231+
&& "http://medizininformatik-initiative.de/fhir/CodeSystem/cryptography"
232+
.equals(b.getIdentifier().getSystem())
233+
&& "public-key".equals(b.getIdentifier().getValue()))
234+
{
235+
result.getMessages().stream()
236+
.filter(m -> ResultSeverityEnum.ERROR.equals(m.getSeverity())
237+
&& "UUIDs must be valid and lowercase (null)".equals(m.getMessage()))
238+
.forEach(m -> m.setSeverity(ResultSeverityEnum.WARNING));
239+
}
240+
}
223241
}

dsf-fhir/dsf-fhir-validation/src/test/java/dev/dsf/fhir/profiles/BundleProfileTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,13 @@
1616
package dev.dsf.fhir.profiles;
1717

1818
import java.util.List;
19+
import java.util.UUID;
1920

21+
import org.hl7.fhir.r4.model.Binary;
2022
import org.hl7.fhir.r4.model.Bundle;
2123
import org.hl7.fhir.r4.model.Bundle.BundleType;
24+
import org.hl7.fhir.r4.model.DocumentReference;
25+
import org.hl7.fhir.r4.model.Enumerations.DocumentReferenceStatus;
2226
import org.junit.ClassRule;
2327
import org.junit.Test;
2428

@@ -54,4 +58,23 @@ public void runMetaTagTests() throws Exception
5458
{
5559
doRunMetaTagTests(resourceValidator);
5660
}
61+
62+
@Test
63+
public void testBundleWithUrnUuidNull() throws Exception
64+
{
65+
Binary binary = new Binary().setContentType("text/plain");
66+
67+
String binaryUuid = "urn:uuid:" + UUID.randomUUID().toString();
68+
69+
DocumentReference documentReference = new DocumentReference().setStatus(DocumentReferenceStatus.CURRENT);
70+
documentReference.addContent().getAttachment().setContentType("text/plain").setUrl(binaryUuid);
71+
72+
Bundle bundle = new Bundle().setType(BundleType.COLLECTION);
73+
bundle.getIdentifier().setSystem("http://medizininformatik-initiative.de/fhir/CodeSystem/cryptography")
74+
.setValue("public-key");
75+
bundle.addEntry().setResource(documentReference).setFullUrl("urn:uuid:null");
76+
bundle.addEntry().setResource(binary).setFullUrl(binaryUuid);
77+
78+
testValid(resourceValidator, bundle);
79+
}
5780
}

0 commit comments

Comments
 (0)