[GF#20482] FHIRPath conformsTo Validation of Warnings/Error handling

This commit is contained in:
Oliver Egger 2019-02-27 23:31:56 +01:00
parent 50d17096a1
commit d60d089c23
7 changed files with 94 additions and 17 deletions

View File

@ -2977,10 +2977,10 @@ public class VersionConvertor_40_50 {
return convertTime((org.hl7.fhir.r4.model.TimeType) src);
if (src instanceof org.hl7.fhir.r4.model.UnsignedIntType)
return convertUnsignedInt((org.hl7.fhir.r4.model.UnsignedIntType) src);
if (src instanceof org.hl7.fhir.r4.model.UriType)
return convertUri((org.hl7.fhir.r4.model.UriType) src);
if (src instanceof org.hl7.fhir.r4.model.UrlType)
return convertUrl((org.hl7.fhir.r4.model.UrlType) src);
if (src instanceof org.hl7.fhir.r4.model.UriType)
return convertUri((org.hl7.fhir.r4.model.UriType) src);
if (src instanceof org.hl7.fhir.r4.model.UuidType)
return convertUuid((org.hl7.fhir.r4.model.UuidType) src);
if (src instanceof org.hl7.fhir.r4.model.Extension)
@ -3103,10 +3103,10 @@ public class VersionConvertor_40_50 {
return convertTime((org.hl7.fhir.r5.model.TimeType) src);
if (src instanceof org.hl7.fhir.r5.model.UnsignedIntType)
return convertUnsignedInt((org.hl7.fhir.r5.model.UnsignedIntType) src);
if (src instanceof org.hl7.fhir.r5.model.UriType)
return convertUri((org.hl7.fhir.r5.model.UriType) src);
if (src instanceof org.hl7.fhir.r5.model.UrlType)
return convertUrl((org.hl7.fhir.r5.model.UrlType) src);
if (src instanceof org.hl7.fhir.r5.model.UriType)
return convertUri((org.hl7.fhir.r5.model.UriType) src);
if (src instanceof org.hl7.fhir.r5.model.UuidType)
return convertUuid((org.hl7.fhir.r5.model.UuidType) src);
if (src instanceof org.hl7.fhir.r5.model.Extension)

View File

@ -237,7 +237,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
throw new NotImplementedException("Not done yet (ValidatorHostServices.conformsToProfile), when item is element");
boolean ok = true;
for (ValidationMessage v : valerrors)
ok = ok && v.getLevel().isError();
ok = ok && !v.getLevel().isError();
return ok;
}

View File

@ -125,25 +125,24 @@ public class ValidationTestSuite implements IEvaluationContext, IValidatorResour
val.getContext().cacheResource(sd);
}
}
List<ValidationMessage> errors = new ArrayList<ValidationMessage>();
if (name.startsWith("Json."))
val.validate(null, errors, new FileInputStream(path), FhirFormat.JSON);
else
val.validate(null, errors, new FileInputStream(path), FhirFormat.XML);
checkOutcomes(errors, content);
if (content.has("profile")) {
List<ValidationMessage> errors = new ArrayList<ValidationMessage>();
List<ValidationMessage> errorsProfile = new ArrayList<ValidationMessage>();
JsonObject profile = content.getAsJsonObject("profile");
String filename = TestUtilities.resourceNameToFile("validation-examples", profile.get("source").getAsString());
String v = content.has("version") ? content.get("version").getAsString() : Constants.VERSION;
StructureDefinition sd = loadProfile(filename, v);
if (name.startsWith("Json."))
val.validate(null, errors, new FileInputStream(path), FhirFormat.JSON, sd);
val.validate(null, errorsProfile, new FileInputStream(path), FhirFormat.JSON, sd);
else
val.validate(null, errors, new FileInputStream(path), FhirFormat.XML, sd);
checkOutcomes(errors, profile);
} else {
List<ValidationMessage> errors = new ArrayList<ValidationMessage>();
if (name.startsWith("Json."))
val.validate(null, errors, new FileInputStream(path), FhirFormat.JSON);
else
val.validate(null, errors, new FileInputStream(path), FhirFormat.XML);
checkOutcomes(errors, content);
}
val.validate(null, errorsProfile, new FileInputStream(path), FhirFormat.XML, sd);
checkOutcomes(errorsProfile, profile);
}
}
public StructureDefinition loadProfile(String filename, String v)

