Improved error message when code not in value set

This commit is contained in:
Grahame Grieve 2023-04-28 07:36:00 +10:00
parent e0c1273346
commit 9d53b738df
3 changed files with 16 additions and 11 deletions

View File

@ -1165,13 +1165,13 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte
if (p.getName().equals("result")) { if (p.getName().equals("result")) {
ok = ((BooleanType) p.getValue()).getValue().booleanValue(); ok = ((BooleanType) p.getValue()).getValue().booleanValue();
} else if (p.getName().equals("message")) { } else if (p.getName().equals("message")) {
message = ((StringType) p.getValue()).getValue(); message = p.getValue().primitiveValue();
} else if (p.getName().equals("display")) { } else if (p.getName().equals("display")) {
display = ((StringType) p.getValue()).getValue(); display = p.getValue().primitiveValue();
} else if (p.getName().equals("system")) { } else if (p.getName().equals("system")) {
system = ((StringType) p.getValue()).getValue(); system = p.getValue().primitiveValue();
} else if (p.getName().equals("code")) { } else if (p.getName().equals("code")) {
code = ((StringType) p.getValue()).getValue(); code = p.getValue().primitiveValue();
} else if (p.getName().equals("cause")) { } else if (p.getName().equals("cause")) {
try { try {
IssueType it = IssueType.fromCode(((StringType) p.getValue()).getValue()); IssueType it = IssueType.fromCode(((StringType) p.getValue()).getValue());

View File

@ -144,7 +144,9 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe
} }
if (valueset != null && options.getValueSetMode() != ValueSetMode.NO_MEMBERSHIP_CHECK) { if (valueset != null && options.getValueSetMode() != ValueSetMode.NO_MEMBERSHIP_CHECK) {
Boolean result = false; Boolean result = false;
CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder(",", " and ");
for (Coding c : code.getCoding()) { for (Coding c : code.getCoding()) {
b.append(c.toString());
Boolean ok = codeInValueSet(c.getSystem(), c.getCode(), warnings); Boolean ok = codeInValueSet(c.getSystem(), c.getCode(), warnings);
if (ok == null && result == false) { if (ok == null && result == false) {
result = null; result = null;
@ -153,9 +155,9 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe
} }
} }
if (result == null) { if (result == null) {
warnings.add(0, context.formatMessage(I18nConstants.UNABLE_TO_CHECK_IF_THE_PROVIDED_CODES_ARE_IN_THE_VALUE_SET_, valueset.getUrl())); warnings.add(0, context.formatMessage(I18nConstants.UNABLE_TO_CHECK_IF_THE_PROVIDED_CODES_ARE_IN_THE_VALUE_SET_, valueset.getUrl(), b.toString()));
} else if (!result) { } else if (!result) {
errors.add(0, context.formatMessagePlural(code.getCoding().size(), I18nConstants.NONE_OF_THE_PROVIDED_CODES_ARE_IN_THE_VALUE_SET_, valueset.getUrl())); errors.add(0, context.formatMessagePlural(code.getCoding().size(), I18nConstants.NONE_OF_THE_PROVIDED_CODES_ARE_IN_THE_VALUE_SET_, valueset.getUrl(), b.toString()));
} }
} }
if (errors.size() > 0) { if (errors.size() > 0) {

View File

@ -208,7 +208,10 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe
Coding foundCoding = null; Coding foundCoding = null;
if (valueset != null && options.getValueSetMode() != ValueSetMode.NO_MEMBERSHIP_CHECK) { if (valueset != null && options.getValueSetMode() != ValueSetMode.NO_MEMBERSHIP_CHECK) {
Boolean result = false; Boolean result = false;
CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder(",", " and ");
for (Coding c : code.getCoding()) { for (Coding c : code.getCoding()) {
b.append(c.toString());
Boolean ok = codeInValueSet(c.getSystem(), c.getVersion(), c.getCode(), info); Boolean ok = codeInValueSet(c.getSystem(), c.getVersion(), c.getCode(), info);
if (ok == null && result == false) { if (ok == null && result == false) {
result = null; result = null;
@ -218,10 +221,10 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe
} }
} }
if (result == null) { if (result == null) {
String msg = context.formatMessage(I18nConstants.UNABLE_TO_CHECK_IF_THE_PROVIDED_CODES_ARE_IN_THE_VALUE_SET_, valueset.getUrl()); String msg = context.formatMessage(I18nConstants.UNABLE_TO_CHECK_IF_THE_PROVIDED_CODES_ARE_IN_THE_VALUE_SET_, valueset.getUrl(), b.toString());
info.getIssues().addAll(makeIssue(IssueSeverity.WARNING, IssueType.INVALID, path, msg)); info.getIssues().addAll(makeIssue(IssueSeverity.WARNING, IssueType.INVALID, path, msg));
} else if (!result) { } else if (!result) {
String msg = context.formatMessagePlural(code.getCoding().size(), I18nConstants.NONE_OF_THE_PROVIDED_CODES_ARE_IN_THE_VALUE_SET_, valueset.getUrl()); String msg = context.formatMessagePlural(code.getCoding().size(), I18nConstants.NONE_OF_THE_PROVIDED_CODES_ARE_IN_THE_VALUE_SET_, valueset.getUrl(), b.toString());
info.getIssues().addAll(makeIssue(IssueSeverity.ERROR, IssueType.INVALID, path, msg)); info.getIssues().addAll(makeIssue(IssueSeverity.ERROR, IssueType.INVALID, path, msg));
} }
} }
@ -372,7 +375,7 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe
if (valueset == null) { if (valueset == null) {
throw new VSCheckerException(warningMessage, issues); throw new VSCheckerException(warningMessage, issues);
} else { } else {
String msg = context.formatMessagePlural(1, I18nConstants.NONE_OF_THE_PROVIDED_CODES_ARE_IN_THE_VALUE_SET_, valueset.getUrl()); String msg = context.formatMessagePlural(1, I18nConstants.NONE_OF_THE_PROVIDED_CODES_ARE_IN_THE_VALUE_SET_, valueset.getUrl(), code.toString());
issues.addAll(makeIssue(IssueSeverity.ERROR, IssueType.INVALID, path, msg)); issues.addAll(makeIssue(IssueSeverity.ERROR, IssueType.INVALID, path, msg));
throw new VSCheckerException(warningMessage+"; "+msg, issues); throw new VSCheckerException(warningMessage+"; "+msg, issues);
} }
@ -440,7 +443,7 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe
res.setMessage("Not in value set "+valueset.getUrl()+": "+info.summary()).setSeverity(IssueSeverity.ERROR); res.setMessage("Not in value set "+valueset.getUrl()+": "+info.summary()).setSeverity(IssueSeverity.ERROR);
res.getIssues().addAll(makeIssue(IssueSeverity.ERROR, IssueType.INVALID, path, res.getMessage())); res.getIssues().addAll(makeIssue(IssueSeverity.ERROR, IssueType.INVALID, path, res.getMessage()));
} else { } else {
String msg = context.formatMessagePlural(1, I18nConstants.NONE_OF_THE_PROVIDED_CODES_ARE_IN_THE_VALUE_SET_, valueset.getUrl()); String msg = context.formatMessagePlural(1, I18nConstants.NONE_OF_THE_PROVIDED_CODES_ARE_IN_THE_VALUE_SET_, valueset.getUrl(), code.toString());
res.setMessage(msg).setSeverity(IssueSeverity.ERROR); res.setMessage(msg).setSeverity(IssueSeverity.ERROR);
res.getIssues().addAll(makeIssue(IssueSeverity.ERROR, IssueType.INVALID, path, msg)); res.getIssues().addAll(makeIssue(IssueSeverity.ERROR, IssueType.INVALID, path, msg));
res.setDefinition(null); res.setDefinition(null);
@ -459,7 +462,7 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe
} }
} }
} else if ((res != null && !res.isOk())) { } else if ((res != null && !res.isOk())) {
String msg = context.formatMessagePlural(1, I18nConstants.NONE_OF_THE_PROVIDED_CODES_ARE_IN_THE_VALUE_SET_, valueset.getUrl()); String msg = context.formatMessagePlural(1, I18nConstants.NONE_OF_THE_PROVIDED_CODES_ARE_IN_THE_VALUE_SET_, valueset.getUrl(), code.toString());
res.setMessage(res.getMessage()+"; "+msg); res.setMessage(res.getMessage()+"; "+msg);
res.getIssues().addAll(makeIssue(IssueSeverity.ERROR, IssueType.INVALID, path, msg)); res.getIssues().addAll(makeIssue(IssueSeverity.ERROR, IssueType.INVALID, path, msg));
} }