Check experimental / draft in mini terminology service

This commit is contained in:
Grahame Grieve 2023-08-11 12:25:37 +10:00
parent 1208d691b2
commit b7fd419509
3 changed files with 25 additions and 11 deletions

View File

@ -286,7 +286,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
private boolean filterContainsCode(List<ValueSet> filters, String system, String code, ValueSetExpansionComponent exp) {
for (ValueSet vse : filters) {
checkCanonical(exp, vse);
checkCanonical(exp, vse, focus);
if (expansionContainsCode(vse.getExpansion().getContains(), system, code))
return true;
}
@ -503,7 +503,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
focus.setExpansion(new ValueSet.ValueSetExpansionComponent());
focus.getExpansion().setTimestampElement(DateTimeType.now());
focus.getExpansion().setIdentifier(Factory.createUUID());
checkCanonical(focus.getExpansion(), focus);
checkCanonical(focus.getExpansion(), focus, focus);
for (ParametersParameterComponent p : expParams.getParameter()) {
if (Utilities.existsInList(p.getName(), "includeDesignations", "excludeNested", "activeOnly", "offset", "count")) {
focus.getExpansion().addParameter().setName(p.getName()).setValue(p.getValue());
@ -643,7 +643,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
throw fail("Unable to find imported value set " + value);
}
}
checkCanonical(exp, vs);
checkCanonical(exp, vs, focus);
if (noInactive) {
expParams = expParams.copy();
expParams.addParameter("activeOnly", true);
@ -736,7 +736,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
if (imports.isEmpty()) // though this is not supposed to be the case
return;
ValueSet base = imports.get(0);
checkCanonical(exp, base);
checkCanonical(exp, base, focus);
imports.remove(0);
base.checkNoModifiers("Imported ValueSet", "expanding");
copyImportContains(base.getExpansion().getContains(), null, expParams, imports, noInactive, base.getExpansion().getProperty(), base, exp);
@ -798,7 +798,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
else
throw failTSE("Unable to find code system " + inc.getSystem().toString());
}
checkCanonical(exp, cs);
checkCanonical(exp, cs, focus);
cs.checkNoModifiers("Code System", "expanding");
if (cs.getContent() != CodeSystemContentMode.COMPLETE && cs.getContent() != CodeSystemContentMode.FRAGMENT)
throw failTSE("Code system " + inc.getSystem().toString() + " is incomplete");

View File

@ -113,7 +113,7 @@ public class ValueSetProcessBase {
return list;
}
public void checkCanonical(List<OperationOutcomeIssueComponent> issues, String path, CanonicalResource resource) {
public void checkCanonical(List<OperationOutcomeIssueComponent> issues, String path, CanonicalResource resource, CanonicalResource source) {
if (resource != null) {
StandardsStatus standardsStatus = ToolingExtensions.getStandardsStatus(resource);
if (standardsStatus == StandardsStatus.DEPRECATED) {
@ -122,6 +122,11 @@ public class ValueSetProcessBase {
addToIssues(issues, makeStatusIssue(path, "withdrawn", I18nConstants.MSG_WITHDRAWN, resource));
} else if (resource.getStatus() == PublicationStatus.RETIRED) {
addToIssues(issues, makeStatusIssue(path, "retired", I18nConstants.MSG_RETIRED, resource));
} else if (resource.getExperimental() && !source.getExperimental()) {
addToIssues(issues, makeStatusIssue(path, "experimental", I18nConstants.MSG_EXPERIMENTAL, resource));
} else if ((resource.getStatus() == PublicationStatus.DRAFT || standardsStatus == StandardsStatus.DRAFT)
&& !(source.getStatus() == PublicationStatus.DRAFT || ToolingExtensions.getStandardsStatus(source) == StandardsStatus.DRAFT)) {
addToIssues(issues, makeStatusIssue(path, "draft", I18nConstants.MSG_DRAFT, resource));
}
}
}
@ -150,7 +155,7 @@ public class ValueSetProcessBase {
}
}
public void checkCanonical(ValueSetExpansionComponent params, CanonicalResource resource) {
public void checkCanonical(ValueSetExpansionComponent params, CanonicalResource resource, ValueSet source) {
if (resource != null) {
StandardsStatus standardsStatus = ToolingExtensions.getStandardsStatus(resource);
if (standardsStatus == StandardsStatus.DEPRECATED) {
@ -165,6 +170,15 @@ public class ValueSetProcessBase {
if (!params.hasParameterValue("warning-retired", resource.getVersionedUrl())) {
params.addParameter("warning-retired", new UriType(resource.getVersionedUrl()));
}
} else if (resource.getExperimental() && !source.getExperimental()) {
if (!params.hasParameterValue("warning-experimental", resource.getVersionedUrl())) {
params.addParameter("warning-experimental", new UriType(resource.getVersionedUrl()));
}
} else if ((resource.getStatus() == PublicationStatus.DRAFT || standardsStatus == StandardsStatus.DRAFT)
&& !(source.getStatus() == PublicationStatus.DRAFT || ToolingExtensions.getStandardsStatus(source) == StandardsStatus.DRAFT)) {
if (!params.hasParameterValue("warning-draft", resource.getVersionedUrl())) {
params.addParameter("warning-draft", new UriType(resource.getVersionedUrl()));
}
}
}
}

View File

@ -351,7 +351,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
List<OperationOutcomeIssueComponent> issues = new ArrayList<>();
ValidationProcessInfo info = new ValidationProcessInfo(issues);
VersionInfo vi = new VersionInfo(this);
checkCanonical(issues, path, valueset);
checkCanonical(issues, path, valueset, valueset);
String system = code.hasSystem() ? code.getSystem() : getValueSetSystemOrNull();
if (options.getValueSetMode() != ValueSetMode.CHECK_MEMERSHIP_ONLY) {
@ -412,7 +412,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
}
}
} else {
checkCanonical(issues, path, cs);
checkCanonical(issues, path, cs, valueset);
}
if (cs != null && cs.hasSupplements()) {
String msg = context.formatMessage(I18nConstants.CODESYSTEM_CS_NO_SUPPLEMENT, cs.getUrl());
@ -975,7 +975,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
if (valueset == null) {
return false;
}
checkCanonical(info.getIssues(), path, valueset);
checkCanonical(info.getIssues(), path, valueset, valueset);
Boolean result = false;
VersionInfo vi = new VersionInfo(this);
@ -1083,7 +1083,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
return null;
}
} else {
checkCanonical(info.getIssues(), path, cs);
checkCanonical(info.getIssues(), path, cs, valueset);
if (valueset.getCompose().hasInactive() && !valueset.getCompose().getInactive()) {
if (CodeSystemUtilities.isInactive(cs, code)) {
return false;