From 4ccaae1571e14f61c8b5955cf2160e47a0736a94 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Tue, 7 Jan 2025 14:09:52 +1100 Subject: [PATCH] Lookup compliesWithProfile target from link-only dependencies --- .../StructureDefinitionRenderer.java | 17 ++++++++----- .../r5/renderers/utils/RenderingContext.java | 25 +++++++++++++++++++ .../utilities/i18n/RenderingI18nContext.java | 17 +++++++++++++ .../resources/rendering-phrases.properties | 22 ++++++++++++++++ .../fhir/validation/cli/model/CliContext.java | 24 ++++++++++++++++-- 5 files changed, 97 insertions(+), 8 deletions(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/StructureDefinitionRenderer.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/StructureDefinitionRenderer.java index f273cfe52..76a69e7f0 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/StructureDefinitionRenderer.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/StructureDefinitionRenderer.java @@ -126,7 +126,7 @@ public class StructureDefinitionRenderer extends ResourceRenderer { StructureDefinition sd = (StructureDefinition) r.getBase(); genSummaryTable(status, x, sd); if (context.getStructureMode() == StructureDefinitionRendererMode.DATA_DICT) { - renderDict(status, sd, sd.getDifferential().getElement(), x.table("dict"), false, GEN_MODE_DIFF, "", r); + renderDict(status, sd, sd.getDifferential().getElement(), x.table("dict", false), false, GEN_MODE_DIFF, "", r); } else { x.addChildNode(generateTable(status, context.getDefinitionsTarget(), sd, true, context.getDestDir(), false, sd.getId(), false, context.getLink(KnownLinkType.SPEC), "", sd.getKind() == StructureDefinitionKind.LOGICAL, false, null, false, context.withUniqueLocalPrefix(null), "r", r)); @@ -1851,7 +1851,7 @@ public class StructureDefinitionRenderer extends ResourceRenderer { } } - private void addCanonicalListExt(HierarchicalTableGenerator gen, Cell c, List list, String start, boolean bold) { + private void addCanonicalListExt(HierarchicalTableGenerator gen, Cell c, List list, String start, boolean bold) throws IOException { List clist = new ArrayList<>(); for (Extension ext : list) { if (ext.hasValueCanonicalType()) { @@ -1861,7 +1861,7 @@ public class StructureDefinitionRenderer extends ResourceRenderer { addCanonicalList(gen, c, clist, start, bold); } - private void addCanonicalList(HierarchicalTableGenerator gen, Cell c, List list, String start, boolean bold) { + private void addCanonicalList(HierarchicalTableGenerator gen, Cell c, List list, String start, boolean bold) throws IOException { if (!list.isEmpty()) { if (!c.getPieces().isEmpty()) { c.addPiece(gen.new Piece("br")); } @@ -1880,6 +1880,9 @@ public class StructureDefinitionRenderer extends ResourceRenderer { } String iu = ct.primitiveValue(); StructureDefinition sd = context.getContext().fetchResource(StructureDefinition.class, iu); + if (sd == null) { + sd = context.findLinkableResource(StructureDefinition.class, iu); + } if (sd == null) { p = gen.new Piece(null, iu, null).addStyle("font-weight:bold"); c.addPiece(p); @@ -1896,7 +1899,9 @@ public class StructureDefinitionRenderer extends ResourceRenderer { c.addPiece(p); } } - if (bold) p.addStyle("font-weight:bold"); + if (bold) { + p.addStyle("font-weight:bold"); + } } } } @@ -4146,7 +4151,7 @@ public class StructureDefinitionRenderer extends ResourceRenderer { } } if (obr.hasObligations()) { - XhtmlNode tbl = ret.table("grid"); + XhtmlNode tbl = ret.table("grid", false); obr.renderTable(status, res, tbl.getChildNodes(), true, defPath, anchorPrefix, inScopeElements); if (tbl.isEmpty()) { ret.remove(tbl); @@ -4719,7 +4724,7 @@ public class StructureDefinitionRenderer extends ResourceRenderer { } if (abr.hasBindings()) { - var tbl = x.table("grid"); + var tbl = x.table("grid", false); abr.render(tbl.getChildNodes(), true); } return x; diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/utils/RenderingContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/utils/RenderingContext.java index de7cc58fc..d6dbddcf3 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/utils/RenderingContext.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/utils/RenderingContext.java @@ -24,7 +24,9 @@ import org.hl7.fhir.r5.model.Base; import org.hl7.fhir.r5.model.DomainResource; import org.hl7.fhir.r5.model.Enumeration; import org.hl7.fhir.r5.model.PrimitiveType; +import org.hl7.fhir.r5.model.Resource; import org.hl7.fhir.r5.model.StringType; +import org.hl7.fhir.r5.renderers.utils.RenderingContext.IResourceLinkResolver; import org.hl7.fhir.r5.renderers.utils.Resolver.IReferenceResolver; import org.hl7.fhir.r5.terminologies.utilities.ValidationResult; import org.hl7.fhir.r5.utils.ToolingExtensions; @@ -72,6 +74,10 @@ import org.hl7.fhir.utilities.validation.ValidationOptions; */ public class RenderingContext extends RenderingI18nContext { + public interface IResourceLinkResolver { + public T findLinkableResource(Class class_, String uri) throws IOException; + } + public static class RenderingContextLangs { private RenderingContext defLangRC; @@ -297,6 +303,7 @@ public class RenderingContext extends RenderingI18nContext { private String uniqueLocalPrefix; private Set anchors = new HashSet<>(); private boolean unknownLocalReferencesNotLinks; + private IResourceLinkResolver resolveLinkResolver; /** * @@ -366,6 +373,7 @@ public class RenderingContext extends RenderingI18nContext { res.anchors = anchors; } res.unknownLocalReferencesNotLinks = unknownLocalReferencesNotLinks; + res.resolveLinkResolver = resolveLinkResolver; return res; } @@ -1058,4 +1066,21 @@ public class RenderingContext extends RenderingI18nContext { public void setUnknownLocalReferencesNotLinks(boolean unknownLocalReferencesNotLinks) { this.unknownLocalReferencesNotLinks = unknownLocalReferencesNotLinks; } + + public T findLinkableResource(Class class_, String uri) throws IOException { + if (resolveLinkResolver == null) { + return null; + } else { + return resolveLinkResolver.findLinkableResource(class_, uri); + } + } + + public IResourceLinkResolver getResolveLinkResolver() { + return resolveLinkResolver; + } + + public void setResolveLinkResolver(IResourceLinkResolver resolveLinkResolver) { + this.resolveLinkResolver = resolveLinkResolver; + } + } \ No newline at end of file diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/RenderingI18nContext.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/RenderingI18nContext.java index 4b054001d..8d6c27d38 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/RenderingI18nContext.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/RenderingI18nContext.java @@ -906,6 +906,23 @@ public class RenderingI18nContext extends I18nBase { public static final String VALUE_SET_USED_ELSEWHERE = "VALUE_SET_USED_ELSEWHERE"; public static final String VALUE_SET_WHERE = "VALUE_SET_WHERE"; public static final String VALUE_SET_WHERE_CODES = "VALUE_SET_WHERE_CODES"; + public static final String VALUE_SET_AR = "VALUE_SET_AR"; + public static final String VALUE_SET_AT = "VALUE_SET_AT"; + public static final String VALUE_SET_BE = "VALUE_SET_BE"; + public static final String VALUE_SET_CA_EN = "VALUE_SET_CA_EN"; + public static final String VALUE_SET_CA_FR = "VALUE_SET_CA_FR"; + public static final String VALUE_SET_EE = "VALUE_SET_EE"; + public static final String VALUE_SET_FI = "VALUE_SET_FI"; + public static final String VALUE_SET_DE = "VALUE_SET_DE"; + public static final String VALUE_SET_IE = "VALUE_SET_IE"; + public static final String VALUE_SET_NZ = "VALUE_SET_NZ"; + public static final String VALUE_SET_NO = "VALUE_SET_NO"; + public static final String VALUE_SET_KR = "VALUE_SET_KR"; + public static final String VALUE_ES_ES = "VALUE_ES_ES"; + public static final String VALUE_SET_CH = "VALUE_SET_CH"; + public static final String VALUE_SET_UK_CLIN = "VALUE_SET_UK_CLIN"; + public static final String VALUE_SET_UY = "VALUE_SET_UY"; + public static final String VALUE_SET_US_ICD10CM = "VALUE_SET_US_ICD10CM"; public static final String VS_ABSTRACT_CODE_HINT = "VS_ABSTRACT_CODE_HINT"; public static final String GENERAL_CODE = "GENERAL_CODE"; public static final String GENERAL_DESC = "GENERAL_DESC"; diff --git a/org.hl7.fhir.utilities/src/main/resources/rendering-phrases.properties b/org.hl7.fhir.utilities/src/main/resources/rendering-phrases.properties index cfb7839b1..decd77d61 100644 --- a/org.hl7.fhir.utilities/src/main/resources/rendering-phrases.properties +++ b/org.hl7.fhir.utilities/src/main/resources/rendering-phrases.properties @@ -947,3 +947,25 @@ DATA_REND_EVENING_LATE = Late Evening DATA_REND_NIGHT = Night DATA_REND_AFTER_SLEEP = After Sleep DATA_REND_IMMEDIATE = Immediate +VALUE_SET_AR = Argentinian Edition +VALUE_SET_AT = Austrian Edition +VALUE_SET_BE = Belgian Edition +VALUE_SET_CA_EN = Canadian English Edition +VALUE_SET_CA_FR = Canadian Canadian French Edition +VALUE_SET_EE = Estonian Edition +VALUE_SET_FI = Finnish Edition +VALUE_SET_DE = German Edition +VALUE_SET_IE = Irish Edition +VALUE_SET_NZ = New Zealand Edition +VALUE_SET_NO = Norwegian Edition +VALUE_SET_KR = Republic of Korea Edition (South Korea) +VALUE_ES_ES = Spanish National Edition +VALUE_SET_CH = Swiss Edition +VALUE_SET_UK_CLIN = UK Clinical Edition +VALUE_SET_UY = Uruguay Edition +VALUE_SET_US_ICD10CM = US Edition (with ICD-10-CM maps) + + + + + \ No newline at end of file diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/CliContext.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/CliContext.java index f583ea17e..57100e957 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/CliContext.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/CliContext.java @@ -878,13 +878,33 @@ public class CliContext { public String getSnomedCTCode() { if ("intl".equals(snomedCT)) return "900000000000207008"; if ("us".equals(snomedCT)) return "731000124108"; - if ("uk".equals(snomedCT)) return "999000041000000102"; + if ("us+icd10cm".equals(snomedCT)) return "5991000124107"; + if ("uk/clinical".equals(snomedCT)) return "999000021000000109"; + if ("uk".equals(snomedCT)) return "83821000000107"; if ("au".equals(snomedCT)) return "32506021000036107"; - if ("ca".equals(snomedCT)) return "20611000087101"; + if ("at".equals(snomedCT)) return "11000234105"; + if ("ca".equals(snomedCT)) return "20621000087109"; + if ("ca-en".equals(snomedCT)) return "20621000087109"; + if ("ca-fr".equals(snomedCT)) return "20611000087101"; if ("nl".equals(snomedCT)) return "11000146104"; if ("se".equals(snomedCT)) return "45991000052106"; if ("es".equals(snomedCT)) return "449081005"; + if ("es-ES".equals(snomedCT)) return "900000001000122104"; + if ("ar".equals(snomedCT)) return "11000221109"; if ("dk".equals(snomedCT)) return "554471000005108"; + if ("be".equals(snomedCT)) return "11000172109"; + if ("ee".equals(snomedCT)) return "11000181102"; + if ("fi".equals(snomedCT)) return "11000229106"; + if ("de".equals(snomedCT)) return "11000274103"; + if ("in".equals(snomedCT)) return "1121000189102"; + if ("ie".equals(snomedCT)) return "11000220105"; + if ("nl".equals(snomedCT)) return "11000146104"; + if ("nz".equals(snomedCT)) return "21000210109"; + if ("no".equals(snomedCT)) return "51000202101"; + if ("kr".equals(snomedCT)) return "11000267109"; + if ("se".equals(snomedCT)) return "45991000052106"; + if ("ch".equals(snomedCT)) return "2011000195101"; + if ("uy".equals(snomedCT)) return "5631000179106"; return snomedCT; }