View File

@ -388,6 +388,28 @@
"errorCount": 0,
"warningCount": 1
},
"patient-conform-profile.xml" : {
"errorCount": 0,
"warningCount": 1
},
"patient-bad-gender.xml" : {
"errorCount": 1,
"warningCount": 0,
"profile" : {
"source" : "patient-conform-profile.xml",
"errorCount": 2,
"warningCount": 0
}
},
"patient-warning-maritalstatus.xml" : {
"errorCount": 0,
"warningCount": 1,
"profile" : {
"source" : "patient-conform-profile.xml",
"errorCount": 0,
"warningCount": 1
}
},
"document-good.xml" : {
"errorCount": 0,
"profiles" : ["document-section-library.xml"],

View File

@ -0,0 +1,11 @@
<Patient xmlns="http://hl7.org/fhir">
<id value="patient-error-gender"/>
<text>
<status value="generated"/>
<div xmlns="http://www.w3.org/1999/xhtml">
*FAILURE* validating ./examplesNonValid/patient/patient-error-gender.xml: error:1 warn:1 info:0
Error @ Patient.gender (line 3, col34) : The value provided ('asdfafafafd') is not in the value set http://hl7.org/fhir/ValueSet/administrative-gender|4.0.0 (http://hl7.org/fhir/ValueSet/administrative-gender, and a code is required from this value set) (error message = Unknown Code org.hl7.fhir.r4.model.Coding@5ee34b1b in http://hl7.org/fhir/administrative-gender)
</div>
</text>
<gender value="asdfafafafd"/>
</Patient>

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<StructureDefinition xmlns="http://hl7.org/fhir">
<id value="patient-conform-profile" />
<url
value="http://hl7.org/fhir/StructureDefinition/patient-conform-profile" />
<name value="PatientConformProfile" />
<status value="draft" />
<description
value="Test profile to test if a patient with warning or errors in valdidation is conformant to a profile" />
<kind value="resource" />
<abstract value="false" />
<type value="Patient" />
<baseDefinition
value="http://hl7.org/fhir/StructureDefinition/Patient" />
<derivation value="constraint" />
<differential>
<element id="Patient">
<path value="Patient" />
<constraint>
<key value="conformsToCheck" />
<severity value="error" />
<human value="conformsToCheck" />
<expression
value="conformsTo('http://hl7.org/fhir/StructureDefinition/Patient')" />
</constraint>
</element>
</differential>
</StructureDefinition>

View File

@ -0,0 +1,17 @@
<Patient xmlns="http://hl7.org/fhir">
<id value="patient-warning-maritalstatus"/>
<text>
<status value="generated"/>
<div xmlns="http://www.w3.org/1999/xhtml">
Success...validating ./examplesNonValid/patient/patient-warning-maritalstatus.xml: error:0 warn:1 info:0
Warning @ Patient.maritalStatus (line 9, col20) : None of the codes provided are in the value set http://hl7.org/fhir/ValueSet/marital-status (http://hl7.org/fhir/ValueSet/marital-status, and a code should come from this value set unless it has no suitable code) (codes = http://fhir.ch/whateversysstem#adfasfdf)
</div>
</text>
<maritalStatus>
<coding>
<system value="http://fhir.ch/whateversysstem"/>
<code value="adfasfdf"/>
<display value="I dont know what this value means"/>
</coding>
</maritalStatus>
</Patient>