From 86c36092888135f908c46444b5430d6abde67808 Mon Sep 17 00:00:00 2001 From: Lloyd McKenzie Date: Tue, 4 Jan 2022 21:46:57 -0700 Subject: [PATCH 1/3] Changes relevant to improving the rendering of artifact intros. Specifically: - ensure that when validating codes against value sets, the valid coding is actually returned - strip out the new extensions we add for FMM - improve the rendering of Quantity and Range. (The former was horrid and the latter wasn't as nice as it could be.) --- .../fhir/r5/conformance/ProfileUtilities.java | 2 ++ .../hl7/fhir/r5/renderers/DataRenderer.java | 32 +++++++++++-------- .../terminologies/ValueSetCheckerSimple.java | 8 +++-- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/ProfileUtilities.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/ProfileUtilities.java index 808f256b2..c73fdaf6f 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/ProfileUtilities.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/ProfileUtilities.java @@ -2087,6 +2087,8 @@ public class ProfileUtilities extends TranslatingUtilities { private void removeStatusExtensions(ElementDefinition outcome) { outcome.removeExtension(ToolingExtensions.EXT_FMM_LEVEL); + outcome.removeExtension(ToolingExtensions.EXT_FMM_SUPPORT); + outcome.removeExtension(ToolingExtensions.EXT_FMM_DERIVED); outcome.removeExtension(ToolingExtensions.EXT_STANDARDS_STATUS); outcome.removeExtension(ToolingExtensions.EXT_NORMATIVE_VERSION); outcome.removeExtension(ToolingExtensions.EXT_WORKGROUP); diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/DataRenderer.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/DataRenderer.java index 998205f4c..626de3b84 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/DataRenderer.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/DataRenderer.java @@ -1139,9 +1139,11 @@ public class DataRenderer extends Renderer { protected String displayQuantity(Quantity q) { StringBuilder s = new StringBuilder(); - s.append("(system = '").append(TerminologyRenderer.describeSystem(q.getSystem())) - .append("' code ").append(q.getCode()) - .append(" = '").append(lookupCode(q.getSystem(), null, q.getCode())).append("')"); + s.append(q.hasValue() ? q.getValue() : "?"); + if (q.hasUnit()) + s.append(" ").append(q.getUnit()); + else if (q.hasCode()) + s.append(" ").append(q.getCode()); return s.toString(); } @@ -1166,18 +1168,20 @@ public class DataRenderer extends Renderer { } public String displayRange(Range q) { + if (!q.hasLow() && !q.hasHigh()) + return "?"; + StringBuilder b = new StringBuilder(); - if (q.hasLow()) - b.append(q.getLow().getValue().toString()); - else - b.append("?"); - b.append("-"); - if (q.hasHigh()) - b.append(q.getHigh().getValue().toString()); - else - b.append("?"); - if (q.getLow().hasUnit()) - b.append(" "+q.getLow().getUnit()); + + boolean sameUnits = (q.getLow().hasUnit() && q.getHigh().hasUnit() && q.getLow().getUnit().equals(q.getHigh().getUnit())) + || (q.getLow().hasCode() && q.getHigh().hasCode() && q.getLow().getCode().equals(q.getHigh().getCode())); + String low = "?"; + if (q.hasLow() && q.getLow().hasValue()) + low = sameUnits ? q.getLow().getValue().toString() : displayQuantity(q.getLow()); + String high = displayQuantity(q.getHigh()); + if (high.isEmpty()) + high = "?"; + b.append(low).append("\u00A0 to \u00A0").append(high); return b.toString(); } diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/ValueSetCheckerSimple.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/ValueSetCheckerSimple.java index 8285a81ba..14b034793 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/ValueSetCheckerSimple.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/ValueSetCheckerSimple.java @@ -142,6 +142,7 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe } } } + Coding foundCoding = null; if (valueset != null && options.getValueSetMode() != ValueSetMode.NO_MEMBERSHIP_CHECK) { Boolean result = false; for (Coding c : code.getCoding()) { @@ -150,6 +151,7 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe result = null; } else if (ok) { result = true; + foundCoding = c; } } if (result == null) { @@ -162,8 +164,10 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe return new ValidationResult(IssueSeverity.ERROR, errors.toString()); } else if (warnings.size() > 0) { return new ValidationResult(IssueSeverity.WARNING, warnings.toString()); - } else { - return new ValidationResult(IssueSeverity.INFORMATION, null); + } else { + ConceptDefinitionComponent cd = new ConceptDefinitionComponent(foundCoding.getCode()); + cd.setDisplay(foundCoding.getDisplay()); + return new ValidationResult(foundCoding.getSystem(), cd); } } From d5ed9eefbd6872db55b3fce38b5ec5f5c8d5558f Mon Sep 17 00:00:00 2001 From: Lloyd McKenzie Date: Mon, 10 Jan 2022 12:41:54 -0700 Subject: [PATCH 2/3] Fixed spacing with non-breaking spaces issue --- .../src/main/java/org/hl7/fhir/r5/renderers/DataRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/DataRenderer.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/DataRenderer.java index 626de3b84..dd2ede1eb 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/DataRenderer.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/DataRenderer.java @@ -1181,7 +1181,7 @@ public class DataRenderer extends Renderer { String high = displayQuantity(q.getHigh()); if (high.isEmpty()) high = "?"; - b.append(low).append("\u00A0 to \u00A0").append(high); + b.append(low).append("\u00A0to\u00A0").append(high); return b.toString(); } From 3a98e0b5facef16084d1580f8c70f6ec9dbb75fd Mon Sep 17 00:00:00 2001 From: Lloyd McKenzie Date: Tue, 11 Jan 2022 08:24:33 -0700 Subject: [PATCH 3/3] Add code system if no unit and not UCUM. --- .../java/org/hl7/fhir/r5/renderers/DataRenderer.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/DataRenderer.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/DataRenderer.java index dd2ede1eb..db77f5ba3 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/DataRenderer.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/DataRenderer.java @@ -1160,8 +1160,13 @@ public class DataRenderer extends Renderer { } if (q.hasUnit()) x.tx(" "+q.getUnit()); - else if (q.hasCode()) - x.tx(" "+q.getCode()); + else if (q.hasCode() && q.hasSystem()) { + // if there's a code there *shall* be a system, so if we've got one and not the other, things are invalid and we won't bother trying to render + if (q.hasSystem() && q.getSystem().equals("http://unitsofmeasure.org")) + x.tx(" "+q.getCode()); + else + x.tx("(unit "+q.getCode()+" from "+q.getSystem()+")"); + } if (showCodeDetails && q.hasCode()) { x.span("background: LightGoldenRodYellow", null).tx(" (Details: "+TerminologyRenderer.describeSystem(q.getSystem())+" code "+q.getCode()+" = '"+lookupCode(q.getSystem(), null, q.getCode())+"')"); }