add test for multiple discriminators, and fix validator

This commit is contained in:
Grahame Grieve 2019-03-05 16:59:04 +11:00
parent 9b84f331f2
commit 5653da8a27
5 changed files with 8796 additions and 3 deletions

View File

@ -1161,5 +1161,9 @@ public class Utilities {
return keys.toString();
}
public static boolean isValidId(String id) {
return id.matches("[A-Za-z0-9\\-\\.]{1,64}");
}
}

View File

@ -2537,9 +2537,12 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
long t = System.nanoTime();
// GG: this approach is flawed because it treats discriminators individually rather than collectively
StringBuilder expression = new StringBuilder("true");
boolean anyFound = false;
Set<String> discriminators = new HashSet<>();
for (ElementDefinitionSlicingDiscriminatorComponent s : slicer.getSlicing().getDiscriminator()) {
String discriminator = s.getPath();
discriminators.add(discriminator);
List<ElementDefinition> criteriaElements = getCriteriaForDiscriminator(path, ed, discriminator, profile, s.getType() == DiscriminatorType.PROFILE);
boolean found = false;
for (ElementDefinition criteriaElement : criteriaElements) {
@ -2592,8 +2595,14 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
if (found)
break;
}
if (!found)
throw new DefinitionException("Could not match discriminator (" + discriminator + ") for slice " + ed.getId() + " in profile " + profile.getUrl() + " - does not have fixed value, binding or existence assertions");
if (found)
anyFound = true;
}
if (!anyFound) {
if (slicer.getSlicing().getDiscriminator().size() > 1)
throw new DefinitionException("Could not match any discriminators (" + discriminators + ") for slice " + ed.getId() + " in profile " + profile.getUrl() + " - does not have fixed value, binding or existence assertions for any of the discriminators");
else
throw new DefinitionException("Could not match discriminator (" + discriminators + ") for slice " + ed.getId() + " in profile " + profile.getUrl() + " - does not have fixed value, binding or existence assertions");
}
try {

View File

@ -132,6 +132,14 @@
"patient-lang3.json" : {
"errorCount": 0,
"warningCount": 1
},
"patient-au-5.json" : {
"errorCount": 0,
"warningCount": 0,
"profile" : {
"source" : "profile-patient-au.xml",
"errorCount": 0
}
}
},
"Xml": {

View File

@ -0,0 +1,70 @@
{
"resourceType" : "Patient",
"id" : "au-5",
"text" : {
"status" : "generated",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p><b>Generated Narrative with Details</b></p><p><b>id</b>: example5</p><p><b>meta</b>: </p><p><b>identifier</b>: Medicare Number = 22968184811</p><p><b>name</b>: Sarah Simmons </p><p><b>telecom</b>: ph: (03) 4455 6677</p><p><b>gender</b>: female</p><p><b>birthDate</b>: Sep 7, 1977</p><p><b>address</b>: 55 Sarah Street Strahan TAS 7468 AU </p><p><b>generalPractitioner</b>: <a href=\"Practitioner-example3.html\">Generated Summary: id: example3; HPI-I = 8003611234567893; Francis Fernando </a></p><p><b>managingOrganization</b>: <a href=\"Organization-example3.html\">Generated Summary: id: example3; ABN = 51824754455; <span title=\"Codes: {http://hl7.org/fhir/organization-type prov}\">Healthcare Provider</span>; name: Devonport Family Medicine Clinic; reception@example.dfmc.com.au(WORK), fax: (03) 8543 5557(WORK), ph: (03) 8543 5556(WORK)</a></p><h3>Links</h3><table class=\"grid\"><tr><td>-</td><td><b>Other</b></td><td><b>Type</b></td></tr><tr><td>*</td><td><a href=\"RelatedPerson-example2.html\">Generated Summary: id: example2; Medicare Number = 22968184811; <span title=\"Codes: {http://hl7.org/fhir/v3/RoleCode MTH}\">mother</span>; Sarah Simmons ; ssimmons@example.amail.com.au(HOME), ph: (03) 4455 6677(HOME); gender: female; birthDate: Sep 7, 1977</a></td><td>seealso</td></tr></table></div>"
},
"identifier" : [
{
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/v2-0203",
"code" : "MC",
"display" : "Patient's Medicare number"
}
],
"text" : "Medicare Number"
},
"system" : "http://ns.electronichealth.net.au/id/medicare-number",
"value" : "22968184811",
"period" : {
"end" : "2022-12"
}
}
],
"name" : [
{
"family" : "Simmons",
"given" : [
"Sarah"
]
}
],
"telecom" : [
{
"system" : "phone",
"value" : "(03) 4455 6677"
}
],
"gender" : "female",
"birthDate" : "1977-09-07",
"address" : [
{
"line" : [
"55 Sarah Street"
],
"city" : "Strahan",
"state" : "TAS",
"postalCode" : "7468",
"country" : "AU"
}
],
"generalPractitioner" : [
{
"reference" : "Practitioner/example3"
}
],
"managingOrganization" : {
"reference" : "Organization/example3"
},
"link" : [
{
"other" : {
"reference" : "RelatedPerson/example2"
},
"type" : "seealso"
}
]
}