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

View File

@ -113,7 +113,7 @@ public class ValueSetProcessBase {
return list; 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) { if (resource != null) {
StandardsStatus standardsStatus = ToolingExtensions.getStandardsStatus(resource); StandardsStatus standardsStatus = ToolingExtensions.getStandardsStatus(resource);
if (standardsStatus == StandardsStatus.DEPRECATED) { if (standardsStatus == StandardsStatus.DEPRECATED) {
@ -122,6 +122,11 @@ public class ValueSetProcessBase {
addToIssues(issues, makeStatusIssue(path, "withdrawn", I18nConstants.MSG_WITHDRAWN, resource)); addToIssues(issues, makeStatusIssue(path, "withdrawn", I18nConstants.MSG_WITHDRAWN, resource));
} else if (resource.getStatus() == PublicationStatus.RETIRED) { } else if (resource.getStatus() == PublicationStatus.RETIRED) {
addToIssues(issues, makeStatusIssue(path, "retired", I18nConstants.MSG_RETIRED, resource)); 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) { if (resource != null) {
StandardsStatus standardsStatus = ToolingExtensions.getStandardsStatus(resource); StandardsStatus standardsStatus = ToolingExtensions.getStandardsStatus(resource);
if (standardsStatus == StandardsStatus.DEPRECATED) { if (standardsStatus == StandardsStatus.DEPRECATED) {
@ -165,6 +170,15 @@ public class ValueSetProcessBase {
if (!params.hasParameterValue("warning-retired", resource.getVersionedUrl())) { if (!params.hasParameterValue("warning-retired", resource.getVersionedUrl())) {
params.addParameter("warning-retired", new UriType(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<>(); List<OperationOutcomeIssueComponent> issues = new ArrayList<>();
ValidationProcessInfo info = new ValidationProcessInfo(issues); ValidationProcessInfo info = new ValidationProcessInfo(issues);
VersionInfo vi = new VersionInfo(this); VersionInfo vi = new VersionInfo(this);
checkCanonical(issues, path, valueset); checkCanonical(issues, path, valueset, valueset);
String system = code.hasSystem() ? code.getSystem() : getValueSetSystemOrNull(); String system = code.hasSystem() ? code.getSystem() : getValueSetSystemOrNull();
if (options.getValueSetMode() != ValueSetMode.CHECK_MEMERSHIP_ONLY) { if (options.getValueSetMode() != ValueSetMode.CHECK_MEMERSHIP_ONLY) {
@ -412,7 +412,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
} }
} }
} else { } else {
checkCanonical(issues, path, cs); checkCanonical(issues, path, cs, valueset);
} }
if (cs != null && cs.hasSupplements()) { if (cs != null && cs.hasSupplements()) {
String msg = context.formatMessage(I18nConstants.CODESYSTEM_CS_NO_SUPPLEMENT, cs.getUrl()); String msg = context.formatMessage(I18nConstants.CODESYSTEM_CS_NO_SUPPLEMENT, cs.getUrl());
@ -975,7 +975,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
if (valueset == null) { if (valueset == null) {
return false; return false;
} }
checkCanonical(info.getIssues(), path, valueset); checkCanonical(info.getIssues(), path, valueset, valueset);
Boolean result = false; Boolean result = false;
VersionInfo vi = new VersionInfo(this); VersionInfo vi = new VersionInfo(this);
@ -1083,7 +1083,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
return null; return null;
} }
} else { } else {
checkCanonical(info.getIssues(), path, cs); checkCanonical(info.getIssues(), path, cs, valueset);
if (valueset.getCompose().hasInactive() && !valueset.getCompose().getInactive()) { if (valueset.getCompose().hasInactive() && !valueset.getCompose().getInactive()) {
if (CodeSystemUtilities.isInactive(cs, code)) { if (CodeSystemUtilities.isInactive(cs, code)) {
return false; return false;